summaryrefslogtreecommitdiff
path: root/src/pokemon.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pokemon.c')
-rw-r--r--src/pokemon.c308
1 files changed, 138 insertions, 170 deletions
diff --git a/src/pokemon.c b/src/pokemon.c
index 3a2e88aae..064e206a4 100644
--- a/src/pokemon.c
+++ b/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];