Misc battle documentation

This commit is contained in:
GriffinR
2021-01-22 23:22:37 -05:00
parent 4228509e95
commit a392cca928
24 changed files with 456 additions and 494 deletions

View File

@@ -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];