Misc battle documentation
This commit is contained in:
308
src/pokemon.c
308
src/pokemon.c
@@ -1350,32 +1350,32 @@ const struct SpindaSpot gSpindaSpotGraphics[] =
|
||||
|
||||
const s8 gNatureStatTable[NUM_NATURES][NUM_NATURE_STATS] =
|
||||
{
|
||||
// Atk Def Spd Sp.Atk Sp.Def
|
||||
{ 0, 0, 0, 0, 0}, // Hardy
|
||||
{ +1, -1, 0, 0, 0}, // Lonely
|
||||
{ +1, 0, -1, 0, 0}, // Brave
|
||||
{ +1, 0, 0, -1, 0}, // Adamant
|
||||
{ +1, 0, 0, 0, -1}, // Naughty
|
||||
{ -1, +1, 0, 0, 0}, // Bold
|
||||
{ 0, 0, 0, 0, 0}, // Docile
|
||||
{ 0, +1, -1, 0, 0}, // Relaxed
|
||||
{ 0, +1, 0, -1, 0}, // Impish
|
||||
{ 0, +1, 0, 0, -1}, // Lax
|
||||
{ -1, 0, +1, 0, 0}, // Timid
|
||||
{ 0, -1, +1, 0, 0}, // Hasty
|
||||
{ 0, 0, 0, 0, 0}, // Serious
|
||||
{ 0, 0, +1, -1, 0}, // Jolly
|
||||
{ 0, 0, +1, 0, -1}, // Naive
|
||||
{ -1, 0, 0, +1, 0}, // Modest
|
||||
{ 0, -1, 0, +1, 0}, // Mild
|
||||
{ 0, 0, -1, +1, 0}, // Quiet
|
||||
{ 0, 0, 0, 0, 0}, // Bashful
|
||||
{ 0, 0, 0, +1, -1}, // Rash
|
||||
{ -1, 0, 0, 0, +1}, // Calm
|
||||
{ 0, -1, 0, 0, +1}, // Gentle
|
||||
{ 0, 0, -1, 0, +1}, // Sassy
|
||||
{ 0, 0, 0, -1, +1}, // Careful
|
||||
{ 0, 0, 0, 0, 0}, // Quirky
|
||||
// Atk Def Spd Sp.Atk Sp.Def
|
||||
[NATURE_HARDY] = { 0, 0, 0, 0, 0},
|
||||
[NATURE_LONELY] = { +1, -1, 0, 0, 0},
|
||||
[NATURE_BRAVE] = { +1, 0, -1, 0, 0},
|
||||
[NATURE_ADAMANT] = { +1, 0, 0, -1, 0},
|
||||
[NATURE_NAUGHTY] = { +1, 0, 0, 0, -1},
|
||||
[NATURE_BOLD] = { -1, +1, 0, 0, 0},
|
||||
[NATURE_DOCILE] = { 0, 0, 0, 0, 0},
|
||||
[NATURE_RELAXED] = { 0, +1, -1, 0, 0},
|
||||
[NATURE_IMPISH] = { 0, +1, 0, -1, 0},
|
||||
[NATURE_LAX] = { 0, +1, 0, 0, -1},
|
||||
[NATURE_TIMID] = { -1, 0, +1, 0, 0},
|
||||
[NATURE_HASTY] = { 0, -1, +1, 0, 0},
|
||||
[NATURE_SERIOUS] = { 0, 0, 0, 0, 0},
|
||||
[NATURE_JOLLY] = { 0, 0, +1, -1, 0},
|
||||
[NATURE_NAIVE] = { 0, 0, +1, 0, -1},
|
||||
[NATURE_MODEST] = { -1, 0, 0, +1, 0},
|
||||
[NATURE_MILD] = { 0, -1, 0, +1, 0},
|
||||
[NATURE_QUIET] = { 0, 0, -1, +1, 0},
|
||||
[NATURE_BASHFUL] = { 0, 0, 0, 0, 0},
|
||||
[NATURE_RASH] = { 0, 0, 0, +1, -1},
|
||||
[NATURE_CALM] = { -1, 0, 0, 0, +1},
|
||||
[NATURE_GENTLE] = { 0, -1, 0, 0, +1},
|
||||
[NATURE_SASSY] = { 0, 0, -1, 0, +1},
|
||||
[NATURE_CAREFUL] = { 0, 0, 0, -1, +1},
|
||||
[NATURE_QUIRKY] = { 0, 0, 0, 0, 0},
|
||||
};
|
||||
|
||||
#include "data/pokemon/tmhm_learnsets.h"
|
||||
@@ -1937,119 +1937,119 @@ static const u8 sHoldEffectToType[][2] =
|
||||
{HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL},
|
||||
};
|
||||
|
||||
const struct SpriteTemplate gUnknown_08329D98[MAX_BATTLERS_COUNT] =
|
||||
const struct SpriteTemplate gBattlerSpriteTemplates[MAX_BATTLERS_COUNT] =
|
||||
{
|
||||
{ // B_POSITION_PLAYER_LEFT
|
||||
[B_POSITION_PLAYER_LEFT] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACB0,
|
||||
.oam = &gOamData_BattleSpritePlayerSide,
|
||||
.anims = NULL,
|
||||
.images = gUnknown_082FF3A8,
|
||||
.affineAnims = gUnknown_082FF618,
|
||||
.callback = sub_8039BB4,
|
||||
.images = gBattlerPicTable_PlayerLeft,
|
||||
.affineAnims = gAffineAnims_BattleSpritePlayerSide,
|
||||
.callback = SpriteCB_BattleSpriteStartSlideLeft,
|
||||
},
|
||||
{ // B_POSITION_OPPONENT_LEFT
|
||||
[B_POSITION_OPPONENT_LEFT] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACA8,
|
||||
.oam = &gOamData_BattleSpriteOpponentSide,
|
||||
.anims = NULL,
|
||||
.images = gUnknown_082FF3C8,
|
||||
.affineAnims = gUnknown_082FF694,
|
||||
.images = gBattlerPicTable_OpponentLeft,
|
||||
.affineAnims = gAffineAnims_BattleSpriteOpponentSide,
|
||||
.callback = SpriteCb_WildMon,
|
||||
},
|
||||
{ // B_POSITION_PLAYER_RIGHT
|
||||
[B_POSITION_PLAYER_RIGHT] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACB0,
|
||||
.oam = &gOamData_BattleSpritePlayerSide,
|
||||
.anims = NULL,
|
||||
.images = gUnknown_082FF3E8,
|
||||
.affineAnims = gUnknown_082FF618,
|
||||
.callback = sub_8039BB4,
|
||||
.images = gBattlerPicTable_PlayerRight,
|
||||
.affineAnims = gAffineAnims_BattleSpritePlayerSide,
|
||||
.callback = SpriteCB_BattleSpriteStartSlideLeft,
|
||||
},
|
||||
{ // B_POSITION_OPPONENT_RIGHT
|
||||
[B_POSITION_OPPONENT_RIGHT] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACA8,
|
||||
.oam = &gOamData_BattleSpriteOpponentSide,
|
||||
.anims = NULL,
|
||||
.images = gUnknown_082FF408,
|
||||
.affineAnims = gUnknown_082FF694,
|
||||
.images = gBattlerPicTable_OpponentRight,
|
||||
.affineAnims = gAffineAnims_BattleSpriteOpponentSide,
|
||||
.callback = SpriteCb_WildMon
|
||||
},
|
||||
};
|
||||
|
||||
static const struct SpriteTemplate gSpriteTemplateTable_TrainerBackSprites[] =
|
||||
static const struct SpriteTemplate sTrainerBackSpriteTemplates[] =
|
||||
{
|
||||
{
|
||||
[TRAINER_BACK_PIC_BRENDAN] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACB0,
|
||||
.oam = &gOamData_BattleSpritePlayerSide,
|
||||
.anims = NULL,
|
||||
.images = gTrainerBackPicTable_Brendan,
|
||||
.affineAnims = gUnknown_082FF618,
|
||||
.callback = sub_8039BB4,
|
||||
.affineAnims = gAffineAnims_BattleSpritePlayerSide,
|
||||
.callback = SpriteCB_BattleSpriteStartSlideLeft,
|
||||
},
|
||||
{
|
||||
[TRAINER_BACK_PIC_MAY] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACB0,
|
||||
.oam = &gOamData_BattleSpritePlayerSide,
|
||||
.anims = NULL,
|
||||
.images = gTrainerBackPicTable_May,
|
||||
.affineAnims = gUnknown_082FF618,
|
||||
.callback = sub_8039BB4,
|
||||
.affineAnims = gAffineAnims_BattleSpritePlayerSide,
|
||||
.callback = SpriteCB_BattleSpriteStartSlideLeft,
|
||||
},
|
||||
{
|
||||
[TRAINER_BACK_PIC_RED] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACB0,
|
||||
.oam = &gOamData_BattleSpritePlayerSide,
|
||||
.anims = NULL,
|
||||
.images = gTrainerBackPicTable_Red,
|
||||
.affineAnims = gUnknown_082FF618,
|
||||
.callback = sub_8039BB4,
|
||||
.affineAnims = gAffineAnims_BattleSpritePlayerSide,
|
||||
.callback = SpriteCB_BattleSpriteStartSlideLeft,
|
||||
},
|
||||
{
|
||||
[TRAINER_BACK_PIC_LEAF] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACB0,
|
||||
.oam = &gOamData_BattleSpritePlayerSide,
|
||||
.anims = NULL,
|
||||
.images = gTrainerBackPicTable_Leaf,
|
||||
.affineAnims = gUnknown_082FF618,
|
||||
.callback = sub_8039BB4,
|
||||
.affineAnims = gAffineAnims_BattleSpritePlayerSide,
|
||||
.callback = SpriteCB_BattleSpriteStartSlideLeft,
|
||||
},
|
||||
{
|
||||
[TRAINER_BACK_PIC_RUBY_SAPPHIRE_BRENDAN] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACB0,
|
||||
.oam = &gOamData_BattleSpritePlayerSide,
|
||||
.anims = NULL,
|
||||
.images = gTrainerBackPicTable_RubySapphireBrendan,
|
||||
.affineAnims = gUnknown_082FF618,
|
||||
.callback = sub_8039BB4,
|
||||
.affineAnims = gAffineAnims_BattleSpritePlayerSide,
|
||||
.callback = SpriteCB_BattleSpriteStartSlideLeft,
|
||||
},
|
||||
{
|
||||
[TRAINER_BACK_PIC_RUBY_SAPPHIRE_MAY] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACB0,
|
||||
.oam = &gOamData_BattleSpritePlayerSide,
|
||||
.anims = NULL,
|
||||
.images = gTrainerBackPicTable_RubySapphireMay,
|
||||
.affineAnims = gUnknown_082FF618,
|
||||
.callback = sub_8039BB4,
|
||||
.affineAnims = gAffineAnims_BattleSpritePlayerSide,
|
||||
.callback = SpriteCB_BattleSpriteStartSlideLeft,
|
||||
},
|
||||
{
|
||||
[TRAINER_BACK_PIC_WALLY] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACB0,
|
||||
.oam = &gOamData_BattleSpritePlayerSide,
|
||||
.anims = NULL,
|
||||
.images = gTrainerBackPicTable_Wally,
|
||||
.affineAnims = gUnknown_082FF618,
|
||||
.callback = sub_8039BB4,
|
||||
.affineAnims = gAffineAnims_BattleSpritePlayerSide,
|
||||
.callback = SpriteCB_BattleSpriteStartSlideLeft,
|
||||
},
|
||||
{
|
||||
[TRAINER_BACK_PIC_STEVEN] = {
|
||||
.tileTag = 0xFFFF,
|
||||
.paletteTag = 0,
|
||||
.oam = &gOamData_831ACB0,
|
||||
.oam = &gOamData_BattleSpritePlayerSide,
|
||||
.anims = NULL,
|
||||
.images = gTrainerBackPicTable_Steven,
|
||||
.affineAnims = gUnknown_082FF618,
|
||||
.callback = sub_8039BB4,
|
||||
.affineAnims = gAffineAnims_BattleSpritePlayerSide,
|
||||
.callback = SpriteCB_BattleSpriteStartSlideLeft,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -2623,14 +2623,15 @@ void CreateObedientMon(struct Pokemon *mon, u16 species, u8 level, u8 fixedIV, u
|
||||
SetMonData(mon, MON_DATA_OBEDIENCE, &obedient);
|
||||
}
|
||||
|
||||
bool8 sub_80688F8(u8 caseId, u8 battlerId)
|
||||
// If FALSE, should load this game's Deoxys form. If TRUE, should load normal Deoxys form
|
||||
bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId)
|
||||
{
|
||||
switch (caseId)
|
||||
{
|
||||
case 0:
|
||||
default:
|
||||
return FALSE;
|
||||
case 1:
|
||||
case 1: // Player's side in battle
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
|
||||
return FALSE;
|
||||
if (!gMain.inBattle)
|
||||
@@ -2640,7 +2641,7 @@ bool8 sub_80688F8(u8 caseId, u8 battlerId)
|
||||
break;
|
||||
case 2:
|
||||
break;
|
||||
case 3:
|
||||
case 3: // Summary Screen
|
||||
if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI))
|
||||
return FALSE;
|
||||
if (!gMain.inBattle)
|
||||
@@ -2650,7 +2651,7 @@ bool8 sub_80688F8(u8 caseId, u8 battlerId)
|
||||
return FALSE;
|
||||
case 4:
|
||||
break;
|
||||
case 5:
|
||||
case 5: // In move animation, e.g. in Role Play or Snatch
|
||||
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
|
||||
{
|
||||
if (!gMain.inBattle)
|
||||
@@ -3454,7 +3455,7 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition)
|
||||
else if (gUnknown_020249B4[1])
|
||||
gMultiuseSpriteTemplate = gUnknown_020249B4[1]->templates[battlerPosition];
|
||||
else
|
||||
gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
|
||||
gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
|
||||
|
||||
gMultiuseSpriteTemplate.paletteTag = speciesTag;
|
||||
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
|
||||
@@ -3470,7 +3471,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit
|
||||
gMultiuseSpriteTemplate.paletteTag = trainerSpriteId;
|
||||
if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT)
|
||||
{
|
||||
gMultiuseSpriteTemplate = gSpriteTemplateTable_TrainerBackSprites[trainerSpriteId];
|
||||
gMultiuseSpriteTemplate = sTrainerBackSpriteTemplates[trainerSpriteId];
|
||||
gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId];
|
||||
}
|
||||
else
|
||||
@@ -3478,7 +3479,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit
|
||||
if (gMonSpritesGfxPtr != NULL)
|
||||
gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
|
||||
else
|
||||
gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
|
||||
gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
|
||||
gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[trainerSpriteId];
|
||||
}
|
||||
}
|
||||
@@ -3488,7 +3489,7 @@ void SetMultiuseSpriteTemplateToTrainerFront(u16 arg0, u8 battlerPosition)
|
||||
if (gMonSpritesGfxPtr != NULL)
|
||||
gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition];
|
||||
else
|
||||
gMultiuseSpriteTemplate = gUnknown_08329D98[battlerPosition];
|
||||
gMultiuseSpriteTemplate = gBattlerSpriteTemplates[battlerPosition];
|
||||
|
||||
gMultiuseSpriteTemplate.paletteTag = arg0;
|
||||
gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[arg0];
|
||||
@@ -5594,96 +5595,63 @@ u16 SpeciesToCryId(u16 species)
|
||||
return gSpeciesIdToCryId[species - (SPECIES_TREECKO - 1)];
|
||||
}
|
||||
|
||||
void sub_806D544(u16 species, u32 personality, u8 *dest)
|
||||
#define DRAW_SPINDA_SPOTS \
|
||||
{ \
|
||||
int i; \
|
||||
for (i = 0; i < 4; i++) \
|
||||
{ \
|
||||
int j; \
|
||||
u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); \
|
||||
u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); \
|
||||
\
|
||||
for (j = 0; j < 16; j++) \
|
||||
{ \
|
||||
int k; \
|
||||
s32 row = gSpindaSpotGraphics[i].image[j]; \
|
||||
\
|
||||
for (k = x; k < x + 16; k++) \
|
||||
{ \
|
||||
u8 *val = dest + ((k / 8) * 32) + \
|
||||
((k % 8) / 2) + \
|
||||
((y >> 3) << 8) + \
|
||||
((y & 7) << 2); \
|
||||
\
|
||||
if (row & 1) \
|
||||
{ \
|
||||
if (k & 1) \
|
||||
{ \
|
||||
if ((u8)((*val & 0xF0) - 0x10) <= 0x20) \
|
||||
*val += 0x40; \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
if ((u8)((*val & 0xF) - 0x01) <= 0x02) \
|
||||
*val += 0x04; \
|
||||
} \
|
||||
} \
|
||||
\
|
||||
row >>= 1; \
|
||||
} \
|
||||
\
|
||||
y++; \
|
||||
} \
|
||||
\
|
||||
personality >>= 8; \
|
||||
} \
|
||||
}
|
||||
|
||||
static void DrawSpindaSpotsUnused(u16 species, u32 personality, u8 *dest)
|
||||
{
|
||||
if (species == SPECIES_SPINDA
|
||||
&& dest != gMonSpritesGfxPtr->sprites.ptr[0]
|
||||
&& dest != gMonSpritesGfxPtr->sprites.ptr[2])
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
int j;
|
||||
u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
|
||||
u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
|
||||
|
||||
for (j = 0; j < 16; j++)
|
||||
{
|
||||
int k;
|
||||
s32 row = gSpindaSpotGraphics[i].image[j];
|
||||
|
||||
for (k = x; k < x + 16; k++)
|
||||
{
|
||||
u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
|
||||
|
||||
if (row & 1)
|
||||
{
|
||||
if (k & 1)
|
||||
{
|
||||
if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
|
||||
*val += 0x40;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((u8)((*val & 0xF) - 0x01) <= 0x02)
|
||||
*val += 0x04;
|
||||
}
|
||||
}
|
||||
|
||||
row >>= 1;
|
||||
}
|
||||
|
||||
y++;
|
||||
}
|
||||
|
||||
personality >>= 8;
|
||||
}
|
||||
}
|
||||
DRAW_SPINDA_SPOTS;
|
||||
}
|
||||
|
||||
void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, u8 a4)
|
||||
void DrawSpindaSpots(u16 species, u32 personality, u8 *dest, bool8 isFrontPic)
|
||||
{
|
||||
if (species == SPECIES_SPINDA && a4)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < 4; i++)
|
||||
{
|
||||
int j;
|
||||
u8 x = gSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8);
|
||||
u8 y = gSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8);
|
||||
|
||||
for (j = 0; j < 16; j++)
|
||||
{
|
||||
int k;
|
||||
s32 row = gSpindaSpotGraphics[i].image[j];
|
||||
|
||||
for (k = x; k < x + 16; k++)
|
||||
{
|
||||
u8 *val = dest + ((k / 8) * 32) + ((k % 8) / 2) + ((y >> 3) << 8) + ((y & 7) << 2);
|
||||
|
||||
if (row & 1)
|
||||
{
|
||||
if (k & 1)
|
||||
{
|
||||
if ((u8)((*val & 0xF0) - 0x10) <= 0x20)
|
||||
*val += 0x40;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((u8)((*val & 0xF) - 0x01) <= 0x02)
|
||||
*val += 0x04;
|
||||
}
|
||||
}
|
||||
|
||||
row >>= 1;
|
||||
}
|
||||
|
||||
y++;
|
||||
}
|
||||
|
||||
personality >>= 8;
|
||||
}
|
||||
}
|
||||
if (species == SPECIES_SPINDA && isFrontPic)
|
||||
DRAW_SPINDA_SPOTS;
|
||||
}
|
||||
|
||||
void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies)
|
||||
@@ -6824,7 +6792,7 @@ static void sub_806F160(struct Unknown_806F160_Struct* structPtr)
|
||||
u16 i, j;
|
||||
for (i = 0; i < structPtr->field_0_0; i++)
|
||||
{
|
||||
structPtr->templates[i] = gUnknown_08329D98[i];
|
||||
structPtr->templates[i] = gBattlerSpriteTemplates[i];
|
||||
for (j = 0; j < structPtr->field_1; j++)
|
||||
{
|
||||
structPtr->frameImages[i * structPtr->field_1 + j].data = &structPtr->byteArrays[i][j * 0x800];
|
||||
|
||||
Reference in New Issue
Block a user