diff options
author | Kurausukun <lord.uber1@gmail.com> | 2021-03-19 14:34:58 -0400 |
---|---|---|
committer | Kurausukun <lord.uber1@gmail.com> | 2021-03-19 14:34:58 -0400 |
commit | c94e5e9ab0b2b65c8c6275f84043807b2743d6f2 (patch) | |
tree | b188427bb1942695f32e14ee3fe137855d638c8c /src | |
parent | 0643255c85d0ebd5212e731c9fad3b43d0d99a10 (diff) | |
parent | ed16a7409ae9c808a110975dec1930f9f949a6d6 (diff) |
Merge remote-tracking branch 'upstream/master' into port_matchings
Diffstat (limited to 'src')
70 files changed, 2775 insertions, 2713 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c index 41f44a42c..0b011b0f3 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -2259,7 +2259,7 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2) RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(8)), 0x2000, DMA3_32BIT); RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(28)), 0x1000, DMA3_32BIT); - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); CpuFill16(toBG_2, animBg.bgTiles, 0x1000); CpuFill16(toBG_2, animBg.bgTilemap, 0x800); @@ -2278,13 +2278,14 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2) LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], animBg.paletteId * 16, 0x20); CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + animBg.paletteId * 32), 0x20); - sub_80BCEF4(1, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles, animBg.bgTilemap, animBg.tilesOffset); + CopyBattlerSpriteToBg(1, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles, + animBg.bgTilemap, animBg.tilesOffset); } else { RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(12)), 0x2000, DMA3_32BIT); RequestDma3Fill(0, (void*)(BG_SCREEN_ADDR(30)), 0x1000, DMA3_32BIT); - sub_80752C8(&animBg, 2); + GetBattleAnimBgData(&animBg, 2); CpuFill16(0, animBg.bgTiles + 0x1000, 0x1000); CpuFill16(0, animBg.bgTilemap + 0x400, 0x800); SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); @@ -2302,7 +2303,8 @@ void MoveBattlerSpriteToBG(u8 battlerId, bool8 toBG_2) LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], 0x90, 0x20); CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + 0x120), 0x20); - sub_80BCEF4(2, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles + 0x1000, animBg.bgTilemap + 0x400, animBg.tilesOffset); + CopyBattlerSpriteToBg(2, 0, 0, GetBattlerPosition(battlerId), animBg.paletteId, animBg.bgTiles + 0x1000, + animBg.bgTilemap + 0x400, animBg.tilesOffset); } } @@ -2326,20 +2328,20 @@ void sub_80730C0(u16 a, u16 *b, s32 c, u8 d) } } -void sub_8073128(bool8 to_BG2) +void ResetBattleAnimBg(bool8 to_BG2) { struct BattleAnimBgData animBg; - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); if (!to_BG2) { - sub_8075358(1); + InitBattleAnimBg(1); gBattle_BG1_X = 0; gBattle_BG1_Y = 0; } else { - sub_8075358(2); + InitBattleAnimBg(2); gBattle_BG2_X = 0; gBattle_BG2_Y = 0; } @@ -2353,7 +2355,7 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId) spriteId = gTasks[taskId].data[0]; palIndex = gTasks[taskId].data[6]; - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); x = gTasks[taskId].data[1] - (gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x); y = gTasks[taskId].data[2] - (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y); @@ -2429,13 +2431,13 @@ static void sub_807331C(u8 taskId) if (sMonAnimTaskIdArray[0] != 0xFF) { - sub_8073128(toBG_2); + ResetBattleAnimBg(toBG_2); DestroyTask(sMonAnimTaskIdArray[0]); sMonAnimTaskIdArray[0] = 0xFF; } if (gTasks[taskId].data[0] > 1) { - sub_8073128(toBG_2 ^ 1); + ResetBattleAnimBg(toBG_2 ^ 1); DestroyTask(sMonAnimTaskIdArray[1]); sMonAnimTaskIdArray[1] = 0xFF; } @@ -2541,10 +2543,10 @@ static void sub_8073558(u8 taskId) toBG_2 = TRUE; if (IsBattlerSpriteVisible(battlerId)) - sub_8073128(toBG_2); + ResetBattleAnimBg(toBG_2); if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK)) - sub_8073128(toBG_2 ^ 1); + ResetBattleAnimBg(toBG_2 ^ 1); DestroyTask(taskId); } @@ -3303,9 +3305,9 @@ static void ScriptCmd_doublebattle_2D(void) gSprites[spriteId].oam.priority = 3; if (priority == 1) - sub_8073128(FALSE); + ResetBattleAnimBg(FALSE); else - sub_8073128(TRUE); + ResetBattleAnimBg(TRUE); } } } diff --git a/src/battle_anim_effects_2.c b/src/battle_anim_effects_2.c index ac4e9db30..dcffedb0e 100644 --- a/src/battle_anim_effects_2.c +++ b/src/battle_anim_effects_2.c @@ -1738,7 +1738,7 @@ void AnimCoinThrow(struct Sprite *sprite) sprite->data[0] = gBattleAnimArgs[4]; sprite->data[2] = r6; sprite->data[4] = r7; - sprite->callback = sub_80756A4; + sprite->callback = BattleAnim_InitAndRunLinearTranslationWithDuration; StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); } @@ -2992,12 +2992,12 @@ void AnimTask_LoadMusicNotesPals(u8 taskId) for (i = 1; i < 3; i++) paletteNums[i] = AllocSpritePalette(ANIM_SPRITES_START - i); - gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); - LZDecompressWram(gBattleAnimSpritePal_MusicNotes2, gMonSpritesGfxPtr->field_17C); + gMonSpritesGfxPtr->multiUseBuffer = AllocZeroed(0x2000); + LZDecompressWram(gBattleAnimSpritePal_MusicNotes2, gMonSpritesGfxPtr->multiUseBuffer); for (i = 0; i < 3; i++) - LoadPalette(&gMonSpritesGfxPtr->field_17C[i * 32], (u16)((paletteNums[i] << 4) + 0x100), 32); + LoadPalette(&gMonSpritesGfxPtr->multiUseBuffer[i * 32], (u16)((paletteNums[i] << 4) + 0x100), 32); - FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); + FREE_AND_SET_NULL(gMonSpritesGfxPtr->multiUseBuffer); DestroyAnimVisualTask(taskId); } @@ -3232,7 +3232,7 @@ void AnimTask_HeartsBackground(u8 taskId) gBattle_BG1_Y = 0; SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimBg_AttractTilemap); AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnimBg_AttractGfx, animBg.tilesOffset); LoadCompressedPalette(gBattleAnimBg_AttractPal, animBg.paletteId * 16, 32); @@ -3282,8 +3282,8 @@ static void HeartsBackground_Step(u8 taskId) } break; case 3: - sub_80752A0(&animBg); - sub_8075358(animBg.bgId); + GetBattleAnimBg1Data(&animBg); + InitBattleAnimBg(animBg.bgId); gTasks[taskId].data[12]++; break; case 4: @@ -3313,7 +3313,7 @@ void AnimTask_ScaryFace(u8 taskId) gBattle_BG1_Y = 0; SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); if (IsContest()) LZDecompressVram(gBattleAnimBgTilemap_ScaryFaceContest, animBg.bgTilemap); @@ -3370,9 +3370,9 @@ static void ScaryFace_Step(u8 taskId) } break; case 3: - sub_80752A0(&animBg); - sub_8075358(1); - sub_8075358(2); + GetBattleAnimBg1Data(&animBg); + InitBattleAnimBg(1); + InitBattleAnimBg(2); gTasks[taskId].data[12]++; // fall through case 4: diff --git a/src/battle_anim_effects_3.c b/src/battle_anim_effects_3.c index 52fc64870..ab12c02b4 100644 --- a/src/battle_anim_effects_3.c +++ b/src/battle_anim_effects_3.c @@ -2216,7 +2216,7 @@ void AnimTask_TransformMon(u8 taskId) break; case 2: HandleSpeciesGfxDataChange(gBattleAnimAttacker, gBattleAnimTarget, gTasks[taskId].data[10]); - sub_8075300(&animBg, gBattleAnimAttacker); + GetBattleAnimBgDataByPriorityRank(&animBg, gBattleAnimAttacker); if (IsContest()) position = 0; else @@ -2287,7 +2287,7 @@ void AnimTask_MorningSunLightBeam(u8 taskId) if (!IsContest()) SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnim_MorningSunTilemap); AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnim_MorningSunGfx, animBg.tilesOffset); LoadCompressedPalette(gBattleAnim_MorningSunPal, animBg.paletteId * 16, 32); @@ -2348,8 +2348,8 @@ void AnimTask_MorningSunLightBeam(u8 taskId) } break; case 4: - sub_80752A0(&animBg); - sub_8075358(animBg.bgId); + GetBattleAnimBg1Data(&animBg); + InitBattleAnimBg(animBg.bgId); if (!IsContest()) SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); @@ -2467,7 +2467,7 @@ void AnimTask_DoomDesireLightBeam(u8 taskId) if (!IsContest()) SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnim_MorningSunTilemap); AnimLoadCompressedBgGfx(animBg.bgId, gBattleAnim_MorningSunGfx, animBg.tilesOffset); LoadCompressedPalette(gBattleAnim_MorningSunPal, animBg.paletteId * 16, 32); @@ -2540,8 +2540,8 @@ void AnimTask_DoomDesireLightBeam(u8 taskId) gTasks[taskId].data[0] = 1; break; case 5: - sub_80752A0(&animBg); - sub_8075358(animBg.bgId); + GetBattleAnimBg1Data(&animBg); + InitBattleAnimBg(animBg.bgId); if (!IsContest()) SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 0); diff --git a/src/battle_anim_mons.c b/src/battle_anim_mons.c index ee5d4017d..46f62a03c 100644 --- a/src/battle_anim_mons.c +++ b/src/battle_anim_mons.c @@ -19,9 +19,9 @@ #define IS_DOUBLE_BATTLE() (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) static u8 GetBattlerSpriteFinal_Y(u8 battlerId, u16 species, bool8 a3); -static void sub_8075658(struct Sprite *sprite); -static void sub_80757E8(struct Sprite *sprite); -static bool8 sub_80758DC(void); +static void PlayerThrowBall_RunLinearTranslation_ThenceSetCBtoStoredInData6(struct Sprite *sprite); +static void SpriteCB_RunAnimFastLinearTranslation(struct Sprite *sprite); +static bool8 Dummy_ReturnFalse(void); static void AnimThrowProjectile_Step(struct Sprite *sprite); static void sub_80760D0(u8 taskId); static void AnimTask_BlendMonInAndOutSetup(struct Task *task); @@ -695,10 +695,10 @@ void SetAnimSpriteInitialXOffset(struct Sprite *sprite, s16 xOffset) void InitAnimArcTranslation(struct Sprite *sprite) { - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; + sprite->sTransl_InitX = sprite->pos1.x; + sprite->sTransl_InitY = sprite->pos1.y; InitAnimLinearTranslation(sprite); - sprite->data[6] = 0x8000 / sprite->data[0]; + sprite->data[6] = 0x8000 / sprite->sTransl_Speed; sprite->data[7] = 0; } @@ -707,7 +707,7 @@ bool8 TranslateAnimHorizontalArc(struct Sprite *sprite) if (AnimTranslateLinear(sprite)) return TRUE; sprite->data[7] += sprite->data[6]; - sprite->pos2.y += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]); + sprite->pos2.y += Sin((u8)(sprite->data[7] >> 8), sprite->sTransl_ArcAmpl); return FALSE; } @@ -716,7 +716,7 @@ bool8 TranslateAnimVerticalArc(struct Sprite *sprite) if (AnimTranslateLinear(sprite)) return TRUE; sprite->data[7] += sprite->data[6]; - sprite->pos2.x += Sin((u8)(sprite->data[7] >> 8), sprite->data[5]); + sprite->pos2.x += Sin((u8)(sprite->data[7] >> 8), sprite->sTransl_ArcAmpl); return FALSE; } @@ -801,26 +801,26 @@ bool8 IsDoubleBattle(void) return IS_DOUBLE_BATTLE(); } -void sub_80752A0(struct BattleAnimBgData *animBgData) +void GetBattleAnimBg1Data(struct BattleAnimBgData *animBgData) { - animBgData->bgTiles = gUnknown_2022BB8; - animBgData->bgTilemap = (u16 *)gUnknown_2022BBC; + animBgData->bgTiles = gBattleAnimMons_BgTilesBuffer; + animBgData->bgTilemap = (u16 *)gBattleAnimMons_BgTilemapBuffer; animBgData->paletteId = 8; animBgData->bgId = 1; animBgData->tilesOffset = 0x200; animBgData->unused = 0; } -void sub_80752C8(struct BattleAnimBgData *animBgData, u32 arg1) +void GetBattleAnimBgData(struct BattleAnimBgData *animBgData, u32 bgId) { - if (arg1 == 1) + if (bgId == 1) { - sub_80752A0(animBgData); + GetBattleAnimBg1Data(animBgData); } else { - animBgData->bgTiles = gUnknown_2022BB8; - animBgData->bgTilemap = (u16 *)gUnknown_2022BBC; + animBgData->bgTiles = gBattleAnimMons_BgTilesBuffer; + animBgData->bgTilemap = (u16 *)gBattleAnimMons_BgTilemapBuffer; animBgData->paletteId = 9; animBgData->bgId = 2; animBgData->tilesOffset = 0x300; @@ -828,10 +828,10 @@ void sub_80752C8(struct BattleAnimBgData *animBgData, u32 arg1) } } -void sub_8075300(struct BattleAnimBgData *animBgData, u8 unused) +void GetBattleAnimBgDataByPriorityRank(struct BattleAnimBgData *animBgData, u8 unused) { - animBgData->bgTiles = gUnknown_2022BB8; - animBgData->bgTilemap = (u16 *)gUnknown_2022BBC; + animBgData->bgTiles = gBattleAnimMons_BgTilesBuffer; + animBgData->bgTilemap = (u16 *)gBattleAnimMons_BgTilemapBuffer; if (GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) == 1) { animBgData->paletteId = 8; @@ -848,11 +848,11 @@ void sub_8075300(struct BattleAnimBgData *animBgData, u8 unused) } } -void sub_8075358(u32 bgId) +void InitBattleAnimBg(u32 bgId) { struct BattleAnimBgData animBgData; - sub_80752C8(&animBgData, bgId); + GetBattleAnimBgData(&animBgData, bgId); CpuFill32(0, animBgData.bgTiles, 0x2000); LoadBgTiles(bgId, animBgData.bgTiles, 0x2000, animBgData.tilesOffset); FillBgTilemapBufferRect(bgId, 0, 0, 0, 32, 64, 17); @@ -861,9 +861,9 @@ void sub_8075358(u32 bgId) void AnimLoadCompressedBgGfx(u32 bgId, const u32 *src, u32 tilesOffset) { - CpuFill32(0, gUnknown_2022BB8, 0x2000); - LZDecompressWram(src, gUnknown_2022BB8); - LoadBgTiles(bgId, gUnknown_2022BB8, 0x2000, tilesOffset); + CpuFill32(0, gBattleAnimMons_BgTilesBuffer, 0x2000); + LZDecompressWram(src, gBattleAnimMons_BgTilesBuffer); + LoadBgTiles(bgId, gBattleAnimMons_BgTilesBuffer, 0x2000, tilesOffset); } void InitAnimBgTilemapBuffer(u32 bgId, const void *src) @@ -883,7 +883,7 @@ u8 GetBattleBgPaletteNum(void) return 2; } -void sub_8075458(bool8 arg0) +void ToggleBg3Mode(bool8 arg0) { if (!arg0) { @@ -919,15 +919,15 @@ void InitSpriteDataForLinearTranslation(struct Sprite *sprite) void InitAnimLinearTranslation(struct Sprite *sprite) { - s32 x = sprite->data[2] - sprite->data[1]; - s32 y = sprite->data[4] - sprite->data[3]; + s32 x = sprite->sTransl_DestX - sprite->sTransl_InitX; + s32 y = sprite->sTransl_DestY - sprite->sTransl_InitY; bool8 movingLeft = x < 0; bool8 movingUp = y < 0; u16 xDelta = abs(x) << 8; u16 yDelta = abs(y) << 8; - xDelta = xDelta / sprite->data[0]; - yDelta = yDelta / sprite->data[0]; + xDelta = xDelta / sprite->sTransl_Speed; + yDelta = yDelta / sprite->sTransl_Speed; if (movingLeft) xDelta |= 1; @@ -947,19 +947,19 @@ void InitAnimLinearTranslation(struct Sprite *sprite) void StartAnimLinearTranslation(struct Sprite *sprite) { - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; + sprite->sTransl_InitX = sprite->pos1.x; + sprite->sTransl_InitY = sprite->pos1.y; InitAnimLinearTranslation(sprite); - sprite->callback = sub_807563C; + sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6; sprite->callback(sprite); } -void sub_80755B8(struct Sprite *sprite) +void PlayerThrowBall_StartAnimLinearTranslation(struct Sprite *sprite) { - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; + sprite->sTransl_InitX = sprite->pos1.x; + sprite->sTransl_InitY = sprite->pos1.y; InitAnimLinearTranslation(sprite); - sprite->callback = sub_8075658; + sprite->callback = PlayerThrowBall_RunLinearTranslation_ThenceSetCBtoStoredInData6; sprite->callback(sprite); } @@ -990,47 +990,47 @@ bool8 AnimTranslateLinear(struct Sprite *sprite) return FALSE; } -void sub_807563C(struct Sprite *sprite) +void RunLinearTranslation_ThenceSetCBtoStoredInData6(struct Sprite *sprite) { if (AnimTranslateLinear(sprite)) SetCallbackToStoredInData6(sprite); } -static void sub_8075658(struct Sprite *sprite) +static void PlayerThrowBall_RunLinearTranslation_ThenceSetCBtoStoredInData6(struct Sprite *sprite) { - sub_801236C(sprite); + UpdatePlayerPosInThrowAnim(sprite); if (AnimTranslateLinear(sprite)) SetCallbackToStoredInData6(sprite); } -void sub_8075678(struct Sprite *sprite) +void BattleAnim_InitLinearTranslationWithDuration(struct Sprite *sprite) { - s32 v1 = abs(sprite->data[2] - sprite->data[1]) << 8; + s32 v1 = abs(sprite->sTransl_DestX - sprite->sTransl_InitX) << 8; - sprite->data[0] = v1 / sprite->data[0]; + sprite->sTransl_Speed = v1 / sprite->sTransl_Duration; InitAnimLinearTranslation(sprite); } -void sub_80756A4(struct Sprite *sprite) +void BattleAnim_InitAndRunLinearTranslationWithDuration(struct Sprite *sprite) { - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; - sub_8075678(sprite); - sprite->callback = sub_807563C; + sprite->sTransl_InitX = sprite->pos1.x; + sprite->sTransl_InitY = sprite->pos1.y; + BattleAnim_InitLinearTranslationWithDuration(sprite); + sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6; sprite->callback(sprite); } static void InitAnimFastLinearTranslation(struct Sprite *sprite) { - s32 xDiff = sprite->data[2] - sprite->data[1]; - s32 yDiff = sprite->data[4] - sprite->data[3]; + s32 xDiff = sprite->sTransl_DestX - sprite->sTransl_InitX; + s32 yDiff = sprite->sTransl_DestY - sprite->sTransl_InitY; bool8 xSign = xDiff < 0; bool8 ySign = yDiff < 0; u16 x2 = abs(xDiff) << 4; u16 y2 = abs(yDiff) << 4; - x2 /= sprite->data[0]; - y2 /= sprite->data[0]; + x2 /= sprite->sTransl_Duration; + y2 /= sprite->sTransl_Duration; if (xSign) x2 |= 1; else @@ -1047,10 +1047,10 @@ static void InitAnimFastLinearTranslation(struct Sprite *sprite) void InitAndRunAnimFastLinearTranslation(struct Sprite *sprite) { - sprite->data[1] = sprite->pos1.x; - sprite->data[3] = sprite->pos1.y; + sprite->sTransl_InitX = sprite->pos1.x; + sprite->sTransl_InitY = sprite->pos1.y; InitAnimFastLinearTranslation(sprite); - sprite->callback = sub_80757E8; + sprite->callback = SpriteCB_RunAnimFastLinearTranslation; sprite->callback(sprite); } @@ -1080,7 +1080,7 @@ bool8 AnimFastTranslateLinear(struct Sprite *sprite) return FALSE; } -static void sub_80757E8(struct Sprite *sprite) +static void SpriteCB_RunAnimFastLinearTranslation(struct Sprite *sprite) { if (AnimFastTranslateLinear(sprite)) SetCallbackToStoredInData6(sprite); @@ -1099,7 +1099,7 @@ void sub_8075830(struct Sprite *sprite) sprite->data[1] = sprite->pos1.x; sprite->data[3] = sprite->pos1.y; InitAnimFastLinearTranslationWithSpeed(sprite); - sprite->callback = sub_80757E8; + sprite->callback = SpriteCB_RunAnimFastLinearTranslation; sprite->callback(sprite); } @@ -1112,7 +1112,7 @@ void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) src.xScale = xScale; src.yScale = yScale; src.rotation = rotation; - if (sub_80758DC()) + if (Dummy_ReturnFalse()) src.xScale = -src.xScale; i = gSprites[spriteId].oam.matrixNum; ObjAffineSet(&src, &matrix, 1, 2); @@ -1122,7 +1122,7 @@ void SetSpriteRotScale(u8 spriteId, s16 xScale, s16 yScale, u16 rotation) gOamMatrices[i].d = matrix.d; } -static bool8 sub_80758DC(void) +static bool8 Dummy_ReturnFalse(void) { return FALSE; } @@ -1177,7 +1177,7 @@ void TrySetSpriteRotScale(struct Sprite *sprite, bool8 recalcCenterVector, s16 x src.xScale = xScale; src.yScale = yScale; src.rotation = rotation; - if (sub_80758DC()) + if (Dummy_ReturnFalse()) src.xScale = -src.xScale; i = sprite->oam.matrixNum; ObjAffineSet(&src, &matrix, 1, 2); @@ -1869,20 +1869,20 @@ u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority u16 sheet = LoadSpriteSheet(&gUnknown_83AE084[a3]); u16 palette = AllocSpritePalette(gUnknown_83AE054[a3].paletteTag); - if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->field_17C == NULL) - gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); + if (gMonSpritesGfxPtr != NULL && gMonSpritesGfxPtr->multiUseBuffer == NULL) + gMonSpritesGfxPtr->multiUseBuffer = AllocZeroed(0x2000); if (!isBackpic) { LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); - if (a10 == 1 || sub_804455C(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) + if (a10 == 1 || ShouldIgnoreDeoxysForm(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) LoadSpecialPokePic_DontHandleDeoxys(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->field_17C, + gMonSpritesGfxPtr->multiUseBuffer, species, personality, TRUE); else LoadSpecialPokePic(&gMonFrontPicTable[species], - gMonSpritesGfxPtr->field_17C, + gMonSpritesGfxPtr->multiUseBuffer, species, personality, TRUE); @@ -1890,21 +1890,21 @@ u8 sub_80768D0(u16 species, bool8 isBackpic, u8 a3, s16 x, s16 y, u8 subpriority else { LoadCompressedPalette(GetMonSpritePalFromSpeciesAndPersonality(species, trainerId, personality), (palette * 0x10) + 0x100, 0x20); - if (a10 == 1 || sub_804455C(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) + if (a10 == 1 || ShouldIgnoreDeoxysForm(5, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != 0) LoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], - gMonSpritesGfxPtr->field_17C, + gMonSpritesGfxPtr->multiUseBuffer, species, personality, FALSE); else LoadSpecialPokePic(&gMonBackPicTable[species], - gMonSpritesGfxPtr->field_17C, + gMonSpritesGfxPtr->multiUseBuffer, species, personality, FALSE); } - RequestDma3Copy(gMonSpritesGfxPtr->field_17C, (void *)(OBJ_VRAM0 + (sheet * 0x20)), 0x800, 1); - FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); + RequestDma3Copy(gMonSpritesGfxPtr->multiUseBuffer, (void *)(OBJ_VRAM0 + (sheet * 0x20)), 0x800, 1); + FREE_AND_SET_NULL(gMonSpritesGfxPtr->multiUseBuffer); if (!isBackpic) spriteId = CreateSprite(&gUnknown_83AE054[a3], x, y + gMonFrontPicCoords[species].y_offset, subpriority); else diff --git a/src/battle_anim_special.c b/src/battle_anim_special.c index a919b0371..a1cf5a491 100644 --- a/src/battle_anim_special.c +++ b/src/battle_anim_special.c @@ -15,7 +15,6 @@ #include "constants/items.h" #include "constants/moves.h" #include "constants/songs.h" -#include "constants/pokemon.h" // Defines #define TAG_PARTICLES_POKEBALL 55020 @@ -31,58 +30,61 @@ #define TAG_PARTICLES_LUXURYBALL 55030 #define TAG_PARTICLES_PREMIERBALL 55031 +#define TAG_HEALTHBOX_PALS_1 55049 +#define TAG_HEALTHBOX_PALS_2 55050 + #define HIHALF(n) (((n) & 0xFFFF0000) >> 16) #define LOHALF(n) ((n) & 0xFFFF) // RAM -int sUnknown_3005424; -u16 sUnknown_3005428; -u16 sUnknown_300542C; +UNUSED u32 gMonShrinkDuration; +UNUSED u16 gMonShrinkDelta; +UNUSED u16 gMonShrinkDistance; // Function Declarations -static void sub_80EEDF4(u8); -static void sub_80EF1CC(u8); -static void sub_80EF698(u8); -static void sub_80EF8C0(struct Sprite *); -static void sub_80EF7EC(u8); -static void sub_80EF864(u8); -static void sub_80EF8F0(struct Sprite *); -static void sub_80F0478(struct Sprite *); -static void sub_80EF9B4(struct Sprite *); -static void sub_80EFA0C(struct Sprite *); -static void sub_80EFB58(struct Sprite *); -static void sub_80EFB9C(struct Sprite *); -static void sub_80EFF80(struct Sprite *); -static void sub_80EFCA0(struct Sprite *); -static void sub_80EFCEC(struct Sprite *); -static void sub_80EFFA4(struct Sprite *); -static void sub_80F02B0(struct Sprite *); -static void sub_80EFFC4(struct Sprite *); -static void sub_80F01B8(struct Sprite *); -static void sub_80F00A4(struct Sprite *); -static void sub_80F018C(struct Sprite *); -static void sub_80F05B4(u8); -static void sub_80F0278(struct Sprite *); -static void sub_80F0378(struct Sprite *); -static void sub_80F04B4(struct Sprite *); +static void AnimTask_UnusedLevelUpHealthBox_Step(u8); +static void AnimTask_FlashHealthboxOnLevelUp_Step(u8); +static void AnimTask_ThrowBall_WaitAnimObjComplete(u8); +static void SpriteCB_ThrowBall_Init(struct Sprite *); +static void AnimTask_ThrowBallSpecial_PlaySfx(u8); +static void AnimTask_ThrowBallSpecial_ResetPlayerSprite(u8); +static void SpriteCB_ThrowBall_ArcFlight(struct Sprite *); +static void TrainerBallBlock(struct Sprite *); +static void SpriteCB_ThrowBall_TenFrameDelay(struct Sprite *); +static void SpriteCB_ThrowBall_ShrinkMon(struct Sprite *); +static void SpriteCB_ThrowBall_InitialFall(struct Sprite *); +static void SpriteCB_ThrowBall_Bounce(struct Sprite *); +static void SpriteCB_ThrowBall_DelayThenBreakOut(struct Sprite *); +static void SpriteCB_ThrowBall_InitShake(struct Sprite *); +static void SpriteCB_ThrowBall_DoShake(struct Sprite *); +static void SpriteCB_ThrowBall_InitClick(struct Sprite *); +static void SpriteCB_ThrowBall_BeginBreakOut(struct Sprite *); +static void SpriteCB_ThrowBall_DoClick(struct Sprite *); +static void CreateStarsWhenBallClicks(struct Sprite *); +static void SpriteCB_ThrowBall_FinishClick(struct Sprite *); +static void BattleAnimObj_SignalEnd(struct Sprite *); +static void LoadBallParticleGfx(u8); +static void SpriteCB_BallCaptureSuccessStar(struct Sprite *); +static void SpriteCB_ThrowBall_RunBreakOut(struct Sprite *); +static void TrainerBallBlock2(struct Sprite *); static void GhostBallDodge(struct Sprite *sprite); -static void sub_80F0574(struct Sprite *sprite); +static void GhostBallDodge2(struct Sprite *sprite); static void PokeBallOpenParticleAnimation_Step1(struct Sprite *); static void PokeBallOpenParticleAnimation_Step2(struct Sprite *); static void DestroyBallOpenAnimationParticle(struct Sprite *); static void FanOutBallOpenParticles_Step1(struct Sprite *); static void RepeatBallOpenParticleAnimation_Step1(struct Sprite *); static void PremierBallOpenParticleAnimation_Step1(struct Sprite *); -static void sub_80F12E0(u8); -static void sub_80F1370(u8); -static void sub_80F13C0(u8); -static void sub_80F181C(u8); -static void sub_80F1A2C(struct Sprite *); -static void sub_80F1A80(struct Sprite *); -static void sub_80F19E0(u8); -static void sub_80F1BCC(struct Sprite *); -static void sub_80F1C04(struct Sprite *); -static void sub_80F1C30(struct Sprite *); +static void Task_FadeMon_ToBallColor(u8); +static void Task_FadeMon_ToNormal(u8); +static void Task_FadeMon_ToNormal_Step(u8); +static void AnimTask_ShinySparkles(u8); +static void SpriteCB_ShinySparkles_1(struct Sprite *); +static void SpriteCB_ShinySparkles_2(struct Sprite *); +static void AnimTask_ShinySparkles_WaitSparkles(u8); +static void SpriteCB_SafariBaitOrRock_WaitPlayerThrow(struct Sprite *); +static void SpriteCB_SafariBaitOrRock_ArcFlight(struct Sprite *); +static void SpriteCB_SafariBaitOrRock_Finish(struct Sprite *); static void PokeBallOpenParticleAnimation(u8); static void GreatBallOpenParticleAnimation(u8); static void SafariBallOpenParticleAnimation(u8); @@ -92,65 +94,65 @@ static void DiveBallOpenParticleAnimation(u8); static void RepeatBallOpenParticleAnimation(u8); static void TimerBallOpenParticleAnimation(u8); static void PremierBallOpenParticleAnimation(u8); -static void sub_80F1B3C(struct Sprite *); +static void SpriteCB_SafariBaitOrRock_Init(struct Sprite *); // Data -struct BallCaptureSuccessStarData +struct CaptureStar { s8 xOffset; s8 yOffset; - s8 unk2; + s8 amplitude; }; -static const struct BallCaptureSuccessStarData sBallCaptureSuccessStarData[] = +static const struct CaptureStar sCaptureStar[] = { { .xOffset = 10, .yOffset = 2, - .unk2 = -3, + .amplitude = -3, }, { .xOffset = 15, .yOffset = 0, - .unk2 = -4, + .amplitude = -4, }, { .xOffset = -10, .yOffset = 2, - .unk2 = -4, + .amplitude = -4, }, }; const struct CompressedSpriteSheet gBallParticleSpritesheets[] = { - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_POKEBALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_GREATBALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SAFARIBALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_ULTRABALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_MASTERBALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NETBALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DIVEBALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NESTBALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_REPEATBALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_TIMERBALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUXURYBALL}, - {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PREMIERBALL}, + [BALL_POKE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_POKEBALL}, + [BALL_GREAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_GREATBALL}, + [BALL_SAFARI] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_SAFARIBALL}, + [BALL_ULTRA] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_ULTRABALL}, + [BALL_MASTER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_MASTERBALL}, + [BALL_NET] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NETBALL}, + [BALL_DIVE] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_DIVEBALL}, + [BALL_NEST] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_NESTBALL}, + [BALL_REPEAT] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_REPEATBALL}, + [BALL_TIMER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_TIMERBALL}, + [BALL_LUXURY] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_LUXURYBALL}, + [BALL_PREMIER] = {gBattleAnimSpriteGfx_Particles, 0x100, TAG_PARTICLES_PREMIERBALL}, }; const struct CompressedSpritePalette gBallParticlePalettes[] = { - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_POKEBALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_GREATBALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SAFARIBALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_ULTRABALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_MASTERBALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NETBALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DIVEBALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NESTBALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_REPEATBALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_TIMERBALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUXURYBALL}, - {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PREMIERBALL}, + [BALL_POKE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_POKEBALL}, + [BALL_GREAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_GREATBALL}, + [BALL_SAFARI] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_SAFARIBALL}, + [BALL_ULTRA] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_ULTRABALL}, + [BALL_MASTER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_MASTERBALL}, + [BALL_NET] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NETBALL}, + [BALL_DIVE] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_DIVEBALL}, + [BALL_NEST] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_NESTBALL}, + [BALL_REPEAT] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_REPEATBALL}, + [BALL_TIMER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_TIMERBALL}, + [BALL_LUXURY] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_LUXURYBALL}, + [BALL_PREMIER] = {gBattleAnimSpritePal_CircleImpact, TAG_PARTICLES_PREMIERBALL}, }; static const union AnimCmd sAnim_RegularBall[] = @@ -207,39 +209,39 @@ static const union AnimCmd *const sAnims_BallParticles[] = static const u8 sBallParticleAnimNums[] = { - [BALL_POKE] = 0, - [BALL_GREAT] = 0, - [BALL_SAFARI] = 0, - [BALL_ULTRA] = 5, - [BALL_MASTER] = 1, - [BALL_NET] = 2, - [BALL_DIVE] = 2, - [BALL_NEST] = 3, - [BALL_REPEAT] = 5, - [BALL_TIMER] = 5, - [BALL_LUXURY] = 4, + [BALL_POKE] = 0, + [BALL_GREAT] = 0, + [BALL_SAFARI] = 0, + [BALL_ULTRA] = 5, + [BALL_MASTER] = 1, + [BALL_NET] = 2, + [BALL_DIVE] = 2, + [BALL_NEST] = 3, + [BALL_REPEAT] = 5, + [BALL_TIMER] = 5, + [BALL_LUXURY] = 4, [BALL_PREMIER] = 4, }; static const TaskFunc sBallParticleAnimationFuncs[] = { - PokeBallOpenParticleAnimation, - GreatBallOpenParticleAnimation, - SafariBallOpenParticleAnimation, - UltraBallOpenParticleAnimation, - MasterBallOpenParticleAnimation, - SafariBallOpenParticleAnimation, - DiveBallOpenParticleAnimation, - UltraBallOpenParticleAnimation, - RepeatBallOpenParticleAnimation, - TimerBallOpenParticleAnimation, - GreatBallOpenParticleAnimation, - PremierBallOpenParticleAnimation, + [BALL_POKE] = PokeBallOpenParticleAnimation, + [BALL_GREAT] = GreatBallOpenParticleAnimation, + [BALL_SAFARI] = SafariBallOpenParticleAnimation, + [BALL_ULTRA] = UltraBallOpenParticleAnimation, + [BALL_MASTER] = MasterBallOpenParticleAnimation, + [BALL_NET] = SafariBallOpenParticleAnimation, + [BALL_DIVE] = DiveBallOpenParticleAnimation, + [BALL_NEST] = UltraBallOpenParticleAnimation, + [BALL_REPEAT] = RepeatBallOpenParticleAnimation, + [BALL_TIMER] = TimerBallOpenParticleAnimation, + [BALL_LUXURY] = GreatBallOpenParticleAnimation, + [BALL_PREMIER] = PremierBallOpenParticleAnimation, }; static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = { - { + [BALL_POKE] = { .tileTag = TAG_PARTICLES_POKEBALL, .paletteTag = TAG_PARTICLES_POKEBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -248,7 +250,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_GREAT] = { .tileTag = TAG_PARTICLES_GREATBALL, .paletteTag = TAG_PARTICLES_GREATBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -257,7 +259,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_SAFARI] = { .tileTag = TAG_PARTICLES_SAFARIBALL, .paletteTag = TAG_PARTICLES_SAFARIBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -266,7 +268,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_ULTRA] = { .tileTag = TAG_PARTICLES_ULTRABALL, .paletteTag = TAG_PARTICLES_ULTRABALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -275,7 +277,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_MASTER] = { .tileTag = TAG_PARTICLES_MASTERBALL, .paletteTag = TAG_PARTICLES_MASTERBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -284,7 +286,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_NET] = { .tileTag = TAG_PARTICLES_NETBALL, .paletteTag = TAG_PARTICLES_NETBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -293,7 +295,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_DIVE] = { .tileTag = TAG_PARTICLES_DIVEBALL, .paletteTag = TAG_PARTICLES_DIVEBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -302,7 +304,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_NEST] = { .tileTag = TAG_PARTICLES_NESTBALL, .paletteTag = TAG_PARTICLES_NESTBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -311,7 +313,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_REPEAT] = { .tileTag = TAG_PARTICLES_REPEATBALL, .paletteTag = TAG_PARTICLES_REPEATBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -320,7 +322,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_TIMER] = { .tileTag = TAG_PARTICLES_TIMERBALL, .paletteTag = TAG_PARTICLES_TIMERBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -329,7 +331,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_LUXURY] = { .tileTag = TAG_PARTICLES_LUXURYBALL, .paletteTag = TAG_PARTICLES_LUXURYBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -338,7 +340,7 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = .affineAnims = gDummySpriteAffineAnimTable, .callback = SpriteCallbackDummy, }, - { + [BALL_PREMIER] = { .tileTag = TAG_PARTICLES_PREMIERBALL, .paletteTag = TAG_PARTICLES_PREMIERBALL, .oam = &gOamData_AffineOff_ObjNormal_8x8, @@ -351,17 +353,17 @@ static const struct SpriteTemplate sBallParticlesSpriteTemplates[] = static const u16 sBallOpenFadeColors[] = { - [BALL_POKE] = RGB(31, 22, 30), - [BALL_GREAT] = RGB(16, 23, 30), - [BALL_SAFARI] = RGB(23, 30, 20), - [BALL_ULTRA] = RGB(31, 31, 15), - [BALL_MASTER] = RGB(23, 20, 28), - [BALL_NET] = RGB(21, 31, 25), - [BALL_DIVE] = RGB(12, 25, 30), - [BALL_NEST] = RGB(30, 27, 10), - [BALL_REPEAT] = RGB(31, 24, 16), - [BALL_TIMER] = RGB(29, 30, 30), - [BALL_LUXURY] = RGB(31, 17, 10), + [BALL_POKE] = RGB(31, 22, 30), + [BALL_GREAT] = RGB(16, 23, 30), + [BALL_SAFARI] = RGB(23, 30, 20), + [BALL_ULTRA] = RGB(31, 31, 15), + [BALL_MASTER] = RGB(23, 20, 28), + [BALL_NET] = RGB(21, 31, 25), + [BALL_DIVE] = RGB(12, 25, 30), + [BALL_NEST] = RGB(30, 27, 10), + [BALL_REPEAT] = RGB(31, 24, 16), + [BALL_TIMER] = RGB(29, 30, 30), + [BALL_LUXURY] = RGB(31, 17, 10), [BALL_PREMIER] = RGB(31, 9, 10), // Unused @@ -383,18 +385,18 @@ const struct SpriteTemplate gSafariBaitSpriteTemplate = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80F1B3C, + .callback = SpriteCB_SafariBaitOrRock_Init, }; -static const union AnimCmd sUnknown_840C204[] = +static const union AnimCmd sSpriteAnim_SafariRock_0[] = { ANIMCMD_FRAME(64, 1), ANIMCMD_END, }; -static const union AnimCmd *const sSpriteAnimTable_840C20C[] = +static const union AnimCmd *const sSpriteAnimTable_SafariRock[] = { - sUnknown_840C204, + sSpriteAnim_SafariRock_0, }; const struct SpriteTemplate gSafariRockTemplate = @@ -402,16 +404,16 @@ const struct SpriteTemplate gSafariRockTemplate = .tileTag = ANIM_TAG_ROCKS, .paletteTag = ANIM_TAG_ROCKS, .oam = &gOamData_AffineOff_ObjNormal_32x32, - .anims = sSpriteAnimTable_840C20C, + .anims = sSpriteAnimTable_SafariRock, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80F1B3C, + .callback = SpriteCB_SafariBaitOrRock_Init, }; // Functions -void sub_80EEC0C(u8 taskId) +UNUSED void AnimTask_UnusedLevelUpHealthBox(u8 taskId) { - struct BattleAnimBgData unknownStruct; + struct BattleAnimBgData animBgData; u8 healthBoxSpriteId; u8 battler; u8 spriteId1, spriteId2, spriteId3, spriteId4; @@ -442,19 +444,19 @@ void sub_80EEC0C(u8 taskId) gSprites[spriteId4].oam.objMode = ST_OAM_OBJ_WINDOW; gSprites[spriteId3].callback = SpriteCallbackDummy; gSprites[spriteId4].callback = SpriteCallbackDummy; - sub_80752A0(&unknownStruct); - AnimLoadCompressedBgTilemap(unknownStruct.bgId, gUnknown_D2EC24_Tilemap); - AnimLoadCompressedBgGfx(unknownStruct.bgId, gUnknown_D2EC24_Gfx, unknownStruct.tilesOffset); - LoadCompressedPalette(gCureBubblesPal, unknownStruct.paletteId << 4, 32); + GetBattleAnimBg1Data(&animBgData); + AnimLoadCompressedBgTilemap(animBgData.bgId, gUnknown_D2EC24_Tilemap); + AnimLoadCompressedBgGfx(animBgData.bgId, gUnknown_D2EC24_Gfx, animBgData.tilesOffset); + LoadCompressedPalette(gCureBubblesPal, animBgData.paletteId << 4, 32); gBattle_BG1_X = -gSprites[spriteId3].pos1.x + 32; gBattle_BG1_Y = -gSprites[spriteId3].pos1.y - 32; gTasks[taskId].data[1] = 640; gTasks[taskId].data[0] = spriteId3; gTasks[taskId].data[2] = spriteId4; - gTasks[taskId].func = sub_80EEDF4; + gTasks[taskId].func = AnimTask_UnusedLevelUpHealthBox_Step; } -static void sub_80EEDF4(u8 taskId) +static void AnimTask_UnusedLevelUpHealthBox_Step(u8 taskId) { u8 spriteId1, spriteId2; u8 battler; @@ -488,7 +490,7 @@ static void sub_80EEDF4(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); if (gTasks[taskId].data[12] == 0) { - sub_8073128(0); + ResetBattleAnimBg(0); gBattle_WIN0H = 0; gBattle_WIN0V = 0; SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR | WININ_WIN1_BG_ALL | WININ_WIN1_OBJ | WININ_WIN1_CLR); @@ -514,7 +516,7 @@ static void sub_80EEDF4(u8 taskId) } } -void sub_80EEFC8(u8 *paletteId1, u8 *paletteId2, u8 battler) +void DoLoadHealthboxPalsForLevelUp(u8 *paletteId1, u8 *paletteId2, u8 battler) { u8 healthBoxSpriteId; u8 spriteId1, spriteId2; @@ -523,8 +525,8 @@ void sub_80EEFC8(u8 *paletteId1, u8 *paletteId2, u8 battler) healthBoxSpriteId = gHealthboxSpriteIds[battler]; spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; spriteId2 = gSprites[healthBoxSpriteId].data[5]; - *paletteId1 = AllocSpritePalette(0xD709); - *paletteId2 = AllocSpritePalette(0xD70A); + *paletteId1 = AllocSpritePalette(TAG_HEALTHBOX_PALS_1); + *paletteId2 = AllocSpritePalette(TAG_HEALTHBOX_PALS_2); offset1 = (gSprites[healthBoxSpriteId].oam.paletteNum * 16) + 0x100; offset2 = (gSprites[spriteId2].oam.paletteNum * 16) + 0x100; LoadPalette(&gPlttBufferUnfaded[offset1], *paletteId1 * 16 + 0x100, 0x20); @@ -538,11 +540,11 @@ void AnimTask_LoadHealthboxPalsForLevelUp(u8 taskId) { u8 paletteId1, paletteId2; - sub_80EEFC8(&paletteId1, &paletteId2, gBattleAnimAttacker); + DoLoadHealthboxPalsForLevelUp(&paletteId1, &paletteId2, gBattleAnimAttacker); DestroyAnimVisualTask(taskId); } -void sub_80EF0E0(u8 battler) +void DoFreeHealthboxPalsForLevelUp(u8 battler) { u8 healthBoxSpriteId; u8 spriteId1, spriteId2; @@ -551,10 +553,10 @@ void sub_80EF0E0(u8 battler) healthBoxSpriteId = gHealthboxSpriteIds[battler]; spriteId1 = gSprites[healthBoxSpriteId].oam.affineParam; spriteId2 = gSprites[healthBoxSpriteId].data[5]; - FreeSpritePaletteByTag(0xD709); - FreeSpritePaletteByTag(0xD70A); - paletteId1 = IndexOfSpritePaletteTag(0xD6FF); - paletteId2 = IndexOfSpritePaletteTag(0xD704); + FreeSpritePaletteByTag(TAG_HEALTHBOX_PALS_1); + FreeSpritePaletteByTag(TAG_HEALTHBOX_PALS_2); + paletteId1 = IndexOfSpritePaletteTag(TAG_HEALTHBOX_PAL); + paletteId2 = IndexOfSpritePaletteTag(TAG_HEALTHBAR_PAL); gSprites[healthBoxSpriteId].oam.paletteNum = paletteId1; gSprites[spriteId1].oam.paletteNum = paletteId1; gSprites[spriteId2].oam.paletteNum = paletteId2; @@ -562,7 +564,7 @@ void sub_80EF0E0(u8 battler) void AnimTask_FreeHealthboxPalsForLevelUp(u8 taskId) { - sub_80EF0E0(gBattleAnimAttacker); + DoFreeHealthboxPalsForLevelUp(gBattleAnimAttacker); DestroyAnimVisualTask(taskId); } @@ -570,10 +572,10 @@ void AnimTask_FlashHealthboxOnLevelUp(u8 taskId) { gTasks[taskId].data[10] = gBattleAnimArgs[0]; gTasks[taskId].data[11] = gBattleAnimArgs[1]; - gTasks[taskId].func = sub_80EF1CC; + gTasks[taskId].func = AnimTask_FlashHealthboxOnLevelUp_Step; } -static void sub_80EF1CC(u8 taskId) +static void AnimTask_FlashHealthboxOnLevelUp_Step(u8 taskId) { u8 paletteNum; int paletteOffset, colorOffset; @@ -582,7 +584,7 @@ static void sub_80EF1CC(u8 taskId) if (gTasks[taskId].data[0]++ >= gTasks[taskId].data[11]) { gTasks[taskId].data[0] = 0; - paletteNum = IndexOfSpritePaletteTag(0xD709); + paletteNum = IndexOfSpritePaletteTag(TAG_HEALTHBOX_PALS_1); colorOffset = gTasks[taskId].data[10] == 0 ? 6 : 2; switch (gTasks[taskId].data[1]) { @@ -748,13 +750,13 @@ void AnimTask_ThrowBall(u8 taskId) gSprites[spriteId].data[0] = 34; gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) - 16; - gSprites[spriteId].callback = sub_80EF8C0; + gSprites[spriteId].callback = SpriteCB_ThrowBall_Init; gBattleSpritesDataPtr->animationData->field_9_x2 = gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible; gTasks[taskId].data[0] = spriteId; - gTasks[taskId].func = sub_80EF698; + gTasks[taskId].func = AnimTask_ThrowBall_WaitAnimObjComplete; } -static void sub_80EF698(u8 taskId) +static void AnimTask_ThrowBall_WaitAnimObjComplete(u8 taskId) { u8 spriteId = gTasks[taskId].data[0]; @@ -789,23 +791,23 @@ void AnimTask_ThrowBallSpecial(u8 taskId) gSprites[spriteId].data[1] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_X); gSprites[spriteId].data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, BATTLER_COORD_Y) - 16; gSprites[spriteId].callback = SpriteCallbackDummy; - gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].callback = sub_8012354; + gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].callback = SpriteCB_PlayerThrowInit; gTasks[taskId].data[0] = spriteId; - gTasks[taskId].func = sub_80EF7EC; + gTasks[taskId].func = AnimTask_ThrowBallSpecial_PlaySfx; } -static void sub_80EF7EC(u8 taskId) +static void AnimTask_ThrowBallSpecial_PlaySfx(u8 taskId) { if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animCmdIndex == 1) { PlaySE12WithPanning(SE_BALL_THROW, 0); - gSprites[gTasks[taskId].data[0]].callback = sub_80EF8C0; - CreateTask(sub_80EF864, 10); - gTasks[taskId].func = sub_80EF698; + gSprites[gTasks[taskId].data[0]].callback = SpriteCB_ThrowBall_Init; + CreateTask(AnimTask_ThrowBallSpecial_ResetPlayerSprite, 10); + gTasks[taskId].func = AnimTask_ThrowBall_WaitAnimObjComplete; } } -static void sub_80EF864(u8 taskId) +static void AnimTask_ThrowBallSpecial_ResetPlayerSprite(u8 taskId) { if (gSprites[gBattlerSpriteIds[GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)]].animEnded) { @@ -814,21 +816,21 @@ static void sub_80EF864(u8 taskId) } } -static void sub_80EF8C0(struct Sprite *sprite) +static void SpriteCB_ThrowBall_Init(struct Sprite *sprite) { - u16 temp = sprite->data[1]; - u16 temp2 = sprite->data[2]; + u16 destX = sprite->data[1]; + u16 destY = sprite->data[2]; - sprite->data[1] = sprite->pos1.x; - sprite->data[2] = temp; - sprite->data[3] = sprite->pos1.y; - sprite->data[4] = temp2; - sprite->data[5] = -40; + sprite->sTransl_InitX = sprite->pos1.x; + sprite->sTransl_DestX = destX; + sprite->sTransl_InitY = sprite->pos1.y; + sprite->sTransl_DestY = destY; + sprite->sTransl_ArcAmpl = -40; InitAnimArcTranslation(sprite); - sprite->callback = sub_80EF8F0; + sprite->callback = SpriteCB_ThrowBall_ArcFlight; } -static void sub_80EF8F0(struct Sprite *sprite) +static void SpriteCB_ThrowBall_ArcFlight(struct Sprite *sprite) { int i; u8 ballId; @@ -837,7 +839,7 @@ static void sub_80EF8F0(struct Sprite *sprite) { if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_TRAINER_BLOCK) { - sprite->callback = sub_80F0478; + sprite->callback = TrainerBallBlock; } else if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_GHOST_DODGE) { @@ -855,7 +857,7 @@ static void sub_80EF8F0(struct Sprite *sprite) sprite->data[i] = 0; sprite->data[5] = 0; - sprite->callback = sub_80EF9B4; + sprite->callback = SpriteCB_ThrowBall_TenFrameDelay; ballId = ItemIdToBallId(gLastUsedItem); switch (ballId) @@ -869,17 +871,17 @@ static void sub_80EF8F0(struct Sprite *sprite) } } -static void sub_80EF9B4(struct Sprite *sprite) +static void SpriteCB_ThrowBall_TenFrameDelay(struct Sprite *sprite) { if (++sprite->data[5] == 10) { sprite->data[5] = CreateTask(TaskDummy, 50); - sprite->callback = sub_80EFA0C; + sprite->callback = SpriteCB_ThrowBall_ShrinkMon; gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0; } } -static void sub_80EFA0C(struct Sprite *sprite) +static void SpriteCB_ThrowBall_ShrinkMon(struct Sprite *sprite) { u8 spriteId; u8 taskId; @@ -894,10 +896,10 @@ static void sub_80EFA0C(struct Sprite *sprite) case 0: PrepareBattlerSpriteForRotScale(spriteId, ST_OAM_OBJ_NORMAL); gTasks[taskId].data[10] = 256; - sUnknown_3005424 = 28; - sUnknown_300542C = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y); - sUnknown_3005428 = (u32)(sUnknown_300542C * 256) / 28; - gTasks[taskId].data[2] = sUnknown_3005428; + gMonShrinkDuration = 28; + gMonShrinkDistance = (gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) - (sprite->pos1.y + sprite->pos2.y); + gMonShrinkDelta = (gMonShrinkDistance * 256) / gMonShrinkDuration; + gTasks[taskId].data[2] = gMonShrinkDelta; gTasks[taskId].data[0]++; break; case 1: @@ -919,13 +921,13 @@ static void sub_80EFA0C(struct Sprite *sprite) DestroyTask(taskId); StartSpriteAnim(sprite, 2); sprite->data[5] = 0; - sprite->callback = sub_80EFB58; + sprite->callback = SpriteCB_ThrowBall_InitialFall; } break; } } -static void sub_80EFB58(struct Sprite *sprite) +static void SpriteCB_ThrowBall_InitialFall(struct Sprite *sprite) { int angle; @@ -937,11 +939,11 @@ static void sub_80EFB58(struct Sprite *sprite) angle = 0; sprite->pos1.y += Cos(angle, 40); sprite->pos2.y = -Cos(angle, sprite->data[4]); - sprite->callback = sub_80EFB9C; + sprite->callback = SpriteCB_ThrowBall_Bounce; } } -static void sub_80EFB9C(struct Sprite *sprite) +static void SpriteCB_ThrowBall_Bounce(struct Sprite *sprite) { bool8 lastBounce; int bounceCount; @@ -998,18 +1000,18 @@ static void sub_80EFB9C(struct Sprite *sprite) if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_NO_SHAKES) { sprite->data[5] = 0; - sprite->callback = sub_80EFF80; + sprite->callback = SpriteCB_ThrowBall_DelayThenBreakOut; } else { - sprite->callback = sub_80EFCA0; + sprite->callback = SpriteCB_ThrowBall_InitShake; sprite->data[4] = 1; sprite->data[5] = 0; } } } -static void sub_80EFCA0(struct Sprite *sprite) +static void SpriteCB_ThrowBall_InitShake(struct Sprite *sprite) { if (++sprite->data[3] == 31) { @@ -1017,12 +1019,12 @@ static void sub_80EFCA0(struct Sprite *sprite) sprite->affineAnimPaused = TRUE; StartSpriteAffineAnim(sprite, 1); gBattleSpritesDataPtr->animationData->field_C = 0; - sprite->callback = sub_80EFCEC; + sprite->callback = SpriteCB_ThrowBall_DoShake; PlaySE(SE_BALL); } } -static void sub_80EFCEC(struct Sprite *sprite) +static void SpriteCB_ThrowBall_DoShake(struct Sprite *sprite) { s8 state; u16 var0; @@ -1132,13 +1134,13 @@ static void sub_80EFCEC(struct Sprite *sprite) if (state == gBattleSpritesDataPtr->animationData->ballThrowCaseId) { sprite->affineAnimPaused = TRUE; - sprite->callback = sub_80EFF80; + sprite->callback = SpriteCB_ThrowBall_DelayThenBreakOut; } else { if (gBattleSpritesDataPtr->animationData->ballThrowCaseId == BALL_3_SHAKES_SUCCESS && state == 3) { - sprite->callback = sub_80EFFA4; + sprite->callback = SpriteCB_ThrowBall_InitClick; sprite->affineAnimPaused = TRUE; } else @@ -1166,25 +1168,25 @@ static void sub_80EFCEC(struct Sprite *sprite) } } -static void sub_80EFF80(struct Sprite *sprite) +static void SpriteCB_ThrowBall_DelayThenBreakOut(struct Sprite *sprite) { if (++sprite->data[5] == 31) { sprite->data[5] = 0; - sprite->callback = sub_80F02B0; + sprite->callback = SpriteCB_ThrowBall_BeginBreakOut; } } -static void sub_80EFFA4(struct Sprite *sprite) +static void SpriteCB_ThrowBall_InitClick(struct Sprite *sprite) { sprite->animPaused = TRUE; - sprite->callback = sub_80EFFC4; + sprite->callback = SpriteCB_ThrowBall_DoClick; sprite->data[3] = 0; sprite->data[4] = 0; sprite->data[5] = 0; } -static void sub_80EFFC4(struct Sprite *sprite) +static void SpriteCB_ThrowBall_DoClick(struct Sprite *sprite) { u8 *battler = &gBattleAnimTarget; @@ -1193,7 +1195,7 @@ static void sub_80EFFC4(struct Sprite *sprite) { PlaySE(SE_BALL_CLICK); BlendPalettes(0x10000 << sprite->oam.paletteNum, 6, RGB_BLACK); - sub_80F01B8(sprite); + CreateStarsWhenBallClicks(sprite); } else if (sprite->data[4] == 60) { @@ -1211,11 +1213,11 @@ static void sub_80EFFC4(struct Sprite *sprite) FreeOamMatrix(gSprites[gBattlerSpriteIds[*battler]].oam.matrixNum); DestroySprite(&gSprites[gBattlerSpriteIds[*battler]]); sprite->data[0] = 0; - sprite->callback = sub_80F00A4; + sprite->callback = SpriteCB_ThrowBall_FinishClick; } } -static void sub_80F00A4(struct Sprite *sprite) +static void SpriteCB_ThrowBall_FinishClick(struct Sprite *sprite) { u8 paletteIndex; @@ -1251,13 +1253,13 @@ static void sub_80F00A4(struct Sprite *sprite) SetGpuReg(REG_OFFSET_BLDCNT, 0); SetGpuReg(REG_OFFSET_BLDALPHA, 0); sprite->data[0] = 0; - sprite->callback = sub_80F018C; + sprite->callback = BattleAnimObj_SignalEnd; } break; } } -static void sub_80F018C(struct Sprite *sprite) +static void BattleAnimObj_SignalEnd(struct Sprite *sprite) { if (sprite->data[0] == 0) { @@ -1270,7 +1272,7 @@ static void sub_80F018C(struct Sprite *sprite) } } -static void sub_80F01B8(struct Sprite *sprite) +static void CreateStarsWhenBallClicks(struct Sprite *sprite) { u32 i; u8 subpriority; @@ -1285,37 +1287,37 @@ static void sub_80F01B8(struct Sprite *sprite) sprite->subpriority = 1; } - sub_80F05B4(4); + LoadBallParticleGfx(BALL_MASTER); for (i = 0; i < 3; i++) { - u8 spriteId = CreateSprite(&sBallParticlesSpriteTemplates[4], sprite->pos1.x, sprite->pos1.y, subpriority); + u8 spriteId = CreateSprite(&sBallParticlesSpriteTemplates[BALL_MASTER], sprite->pos1.x, sprite->pos1.y, subpriority); if (spriteId != MAX_SPRITES) { - gSprites[spriteId].data[0] = 24; - gSprites[spriteId].data[2] = sprite->pos1.x + sBallCaptureSuccessStarData[i].xOffset; - gSprites[spriteId].data[4] = sprite->pos1.y + sBallCaptureSuccessStarData[i].yOffset; - gSprites[spriteId].data[5] = sBallCaptureSuccessStarData[i].unk2; + gSprites[spriteId].sTransl_Speed = 24; + gSprites[spriteId].sTransl_DestX = sprite->pos1.x + sCaptureStar[i].xOffset; + gSprites[spriteId].sTransl_DestY = sprite->pos1.y + sCaptureStar[i].yOffset; + gSprites[spriteId].sTransl_ArcAmpl = sCaptureStar[i].amplitude; InitAnimArcTranslation(&gSprites[spriteId]); - gSprites[spriteId].callback = sub_80F0278; - StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[4]); + gSprites[spriteId].callback = SpriteCB_BallCaptureSuccessStar; + StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[BALL_MASTER]); } } } -static void sub_80F0278(struct Sprite *sprite) +static void SpriteCB_BallCaptureSuccessStar(struct Sprite *sprite) { sprite->invisible = !sprite->invisible; if (TranslateAnimHorizontalArc(sprite)) DestroySprite(sprite); } -static void sub_80F02B0(struct Sprite *sprite) +static void SpriteCB_ThrowBall_BeginBreakOut(struct Sprite *sprite) { u8 ballId; StartSpriteAnim(sprite, 1); StartSpriteAffineAnim(sprite, 0); - sprite->callback = sub_80F0378; + sprite->callback = SpriteCB_ThrowBall_RunBreakOut; ballId = ItemIdToBallId(gLastUsedItem); switch (ballId) { @@ -1331,7 +1333,7 @@ static void sub_80F02B0(struct Sprite *sprite) gSprites[gBattlerSpriteIds[gBattleAnimTarget]].data[1] = 0x1000; } -static void sub_80F0378(struct Sprite *sprite) +static void SpriteCB_ThrowBall_RunBreakOut(struct Sprite *sprite) { bool32 next = FALSE; @@ -1354,13 +1356,13 @@ static void sub_80F0378(struct Sprite *sprite) gSprites[gBattlerSpriteIds[gBattleAnimTarget]].pos2.y = 0; gSprites[gBattlerSpriteIds[gBattleAnimTarget]].invisible = gBattleSpritesDataPtr->animationData->field_9_x2; sprite->data[0] = 0; - sprite->callback = sub_80F018C; + sprite->callback = BattleAnimObj_SignalEnd; gDoingBattleAnim = FALSE; UpdateOamPriorityInAllHealthboxes(1); } } -static void sub_80F0478(struct Sprite *sprite) +static void TrainerBallBlock(struct Sprite *sprite) { int i; @@ -1370,10 +1372,10 @@ static void sub_80F0478(struct Sprite *sprite) for (i = 0; i < 6; i++) sprite->data[i] = 0; - sprite->callback = sub_80F04B4; + sprite->callback = TrainerBallBlock2; } -static void sub_80F04B4(struct Sprite *sprite) +static void TrainerBallBlock2(struct Sprite *sprite) { s16 var0 = sprite->data[0] + 0x800; s16 var1 = sprite->data[1] + 0x680; @@ -1386,7 +1388,7 @@ static void sub_80F04B4(struct Sprite *sprite) || sprite->pos1.x + sprite->pos2.x < -8) { sprite->data[0] = 0; - sprite->callback = sub_80F018C; + sprite->callback = BattleAnimObj_SignalEnd; gDoingBattleAnim = FALSE; UpdateOamPriorityInAllHealthboxes(1); } @@ -1405,10 +1407,10 @@ static void GhostBallDodge(struct Sprite *sprite) sprite->data[5] = 0x20; InitAnimArcTranslation(sprite); TranslateAnimVerticalArc(sprite); - sprite->callback = sub_80F0574; + sprite->callback = GhostBallDodge2; } -static void sub_80F0574(struct Sprite *sprite) +static void GhostBallDodge2(struct Sprite *sprite) { if (!TranslateAnimVerticalArc(sprite)) { @@ -1417,15 +1419,13 @@ static void sub_80F0574(struct Sprite *sprite) } sprite->data[0] = 0; - sprite->callback = sub_80F018C; + sprite->callback = BattleAnimObj_SignalEnd; gDoingBattleAnim = FALSE; UpdateOamPriorityInAllHealthboxes(1); } -static void sub_80F05B4(u8 ballId) +static void LoadBallParticleGfx(u8 ballId) { - u8 taskId; - if (GetSpriteTileStartByTag(gBallParticleSpritesheets[ballId].tag) == 0xFFFF) { LoadCompressedSpriteSheetUsingHeap(&gBallParticleSpritesheets[ballId]); @@ -1437,7 +1437,7 @@ u8 LaunchBallStarsTask(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId) { u8 taskId; - sub_80F05B4(ballId); + LoadBallParticleGfx(ballId); taskId = CreateTask(sBallParticleAnimationFuncs[ballId], 5); gTasks[taskId].data[1] = x; gTasks[taskId].data[2] = y; @@ -1448,7 +1448,7 @@ u8 LaunchBallStarsTask(u8 x, u8 y, u8 priority, u8 subpriority, u8 ballId) return taskId; } -void sub_80F0674(void) +static void IncrementBattleParticleCounter(void) { if (gMain.inBattle) gBattleSpritesDataPtr->animationData->field_A++; @@ -1473,7 +1473,7 @@ static void PokeBallOpenParticleAnimation(u8 taskId) spriteId = CreateSprite(&sBallParticlesSpriteTemplates[ballId], x, y, subpriority); if (spriteId != MAX_SPRITES) { - sub_80F0674(); + IncrementBattleParticleCounter(); StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]); gSprites[spriteId].callback = PokeBallOpenParticleAnimation_Step1; gSprites[spriteId].oam.priority = priority; @@ -1532,7 +1532,7 @@ static void TimerBallOpenParticleAnimation(u8 taskId) spriteId = CreateSprite(&sBallParticlesSpriteTemplates[ballId], x, y, subpriority); if (spriteId != MAX_SPRITES) { - sub_80F0674(); + IncrementBattleParticleCounter(); StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]); gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; gSprites[spriteId].oam.priority = priority; @@ -1566,7 +1566,7 @@ static void DiveBallOpenParticleAnimation(u8 taskId) spriteId = CreateSprite(&sBallParticlesSpriteTemplates[ballId], x, y, subpriority); if (spriteId != MAX_SPRITES) { - sub_80F0674(); + IncrementBattleParticleCounter(); StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]); gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; gSprites[spriteId].oam.priority = priority; @@ -1601,7 +1601,7 @@ static void SafariBallOpenParticleAnimation(u8 taskId) spriteId = CreateSprite(&sBallParticlesSpriteTemplates[ballId], x, y, subpriority); if (spriteId != MAX_SPRITES) { - sub_80F0674(); + IncrementBattleParticleCounter(); StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]); gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; gSprites[spriteId].oam.priority = priority; @@ -1636,7 +1636,7 @@ static void UltraBallOpenParticleAnimation(u8 taskId) spriteId = CreateSprite(&sBallParticlesSpriteTemplates[ballId], x, y, subpriority); if (spriteId != MAX_SPRITES) { - sub_80F0674(); + IncrementBattleParticleCounter(); StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]); gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; gSprites[spriteId].oam.priority = priority; @@ -1677,7 +1677,7 @@ static void GreatBallOpenParticleAnimation(u8 taskId) spriteId = CreateSprite(&sBallParticlesSpriteTemplates[ballId], x, y, subpriority); if (spriteId != MAX_SPRITES) { - sub_80F0674(); + IncrementBattleParticleCounter(); StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]); gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; gSprites[spriteId].oam.priority = priority; @@ -1727,7 +1727,7 @@ static void RepeatBallOpenParticleAnimation(u8 taskId) spriteId = CreateSprite(&sBallParticlesSpriteTemplates[ballId], x, y, subpriority); if (spriteId != MAX_SPRITES) { - sub_80F0674(); + IncrementBattleParticleCounter(); StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]); gSprites[spriteId].callback = RepeatBallOpenParticleAnimation_Step1; gSprites[spriteId].oam.priority = priority; @@ -1771,7 +1771,7 @@ static void MasterBallOpenParticleAnimation(u8 taskId) spriteId = CreateSprite(&sBallParticlesSpriteTemplates[ballId], x, y, subpriority); if (spriteId != MAX_SPRITES) { - sub_80F0674(); + IncrementBattleParticleCounter(); StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]); gSprites[spriteId].callback = FanOutBallOpenParticles_Step1; gSprites[spriteId].oam.priority = priority; @@ -1815,7 +1815,7 @@ static void PremierBallOpenParticleAnimation(u8 taskId) spriteId = CreateSprite(&sBallParticlesSpriteTemplates[ballId], x, y, subpriority); if (spriteId != MAX_SPRITES) { - sub_80F0674(); + IncrementBattleParticleCounter(); StartSpriteAnim(&gSprites[spriteId], sBallParticleAnimNums[ballId]); gSprites[spriteId].callback = PremierBallOpenParticleAnimation_Step1; gSprites[spriteId].oam.priority = priority; @@ -1875,7 +1875,7 @@ u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 battler, u32 selectedPalettes, u8 { u8 taskId; - taskId = CreateTask(sub_80F12E0, 5); + taskId = CreateTask(Task_FadeMon_ToBallColor, 5); gTasks[taskId].data[15] = ballId; gTasks[taskId].data[3] = battler; gTasks[taskId].data[10] = selectedPalettes; @@ -1891,14 +1891,14 @@ u8 LaunchBallFadeMonTask(bool8 unfadeLater, u8 battler, u32 selectedPalettes, u8 BlendPalette(battler * 16 + 0x100, 16, 16, sBallOpenFadeColors[ballId]); gTasks[taskId].data[0] = 16; gTasks[taskId].data[1] = -1; - gTasks[taskId].func = sub_80F1370; + gTasks[taskId].func = Task_FadeMon_ToNormal; } BeginNormalPaletteFade(selectedPalettes, 0, 0, 16, RGB_WHITE); return taskId; } -static void sub_80F12E0(u8 taskId) +static void Task_FadeMon_ToBallColor(u8 taskId) { u8 ballId = gTasks[taskId].data[15]; @@ -1916,17 +1916,17 @@ static void sub_80F12E0(u8 taskId) } } -static void sub_80F1370(u8 taskId) +static void Task_FadeMon_ToNormal(u8 taskId) { if (!gPaletteFade.active) { u32 selectedPalettes = (u16)gTasks[taskId].data[10] | ((u16)gTasks[taskId].data[11] << 16); BeginNormalPaletteFade(selectedPalettes, 0, 16, 0, RGB_WHITE); - gTasks[taskId].func = sub_80F13C0; + gTasks[taskId].func = Task_FadeMon_ToNormal_Step; } } -static void sub_80F13C0(u8 taskId) +static void Task_FadeMon_ToNormal_Step(u8 taskId) { u8 ballId = gTasks[taskId].data[15]; @@ -2046,7 +2046,7 @@ void AnimTask_TargetToEffectBattler(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_80F1720(u8 battler, struct Pokemon *mon) +void TryShinyAnimation(u8 battler, struct Pokemon *mon) { bool32 isShiny; u32 otId, personality; @@ -2054,7 +2054,7 @@ void sub_80F1720(u8 battler, struct Pokemon *mon) u8 taskId1, taskId2; isShiny = FALSE; - gBattleSpritesDataPtr->healthBoxesData[battler].flag_x80 = 1; + gBattleSpritesDataPtr->healthBoxesData[battler].triedShinyMonAnim = TRUE; otId = GetMonData(mon, MON_DATA_OT_ID); personality = GetMonData(mon, MON_DATA_PERSONALITY); @@ -2072,8 +2072,8 @@ void sub_80F1720(u8 battler, struct Pokemon *mon) LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[ANIM_TAG_GOLD_STARS - ANIM_SPRITES_START]); } - taskId1 = CreateTask(sub_80F181C, 10); - taskId2 = CreateTask(sub_80F181C, 10); + taskId1 = CreateTask(AnimTask_ShinySparkles, 10); + taskId2 = CreateTask(AnimTask_ShinySparkles, 10); gTasks[taskId1].data[0] = battler; gTasks[taskId2].data[0] = battler; gTasks[taskId1].data[1] = 0; @@ -2082,10 +2082,10 @@ void sub_80F1720(u8 battler, struct Pokemon *mon) } } - gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = 1; } -static void sub_80F181C(u8 taskId) +static void AnimTask_ShinySparkles(u8 taskId) { u8 battler; u8 x, y; @@ -2128,11 +2128,11 @@ static void sub_80F181C(u8 taskId) if (gTasks[taskId].data[1] == FALSE) { - gSprites[spriteId].callback = sub_80F1A2C; + gSprites[spriteId].callback = SpriteCB_ShinySparkles_1; } else { - gSprites[spriteId].callback = sub_80F1A80; + gSprites[spriteId].callback = SpriteCB_ShinySparkles_2; gSprites[spriteId].pos2.x = -32; gSprites[spriteId].pos2.y = 32; gSprites[spriteId].invisible = TRUE; @@ -2153,10 +2153,10 @@ static void sub_80F181C(u8 taskId) gTasks[taskId].data[12]++; if (gTasks[taskId].data[11] == 5) - gTasks[taskId].func = sub_80F19E0; + gTasks[taskId].func = AnimTask_ShinySparkles_WaitSparkles; } -static void sub_80F19E0(u8 taskId) +static void AnimTask_ShinySparkles_WaitSparkles(u8 taskId) { u8 battler; @@ -2165,14 +2165,14 @@ static void sub_80F19E0(u8 taskId) if (gTasks[taskId].data[1] == TRUE) { battler = gTasks[taskId].data[0]; - gBattleSpritesDataPtr->healthBoxesData[battler].field_1_x1 = 1; + gBattleSpritesDataPtr->healthBoxesData[battler].finishedShinyMonAnim = 1; } DestroyTask(taskId); } } -static void sub_80F1A2C(struct Sprite *sprite) +static void SpriteCB_ShinySparkles_1(struct Sprite *sprite) { sprite->pos2.x = Sin(sprite->data[1], 24); sprite->pos2.y = Cos(sprite->data[1], 24); @@ -2185,7 +2185,7 @@ static void sub_80F1A2C(struct Sprite *sprite) } } -static void sub_80F1A80(struct Sprite *sprite) +static void SpriteCB_ShinySparkles_2(struct Sprite *sprite) { if (sprite->data[1] < 4) { @@ -2207,7 +2207,7 @@ static void sub_80F1A80(struct Sprite *sprite) void AnimTask_LoadBaitGfx(u8 taskId) { - u8 paletteIndex; + UNUSED u8 paletteIndex; LoadCompressedSpriteSheetUsingHeap(&gBattleAnimPicTable[ANIM_TAG_SAFARI_BAIT - ANIM_SPRITES_START]); LoadCompressedSpritePaletteUsingHeap(&gBattleAnimPaletteTable[ANIM_TAG_SAFARI_BAIT - ANIM_SPRITES_START]); @@ -2222,35 +2222,35 @@ void AnimTask_FreeBaitGfx(u8 taskId) DestroyAnimVisualTask(taskId); } -static void sub_80F1B3C(struct Sprite *sprite) +static void SpriteCB_SafariBaitOrRock_Init(struct Sprite *sprite) { InitSpritePosToAnimAttacker(sprite, 0); - sprite->data[0] = 30; - sprite->data[2] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_X) + gBattleAnimArgs[2]; - sprite->data[4] = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_Y) + gBattleAnimArgs[3]; - sprite->data[5] = -32; + sprite->sTransl_Speed = 30; + sprite->sTransl_DestX = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_X) + gBattleAnimArgs[2]; + sprite->sTransl_DestY = GetBattlerSpriteCoord(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT), BATTLER_COORD_Y) + gBattleAnimArgs[3]; + sprite->sTransl_ArcAmpl = -32; InitAnimArcTranslation(sprite); - gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].callback = sub_8012354; - sprite->callback = sub_80F1BCC; + gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].callback = SpriteCB_PlayerThrowInit; + sprite->callback = SpriteCB_SafariBaitOrRock_WaitPlayerThrow; } -static void sub_80F1BCC(struct Sprite *sprite) +static void SpriteCB_SafariBaitOrRock_WaitPlayerThrow(struct Sprite *sprite) { if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animCmdIndex == 1) - sprite->callback = sub_80F1C04; + sprite->callback = SpriteCB_SafariBaitOrRock_ArcFlight; } -static void sub_80F1C04(struct Sprite *sprite) +static void SpriteCB_SafariBaitOrRock_ArcFlight(struct Sprite *sprite) { if (TranslateAnimHorizontalArc(sprite)) { sprite->data[0] = 0; sprite->invisible = TRUE; - sprite->callback = sub_80F1C30; + sprite->callback = SpriteCB_SafariBaitOrRock_Finish; } } -static void sub_80F1C30(struct Sprite *sprite) +static void SpriteCB_SafariBaitOrRock_Finish(struct Sprite *sprite) { if (gSprites[gBattlerSpriteIds[gBattleAnimAttacker]].animEnded) { @@ -2262,7 +2262,7 @@ static void sub_80F1C30(struct Sprite *sprite) } } -void sub_80F1C8C(u8 taskId) +void AnimTask_SafariOrGhost_DecideAnimSides(u8 taskId) { switch (gBattleAnimArgs[0]) { @@ -2279,7 +2279,7 @@ void sub_80F1C8C(u8 taskId) DestroyAnimVisualTask(taskId); } -void sub_80F1CE4(u8 taskId) +void AnimTask_SafariGetReaction(u8 taskId) { if (gBattleCommunication[MULTISTRING_CHOOSER] > 2) gBattleAnimArgs[7] = 0; diff --git a/src/battle_anim_utility_funcs.c b/src/battle_anim_utility_funcs.c index e8042df92..ae2a4a407 100644 --- a/src/battle_anim_utility_funcs.c +++ b/src/battle_anim_utility_funcs.c @@ -33,9 +33,9 @@ static void sub_80BC19C(u8 taskId); static EWRAM_DATA struct AnimStatsChangeData *sAnimStatsChangeData = NULL; -static const u16 gUnknown_83E7CC8[] = { RGB(31, 31, 31) }; -const u8 gUnknown_83E7CCA[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT }; -const u8 gUnknown_83E7CCE[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT }; +static const u16 sRgbWhite[] = { RGB(31, 31, 31) }; +const u8 gBattleAnimRegOffsBgCnt[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT }; +const u8 gBattleIntroRegOffsBgCnt[] = { REG_OFFSET_BG0CNT, REG_OFFSET_BG1CNT, REG_OFFSET_BG2CNT, REG_OFFSET_BG3CNT }; // gBattleAnimArgs[0] is a bitfield. // Bits 0-10 result in the following palettes being selected: @@ -331,12 +331,12 @@ void AnimTask_SetUpCurseBackground(u8 taskId) species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species); - sub_80752A0(&animBgData); + GetBattleAnimBg1Data(&animBgData); AnimLoadCompressedBgTilemap(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_tilemap); if (IsContest()) sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0); AnimLoadCompressedBgGfx(animBgData.bgId, gFile_graphics_battle_anims_masks_curse_sheet, animBgData.tilesOffset); - LoadPalette(gUnknown_83E7CC8, animBgData.paletteId * 16 + 1, 2); + LoadPalette(sRgbWhite, animBgData.paletteId * 16 + 1, 2); gBattle_BG1_X = -gSprites[spriteId].pos1.x + 32; gBattle_BG1_Y = -gSprites[spriteId].pos1.y + 32; gTasks[taskId].data[0] = newSpriteId; @@ -358,7 +358,7 @@ static void sub_80BAF38(u8 taskId) gBattle_BG1_Y += 64; if (++gTasks[taskId].data[11] == 4) { - sub_8073128(0); + ResetBattleAnimBg(0); gBattle_WIN0H = 0; gBattle_WIN0V = 0; SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR @@ -377,8 +377,8 @@ static void sub_80BAF38(u8 taskId) sprite = &gSprites[GetAnimBattlerSpriteId(ANIM_ATTACKER)]; // unused sprite = &gSprites[gTasks[taskId].data[0]]; DestroySprite(sprite); - sub_80752A0(&animBgData); - sub_8075358(animBgData.bgId); + GetBattleAnimBg1Data(&animBgData); + InitBattleAnimBg(animBgData.bgId); if (gTasks[taskId].data[6] == 1) ++gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority; gBattle_BG1_Y = 0; @@ -452,7 +452,7 @@ static void sub_80BB2A0(u8 taskId) battlerSpriteId = gBattlerSpriteIds[sAnimStatsChangeData->battler2]; newSpriteId = sub_8076E34(sAnimStatsChangeData->battler2, battlerSpriteId, sAnimStatsChangeData->species); } - sub_80752A0(&animBgData); + GetBattleAnimBg1Data(&animBgData); if (sAnimStatsChangeData->data[0] == 0) AnimLoadCompressedBgTilemap(animBgData.bgId, gBattleStatMask1_Tilemap); else @@ -548,7 +548,7 @@ static void sub_80BB4B8(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); if (gTasks[taskId].data[12] == 0) { - sub_8073128(0); + ResetBattleAnimBg(0); ++gTasks[taskId].data[15]; } } @@ -663,7 +663,7 @@ void AnimTask_StartSlidingBg(u8 taskId) { u8 newTaskId; - sub_8075458(0); + ToggleBg3Mode(0); newTaskId = CreateTask(sub_80BB8A4, 5); if (gBattleAnimArgs[2] && GetBattlerSide(gBattleAnimAttacker) != B_SIDE_PLAYER) { @@ -689,7 +689,7 @@ static void sub_80BB8A4(u8 taskId) { gBattle_BG3_X = 0; gBattle_BG3_Y = 0; - sub_8075458(1); + ToggleBg3Mode(1); DestroyTask(taskId); } } @@ -755,7 +755,7 @@ void sub_80BBA20(u8 taskId, s32 unused, u16 arg2, u8 battler1, u8 arg4, u8 arg5, spriteId = sub_8076E34(battler1, gBattlerSpriteIds[battler1], species); if (arg4) newSpriteId = sub_8076E34(battler2, gBattlerSpriteIds[battler2], species); - sub_80752A0(&animBgData); + GetBattleAnimBg1Data(&animBgData); AnimLoadCompressedBgTilemap(animBgData.bgId, tilemap); if (IsContest()) sub_80730C0(animBgData.paletteId, animBgData.bgTilemap, 0, 0); @@ -805,7 +805,7 @@ static void sub_80BBC2C(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(gTasks[taskId].data[12], 16 - gTasks[taskId].data[12])); if (gTasks[taskId].data[12] == 0) { - sub_8073128(0); + ResetBattleAnimBg(0); gBattle_WIN0H = 0; gBattle_WIN0V = 0; SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR @@ -839,13 +839,13 @@ void AnimTask_GetBattleTerrain(u8 taskId) void AnimTask_AllocBackupPalBuffer(u8 taskId) { - gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); + gMonSpritesGfxPtr->multiUseBuffer = AllocZeroed(0x2000); DestroyAnimVisualTask(taskId); } void AnimTask_FreeBackupPalBuffer(u8 taskId) { - FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); + FREE_AND_SET_NULL(gMonSpritesGfxPtr->multiUseBuffer); DestroyAnimVisualTask(taskId); } @@ -863,7 +863,7 @@ void AnimTask_CopyPalUnfadedToBackup(u8 taskId) paletteIndex = gBattleAnimAttacker + 16; else if (gBattleAnimArgs[0] == 2) paletteIndex = gBattleAnimTarget + 16; - memcpy(&gMonSpritesGfxPtr->field_17C[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[paletteIndex * 16], 32); + memcpy(&gMonSpritesGfxPtr->multiUseBuffer[gBattleAnimArgs[1] * 16], &gPlttBufferUnfaded[paletteIndex * 16], 32); DestroyAnimVisualTask(taskId); } @@ -881,7 +881,7 @@ void AnimTask_CopyPalUnfadedFromBackup(u8 taskId) paletteIndex = gBattleAnimAttacker + 16; else if (gBattleAnimArgs[0] == 2) paletteIndex = gBattleAnimTarget + 16; - memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gMonSpritesGfxPtr->field_17C[gBattleAnimArgs[1] * 16], 32); + memcpy(&gPlttBufferUnfaded[paletteIndex * 16], &gMonSpritesGfxPtr->multiUseBuffer[gBattleAnimArgs[1] * 16], 32); DestroyAnimVisualTask(taskId); } diff --git a/src/battle_bg.c b/src/battle_bg.c index e66180c4d..32d3e017a 100644 --- a/src/battle_bg.c +++ b/src/battle_bg.c @@ -85,7 +85,7 @@ static const struct SpriteTemplate sVsLetter_V_SpriteTemplate = { .oam = &gOamData_82482A0, .anims = gDummySpriteAnimTable, .affineAnims = gAffineAnimTable_82482E0, - .callback = nullsub_9 + .callback = SpriteCB_VsLetterDummy }; static const struct SpriteTemplate sVsLetter_S_SpriteTemplate = { @@ -94,7 +94,7 @@ static const struct SpriteTemplate sVsLetter_S_SpriteTemplate = { .oam = &gOamData_82482A8, .anims = gDummySpriteAnimTable, .affineAnims = gAffineAnimTable_82482E0, - .callback = nullsub_9 + .callback = SpriteCB_VsLetterDummy }; static const struct CompressedSpriteSheet sVsLettersSpriteSheet = { @@ -584,7 +584,7 @@ UNUSED void CreateUnknownDebugSprite(void) u8 spriteId; ResetSpriteData(); - spriteId = CreateSprite(&gUnknown_824EFF0, 0, 0, 0); + spriteId = CreateSprite(&gUnknownDebugSprite, 0, 0, 0); gSprites[spriteId].invisible = TRUE; SetMainCallback2(CB2_unused); } diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c index f3966e832..62e17df32 100644 --- a/src/battle_controller_link_opponent.c +++ b/src/battle_controller_link_opponent.c @@ -79,11 +79,11 @@ static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst); static void SetLinkOpponentMonData(u8 monId); static void DoSwitchOutAnimation(void); static void LinkOpponentDoMoveAnimation(void); -static void sub_803AEDC(void); -static void sub_803C550(u8 battlerId, bool8 dontClearSubstituteBit); -static void sub_803D564(u8 taskId); -static void sub_803D648(struct Sprite *sprite); -static void sub_803D790(void); +static void SwitchIn_HandleSoundAndEnd(void); +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); +static void Task_StartSendOutAnim(u8 taskId); +static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite); +static void EndDrawPartyStatusSummary(void); static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { @@ -147,7 +147,7 @@ static void (*const sLinkOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = }; -static void nullsub_19(void) +static void LinkOpponentDummy(void) { } @@ -173,7 +173,7 @@ static void CompleteOnBattlerSpriteCallbackDummy(void) LinkOpponentBufferExecCompleted(); } -static void sub_803A70C(void) +static void FreeTrainerSpriteAfterSlide(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { @@ -185,16 +185,16 @@ static void sub_803A70C(void) } } -static void sub_803A79C(void) +static void Intro_DelayAndEnd(void) { - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF) + if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; LinkOpponentBufferExecCompleted(); } } -static void sub_803A7E4(void) +static void Intro_WaitForShinyAnimAndHealthbox(void) { bool8 var = FALSE; @@ -214,15 +214,15 @@ static void sub_803A7E4(void) { if (GetBattlerPosition(gActiveBattler) == B_POSITION_OPPONENT_LEFT) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 - || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim + || !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) return; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); } if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { @@ -233,63 +233,63 @@ static void sub_803A7E4(void) { m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); } - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3; - gBattlerControllerFuncs[gActiveBattler] = sub_803A79C; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; + gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; } } -static void sub_803A9CC(void) +static void Intro_TryShinyAnimShowHealthbox(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) - sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80) - sub_80F1720(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) + TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim) + TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); if (gBattleTypeFlags & BATTLE_TYPE_MULTI && GetBattlerPosition(gActiveBattler) == 3) { - if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 1) + if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 1) return; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; } if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler ^ BIT_FLANK); + StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); SetBattlerShadowSpriteCallback(gActiveBattler ^ BIT_FLANK, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], MON_DATA_SPECIES)); } - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - gBattleSpritesDataPtr->animationData->field_9_x1 = 0; - gBattlerControllerFuncs[gActiveBattler] = sub_803A7E4; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0; + gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; } } -static void sub_803AC14(void) +static void TryShinyAnimAfterMonAnim(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) { - sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); } - else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) + else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); LinkOpponentBufferExecCompleted(); } } @@ -306,7 +306,7 @@ static void CompleteOnHealthbarDone(void) LinkOpponentBufferExecCompleted(); } -static void sub_803AD20(void) +static void HideHealthboxAfterMonFaint(void) { if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse) { @@ -315,7 +315,7 @@ static void sub_803AD20(void) } } -static void sub_803AD64(void) +static void FreeMonSpriteAfterSwitchOutAnim(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { @@ -352,17 +352,17 @@ static void DoHitAnimBlinkSpriteEffect(void) } } -static void sub_803AE6C(void) +static void SwitchIn_ShowSubstitute(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattlerControllerFuncs[gActiveBattler] = sub_803AEDC; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd; } } -static void sub_803AEDC(void) +static void SwitchIn_HandleSoundAndEnd(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) { @@ -371,35 +371,35 @@ static void sub_803AEDC(void) } } -static void sub_803AF28(void) +static void SwitchIn_ShowHealthbox(void) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); CopyBattleSpriteInvisibility(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = sub_803AE6C; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowSubstitute; } } -static void sub_803AFFC(void) +static void SwitchIn_TryShinyAnim(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) - sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) + TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); - if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy + if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - gBattlerControllerFuncs[gActiveBattler] = sub_803AF28; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowHealthbox; } } @@ -1029,38 +1029,38 @@ static void LinkOpponentHandleLoadMonSprite(void) gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - gBattlerControllerFuncs[gActiveBattler] = sub_803AC14; + gBattlerControllerFuncs[gActiveBattler] = TryShinyAnimAfterMonAnim; } static void LinkOpponentHandleSwitchInAnim(void) { gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; - sub_803C550(gActiveBattler, gBattleBufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = sub_803AFFC; + StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; } -static void sub_803C550(u8 battlerId, bool8 dontClearSubstituteBit) +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); + gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); - gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); + gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); } static void LinkOpponentHandleReturnMonToBall(void) @@ -1095,7 +1095,7 @@ static void DoSwitchOutAnimation(void) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_OPPONENT_MON); - gBattlerControllerFuncs[gActiveBattler] = sub_803AD64; + gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; } break; } @@ -1135,7 +1135,7 @@ static void LinkOpponentHandleDrawTrainerPic(void) xPos = 176; if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) { - trainerPicId = sub_80447AC(); + trainerPicId = GetUnionRoomTrainerPic(); } else if ((gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_RUBY || (gLinkPlayers[GetMultiplayerId() ^ BIT_SIDE].version & 0xFF) == VERSION_SAPPHIRE @@ -1167,7 +1167,7 @@ static void LinkOpponentHandleDrawTrainerPic(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; } @@ -1184,7 +1184,7 @@ static void LinkOpponentHandleTrainerSlideBack(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); - gBattlerControllerFuncs[gActiveBattler] = sub_803A70C; + gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; } static void LinkOpponentHandleFaintAnimation(void) @@ -1202,7 +1202,7 @@ static void LinkOpponentHandleFaintAnimation(void) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET); gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon; - gBattlerControllerFuncs[gActiveBattler] = sub_803AD20; + gBattlerControllerFuncs[gActiveBattler] = HideHealthboxAfterMonFaint; } } } @@ -1229,7 +1229,7 @@ static void LinkOpponentHandlePause(void) static void LinkOpponentHandleMoveAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); @@ -1271,7 +1271,7 @@ static void LinkOpponentDoMoveAnimation(void) case 1: if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { - sub_8035450(0); + SetBattlerSpriteAffineMode(0); DoMoveAnim(move); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; } @@ -1280,7 +1280,7 @@ static void LinkOpponentDoMoveAnimation(void) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_8035450(1); + SetBattlerSpriteAffineMode(1); if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) { InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); @@ -1309,7 +1309,7 @@ static void LinkOpponentHandlePrintString(void) gBattle_BG0_Y = 0; stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - if (sub_80D89B0(*stringId)) + if (BattleStringShouldBeColored(*stringId)) BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); else BattlePutTextOnWindow(gDisplayedStringBattle, 0); @@ -1380,7 +1380,7 @@ static void LinkOpponentHandleExpUpdate(void) static void LinkOpponentHandleStatusIconUpdate(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u8 battlerId; @@ -1393,7 +1393,7 @@ static void LinkOpponentHandleStatusIconUpdate(void) static void LinkOpponentHandleStatusAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); @@ -1532,16 +1532,16 @@ static void LinkOpponentHandleIntroTrainerBallThrow(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280; gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_803D648); - taskId = CreateTask(sub_803D564, 5); + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreeOpponentSprite); + taskId = CreateTask(Task_StartSendOutAnim, 5); gTasks[taskId].data[0] = gActiveBattler; if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - gBattleSpritesDataPtr->animationData->field_9_x1 = 1; - gBattlerControllerFuncs[gActiveBattler] = nullsub_19; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1; + gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDummy; } -static void sub_803D564(u8 taskId) +static void Task_StartSendOutAnim(u8 taskId) { u8 savedActiveBank = gActiveBattler; @@ -1549,23 +1549,23 @@ static void sub_803D564(u8 taskId) if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_803C550(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); } else { gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_803C550(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler = BATTLE_PARTNER(gActiveBattler); gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_803C550(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler = BATTLE_PARTNER(gActiveBattler); } - gBattlerControllerFuncs[gActiveBattler] = sub_803A9CC; + gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; gActiveBattler = savedActiveBank; DestroyTask(taskId); } -static void sub_803D648(struct Sprite *sprite) +static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) { FreeTrainerFrontPicPaletteAndTile(sprite->oam.affineParam); sprite->oam.tileNum = sprite->data[5]; @@ -1585,29 +1585,29 @@ static void LinkOpponentHandleDrawPartyStatusSummary(void) if (gBattleBufferA[gActiveBattler][2]) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E < 2) + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2) { - ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E; + ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay; return; } else { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay = 0; } } gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; if (gBattleBufferA[gActiveBattler][2]) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0x5D; - gBattlerControllerFuncs[gActiveBattler] = sub_803D790; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0x5D; + gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; } } -static void sub_803D790(void) +static void EndDrawPartyStatusSummary(void) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5++ > 0x5C) + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 0x5C) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; LinkOpponentBufferExecCompleted(); } } @@ -1636,7 +1636,7 @@ static void LinkOpponentHandleSpriteInvisibility(void) static void LinkOpponentHandleBattleAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u8 animationId = gBattleBufferA[gActiveBattler][1]; u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); @@ -1667,7 +1667,7 @@ static void LinkOpponentHandleCmd55(void) FadeOutMapMusic(5); BeginFastPaletteFade(3); LinkOpponentBufferExecCompleted(); - gBattlerControllerFuncs[gActiveBattler] = sub_802F6A8; + gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; } static void LinkOpponentCmdEnd(void) diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c index 2d95a756f..bb06e6f9a 100644 --- a/src/battle_controller_link_partner.c +++ b/src/battle_controller_link_partner.c @@ -73,14 +73,14 @@ static void LinkPartnerCmdEnd(void); static void LinkPartnerBufferRunCommand(void); static void LinkPartnerBufferExecCompleted(void); -static void sub_80D481C(void); +static void SwitchIn_WaitAndEnd(void); static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst); static void SetLinkPartnerMonData(u8 monId); -static void sub_80D5F40(u8 battlerId, bool8 dontClearSubstituteBit); +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); static void DoSwitchOutAnimation(void); static void LinkPartnerDoMoveAnimation(void); -static void sub_80D6ED0(u8 taskId); -static void sub_80D70A0(void); +static void Task_StartSendOutAnim(u8 taskId); +static void EndDrawPartyStatusSummary(void); static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { @@ -143,7 +143,7 @@ static void (*const sLinkPartnerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = LinkPartnerCmdEnd }; -static void nullsub_77(void) +static void LinkPartnerDummy(void) { } @@ -169,27 +169,27 @@ static void CompleteOnBattlerSpriteCallbackDummy(void) LinkPartnerBufferExecCompleted(); } -static void sub_80D42A8(void) +static void FreeTrainerSpriteAfterSlide(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { - nullsub_16(0); + BattleGfxSfxDummy3(0); FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); LinkPartnerBufferExecCompleted(); } } -static void sub_80D4310(void) +static void Intro_DelayAndEnd(void) { - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF) + if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; LinkPartnerBufferExecCompleted(); } } -static void sub_80D4358(void) +static void Intro_WaitForHealthbox(void) { bool32 var = FALSE; @@ -207,41 +207,41 @@ static void sub_80D4358(void) var = FALSE; if (var) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3; - gBattlerControllerFuncs[gActiveBattler] = sub_80D4310; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; + gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; } } -static void sub_80D443C(void) +static void Intro_ShowHealthbox(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) { - if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 != 1) + if (++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay != 1) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler ^ BIT_FLANK); + StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); } - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - gBattleSpritesDataPtr->animationData->field_9_x1 = 0; - gBattlerControllerFuncs[gActiveBattler] = sub_80D4358; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0; + gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForHealthbox; } } } -static void sub_80D4590(void) +static void WaitForMonAnimAfterLoad(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0) LinkPartnerBufferExecCompleted(); @@ -263,7 +263,7 @@ static void CompleteOnHealthbarDone(void) } } -static void sub_80D4640(void) +static void FreeMonSpriteAfterFaintAnim(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT) { @@ -274,7 +274,7 @@ static void sub_80D4640(void) } } -static void sub_80D46A8(void) +static void FreeMonSpriteAfterSwitchOutAnim(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { @@ -310,51 +310,51 @@ static void DoHitAnimBlinkSpriteEffect(void) } } -static void sub_80D47AC(void) +static void SwitchIn_ShowSubstitute(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattlerControllerFuncs[gActiveBattler] = sub_80D481C; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_WaitAndEnd; } } -static void sub_80D481C(void) +static void SwitchIn_WaitAndEnd(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) LinkPartnerBufferExecCompleted(); } -static void sub_80D484C(void) +static void SwitchIn_ShowHealthbox(void) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - CreateTask(c3_0802FDF4, 10); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); CopyBattleSpriteInvisibility(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = sub_80D47AC; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowSubstitute; } } -static void sub_80D4944(void) +static void SwitchIn_TryShinyAnim(void) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); - if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy + TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); - gBattlerControllerFuncs[gActiveBattler] = sub_80D484C; + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowHealthbox; } } @@ -985,7 +985,7 @@ static void LinkPartnerHandleLoadMonSprite(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]); - gBattlerControllerFuncs[gActiveBattler] = sub_80D4590; + gBattlerControllerFuncs[gActiveBattler] = WaitForMonAnimAfterLoad; } static void LinkPartnerHandleSwitchInAnim(void) @@ -993,31 +993,31 @@ static void LinkPartnerHandleSwitchInAnim(void) ClearTemporarySpeciesSpriteData(gActiveBattler, gBattleBufferA[gActiveBattler][2]); gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - sub_80D5F40(gActiveBattler, gBattleBufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = sub_80D4944; + StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; } -static void sub_80D5F40(u8 battlerId, bool8 dontClearSubstituteBit) +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); + gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); - gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); } static void LinkPartnerHandleReturnMonToBall(void) @@ -1050,7 +1050,7 @@ static void DoSwitchOutAnimation(void) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); - gBattlerControllerFuncs[gActiveBattler] = sub_80D46A8; + gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; } break; } @@ -1077,7 +1077,7 @@ static void LinkPartnerHandleDrawTrainerPic(void) gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; } @@ -1094,7 +1094,7 @@ static void LinkPartnerHandleTrainerSlideBack(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); - gBattlerControllerFuncs[gActiveBattler] = sub_80D42A8; + gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; } static void LinkPartnerHandleFaintAnimation(void) @@ -1114,8 +1114,8 @@ static void LinkPartnerHandleFaintAnimation(void) PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110; - gBattlerControllerFuncs[gActiveBattler] = sub_80D4640; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim; + gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim; } } } @@ -1142,7 +1142,7 @@ static void LinkPartnerHandlePause(void) static void LinkPartnerHandleMoveAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); @@ -1184,7 +1184,7 @@ static void LinkPartnerDoMoveAnimation(void) case 1: if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { - sub_8035450(0); + SetBattlerSpriteAffineMode(0); DoMoveAnim(move); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; } @@ -1193,7 +1193,7 @@ static void LinkPartnerDoMoveAnimation(void) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_8035450(1); + SetBattlerSpriteAffineMode(1); if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) { InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); @@ -1222,7 +1222,7 @@ static void LinkPartnerHandlePrintString(void) gBattle_BG0_Y = 0; stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - if (sub_80D89B0(*stringId)) + if (BattleStringShouldBeColored(*stringId)) BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); else BattlePutTextOnWindow(gDisplayedStringBattle, 0); @@ -1293,7 +1293,7 @@ static void LinkPartnerHandleExpUpdate(void) static void LinkPartnerHandleStatusIconUpdate(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u8 battlerId; @@ -1306,7 +1306,7 @@ static void LinkPartnerHandleStatusIconUpdate(void) static void LinkPartnerHandleStatusAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); @@ -1448,7 +1448,7 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80335F8); + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); paletteNum = AllocSpritePalette(0xD6F9); if ((gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].version & 0xFF) == VERSION_RUBY @@ -1459,15 +1459,15 @@ static void LinkPartnerHandleIntroTrainerBallThrow(void) trainerPicId = gLinkPlayers[GetBattlerMultiplayerId(gActiveBattler)].gender + 0; LoadCompressedPalette(gTrainerBackPicPaletteTable[trainerPicId].data, 0x100 + paletteNum * 16, 32); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; - taskId = CreateTask(sub_80D6ED0, 5); + taskId = CreateTask(Task_StartSendOutAnim, 5); gTasks[taskId].data[0] = gActiveBattler; if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - gBattleSpritesDataPtr->animationData->field_9_x1 = 1; - gBattlerControllerFuncs[gActiveBattler] = nullsub_77; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1; + gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDummy; } -static void sub_80D6ED0(u8 taskId) +static void Task_StartSendOutAnim(u8 taskId) { if (gTasks[taskId].data[1] < 24) { @@ -1481,19 +1481,19 @@ static void sub_80D6ED0(u8 taskId) if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_80D5F40(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); } else { gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_80D5F40(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - sub_80D5F40(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; } - gBattlerControllerFuncs[gActiveBattler] = sub_80D443C; + gBattlerControllerFuncs[gActiveBattler] = Intro_ShowHealthbox; gActiveBattler = savedActiveBattler; DestroyTask(taskId); } @@ -1507,22 +1507,22 @@ static void LinkPartnerHandleDrawPartyStatusSummary(void) } else { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = TRUE; gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; - if (gBattleBufferA[gActiveBattler][2]) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0x5D; + if (gBattleBufferA[gActiveBattler][2]) // Skip delay on battle start + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; - gBattlerControllerFuncs[gActiveBattler] = sub_80D70A0; + gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; } } -static void sub_80D70A0(void) +static void EndDrawPartyStatusSummary(void) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5++ > 0x5C) + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 92) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; LinkPartnerBufferExecCompleted(); } } @@ -1551,7 +1551,7 @@ static void LinkPartnerHandleSpriteInvisibility(void) static void LinkPartnerHandleBattleAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u8 animationId = gBattleBufferA[gActiveBattler][1]; u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); @@ -1579,7 +1579,7 @@ static void LinkPartnerHandleCmd55(void) FadeOutMapMusic(5); BeginFastPaletteFade(3); LinkPartnerBufferExecCompleted(); - gBattlerControllerFuncs[gActiveBattler] = sub_802F6A8; + gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; } static void LinkPartnerCmdEnd(void) diff --git a/src/battle_controller_oak_old_man.c b/src/battle_controller_oak_old_man.c index d6833942a..9b31e2711 100644 --- a/src/battle_controller_oak_old_man.c +++ b/src/battle_controller_oak_old_man.c @@ -15,6 +15,7 @@ #include "battle_interface.h" #include "battle_message.h" #include "reshow_battle_screen.h" +#include "battle_string_ids.h" #include "constants/songs.h" #include "constants/items.h" @@ -80,21 +81,21 @@ static void OakOldManBufferRunCommand(void); static void OakOldManBufferExecCompleted(void); static void WaitForMonSelection(void); static void CompleteWhenChoseItem(void); -static void sub_80E8704(void); -static void sub_80E7CD8(void); -static void sub_80E835C(void); +static void PrintOakText_KeepAnEyeOnHP(void); +static void Intro_WaitForShinyAnimAndHealthbox(void); +static void PrintOakText_ForPetesSake(void); static void Task_LaunchLvlUpAnim(u8 taskId); static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId); static void CompleteOnInactiveTextPrinter2(void); static void Task_PrepareToGiveExpWithExpBar(u8 taskId); -static void sub_80E804C(u8 taskId); +static void Task_GiveExpWithExpBar(u8 taskId); static void Task_UpdateLvlInHealthbox(u8 taskId); -static void sub_80E85D4(const u8 *text, u8 a1); +static void PrintOakTextWithMainBgDarkened(const u8 *text, u8 delay); static u32 CopyOakOldManMonData(u8 monId, u8 *dst); static void SetOakOldManMonData(u8 monId); static void OakOldManDoMoveAnimation(void); static void HandleInputChooseAction(void); -static void sub_80EB0A8(u8 taskId); +static void Task_StartSendOutAnim(u8 taskId); static void (*const sOakOldManBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { @@ -157,17 +158,17 @@ static void (*const sOakOldManBufferCommands[CONTROLLER_CMDS_COUNT])(void) = OakOldManCmdEnd, }; -static void nullsub_81(void) +static void OakOldManDummy(void) { } void SetControllerToOakOrOldMan(void) { gBattlerControllerFuncs[gActiveBattler] = OakOldManBufferRunCommand; - gBattleStruct->field_94 = 0; - gBattleStruct->field_95 = 0; - gBattleStruct->field_96 = 0; - gBattleStruct->field_97 = 0; + gBattleStruct->simulatedInputState[0] = 0; + gBattleStruct->simulatedInputState[1] = 0; + gBattleStruct->simulatedInputState[2] = 0; + gBattleStruct->simulatedInputState[3] = 0; } static void OakOldManBufferRunCommand(void) @@ -183,6 +184,7 @@ static void OakOldManBufferRunCommand(void) static void HandleInputChooseAction(void) { + // Like player, but specifically for Rival in Oak's Lab u16 itemId = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); @@ -274,27 +276,30 @@ static void HandleInputChooseAction(void) } } -static void sub_80E7844(void) +static void SimulateInputChooseAction(void) { - switch (gBattleStruct->field_94) + // Old Man + switch (gBattleStruct->simulatedInputState[0]) { case 0: - gBattleStruct->field_96 = 64; - ++gBattleStruct->field_94; + gBattleStruct->simulatedInputState[2] = 64; + ++gBattleStruct->simulatedInputState[0]; // fall through case 1: - if (--gBattleStruct->field_96 == 0) + if (--gBattleStruct->simulatedInputState[2] == 0) { + // Move cursor to BAG PlaySE(SE_SELECT); ActionSelectionDestroyCursorAt(0); ActionSelectionCreateCursorAt(1, 0); - gBattleStruct->field_96 = 64; - ++gBattleStruct->field_94; + gBattleStruct->simulatedInputState[2] = 64; + ++gBattleStruct->simulatedInputState[0]; } break; case 2: - if (--gBattleStruct->field_96 == 0) + if (--gBattleStruct->simulatedInputState[2] == 0) { + // Open bag PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(1, B_ACTION_USE_ITEM, 0); OakOldManBufferExecCompleted(); @@ -315,7 +320,7 @@ static void CompleteOnInactiveTextPrinter(void) OakOldManBufferExecCompleted(); } -static void sub_80E7930(void) +static void OakOldManSetBattleEndCallbacks(void) { if (!gPaletteFade.active) { @@ -331,7 +336,7 @@ static void CompleteOnSpecialAnimDone(void) OakOldManBufferExecCompleted(); } -void sub_80E7988(void) +void OakOldManHandleInputChooseMove(void) { HandleInputChooseMove(); if (!(gBattleControllerExecFlags & gBitTable[gActiveBattler])) @@ -345,8 +350,8 @@ static void OpenPartyMenuToChooseMon(void) u8 caseId; gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection; - caseId = gTasks[gUnknown_3004FFC[gActiveBattler]].data[0]; - DestroyTask(gUnknown_3004FFC[gActiveBattler]); + caseId = gTasks[gBattleControllerData[gActiveBattler]].data[0]; + DestroyTask(gBattleControllerData[gActiveBattler]); FreeAllWindowBuffers(); OpenPartyMenuInTutorialBattle(caseId); } @@ -369,7 +374,7 @@ static void OpenBagAndChooseItem(void) if (!gPaletteFade.active) { gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem; - nullsub_44(); + ReshowBattleScreenDummy(); FreeAllWindowBuffers(); if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) CB2_BagMenuFromBattle(); @@ -382,12 +387,12 @@ static void CompleteWhenChoseItem(void) { if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { - if (!sub_80EB2E0(4) + if (!BtlCtrl_OakOldMan_TestState2Flag(FIRST_BATTLE_MSG_FLAG_HP_RESTORE) && gSpecialVar_ItemId == ITEM_POTION && gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { - sub_80EB2F4(4); - gBattlerControllerFuncs[gActiveBattler] = sub_80E8704; + BtlCtrl_OakOldMan_SetState2Flag(FIRST_BATTLE_MSG_FLAG_HP_RESTORE); + gBattlerControllerFuncs[gActiveBattler] = PrintOakText_KeepAnEyeOnHP; } else { @@ -397,55 +402,55 @@ static void CompleteWhenChoseItem(void) } } -static void sub_80E7B4C(void) +static void Intro_TryShinyAnimShowHealthbox(void) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 + TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) - sub_80F1720(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); + TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler ^ BIT_FLANK); + StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); } - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - gBattleSpritesDataPtr->animationData->field_9_x1 = 0; - gBattlerControllerFuncs[gActiveBattler] = sub_80E7CD8; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0; + gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; } } -static void sub_80E7CD8(void) +static void Intro_WaitForShinyAnimAndHealthbox(void) { bool32 r4 = FALSE; if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) r4 = TRUE; if (r4 - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - CreateTask(c3_0802FDF4, 10); + && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim + && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) + { + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = sub_80E835C; + gBattlerControllerFuncs[gActiveBattler] = PrintOakText_ForPetesSake; } } @@ -515,10 +520,10 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); PlaySE(SE_EXP); - gTasks[taskId].func = sub_80E804C; + gTasks[taskId].func = Task_GiveExpWithExpBar; } -static void sub_80E804C(u8 taskId) +static void Task_GiveExpWithExpBar(u8 taskId) { if (gTasks[taskId].tExpTask_frames < 13) { @@ -588,7 +593,7 @@ static void Task_UpdateLvlInHealthbox(u8 taskId) { u8 monIndex = gTasks[taskId].tExpTask_monId; - GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value. + GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value. if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL); else @@ -608,7 +613,7 @@ static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId) DestroyTask(taskId); } -static void sub_80E82F4(void) +static void FreeMonSpriteAfterFaintAnim(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT) { @@ -619,46 +624,46 @@ static void sub_80E82F4(void) } } -static void sub_80E835C(void) +static void PrintOakText_ForPetesSake(void) { u32 mask; - - switch (gBattleStruct->field_94) + + switch (gBattleStruct->simulatedInputState[0]) { case 0: if (!gPaletteFade.active) { - sub_80EEFC8(&gBattleStruct->field_95, &gBattleStruct->field_97, GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); + DoLoadHealthboxPalsForLevelUp(&gBattleStruct->simulatedInputState[1], &gBattleStruct->simulatedInputState[3], GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); BeginNormalPaletteFade(0xFFFFFF7E, - 4, - 0, - 8, + 4, + 0, + 8, RGB_BLACK); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 1: if (!gPaletteFade.active) { - sub_80EB30C(); - ++gBattleStruct->field_94; + BtlCtrl_DrawVoiceoverMessageFrame(); + ++gBattleStruct->simulatedInputState[0]; } break; case 2: BattleStringExpandPlaceholdersToDisplayedString(gText_ForPetesSake); BattlePutTextOnWindow(gDisplayedStringBattle, 24); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; break; case 3: if (!IsTextPrinterActive(24)) { - mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_97]) << 16; + mask = (gBitTable[gBattleStruct->simulatedInputState[1]] | gBitTable[gBattleStruct->simulatedInputState[3]]) << 16; BeginNormalPaletteFade(mask, 4, 8, 0, RGB_BLACK); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 4: @@ -666,19 +671,19 @@ static void sub_80E835C(void) { BattleStringExpandPlaceholdersToDisplayedString(gText_TheTrainerThat); BattlePutTextOnWindow(gDisplayedStringBattle, 24); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 5: if (!IsTextPrinterActive(24)) { - mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_97]) << 16; + mask = (gBitTable[gBattleStruct->simulatedInputState[1]] | gBitTable[gBattleStruct->simulatedInputState[3]]) << 16; BeginNormalPaletteFade(mask, 4, 0, 8, RGB_BLACK); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 6: @@ -686,7 +691,7 @@ static void sub_80E835C(void) { BattleStringExpandPlaceholdersToDisplayedString(gText_TryBattling); BattlePutTextOnWindow(gDisplayedStringBattle, 24); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 7: @@ -697,79 +702,80 @@ static void sub_80E835C(void) 8, 0, RGB_BLACK); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 8: if (!gPaletteFade.active) { - sub_80EF0E0(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); - sub_80EB524(); - gBattleStruct->field_94 = 0; + DoFreeHealthboxPalsForLevelUp(GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)); + BtlCtrl_RemoveVoiceoverMessageFrame(); + gBattleStruct->simulatedInputState[0] = 0; OakOldManBufferExecCompleted(); } break; } } -void sub_80E8570(void) +void PrintOakText_InflictingDamageIsKey(void) { - sub_80E85D4(gText_InflictingDamageIsKey, 1); + PrintOakTextWithMainBgDarkened(gText_InflictingDamageIsKey, 1); } -static void sub_80E8584(void) +static void PrintOakText_LoweringStats(void) { - sub_80E85D4(gText_LoweringStats, 64); + PrintOakTextWithMainBgDarkened(gText_LoweringStats, 64); } -void sub_80E8598(void) +void PrintOakText_OakNoRunningFromATrainer(void) { - sub_80E85D4(gText_OakNoRunningFromATrainer, 1); + PrintOakTextWithMainBgDarkened(gText_OakNoRunningFromATrainer, 1); } -static void sub_80E85AC(void) +static void PrintOakText_WinEarnsPrizeMoney(void) { - sub_80E85D4(gText_WinEarnsPrizeMoney, 64); + PrintOakTextWithMainBgDarkened(gText_WinEarnsPrizeMoney, 64); } -void sub_80E85C0(void) +void PrintOakText_HowDisappointing(void) { - sub_80E85D4(gText_HowDissapointing, 64); + PrintOakTextWithMainBgDarkened(gText_HowDissapointing, 64); } -static void sub_80E85D4(const u8 *text, u8 a2) +static void PrintOakTextWithMainBgDarkened(const u8 *text, u8 delay) { - switch (gBattleStruct->field_94) + // If delay is 0, it's treated as 256. + switch (gBattleStruct->simulatedInputState[0]) { case 0: if (!IsTextPrinterActive(0)) { - gBattleStruct->field_97 = a2; - ++gBattleStruct->field_94; + gBattleStruct->simulatedInputState[3] = delay; + ++gBattleStruct->simulatedInputState[0]; } break; case 1: - if (--gBattleStruct->field_97 == 0) + if (--gBattleStruct->simulatedInputState[3] == 0) { BeginNormalPaletteFade(0xFFFFFF7E, - 4, - 0, - 8, + 4, + 0, + 8, RGB_BLACK); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 2: if (!gPaletteFade.active) { - sub_80EB30C(); - ++gBattleStruct->field_94; + BtlCtrl_DrawVoiceoverMessageFrame(); + ++gBattleStruct->simulatedInputState[0]; } break; case 3: BattleStringExpandPlaceholdersToDisplayedString(text); BattlePutTextOnWindow(gDisplayedStringBattle, 24); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; break; case 4: if (!IsTextPrinterActive(24)) @@ -779,76 +785,76 @@ static void sub_80E85D4(const u8 *text, u8 a2) 8, 0, RGB_BLACK); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 5: if (!gPaletteFade.active) { - sub_80EB524(); + BtlCtrl_RemoveVoiceoverMessageFrame(); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) OakOldManBufferExecCompleted(); else OpponentBufferExecCompleted(); gBattleCommunication[MSG_DISPLAY] = 0; - gBattleStruct->field_94 = 0; + gBattleStruct->simulatedInputState[0] = 0; } break; } } -static void sub_80E8704(void) +static void PrintOakText_KeepAnEyeOnHP(void) { u32 mask; - switch (gBattleStruct->field_94) + switch (gBattleStruct->simulatedInputState[0]) { case 0: if (!gPaletteFade.active) { - sub_80EEFC8(&gBattleStruct->field_95, &gBattleStruct->field_97, gActiveBattler); + DoLoadHealthboxPalsForLevelUp(&gBattleStruct->simulatedInputState[1], &gBattleStruct->simulatedInputState[3], gActiveBattler); BeginNormalPaletteFade(0xFFFFFF7E, - 4, - 0, - 8, + 4, + 0, + 8, RGB_BLACK); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 1: if (!gPaletteFade.active) { - mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_97]) << 16; + mask = (gBitTable[gBattleStruct->simulatedInputState[1]] | gBitTable[gBattleStruct->simulatedInputState[3]]) << 16; BeginNormalPaletteFade(mask, 4, 8, 0, RGB_BLACK); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 2: if (!gPaletteFade.active) { - sub_80EB30C(); - ++gBattleStruct->field_94; + BtlCtrl_DrawVoiceoverMessageFrame(); + ++gBattleStruct->simulatedInputState[0]; } break; case 3: BattleStringExpandPlaceholdersToDisplayedString(gText_KeepAnEyeOnHP); BattlePutTextOnWindow(gDisplayedStringBattle, 24); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; break; case 4: if (!IsTextPrinterActive(24)) { - mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_97]) << 16; + mask = (gBitTable[gBattleStruct->simulatedInputState[1]] | gBitTable[gBattleStruct->simulatedInputState[3]]) << 16; BeginNormalPaletteFade(mask, 4, 0, 8, RGB_BLACK); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 5: @@ -859,16 +865,16 @@ static void sub_80E8704(void) 8, 0, RGB_BLACK); - ++gBattleStruct->field_94; + ++gBattleStruct->simulatedInputState[0]; } break; case 6: if (!gPaletteFade.active) { - sub_80EB524(); + BtlCtrl_RemoveVoiceoverMessageFrame(); BtlController_EmitOneReturnValue(1, gSpecialVar_ItemId); OakOldManBufferExecCompleted(); - gBattleStruct->field_94 = 0; + gBattleStruct->simulatedInputState[0] = 0; } break; } @@ -915,7 +921,7 @@ static void DoHitAnimBlinkSpriteEffect(void) } } -static void sub_80E89C4(void) +static void DoSwitchOutAnimation(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { @@ -1554,7 +1560,7 @@ static void OakOldManHandleReturnMonToBall(void) if (gBattleBufferA[gActiveBattler][1] == 0) { InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); - gBattlerControllerFuncs[gActiveBattler] = sub_80E89C4; + gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; } else { @@ -1569,26 +1575,26 @@ static void OakOldManHandleDrawTrainerPic(void) { if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { - DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler)); + DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, gActiveBattler); + SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 80, - (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80, + (8 - gTrainerBackPicCoords[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].size) * 4 + 80, 30); } else { - DecompressTrainerBackPalette(5, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(5, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - 80, - (8 - gTrainerBackPicCoords[5].size) * 4 + 80, + DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler); + SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, + 80, + (8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80, 30); } gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; } @@ -1596,26 +1602,26 @@ static void OakOldManHandleTrainerSlide(void) { if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { - DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler)); + DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, gActiveBattler); + SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, 80, - (8 - gTrainerBackPicCoords[gSaveBlock2Ptr->playerGender].size) * 4 + 80, + (8 - gTrainerBackPicCoords[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].size) * 4 + 80, 30); } else { - DecompressTrainerBackPalette(5, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(5, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - 80, - (8 - gTrainerBackPicCoords[5].size) * 4 + 80, + DecompressTrainerBackPalette(BACK_PIC_OLDMAN, gActiveBattler); + SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_OLDMAN, GetBattlerPosition(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, + 80, + (8 - gTrainerBackPicCoords[BACK_PIC_OLDMAN].size) * 4 + 80, 30); } gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2; } @@ -1641,8 +1647,8 @@ static void OakOldManHandleFaintAnimation(void) PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110; - gBattlerControllerFuncs[gActiveBattler] = sub_80E82F4; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim; + gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim; } } } @@ -1711,7 +1717,7 @@ static void OakOldManDoMoveAnimation(void) case 1: if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { - sub_8035450(0); + SetBattlerSpriteAffineMode(ST_OAM_AFFINE_OFF); DoMoveAnim(move); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; } @@ -1720,7 +1726,7 @@ static void OakOldManDoMoveAnimation(void) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_8035450(1); + SetBattlerSpriteAffineMode(ST_OAM_AFFINE_NORMAL); if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; @@ -1752,30 +1758,30 @@ static void OakOldManHandlePrintString(void) else { BufferStringBattle(*stringId); - if (sub_80D89B0(*stringId)) - BattlePutTextOnWindow(gDisplayedStringBattle, 64); + if (BattleStringShouldBeColored(*stringId)) + BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); else BattlePutTextOnWindow(gDisplayedStringBattle, 0); if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { switch (*stringId) { - case 216: - if (!sub_80EB2E0(2)) + case STRINGID_PKMNSSTATCHANGED4: + if (!BtlCtrl_OakOldMan_TestState2Flag(FIRST_BATTLE_MSG_FLAG_STAT_CHG)) { - sub_80EB2F4(2); - gBattlerControllerFuncs[gActiveBattler] = sub_80E8584; + BtlCtrl_OakOldMan_SetState2Flag(FIRST_BATTLE_MSG_FLAG_STAT_CHG); + gBattlerControllerFuncs[gActiveBattler] = PrintOakText_LoweringStats; return; } break; - case 30: - gBattlerControllerFuncs[gActiveBattler] = sub_80E85AC; + case STRINGID_PLAYERGOTMONEY: + gBattlerControllerFuncs[gActiveBattler] = PrintOakText_WinEarnsPrizeMoney; return; - case 383: - gBattlerControllerFuncs[gActiveBattler] = sub_80E85C0; + case STRINGID_TRAINER1WINTEXT: + gBattlerControllerFuncs[gActiveBattler] = PrintOakText_HowDisappointing; return; - case 227: - gBattlerControllerFuncs[gActiveBattler] = sub_80E8598; + case STRINGID_DONTLEAVEBIRCH: + gBattlerControllerFuncs[gActiveBattler] = PrintOakText_OakNoRunningFromATrainer; return; } } @@ -1791,7 +1797,7 @@ static void OakOldManHandlePrintSelectionString(void) OakOldManBufferExecCompleted(); } -static void sub_80EA690(void) +static void HandleChooseActionAfterDma3(void) { if (!IsDma3ManagerBusyWithBgCopy()) { @@ -1800,7 +1806,7 @@ static void sub_80EA690(void) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseAction; else - gBattlerControllerFuncs[gActiveBattler] = sub_80E7844; + gBattlerControllerFuncs[gActiveBattler] = SimulateInputChooseAction; } } @@ -1808,7 +1814,7 @@ static void OakOldManHandleChooseAction(void) { s32 i; - gBattlerControllerFuncs[gActiveBattler] = sub_80EA690; + gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; BattlePutTextOnWindow(gText_EmptyString3, 0); BattlePutTextOnWindow(gText_BattleMenu, 2); for (i = 0; i < MAX_MON_MOVES; ++i) @@ -1826,13 +1832,13 @@ static void OakOldManHandleUnknownYesNoBox(void) OakOldManBufferExecCompleted(); } -static void sub_80EA798(void) +static void OakHandleChooseMove_WaitDma3(void) { if (!IsDma3ManagerBusyWithBgCopy()) { gBattle_BG0_X = 0; gBattle_BG0_Y = 320; - gBattlerControllerFuncs[gActiveBattler] = sub_80E7988; + gBattlerControllerFuncs[gActiveBattler] = OakOldManHandleInputChooseMove; } } @@ -1841,19 +1847,19 @@ static void OakOldManHandleChooseMove(void) if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) { InitMoveSelectionsVarsAndStrings(); - gBattlerControllerFuncs[gActiveBattler] = sub_80EA798; + gBattlerControllerFuncs[gActiveBattler] = OakHandleChooseMove_WaitDma3; } else { - switch (gBattleStruct->field_95) + switch (gBattleStruct->simulatedInputState[1]) { case 0: InitMoveSelectionsVarsAndStrings(); - ++gBattleStruct->field_95; - gBattleStruct->field_97 = 80; + ++gBattleStruct->simulatedInputState[1]; + gBattleStruct->simulatedInputState[3] = 80; // fall through case 1: - if (--gBattleStruct->field_97 == 0) + if (--gBattleStruct->simulatedInputState[3] == 0) { PlaySE(SE_SELECT); BtlController_EmitTwoReturnValues(1, 10, 0x100); @@ -1879,10 +1885,10 @@ static void OakOldManHandleChoosePokemon(void) { s32 i; - gUnknown_3004FFC[gActiveBattler] = CreateTask(TaskDummy, 0xFF); - gTasks[gUnknown_3004FFC[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; + gBattleControllerData[gActiveBattler] = CreateTask(TaskDummy, 0xFF); + gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4; - *(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2]; + *(&gBattleStruct->playerPartyIdx) = gBattleBufferA[gActiveBattler][2]; *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3]; for (i = 0; i < 3; ++i) gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i]; @@ -1906,13 +1912,13 @@ static void OakOldManHandleHealthBarUpdate(void) { u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); - + SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); } else { u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - + SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT); } @@ -1939,7 +1945,7 @@ static void OakOldManHandleExpUpdate(void) gTasks[taskId].tExpTask_monId = monId; gTasks[taskId].tExpTask_gainedExp = expPointsToGive; gTasks[taskId].tExpTask_battler = gActiveBattler; - gBattlerControllerFuncs[gActiveBattler] = nullsub_81; + gBattlerControllerFuncs[gActiveBattler] = OakOldManDummy; } } @@ -2078,17 +2084,17 @@ static void OakOldManHandleIntroTrainerBallThrow(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80335F8); + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); paletteNum = AllocSpritePalette(0xD6F8); - LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32); + LoadCompressedPalette(gTrainerBackPicPaletteTable[BACK_PIC_RED + gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; - taskId = CreateTask(sub_80EB0A8, 5); + taskId = CreateTask(Task_StartSendOutAnim, 5); gTasks[taskId].data[0] = gActiveBattler; if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - gBattleSpritesDataPtr->animationData->field_9_x1 = 1; - gBattlerControllerFuncs[gActiveBattler] = nullsub_13; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1; + gBattlerControllerFuncs[gActiveBattler] = PlayerDummy; } else { @@ -2098,30 +2104,30 @@ static void OakOldManHandleIntroTrainerBallThrow(void) } } -static void sub_80EAF34(u8 battlerId) +static void StartSendOutAnim(u8 battlerId) { u16 species; gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); + gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); - gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); } -static void sub_80EB0A8(u8 taskId) +static void Task_StartSendOutAnim(u8 taskId) { if (gTasks[taskId].data[1] < 31) { @@ -2133,8 +2139,8 @@ static void sub_80EB0A8(u8 taskId) gActiveBattler = gTasks[taskId].data[0]; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_80EAF34(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = sub_80E7B4C; + StartSendOutAnim(gActiveBattler); + gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; gActiveBattler = savedActiveBattler; DestroyTask(taskId); } @@ -2213,24 +2219,24 @@ static void OakOldManHandleCmd55(void) BeginFastPaletteFade(3); OakOldManBufferExecCompleted(); if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) && gBattleTypeFlags & BATTLE_TYPE_LINK) - gBattlerControllerFuncs[gActiveBattler] = sub_80E7930; + gBattlerControllerFuncs[gActiveBattler] = OakOldManSetBattleEndCallbacks; } static void OakOldManCmdEnd(void) { } -bool8 sub_80EB2E0(u8 a1) +bool8 BtlCtrl_OakOldMan_TestState2Flag(u8 mask) { - return gBattleStruct->field_96 & a1; + return gBattleStruct->simulatedInputState[2] & mask; } -void sub_80EB2F4(u8 a1) +void BtlCtrl_OakOldMan_SetState2Flag(u8 mask) { - gBattleStruct->field_96 |= a1; + gBattleStruct->simulatedInputState[2] |= mask; } -void sub_80EB30C(void) +void BtlCtrl_DrawVoiceoverMessageFrame(void) { u32 width = 0x1A; u32 pal = 7; @@ -2263,7 +2269,7 @@ void sub_80EB30C(void) FillBgTilemapBufferRect(0, BG_TILE_V_FLIP(0x34), 0x1D, 0x13, 1, 1, pal); } -void sub_80EB524(void) +void BtlCtrl_RemoveVoiceoverMessageFrame(void) { u32 pal = 0; u32 width = 0x1A; diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c index 29cde44df..7d34dd3d3 100644 --- a/src/battle_controller_opponent.c +++ b/src/battle_controller_opponent.c @@ -83,11 +83,11 @@ static u32 GetOpponentMonData(u8 monId, u8 *dst); static void SetOpponentMonData(u8 monId); static void DoSwitchOutAnimation(void); static void OpponentDoMoveAnimation(void); -static void sub_80362E8(void); -static void sub_8037A28(u8 battlerId, bool8 dontClearSubstituteBit); -static void sub_8038DC4(u8 taskId); -static void sub_8038D90(struct Sprite *sprite); -static void sub_8038FBC(void); +static void SwitchIn_HandleSoundAndEnd(void); +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); +static void Task_StartSendOutAnim(u8 taskId); +static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite); +static void EndDrawPartyStatusSummary(void); static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { @@ -153,7 +153,7 @@ static void (*const sOpponentBufferCommands[CONTROLLER_CMDS_COUNT])(void) = // not used static const u8 gUnknown_8250B18[] = { 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20 }; -static void nullsub_17(void) +static void OpponentDummy(void) { } @@ -185,7 +185,7 @@ static void CompleteOnBattlerSpriteCallbackDummy2(void) OpponentBufferExecCompleted(); } -static void sub_8035B58(void) +static void FreeTrainerSpriteAfterSlide(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { @@ -197,16 +197,16 @@ static void sub_8035B58(void) } } -static void sub_8035BE8(void) +static void Intro_DelayAndEnd(void) { - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF) + if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; OpponentBufferExecCompleted(); } } -static void sub_8035C30(void) +static void Intro_WaitForShinyAnimAndHealthbox(void) { bool8 var = FALSE; @@ -222,68 +222,68 @@ static void sub_8035C30(void) } if (IsCryPlayingOrClearCrySongs()) var = FALSE; - if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) + if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); if (gBattleTypeFlags & BATTLE_TYPE_MULTI) m4aMPlayContinue(&gMPlayInfo_BGM); else m4aMPlayVolumeControl(&gMPlayInfo_BGM, 0xFFFF, 256); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3; - gBattlerControllerFuncs[gActiveBattler] = sub_8035BE8; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; + gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; } } -static void sub_8035DF0(void) +static void Intro_TryShinyAnimShowHealthbox(void) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) - sub_80F1720(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) + TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler ^ BIT_FLANK); + StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); SetBattlerShadowSpriteCallback(gActiveBattler ^ BIT_FLANK, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], MON_DATA_SPECIES)); } - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - gBattleSpritesDataPtr->animationData->field_9_x1 = 0; - gBattlerControllerFuncs[gActiveBattler] = sub_8035C30; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = FALSE; + gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; } } -static void sub_8035FE8(void) +static void TryShinyAnimAfterMonAnim(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) { - sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); } - else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) + else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); OpponentBufferExecCompleted(); } } @@ -300,10 +300,10 @@ static void CompleteOnHealthbarDone(void) } else { - if (!sub_80EB2E0(1) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)) + if (!BtlCtrl_OakOldMan_TestState2Flag(1) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)) { - sub_80EB2F4(1); - gBattlerControllerFuncs[gActiveBattler] = sub_80E8570; + BtlCtrl_OakOldMan_SetState2Flag(1); + gBattlerControllerFuncs[gActiveBattler] = PrintOakText_InflictingDamageIsKey; } else { @@ -312,7 +312,7 @@ static void CompleteOnHealthbarDone(void) } } -static void sub_803612C(void) +static void HideHealthboxAfterMonFaint(void) { if (!gSprites[gBattlerSpriteIds[gActiveBattler]].inUse) { @@ -321,7 +321,7 @@ static void sub_803612C(void) } } -static void sub_8036170(void) +static void FreeMonSpriteAfterSwitchOutAnim(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { @@ -358,17 +358,17 @@ static void DoHitAnimBlinkSpriteEffect(void) } } -static void sub_8036278(void) +static void SwitchIn_ShowSubstitute(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattlerControllerFuncs[gActiveBattler] = sub_80362E8; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd; } } -static void sub_80362E8(void) +static void SwitchIn_HandleSoundAndEnd(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) { @@ -377,33 +377,33 @@ static void sub_80362E8(void) } } -static void sub_8036334(void) +static void SwitchIn_ShowHealthbox(void) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 0); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); CopyBattleSpriteInvisibility(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = sub_8036278; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowSubstitute; } } -static void sub_8036408(void) +static void SwitchIn_TryShinyAnim(void) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); - if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - gBattlerControllerFuncs[gActiveBattler] = sub_8036334; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_ShowHealthbox; } } @@ -1025,8 +1025,8 @@ static void OpponentHandleLoadMonSprite(void) { DecompressGhostFrontPic(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); y = GetGhostSpriteDefault_Y(gActiveBattler); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 1; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 1; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 1; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 1; } else { @@ -1045,25 +1045,25 @@ static void OpponentHandleLoadMonSprite(void) StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]); if (!(gBattleTypeFlags & BATTLE_TYPE_GHOST)) SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - gBattlerControllerFuncs[gActiveBattler] = sub_8035FE8; + gBattlerControllerFuncs[gActiveBattler] = TryShinyAnimAfterMonAnim; } static void OpponentHandleSwitchInAnim(void) { *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = 6; gBattlerPartyIndexes[gActiveBattler] = gBattleBufferA[gActiveBattler][1]; - sub_8037A28(gActiveBattler, gBattleBufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = sub_8036408; + StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnim; } -static void sub_8037A28(u8 battlerId, bool8 dontClearSubstituteBit) +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); + gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, @@ -1072,12 +1072,12 @@ static void sub_8037A28(u8 battlerId, bool8 dontClearSubstituteBit) GetBattlerSpriteSubpriority(battlerId)); gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; - gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); + gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT); } static void OpponentHandleReturnMonToBall(void) @@ -1111,7 +1111,7 @@ static void DoSwitchOutAnimation(void) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_OPPONENT_MON); - gBattlerControllerFuncs[gActiveBattler] = sub_8036170; + gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; } break; } @@ -1143,7 +1143,7 @@ static void OpponentHandleDrawTrainerPic(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; } @@ -1174,7 +1174,7 @@ static void OpponentHandleTrainerSlide(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[trainerPicId].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2; } @@ -1186,7 +1186,7 @@ static void OpponentHandleTrainerSlideBack(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); - gBattlerControllerFuncs[gActiveBattler] = sub_8035B58; + gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; } static void OpponentHandleFaintAnimation(void) @@ -1204,7 +1204,7 @@ static void OpponentHandleFaintAnimation(void) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET); gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon; - gBattlerControllerFuncs[gActiveBattler] = sub_803612C; + gBattlerControllerFuncs[gActiveBattler] = HideHealthboxAfterMonFaint; } } } @@ -1231,7 +1231,7 @@ static void OpponentHandlePause(void) static void OpponentHandleMoveAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); @@ -1273,7 +1273,7 @@ static void OpponentDoMoveAnimation(void) case 1: if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { - sub_8035450(0); + SetBattlerSpriteAffineMode(0); DoMoveAnim(move); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; } @@ -1282,7 +1282,7 @@ static void OpponentDoMoveAnimation(void) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_8035450(1); + SetBattlerSpriteAffineMode(1); if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) { InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); @@ -1311,7 +1311,7 @@ static void OpponentHandlePrintString(void) gBattle_BG0_Y = 0; stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - if (sub_80D89B0(*stringId)) + if (BattleStringShouldBeColored(*stringId)) BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); else BattlePutTextOnWindow(gDisplayedStringBattle, 0); @@ -1320,10 +1320,10 @@ static void OpponentHandlePrintString(void) switch (*stringId) { case 0x17F: - gBattlerControllerFuncs[gActiveBattler] = sub_80E85C0; + gBattlerControllerFuncs[gActiveBattler] = PrintOakText_HowDisappointing; return; case 0xE3: - gBattlerControllerFuncs[gActiveBattler] = sub_80E8598; + gBattlerControllerFuncs[gActiveBattler] = PrintOakText_OakNoRunningFromATrainer; return; } } @@ -1479,7 +1479,7 @@ static void OpponentHandleExpUpdate(void) static void OpponentHandleStatusIconUpdate(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u8 battlerId; @@ -1492,7 +1492,7 @@ static void OpponentHandleStatusIconUpdate(void) static void OpponentHandleStatusAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); @@ -1632,16 +1632,16 @@ static void OpponentHandleIntroTrainerBallThrow(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 280; gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_8038D90); - taskId = CreateTask(sub_8038DC4, 5); + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreeOpponentSprite); + taskId = CreateTask(Task_StartSendOutAnim, 5); gTasks[taskId].data[0] = gActiveBattler; if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - gBattleSpritesDataPtr->animationData->field_9_x1 = 1; - gBattlerControllerFuncs[gActiveBattler] = nullsub_17; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = TRUE; + gBattlerControllerFuncs[gActiveBattler] = OpponentDummy; } -static void sub_8038D90(struct Sprite *sprite) +static void SpriteCB_FreeOpponentSprite(struct Sprite *sprite) { FreeTrainerFrontPicPaletteAndTile(sprite->oam.affineParam); sprite->oam.tileNum = sprite->data[5]; @@ -1649,7 +1649,7 @@ static void sub_8038D90(struct Sprite *sprite) DestroySprite(sprite); } -static void sub_8038DC4(u8 taskId) +static void Task_StartSendOutAnim(u8 taskId) { u8 savedActiveBattler = gActiveBattler; @@ -1657,18 +1657,18 @@ static void sub_8038DC4(u8 taskId) if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_8037A28(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); } else { gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_8037A28(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_8037A28(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; } - gBattlerControllerFuncs[gActiveBattler] = sub_8035DF0; + gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; gActiveBattler = savedActiveBattler; DestroyTask(taskId); } @@ -1684,32 +1684,32 @@ static void OpponentHandleDrawPartyStatusSummary(void) gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; if (gBattleBufferA[gActiveBattler][2]) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E <= 1) + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay < 2) { - ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E; + ++gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay; return; } else { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1E = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].opponentDrawPartyStatusSummaryDelay = 0; } } gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; if (gBattleBufferA[gActiveBattler][2]) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0x5D; - gBattlerControllerFuncs[gActiveBattler] = sub_8038FBC; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0x5D; + gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; } } -static void sub_8038FBC(void) +static void EndDrawPartyStatusSummary(void) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5++ > 0x5C) + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 0x5C) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; OpponentBufferExecCompleted(); } } @@ -1738,7 +1738,7 @@ static void OpponentHandleSpriteInvisibility(void) static void OpponentHandleBattleAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u8 animationId = gBattleBufferA[gActiveBattler][1]; u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c index db51f6e05..a162981ec 100644 --- a/src/battle_controller_player.c +++ b/src/battle_controller_player.c @@ -98,13 +98,13 @@ static u32 CopyPlayerMonData(u8 monId, u8 *dst); static void SetPlayerMonData(u8 monId); static void DoSwitchOutAnimation(void); static void PlayerDoMoveAnimation(void); -static void task05_08033660(u8 taskId); -static void sub_8033AC8(void); -static void sub_802FCAC(void); -static void sub_80300F4(u8 taskId); -static void sub_80303A8(u8 taskId); -static void sub_8031FF4(u8 battlerId, bool8 dontClearSubstituteBit); -static void sub_8033830(void); +static void Task_StartSendOutAnim(u8 taskId); +static void PreviewDeterminativeMoveTargets(void); +static void SwitchIn_HandleSoundAndEnd(void); +static void Task_GiveExpWithExpBar(u8 taskId); +static void Task_CreateLevelUpVerticalStripes(u8 taskId); +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit); +static void EndDrawPartyStatusSummary(void); static void (*const sPlayerBufferCommands[CONTROLLER_CMDS_COUNT])(void) = { @@ -172,7 +172,7 @@ static const u8 sTargetIdentities[] = { B_POSITION_PLAYER_LEFT, B_POSITION_PLAYE // not used static const u8 gUnknown_8250984[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 }; -void nullsub_13(void) +void PlayerDummy(void) { } @@ -308,7 +308,7 @@ static void HandleInputChooseAction(void) } } -static void sub_802E640(void) +UNUSED static void UnusedEndBounceEffect(void) { EndBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX); EndBounceEffect(gActiveBattler, BOUNCE_MON); @@ -336,7 +336,7 @@ static void HandleInputChooseTarget(void) if (JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; BtlController_EmitTwoReturnValues(1, 10, gMoveSelectionCursor[gActiveBattler] | (gMultiUsePlayerCursor << 8)); EndBounceEffect(gMultiUsePlayerCursor, BOUNCE_HEALTHBOX); PlayerBufferExecCompleted(); @@ -344,7 +344,7 @@ static void HandleInputChooseTarget(void) else if (JOY_NEW(B_BUTTON)) { PlaySE(SE_SELECT); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); @@ -353,7 +353,7 @@ static void HandleInputChooseTarget(void) else if (JOY_NEW(DPAD_LEFT | DPAD_UP)) { PlaySE(SE_SELECT); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; do { @@ -388,12 +388,12 @@ static void HandleInputChooseTarget(void) i = 0; } while (i == 0); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012044; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget; } else if (JOY_NEW(DPAD_RIGHT | DPAD_DOWN)) { PlaySE(SE_SELECT); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012098; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_HideAsMoveTarget; do { @@ -428,7 +428,7 @@ static void HandleInputChooseTarget(void) i = 0; } while (i == 0); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012044; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget; } } @@ -437,7 +437,7 @@ void HandleInputChooseMove(void) bool32 canSelectTarget = FALSE; struct ChooseMoveStruct *moveInfo = (struct ChooseMoveStruct *)(&gBattleBufferA[gActiveBattler][4]); - sub_8033AC8(); + PreviewDeterminativeMoveTargets(); if (JOY_NEW(A_BUTTON)) { u8 moveTarget; @@ -495,7 +495,7 @@ void HandleInputChooseMove(void) gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT); else gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); - gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = sub_8012044; + gSprites[gBattlerSpriteIds[gMultiUsePlayerCursor]].callback = SpriteCb_ShowAsMoveTarget; } } else if (JOY_NEW(B_BUTTON)) @@ -577,7 +577,7 @@ void HandleInputChooseMove(void) } // not used -static u32 sub_802EDDC(void) +static u32 HandleMoveInputUnused(void) { u32 var = 0; @@ -704,7 +704,7 @@ static void HandleMoveSwitching(void) } } if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) - gBattlerControllerFuncs[gActiveBattler] = sub_80E7988; + gBattlerControllerFuncs[gActiveBattler] = OakOldManHandleInputChooseMove; else gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; gMoveSelectionCursor[gActiveBattler] = gMultiUsePlayerCursor; @@ -719,7 +719,7 @@ static void HandleMoveSwitching(void) MoveSelectionDestroyCursorAt(gMultiUsePlayerCursor); MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) - gBattlerControllerFuncs[gActiveBattler] = sub_80E7988; + gBattlerControllerFuncs[gActiveBattler] = OakOldManHandleInputChooseMove; else gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseMove; MoveSelectionDisplayPpString(); @@ -792,7 +792,7 @@ static void HandleMoveSwitching(void) } } -static void sub_802F610(void) +static void SetLinkBattleEndCallbacks(void) { if (gWirelessCommType == 0) { @@ -801,7 +801,7 @@ static void sub_802F610(void) m4aSongNumStop(SE_LOW_HEALTH); gMain.inBattle = 0; gMain.callback1 = gPreBattleCallback1; - SetMainCallback2(sub_8011A1C); + SetMainCallback2(CB2_InitEndLinkBattle); FreeAllWindowBuffers(); } } @@ -810,22 +810,22 @@ static void sub_802F610(void) m4aSongNumStop(SE_LOW_HEALTH); gMain.inBattle = 0; gMain.callback1 = gPreBattleCallback1; - SetMainCallback2(sub_8011A1C); + SetMainCallback2(CB2_InitEndLinkBattle); FreeAllWindowBuffers(); } } -void sub_802F6A8(void) +void SetBattleEndCallbacks(void) { if (!gPaletteFade.active) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { if (gWirelessCommType == 0) - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); else - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); - gBattlerControllerFuncs[gActiveBattler] = sub_802F610; + SetLinkStandbyCallback(); + gBattlerControllerFuncs[gActiveBattler] = SetLinkBattleEndCallbacks; } else { @@ -849,27 +849,27 @@ static void CompleteOnBattlerSpriteCallbackDummy2(void) PlayerBufferExecCompleted(); } -static void sub_802F7A0(void) +static void FreeTrainerSpriteAfterSlide(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) { - nullsub_16(gSaveBlock2Ptr->playerGender); + BattleGfxSfxDummy3(gSaveBlock2Ptr->playerGender); FreeSpriteOamMatrix(&gSprites[gBattlerSpriteIds[gActiveBattler]]); DestroySprite(&gSprites[gBattlerSpriteIds[gActiveBattler]]); PlayerBufferExecCompleted(); } } -static void sub_802F810(void) +static void Intro_DelayAndEnd(void) { - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 0xFF) + if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 0xFF) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; PlayerBufferExecCompleted(); } } -static void sub_802F858(void) +static void Intro_WaitForShinyAnimAndHealthbox(void) { bool8 var = FALSE; @@ -885,16 +885,16 @@ static void sub_802F858(void) var = TRUE; } if (IsCryPlayingOrClearCrySongs()) - var = FALSE; - if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); + var = FALSE; + if (var && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim + && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) + { + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); if (gBattleTypeFlags & BATTLE_TYPE_MULTI) m4aMPlayContinue(&gMPlayInfo_BGM); else @@ -902,55 +902,55 @@ static void sub_802F858(void) HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); if (IsDoubleBattle()) HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], gActiveBattler ^ BIT_FLANK); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 3; - gBattlerControllerFuncs[gActiveBattler] = sub_802F810; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 3; + gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; } } -static void sub_802FA58(void) +static void Intro_TryShinyAnimShowHealthbox(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) - sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80) - sub_80F1720(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) + TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim) + TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler ^ BIT_FLANK); + StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); } - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - gBattleSpritesDataPtr->animationData->field_9_x1 = 0; - gBattlerControllerFuncs[gActiveBattler] = sub_802F858; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0; + gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; } } -static void sub_802FBF4(void) +static void SwitchIn_CleanShinyAnimShowSubstitute(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) + && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattlerControllerFuncs[gActiveBattler] = sub_802FCAC; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd; } } -static void sub_802FCAC(void) +static void SwitchIn_HandleSoundAndEnd(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive && !IsCryPlayingOrClearCrySongs()) @@ -961,26 +961,26 @@ static void sub_802FCAC(void) } } -static void sub_802FD18(void) +static void SwitchIn_TryShinyAnimShowHealthbox(void) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); - if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy + TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy && !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); CopyBattleSpriteInvisibility(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = sub_802FBF4; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_CleanShinyAnimShowSubstitute; } } -void c3_0802FDF4(u8 taskId) +void Task_PlayerController_RestoreBgmAfterCry(u8 taskId) { if (!IsCryPlayingOrClearCrySongs()) { @@ -1078,10 +1078,10 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); PlaySE(SE_EXP); - gTasks[taskId].func = sub_80300F4; + gTasks[taskId].func = Task_GiveExpWithExpBar; } -static void sub_80300F4(u8 taskId) +static void Task_GiveExpWithExpBar(u8 taskId) { if (gTasks[taskId].tExpTask_frames < 13) { @@ -1167,7 +1167,7 @@ static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId) if (IsBattlerSpriteVisible((u8)battlerId) == TRUE) { - gTasks[taskId].func = sub_80303A8; + gTasks[taskId].func = Task_CreateLevelUpVerticalStripes; gTasks[taskId].data[15] = 0; } else @@ -1177,12 +1177,12 @@ static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId) } } -static void sub_80303A8(u8 taskId) +static void Task_CreateLevelUpVerticalStripes(u8 taskId) { s16 *data = gTasks[taskId].data; u8 battlerId = tExpTask_battler; - u16 v5 = GetBattlerSpriteBGPriorityRank(battlerId); - bool32 v6 = ((v5 ^ BIT_SIDE)) != B_SIDE_PLAYER; + u16 bgPriorityRank = GetBattlerSpriteBGPriorityRank(battlerId); + bool32 isOnBg2 = ((bgPriorityRank ^ 1)) != 0; struct Sprite *sprite = &gSprites[gBattlerSpriteIds[battlerId]]; switch (data[15]) @@ -1190,7 +1190,7 @@ static void sub_80303A8(u8 taskId) case 0: if (!IsTextPrinterActive(0)) { - if (!v6) + if (!isOnBg2) { data[14] = gBattle_BG1_X; data[13] = gBattle_BG1_Y; @@ -1210,7 +1210,7 @@ static void sub_80303A8(u8 taskId) case 1: { u32 battlerIdAlt = battlerId; - bool32 v6Alt = v6; + bool32 v6Alt = isOnBg2; MoveBattlerSpriteToBG(battlerIdAlt, v6Alt); } @@ -1235,14 +1235,14 @@ static void sub_80303A8(u8 taskId) } break; case 5: - sub_8073128(v6); + ResetBattleAnimBg(isOnBg2); ++data[15]; break; case 4: ++data[15]; break; case 6: - if (!v6) + if (!isOnBg2) { gBattle_BG1_X = data[14]; gBattle_BG1_Y = data[13]; @@ -1258,7 +1258,7 @@ static void sub_80303A8(u8 taskId) } } -static void sub_8030538(void) +static void FreeMonSpriteAfterFaintAnim(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y + gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.y > DISPLAY_HEIGHT) { @@ -1269,7 +1269,7 @@ static void sub_8030538(void) } } -static void sub_80305A0(void) +static void FreeMonSpriteAfterSwitchOutAnim(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { @@ -1293,8 +1293,8 @@ static void OpenPartyMenuToChooseMon(void) u8 caseId; gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection; - caseId = gTasks[gUnknown_3004FFC[gActiveBattler]].data[0]; - DestroyTask(gUnknown_3004FFC[gActiveBattler]); + caseId = gTasks[gBattleControllerData[gActiveBattler]].data[0]; + DestroyTask(gBattleControllerData[gActiveBattler]); FreeAllWindowBuffers(); OpenPartyMenuInTutorialBattle(caseId); } @@ -1319,7 +1319,7 @@ static void OpenBagAndChooseItem(void) if (!gPaletteFade.active) { gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem; - nullsub_44(); + ReshowBattleScreenDummy(); FreeAllWindowBuffers(); CB2_BagMenuFromBattle(); } @@ -2090,31 +2090,31 @@ static void PlayerHandleSwitchInAnim(void) BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); gActionSelectionCursor[gActiveBattler] = 0; gMoveSelectionCursor[gActiveBattler] = 0; - sub_8031FF4(gActiveBattler, gBattleBufferA[gActiveBattler][2]); - gBattlerControllerFuncs[gActiveBattler] = sub_802FD18; + StartSendOutAnim(gActiveBattler, gBattleBufferA[gActiveBattler][2]); + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnimShowHealthbox; } -static void sub_8031FF4(u8 battlerId, bool8 dontClearSubstituteBit) +static void StartSendOutAnim(u8 battlerId, bool8 dontClearSubstituteBit) { u16 species; ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit); gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); + gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); - gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); } static void PlayerHandleReturnMonToBall(void) @@ -2147,7 +2147,7 @@ static void DoSwitchOutAnimation(void) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0; InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); - gBattlerControllerFuncs[gActiveBattler] = sub_80305A0; + gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterSwitchOutAnim; } break; } @@ -2175,13 +2175,13 @@ static void PlayerHandleDrawTrainerPic(void) if ((gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_RUBY || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_SAPPHIRE || (gLinkPlayers[GetMultiplayerId()].version & 0xFF) == VERSION_EMERALD) - trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + 2; + trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RS_BRENDAN; else - trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + 0; + trainerPicId = gLinkPlayers[GetMultiplayerId()].gender + BACK_PIC_RED; } else { - trainerPicId = gSaveBlock2Ptr->playerGender + 0; + trainerPicId = gSaveBlock2Ptr->playerGender + BACK_PIC_RED; } DecompressTrainerBackPalette(trainerPicId, gActiveBattler); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); @@ -2192,7 +2192,7 @@ static void PlayerHandleDrawTrainerPic(void) gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; } @@ -2215,14 +2215,14 @@ static void PlayerHandleTrainerSlide(void) } DecompressTrainerBackPalette(trainerPicId, gActiveBattler); SetMultiuseSpriteTemplateToTrainerBack(trainerPicId, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - 80, - (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, + 80, + (8 - gTrainerBackPicCoords[trainerPicId].size) * 4 + 80, 30); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2; } @@ -2235,7 +2235,7 @@ static void PlayerHandleTrainerSlideBack(void) gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCallbackDummy); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); - gBattlerControllerFuncs[gActiveBattler] = sub_802F7A0; + gBattlerControllerFuncs[gActiveBattler] = FreeTrainerSpriteAfterSlide; } static void PlayerHandleFaintAnimation(void) @@ -2255,8 +2255,8 @@ static void PlayerHandleFaintAnimation(void) PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110; - gBattlerControllerFuncs[gActiveBattler] = sub_8030538; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim; + gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim; } } } @@ -2296,7 +2296,7 @@ static void PlayerHandlePause(void) static void PlayerHandleMoveAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u16 move = gBattleBufferA[gActiveBattler][1] | (gBattleBufferA[gActiveBattler][2] << 8); @@ -2338,7 +2338,7 @@ static void PlayerDoMoveAnimation(void) case 1: if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { - sub_8035450(0); + SetBattlerSpriteAffineMode(0); DoMoveAnim(move); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; } @@ -2347,7 +2347,7 @@ static void PlayerDoMoveAnimation(void) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_8035450(1); + SetBattlerSpriteAffineMode(1); if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute && multihit < 2) { InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); @@ -2376,8 +2376,8 @@ static void PlayerHandlePrintString(void) gBattle_BG0_Y = 0; stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - if (sub_80D89B0(*stringId)) - BattlePutTextOnWindow(gDisplayedStringBattle, 64); + if (BattleStringShouldBeColored(*stringId)) + BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); else BattlePutTextOnWindow(gDisplayedStringBattle, 0); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2; @@ -2460,10 +2460,10 @@ static void PlayerHandleChoosePokemon(void) { s32 i; - gUnknown_3004FFC[gActiveBattler] = CreateTask(TaskDummy, 0xFF); - gTasks[gUnknown_3004FFC[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; + gBattleControllerData[gActiveBattler] = CreateTask(TaskDummy, 0xFF); + gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4; - *(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2]; + *(&gBattleStruct->playerPartyIdx) = gBattleBufferA[gActiveBattler][2]; *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3]; for (i = 0; i < 3; ++i) gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i]; @@ -2489,13 +2489,13 @@ static void PlayerHandleHealthBarUpdate(void) { u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); u32 curHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_HP); - + SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); } else { u32 maxHP = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MAX_HP); - + SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT); } @@ -2522,13 +2522,13 @@ static void PlayerHandleExpUpdate(void) gTasks[taskId].tExpTask_monId = monId; gTasks[taskId].tExpTask_gainedExp = expPointsToGive; gTasks[taskId].tExpTask_battler = gActiveBattler; - gBattlerControllerFuncs[gActiveBattler] = nullsub_13; + gBattlerControllerFuncs[gActiveBattler] = PlayerDummy; } } static void PlayerHandleStatusIconUpdate(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u8 battlerId; @@ -2541,7 +2541,7 @@ static void PlayerHandleStatusIconUpdate(void) static void PlayerHandleStatusAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); @@ -2707,22 +2707,22 @@ static void PlayerHandleIntroTrainerBallThrow(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 50; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = -40; gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_80755B8; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = PlayerThrowBall_StartAnimLinearTranslation; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80335F8); + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); paletteNum = AllocSpritePalette(0xD6F8); LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2Ptr->playerGender].data, 0x100 + paletteNum * 16, 32); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; - taskId = CreateTask(task05_08033660, 5); + taskId = CreateTask(Task_StartSendOutAnim, 5); gTasks[taskId].data[0] = gActiveBattler; if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - gBattleSpritesDataPtr->animationData->field_9_x1 = 1; - gBattlerControllerFuncs[gActiveBattler] = nullsub_13; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1; + gBattlerControllerFuncs[gActiveBattler] = PlayerDummy; } -void sub_80335F8(struct Sprite *sprite) +void SpriteCB_FreePlayerSpriteLoadMonSprite(struct Sprite *sprite) { u8 battlerId = sprite->data[5]; @@ -2733,7 +2733,7 @@ void sub_80335F8(struct Sprite *sprite) StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0); } -static void task05_08033660(u8 taskId) +static void Task_StartSendOutAnim(u8 taskId) { if (gTasks[taskId].data[1] < 31) { @@ -2747,19 +2747,19 @@ static void task05_08033660(u8 taskId) if (!IsDoubleBattle() || (gBattleTypeFlags & BATTLE_TYPE_MULTI)) { gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_8031FF4(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); } else { gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_8031FF4(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - sub_8031FF4(gActiveBattler, FALSE); + StartSendOutAnim(gActiveBattler, FALSE); gActiveBattler ^= BIT_FLANK; } - gBattlerControllerFuncs[gActiveBattler] = sub_802FA58; + gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; gActiveBattler = savedActiveBattler; DestroyTask(taskId); } @@ -2775,18 +2775,18 @@ static void PlayerHandleDrawPartyStatusSummary(void) { gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown = 1; gBattlerStatusSummaryTaskId[gActiveBattler] = CreatePartyStatusSummarySprites(gActiveBattler, (struct HpAndStatus *)&gBattleBufferA[gActiveBattler][4], gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2]); - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; if (gBattleBufferA[gActiveBattler][2] != 0) - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0x5D; - gBattlerControllerFuncs[gActiveBattler] = sub_8033830; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 93; + gBattlerControllerFuncs[gActiveBattler] = EndDrawPartyStatusSummary; } } -static void sub_8033830(void) +static void EndDrawPartyStatusSummary(void) { - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5++ > 0x5C) + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer++ > 0x5C) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_5 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusDelayTimer = 0; PlayerBufferExecCompleted(); } } @@ -2817,7 +2817,7 @@ static void PlayerHandleSpriteInvisibility(void) static void PlayerHandleBattleAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u8 animationId = gBattleBufferA[gActiveBattler][1]; u16 argument = gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8); @@ -2871,14 +2871,14 @@ static void PlayerHandleCmd55(void) FadeOutMapMusic(5); BeginFastPaletteFade(3); PlayerBufferExecCompleted(); - gBattlerControllerFuncs[gActiveBattler] = sub_802F6A8; + gBattlerControllerFuncs[gActiveBattler] = SetBattleEndCallbacks; } static void PlayerCmdEnd(void) { } -static void sub_8033AC8(void) +static void PreviewDeterminativeMoveTargets(void) { u32 bitMask = 0; u8 startY = 0; diff --git a/src/battle_controller_pokedude.c b/src/battle_controller_pokedude.c index e6af71b6c..0949463c3 100644 --- a/src/battle_controller_pokedude.c +++ b/src/battle_controller_pokedude.c @@ -15,18 +15,19 @@ #include "battle_controllers.h" #include "battle_interface.h" #include "battle_message.h" +#include "battle_string_ids.h" #include "reshow_battle_screen.h" #include "teachy_tv.h" #include "constants/songs.h" #include "constants/moves.h" #include "constants/pokemon.h" -struct Unk_84790E8 +struct PokedudeTextScriptHeader { - u8 unk_0; - u8 unk_1; - u16 unk_2; - void (*unk_4)(void); + u8 btlcmd; + u8 side; + u16 stringid; + void (*callback)(void); }; struct PokedudeBattlePartyInfo @@ -97,471 +98,107 @@ static void PokedudeHandleResetActionMoveSelection(void); static void PokedudeHandleCmd55(void); static void PokedudeCmdEnd(void); -static void sub_8159BA8(void); -static void sub_8159D04(void); +static void PokedudeAction_PrintVoiceoverMessage(void); +static void PokedudeAction_PrintMessageWithHealthboxPals(void); static void PokedudeBufferExecCompleted(void); -static void sub_8159824(void); +static void PokedudeSimulateInputChooseAction(void); static void PokedudeBufferRunCommand(void); -static bool8 sub_8159AB8(void); -static void sub_8159998(void); +static bool8 HandlePokedudeVoiceoverEtc(void); +static void PokedudeSimulateInputChooseMove(void); static void WaitForMonSelection(void); static void CompleteWhenChoseItem(void); -static void sub_81567B0(void); +static void Intro_WaitForShinyAnimAndHealthbox(void); static void Task_LaunchLvlUpAnim(u8 taskId); static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId); static void CompleteOnInactiveTextPrinter2(void); static void Task_PrepareToGiveExpWithExpBar(u8 taskId); -static void sub_8156B24(u8 taskId); +static void Task_GiveExpWithExpBar(u8 taskId); static void Task_UpdateLvlInHealthbox(u8 taskId); static u32 CopyPokedudeMonData(u8 monId, u8 *dst); static void SetPokedudeMonData(u8 monId); -static void sub_8159478(u8 battlerId); +static void StartSendOutAnim(u8 battlerId); static void PokedudeDoMoveAnimation(void); -static void sub_81595EC(u8 taskId); +static void Task_StartSendOutAnim(u8 taskId); static const u8 *GetPokedudeText(void); -u8 *gUnknown_3005EE0[MAX_BATTLERS_COUNT]; - static void (*const sPokedudeBufferCommands[CONTROLLER_CMDS_COUNT])(void) = -{ - PokedudeHandleGetMonData, - PokedudeHandleGetRawMonData, - PokedudeHandleSetMonData, - PokedudeHandleSetRawMonData, - PokedudeHandleLoadMonSprite, - PokedudeHandleSwitchInAnim, - PokedudeHandleReturnMonToBall, - PokedudeHandleDrawTrainerPic, - PokedudeHandleTrainerSlide, - PokedudeHandleTrainerSlideBack, - PokedudeHandleFaintAnimation, - PokedudeHandlePaletteFade, - PokedudeHandleSuccessBallThrowAnim, - PokedudeHandleBallThrowAnim, - PokedudeHandlePause, - PokedudeHandleMoveAnimation, - PokedudeHandlePrintString, - PokedudeHandlePrintSelectionString, - PokedudeHandleChooseAction, - PokedudeHandleUnknownYesNoBox, - PokedudeHandleChooseMove, - PokedudeHandleChooseItem, - PokedudeHandleChoosePokemon, - PokedudeHandleCmd23, - PokedudeHandleHealthBarUpdate, - PokedudeHandleExpUpdate, - PokedudeHandleStatusIconUpdate, - PokedudeHandleStatusAnimation, - PokedudeHandleStatusXor, - PokedudeHandleDataTransfer, - PokedudeHandleDMA3Transfer, - PokedudeHandlePlayBGM, - PokedudeHandleCmd32, - PokedudeHandleTwoReturnValues, - PokedudeHandleChosenMonReturnValue, - PokedudeHandleOneReturnValue, - PokedudeHandleOneReturnValue_Duplicate, - PokedudeHandleCmd37, - PokedudeHandleCmd38, - PokedudeHandleCmd39, - PokedudeHandleCmd40, - PokedudeHandleHitAnimation, - PokedudeHandleCmd42, - PokedudeHandlePlaySE, - PokedudeHandlePlayFanfare, - PokedudeHandleFaintingCry, - PokedudeHandleIntroSlide, - PokedudeHandleIntroTrainerBallThrow, - PokedudeHandleDrawPartyStatusSummary, - PokedudeHandleHidePartyStatusSummary, - PokedudeHandleEndBounceEffect, - PokedudeHandleSpriteInvisibility, - PokedudeHandleBattleAnimation, - PokedudeHandleLinkStandbyMsg, - PokedudeHandleResetActionMoveSelection, - PokedudeHandleCmd55, - PokedudeCmdEnd, -}; + { + PokedudeHandleGetMonData, + PokedudeHandleGetRawMonData, + PokedudeHandleSetMonData, + PokedudeHandleSetRawMonData, + PokedudeHandleLoadMonSprite, + PokedudeHandleSwitchInAnim, + PokedudeHandleReturnMonToBall, + PokedudeHandleDrawTrainerPic, + PokedudeHandleTrainerSlide, + PokedudeHandleTrainerSlideBack, + PokedudeHandleFaintAnimation, + PokedudeHandlePaletteFade, + PokedudeHandleSuccessBallThrowAnim, + PokedudeHandleBallThrowAnim, + PokedudeHandlePause, + PokedudeHandleMoveAnimation, + PokedudeHandlePrintString, + PokedudeHandlePrintSelectionString, + PokedudeHandleChooseAction, + PokedudeHandleUnknownYesNoBox, + PokedudeHandleChooseMove, + PokedudeHandleChooseItem, + PokedudeHandleChoosePokemon, + PokedudeHandleCmd23, + PokedudeHandleHealthBarUpdate, + PokedudeHandleExpUpdate, + PokedudeHandleStatusIconUpdate, + PokedudeHandleStatusAnimation, + PokedudeHandleStatusXor, + PokedudeHandleDataTransfer, + PokedudeHandleDMA3Transfer, + PokedudeHandlePlayBGM, + PokedudeHandleCmd32, + PokedudeHandleTwoReturnValues, + PokedudeHandleChosenMonReturnValue, + PokedudeHandleOneReturnValue, + PokedudeHandleOneReturnValue_Duplicate, + PokedudeHandleCmd37, + PokedudeHandleCmd38, + PokedudeHandleCmd39, + PokedudeHandleCmd40, + PokedudeHandleHitAnimation, + PokedudeHandleCmd42, + PokedudeHandlePlaySE, + PokedudeHandlePlayFanfare, + PokedudeHandleFaintingCry, + PokedudeHandleIntroSlide, + PokedudeHandleIntroTrainerBallThrow, + PokedudeHandleDrawPartyStatusSummary, + PokedudeHandleHidePartyStatusSummary, + PokedudeHandleEndBounceEffect, + PokedudeHandleSpriteInvisibility, + PokedudeHandleBattleAnimation, + PokedudeHandleLinkStandbyMsg, + PokedudeHandleResetActionMoveSelection, + PokedudeHandleCmd55, + PokedudeCmdEnd, + }; // not used static const u8 gUnknown_8479000[] = { 0x48, 0x48, 0x20, 0x5a, 0x50, 0x50, 0x50, 0x58 }; -static const u8 gUnknown_8479008[][8] = -{ - { 0, 0, 0, 0, 64, 0, 0, 0 }, - { 4, 4, 0, 0, 0, 0, 0, 0 }, -}; - -static const u8 gUnknown_8479018[][8] = -{ - { 0, 0, 0, 0, 64, 0, 0, 0 }, - { 1, 0, 0, 0, 64, 0, 0, 0 }, - { 0, 0, 0, 0, 64, 0, 0, 0 }, -}; - -static const u8 gUnknown_8479030[][8] = -{ - { 0, 0, 0, 0, 64, 0, 0, 0 }, - { 2, 0, 0, 0, 64, 0, 0, 0 }, - { 0, 0, 0, 0, 64, 0, 0, 0 }, -}; +#define pdHealthboxPal1 simulatedInputState[0] +#define pdHealthboxPal2 simulatedInputState[1] +#define pdScriptNum simulatedInputState[2] +#define pdMessageNo simulatedInputState[3] -static const u8 gUnknown_8479048[][8] = -{ - { 0, 0, 0, 0, 64, 0, 0, 0 }, - { 0, 0, 0, 0, 64, 0, 0, 0 }, - { 1, 0, 0, 0, 64, 0, 0, 0 }, -}; - -static const u8 (*const gUnknown_8479060[])[8] = -{ - [TTVSCR_BATTLE] = gUnknown_8479008, - [TTVSCR_STATUS] = gUnknown_8479018, - [TTVSCR_MATCHUPS] = gUnknown_8479030, - [TTVSCR_CATCHING] = gUnknown_8479048, -}; - -static const u8 gUnknown_8479070[][8] = -{ - { 2, 2, 0, 0, 64, 0, 0, 0 }, - { 255, 255, 0, 0, 0, 0, 0, 0 }, -}; - -static const u8 gUnknown_8479080[][8] = -{ - { 2, 2, 0, 0, 64, 0, 0, 0 }, - { 2, 0, 0, 0, 64, 0, 0, 0 }, - { 2, 0, 0, 0, 64, 0, 0, 0 }, - { 255, 255, 0, 0, 0, 0, 0, 0 }, -}; - -static const u8 gUnknown_84790A0[][8] = -{ - { 2, 0, 0, 0, 64, 0, 0, 0 }, - { 0, 0, 0, 0, 64, 0, 0, 0 }, - { 0, 0, 0, 0, 64, 0, 0, 0 }, - { 255, 255, 0, 0, 0, 0, 0, 0 }, -}; - -static const u8 gUnknown_84790C0[][8] = -{ - { 0, 2, 0, 0, 64, 0, 0, 0 }, - { 2, 2, 0, 0, 64, 0, 0, 0 }, - { 255, 255, 0, 0, 0, 0, 0, 0 }, -}; - -static const u8 (*const gUnknown_84790D8[])[8] = -{ - [TTVSCR_BATTLE] = gUnknown_8479070, - [TTVSCR_STATUS] = gUnknown_8479080, - [TTVSCR_MATCHUPS] = gUnknown_84790A0, - [TTVSCR_CATCHING] = gUnknown_84790C0, -}; - -static const struct Unk_84790E8 gUnknown_84790E8[] = -{ - { - .unk_0 = 18, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 16, - .unk_1 = 1, - .unk_2 = 4, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 18, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 16, - .unk_1 = 0, - .unk_2 = 13, - .unk_4 = sub_8159BA8, - }, -}; - -static const struct Unk_84790E8 gUnknown_8479108[] = -{ - { - .unk_0 = 18, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = NULL, - }, - { - .unk_0 = 18, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159D04, - }, - { - .unk_0 = 21, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 16, - .unk_1 = 1, - .unk_2 = 4, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 16, - .unk_1 = 0, - .unk_2 = 13, - .unk_4 = sub_8159BA8, - }, -}; - -static const struct Unk_84790E8 gUnknown_8479130[] = -{ - { - .unk_0 = 16, - .unk_1 = 1, - .unk_2 = 4, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 18, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 22, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 16, - .unk_1 = 1, - .unk_2 = 4, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 18, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 20, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 16, - .unk_1 = 0, - .unk_2 = 13, - .unk_4 = sub_8159BA8, - }, -}; - -static const struct Unk_84790E8 gUnknown_8479168[] = -{ - { - .unk_0 = 18, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 18, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = NULL, - }, - { - .unk_0 = 18, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 16, - .unk_1 = 1, - .unk_2 = 107, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 21, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, - { - .unk_0 = 55, - .unk_1 = 0, - .unk_2 = 0, - .unk_4 = sub_8159BA8, - }, -}; - -static const struct Unk_84790E8 *const gUnknown_8479198[] = -{ - [TTVSCR_BATTLE] = gUnknown_84790E8, - [TTVSCR_STATUS] = gUnknown_8479108, - [TTVSCR_MATCHUPS] = gUnknown_8479130, - [TTVSCR_CATCHING] = gUnknown_8479168, -}; - -static const u8 *const sPokedudeTexts_Battle[] = -{ - Pokedude_Text_SpeedierBattlerGoesFirst, - Pokedude_Text_MyRattataFasterThanPidgey, - Pokedude_Text_BattlersTakeTurnsAttacking, - Pokedude_Text_MyRattataWonGetsEXP, -}; - -static const u8 *const sPokedudeTexts_Status[] = -{ - Pokedude_Text_UhOhRattataPoisoned, - Pokedude_Text_UhOhRattataPoisoned, - Pokedude_Text_HealStatusRightAway, - Pokedude_Text_UsingItemTakesTurn, - Pokedude_Text_YayWeManagedToWin, -}; - -static const u8 *const sPokedudeTexts_TypeMatchup[] = -{ - Pokedude_Text_WaterNotVeryEffectiveAgainstGrass, - Pokedude_Text_GrassEffectiveAgainstWater, - Pokedude_Text_LetsTryShiftingMons, - Pokedude_Text_ShiftingUsesTurn, - Pokedude_Text_ButterfreeDoubleResistsGrass, - Pokedude_Text_ButterfreeGoodAgainstOddish, - Pokedude_Text_YeahWeWon, -}; - -static const u8 *const sPokedudeTexts_Catching[] = -{ - Pokedude_Text_WeakenMonBeforeCatching, - Pokedude_Text_WeakenMonBeforeCatching, - Pokedude_Text_BestIfTargetStatused, - Pokedude_Text_CantDoubleUpOnStatus, - Pokedude_Text_LetMeThrowBall, - Pokedude_Text_PickBestKindOfBall, -}; - -static const struct PokedudeBattlePartyInfo sParties_Battle[] = -{ - { - .side = B_SIDE_PLAYER, - .level = 15, - .species = SPECIES_RATTATA, - .moves = { MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK }, - .nature = NATURE_LONELY, - .gender = MALE, - }, - { - .side = B_SIDE_OPPONENT, - .level = 18, - .species = SPECIES_PIDGEY, - .moves = { MOVE_TACKLE, MOVE_SAND_ATTACK, MOVE_GUST, MOVE_QUICK_ATTACK }, - .nature = NATURE_NAUGHTY, - .gender = MALE, - }, - {0xFF} -}; - -static const struct PokedudeBattlePartyInfo sParties_Status[] = -{ - { - .side = B_SIDE_PLAYER, - .level = 15, - .species = SPECIES_RATTATA, - .moves = { MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK }, - .nature = NATURE_LONELY, - .gender = MALE, - }, - { - .side = B_SIDE_OPPONENT, - .level = 14, - .species = SPECIES_ODDISH, - .moves = { MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER }, - .nature = NATURE_RASH, - .gender = MALE, - }, - {0xFF} -}; - -static const struct PokedudeBattlePartyInfo sParties_Matchups[] = -{ - { - .side = B_SIDE_PLAYER, - .level = 15, - .species = SPECIES_POLIWAG, - .moves = { MOVE_WATER_GUN, MOVE_HYPNOSIS, MOVE_BUBBLE }, - .nature = NATURE_RASH, - .gender = MALE, - }, - { - .side = B_SIDE_PLAYER, - .level = 15, - .species = SPECIES_BUTTERFREE, - .moves = { MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_SLEEP_POWDER }, - .nature = NATURE_RASH, - .gender = MALE, - }, - { - .side = B_SIDE_OPPONENT, - .level = 14, - .species = SPECIES_ODDISH, - .moves = { MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER }, - .nature = NATURE_RASH, - .gender = MALE, - }, - {0xFF} -}; - -static const struct PokedudeBattlePartyInfo sParties_Catching[] = -{ - { - .side = B_SIDE_PLAYER, - .level = 15, - .species = SPECIES_BUTTERFREE, - .moves = { MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE }, - .nature = NATURE_RASH, - .gender = MALE, - }, - { - .side = B_SIDE_OPPONENT, - .level = 11, - .species = SPECIES_JIGGLYPUFF, - .moves = { MOVE_SING, MOVE_DEFENSE_CURL, MOVE_POUND }, - .nature = NATURE_CAREFUL, - .gender = MALE, - }, - {0xFF} -}; - - -static const struct PokedudeBattlePartyInfo *const sPokedudeBattlePartyPointers[] = -{ - [TTVSCR_BATTLE] = sParties_Battle, - [TTVSCR_STATUS] = sParties_Status, - [TTVSCR_MATCHUPS] = sParties_Matchups, - [TTVSCR_CATCHING] = sParties_Catching, -}; - -static void nullsub_99(void) +static void PokedudeDummy(void) { } void SetControllerToPokedude(void) { gBattlerControllerFuncs[gActiveBattler] = PokedudeBufferRunCommand; - *(&gBattleStruct->field_96) = gSpecialVar_0x8004; - gBattleStruct->field_97 = 0; + *(&gBattleStruct->pdScriptNum) = gSpecialVar_0x8004; + gBattleStruct->pdMessageNo = 0; } static void PokedudeBufferRunCommand(void) @@ -570,7 +207,7 @@ static void PokedudeBufferRunCommand(void) { if (gBattleBufferA[gActiveBattler][0] < NELEMS(sPokedudeBufferCommands)) { - if (!sub_8159AB8()) + if (!HandlePokedudeVoiceoverEtc()) sPokedudeBufferCommands[gBattleBufferA[gActiveBattler][0]](); } else @@ -580,9 +217,9 @@ static void PokedudeBufferRunCommand(void) } } -static void sub_8156140(void) +static void HandleInputChooseAction(void) { - sub_8159824(); + PokedudeSimulateInputChooseAction(); } static void CompleteOnBattlerSpriteCallbackDummy(void) @@ -591,21 +228,21 @@ static void CompleteOnBattlerSpriteCallbackDummy(void) PokedudeBufferExecCompleted(); } -static void sub_8156184(void) +static void CompleteOnBattlerSpritePosX_0(void) { if (gSprites[gBattlerSpriteIds[gActiveBattler]].animEnded == TRUE - && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0) + && gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x == 0) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80) + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim) { - sub_80F1720(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); + TryShinyAnimation(gActiveBattler, &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]]); } - else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) + else if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); PokedudeBufferExecCompleted(); } } @@ -617,7 +254,7 @@ static void CompleteOnInactiveTextPrinter(void) PokedudeBufferExecCompleted(); } -static void sub_8156254(void) +static void Pokedude_SetBattleEndCallbacks(void) { if (!gPaletteFade.active) { @@ -627,47 +264,47 @@ static void sub_8156254(void) } } -static void sub_8156294(void) +static void SwitchIn_HandleSoundAndEnd(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { - CreateTask(c3_0802FDF4, 10); + CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); PokedudeBufferExecCompleted(); } } -static void sub_81562F0(void) +static void SwitchIn_CleanShinyAnimShowSubstitute(void) { if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1) + && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); - gBattlerControllerFuncs[gActiveBattler] = sub_8156294; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_HandleSoundAndEnd; } } -static void sub_81563A8(void) +static void SwitchIn_TryShinyAnimShowHealthbox(void) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); - if (gSprites[gUnknown_3004FFC[gActiveBattler]].callback == SpriteCallbackDummy - && !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)) + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (gSprites[gBattleControllerData[gActiveBattler]].callback == SpriteCallbackDummy + && !(gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive)) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); CopyBattleSpriteInvisibility(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = sub_81562F0; + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_CleanShinyAnimShowSubstitute; } } @@ -677,18 +314,18 @@ static void CompleteOnSpecialAnimDone(void) PokedudeBufferExecCompleted(); } -static void sub_815649C(void) +static void Intro_DelayAndEnd(void) { - if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 == 255) + if (--gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay == 255) { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_9 = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].introEndDelay = 0; PokedudeBufferExecCompleted(); } } -static void sub_81564E4(void) +static void PokedudeHandleInputChooseMove(void) { - sub_8159998(); + PokedudeSimulateInputChooseMove(); } static void OpenPartyMenuToChooseMon(void) @@ -696,9 +333,9 @@ static void OpenPartyMenuToChooseMon(void) if (!gPaletteFade.active) { gBattlerControllerFuncs[gActiveBattler] = WaitForMonSelection; - DestroyTask(gUnknown_3004FFC[gActiveBattler]); + DestroyTask(gBattleControllerData[gActiveBattler]); FreeAllWindowBuffers(); - OpenPartyMenuInBattle(); + Pokedude_OpenPartyMenuInBattle(); } } @@ -721,7 +358,7 @@ static void OpenBagAndChooseItem(void) if (!gPaletteFade.active) { gBattlerControllerFuncs[gActiveBattler] = CompleteWhenChoseItem; - nullsub_44(); + ReshowBattleScreenDummy(); FreeAllWindowBuffers(); switch (gSpecialVar_0x8004) { @@ -746,55 +383,55 @@ static void CompleteWhenChoseItem(void) } } -static void sub_8156624(void) +static void Intro_TryShinyAnimShowHealthbox(void) { - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) - sub_80F1720(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); - if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 - && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) - sub_80F1720(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive) + TryShinyAnimation(gActiveBattler, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]]); + if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim + && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) + TryShinyAnimation(gActiveBattler ^ BIT_FLANK, &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]]); if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].ballAnimActive && !gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].ballAnimActive) { if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler ^ BIT_FLANK]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler ^ BIT_FLANK]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler ^ BIT_FLANK]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler ^ BIT_FLANK); + StartHealthboxSlideIn(gActiveBattler ^ BIT_FLANK); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler ^ BIT_FLANK]); } - DestroySprite(&gSprites[gUnknown_3004FFC[gActiveBattler]]); + DestroySprite(&gSprites[gBattleControllerData[gActiveBattler]]); UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_ALL); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); - gBattleSpritesDataPtr->animationData->field_9_x1 = 0; - gBattlerControllerFuncs[gActiveBattler] = sub_81567B0; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 0; + gBattlerControllerFuncs[gActiveBattler] = Intro_WaitForShinyAnimAndHealthbox; } } -static void sub_81567B0(void) +static void Intro_WaitForShinyAnimAndHealthbox(void) { bool32 r4 = FALSE; if (gSprites[gHealthboxSpriteIds[gActiveBattler]].callback == SpriteCallbackDummy) r4 = TRUE; if (r4 - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 - && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1) - { - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_1_x1 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].flag_x80 = 0; - gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].field_1_x1 = 0; - FreeSpriteTilesByTag(0x27F9); - FreeSpritePaletteByTag(0x27F9); - CreateTask(c3_0802FDF4, 10); + && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim + && gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim) + { + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].finishedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].triedShinyMonAnim = 0; + gBattleSpritesDataPtr->healthBoxesData[gActiveBattler ^ BIT_FLANK].finishedShinyMonAnim = 0; + FreeSpriteTilesByTag(ANIM_TAG_GOLD_STARS); + FreeSpritePaletteByTag(ANIM_TAG_GOLD_STARS); + CreateTask(Task_PlayerController_RestoreBgmAfterCry, 10); HandleLowHpMusicChange(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = sub_815649C; + gBattlerControllerFuncs[gActiveBattler] = Intro_DelayAndEnd; } } @@ -829,7 +466,7 @@ static void Task_GiveExpToMon(u8 taskId) BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELED_UP, gainedExp); gActiveBattler = savedActiveBattler; if (IsDoubleBattle() == TRUE - && ((u16)monId == gBattlerPartyIndexes[battlerId] || (u16)monId == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])) + && ((u16)monId == gBattlerPartyIndexes[battlerId] || (u16)monId == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])) gTasks[taskId].func = Task_LaunchLvlUpAnim; else gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter; @@ -864,10 +501,10 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId) expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp; SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp); PlaySE(SE_EXP); - gTasks[taskId].func = sub_8156B24; + gTasks[taskId].func = Task_GiveExpWithExpBar; } -static void sub_8156B24(u8 taskId) +static void Task_GiveExpWithExpBar(u8 taskId) { if (gTasks[taskId].tExpTask_frames < 13) { @@ -937,7 +574,7 @@ static void Task_UpdateLvlInHealthbox(u8 taskId) { u8 monIndex = gTasks[taskId].tExpTask_monId; - GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value. + GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value. if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]) UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL); else @@ -957,7 +594,7 @@ static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId) DestroyTask(taskId); } -static void sub_8156DCC(void) +static void FreeMonSpriteAfterFaintAnim(void) { if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { @@ -1020,7 +657,7 @@ static void DoHitAnimBlinkSpriteEffect(void) } } -static void sub_8156F7C(void) +static void DoSwitchOutAnimation(void) { if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { @@ -1448,42 +1085,42 @@ static void SetPokedudeMonData(u8 monId) switch (gBattleBufferA[gActiveBattler][1]) { case REQUEST_ALL_BATTLE: - { - u8 iv; + { + u8 iv; - SetMonData(mon, MON_DATA_SPECIES, &battlePokemon->species); - SetMonData(mon, MON_DATA_HELD_ITEM, &battlePokemon->item); - for (i = 0; i < MAX_MON_MOVES; ++i) - { - SetMonData(mon, MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); - SetMonData(mon, MON_DATA_PP1 + i, &battlePokemon->pp[i]); - } - SetMonData(mon, MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); - SetMonData(mon, MON_DATA_FRIENDSHIP, &battlePokemon->friendship); - SetMonData(mon, MON_DATA_EXP, &battlePokemon->experience); - iv = battlePokemon->hpIV; - SetMonData(mon, MON_DATA_HP_IV, &iv); - iv = battlePokemon->attackIV; - SetMonData(mon, MON_DATA_ATK_IV, &iv); - iv = battlePokemon->defenseIV; - SetMonData(mon, MON_DATA_DEF_IV, &iv); - iv = battlePokemon->speedIV; - SetMonData(mon, MON_DATA_SPEED_IV, &iv); - iv = battlePokemon->spAttackIV; - SetMonData(mon, MON_DATA_SPATK_IV, &iv); - iv = battlePokemon->spDefenseIV; - SetMonData(mon, MON_DATA_SPDEF_IV, &iv); - SetMonData(mon, MON_DATA_PERSONALITY, &battlePokemon->personality); - SetMonData(mon, MON_DATA_STATUS, &battlePokemon->status1); - SetMonData(mon, MON_DATA_LEVEL, &battlePokemon->level); - SetMonData(mon, MON_DATA_HP, &battlePokemon->hp); - SetMonData(mon, MON_DATA_MAX_HP, &battlePokemon->maxHP); - SetMonData(mon, MON_DATA_ATK, &battlePokemon->attack); - SetMonData(mon, MON_DATA_DEF, &battlePokemon->defense); - SetMonData(mon, MON_DATA_SPEED, &battlePokemon->speed); - SetMonData(mon, MON_DATA_SPATK, &battlePokemon->spAttack); - SetMonData(mon, MON_DATA_SPDEF, &battlePokemon->spDefense); + SetMonData(mon, MON_DATA_SPECIES, &battlePokemon->species); + SetMonData(mon, MON_DATA_HELD_ITEM, &battlePokemon->item); + for (i = 0; i < MAX_MON_MOVES; ++i) + { + SetMonData(mon, MON_DATA_MOVE1 + i, &battlePokemon->moves[i]); + SetMonData(mon, MON_DATA_PP1 + i, &battlePokemon->pp[i]); } + SetMonData(mon, MON_DATA_PP_BONUSES, &battlePokemon->ppBonuses); + SetMonData(mon, MON_DATA_FRIENDSHIP, &battlePokemon->friendship); + SetMonData(mon, MON_DATA_EXP, &battlePokemon->experience); + iv = battlePokemon->hpIV; + SetMonData(mon, MON_DATA_HP_IV, &iv); + iv = battlePokemon->attackIV; + SetMonData(mon, MON_DATA_ATK_IV, &iv); + iv = battlePokemon->defenseIV; + SetMonData(mon, MON_DATA_DEF_IV, &iv); + iv = battlePokemon->speedIV; + SetMonData(mon, MON_DATA_SPEED_IV, &iv); + iv = battlePokemon->spAttackIV; + SetMonData(mon, MON_DATA_SPATK_IV, &iv); + iv = battlePokemon->spDefenseIV; + SetMonData(mon, MON_DATA_SPDEF_IV, &iv); + SetMonData(mon, MON_DATA_PERSONALITY, &battlePokemon->personality); + SetMonData(mon, MON_DATA_STATUS, &battlePokemon->status1); + SetMonData(mon, MON_DATA_LEVEL, &battlePokemon->level); + SetMonData(mon, MON_DATA_HP, &battlePokemon->hp); + SetMonData(mon, MON_DATA_MAX_HP, &battlePokemon->maxHP); + SetMonData(mon, MON_DATA_ATK, &battlePokemon->attack); + SetMonData(mon, MON_DATA_DEF, &battlePokemon->defense); + SetMonData(mon, MON_DATA_SPEED, &battlePokemon->speed); + SetMonData(mon, MON_DATA_SPATK, &battlePokemon->spAttack); + SetMonData(mon, MON_DATA_SPDEF, &battlePokemon->spDefense); + } break; case REQUEST_SPECIES_BATTLE: SetMonData(mon, MON_DATA_SPECIES, &gBattleBufferA[gActiveBattler][3]); @@ -1679,7 +1316,7 @@ static void PokedudeHandleLoadMonSprite(void) gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], gBattleMonForms[gActiveBattler]); SetBattlerShadowSpriteCallback(gActiveBattler, GetMonData(&gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_SPECIES)); - gBattlerControllerFuncs[gActiveBattler] = sub_8156184; + gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpritePosX_0; PokedudeBufferExecCompleted(); } @@ -1690,8 +1327,8 @@ static void PokedudeHandleSwitchInAnim(void) BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], gActiveBattler); gActionSelectionCursor[gActiveBattler] = 0; gMoveSelectionCursor[gActiveBattler] = 0; - sub_8159478(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = sub_81563A8; + StartSendOutAnim(gActiveBattler); + gBattlerControllerFuncs[gActiveBattler] = SwitchIn_TryShinyAnimShowHealthbox; } static void PokedudeHandleReturnMonToBall(void) @@ -1699,7 +1336,7 @@ static void PokedudeHandleReturnMonToBall(void) if (gBattleBufferA[gActiveBattler][1] == 0) { InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_SWITCH_OUT_PLAYER_MON); - gBattlerControllerFuncs[gActiveBattler] = sub_8156F7C; + gBattlerControllerFuncs[gActiveBattler] = DoSwitchOutAnimation; } else { @@ -1714,16 +1351,16 @@ static void PokedudeHandleDrawTrainerPic(void) { if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { - DecompressTrainerBackPalette(4, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(4, GetBattlerPosition(gActiveBattler)); + DecompressTrainerBackPalette(BACK_PIC_POKEDUDE, gActiveBattler); + SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler)); gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - 80, - (8 - gTrainerBackPicCoords[4].size) * 4 + 80, - 30); + 80, + (8 - gTrainerBackPicCoords[BACK_PIC_POKEDUDE].size) * 4 + 80, + 30); gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; } else { @@ -1740,23 +1377,23 @@ static void PokedudeHandleDrawTrainerPic(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum; gSprites[gBattlerSpriteIds[gActiveBattler]].oam.tileNum = GetSpriteTileStartByTag(gTrainerFrontPicTable[tranerPicid].tag); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = tranerPicid; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; } gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; } static void PokedudeHandleTrainerSlide(void) { - DecompressTrainerBackPalette(4, gActiveBattler); - SetMultiuseSpriteTemplateToTrainerBack(4, GetBattlerPosition(gActiveBattler)); - gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, - 80, - (8 - gTrainerBackPicCoords[4].size) * 4 + 80, + DecompressTrainerBackPalette(BACK_PIC_POKEDUDE, gActiveBattler); + SetMultiuseSpriteTemplateToTrainerBack(BACK_PIC_POKEDUDE, GetBattlerPosition(gActiveBattler)); + gBattlerSpriteIds[gActiveBattler] = CreateSprite(&gMultiuseSpriteTemplate, + 80, + (8 - gTrainerBackPicCoords[BACK_PIC_POKEDUDE].size) * 4 + 80, 30); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = -96; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = 2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy2; } @@ -1784,14 +1421,14 @@ static void PokedudeHandleFaintAnimation(void) PlaySE12WithPanning(SE_FAINT, SOUND_PAN_ATTACKER); gSprites[gBattlerSpriteIds[gActiveBattler]].data[1] = 0; gSprites[gBattlerSpriteIds[gActiveBattler]].data[2] = 5; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8012110; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintSlideAnim; } else { PlaySE12WithPanning(SE_FAINT, SOUND_PAN_TARGET); gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_FaintOpponentMon; } - gBattlerControllerFuncs[gActiveBattler] = sub_8156DCC; + gBattlerControllerFuncs[gActiveBattler] = FreeMonSpriteAfterFaintAnim; } } } @@ -1860,7 +1497,7 @@ static void PokedudeDoMoveAnimation(void) case 1: if (!gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].specialAnimActive) { - sub_8035450(0); + SetBattlerSpriteAffineMode(0); DoMoveAnim(move); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 2; } @@ -1869,7 +1506,7 @@ static void PokedudeDoMoveAnimation(void) gAnimScriptCallback(); if (!gAnimScriptActive) { - sub_8035450(1); + SetBattlerSpriteAffineMode(1); if (gBattleSpritesDataPtr->battlerData[gActiveBattler].behindSubstitute) InitAndLaunchSpecialAnimation(gActiveBattler, gActiveBattler, gActiveBattler, B_ANIM_MON_TO_SUBSTITUTE); gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 3; @@ -1895,8 +1532,8 @@ static void PokedudeHandlePrintString(void) gBattle_BG0_Y = 0; stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - if (sub_80D89B0(*stringId)) - BattlePutTextOnWindow(gDisplayedStringBattle, 64); + if (BattleStringShouldBeColored(*stringId)) + BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); else BattlePutTextOnWindow(gDisplayedStringBattle, 0); gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter; @@ -1910,13 +1547,13 @@ static void PokedudeHandlePrintSelectionString(void) PokedudeBufferExecCompleted(); } -static void sub_8158B20(void) +static void HandleChooseActionAfterDma3(void) { if (!IsDma3ManagerBusyWithBgCopy()) { gBattle_BG0_X = 0; gBattle_BG0_Y = 160; - gBattlerControllerFuncs[gActiveBattler] = sub_8156140; + gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseAction; } } @@ -1926,7 +1563,7 @@ static void PokedudeHandleChooseAction(void) if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { - gBattlerControllerFuncs[gActiveBattler] = sub_8158B20; + gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3; BattlePutTextOnWindow(gText_EmptyString3, 0); BattlePutTextOnWindow(gText_BattleMenu, 2); for (i = 0; i < MAX_MON_MOVES; ++i) @@ -1937,7 +1574,7 @@ static void PokedudeHandleChooseAction(void) } else { - gBattlerControllerFuncs[gActiveBattler] = sub_8156140; + gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseAction; } } @@ -1946,13 +1583,13 @@ static void PokedudeHandleUnknownYesNoBox(void) PokedudeBufferExecCompleted(); } -static void sub_8158C04(void) +static void PokedudeHandleChooseMoveAfterDma3(void) { if (!IsDma3ManagerBusyWithBgCopy()) { gBattle_BG0_X = 0; gBattle_BG0_Y = 320; - gBattlerControllerFuncs[gActiveBattler] = sub_81564E4; + gBattlerControllerFuncs[gActiveBattler] = PokedudeHandleInputChooseMove; } } @@ -1961,11 +1598,11 @@ static void PokedudeHandleChooseMove(void) if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { InitMoveSelectionsVarsAndStrings(); - gBattlerControllerFuncs[gActiveBattler] = sub_8158C04; + gBattlerControllerFuncs[gActiveBattler] = PokedudeHandleChooseMoveAfterDma3; } else { - gBattlerControllerFuncs[gActiveBattler] = sub_81564E4; + gBattlerControllerFuncs[gActiveBattler] = PokedudeHandleInputChooseMove; } } @@ -1984,10 +1621,10 @@ static void PokedudeHandleChoosePokemon(void) { s32 i; - gUnknown_3004FFC[gActiveBattler] = CreateTask(TaskDummy, 0xFF); - gTasks[gUnknown_3004FFC[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; + gBattleControllerData[gActiveBattler] = CreateTask(TaskDummy, 0xFF); + gTasks[gBattleControllerData[gActiveBattler]].data[0] = gBattleBufferA[gActiveBattler][1] & 0xF; *(&gBattleStruct->battlerPreventingSwitchout) = gBattleBufferA[gActiveBattler][1] >> 4; - *(&gBattleStruct->field_8B) = gBattleBufferA[gActiveBattler][2]; + *(&gBattleStruct->playerPartyIdx) = gBattleBufferA[gActiveBattler][2]; *(&gBattleStruct->abilityPreventingSwitchout) = gBattleBufferA[gActiveBattler][3]; for (i = 0; i < 3; ++i) gBattlePartyCurrentOrder[i] = gBattleBufferA[gActiveBattler][4 + i]; @@ -2016,13 +1653,13 @@ static void PokedudeHandleHealthBarUpdate(void) { u32 maxHP = GetMonData(mon, MON_DATA_MAX_HP); u32 curHP = GetMonData(mon, MON_DATA_HP); - + SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, curHP, hpVal); } else { u32 maxHP = GetMonData(mon, MON_DATA_MAX_HP); - + SetBattleBarStruct(gActiveBattler, gHealthboxSpriteIds[gActiveBattler], maxHP, 0, hpVal); UpdateHpTextInHealthbox(gHealthboxSpriteIds[gActiveBattler], 0, HP_CURRENT); } @@ -2049,13 +1686,13 @@ static void PokedudeHandleExpUpdate(void) gTasks[taskId].tExpTask_monId = monId; gTasks[taskId].tExpTask_gainedExp = expPointsToGive; gTasks[taskId].tExpTask_battler = gActiveBattler; - gBattlerControllerFuncs[gActiveBattler] = nullsub_99; + gBattlerControllerFuncs[gActiveBattler] = PokedudeDummy; } } static void PokedudeHandleStatusIconUpdate(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { u8 battlerId; struct Pokemon *mon; @@ -2073,7 +1710,7 @@ static void PokedudeHandleStatusIconUpdate(void) static void PokedudeHandleStatusAnimation(void) { - if (!mplay_80342A4(gActiveBattler)) + if (!IsBattleSEPlaying(gActiveBattler)) { InitAndLaunchChosenStatusAnimation(gBattleBufferA[gActiveBattler][1], gBattleBufferA[gActiveBattler][2] | (gBattleBufferA[gActiveBattler][3] << 8) | (gBattleBufferA[gActiveBattler][4] << 16) | (gBattleBufferA[gActiveBattler][5] << 24)); @@ -2219,43 +1856,43 @@ static void PokedudeHandleIntroTrainerBallThrow(void) gSprites[gBattlerSpriteIds[gActiveBattler]].data[4] = gSprites[gBattlerSpriteIds[gActiveBattler]].pos1.y; gSprites[gBattlerSpriteIds[gActiveBattler]].callback = StartAnimLinearTranslation; gSprites[gBattlerSpriteIds[gActiveBattler]].data[5] = gActiveBattler; - StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], sub_80335F8); + StoreSpriteCallbackInData6(&gSprites[gBattlerSpriteIds[gActiveBattler]], SpriteCB_FreePlayerSpriteLoadMonSprite); StartSpriteAnim(&gSprites[gBattlerSpriteIds[gActiveBattler]], 1); paletteNum = AllocSpritePalette(0xD6F8); - LoadCompressedPalette(gTrainerBackPicPaletteTable[4].data, 0x100 + paletteNum * 16, 32); + LoadCompressedPalette(gTrainerBackPicPaletteTable[BACK_PIC_POKEDUDE].data, 0x100 + paletteNum * 16, 32); gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = paletteNum; - taskId = CreateTask(sub_81595EC, 5); + taskId = CreateTask(Task_StartSendOutAnim, 5); gTasks[taskId].data[0] = gActiveBattler; if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].partyStatusSummaryShown) gTasks[gBattlerStatusSummaryTaskId[gActiveBattler]].func = Task_HidePartyStatusSummary; - gBattleSpritesDataPtr->animationData->field_9_x1 = 1; - gBattlerControllerFuncs[gActiveBattler] = nullsub_99; + gBattleSpritesDataPtr->animationData->healthboxSlideInStarted = 1; + gBattlerControllerFuncs[gActiveBattler] = PokedudeDummy; } -static void sub_8159478(u8 battlerId) +static void StartSendOutAnim(u8 battlerId) { u16 species; gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = SPECIES_NONE; gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1]; species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES); - gUnknown_3004FFC[battlerId] = CreateInvisibleSpriteWithCallback(sub_8033E3C); + gBattleControllerData[battlerId] = CreateInvisibleSpriteWithCallback(SpriteCB_WaitForBattlerBallReleaseAnim); SetMultiuseSpriteTemplateToPokemon(species, GetBattlerPosition(battlerId)); gBattlerSpriteIds[battlerId] = CreateSprite(&gMultiuseSpriteTemplate, GetBattlerSpriteCoord(battlerId, 2), GetBattlerSpriteDefault_Y(battlerId), GetBattlerSpriteSubpriority(battlerId)); - gSprites[gUnknown_3004FFC[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; + gSprites[gBattleControllerData[battlerId]].data[1] = gBattlerSpriteIds[battlerId]; gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId; gSprites[gBattlerSpriteIds[battlerId]].data[2] = species; gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId; StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]); gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE; gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy; - gSprites[gUnknown_3004FFC[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); + gSprites[gBattleControllerData[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT); } -static void sub_81595EC(u8 taskId) +static void Task_StartSendOutAnim(u8 taskId) { if (gTasks[taskId].data[1] < 31) { @@ -2267,8 +1904,8 @@ static void sub_81595EC(u8 taskId) gActiveBattler = gTasks[taskId].data[0]; gBattleBufferA[gActiveBattler][1] = gBattlerPartyIndexes[gActiveBattler]; - sub_8159478(gActiveBattler); - gBattlerControllerFuncs[gActiveBattler] = sub_8156624; + StartSendOutAnim(gActiveBattler); + gBattlerControllerFuncs[gActiveBattler] = Intro_TryShinyAnimShowHealthbox; gActiveBattler = savedActiveBattler; DestroyTask(taskId); } @@ -2277,7 +1914,7 @@ static void sub_81595EC(u8 taskId) static void PokedudeHandleDrawPartyStatusSummary(void) { if (gBattleBufferA[gActiveBattler][1] != 0 - && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { PokedudeBufferExecCompleted(); } @@ -2344,31 +1981,467 @@ static void PokedudeHandleCmd55(void) { gBattleOutcome = gBattleBufferA[gActiveBattler][1]; FadeOutMapMusic(5); - BeginFastPaletteFade(3); + BeginFastPaletteFade(FAST_FADE_OUT_TO_BLACK); PokedudeBufferExecCompleted(); if (!(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER) && gBattleTypeFlags & BATTLE_TYPE_LINK) - gBattlerControllerFuncs[gActiveBattler] = sub_8156254; + gBattlerControllerFuncs[gActiveBattler] = Pokedude_SetBattleEndCallbacks; } static void PokedudeCmdEnd(void) { } -static void sub_8159824(void) +// Script handlers + +struct PokedudeInputScript +{ + // 0-3 for selection, 4 to repeat action, 255 to repeat move + u8 cursorPos[MAX_BATTLERS_COUNT]; + u8 delay[MAX_BATTLERS_COUNT]; +}; + +static const struct PokedudeInputScript sInputScripts_ChooseAction_Battle[] = +{ + { + .cursorPos = {0, 0}, + .delay = {64, 0} + }, + { + .cursorPos = {4, 4}, + .delay = {0, 0} + }, +}; + +static const struct PokedudeInputScript sInputScripts_ChooseAction_Status[] = +{ + { + .cursorPos = {0, 0}, + .delay = {64, 0} + }, + { + .cursorPos = {1, 0}, + .delay = {64, 0} + }, + { + .cursorPos = {0, 0}, + .delay = {64, 0} + }, +}; + +static const struct PokedudeInputScript sInputScripts_ChooseAction_Matchups[] = +{ + { + .cursorPos = {0, 0}, + .delay = {64, 0} + }, + { + .cursorPos = {2, 0}, + .delay = {64, 0} + }, + { + .cursorPos = {0, 0}, + .delay = {64, 0} + }, +}; + +static const struct PokedudeInputScript sInputScripts_ChooseAction_Catching[] = +{ + { + .cursorPos = {0, 0}, + .delay = {64, 0} + }, + { + .cursorPos = {0, 0}, + .delay = {64, 0} + }, + { + .cursorPos = {1, 0}, + .delay = {64, 0} + }, +}; + +static const struct PokedudeInputScript *const sInputScripts_ChooseAction[] = +{ + [TTVSCR_BATTLE] = sInputScripts_ChooseAction_Battle, + [TTVSCR_STATUS] = sInputScripts_ChooseAction_Status, + [TTVSCR_MATCHUPS] = sInputScripts_ChooseAction_Matchups, + [TTVSCR_CATCHING] = sInputScripts_ChooseAction_Catching, +}; + +static const struct PokedudeInputScript sInputScripts_ChooseMove_Battle[] = { - const u8 (*r7)[8] = gUnknown_8479060[gBattleStruct->field_96]; - + { + .cursorPos = { 2, 2}, + .delay = { 64, 0} + }, + { + .cursorPos = {255, 255}, + .delay = { 0, 0} + }, +}; + +static const struct PokedudeInputScript sInputScripts_ChooseMove_Status[] = +{ + { + .cursorPos = { 2, 2}, + .delay = { 64, 0} + }, + { + .cursorPos = { 2, 0}, + .delay = { 64, 0} + }, + { + .cursorPos = { 2, 0}, + .delay = { 64, 0} + }, + { + .cursorPos = {255, 255}, + .delay = { 0, 0} + }, +}; + +static const struct PokedudeInputScript sInputScripts_ChooseMove_Matchups[] = +{ + { + .cursorPos = { 2, 0}, + .delay = { 64, 0} + }, + { + .cursorPos = { 0, 0}, + .delay = { 64, 0} + }, + { + .cursorPos = { 0, 0}, + .delay = { 64, 0} + }, + { + .cursorPos = {255, 255}, + .delay = { 0, 0} + }, +}; + +static const struct PokedudeInputScript sInputScripts_ChooseMove_Catching[] = +{ + { + .cursorPos = { 0, 2}, + .delay = { 64, 0} + }, + { + .cursorPos = { 2, 2}, + .delay = { 64, 0} + }, + { + .cursorPos = {255, 255}, + .delay = { 0, 0} + }, +}; + +static const struct PokedudeInputScript *const sInputScripts_ChooseMove[] = +{ + [TTVSCR_BATTLE] = sInputScripts_ChooseMove_Battle, + [TTVSCR_STATUS] = sInputScripts_ChooseMove_Status, + [TTVSCR_MATCHUPS] = sInputScripts_ChooseMove_Matchups, + [TTVSCR_CATCHING] = sInputScripts_ChooseMove_Catching, +}; + +static const struct PokedudeTextScriptHeader sPokedudeTextScripts_Battle[] = +{ + { + .btlcmd = CONTROLLER_CHOOSEACTION, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_PRINTSTRING, + .side = B_SIDE_OPPONENT, + .stringid = STRINGID_USEDMOVE, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_CHOOSEACTION, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_PRINTSTRING, + .side = B_SIDE_PLAYER, + .stringid = STRINGID_PKMNGAINEDEXP, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, +}; + +static const struct PokedudeTextScriptHeader sPokedudeTextScripts_Status[] = +{ + { + .btlcmd = CONTROLLER_CHOOSEACTION, + .side = B_SIDE_PLAYER, + .callback = NULL, + }, + { + .btlcmd = CONTROLLER_CHOOSEACTION, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintMessageWithHealthboxPals, + }, + { + .btlcmd = CONTROLLER_OPENBAG, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_PRINTSTRING, + .side = B_SIDE_OPPONENT, + .stringid = STRINGID_USEDMOVE, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_PRINTSTRING, + .side = B_SIDE_PLAYER, + .stringid = STRINGID_PKMNGAINEDEXP, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, +}; + +static const struct PokedudeTextScriptHeader sPokedudeTextScripts_Matchups[] = +{ + { + .btlcmd = CONTROLLER_PRINTSTRING, + .side = B_SIDE_OPPONENT, + .stringid = STRINGID_USEDMOVE, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_CHOOSEACTION, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_CHOOSEPOKEMON, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_PRINTSTRING, + .side = B_SIDE_OPPONENT, + .stringid = STRINGID_USEDMOVE, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_CHOOSEACTION, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_CHOOSEMOVE, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_PRINTSTRING, + .side = B_SIDE_PLAYER, + .stringid = STRINGID_PKMNGAINEDEXP, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, +}; + +static const struct PokedudeTextScriptHeader sPokedudeTextScripts_Catching[] = +{ + { + .btlcmd = CONTROLLER_CHOOSEACTION, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_CHOOSEACTION, + .side = B_SIDE_PLAYER, + .callback = NULL, + }, + { + .btlcmd = CONTROLLER_CHOOSEACTION, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_PRINTSTRING, + .side = B_SIDE_OPPONENT, + .stringid = STRINGID_PKMNFASTASLEEP, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_OPENBAG, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, + { + .btlcmd = CONTROLLER_55, + .side = B_SIDE_PLAYER, + .callback = PokedudeAction_PrintVoiceoverMessage, + }, +}; + +static const struct PokedudeTextScriptHeader *const sPokedudeTextScripts[] = +{ + [TTVSCR_BATTLE] = sPokedudeTextScripts_Battle, + [TTVSCR_STATUS] = sPokedudeTextScripts_Status, + [TTVSCR_MATCHUPS] = sPokedudeTextScripts_Matchups, + [TTVSCR_CATCHING] = sPokedudeTextScripts_Catching, +}; + +static const u8 *const sPokedudeTexts_Battle[] = +{ + Pokedude_Text_SpeedierBattlerGoesFirst, + Pokedude_Text_MyRattataFasterThanPidgey, + Pokedude_Text_BattlersTakeTurnsAttacking, + Pokedude_Text_MyRattataWonGetsEXP, +}; + +static const u8 *const sPokedudeTexts_Status[] = +{ + Pokedude_Text_UhOhRattataPoisoned, + Pokedude_Text_UhOhRattataPoisoned, + Pokedude_Text_HealStatusRightAway, + Pokedude_Text_UsingItemTakesTurn, + Pokedude_Text_YayWeManagedToWin, +}; + +static const u8 *const sPokedudeTexts_TypeMatchup[] = +{ + Pokedude_Text_WaterNotVeryEffectiveAgainstGrass, + Pokedude_Text_GrassEffectiveAgainstWater, + Pokedude_Text_LetsTryShiftingMons, + Pokedude_Text_ShiftingUsesTurn, + Pokedude_Text_ButterfreeDoubleResistsGrass, + Pokedude_Text_ButterfreeGoodAgainstOddish, + Pokedude_Text_YeahWeWon, +}; + +static const u8 *const sPokedudeTexts_Catching[] = +{ + Pokedude_Text_WeakenMonBeforeCatching, + Pokedude_Text_WeakenMonBeforeCatching, + Pokedude_Text_BestIfTargetStatused, + Pokedude_Text_CantDoubleUpOnStatus, + Pokedude_Text_LetMeThrowBall, + Pokedude_Text_PickBestKindOfBall, +}; + +static const struct PokedudeBattlePartyInfo sParties_Battle[] = +{ + { + .side = B_SIDE_PLAYER, + .level = 15, + .species = SPECIES_RATTATA, + .moves = { MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK }, + .nature = NATURE_LONELY, + .gender = MALE, + }, + { + .side = B_SIDE_OPPONENT, + .level = 18, + .species = SPECIES_PIDGEY, + .moves = { MOVE_TACKLE, MOVE_SAND_ATTACK, MOVE_GUST, MOVE_QUICK_ATTACK }, + .nature = NATURE_NAUGHTY, + .gender = MALE, + }, + {0xFF} +}; + +static const struct PokedudeBattlePartyInfo sParties_Status[] = +{ + { + .side = B_SIDE_PLAYER, + .level = 15, + .species = SPECIES_RATTATA, + .moves = { MOVE_TACKLE, MOVE_TAIL_WHIP, MOVE_HYPER_FANG, MOVE_QUICK_ATTACK }, + .nature = NATURE_LONELY, + .gender = MALE, + }, + { + .side = B_SIDE_OPPONENT, + .level = 14, + .species = SPECIES_ODDISH, + .moves = { MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER }, + .nature = NATURE_RASH, + .gender = MALE, + }, + {0xFF} +}; + +static const struct PokedudeBattlePartyInfo sParties_Matchups[] = +{ + { + .side = B_SIDE_PLAYER, + .level = 15, + .species = SPECIES_POLIWAG, + .moves = { MOVE_WATER_GUN, MOVE_HYPNOSIS, MOVE_BUBBLE }, + .nature = NATURE_RASH, + .gender = MALE, + }, + { + .side = B_SIDE_PLAYER, + .level = 15, + .species = SPECIES_BUTTERFREE, + .moves = { MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_STUN_SPORE, MOVE_SLEEP_POWDER }, + .nature = NATURE_RASH, + .gender = MALE, + }, + { + .side = B_SIDE_OPPONENT, + .level = 14, + .species = SPECIES_ODDISH, + .moves = { MOVE_ABSORB, MOVE_SWEET_SCENT, MOVE_POISON_POWDER }, + .nature = NATURE_RASH, + .gender = MALE, + }, + {0xFF} +}; + +static const struct PokedudeBattlePartyInfo sParties_Catching[] = +{ + { + .side = B_SIDE_PLAYER, + .level = 15, + .species = SPECIES_BUTTERFREE, + .moves = { MOVE_CONFUSION, MOVE_POISON_POWDER, MOVE_SLEEP_POWDER, MOVE_STUN_SPORE }, + .nature = NATURE_RASH, + .gender = MALE, + }, + { + .side = B_SIDE_OPPONENT, + .level = 11, + .species = SPECIES_JIGGLYPUFF, + .moves = { MOVE_SING, MOVE_DEFENSE_CURL, MOVE_POUND }, + .nature = NATURE_CAREFUL, + .gender = MALE, + }, + {0xFF} +}; + + +static const struct PokedudeBattlePartyInfo *const sPokedudeBattlePartyPointers[] = +{ + [TTVSCR_BATTLE] = sParties_Battle, + [TTVSCR_STATUS] = sParties_Status, + [TTVSCR_MATCHUPS] = sParties_Matchups, + [TTVSCR_CATCHING] = sParties_Catching, +}; + +struct PokedudeBattlerState *gPokedudeBattlerStates[MAX_BATTLERS_COUNT]; + +static void PokedudeSimulateInputChooseAction(void) +{ + const struct PokedudeInputScript *script_p = sInputScripts_ChooseAction[gBattleStruct->pdScriptNum]; + if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { DoBounceEffect(gActiveBattler, BOUNCE_HEALTHBOX, 7, 1); DoBounceEffect(gActiveBattler, BOUNCE_MON, 7, 1); } - if (*(r7[gUnknown_3005EE0[gActiveBattler][0]] + gActiveBattler + 4) == gUnknown_3005EE0[gActiveBattler][2]) + if (script_p[gPokedudeBattlerStates[gActiveBattler]->action_idx].delay[gActiveBattler] == gPokedudeBattlerStates[gActiveBattler]->timer) { if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) PlaySE(SE_SELECT); - gUnknown_3005EE0[gActiveBattler][2] = 0; - switch (r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler]) + gPokedudeBattlerStates[gActiveBattler]->timer = 0; + switch (script_p[gPokedudeBattlerStates[gActiveBattler]->action_idx].cursorPos[gActiveBattler]) { case 0: BtlController_EmitTwoReturnValues(1, B_ACTION_USE_MOVE, 0); @@ -2384,169 +2457,169 @@ static void sub_8159824(void) break; } PokedudeBufferExecCompleted(); - ++gUnknown_3005EE0[gActiveBattler][0]; - if (r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler] == 4) - gUnknown_3005EE0[gActiveBattler][0] = 0; + ++gPokedudeBattlerStates[gActiveBattler]->action_idx; + if (script_p[gPokedudeBattlerStates[gActiveBattler]->action_idx].cursorPos[gActiveBattler] == 4) + gPokedudeBattlerStates[gActiveBattler]->action_idx = 0; } else { - if (gActionSelectionCursor[gActiveBattler] != r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler] - && r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler + 4] / 2 == gUnknown_3005EE0[gActiveBattler][2]) + if (gActionSelectionCursor[gActiveBattler] != script_p[gPokedudeBattlerStates[gActiveBattler]->action_idx].cursorPos[gActiveBattler] + && script_p[gPokedudeBattlerStates[gActiveBattler]->action_idx].delay[gActiveBattler] / 2 == gPokedudeBattlerStates[gActiveBattler]->timer) { PlaySE(SE_SELECT); ActionSelectionDestroyCursorAt(gActionSelectionCursor[gActiveBattler]); - gActionSelectionCursor[gActiveBattler] = r7[gUnknown_3005EE0[gActiveBattler][0]][gActiveBattler]; + gActionSelectionCursor[gActiveBattler] = script_p[gPokedudeBattlerStates[gActiveBattler]->action_idx].cursorPos[gActiveBattler]; ActionSelectionCreateCursorAt(gActionSelectionCursor[gActiveBattler], 0); } - ++gUnknown_3005EE0[gActiveBattler][2]; + ++gPokedudeBattlerStates[gActiveBattler]->timer; } } -static void sub_8159998(void) +static void PokedudeSimulateInputChooseMove(void) { - const u8 (*r7)[8] = gUnknown_84790D8[gBattleStruct->field_96]; + const struct PokedudeInputScript *script_p = sInputScripts_ChooseMove[gBattleStruct->pdScriptNum]; - if (*(r7[gUnknown_3005EE0[gActiveBattler][1]] + gActiveBattler + 4) == gUnknown_3005EE0[gActiveBattler][2]) + if (script_p[gPokedudeBattlerStates[gActiveBattler]->move_idx].delay[gActiveBattler] == gPokedudeBattlerStates[gActiveBattler]->timer) { if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) PlaySE(SE_SELECT); - gUnknown_3005EE0[gActiveBattler][2] = 0; + gPokedudeBattlerStates[gActiveBattler]->timer = 0; BtlController_EmitTwoReturnValues(1, B_ACTION_EXEC_SCRIPT, - r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler] | ((gActiveBattler ^ BIT_SIDE) << 8)); + script_p[gPokedudeBattlerStates[gActiveBattler]->move_idx].cursorPos[gActiveBattler] | ((gActiveBattler ^ BIT_SIDE) << 8)); PokedudeBufferExecCompleted(); - ++gUnknown_3005EE0[gActiveBattler][1]; - if (r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler] == 255) - gUnknown_3005EE0[gActiveBattler][1] = 0; + ++gPokedudeBattlerStates[gActiveBattler]->move_idx; + if (script_p[gPokedudeBattlerStates[gActiveBattler]->move_idx].cursorPos[gActiveBattler] == 255) + gPokedudeBattlerStates[gActiveBattler]->move_idx = 0; } else { - if (r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler] != gMoveSelectionCursor[gActiveBattler] - && r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler + 4] / 2 == gUnknown_3005EE0[gActiveBattler][2]) + if (script_p[gPokedudeBattlerStates[gActiveBattler]->move_idx].cursorPos[gActiveBattler] != gMoveSelectionCursor[gActiveBattler] + && script_p[gPokedudeBattlerStates[gActiveBattler]->move_idx].delay[gActiveBattler] / 2 == gPokedudeBattlerStates[gActiveBattler]->timer) { PlaySE(SE_SELECT); MoveSelectionDestroyCursorAt(gMoveSelectionCursor[gActiveBattler]); - gMoveSelectionCursor[gActiveBattler] = r7[gUnknown_3005EE0[gActiveBattler][1]][gActiveBattler]; + gMoveSelectionCursor[gActiveBattler] = script_p[gPokedudeBattlerStates[gActiveBattler]->move_idx].cursorPos[gActiveBattler]; MoveSelectionCreateCursorAt(gMoveSelectionCursor[gActiveBattler], 0); } - ++gUnknown_3005EE0[gActiveBattler][2]; + ++gPokedudeBattlerStates[gActiveBattler]->timer; } } -static bool8 sub_8159AB8(void) +static bool8 HandlePokedudeVoiceoverEtc(void) { - const struct Unk_84790E8 *r6 = gUnknown_8479198[gBattleStruct->field_96]; - const u16 * r12 = (const u16 *)&gBattleBufferA[gActiveBattler][2]; + const struct PokedudeTextScriptHeader *header_p = sPokedudeTextScripts[gBattleStruct->pdScriptNum]; + const u16 * bstringid_p = (const u16 *)&gBattleBufferA[gActiveBattler][2]; - if (gBattleBufferA[gActiveBattler][0] != r6[gBattleStruct->field_97].unk_0) + if (gBattleBufferA[gActiveBattler][0] != header_p[gBattleStruct->pdMessageNo].btlcmd) return FALSE; - if (gActiveBattler != r6[gBattleStruct->field_97].unk_1) + if (gActiveBattler != header_p[gBattleStruct->pdMessageNo].side) return FALSE; - if (gBattleBufferA[gActiveBattler][0] == 16 && r6[gBattleStruct->field_97].unk_2 != *r12) + if (gBattleBufferA[gActiveBattler][0] == CONTROLLER_PRINTSTRING && header_p[gBattleStruct->pdMessageNo].stringid != *bstringid_p) return FALSE; - if (r6[gBattleStruct->field_97].unk_4 == NULL) + if (header_p[gBattleStruct->pdMessageNo].callback == NULL) { - gBattleStruct->field_97++; + gBattleStruct->pdMessageNo++; return FALSE; } - gBattlerControllerFuncs[gActiveBattler] = r6[gBattleStruct->field_97].unk_4; - gUnknown_3005EE0[gActiveBattler][2] = 0; - gUnknown_3005EE0[gActiveBattler][3] = r6[gBattleStruct->field_97].unk_2; - gBattleStruct->field_97++; + gBattlerControllerFuncs[gActiveBattler] = header_p[gBattleStruct->pdMessageNo].callback; + gPokedudeBattlerStates[gActiveBattler]->timer = 0; + gPokedudeBattlerStates[gActiveBattler]->msg_idx = header_p[gBattleStruct->pdMessageNo].stringid; + gBattleStruct->pdMessageNo++; return TRUE; } -static void sub_8159B78(void) +static void ReturnFromPokedudeAction(void) { - gUnknown_3005EE0[gActiveBattler][2] = 0; + gPokedudeBattlerStates[gActiveBattler]->timer = 0; gBattlerControllerFuncs[gActiveBattler] = PokedudeBufferRunCommand; } -static void sub_8159BA8(void) +static void PokedudeAction_PrintVoiceoverMessage(void) { - switch (gUnknown_3005EE0[gActiveBattler][2]) + switch (gPokedudeBattlerStates[gActiveBattler]->timer) { case 0: if (!gPaletteFade.active) { BeginNormalPaletteFade(0xFFFFFF7F, 4, 0, 8, RGB_BLACK); - ++gUnknown_3005EE0[gActiveBattler][2]; + ++gPokedudeBattlerStates[gActiveBattler]->timer; } break; case 1: if (!gPaletteFade.active) { - gUnknown_3005EE0[gActiveBattler][4] = gBattle_BG0_Y; - sub_80EB30C(); - ++gUnknown_3005EE0[gActiveBattler][2]; + gPokedudeBattlerStates[gActiveBattler]->saved_bg0y = gBattle_BG0_Y; + BtlCtrl_DrawVoiceoverMessageFrame(); + ++gPokedudeBattlerStates[gActiveBattler]->timer; } break; case 2: gBattle_BG0_Y = 0; BattleStringExpandPlaceholdersToDisplayedString(GetPokedudeText()); BattlePutTextOnWindow(gDisplayedStringBattle, 24); - ++gUnknown_3005EE0[gActiveBattler][2]; + ++gPokedudeBattlerStates[gActiveBattler]->timer; break; case 3: if (!IsTextPrinterActive(24) && JOY_NEW(A_BUTTON)) { PlaySE(SE_SELECT); BeginNormalPaletteFade(0xFFFFFF7F, 4, 8, 0, RGB_BLACK); - ++gUnknown_3005EE0[gActiveBattler][2]; + ++gPokedudeBattlerStates[gActiveBattler]->timer; } break; case 4: if (!gPaletteFade.active) { - if (gUnknown_3005EE0[gActiveBattler][3] == 13) + if (gPokedudeBattlerStates[gActiveBattler]->msg_idx == STRINGID_PKMNGAINEDEXP) { BattleStopLowHpSound(); PlayBGM(MUS_VICTORY_WILD); } - gBattle_BG0_Y = gUnknown_3005EE0[gActiveBattler][4]; - sub_80EB524(); - sub_8159B78(); + gBattle_BG0_Y = gPokedudeBattlerStates[gActiveBattler]->saved_bg0y; + BtlCtrl_RemoveVoiceoverMessageFrame(); + ReturnFromPokedudeAction(); } break; } } -static void sub_8159D04(void) +static void PokedudeAction_PrintMessageWithHealthboxPals(void) { - switch (gUnknown_3005EE0[gActiveBattler][2]) + switch (gPokedudeBattlerStates[gActiveBattler]->timer) { case 0: if (!gPaletteFade.active) { - sub_80EEFC8(&gBattleStruct->field_95, - &gBattleStruct->field_94, - GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); + DoLoadHealthboxPalsForLevelUp(&gBattleStruct->pdHealthboxPal2, + &gBattleStruct->pdHealthboxPal1, + GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); BeginNormalPaletteFade(0xFFFFFF7F, 4, 0, 8, RGB_BLACK); - ++gUnknown_3005EE0[gActiveBattler][2]; + ++gPokedudeBattlerStates[gActiveBattler]->timer; } break; case 1: if (!gPaletteFade.active) { - u32 mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_94]) << 16; + u32 mask = (gBitTable[gBattleStruct->pdHealthboxPal2] | gBitTable[gBattleStruct->pdHealthboxPal1]) << 16; ++mask; // It's possible that this is influenced by other functions, as - --mask; // this also striked in battle_controller_oak_old_man.c but was naturally fixed. + --mask; // this also striked in battle_controller_oak_old_man.c but was naturally fixed. BeginNormalPaletteFade(mask, 4, 8, 0, RGB_BLACK); - ++gUnknown_3005EE0[gActiveBattler][2]; + ++gPokedudeBattlerStates[gActiveBattler]->timer; } break; case 2: if (!gPaletteFade.active) { - sub_80EB30C(); - ++gUnknown_3005EE0[gActiveBattler][2]; + BtlCtrl_DrawVoiceoverMessageFrame(); + ++gPokedudeBattlerStates[gActiveBattler]->timer; } break; case 3: BattleStringExpandPlaceholdersToDisplayedString(GetPokedudeText()); BattlePutTextOnWindow(gDisplayedStringBattle, 24); - ++gUnknown_3005EE0[gActiveBattler][2]; + ++gPokedudeBattlerStates[gActiveBattler]->timer; break; case 4: if (!IsTextPrinterActive(24) && JOY_NEW(A_BUTTON)) @@ -2554,31 +2627,31 @@ static void sub_8159D04(void) u32 mask; PlaySE(SE_SELECT); - mask = (gBitTable[gBattleStruct->field_95] | gBitTable[gBattleStruct->field_94]) << 16; + mask = (gBitTable[gBattleStruct->pdHealthboxPal2] | gBitTable[gBattleStruct->pdHealthboxPal1]) << 16; ++mask; --mask; BeginNormalPaletteFade(mask, 4, 0, 8, RGB_BLACK); - ++gUnknown_3005EE0[gActiveBattler][2]; + ++gPokedudeBattlerStates[gActiveBattler]->timer; } break; case 5: if (!gPaletteFade.active) { BeginNormalPaletteFade(0xFFFFFF7F, 4, 8, 0, RGB_BLACK); - ++gUnknown_3005EE0[gActiveBattler][2]; + ++gPokedudeBattlerStates[gActiveBattler]->timer; } break; case 6: if (!gPaletteFade.active) { - if (gUnknown_3005EE0[gActiveBattler][3] == 13) + if (gPokedudeBattlerStates[gActiveBattler]->msg_idx == STRINGID_PKMNGAINEDEXP) { BattleStopLowHpSound(); PlayBGM(MUS_VICTORY_WILD); } - sub_80EF0E0(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); - sub_80EB524(); - sub_8159B78(); + DoFreeHealthboxPalsForLevelUp(GetBattlerAtPosition(B_POSITION_PLAYER_LEFT)); + BtlCtrl_RemoveVoiceoverMessageFrame(); + ReturnFromPokedudeAction(); } break; } @@ -2586,17 +2659,17 @@ static void sub_8159D04(void) static const u8 *GetPokedudeText(void) { - switch (gBattleStruct->field_96) + switch (gBattleStruct->pdScriptNum) { case TTVSCR_BATTLE: default: - return sPokedudeTexts_Battle[gBattleStruct->field_97 - 1]; + return sPokedudeTexts_Battle[gBattleStruct->pdMessageNo - 1]; case TTVSCR_STATUS: - return sPokedudeTexts_Status[gBattleStruct->field_97 - 1]; + return sPokedudeTexts_Status[gBattleStruct->pdMessageNo - 1]; case TTVSCR_MATCHUPS: - return sPokedudeTexts_TypeMatchup[gBattleStruct->field_97 - 1]; + return sPokedudeTexts_TypeMatchup[gBattleStruct->pdMessageNo - 1]; case TTVSCR_CATCHING: - return sPokedudeTexts_Catching[gBattleStruct->field_97 - 1]; + return sPokedudeTexts_Catching[gBattleStruct->pdMessageNo - 1]; } } diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c index b09661675..de67bf9bc 100644 --- a/src/battle_controller_safari.c +++ b/src/battle_controller_safari.c @@ -139,7 +139,7 @@ static void (*const sSafariBufferCommands[CONTROLLER_CMDS_COUNT])(void) = }; // not used -static void SpriteCB_Null4(struct Sprite *sprite) +static void SafariDummy(void) { } @@ -242,7 +242,7 @@ static void CompleteOnHealthboxSpriteCallbackDummy(void) SafariBufferExecCompleted(); } -static void sub_80DD7B0(void) +static void Safari_SetBattleEndCallbacks(void) { if (!gPaletteFade.active) { @@ -348,7 +348,7 @@ static void SafariHandleDrawTrainerPic(void) gSprites[gBattlerSpriteIds[gActiveBattler]].oam.paletteNum = gActiveBattler; gSprites[gBattlerSpriteIds[gActiveBattler]].pos2.x = 240; gSprites[gBattlerSpriteIds[gActiveBattler]].data[0] = -2; - gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_8033EEC; + gSprites[gBattlerSpriteIds[gActiveBattler]].callback = SpriteCB_TrainerSlideIn; gBattlerControllerFuncs[gActiveBattler] = CompleteOnBattlerSpriteCallbackDummy; } @@ -408,7 +408,7 @@ static void SafariHandlePrintString(void) gBattle_BG0_Y = 0; stringId = (u16 *)(&gBattleBufferA[gActiveBattler][2]); BufferStringBattle(*stringId); - if (sub_80D89B0(*stringId)) + if (BattleStringShouldBeColored(*stringId)) BattlePutTextOnWindow(gDisplayedStringBattle, 0x40); else BattlePutTextOnWindow(gDisplayedStringBattle, 0); @@ -608,7 +608,7 @@ static void SafariHandleIntroSlide(void) static void SafariHandleIntroTrainerBallThrow(void) { UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_SAFARI_ALL_TEXT); - sub_804BD94(gActiveBattler); + StartHealthboxSlideIn(gActiveBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[gActiveBattler]); gBattlerControllerFuncs[gActiveBattler] = CompleteOnHealthboxSpriteCallbackDummy; } @@ -661,7 +661,7 @@ static void SafariHandleCmd55(void) BeginFastPaletteFade(3); SafariBufferExecCompleted(); if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_IS_MASTER)) - gBattlerControllerFuncs[gActiveBattler] = sub_80DD7B0; + gBattlerControllerFuncs[gActiveBattler] = Safari_SetBattleEndCallbacks; } static void SafariCmdEnd(void) diff --git a/src/battle_controllers.c b/src/battle_controllers.c index 583a64eaa..a0495ac15 100644 --- a/src/battle_controllers.c +++ b/src/battle_controllers.c @@ -45,10 +45,10 @@ void SetUpBattleVars(void) { s32 i; - gBattleMainFunc = nullsub_12; + gBattleMainFunc = BattleDummy; for (i = 0; i < MAX_BATTLERS_COUNT; ++i) { - gBattlerControllerFuncs[i] = nullsub_13; + gBattlerControllerFuncs[i] = PlayerDummy; gBattlerPositions[i] = 0xFF; gActionSelectionCursor[i] = 0; gMoveSelectionCursor[i] = 0; @@ -62,7 +62,7 @@ void SetUpBattleVars(void) gUnknown_2023DDC = 0; } -void sub_800D30C(void) +void InitBtlControllers(void) { s32 i; @@ -481,7 +481,7 @@ static void Task_HandleSendLinkBuffersData(u8 taskId) } } -void sub_800DD28(void) +void TryReceiveLinkBattleData(void) { u8 i; s32 j; @@ -748,7 +748,7 @@ void BtlController_EmitPrintString(u8 bufferId, u16 stringID) stringInfo->lastItem = gLastUsedItem; stringInfo->lastAbility = gLastUsedAbility; stringInfo->scrActive = gBattleScripting.battler; - stringInfo->unk1605E = gBattleStruct->field_52; + stringInfo->bakScriptPartyIdx = gBattleStruct->scriptPartyIdx; stringInfo->hpScale = gBattleStruct->hpScale; stringInfo->itemEffectBattler = gPotentialItemEffectBattler; stringInfo->moveType = gBattleMoves[gCurrentMove].type; @@ -778,7 +778,7 @@ void BtlController_EmitPrintSelectionString(u8 bufferId, u16 stringID) stringInfo->lastItem = gLastUsedItem; stringInfo->lastAbility = gLastUsedAbility; stringInfo->scrActive = gBattleScripting.battler; - stringInfo->unk1605E = gBattleStruct->field_52; + stringInfo->bakScriptPartyIdx = gBattleStruct->scriptPartyIdx; for (i = 0; i < MAX_BATTLERS_COUNT; ++i) stringInfo->abilities[i] = gBattleMons[i].ability; for (i = 0; i < TEXT_BUFF_ARRAY_COUNT; ++i) @@ -1097,13 +1097,13 @@ void BtlController_EmitIntroTrainerBallThrow(u8 bufferId) PrepareBufferDataTransfer(bufferId, sBattleBuffersTransferData, 4); } -void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 arg2) +void BtlController_EmitDrawPartyStatusSummary(u8 bufferId, struct HpAndStatus* hpAndStatus, u8 param) { s32 i; sBattleBuffersTransferData[0] = CONTROLLER_DRAWPARTYSTATUSSUMMARY; - sBattleBuffersTransferData[1] = arg2 & 0x7F; - sBattleBuffersTransferData[2] = (arg2 & 0x80) >> 7; + sBattleBuffersTransferData[1] = param & 0x7F; + sBattleBuffersTransferData[2] = (param & 0x80) >> 7; sBattleBuffersTransferData[3] = CONTROLLER_DRAWPARTYSTATUSSUMMARY; for (i = 0; i < (s32)(sizeof(struct HpAndStatus) * PARTY_SIZE); ++i) sBattleBuffersTransferData[4 + i] = *(i + (u8 *)(hpAndStatus)); diff --git a/src/battle_gfx_sfx_util.c b/src/battle_gfx_sfx_util.c index 4340703e3..d0025de01 100644 --- a/src/battle_gfx_sfx_util.c +++ b/src/battle_gfx_sfx_util.c @@ -128,7 +128,7 @@ void FreeBattleSpritesData(void) } } -void sub_8033E3C(struct Sprite *sprite) +void SpriteCB_WaitForBattlerBallReleaseAnim(struct Sprite *sprite) { u8 spriteId = sprite->data[1]; @@ -140,14 +140,14 @@ void sub_8033E3C(struct Sprite *sprite) gSprites[spriteId].animPaused = 0; else if (gSprites[spriteId].animEnded) { - gSprites[spriteId].callback = sub_8012100; + gSprites[spriteId].callback = SpriteCB_SetToDummy3; StartSpriteAffineAnim(&gSprites[spriteId], 0); sprite->callback = SpriteCallbackDummy; } } // not used -static void sub_8033EB0(struct Sprite *sprite, bool8 arg1) +UNUSED static void UnusedDoBattleSpriteAffineAnim(struct Sprite *sprite, bool8 arg1) { sprite->animPaused = 1; sprite->callback = SpriteCallbackDummy; @@ -158,7 +158,7 @@ static void sub_8033EB0(struct Sprite *sprite, bool8 arg1) AnimateSprite(sprite); } -void sub_8033EEC(struct Sprite *sprite) +void SpriteCB_TrainerSlideIn(struct Sprite *sprite) { if (!(gIntroSlideFlags & 1)) { @@ -290,21 +290,24 @@ bool8 IsMoveWithoutAnimation(u16 moveId, u8 animationTurn) return FALSE; } -bool8 mplay_80342A4(u8 battlerId) +bool8 IsBattleSEPlaying(u8 battlerId) { u8 zero = 0; if (IsSEPlaying()) { - ++gBattleSpritesDataPtr->healthBoxesData[battlerId].field_8; - if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].field_8 < 30) + ++gBattleSpritesDataPtr->healthBoxesData[battlerId].soundTimer; + // UB: Uses gActiveBattler instead of battlerId. + // In practice, this is never a problem, as this routine + // is only ever passed gActiveBattler. + if (gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].soundTimer < 30) return TRUE; m4aMPlayStop(&gMPlayInfo_SE1); m4aMPlayStop(&gMPlayInfo_SE2); } if (zero == 0) { - gBattleSpritesDataPtr->healthBoxesData[battlerId].field_8 = 0; + gBattleSpritesDataPtr->healthBoxesData[battlerId].soundTimer = 0; return FALSE; } else @@ -384,7 +387,7 @@ void BattleLoadPlayerMonSpriteGfx(struct Pokemon *mon, u8 battlerId) } otId = GetMonData(mon, MON_DATA_OT_ID); position = GetBattlerPosition(battlerId); - if (sub_804455C(1, battlerId) == 1 || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) + if (ShouldIgnoreDeoxysForm(1, battlerId) == TRUE || gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies != SPECIES_NONE) HandleLoadSpecialPokePic_DontHandleDeoxys(&gMonBackPicTable[species], gMonSpritesGfxPtr->sprites[position], species, currentPersonality); @@ -449,7 +452,7 @@ void DecompressTrainerBackPalette(u16 index, u8 palette) LoadCompressedPalette(gTrainerBackPicPaletteTable[index].data, (palette + 16) * 16, 0x20); } -void nullsub_16(u8 a1) +void BattleGfxSfxDummy3(u8 a1) { } @@ -864,7 +867,7 @@ void HandleBattleLowHpMusicChange(void) } } -void sub_8035450(u8 affineMode) +void SetBattlerSpriteAffineMode(u8 affineMode) { s32 i; @@ -950,9 +953,12 @@ void HideBattlerShadowSprite(u8 battlerId) gSprites[gBattleSpritesDataPtr->healthBoxesData[battlerId].shadowSpriteId].callback = SpriteCB_SetInvisible; } -void sub_80357C8(void) +// Low-level function that sets specific interface tiles' palettes, +// overwriting any pixel with value 0. +void BattleInterfaceSetWindowPals(void) { - u16 *vramPtr = (u16 *)(VRAM + 0x240); + // 9 tiles at 0x06000240 + u16 *vramPtr = (u16 *)(BG_VRAM + 0x240); s32 i; s32 j; @@ -970,7 +976,9 @@ void sub_80357C8(void) *vramPtr |= 0x000F; } } - vramPtr = (u16 *)(VRAM + 0x600); + + // 18 tiles at 0x06000600 + vramPtr = (u16 *)(BG_VRAM + 0x600); for (i = 0; i < 18; ++i) { for (j = 0; j < 16; ++vramPtr, ++j) @@ -1005,15 +1013,15 @@ void AllocateMonSpritesGfx(void) for (i = 0; i < MAX_BATTLERS_COUNT; ++i) { gMonSpritesGfxPtr->sprites[i] = gMonSpritesGfxPtr->firstDecompressed + (i * 0x2000); - *(gMonSpritesGfxPtr->templates + i) = gUnknown_825DEF0[i]; + *(gMonSpritesGfxPtr->templates + i) = gSpriteTemplates_Battlers[i]; for (j = 0; j < 4; ++j) { - gMonSpritesGfxPtr->field_74[i][j].data = gMonSpritesGfxPtr->sprites[i] + (j * 0x800); - gMonSpritesGfxPtr->field_74[i][j].size = 0x800; + gMonSpritesGfxPtr->images[i][j].data = gMonSpritesGfxPtr->sprites[i] + (j * 0x800); + gMonSpritesGfxPtr->images[i][j].size = 0x800; } - gMonSpritesGfxPtr->templates[i].images = gMonSpritesGfxPtr->field_74[i]; + gMonSpritesGfxPtr->templates[i].images = gMonSpritesGfxPtr->images[i]; } gMonSpritesGfxPtr->barFontGfx = AllocZeroed(0x1000); } @@ -1022,8 +1030,8 @@ void FreeMonSpritesGfx(void) { if (gMonSpritesGfxPtr == NULL) return; - if (gMonSpritesGfxPtr->field_17C != NULL) - FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); + if (gMonSpritesGfxPtr->multiUseBuffer != NULL) + FREE_AND_SET_NULL(gMonSpritesGfxPtr->multiUseBuffer); if (gMonSpritesGfxPtr->field_178 != NULL) FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_178); FREE_AND_SET_NULL(gMonSpritesGfxPtr->barFontGfx); diff --git a/src/battle_interface.c b/src/battle_interface.c index 9212cae14..3744c34eb 100644 --- a/src/battle_interface.c +++ b/src/battle_interface.c @@ -1044,17 +1044,17 @@ void SwapHpBarsWithHpText(void) #define tIsBattleStart data[10] #define tData15 data[15] -u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart) +u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, bool8 isSwitchingMons, bool8 isBattleStart) { bool8 isOpponent; - s8 sp14; + s8 nValidMons; s16 bar_X, bar_Y, bar_pos2_X, bar_data0; s32 i; u8 summaryBarSpriteId; u8 ballIconSpritesIds[PARTY_SIZE]; u8 taskId; - if (!arg2 || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT) + if (!isSwitchingMons || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT) { if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) { @@ -1067,7 +1067,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, { isOpponent = TRUE; - if (!arg2 || !IsDoubleBattle()) + if (!isSwitchingMons || !IsDoubleBattle()) bar_X = 104, bar_Y = 40; else bar_X = 104, bar_Y = 16; @@ -1084,10 +1084,10 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, bar_data0 = 5; } - for (i = 0, sp14 = 0; i < PARTY_SIZE; i++) + for (i = 0, nValidMons = 0; i < PARTY_SIZE; i++) { if (partyInfo[i].hp != 0xFFFF) - sp14++; + nValidMons++; } LoadCompressedSpriteSheetUsingHeap(&sStatusSummaryBarSpriteSheets[isOpponent]); @@ -1163,7 +1163,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, } else { - if (i >= sp14) // empty slot or an egg + if (i >= nValidMons) // empty slot or an egg { gSprites[ballIconSpritesIds[i]].oam.tileNum += 1; gSprites[ballIconSpritesIds[i]].data[7] = 1; @@ -1202,7 +1202,7 @@ u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, else { ballIconSpritesIds[5 - i] += 0; - if (i >= sp14) // empty slot or an egg + if (i >= nValidMons) // empty slot or an egg { gSprites[ballIconSpritesIds[5 - i]].oam.tileNum += 1; gSprites[ballIconSpritesIds[5 - i]].data[7] = 1; diff --git a/src/battle_intro.c b/src/battle_intro.c index 04c7072d9..9b1391fab 100644 --- a/src/battle_intro.c +++ b/src/battle_intro.c @@ -9,8 +9,8 @@ static EWRAM_DATA u16 sBgCnt = 0; -extern const u8 gUnknown_83E7CCA[]; -extern const u8 gUnknown_83E7CCE[]; +extern const u8 gBattleAnimRegOffsBgCnt[]; +extern const u8 gBattleIntroRegOffsBgCnt[]; static void BattleIntroSlide1(u8 taskId); static void BattleIntroSlide2(u8 taskId); @@ -35,7 +35,7 @@ void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value) { if (bgId < 4) { - sBgCnt = GetGpuReg(gUnknown_83E7CCA[bgId]); + sBgCnt = GetGpuReg(gBattleAnimRegOffsBgCnt[bgId]); switch (attributeId) { case BG_ANIM_SCREEN_SIZE: @@ -60,7 +60,7 @@ void SetAnimBgAttribute(u8 bgId, u8 attributeId, u8 value) ((struct BgCnt *)&sBgCnt)->screenBaseBlock = value; break; } - SetGpuReg(gUnknown_83E7CCA[bgId], sBgCnt); + SetGpuReg(gBattleAnimRegOffsBgCnt[bgId], sBgCnt); } } @@ -70,7 +70,7 @@ s32 GetAnimBgAttribute(u8 bgId, u8 attributeId) if (bgId < 4) { - bgCnt = GetGpuReg(gUnknown_83E7CCE[bgId]); + bgCnt = GetGpuReg(gBattleIntroRegOffsBgCnt[bgId]); switch (attributeId) { case BG_ANIM_SCREEN_SIZE: @@ -422,9 +422,9 @@ static void BattleIntroSlideLink(u8 taskId) { ++gTasks[taskId].data[0]; gSprites[gBattleStruct->linkBattleVsSpriteId_V].oam.objMode = ST_OAM_OBJ_WINDOW; - gSprites[gBattleStruct->linkBattleVsSpriteId_V].callback = sub_801182C; + gSprites[gBattleStruct->linkBattleVsSpriteId_V].callback = SpriteCB_VsLetterInit; gSprites[gBattleStruct->linkBattleVsSpriteId_S].oam.objMode = ST_OAM_OBJ_WINDOW; - gSprites[gBattleStruct->linkBattleVsSpriteId_S].callback = sub_801182C; + gSprites[gBattleStruct->linkBattleVsSpriteId_S].callback = SpriteCB_VsLetterInit; SetGpuReg(REG_OFFSET_WININ, WININ_WIN0_BG_ALL | WININ_WIN0_OBJ | WININ_WIN0_CLR); SetGpuReg(REG_OFFSET_WINOUT, WINOUT_WINOBJ_BG_ALL | WINOUT_WINOBJ_OBJ | WINOUT_WINOBJ_CLR | WINOUT_WIN01_BG1 | WINOUT_WIN01_BG2); } @@ -465,18 +465,18 @@ static void BattleIntroSlideLink(u8 taskId) } } -void sub_80BCEF4(s32 bgId, u8 arg1, u8 arg2, u8 battlerPosition, u8 arg4, u8 *arg5, u16 *arg6, u16 tilesOffset) +void CopyBattlerSpriteToBg(s32 bgId, u8 x, u8 y, u8 battlerPosition, u8 palno, u8 *tilesDest, u16 *tilemapDest, u16 tilesOffset) { s32 i, j; u8 battler = GetBattlerAtPosition(battlerPosition); s32 offset = tilesOffset; - CpuCopy16(gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], arg5, BG_SCREEN_SIZE); - LoadBgTiles(bgId, arg5, 0x1000, tilesOffset); - for (i = arg2; i < arg2 + 8; ++i) - for (j = arg1; j < arg1 + 8; ++j) - arg6[i * 32 + j] = offset++ | (arg4 << 12); - LoadBgTilemap(bgId, arg6, BG_SCREEN_SIZE, 0); + CpuCopy16(gMonSpritesGfxPtr->sprites[battlerPosition] + BG_SCREEN_SIZE * gBattleMonForms[battler], tilesDest, BG_SCREEN_SIZE); + LoadBgTiles(bgId, tilesDest, 0x1000, tilesOffset); + for (i = y; i < y + 8; ++i) + for (j = x; j < x + 8; ++j) + tilemapDest[i * 32 + j] = offset++ | (palno << 12); + LoadBgTilemap(bgId, tilemapDest, BG_SCREEN_SIZE, 0); } // not used diff --git a/src/battle_main.c b/src/battle_main.c index 08bf6e345..d7f43ce75 100644 --- a/src/battle_main.c +++ b/src/battle_main.c @@ -44,7 +44,7 @@ #include "constants/songs.h" #include "constants/trainer_classes.h" -static void sub_80111EC(struct Sprite *sprite); +static void SpriteCB_UnusedDebugSprite(struct Sprite *sprite); static void HandleAction_UseMove(void); static void HandleAction_Switch(void); static void HandleAction_UseItem(void); @@ -72,18 +72,18 @@ static void CB2_HandleStartBattle(void); static void TryCorrectShedinjaLanguage(struct Pokemon *mon); static void BattleMainCB1(void); static void CB2_QuitPokedudeBattle(void); -static void sub_80111FC(struct Sprite *sprite); -static void sub_8011B94(void); -static void sub_8011BB0(void); +static void SpriteCB_UnusedDebugSprite_Step(struct Sprite *sprite); +static void CB2_EndLinkBattle(void); +static void EndLinkBattleInSteps(void); static void SpriteCB_MoveWildMonToRight(struct Sprite *sprite); static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite); -static void sub_8011E3C(struct Sprite *sprite); +static void SpriteCB_Unused_8011E28_Step(struct Sprite *sprite); static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite); -static void sub_8012060(struct Sprite *sprite); +static void SpriteCb_BlinkVisible(struct Sprite *sprite); static void oac_poke_ally_(struct Sprite *sprite); static void SpriteCallbackDummy3(struct Sprite *sprite); static void SpriteCB_BounceEffect(struct Sprite *sprite); -static void sub_8012398(struct Sprite *sprite); +static void SpriteCB_PlayerThrowUpdate(struct Sprite *sprite); static void BattleStartClearSetData(void); static void BattleIntroGetMonsData(void); static void TurnValuesCleanUp(bool8 var0); @@ -129,10 +129,10 @@ static EWRAM_DATA u32 gUnknown_2022AE8[25] = {0}; EWRAM_DATA u32 gBattleTypeFlags = 0; EWRAM_DATA u8 gBattleTerrain = 0; EWRAM_DATA u32 gUnknown_2022B54 = 0; -EWRAM_DATA struct UnknownPokemonStruct4 gMultiPartnerParty[3] = {0}; -EWRAM_DATA u8 *gUnknown_2022BB8 = NULL; -EWRAM_DATA u8 *gUnknown_2022BBC = NULL; -EWRAM_DATA u16 *gUnknown_2022BC0 = NULL; +EWRAM_DATA struct MultiBattlePokemonTx gMultiPartnerParty[3] = {0}; +EWRAM_DATA u8 *gBattleAnimMons_BgTilesBuffer = NULL; +EWRAM_DATA u8 *gBattleAnimMons_BgTilemapBuffer = NULL; +static EWRAM_DATA u16 *sUnknownDebugSpriteDataBuffer = NULL; EWRAM_DATA u8 gBattleBufferA[MAX_BATTLERS_COUNT][0x200] = {0}; EWRAM_DATA u8 gBattleBufferB[MAX_BATTLERS_COUNT][0x200] = {0}; EWRAM_DATA u8 gActiveBattler = 0; @@ -224,14 +224,14 @@ void (*gBattlerControllerFuncs[MAX_BATTLERS_COUNT])(void); u8 gHealthboxSpriteIds[MAX_BATTLERS_COUNT]; u8 gMultiUsePlayerCursor; u8 gNumberOfMovesToChoose; -u8 gUnknown_3004FFC[MAX_BATTLERS_COUNT]; +u8 gBattleControllerData[MAX_BATTLERS_COUNT]; static const struct ScanlineEffectParams sIntroScanlineParams16Bit = { ®_BG3HOFS, SCANLINE_EFFECT_DMACNT_16BIT, 1 }; -const struct SpriteTemplate gUnknown_824EFF0 = +const struct SpriteTemplate gUnknownDebugSprite = { .tileTag = 0, .paletteTag = 0, @@ -239,12 +239,12 @@ const struct SpriteTemplate gUnknown_824EFF0 = .anims = gDummySpriteAnimTable, .images = NULL, .affineAnims = gDummySpriteAffineAnimTable, - .callback = sub_80111EC, + .callback = SpriteCB_UnusedDebugSprite, }; static const u8 sText_ShedinjaJpnName[] = _("ヌケニン"); // Nukenin -const struct OamData gOamData_824F010 = +const struct OamData gOamData_BattlerOpponent = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -259,7 +259,7 @@ const struct OamData gOamData_824F010 = .affineParam = 0, }; -const struct OamData gOamData_824F018 = +const struct OamData gOamData_BattlerPlayer = { .y = 0, .affineMode = ST_OAM_AFFINE_NORMAL, @@ -282,7 +282,7 @@ static const union AnimCmd gUnknown_824F020[] = }; // not used -static const union AnimCmd *const gUnknown_824F028[] = +static const union AnimCmd *const gUnknown_824F028[] = { gUnknown_824F020, }; @@ -301,7 +301,7 @@ static const union AffineAnimCmd *const gUnknown_824F044[] = gUnknown_824F02C, }; -static const s8 gUnknown_824F048[] = { -32, -16, -16, -32, -32, 0, 0, 0 }; +static const s8 sPlayerThrowXTranslation[] = { -32, -16, -16, -32, -32, 0, 0, 0 }; // format: attacking type, defending type, damage multiplier // the multiplier is a (decimal) fixed-point number: @@ -705,41 +705,50 @@ static void CB2_InitBattleInternal(void) gBattleCommunication[MULTIUSE_STATE] = 0; } -static void sub_800FFEC(void) +#define BUFFER_PARTY_VS_SCREEN_STATUS(party, flags, i) \ + for ((i) = 0; (i) < PARTY_SIZE; (i)++) \ + { \ + u16 species = GetMonData(&(party)[(i)], MON_DATA_SPECIES2); \ + u16 hp = GetMonData(&(party)[(i)], MON_DATA_HP); \ + u32 status = GetMonData(&(party)[(i)], MON_DATA_STATUS); \ + \ + if (species == SPECIES_NONE) \ + continue; \ + \ + /* Is healthy mon? */ \ + if (species != SPECIES_EGG && hp != 0 && status == 0) \ + (flags) |= 1 << (i) * 2; \ + \ + if (species == SPECIES_NONE) /* Redundant */ \ + continue; \ + \ + /* Is Egg or statused? */ \ + if (hp != 0 && (species == SPECIES_EGG || status != 0)) \ + (flags) |= 2 << (i) * 2; \ + \ + if (species == SPECIES_NONE) /* Redundant */ \ + continue; \ + \ + /* Is fainted? */ \ + if (species != SPECIES_EGG && hp == 0) \ + (flags) |= 3 << (i) * 2; \ + } + +static void BufferPartyVsScreenHealth_AtStart(void) { - u16 r6 = 0; - u16 species = SPECIES_NONE; - u16 hp = 0; - u32 status = 0; + u16 flags = 0; s32 i; - for (i = 0; i < PARTY_SIZE; ++i) - { - species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2); - hp = GetMonData(&gPlayerParty[i], MON_DATA_HP); - status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); - if (species == SPECIES_NONE) - continue; - if (species != SPECIES_EGG && hp != 0 && status == 0) - r6 |= 1 << i * 2; - if (species == SPECIES_NONE) - continue; - if (hp != 0 && (species == SPECIES_EGG || status != 0)) - r6 |= 2 << i * 2; - if (species == SPECIES_NONE) - continue; - if (species != SPECIES_EGG && hp == 0) - r6 |= 3 << i * 2; - } - gBattleStruct->field_186 = r6; - *(&gBattleStruct->field_187) = r6 >> 8; + BUFFER_PARTY_VS_SCREEN_STATUS(gPlayerParty, flags, i); + gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsLo = flags; + *(&gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsHi) = flags >> 8; } static void SetPlayerBerryDataInBattleStruct(void) { s32 i; struct BattleStruct *battleStruct = gBattleStruct; - struct BattleEnigmaBerry *battleBerry = &battleStruct->battleEnigmaBerry; + struct BattleEnigmaBerry *battleBerry = &battleStruct->multiBuffer.linkPartnerHeader.battleEnigmaBerry; if (IsEnigmaBerryValid() == TRUE) { @@ -859,44 +868,47 @@ static void SetAllPlayersBerryData(void) } } -static void sub_8010414(u8 arg0, u8 arg1) +static void LinkBattleComputeBattleTypeFlags(u8 numPlayers, u8 multiPlayerId) { - u8 var = 0; + u8 found = 0; - if (gBlockRecvBuffer[0][0] == 256) + // If player 1 is playing the minimum version, player 1 is master. + if (gBlockRecvBuffer[0][0] == 0x100) { - if (arg1 == 0) + if (multiPlayerId == 0) gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER; else gBattleTypeFlags |= BATTLE_TYPE_TRAINER; - ++var; + ++found; } - if (var == 0) + if (found == 0) { + // If multiple different versions are being used, player 1 is master. s32 i; - for (i = 0; i < arg0; ++i) + for (i = 0; i < numPlayers; ++i) if (gBlockRecvBuffer[0][0] != gBlockRecvBuffer[i][0]) break; - if (i == arg0) + if (i == numPlayers) { - if (arg1 == 0) + if (multiPlayerId == 0) gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER; else gBattleTypeFlags |= BATTLE_TYPE_TRAINER; - ++var; + ++found; } - if (var == 0) + if (found == 0) { - for (i = 0; i < arg0; ++i) + // Lowest index player with the highest game version is master. + for (i = 0; i < numPlayers; ++i) { - if (gBlockRecvBuffer[i][0] == 0x201) - if (i != arg1 && i < arg1) + if (gBlockRecvBuffer[i][0] == 0x201 && i != multiPlayerId) + if (i < multiPlayerId) break; - if (gBlockRecvBuffer[i][0] > 0x201 && i != arg1) + if (gBlockRecvBuffer[i][0] > 0x201 && i != multiPlayerId) break; } - if (i == arg0) + if (i == numPlayers) gBattleTypeFlags |= BATTLE_TYPE_IS_MASTER | BATTLE_TYPE_TRAINER; else gBattleTypeFlags |= BATTLE_TYPE_TRAINER; @@ -924,7 +936,7 @@ static void CB2_HandleStartBattle(void) ShowBg(1); ShowBg(2); ShowBg(3); - sub_80357C8(); + BattleInterfaceSetWindowPals(); gBattleCommunication[MULTIUSE_STATE] = 1; } if (gWirelessCommType) @@ -937,11 +949,12 @@ static void CB2_HandleStartBattle(void) { if (IsLinkTaskFinished()) { - *(&gBattleStruct->field_184) = 1; - *(&gBattleStruct->field_185) = 2; - sub_800FFEC(); + // 0x201 + *(&gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureLo) = 1; + *(&gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureHi) = 2; + BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); - SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, 32); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkPartnerHeader, sizeof(gBattleStruct->multiBuffer.linkPartnerHeader)); gBattleCommunication[MULTIUSE_STATE] = 2; } if (gWirelessCommType != 0) @@ -961,13 +974,13 @@ static void CB2_HandleStartBattle(void) u8 taskId; ResetBlockReceivedFlags(); - sub_8010414(2, playerMultiplayerId); + LinkBattleComputeBattleTypeFlags(2, playerMultiplayerId); SetAllPlayersBerryData(); taskId = CreateTask(InitLinkBattleVsScreen, 0); gTasks[taskId].data[1] = 270; gTasks[taskId].data[2] = 90; gTasks[taskId].data[5] = 0; - gTasks[taskId].data[3] = gBattleStruct->field_186 | (gBattleStruct->field_187 << 8); + gTasks[taskId].data[3] = gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsLo | (gBattleStruct->multiBuffer.linkPartnerHeader.vsScreenHealthFlagsHi << 8); gTasks[taskId].data[4] = gBlockRecvBuffer[enemyMultiplayerId][1]; SetDeoxysStats(); ++gBattleCommunication[MULTIUSE_STATE]; @@ -1025,7 +1038,7 @@ static void CB2_HandleStartBattle(void) } break; case 15: - sub_800D30C(); + InitBtlControllers(); ++gBattleCommunication[MULTIUSE_STATE]; gBattleCommunication[SPRITES_INIT_STATE1] = 0; gBattleCommunication[SPRITES_INIT_STATE2] = 0; @@ -1056,7 +1069,7 @@ static void CB2_HandleStartBattle(void) } } -static void sub_80108C4(void) +static void PrepareOwnMultiPartnerBuffer(void) { s32 i, j; u8 *nick, *cur; @@ -1083,7 +1096,7 @@ static void sub_80108C4(void) cur[j] = EOS; } } - memcpy(&gBattleStruct->field_184, gMultiPartnerParty, sizeof(gMultiPartnerParty)); + memcpy(gBattleStruct->multiBuffer.multiBattleMons, gMultiPartnerParty, sizeof(gMultiPartnerParty)); } static void CB2_PreInitMultiBattle(void) @@ -1107,8 +1120,8 @@ static void CB2_PreInitMultiBattle(void) case 0: if (gReceivedRemoteLinkPlayers && IsLinkTaskFinished()) { - sub_80108C4(); - SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, sizeof(gMultiPartnerParty)); + PrepareOwnMultiPartnerBuffer(); + SendBlock(bitmask_all_link_players_but_self(), gBattleStruct->multiBuffer.multiBattleMons, sizeof(gBattleStruct->multiBuffer.multiBattleMons)); ++gBattleCommunication[MULTIUSE_STATE]; } break; @@ -1136,9 +1149,9 @@ static void CB2_PreInitMultiBattle(void) { ++gBattleCommunication[MULTIUSE_STATE]; if (gWirelessCommType) - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); else - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); } break; case 3: @@ -1181,7 +1194,7 @@ static void CB2_HandleStartMultiBattle(void) ShowBg(1); ShowBg(2); ShowBg(3); - sub_80357C8(); + BattleInterfaceSetWindowPals(); gBattleCommunication[MULTIUSE_STATE] = 1; } if (gWirelessCommType) @@ -1192,11 +1205,12 @@ static void CB2_HandleStartMultiBattle(void) { if (IsLinkTaskFinished()) { - *(&gBattleStruct->field_184) = 1; - *(&gBattleStruct->field_185) = 2; - sub_800FFEC(); + // 0x201 + *(&gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureLo) = 1; + *(&gBattleStruct->multiBuffer.linkPartnerHeader.versionSignatureHi) = 2; + BufferPartyVsScreenHealth_AtStart(); SetPlayerBerryDataInBattleStruct(); - SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->field_184, 32); + SendBlock(bitmask_all_link_players_but_self(), &gBattleStruct->multiBuffer.linkPartnerHeader, sizeof(gBattleStruct->multiBuffer.linkPartnerHeader)); ++gBattleCommunication[MULTIUSE_STATE]; } if (gWirelessCommType) @@ -1207,7 +1221,7 @@ static void CB2_HandleStartMultiBattle(void) if ((GetBlockReceivedStatus() & 0xF) == 0xF) { ResetBlockReceivedFlags(); - sub_8010414(4, playerMultiplayerId); + LinkBattleComputeBattleTypeFlags(4, playerMultiplayerId); SetAllPlayersBerryData(); SetDeoxysStats(); memcpy(gDecompressionBuffer, gPlayerParty, sizeof(struct Pokemon) * 3); @@ -1383,7 +1397,7 @@ static void CB2_HandleStartMultiBattle(void) } break; case 11: - sub_800D30C(); + InitBtlControllers(); ++gBattleCommunication[MULTIUSE_STATE]; gBattleCommunication[SPRITES_INIT_STATE1] = 0; gBattleCommunication[SPRITES_INIT_STATE2] = 0; @@ -1450,18 +1464,18 @@ static void CB2_QuitPokedudeBattle(void) } } -static void sub_80111EC(struct Sprite *sprite) +static void SpriteCB_UnusedDebugSprite(struct Sprite *sprite) { sprite->data[0] = 0; - sprite->callback = sub_80111FC; + sprite->callback = SpriteCB_UnusedDebugSprite_Step; } -static void sub_80111FC(struct Sprite *sprite) +static void SpriteCB_UnusedDebugSprite_Step(struct Sprite *sprite) { switch (sprite->data[0]) { case 0: - gUnknown_2022BC0 = AllocZeroed(0x1000); + sUnknownDebugSpriteDataBuffer = AllocZeroed(0x1000); ++sprite->data[0]; sprite->data[1] = 0; sprite->data[2] = 0x281; @@ -1478,8 +1492,8 @@ static void sub_80111FC(struct Sprite *sprite) r0 = sprite->data[2] - sprite->data[3] * 32; for (i = 0; i <= 29; i += 2) { - *(&gUnknown_2022BC0[r2] + i) = 0x3D; - *(&gUnknown_2022BC0[r0] + i) = 0x3D; + *(&sUnknownDebugSpriteDataBuffer[r2] + i) = 0x3D; + *(&sUnknownDebugSpriteDataBuffer[r0] + i) = 0x3D; } if (++sprite->data[3] == 21) { @@ -1491,10 +1505,10 @@ static void sub_80111FC(struct Sprite *sprite) case 2: if (--sprite->data[1] == 20) { - if (gUnknown_2022BC0 != NULL) + if (sUnknownDebugSpriteDataBuffer != NULL) { - memset(gUnknown_2022BC0, 0, 0x1000); - FREE_AND_SET_NULL(gUnknown_2022BC0); + memset(sUnknownDebugSpriteDataBuffer, 0, 0x1000); + FREE_AND_SET_NULL(sUnknownDebugSpriteDataBuffer); } SetMainCallback2(CB2_InitBattle); } @@ -1508,7 +1522,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) u32 personalityValue; u8 fixedIV; s32 i, j; - + if (trainerNum == TRAINER_SECRET_BASE) return 0; if (gBattleTypeFlags & BATTLE_TYPE_TRAINER @@ -1593,7 +1607,7 @@ static u8 CreateNPCTrainerParty(struct Pokemon *party, u16 trainerNum) } // not used -static void sub_80116CC(void) +UNUSED static void unused_80116CC(void) { if (REG_VCOUNT < 0xA0 && REG_VCOUNT >= 0x6F) REG_BG0CNT = BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x512; @@ -1601,7 +1615,7 @@ static void sub_80116CC(void) void VBlankCB_Battle(void) { - // Change gRngSeed every vblank. + // Change gRngSeed every vblank. Random(); SetGpuReg(REG_OFFSET_BG0HOFS, gBattle_BG0_X); SetGpuReg(REG_OFFSET_BG0VOFS, gBattle_BG0_Y); @@ -1621,11 +1635,11 @@ void VBlankCB_Battle(void) ScanlineEffect_InitHBlankDmaTransfer(); } -void nullsub_9(struct Sprite *sprite) +void SpriteCB_VsLetterDummy(struct Sprite *sprite) { } -static void sub_80117BC(struct Sprite *sprite) +static void SpriteCB_VsLetter(struct Sprite *sprite) { if (sprite->data[0] != 0) sprite->pos1.x = sprite->data[1] + ((sprite->data[2] & 0xFF00) >> 8); @@ -1641,14 +1655,14 @@ static void sub_80117BC(struct Sprite *sprite) } } -void sub_801182C(struct Sprite *sprite) +void SpriteCB_VsLetterInit(struct Sprite *sprite) { StartSpriteAffineAnim(sprite, 1); - sprite->callback = sub_80117BC; + sprite->callback = SpriteCB_VsLetter; PlaySE(SE_MUGSHOT); } -static void sub_801184C(u8 taskId) +static void BufferPartyVsScreenHealth_AtEnd(u8 taskId) { struct Pokemon *party1 = NULL; struct Pokemon *party2 = NULL; @@ -1678,52 +1692,14 @@ static void sub_801184C(u8 taskId) party2 = gEnemyParty; } r7 = 0; - for (i = 0; i < PARTY_SIZE; ++i) - { - u16 species = GetMonData(&party1[i], MON_DATA_SPECIES2); - u16 hp = GetMonData(&party1[i], MON_DATA_HP); - u32 status = GetMonData(&party1[i], MON_DATA_STATUS); - - if (species == SPECIES_NONE) - continue; - if (species != SPECIES_EGG && hp != 0 && status == 0) - r7 |= 1 << i * 2; - - if (species == SPECIES_NONE) - continue; - if (hp != 0 && (species == SPECIES_EGG || status != 0)) - r7 |= 2 << i * 2; - - if (species == SPECIES_NONE) - continue; - if (species != SPECIES_EGG && hp == 0) - r7 |= 3 << i * 2; - } + BUFFER_PARTY_VS_SCREEN_STATUS(party1, r7, i); gTasks[taskId].data[3] = r7; r7 = 0; - for (i = 0; i < PARTY_SIZE; ++i) - { - u16 species = GetMonData(&party2[i], MON_DATA_SPECIES2); - u16 hp = GetMonData(&party2[i], MON_DATA_HP); - u32 status = GetMonData(&party2[i], MON_DATA_STATUS); - - if (species == SPECIES_NONE) - continue; - if (species != SPECIES_EGG && hp != 0 && status == 0) - r7 |= 1 << i * 2; - if (species == SPECIES_NONE) - continue; - if (hp != 0 && (species == SPECIES_EGG || status != 0)) - r7 |= 2 << i * 2; - if (species == SPECIES_NONE) - continue; - if (species != SPECIES_EGG && hp == 0) - r7 |= 3 << i * 2; - } + BUFFER_PARTY_VS_SCREEN_STATUS(party2, r7, i); gTasks[taskId].data[4] = r7; } -void sub_8011A1C(void) +void CB2_InitEndLinkBattle(void) { s32 i; u8 taskId; @@ -1773,21 +1749,21 @@ void sub_8011A1C(void) gTasks[taskId].data[1] = 270; gTasks[taskId].data[2] = 90; gTasks[taskId].data[5] = 1; - sub_801184C(taskId); - SetMainCallback2(sub_8011B94); + BufferPartyVsScreenHealth_AtEnd(taskId); + SetMainCallback2(CB2_EndLinkBattle); gBattleCommunication[MULTIUSE_STATE] = 0; } -static void sub_8011B94(void) +static void CB2_EndLinkBattle(void) { - sub_8011BB0(); + EndLinkBattleInSteps(); AnimateSprites(); BuildOamBuffer(); UpdatePaletteFade(); RunTasks(); } -static void sub_8011BB0(void) +static void EndLinkBattleInSteps(void) { s32 i; @@ -1868,7 +1844,7 @@ static void TryCorrectShedinjaLanguage(struct Pokemon *mon) #define sBattler data[0] #define sSpeciesId data[2] -void SpriteCB_WildMon(struct Sprite *sprite) +void SpriteCB_EnemyMon(struct Sprite *sprite) { sprite->callback = SpriteCB_MoveWildMonToRight; StartSpriteAnimIfDifferent(sprite, 0); @@ -1892,7 +1868,7 @@ static void SpriteCB_WildMonShowHealthbox(struct Sprite *sprite) { if (sprite->animEnded) { - sub_804BD94(sprite->sBattler); + StartHealthboxSlideIn(sprite->sBattler); SetHealthboxSpriteVisible(gHealthboxSpriteIds[sprite->sBattler]); sprite->callback = SpriteCallbackDummy2; StartSpriteAnimIfDifferent(sprite, 0); @@ -1905,15 +1881,15 @@ void SpriteCallbackDummy2(struct Sprite *sprite) } // not used -static void sub_8011E28(struct Sprite *sprite) +UNUSED static void SpriteCB_Unused_8011E28(struct Sprite *sprite) { sprite->data[3] = 6; sprite->data[4] = 1; - sprite->callback = sub_8011E3C; + sprite->callback = SpriteCB_Unused_8011E28_Step; } // not used -static void sub_8011E3C(struct Sprite *sprite) +static void SpriteCB_Unused_8011E28_Step(struct Sprite *sprite) { --sprite->data[4]; if (sprite->data[4] == 0) @@ -1994,14 +1970,14 @@ static void SpriteCB_AnimFaintOpponent(struct Sprite *sprite) } } -void sub_8012044(struct Sprite *sprite) +void SpriteCb_ShowAsMoveTarget(struct Sprite *sprite) { sprite->data[3] = 8; sprite->data[4] = sprite->invisible; - sprite->callback = sub_8012060; + sprite->callback = SpriteCb_BlinkVisible; } -static void sub_8012060(struct Sprite *sprite) +static void SpriteCb_BlinkVisible(struct Sprite *sprite) { --sprite->data[3]; if (sprite->data[3] == 0) @@ -2011,14 +1987,14 @@ static void sub_8012060(struct Sprite *sprite) } } -void sub_8012098(struct Sprite *sprite) +void SpriteCb_HideAsMoveTarget(struct Sprite *sprite) { sprite->invisible = sprite->data[4]; sprite->data[4] = FALSE; sprite->callback = SpriteCallbackDummy2; } -void sub_80120C4(struct Sprite *sprite) +void SpriteCB_AllyMon(struct Sprite *sprite) { sprite->callback = oac_poke_ally_; } @@ -2036,7 +2012,7 @@ static void oac_poke_ally_(struct Sprite *sprite) } } -void sub_8012100(struct Sprite *sprite) +void SpriteCB_SetToDummy3(struct Sprite *sprite) { sprite->callback = SpriteCallbackDummy3; } @@ -2045,7 +2021,7 @@ static void SpriteCallbackDummy3(struct Sprite *sprite) { } -void sub_8012110(struct Sprite *sprite) +void SpriteCB_FaintSlideAnim(struct Sprite *sprite) { if (!(gIntroSlideFlags & 1)) { @@ -2139,26 +2115,26 @@ static void SpriteCB_BounceEffect(struct Sprite *sprite) sprite->sSinIndex = (sprite->sSinIndex + sprite->sDelta) & 0xFF; } -void sub_8012354(struct Sprite *sprite) +void SpriteCB_PlayerThrowInit(struct Sprite *sprite) { StartSpriteAnim(sprite, 1); - sprite->callback = sub_8012398; + sprite->callback = SpriteCB_PlayerThrowUpdate; } -void sub_801236C(struct Sprite *sprite) +void UpdatePlayerPosInThrowAnim(struct Sprite *sprite) { if (sprite->animDelayCounter == 0) - sprite->centerToCornerVecX = gUnknown_824F048[sprite->animCmdIndex]; + sprite->centerToCornerVecX = sPlayerThrowXTranslation[sprite->animCmdIndex]; } -static void sub_8012398(struct Sprite *sprite) +static void SpriteCB_PlayerThrowUpdate(struct Sprite *sprite) { - sub_801236C(sprite); + UpdatePlayerPosInThrowAnim(sprite); if (sprite->animEnded) sprite->callback = SpriteCallbackDummy3; } -void nullsub_12(void) +void BattleDummy(void) { } @@ -2622,8 +2598,8 @@ static void BattleIntroDrawPartySummaryScreens(void) else { // The struct gets set here, but nothing is ever done with it since - // wild battles don't show the party summary. - // Still, there's no point in having dead code. + // wild battles don't show the party summary. + // Still, there's no point in having dead code. for (i = 0; i < PARTY_SIZE; ++i) { if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2) == SPECIES_NONE @@ -2715,7 +2691,7 @@ static void BattleIntroRecordMonsToDex(void) } // not used -static void sub_80136C4(void) +static void Unused_AutoProgressToIntro(void) { if (!gBattleControllerExecFlags) gBattleMainFunc = BattleIntroPrintPlayerSendsOut; @@ -2758,7 +2734,7 @@ static void BattleIntroPlayerSendsOutMonAnimation(void) } // not used -static void sub_80137D0(void) +static void Unused_AutoProgressToSwitchInAnims(void) { if (!gBattleControllerExecFlags) { @@ -2832,7 +2808,7 @@ static void TryDoEventsBeforeFirstTurn(void) } TurnValuesCleanUp(FALSE); SpecialStatusesClear(); - *(&gBattleStruct->field_91) = gAbsentBattlerFlags; + *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags; gBattleMainFunc = HandleTurnActionSelectionState; ResetSentPokesToOpponentValue(); for (i = 0; i < BATTLE_COMMUNICATION_ENTRIES_COUNT; ++i) @@ -2919,7 +2895,7 @@ void BattleTurnPassed(void) } for (i = 0; i < MAX_BATTLERS_COUNT; ++i) *(gBattleStruct->monToSwitchIntoId + i) = PARTY_SIZE; - *(&gBattleStruct->field_91) = gAbsentBattlerFlags; + *(&gBattleStruct->absentBattlerFlags) = gAbsentBattlerFlags; gBattleMainFunc = HandleTurnActionSelectionState; gRandomTurnNumber = Random(); } @@ -2983,13 +2959,13 @@ u8 IsRunningFromBattleImpossible(void) return BATTLE_RUN_SUCCESS; } -void sub_8013F6C(u8 battler) +void UpdatePartyOwnerOnSwitch_NonMulti(u8 battler) { s32 i; u8 r4, r1; for (i = 0; i < 3; ++i) - gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)); + gBattlePartyCurrentOrder[i] = *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)); r4 = GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battler]); r1 = GetPartyIdFromBattlePartyId(*(gBattleStruct->monToSwitchIntoId + battler)); SwitchPartyMonSlots(r4, r1); @@ -2997,14 +2973,14 @@ void sub_8013F6C(u8 battler) { for (i = 0; i < 3; ++i) { - *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; - *(BATTLE_PARTNER(battler) * 3 + i + (u8 *)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; + *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i]; + *(BATTLE_PARTNER(battler) * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i]; } } else { for (i = 0; i < 3; ++i) - *(battler * 3 + i + (u8 *)(gBattleStruct->field_60)) = gBattlePartyCurrentOrder[i]; + *(battler * 3 + i + (u8 *)(gBattleStruct->battlerPartyOrders)) = gBattlePartyCurrentOrder[i]; } } @@ -3034,10 +3010,10 @@ static void HandleTurnActionSelectionState(void) *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = PARTY_SIZE; if (gBattleTypeFlags & BATTLE_TYPE_MULTI || (position & BIT_FLANK) == B_FLANK_LEFT - || gBattleStruct->field_91 & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))] + || gBattleStruct->absentBattlerFlags & gBitTable[GetBattlerAtPosition(BATTLE_PARTNER(position))] || gBattleCommunication[GetBattlerAtPosition(BATTLE_PARTNER(position))] == STATE_WAIT_ACTION_CONFIRMED) { - if (gBattleStruct->field_91 & gBitTable[gActiveBattler]) + if (gBattleStruct->absentBattlerFlags & gBitTable[gActiveBattler]) { gChosenActionByBattler[gActiveBattler] = B_ACTION_NOTHING_FAINTED; if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) @@ -3114,15 +3090,15 @@ static void HandleTurnActionSelectionState(void) } else { - BtlController_EmitChooseItem(0, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChooseItem(0, gBattleStruct->battlerPartyOrders[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); } break; case B_ACTION_SWITCH: - *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; + *(gBattleStruct->battlerPartyIndexes + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; if (gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION) || gStatuses3[gActiveBattler] & STATUS3_ROOTED) { - BtlController_EmitChoosePokemon(0, PARTY_ACTION_CANT_SWITCH, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, PARTY_ACTION_CANT_SWITCH, 6, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); } else if ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_SHADOW_TAG)) || ((i = ABILITY_ON_OPPOSING_FIELD(gActiveBattler, ABILITY_ARENA_TRAP)) @@ -3131,16 +3107,16 @@ static void HandleTurnActionSelectionState(void) || ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BATTLER, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0)) && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))) { - BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | PARTY_ACTION_ABILITY_PREVENTS, 6, gLastUsedAbility, gBattleStruct->battlerPartyOrders[gActiveBattler]); } else { if (gActiveBattler == 2 && gChosenActionByBattler[0] == B_ACTION_SWITCH) - BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 0), ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); else if (gActiveBattler == 3 && gChosenActionByBattler[1] == B_ACTION_SWITCH) - BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, *(gBattleStruct->monToSwitchIntoId + 1), ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); else - BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, 6, ABILITY_NONE, gBattleStruct->field_60[gActiveBattler]); + BtlController_EmitChoosePokemon(0, PARTY_ACTION_CHOOSE_MON, 6, ABILITY_NONE, gBattleStruct->battlerPartyOrders[gActiveBattler]); } MarkBattlerForControllerExec(gActiveBattler); break; @@ -3238,12 +3214,12 @@ static void HandleTurnActionSelectionState(void) *(gBattleStruct->monToSwitchIntoId + gActiveBattler) = gBattleBufferB[gActiveBattler][1]; if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= 0xF; - *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); - *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 1) = gBattleBufferB[gActiveBattler][3]; - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= (0xF0); - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 2) = gBattleBufferB[gActiveBattler][3]; + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= 0xF; + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 1) = gBattleBufferB[gActiveBattler][3]; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= (0xF0); + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 2) = gBattleBufferB[gActiveBattler][3]; } ++gBattleCommunication[gActiveBattler]; } @@ -3277,7 +3253,7 @@ static void HandleTurnActionSelectionState(void) { if (((gBattleTypeFlags & (BATTLE_TYPE_MULTI | BATTLE_TYPE_DOUBLE)) != BATTLE_TYPE_DOUBLE) || (position & BIT_FLANK) != B_FLANK_LEFT - || (*(&gBattleStruct->field_91) & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) + || (*(&gBattleStruct->absentBattlerFlags) & gBitTable[GetBattlerAtPosition(position ^ BIT_FLANK)])) BtlController_EmitLinkStandbyMsg(0, 0); else BtlController_EmitLinkStandbyMsg(0, 1); @@ -3815,7 +3791,7 @@ static void TryEvolvePokemon(void) levelUpBits &= ~(gBitTable[i]); gLeveledUpInBattle = levelUpBits; - species = GetEvolutionTargetSpecies(&gPlayerParty[i], 0, levelUpBits); + species = GetEvolutionTargetSpecies(&gPlayerParty[i], EVO_MODE_NORMAL, levelUpBits); if (species != SPECIES_NONE) { gBattleMainFunc = WaitForEvoSceneToFinish; @@ -3888,7 +3864,7 @@ static void HandleAction_UseMove(void) u8 var = 4; gBattlerAttacker = gBattlerByTurnOrder[gCurrentTurnActionNumber]; - if (*(&gBattleStruct->field_91) & gBitTable[gBattlerAttacker]) + if (*(&gBattleStruct->absentBattlerFlags) & gBitTable[gBattlerAttacker]) { gCurrentActionFuncId = B_ACTION_FINISHED; return; @@ -4061,7 +4037,7 @@ static void HandleAction_Switch(void) gBattle_BG0_Y = 0; gActionSelectionCursor[gBattlerAttacker] = 0; gMoveSelectionCursor[gBattlerAttacker] = 0; - PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->field_58 + gBattlerAttacker)); + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBattlerAttacker, *(gBattleStruct->battlerPartyIndexes + gBattlerAttacker)); gBattleScripting.battler = gBattlerAttacker; gBattlescriptCurrInstr = BattleScript_ActionSwitch; gCurrentActionFuncId = B_ACTION_EXEC_SCRIPT; diff --git a/src/battle_message.c b/src/battle_message.c index 68f75ffa1..20b7f9c75 100644 --- a/src/battle_message.c +++ b/src/battle_message.c @@ -1469,7 +1469,7 @@ void BufferStringBattle(u16 stringId) gLastUsedItem = sBattleMsgDataPtr->lastItem; gLastUsedAbility = sBattleMsgDataPtr->lastAbility; gBattleScripting.battler = sBattleMsgDataPtr->scrActive; - *(&gBattleStruct->field_52) = sBattleMsgDataPtr->unk1605E; + *(&gBattleStruct->scriptPartyIdx) = sBattleMsgDataPtr->bakScriptPartyIdx; *(&gBattleStruct->hpScale) = sBattleMsgDataPtr->hpScale; gPotentialItemEffectBattler = sBattleMsgDataPtr->itemEffectBattler; *(&gBattleStruct->stringMoveType) = sBattleMsgDataPtr->moveType; @@ -1983,7 +1983,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT) toCpy = gTrainerClassNames[GetSecretBaseTrainerNameIndex()]; else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00) - toCpy = gTrainerClassNames[sub_80447F0()]; + toCpy = gTrainerClassNames[GetUnionRoomTrainerClass()]; else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) toCpy = gTrainerClassNames[GetBattleTowerTrainerClassNameId()]; else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER_TOWER) @@ -2079,7 +2079,7 @@ u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst) toCpy = gStringVar4; break; case B_TXT_26: // ? - HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, *(&gBattleStruct->field_52)) + HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, *(&gBattleStruct->scriptPartyIdx)) break; case B_TXT_PC_CREATOR_NAME: // lanette pc if (FlagGet(FLAG_SYS_NOT_SOMEONES_PC)) @@ -2379,6 +2379,9 @@ static const struct BattleWindowText sTextOnWindowsInfo_Normal[] = { const u8 gUnknown_83FEC90[] = {0x04, 0x05, 0x02, 0x02}; +// windowId: Upper 2 bits are text flags +// x40: Use NPC context-defined font +// x80: Inhibit window clear void BattlePutTextOnWindow(const u8 *text, u8 windowId) { bool32 copyToVram; struct TextPrinterTemplate printerTemplate; @@ -2457,7 +2460,7 @@ void BattlePutTextOnWindow(const u8 *text, u8 windowId) { } } -bool8 sub_80D89B0(u16 stringId) +bool8 BattleStringShouldBeColored(u16 stringId) { if (stringId == STRINGID_TRAINER1LOSETEXT || stringId == STRINGID_TRAINER2CLASS || stringId == STRINGID_TRAINER1WINTEXT || stringId == STRINGID_TRAINER2NAME) return TRUE; diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c index 90ee8e561..35328d6c1 100644 --- a/src/battle_script_commands.c +++ b/src/battle_script_commands.c @@ -1040,11 +1040,11 @@ static void atk01_accuracycheck(void) u16 move = T2_READ_16(gBattlescriptCurrInstr + 5); if ((gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE - && !sub_80EB2E0(1) + && !BtlCtrl_OakOldMan_TestState2Flag(1) && gBattleMoves[move].power != 0 && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) || (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE - && !sub_80EB2E0(2) + && !BtlCtrl_OakOldMan_TestState2Flag(2) && gBattleMoves[move].power == 0 && GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER) || (gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)) @@ -1213,7 +1213,7 @@ static void atk04_critcalc(void) && !(gStatuses3[gBattlerAttacker] & STATUS3_CANT_SCORE_A_CRIT) && !(gBattleTypeFlags & BATTLE_TYPE_OLD_MAN_TUTORIAL) && !(Random() % sCriticalHitChance[critChance]) - && (!(gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) || sub_80EB2E0(1)) + && (!(gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) || BtlCtrl_OakOldMan_TestState2Flag(1)) && !(gBattleTypeFlags & BATTLE_TYPE_POKEDUDE)) gCritMultiplier = 2; else @@ -4146,7 +4146,7 @@ static void atk49_moveend(void) gLastPrintedMoves[gBattlerAttacker] = gChosenMove; } if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) - && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker]) + && !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker]) && gBattleMoves[originallyUsedMove].effect != EFFECT_BATON_PASS) { if (gHitMarker & HITMARKER_OBEYS) @@ -4184,7 +4184,7 @@ static void atk49_moveend(void) break; case ATK49_MIRROR_MOVE: // mirror move if (!(gAbsentBattlerFlags & gBitTable[gBattlerAttacker]) - && !(gBattleStruct->field_91 & gBitTable[gBattlerAttacker]) + && !(gBattleStruct->absentBattlerFlags & gBitTable[gBattlerAttacker]) && gBattleMoves[originallyUsedMove].flags & FLAG_MIRROR_MOVE_AFFECTED && gHitMarker & HITMARKER_OBEYS && gBattlerAttacker != gBattlerTarget @@ -4491,8 +4491,8 @@ static void atk4F_jumpifcantswitch(void) static void sub_8024398(u8 arg0) { - *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; - BtlController_EmitChoosePokemon(0, PARTY_ACTION_SEND_OUT, arg0, 0, gBattleStruct->field_60[gActiveBattler]); + *(gBattleStruct->battlerPartyIndexes + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; + BtlController_EmitChoosePokemon(0, PARTY_ACTION_SEND_OUT, arg0, 0, gBattleStruct->battlerPartyOrders[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); } @@ -4745,8 +4745,8 @@ static void atk50_openpartyscreen(void) else { gActiveBattler = battlerId; - *(gBattleStruct->field_58 + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; - BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), 0, gBattleStruct->field_60[gActiveBattler]); + *(gBattleStruct->battlerPartyIndexes + gActiveBattler) = gBattlerPartyIndexes[gActiveBattler]; + BtlController_EmitChoosePokemon(0, hitmarkerFaintBits, *(gBattleStruct->monToSwitchIntoId + (gActiveBattler ^ 2)), 0, gBattleStruct->battlerPartyOrders[gActiveBattler]); MarkBattlerForControllerExec(gActiveBattler); gBattlescriptCurrInstr += 6; if (GetBattlerPosition(gActiveBattler) == B_POSITION_PLAYER_LEFT && gBattleResults.playerSwitchesCounter < 0xFF) @@ -4791,7 +4791,7 @@ static void atk51_switchhandleorder(void) break; case 1: if (!(gBattleTypeFlags & BATTLE_TYPE_MULTI)) - sub_8013F6C(gActiveBattler); + UpdatePartyOwnerOnSwitch_NonMulti(gActiveBattler); break; case 2: gBattleCommunication[0] = gBattleBufferB[gActiveBattler][1]; @@ -4799,16 +4799,16 @@ static void atk51_switchhandleorder(void) if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { - *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= 0xF; - *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); - *(gActiveBattler * 3 + (u8 *)(gBattleStruct->field_60) + 1) = gBattleBufferB[gActiveBattler][3]; - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) &= (0xF0); - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; - *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->field_60) + 2) = gBattleBufferB[gActiveBattler][3]; + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= 0xF; + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0); + *(gActiveBattler * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 1) = gBattleBufferB[gActiveBattler][3]; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) &= (0xF0); + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 0) |= (gBattleBufferB[gActiveBattler][2] & 0xF0) >> 4; + *((gActiveBattler ^ BIT_FLANK) * 3 + (u8 *)(gBattleStruct->battlerPartyOrders) + 2) = gBattleBufferB[gActiveBattler][3]; } else { - sub_8013F6C(gActiveBattler); + UpdatePartyOwnerOnSwitch_NonMulti(gActiveBattler); } PREPARE_SPECIES_BUFFER(gBattleTextBuff1, gBattleMons[gBattlerAttacker].species) PREPARE_MON_NICK_BUFFER(gBattleTextBuff2, gActiveBattler, gBattleBufferB[gActiveBattler][1]) @@ -4823,7 +4823,7 @@ static void atk52_switchineffects(void) s32 i; gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]); - sub_80174B8(gActiveBattler); + UpdateSentPokesToOpponentValue(gActiveBattler); gHitMarker &= ~(HITMARKER_FAINTED(gActiveBattler)); gSpecialStatuses[gActiveBattler].flag40 = 0; if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED) @@ -6601,7 +6601,7 @@ static bool8 TryDoForceSwitchOut(void) { if (gBattleMons[gBattlerAttacker].level >= gBattleMons[gBattlerTarget].level) { - *(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; + *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; } else { @@ -6612,7 +6612,7 @@ static bool8 TryDoForceSwitchOut(void) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); return FALSE; } - *(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; + *(gBattleStruct->battlerPartyIndexes + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget]; } gBattlescriptCurrInstr = BattleScript_SuccessForceOut; return TRUE; @@ -6704,7 +6704,7 @@ static void atk8F_forcerandomswitch(void) } *(gBattleStruct->monToSwitchIntoId + gBattlerTarget) = i; if (!IsMultiBattle()) - sub_8013F6C(gBattlerTarget); + UpdatePartyOwnerOnSwitch_NonMulti(gBattlerTarget); SwitchPartyOrderLinkMulti(gBattlerTarget, i, 0); SwitchPartyOrderLinkMulti(gBattlerTarget ^ 2, i, 1); } @@ -8742,7 +8742,7 @@ static void atkE2_switchoutabilities(void) { case ABILITY_NATURAL_CURE: gBattleMons[gActiveBattler].status1 = 0; - BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, gBitTable[*(gBattleStruct->field_58 + gActiveBattler)], 4, &gBattleMons[gActiveBattler].status1); + BtlController_EmitSetMonData(0, REQUEST_STATUS_BATTLE, gBitTable[*(gBattleStruct->battlerPartyIndexes + gActiveBattler)], 4, &gBattleMons[gActiveBattler].status1); MarkBattlerForControllerExec(gActiveBattler); break; } diff --git a/src/battle_setup.c b/src/battle_setup.c index 058573aaf..62df9965d 100644 --- a/src/battle_setup.c +++ b/src/battle_setup.c @@ -76,18 +76,18 @@ static EWRAM_DATA u16 sRivalBattleFlags = 0; static const u8 sBattleTransitionTable_Wild[][2] = { - B_TRANSITION_SLICED_SCREEN, B_TRANSITION_WHITEFADE_IN_STRIPES, - B_TRANSITION_CLOCKWISE_BLACKFADE, B_TRANSITION_GRID_SQUARES, - B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES, - B_TRANSITION_BLACK_WAVE_TO_RIGHT, B_TRANSITION_FULLSCREEN_WAVE, + { B_TRANSITION_SLICED_SCREEN, B_TRANSITION_WHITEFADE_IN_STRIPES }, + { B_TRANSITION_CLOCKWISE_BLACKFADE, B_TRANSITION_GRID_SQUARES }, + { B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES }, + { B_TRANSITION_BLACK_WAVE_TO_RIGHT, B_TRANSITION_FULLSCREEN_WAVE }, }; static const u8 sBattleTransitionTable_Trainer[][2] = { - B_TRANSITION_SLIDING_POKEBALLS, B_TRANSITION_BLACK_DOODLES, - B_TRANSITION_HORIZONTAL_CORRUGATE, B_TRANSITION_BIG_POKEBALL, - B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES, - B_TRANSITION_DISTORTED_WAVE, B_TRANSITION_FULLSCREEN_WAVE, + { B_TRANSITION_SLIDING_POKEBALLS, B_TRANSITION_BLACK_DOODLES }, + { B_TRANSITION_HORIZONTAL_CORRUGATE, B_TRANSITION_BIG_POKEBALL }, + { B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES }, + { B_TRANSITION_DISTORTED_WAVE, B_TRANSITION_FULLSCREEN_WAVE }, }; static const struct TrainerBattleParameter sOrdinaryBattleParams[] = @@ -646,9 +646,9 @@ u8 BattleSetup_GetBattleTowerBattleTransition(void) u8 playerLevel = GetSumOfPlayerPartyLevel(1); if (enemyLevel < playerLevel) - return 4; + return B_TRANSITION_SLIDING_POKEBALLS; else - return 3; + return B_TRANSITION_BIG_POKEBALL; } static u32 TrainerBattleLoadArg32(const u8 *ptr) @@ -904,14 +904,14 @@ static void CB2_EndTrainerBattle(void) } SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); SetBattledTrainerFlag(); - sub_81139BC(); + QuestLogEvents_HandleEndTrainerBattle(); } else { gSpecialVar_Result = FALSE; SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); SetBattledTrainerFlag(); - sub_81139BC(); + QuestLogEvents_HandleEndTrainerBattle(); } } @@ -929,7 +929,7 @@ static void CB2_EndTrainerBattle(void) { SetMainCallback2(CB2_ReturnToFieldContinueScriptPlayMapMusic); SetBattledTrainerFlag(); - sub_81139BC(); + QuestLogEvents_HandleEndTrainerBattle(); } } } diff --git a/src/battle_tower.c b/src/battle_tower.c index 04f3019b1..4c6934781 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1124,7 +1124,8 @@ static void SetPlayerBattleTowerRecord(void) playerRecord->greeting[i] = gSaveBlock1Ptr->easyChatBattleStart[i]; for (i = 0; i < 3; i++) - sub_803E23C(&gPlayerParty[gSaveBlock2Ptr->battleTower.selectedPartyMons[i] - 1], &playerRecord->party[i]); + ConvertPokemonToBattleTowerPokemon(&gPlayerParty[gSaveBlock2Ptr->battleTower.selectedPartyMons[i] - 1], + &playerRecord->party[i]); SetBattleTowerRecordChecksum(&gSaveBlock2Ptr->battleTower.playerRecord); SaveCurrentWinStreak(); @@ -1320,7 +1321,7 @@ static void Debug_FillEReaderTrainerWithPlayerData(void) } for (i = 0; i < 3; i++) - sub_803E23C(&gPlayerParty[i], &ereaderTrainer->party[i]); + ConvertPokemonToBattleTowerPokemon(&gPlayerParty[i], &ereaderTrainer->party[i]); SetEReaderTrainerChecksum(ereaderTrainer); } diff --git a/src/battle_transition.c b/src/battle_transition.c index 7fc2d4255..7d117f50f 100644 --- a/src/battle_transition.c +++ b/src/battle_transition.c @@ -213,24 +213,24 @@ static const TaskFunc sBT_Phase1Tasks[] = static const TaskFunc sBT_Phase2Tasks[] = { - BT_Phase2Blur, - BT_Phase2DistortedWave, - BT_Phase2HorizontalCorrugate, - BT_Phase2BigPokeball, - BT_Phase2SlidingPokeballs, - BT_Phase2ClockwiseBlackFade, - BT_Phase2FullScreenWave, - BT_Phase2BlackWaveToRight, - BT_Phase2SlicedScreen, - BT_Phase2WhiteFadeInStripes, - BT_Phase2GridSquares, - BT_Phase2BlackDoodles, - BT_Phase2StartLoreleiMugshot, - BT_Phase2StartBrunoMugshot, - BT_Phase2StartAgathaMugshot, - BT_Phase2StartLanceMugshot, - BT_Phase2StartBlueMugshot, - BT_Phase2AntiClockwiseSpiral, + [B_TRANSITION_BLUR] = BT_Phase2Blur, + [B_TRANSITION_DISTORTED_WAVE] = BT_Phase2DistortedWave, + [B_TRANSITION_HORIZONTAL_CORRUGATE] = BT_Phase2HorizontalCorrugate, + [B_TRANSITION_BIG_POKEBALL] = BT_Phase2BigPokeball, + [B_TRANSITION_SLIDING_POKEBALLS] = BT_Phase2SlidingPokeballs, + [B_TRANSITION_CLOCKWISE_BLACKFADE] = BT_Phase2ClockwiseBlackFade, + [B_TRANSITION_FULLSCREEN_WAVE] = BT_Phase2FullScreenWave, + [B_TRANSITION_BLACK_WAVE_TO_RIGHT] = BT_Phase2BlackWaveToRight, + [B_TRANSITION_SLICED_SCREEN] = BT_Phase2SlicedScreen, + [B_TRANSITION_WHITEFADE_IN_STRIPES] = BT_Phase2WhiteFadeInStripes, + [B_TRANSITION_GRID_SQUARES] = BT_Phase2GridSquares, + [B_TRANSITION_BLACK_DOODLES] = BT_Phase2BlackDoodles, + [B_TRANSITION_LORELEI] = BT_Phase2StartLoreleiMugshot, + [B_TRANSITION_BRUNO] = BT_Phase2StartBrunoMugshot, + [B_TRANSITION_AGATHA] = BT_Phase2StartAgathaMugshot, + [B_TRANSITION_LANCE] = BT_Phase2StartLanceMugshot, + [B_TRANSITION_BLUE] = BT_Phase2StartBlueMugshot, + [B_TRANSITION_ANTI_CLOCKWISE_SPIRAL] = BT_Phase2AntiClockwiseSpiral, }; static const TransitionStateFunc sBT_MainPhases[] = @@ -1487,174 +1487,176 @@ static void VBCB_BT_Phase2BlackWaveToRight(void) #undef tOffset #undef tTheta +// Unused + static void BT_Phase2AntiClockwiseSpiral(u8 taskId) { while (sBT_Phase2AntiClockwiseSpiralFuncs[gTasks[taskId].tState](&gTasks[taskId])); } -static void sub_80D1F64(s16 a1, s16 a2, u8 a3) +static void BT_AntiClockwiseSpiral_DoUpdateFrame(s16 initRadius, s16 deltaAngleMax, u8 offsetMaybe) { u8 theta = 0; - s16 i, r0, r8; - s16 res1, res2, res3, res4; + s16 i, amplitude1, amplitude2; + s16 y1, x1, y2, x2; for (i = 320; i < 960; ++i) gScanlineEffectRegBuffers[1][i] = 120; - for (i = 0; i < (a2 * 16); ++i, ++theta) + for (i = 0; i < (deltaAngleMax * 16); ++i, ++theta) { - r0 = a1 + (theta >> 3); + amplitude1 = initRadius + (theta >> 3); if ((theta >> 3) != ((theta + 1) >> 3)) { - r8 = r0 + 1; + amplitude2 = amplitude1 + 1; } else { - r8 = r0; + amplitude2 = amplitude1; } - res1 = 80 - Sin(theta, r0); - res2 = Cos(theta, r0) + 120; - res3 = 80 - Sin(theta + 1, r8); - res4 = Cos(theta + 1, r8) + 120; + y1 = 80 - Sin(theta, amplitude1); + x1 = Cos(theta, amplitude1) + 120; + y2 = 80 - Sin(theta + 1, amplitude2); + x2 = Cos(theta + 1, amplitude2) + 120; - if (res1 < 0 && res3 < 0) + if (y1 < 0 && y2 < 0) continue; - if (res1 > 159 && res3 > 159) + if (y1 > 159 && y2 > 159) continue; - if (res1 < 0) - res1 = 0; - if (res1 > 159) - res1 = 159; - if (res2 < 0) - res2 = 0; - if (res2 > 255) - res2 = 255; - if (res3 < 0) - res3 = 0; - if (res3 > 159) - res3 = 159; - if (res4 < 0) - res4 = 0; - if (res4 > 255) - res4 = 255; - - res3 -= res1; + if (y1 < 0) + y1 = 0; + if (y1 > 159) + y1 = 159; + if (x1 < 0) + x1 = 0; + if (x1 > 255) + x1 = 255; + if (y2 < 0) + y2 = 0; + if (y2 > 159) + y2 = 159; + if (x2 < 0) + x2 = 0; + if (x2 > 255) + x2 = 255; + + y2 -= y1; if (theta >= 64 && theta < 192) { - gScanlineEffectRegBuffers[1][res1 + 320] = res2; + gScanlineEffectRegBuffers[1][y1 + 320] = x1; - if (res3 == 0) + if (y2 == 0) continue; - res4 -= res2; - if (res4 < -1 && res2 > 1) - --res2; - else if (res4 > 1 && res2 < 255) - ++res2; + x2 -= x1; + if (x2 < -1 && x1 > 1) + --x1; + else if (x2 > 1 && x1 < 255) + ++x1; - if (res3 < 0) - for (; res3 < 0; res3++) - gScanlineEffectRegBuffers[1][res1 + res3 + 320] = res2; + if (y2 < 0) + for (; y2 < 0; y2++) + gScanlineEffectRegBuffers[1][y1 + y2 + 320] = x1; else - for (; res3 > 0; res3--) - gScanlineEffectRegBuffers[1][res1 + res3 + 320] = res2; + for (; y2 > 0; y2--) + gScanlineEffectRegBuffers[1][y1 + y2 + 320] = x1; } else { - gScanlineEffectRegBuffers[1][res1 + 480] = res2; + gScanlineEffectRegBuffers[1][y1 + 480] = x1; - if (res3 == 0) + if (y2 == 0) continue; - res4 -= res2; - if (res4 < -1 && res2 > 1) - --res2; - else if (res4 > 1 && res2 < 255) - ++res2; + x2 -= x1; + if (x2 < -1 && x1 > 1) + --x1; + else if (x2 > 1 && x1 < 255) + ++x1; - if (res3 < 0) - for (; res3 < 0; res3++) - gScanlineEffectRegBuffers[1][res1 + res3 + 480] = res2; + if (y2 < 0) + for (; y2 < 0; y2++) + gScanlineEffectRegBuffers[1][y1 + y2 + 480] = x1; else - for (; res3 > 0; res3--) - gScanlineEffectRegBuffers[1][res1 + res3 + 480] = res2; + for (; y2 > 0; y2--) + gScanlineEffectRegBuffers[1][y1 + y2 + 480] = x1; } } - if (a3 == 0 || a2 % 4 == 0) + if (offsetMaybe == 0 || deltaAngleMax % 4 == 0) { for (i = 0; i < 160; i++) { - gScanlineEffectRegBuffers[1][i * 2 + a3] = gScanlineEffectRegBuffers[1][i + 320] << 8 | gScanlineEffectRegBuffers[1][i + 480]; + gScanlineEffectRegBuffers[1][i * 2 + offsetMaybe] = gScanlineEffectRegBuffers[1][i + 320] << 8 | gScanlineEffectRegBuffers[1][i + 480]; } return; } - res1 = Sin(a2 * 16, a1 + (a2 << 1)); + y1 = Sin(deltaAngleMax * 16, initRadius + (deltaAngleMax << 1)); - switch (a2 / 4) + switch (deltaAngleMax / 4) { case 0: - if (res1 > 80) - res1 = 80; - for (i = res1; i > 0; i--) + if (y1 > 80) + y1 = 80; + for (i = y1; i > 0; i--) { - sTransitionStructPtr->data[2] = res2 = ((i * gUnknown_83FA444[a2]) >> 8) + 120; - if (res2 < 0 || res2 > 255) + sTransitionStructPtr->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + 120; + if (x1 < 0 || x1 > 255) continue; sTransitionStructPtr->bg123HOfs = 400 - i; sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][400 - i]; - if (gScanlineEffectRegBuffers[1][560 - i] < res2) + if (gScanlineEffectRegBuffers[1][560 - i] < x1) gScanlineEffectRegBuffers[1][560 - i] = 120; - else if (gScanlineEffectRegBuffers[1][400 - i] < res2) - gScanlineEffectRegBuffers[1][400 - i] = res2; + else if (gScanlineEffectRegBuffers[1][400 - i] < x1) + gScanlineEffectRegBuffers[1][400 - i] = x1; } break; case 1: - if (res1 > 80) - res1 = 80; - for (i = res1; i > 0; i--) + if (y1 > 80) + y1 = 80; + for (i = y1; i > 0; i--) { - sTransitionStructPtr->data[2] = res2 = ((i * gUnknown_83FA444[a2]) >> 8) + 120; - if (res2 < 0 || res2 > 255) + sTransitionStructPtr->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + 120; + if (x1 < 0 || x1 > 255) continue; sTransitionStructPtr->bg123HOfs = 400 - i; sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][400 - i]; - if (gScanlineEffectRegBuffers[1][400 - i] < res2) - gScanlineEffectRegBuffers[1][400 - i] = res2; + if (gScanlineEffectRegBuffers[1][400 - i] < x1) + gScanlineEffectRegBuffers[1][400 - i] = x1; } break; case 2: - if (res1 < -79) - res1 = -79; - for (i = res1; i <= 0; i++) + if (y1 < -79) + y1 = -79; + for (i = y1; i <= 0; i++) { - sTransitionStructPtr->data[2] = res2 = ((i * gUnknown_83FA444[a2]) >> 8) + 120; - if (res2 < 0 || res2 > 255) + sTransitionStructPtr->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + 120; + if (x1 < 0 || x1 > 255) continue; sTransitionStructPtr->bg123HOfs = 560 - i; sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][560 - i]; - if (gScanlineEffectRegBuffers[1][400 - i] >= res2) + if (gScanlineEffectRegBuffers[1][400 - i] >= x1) gScanlineEffectRegBuffers[1][400 - i] = 120; - else if (gScanlineEffectRegBuffers[1][560 - i] > res2) - gScanlineEffectRegBuffers[1][560 - i] = res2; + else if (gScanlineEffectRegBuffers[1][560 - i] > x1) + gScanlineEffectRegBuffers[1][560 - i] = x1; } break; case 3: - if (res1 < -79) - res1 = -79; - for (i = res1; i <= 0; i++) + if (y1 < -79) + y1 = -79; + for (i = y1; i <= 0; i++) { - sTransitionStructPtr->data[2] = res2 = ((i * gUnknown_83FA444[a2]) >> 8) + 120; - if (res2 < 0 || res2 > 255) + sTransitionStructPtr->data[2] = x1 = ((i * gUnknown_83FA444[deltaAngleMax]) >> 8) + 120; + if (x1 < 0 || x1 > 255) continue; sTransitionStructPtr->bg123HOfs = 560 - i; sTransitionStructPtr->data[10] = gScanlineEffectRegBuffers[1][560 - i]; - if (gScanlineEffectRegBuffers[1][560 - i] > res2) - gScanlineEffectRegBuffers[1][560 - i] = res2; + if (gScanlineEffectRegBuffers[1][560 - i] > x1) + gScanlineEffectRegBuffers[1][560 - i] = x1; } break; default: @@ -1663,7 +1665,7 @@ static void sub_80D1F64(s16 a1, s16 a2, u8 a3) for (i = 0; i < 160; i++) { - gScanlineEffectRegBuffers[1][i * 2 + a3] = (gScanlineEffectRegBuffers[1][i + 320] << 8) | gScanlineEffectRegBuffers[1][i + 480]; + gScanlineEffectRegBuffers[1][i * 2 + offsetMaybe] = (gScanlineEffectRegBuffers[1][i + 320] << 8) | gScanlineEffectRegBuffers[1][i + 480]; } } @@ -1677,8 +1679,8 @@ static bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task) sTransitionStructPtr->win0V = WIN_RANGE(0x30, 0x70); sTransitionStructPtr->win1V = WIN_RANGE(0x10, 0x90); sTransitionStructPtr->counter = 0; - sub_80D1F64(0, 0, FALSE); - sub_80D1F64(0, 0, TRUE); + BT_AntiClockwiseSpiral_DoUpdateFrame(0, 0, 0); + BT_AntiClockwiseSpiral_DoUpdateFrame(0, 0, 1); DmaCopy16(3, gScanlineEffectRegBuffers[1], gScanlineEffectRegBuffers[0], 640); SetVBlankCallback(VBCB_BT_Phase2AntiClockwiseBlackFade); ++task->tState; @@ -1689,30 +1691,30 @@ static bool8 BT_Phase2AntiClockwiseSpiral_Init(struct Task *task) static bool8 BT_Phase2AntiClockwiseSpiral_Update(struct Task *task) { - s16 v0, v1; + s16 win_top, win_bottom; - sub_80D1F64(task->data[2], task->data[1], TRUE); + BT_AntiClockwiseSpiral_DoUpdateFrame(task->data[2], task->data[1], 1); sTransitionStructPtr->vblankDma |= TRUE; if (++task->data[1] == 17) { - sub_80D1F64(task->data[2], 16, FALSE); - v0 = 48 - task->data[2]; - if (v0 < 0) - v0 = 0; - v1 = task->data[2] + 112; - if (v1 > 255) - v1 = 255; - sTransitionStructPtr->win0V = v0 | v1; + BT_AntiClockwiseSpiral_DoUpdateFrame(task->data[2], 16, 0); + win_top = 48 - task->data[2]; + if (win_top < 0) + win_top = 0; + win_bottom = task->data[2] + 112; + if (win_bottom > 255) + win_bottom = 255; + sTransitionStructPtr->win0V = win_top | win_bottom; // UB: win_top should be shifted task->data[2] += 32; task->data[1] = 0; - sub_80D1F64(task->data[2], 0, TRUE); - v0 = 48 - task->data[2]; - if (v0 < 0) - v0 = 0; - v1 = task->data[2] + 112; - if (v1 > 255) - v1 = 255; - sTransitionStructPtr->win1V = v0 | v1; + BT_AntiClockwiseSpiral_DoUpdateFrame(task->data[2], 0, 1); + win_top = 48 - task->data[2]; + if (win_top < 0) + win_top = 0; + win_bottom = task->data[2] + 112; + if (win_bottom > 255) + win_bottom = 255; + sTransitionStructPtr->win1V = win_top | win_bottom; // UB: win_top should be shifted sTransitionStructPtr->vblankDma |= TRUE; if (task->data[2] > 159) { @@ -2684,7 +2686,7 @@ static bool8 BT_Phase1_FadeIn(struct Task *task) static void BT_InitCtrlBlk(void) { memset(sTransitionStructPtr, 0, sizeof(*sTransitionStructPtr)); - sub_805A658(&sTransitionStructPtr->bg123HOfs, &sTransitionStructPtr->bg123VOfs); + FieldCameraGetPixelOffsetAtGround(&sTransitionStructPtr->bg123HOfs, &sTransitionStructPtr->bg123VOfs); } static void BT_VBSyncOamAndPltt(void) diff --git a/src/battle_util.c b/src/battle_util.c index 27d90b0d4..b3cd5a53c 100644 --- a/src/battle_util.c +++ b/src/battle_util.c @@ -247,7 +247,7 @@ void sub_8017434(u8 battler) } } -void sub_80174B8(u8 battler) +void UpdateSentPokesToOpponentValue(u8 battler) { if (GetBattlerSide(battler) == B_SIDE_OPPONENT) { diff --git a/src/battle_util2.c b/src/battle_util2.c index 6de4941cb..b1036ef0b 100644 --- a/src/battle_util2.c +++ b/src/battle_util2.c @@ -15,7 +15,7 @@ void AllocateBattleResources(void) s32 i; for (i = 0; i < 4; ++i) - gUnknown_3005EE0[i] = AllocZeroed(8); + gPokedudeBattlerStates[i] = AllocZeroed(sizeof(struct PokedudeBattlerState)); } gBattleStruct = AllocZeroed(sizeof(*gBattleStruct)); gBattleResources = AllocZeroed(sizeof(*gBattleResources)); @@ -29,10 +29,10 @@ void AllocateBattleResources(void) gBattleResources->AI_ScriptsStack = AllocZeroed(sizeof(*gBattleResources->AI_ScriptsStack)); gLinkBattleSendBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE); gLinkBattleRecvBuffer = AllocZeroed(BATTLE_BUFFER_LINK_SIZE); - gUnknown_2022BB8 = AllocZeroed(0x2000); - gUnknown_2022BBC = AllocZeroed(0x1000); - SetBgTilemapBuffer(1, gUnknown_2022BBC); - SetBgTilemapBuffer(2, gUnknown_2022BBC); + gBattleAnimMons_BgTilesBuffer = AllocZeroed(0x2000); + gBattleAnimMons_BgTilemapBuffer = AllocZeroed(0x1000); + SetBgTilemapBuffer(1, gBattleAnimMons_BgTilemapBuffer); + SetBgTilemapBuffer(2, gBattleAnimMons_BgTilemapBuffer); } void FreeBattleResources(void) @@ -45,7 +45,7 @@ void FreeBattleResources(void) for (i = 0; i < 4; ++i) { - FREE_AND_SET_NULL(gUnknown_3005EE0[i]); + FREE_AND_SET_NULL(gPokedudeBattlerStates[i]); } } if (gBattleResources != NULL) @@ -62,8 +62,8 @@ void FreeBattleResources(void) FREE_AND_SET_NULL(gBattleResources); FREE_AND_SET_NULL(gLinkBattleSendBuffer); FREE_AND_SET_NULL(gLinkBattleRecvBuffer); - FREE_AND_SET_NULL(gUnknown_2022BB8); - FREE_AND_SET_NULL(gUnknown_2022BBC); + FREE_AND_SET_NULL(gBattleAnimMons_BgTilesBuffer); + FREE_AND_SET_NULL(gBattleAnimMons_BgTilemapBuffer); } } @@ -264,7 +264,7 @@ static void AnimTranslateWebThread(struct Sprite *sprite) { SetAverageBattlerPositions(gBattleAnimTarget, 1, &sprite->data[2], &sprite->data[4]); } - sub_8075678(sprite); + BattleAnim_InitLinearTranslationWithDuration(sprite); sprite->data[5] = gBattleAnimArgs[3]; sprite->callback = sub_80B41C0; } diff --git a/src/cable_club.c b/src/cable_club.c index 7054eb417..039dea19c 100644 --- a/src/cable_club.c +++ b/src/cable_club.c @@ -301,7 +301,7 @@ static void Task_LinkupSlave_2(u8 taskId) { if (*res == 3 || *res == 4) { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = Task_Linkup_7; } @@ -346,13 +346,13 @@ static void Task_LinkupMaster_6(u8 taskId) if (AnyConnectedPartnersPlayingRS() == TRUE) CloseLink(); else - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = Task_Linkup_7; } else if (gSpecialVar_Result == 3) { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); HideFieldMessageBox(); gTasks[taskId].func = Task_Linkup_7; } @@ -410,7 +410,7 @@ static void Task_Linkup_6a(u8 taskId) } else { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); gTasks[taskId].func = Task_Linkup_7; } } @@ -599,7 +599,7 @@ static void Task_StartWiredCableClubBattle(u8 taskId) task->data[0]++; break; case 3: - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); task->data[0]++; break; case 4: @@ -671,7 +671,7 @@ static void Task_StartWirelessCableClubBattle(u8 taskId) data[0] = 5; break; case 5: - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); data[0] = 6; break; case 6: @@ -711,7 +711,7 @@ static void sub_8081624(void) switch (gMain.state) { case 0: - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); gMain.state++; break; case 1: @@ -838,7 +838,7 @@ static void Task_StartWiredCableClubTrade(u8 taskId) gSelectedTradeMonPositions[0] = 0; gSelectedTradeMonPositions[1] = 0; m4aMPlayAllStop(); - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); task->data[0]++; break; case 3: @@ -870,7 +870,7 @@ static void Task_StartWirelessCableClubTrade(u8 taskId) gSelectedTradeMonPositions[0] = 0; gSelectedTradeMonPositions[1] = 0; m4aMPlayAllStop(); - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); data[0]++; break; case 3: @@ -959,6 +959,6 @@ static void sub_8081AE4(u8 taskId) static void sub_8081B08(u8 taskId) { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); gTasks[taskId].func = sub_8081AE4; } diff --git a/src/dark.c b/src/dark.c index 86523f2f1..142366fea 100644 --- a/src/dark.c +++ b/src/dark.c @@ -409,7 +409,7 @@ void AnimTask_MoveAttackerMementoShadow(u8 taskId) task->data[3] = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker); if (task->data[3] == 1) { - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); task->data[10] = gBattle_BG1_Y; SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT2_ALL | BLDCNT_EFFECT_BLEND | BLDCNT_TGT1_BG1); FillPalette(0, animBg.paletteId * 16, 32); @@ -540,7 +540,7 @@ void AnimTask_MoveTargetMementoShadow(u8 taskId) case 1: if (task->data[3] == 1) { - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); task->data[10] = gBattle_BG1_Y; FillPalette(0, animBg.paletteId * 16, 32); } @@ -742,9 +742,9 @@ void sub_80B8664(u8 taskId) { bool8 toBG2 = GetBattlerSpriteBGPriorityRank(gBattleAnimAttacker) ^ 1 ? TRUE : FALSE; - sub_8073128(toBG2); + ResetBattleAnimBg(toBG2); if (IsBattlerSpriteVisible(BATTLE_PARTNER(gBattleAnimAttacker))) - sub_8073128(toBG2 ^ 1); + ResetBattleAnimBg(toBG2 ^ 1); DestroyAnimVisualTask(taskId); } @@ -800,7 +800,7 @@ void AnimTask_MetallicShine(u8 taskId) species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattleAnimAttacker]], MON_DATA_SPECIES); spriteId = GetAnimBattlerSpriteId(ANIM_ATTACKER); newSpriteId = sub_8076E34(gBattleAnimAttacker, spriteId, species); - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); AnimLoadCompressedBgTilemap(animBg.bgId, gMetalShineTilemap); AnimLoadCompressedBgGfx(animBg.bgId, gMetalShineGfx, animBg.tilesOffset); LoadCompressedPalette(gMetalShinePalette, animBg.paletteId * 16, 32); @@ -839,8 +839,8 @@ static void sub_80B8920(u8 taskId) if (gTasks[taskId].data[1] == 0) SetGreyscaleOrOriginalPalette(paletteNum, 1); DestroySprite(&gSprites[gTasks[taskId].data[0]]); - sub_80752A0(&animBg); - sub_8075358(animBg.bgId); + GetBattleAnimBg1Data(&animBg); + InitBattleAnimBg(animBg.bgId); if (gTasks[taskId].data[6] == 1) gSprites[gBattlerSpriteIds[BATTLE_PARTNER(gBattleAnimAttacker)]].oam.priority++; } diff --git a/src/data.c b/src/data.c index 6b4e113af..3f6a340eb 100644 --- a/src/data.c +++ b/src/data.c @@ -8,7 +8,7 @@ #include "constants/battle_ai.h" #include "constants/trainer_classes.h" -const struct SpriteFrameImage gUnknown_8234698[] = +const struct SpriteFrameImage gSpriteImages_BattlerPlayerLeft[] = { gHeap + 0x8000, 0x800, gHeap + 0x8800, 0x800, @@ -16,7 +16,7 @@ const struct SpriteFrameImage gUnknown_8234698[] = gHeap + 0x9800, 0x800, }; -const struct SpriteFrameImage gUnknown_82346B8[] = +const struct SpriteFrameImage gSpriteImages_BattlerOpponentLeft[] = { gHeap + 0xA000, 0x800, gHeap + 0xA800, 0x800, @@ -24,7 +24,7 @@ const struct SpriteFrameImage gUnknown_82346B8[] = gHeap + 0xB800, 0x800, }; -const struct SpriteFrameImage gUnknown_82346D8[] = +const struct SpriteFrameImage gSpriteImages_BattlerPlayerRight[] = { gHeap + 0xC000, 0x800, gHeap + 0xC800, 0x800, @@ -32,7 +32,7 @@ const struct SpriteFrameImage gUnknown_82346D8[] = gHeap + 0xD800, 0x800, }; -const struct SpriteFrameImage gUnknown_82346F8[] = +const struct SpriteFrameImage gSpriteImages_BattlerOpponentRight[] = { gHeap + 0xE000, 0x800, gHeap + 0xE800, 0x800, @@ -168,7 +168,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_82348B0[] = AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_82348C8[] = +const union AffineAnimCmd *const gSpriteAffineAnimTable_BattlerPlayer[] = { gSpriteAffineAnim_82347F8, gSpriteAffineAnim_8234818, @@ -208,7 +208,7 @@ static const union AffineAnimCmd gSpriteAffineAnim_8234934[] = AFFINEANIMCMD_END, }; -const union AffineAnimCmd *const gSpriteAffineAnimTable_8234944[] = +const union AffineAnimCmd *const gSpriteAffineAnimTable_BattlerOpponent[] = { gSpriteAffineAnim_82347F8, gSpriteAffineAnim_8234818, diff --git a/src/data/party_menu.h b/src/data/party_menu.h index 2ada2b5f4..e8151b810 100644 --- a/src/data/party_menu.h +++ b/src/data/party_menu.h @@ -526,7 +526,7 @@ static const struct WindowTemplate sLevelUpStatsWindowTemplate = .baseBlock = 0x2BF, }; -static const struct WindowTemplate gUnknown_845A170 = +static const struct WindowTemplate sWindowTemplate_FirstBattleOakVoiceover = { .bg = 2, .tilemapLeft = 2, diff --git a/src/daycare.c b/src/daycare.c index 14c41355b..bbd0d89a6 100644 --- a/src/daycare.c +++ b/src/daycare.c @@ -790,7 +790,7 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) u8 i; u8 selectedIvs[INHERITED_IV_COUNT]; u8 availableIVs[NUM_STATS]; - u8 whichParent[ARRAY_COUNT(selectedIvs)]; + u8 whichParent[NELEMS(selectedIvs)]; u8 iv; // Initialize a list of IV indices. @@ -800,7 +800,7 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) } // Select the 3 IVs that will be inherited. - for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) + for (i = 0; i < NELEMS(selectedIvs); i++) { // Randomly pick an IV from the available list and stop from being chosen again. selectedIvs[i] = availableIVs[Random() % (NUM_STATS - i)]; @@ -808,13 +808,13 @@ static void InheritIVs(struct Pokemon *egg, struct DayCare *daycare) } // Determine which parent each of the selected IVs should inherit from. - for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) + for (i = 0; i < NELEMS(selectedIvs); i++) { whichParent[i] = Random() % DAYCARE_MON_COUNT; } // Set each of inherited IVs on the egg mon. - for (i = 0; i < ARRAY_COUNT(selectedIvs); i++) + for (i = 0; i < NELEMS(selectedIvs); i++) { switch (selectedIvs[i]) { @@ -858,7 +858,7 @@ static u8 GetEggMoves(struct Pokemon *pokemon, u16 *eggMoves) numEggMoves = 0; eggMoveIdx = 0; species = GetMonData(pokemon, MON_DATA_SPECIES); - for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i++) + for (i = 0; i < NELEMS(gEggMoves) - 1; i++) { if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET) { @@ -1787,7 +1787,7 @@ static void CB2_EggHatch_0(void) ResetTempTileDataBuffers(); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sBgTemplates_EggHatch, ARRAY_COUNT(sBgTemplates_EggHatch)); + InitBgsFromTemplates(0, sBgTemplates_EggHatch, NELEMS(sBgTemplates_EggHatch)); ChangeBgX(1, 0, 0); ChangeBgY(1, 0, 0); diff --git a/src/dodrio_berry_picking.c b/src/dodrio_berry_picking.c index f9ea77003..35562bde7 100644 --- a/src/dodrio_berry_picking.c +++ b/src/dodrio_berry_picking.c @@ -804,7 +804,7 @@ static void sub_8151488(void) switch (gUnknown_203F3E0->unk10) { case 0: - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); sub_81549D4(7); gUnknown_203F3E0->unk10++; break; diff --git a/src/dodrio_berry_picking_2.c b/src/dodrio_berry_picking_2.c index 5bd531edc..ff44a70de 100644 --- a/src/dodrio_berry_picking_2.c +++ b/src/dodrio_berry_picking_2.c @@ -1567,7 +1567,7 @@ static void sub_8155EA0(void) DmaClear16(3, (void *)PLTT, PLTT_SIZE); SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(FALSE); - InitBgsFromTemplates(0, sUnknown_847565C, ARRAY_COUNT(sUnknown_847565C)); + InitBgsFromTemplates(0, sUnknown_847565C, NELEMS(sUnknown_847565C)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); diff --git a/src/easy_chat.c b/src/easy_chat.c index bf617a854..4360dc72e 100644 --- a/src/easy_chat.c +++ b/src/easy_chat.c @@ -704,7 +704,7 @@ static bool8 UnlockedECMonOrMove(u16 wordIndex, u8 groupId) static bool32 EC_IsDeoxys(u16 species) { u32 i; - for (i = 0; i < ARRAY_COUNT(sDeoxysValue); i++) + for (i = 0; i < NELEMS(sDeoxysValue); i++) { if (sDeoxysValue[i] == species) return TRUE; diff --git a/src/fame_checker.c b/src/fame_checker.c index 48e5cf00a..ea6e63be9 100644 --- a/src/fame_checker.c +++ b/src/fame_checker.c @@ -450,7 +450,7 @@ static void MainCB2_LoadFameChecker(void) sBg1TilemapBuffer = AllocZeroed(0x1000); sBg2TilemapBuffer = AllocZeroed(0x800); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sUIBgTemplates, ARRAY_COUNT(sUIBgTemplates)); + InitBgsFromTemplates(0, sUIBgTemplates, NELEMS(sUIBgTemplates)); SetBgTilemapBuffer(3, sBg3TilemapBuffer); SetBgTilemapBuffer(2, sBg2TilemapBuffer); SetBgTilemapBuffer(1, sBg1TilemapBuffer); diff --git a/src/field_camera.c b/src/field_camera.c index f383b2a27..37133d68f 100644 --- a/src/field_camera.c +++ b/src/field_camera.c @@ -84,10 +84,10 @@ void FieldUpdateBgTilemapScroll(void) SetGpuReg(REG_OFFSET_BG3VOFS, r4); } -void sub_805A658(s16 *a, s16 *b) +void FieldCameraGetPixelOffsetAtGround(s16 *hofs_p, s16 *vofs_p) { - *a = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan; - *b = sFieldCameraOffset.yPixelOffset + sVerticalCameraPan + 8; + *hofs_p = sFieldCameraOffset.xPixelOffset + sHorizontalCameraPan; + *vofs_p = sFieldCameraOffset.yPixelOffset + sVerticalCameraPan + 8; } void DrawWholeMapView(void) diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c index 93bc8133d..a21833729 100644 --- a/src/field_fadetransition.c +++ b/src/field_fadetransition.c @@ -207,7 +207,7 @@ static void sub_807DDF0(u8 taskId) switch (task->data[0]) { case 0: - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); task->data[0]++; break; case 1: @@ -663,7 +663,7 @@ static void Task_ReturnFromLinkRoomWarp(u8 taskId) case 1: if (!WaitWarpFadeOutScreen() && BGMusicStopped()) { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); data[0]++; } break; diff --git a/src/fighting.c b/src/fighting.c index ab477cd43..a7dd18ce8 100644 --- a/src/fighting.c +++ b/src/fighting.c @@ -788,7 +788,7 @@ static void sub_80B111C(struct Sprite *sprite) sprite->data[4] = GetBattlerSpriteCoord(sprite->data[7], 3); InitAnimLinearTranslation(sprite); StoreSpriteCallbackInData6(sprite, DestroySpriteAndMatrix); - sprite->callback = sub_807563C; + sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6; } } @@ -874,7 +874,7 @@ static void AnimSuperpowerFireball(struct Sprite *sprite) sprite->data[4] = GetBattlerSpriteCoord(battler, 3); InitAnimLinearTranslation(sprite); StoreSpriteCallbackInData6(sprite, DestroyAnimSprite); - sprite->callback = sub_807563C; + sprite->callback = RunLinearTranslation_ThenceSetCBtoStoredInData6; } static void sub_80B13D4(struct Sprite *sprite) @@ -940,7 +940,7 @@ void AnimTask_MoveSkyUppercutBg(u8 taskId) switch (task->data[0]) { case 0: - sub_8075458(0); + ToggleBg3Mode(0); task->data[8] = gBattleAnimArgs[0]; ++task->data[0]; break; @@ -965,7 +965,7 @@ void AnimTask_MoveSkyUppercutBg(u8 taskId) { gBattle_BG3_X = 0; gBattle_BG3_Y = 0; - sub_8075458(1); + ToggleBg3Mode(1); DestroyAnimVisualTask(taskId); } } diff --git a/src/fire.c b/src/fire.c index 7833620d4..3a3e6be9b 100644 --- a/src/fire.c +++ b/src/fire.c @@ -1016,7 +1016,7 @@ static void AnimWillOWispOrb(struct Sprite *sprite) sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->data[3] = sprite->pos1.y; sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); - sub_8075678(sprite); + BattleAnim_InitLinearTranslationWithDuration(sprite); sprite->callback = sub_80AD690; } break; @@ -1160,7 +1160,7 @@ void AnimTask_BlendBackground(u8 taskId) { struct BattleAnimBgData animBg; - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); BlendPalette(animBg.paletteId * 16, 16, gBattleAnimArgs[0], gBattleAnimArgs[1]); DestroyAnimVisualTask(taskId); } diff --git a/src/ghost.c b/src/ghost.c index 4aab8409f..0efcc28d4 100644 --- a/src/ghost.c +++ b/src/ghost.c @@ -226,7 +226,7 @@ static void AnimConfuseRayBallBounce(struct Sprite *sprite) sprite->data[2] = GetBattlerSpriteCoord(gBattleAnimTarget, 2); sprite->data[3] = sprite->pos1.y; sprite->data[4] = GetBattlerSpriteCoord(gBattleAnimTarget, 3); - sub_8075678(sprite); + BattleAnim_InitLinearTranslationWithDuration(sprite); sprite->callback = sub_80B52D0; sprite->data[6] = 16; SetGpuReg(REG_OFFSET_BLDCNT, (BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_ALL)); @@ -1314,18 +1314,18 @@ static void sub_80B6BE4(u8 taskId) gBattle_BG2_Y = 0; SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X); SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y); - sub_80752C8(&animBgData, 2); + GetBattleAnimBgData(&animBgData, 2); AnimLoadCompressedBgGfx(animBgData.bgId, gBattleAnim_ScaryFaceGfx, animBgData.tilesOffset); LoadCompressedPalette(gBattleAnim_ScaryFacePal, 16 * animBgData.paletteId, 0x20); break; case 3: - sub_80752C8(&animBgData, 2); - gMonSpritesGfxPtr->field_17C = AllocZeroed(0x2000); - LZDecompressWram(gBattleAnimBgTilemap_ScaryFacePlayer, gMonSpritesGfxPtr->field_17C); - sub_80730C0(animBgData.paletteId, gMonSpritesGfxPtr->field_17C, 256, 0); - CopyToBgTilemapBufferRect_ChangePalette(animBgData.bgId, gMonSpritesGfxPtr->field_17C, 0, 0, 0x20, 0x20, 0x11); + GetBattleAnimBgData(&animBgData, 2); + gMonSpritesGfxPtr->multiUseBuffer = AllocZeroed(0x2000); + LZDecompressWram(gBattleAnimBgTilemap_ScaryFacePlayer, gMonSpritesGfxPtr->multiUseBuffer); + sub_80730C0(animBgData.paletteId, gMonSpritesGfxPtr->multiUseBuffer, 256, 0); + CopyToBgTilemapBufferRect_ChangePalette(animBgData.bgId, gMonSpritesGfxPtr->multiUseBuffer, 0, 0, 0x20, 0x20, 0x11); CopyBgTilemapBufferToVram(2); - FREE_AND_SET_NULL(gMonSpritesGfxPtr->field_17C); + FREE_AND_SET_NULL(gMonSpritesGfxPtr->multiUseBuffer); break; case 4: ++task->data[1]; @@ -1417,7 +1417,7 @@ static void sub_80B6FC4(u8 taskId) SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2); break; case 3: - sub_8075358(2); + InitBattleAnimBg(2); FillPalette(0, 0x90, 0x20); SetAnimBgAttribute(2, BG_ANIM_CHAR_BASE_BLOCK, 0); task->data[1] = 12; @@ -941,7 +941,7 @@ void AnimTask_Haze1(u8 taskId) gBattle_BG1_Y = 0; SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset); AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap); LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32); @@ -992,9 +992,9 @@ static void AnimTask_Haze2(u8 taskId) } break; case 3: - sub_80752A0(&animBg); - sub_8075358(1); - sub_8075358(2); + GetBattleAnimBg1Data(&animBg); + InitBattleAnimBg(1); + InitBattleAnimBg(2); ++gTasks[taskId].data[12]; // fall through case 4: @@ -1039,7 +1039,7 @@ void AnimTask_LoadMistTiles(u8 taskId) gBattle_BG1_Y = 0; SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); LoadBgTiles(animBg.bgId, gWeatherFogHorizontalTiles, 0x800, animBg.tilesOffset); AnimLoadCompressedBgTilemap(animBg.bgId, gBattleAnimFogTilemap); LoadPalette(&gUnknown_83C2CE0, animBg.paletteId * 16, 32); @@ -1087,9 +1087,9 @@ static void AnimTask_OverlayFogTiles(u8 taskId) } break; case 3: - sub_80752A0(&animBg); - sub_8075358(1); - sub_8075358(2); + GetBattleAnimBg1Data(&animBg); + InitBattleAnimBg(1); + InitBattleAnimBg(2); ++gTasks[taskId].data[12]; // fall through case 4: @@ -1230,7 +1230,7 @@ static void MovePoisonGasCloud(struct Sprite *sprite) sprite->data[2] = -0x10; ++sprite->data[7]; sprite->pos2.x = sprite->pos2.y = 0; - sub_8075678(sprite); + BattleAnim_InitLinearTranslationWithDuration(sprite); } break; case 2: diff --git a/src/item_menu.c b/src/item_menu.c index 676ce6759..3abecc1f5 100644 --- a/src/item_menu.c +++ b/src/item_menu.c @@ -2351,7 +2351,7 @@ static void Task_Bag_TeachyTvStatus(u8 taskId) DestroyListMenuTask(data[0], NULL, NULL); RestorePlayerBag(); gItemUseCB = ItemUseCB_MedicineStep; - ItemMenu_SetExitCallback(ChooseMonForInBattleItem); + ItemMenu_SetExitCallback(Pokedude_ChooseMonForInBattleItem); gTasks[taskId].func = Task_Pokedude_FadeFromBag; return; } diff --git a/src/item_use.c b/src/item_use.c index 9c434acdb..585d44273 100644 --- a/src/item_use.c +++ b/src/item_use.c @@ -793,12 +793,12 @@ static void ItemUse_SwitchToPartyMenuInBattle(u8 taskId) { if (GetPocketByItemId(gSpecialVar_ItemId) == POCKET_BERRY_POUCH) { - BerryPouch_SetExitCallback(sub_81279E0); + BerryPouch_SetExitCallback(EnterPartyFromItemMenuInBattle); BerryPouch_StartFadeToExitCallback(taskId); } else { - ItemMenu_SetExitCallback(sub_81279E0); + ItemMenu_SetExitCallback(EnterPartyFromItemMenuInBattle); ItemMenu_StartFadeToExitCallback(taskId); } } diff --git a/src/link.c b/src/link.c index eac984b47..4a0f8561f 100644 --- a/src/link.c +++ b/src/link.c @@ -461,7 +461,7 @@ void LinkTestProcessKeyInput(void) } if (JOY_NEW(SELECT_BUTTON)) { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); } if (gLinkTestDebugValuesEnabled) { @@ -1322,7 +1322,7 @@ void Link_StartSend5FFFwithParam(u16 a0) } } -void Link_TryStartSend5FFF(void) +void SetCloseLinkCallback(void) { if (gWirelessCommType == 1) { @@ -1377,7 +1377,7 @@ static void LinkCB_WaitAckCommand5FFF(void) } } -void PrepareSendLinkCmd2FFE_or_RfuCmd6600(void) +void SetLinkStandbyCallback(void) { if (gWirelessCommType == 1) { diff --git a/src/load_save.c b/src/load_save.c index f17d31f37..499c93916 100644 --- a/src/load_save.c +++ b/src/load_save.c @@ -70,7 +70,7 @@ void SetSaveBlocksPointers(void) struct SaveBlock1** sav1_LocalVar = &gSaveBlock1Ptr; void *oldSave = (void *)gSaveBlock1Ptr; - offset = (Random()) & (SAVEBLOCK_MOVE_RANGE - 4); + offset = (Random()) & ((SAVEBLOCK_MOVE_RANGE - 1) & ~3); gSaveBlock2Ptr = (void*)(&gSaveBlock2) + offset; *sav1_LocalVar = (void*)(&gSaveBlock1) + offset; diff --git a/src/main.c b/src/main.c index 1573a2c5b..2f039c23b 100644 --- a/src/main.c +++ b/src/main.c @@ -67,9 +67,15 @@ IntrFunc gIntrTable[INTR_COUNT]; bool8 gLinkVSyncDisabled; u32 IntrMain_Buffer[0x200]; u8 gPcmDmaCounter; -u8 gUnknown_3003578; -u8 gUnknown_3003D80; -u8 gUnknown_3003D84; + +// These variables are not defined in RS or Emerald, and are never read. +// They were likely used to debug the audio engine and VCount interrupt. +// Define NDEBUG in include/config.h to remove these variables. +#ifndef NDEBUG +u8 sVcountAfterSound; +u8 sVcountAtIntr; +u8 sVcountBeforeSound; +#endif static IntrFunc * const sTimerIntrFunc = gIntrTable + 0x7; @@ -369,11 +375,15 @@ static void VBlankIntr(void) gPcmDmaCounter = gSoundInfo.pcmDmaCounter; - gUnknown_3003D84 = REG_VCOUNT; +#ifndef NDEBUG + sVcountBeforeSound = REG_VCOUNT; +#endif m4aSoundMain(); - gUnknown_3003578 = REG_VCOUNT; +#ifndef NDEBUG + sVcountAfterSound = REG_VCOUNT; +#endif - sub_800DD28(); + TryReceiveLinkBattleData(); Random(); UpdateWirelessStatusIndicatorSprite(); @@ -398,7 +408,9 @@ static void HBlankIntr(void) static void VCountIntr(void) { - gUnknown_3003D80 = REG_VCOUNT; +#ifndef NDEBUG + sVcountAtIntr = REG_VCOUNT; +#endif m4aSoundVSync(); INTR_CHECK |= INTR_FLAG_VCOUNT; gMain.intrCheck |= INTR_FLAG_VCOUNT; diff --git a/src/mystery_gift_menu.c b/src/mystery_gift_menu.c index 1a36fd6f6..2c455b57a 100644 --- a/src/mystery_gift_menu.c +++ b/src/mystery_gift_menu.c @@ -375,7 +375,7 @@ bool32 HandleMysteryGiftOrEReaderSetup(s32 mg_or_ereader) ScanlineEffect_Stop(); ResetBgsAndClearDma3BusyFlags(1); - InitBgsFromTemplates(0, sBGTemplates, ARRAY_COUNT(sBGTemplates)); + InitBgsFromTemplates(0, sBGTemplates, NELEMS(sBGTemplates)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); ChangeBgX(1, 0, 0); diff --git a/src/party_menu.c b/src/party_menu.c index b01e62a03..1acbc04ea 100644 --- a/src/party_menu.c +++ b/src/party_menu.c @@ -353,23 +353,23 @@ static void SlideMultiPartyMenuBoxSpritesOneStep(u8 taskId); static void Task_MultiPartnerPartySlideIn(u8 taskId); static bool8 CB2_FadeFromPartyMenu(void); static void Task_PartyMenuWaitForFade(u8 taskId); -static void sub_8120C6C(u8 taskId); -static void sub_8120CA8(u8 taskId); -static void sub_8120CD8(u8 taskId); -static void sub_8120D08(u8 taskId); -static void sub_8120D40(u8 taskId); -static void sub_8120D7C(u8 taskId); -static void sub_8120DAC(u8 taskId); -static void sub_8120DE0(u8 taskId); -static void sub_8120E1C(u8 taskId); -static void sub_8120E58(u8 taskId); -static void sub_8120EE0(u8 taskId); -static void sub_8120FF0(u8 taskId); -static bool8 sub_8120F78(u8 taskId); -static void sub_8120FB0(void); -static void sub_8122084(u8 windowId, const u8 *str); -static u8 sub_81220D4(void); -static void sub_8122110(u8 windowId); +static void Task_FirstBattleEnterParty_DarkenScreen(u8 taskId); +static void Task_FirstBattleEnterParty_WaitDarken(u8 taskId); +static void Task_FirstBattleEnterParty_CreatePrinter(u8 taskId); +static void Task_FirstBattleEnterParty_RunPrinterMsg1(u8 taskId); +static void Task_FirstBattleEnterParty_LightenFirstMonIcon(u8 taskId); +static void Task_FirstBattleEnterParty_WaitLightenFirstMonIcon(u8 taskId); +static void Task_FirstBattleEnterParty_StartPrintMsg2(u8 taskId); +static void Task_FirstBattleEnterParty_RunPrinterMsg2(u8 taskId); +static void Task_FirstBattleEnterParty_FadeNormal(u8 taskId); +static void Task_FirstBattleEnterParty_WaitFadeNormal(u8 taskId); +static void Task_PartyMenu_PokedudeStep(u8 taskId); +static void Task_PartyMenuFromBag_PokedudeStep(u8 taskId); +static bool8 PartyMenuPokedudeIsCancelled(u8 taskId); +static void PartyMenuHandlePokedudeCancel(void); +static void PartyMenu_Oak_PrintText(u8 windowId, const u8 *str); +static u8 FirstBattleEnterParty_CreateWindowAndMsg1Printer(void); +static void FirstBattleEnterParty_DestroyVoiceoverWindow(u8 windowId); static void SetSwitchedPartyOrderQuestLogEvent(void); static void SetUsedFieldMoveQuestLogEvent(struct Pokemon *mon, u8 fieldMove); static void sub_8124DE0(void); @@ -855,7 +855,7 @@ static bool8 DisplayPartyPokemonDataForMoveTutorOrEvolutionItem(u8 slot) DisplayPartyPokemonDataToTeachMove(slot, item, 0); break; case 2: // Evolution stone - if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, 3, item) != SPECIES_NONE) + if (!GetMonData(currentPokemon, MON_DATA_IS_EGG) && GetEvolutionTargetSpecies(currentPokemon, EVO_MODE_ITEM_CHECK, item) != SPECIES_NONE) return FALSE; DisplayPartyPokemonDescriptionData(slot, PARTYBOX_DESC_NO_USE); break; @@ -1955,76 +1955,78 @@ static bool8 CanLearnTutorMove(u16 species, u8 tutor) } } -static void sub_8120C3C(u8 taskId) +// Tutorial battle messages + +static void Task_FirstBattleEnterParty_WaitFadeIn(u8 taskId) { if (!gPaletteFade.active) - gTasks[taskId].func = sub_8120C6C; + gTasks[taskId].func = Task_FirstBattleEnterParty_DarkenScreen; } -static void sub_8120C6C(u8 taskId) +static void Task_FirstBattleEnterParty_DarkenScreen(u8 taskId) { BeginNormalPaletteFade(0xFFFF1FFF, 4, 0, 6, RGB_BLACK); - gTasks[taskId].func = sub_8120CA8; + gTasks[taskId].func = Task_FirstBattleEnterParty_WaitDarken; } -static void sub_8120CA8(u8 taskId) +static void Task_FirstBattleEnterParty_WaitDarken(u8 taskId) { if (!gPaletteFade.active) - gTasks[taskId].func = sub_8120CD8; + gTasks[taskId].func = Task_FirstBattleEnterParty_CreatePrinter; } -static void sub_8120CD8(u8 taskId) +static void Task_FirstBattleEnterParty_CreatePrinter(u8 taskId) { - gTasks[taskId].data[0] = sub_81220D4(); - gTasks[taskId].func = sub_8120D08; + gTasks[taskId].data[0] = FirstBattleEnterParty_CreateWindowAndMsg1Printer(); + gTasks[taskId].func = Task_FirstBattleEnterParty_RunPrinterMsg1; } -static void sub_8120D08(u8 taskId) +static void Task_FirstBattleEnterParty_RunPrinterMsg1(u8 taskId) { s16 *data = gTasks[taskId].data; if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE) - gTasks[taskId].func = sub_8120D40; + gTasks[taskId].func = Task_FirstBattleEnterParty_LightenFirstMonIcon; } -static void sub_8120D40(u8 taskId) +static void Task_FirstBattleEnterParty_LightenFirstMonIcon(u8 taskId) { BeginNormalPaletteFade(0xFFFF0008, 4, 6, 0, RGB_BLACK); - gTasks[taskId].func = sub_8120D7C; + gTasks[taskId].func = Task_FirstBattleEnterParty_WaitLightenFirstMonIcon; } -static void sub_8120D7C(u8 taskId) +static void Task_FirstBattleEnterParty_WaitLightenFirstMonIcon(u8 taskId) { if (!gPaletteFade.active) - gTasks[taskId].func = sub_8120DAC; + gTasks[taskId].func = Task_FirstBattleEnterParty_StartPrintMsg2; } -static void sub_8120DAC(u8 taskId) +static void Task_FirstBattleEnterParty_StartPrintMsg2(u8 taskId) { s16 *data = gTasks[taskId].data; - sub_8122084(data[0], gUnknown_8417494); - gTasks[taskId].func = sub_8120DE0; + PartyMenu_Oak_PrintText(data[0], gText_OakThisIsListOfPokemon); + gTasks[taskId].func = Task_FirstBattleEnterParty_RunPrinterMsg2; } -static void sub_8120DE0(u8 taskId) +static void Task_FirstBattleEnterParty_RunPrinterMsg2(u8 taskId) { s16 *data = gTasks[taskId].data; if (RunTextPrinters_CheckActive((u8)data[0]) != TRUE) { - sub_8122110((u8)data[0]); - gTasks[taskId].func = sub_8120E1C; + FirstBattleEnterParty_DestroyVoiceoverWindow((u8)data[0]); + gTasks[taskId].func = Task_FirstBattleEnterParty_FadeNormal; } } -static void sub_8120E1C(u8 taskId) +static void Task_FirstBattleEnterParty_FadeNormal(u8 taskId) { BeginNormalPaletteFade(0x0000FFF7, 4, 6, 0, RGB_BLACK); - gTasks[taskId].func = sub_8120E58; + gTasks[taskId].func = Task_FirstBattleEnterParty_WaitFadeNormal; } -static void sub_8120E58(u8 taskId) +static void Task_FirstBattleEnterParty_WaitFadeNormal(u8 taskId) { if (!gPaletteFade.active) { @@ -2038,24 +2040,25 @@ static void sub_8120E58(u8 taskId) } } -static void sub_8120EBC(u8 taskId) +// Pokedude switches Pokemon +static void Task_PartyMenu_Pokedude(u8 taskId) { s16 *data = gTasks[taskId].data; data[0] = 0; - gTasks[taskId].func = sub_8120EE0; + gTasks[taskId].func = Task_PartyMenu_PokedudeStep; } -static void sub_8120EE0(u8 taskId) +static void Task_PartyMenu_PokedudeStep(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!gPaletteFade.active && sub_8120F78(taskId) != TRUE) + if (!gPaletteFade.active && PartyMenuPokedudeIsCancelled(taskId) != TRUE) { switch (data[0]) { case 80: - UpdateCurrentPartySelection(&gPartyMenu.slotId, 2); + UpdateCurrentPartySelection(&gPartyMenu.slotId, MENU_DIR_RIGHT); break; case 160: PlaySE(SE_SELECT); @@ -2070,18 +2073,18 @@ static void sub_8120EE0(u8 taskId) } } -static bool8 sub_8120F78(u8 taskId) +static bool8 PartyMenuPokedudeIsCancelled(u8 taskId) { if (JOY_NEW(B_BUTTON)) { - sPartyMenuInternal->exitCallback = sub_8120FB0; + sPartyMenuInternal->exitCallback = PartyMenuHandlePokedudeCancel; Task_ClosePartyMenu(taskId); return TRUE; } return FALSE; } -static void sub_8120FB0(void) +static void PartyMenuHandlePokedudeCancel(void) { FreeRestoreBattleData(); LoadPlayerParty(); @@ -2089,19 +2092,20 @@ static void sub_8120FB0(void) SetMainCallback2(CB2_ReturnToTeachyTV); } -static void sub_8120FCC(u8 taskId) +// Pokedude uses item on his own Pokemon +static void Task_PartyMenuFromBag_Pokedude(u8 taskId) { s16 *data = gTasks[taskId].data; data[0] = 0; - gTasks[taskId].func = sub_8120FF0; + gTasks[taskId].func = Task_PartyMenuFromBag_PokedudeStep; } -static void sub_8120FF0(u8 taskId) +static void Task_PartyMenuFromBag_PokedudeStep(u8 taskId) { s16 *data = gTasks[taskId].data; - if (!gPaletteFade.active && sub_8120F78(taskId) != TRUE) + if (!gPaletteFade.active && PartyMenuPokedudeIsCancelled(taskId) != TRUE) { if (data[0] != 80) { @@ -2612,24 +2616,24 @@ static void RemoveLevelUpStatsWindow(void) PartyMenuRemoveWindow(&sPartyMenuInternal->windowId[0]); } -static void sub_8122084(u8 windowId, const u8 *str) +static void PartyMenu_Oak_PrintText(u8 windowId, const u8 *str) { StringExpandPlaceholders(gStringVar4, str); gTextFlags.canABSpeedUpPrint = TRUE; - AddTextPrinterParameterized2(windowId, 4, gStringVar4, GetTextSpeedSetting(), 0, 2, 1, 3); + AddTextPrinterParameterized2(windowId, 4, gStringVar4, GetTextSpeedSetting(), NULL, 2, 1, 3); } -static bool8 sub_81220D4(void) +static bool8 FirstBattleEnterParty_CreateWindowAndMsg1Printer(void) { - u8 windowId = AddWindow(&gUnknown_845A170); + u8 windowId = AddWindow(&sWindowTemplate_FirstBattleOakVoiceover); TextWindow_LoadResourcesStdFrame0(windowId, 0x4F, 0xE0); DrawDialogFrameWithCustomTileAndPalette(windowId, 1, 0x4F, 0xE); - sub_8122084(windowId, gUnknown_8417457); + PartyMenu_Oak_PrintText(windowId, gText_OakImportantToGetToKnowPokemonThroughly); return windowId; } -static void sub_8122110(u8 windowId) +static void FirstBattleEnterParty_DestroyVoiceoverWindow(u8 windowId) { ClearWindowTilemap(windowId); ClearDialogWindowAndFrameToTransparent(windowId, FALSE); @@ -5193,7 +5197,7 @@ static void Task_TryLearningNextMove(u8 taskId) static void PartyMenuTryEvolution(u8 taskId) { struct Pokemon *mon = &gPlayerParty[gPartyMenu.slotId]; - u16 targetSpecies = GetEvolutionTargetSpecies(mon, 0, 0); + u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_NORMAL, 0); if (targetSpecies != SPECIES_NONE) { @@ -5349,7 +5353,7 @@ static void sub_8126BD4(void) static bool8 MonCanEvolve(void) { if (!IsNationalPokedexEnabled() - && GetEvolutionTargetSpecies(&gPlayerParty[gPartyMenu.slotId], 2, gSpecialVar_ItemId) > KANTO_DEX_COUNT) + && GetEvolutionTargetSpecies(&gPlayerParty[gPartyMenu.slotId], EVO_MODE_ITEM_USE, gSpecialVar_ItemId) > KANTO_DEX_COUNT) return FALSE; else return TRUE; @@ -5858,16 +5862,16 @@ static u8 GetPartyLayoutFromBattleType(void) void OpenPartyMenuInTutorialBattle(u8 partyAction) { - if (!sub_80EB2E0(8) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)) + if (!BtlCtrl_OakOldMan_TestState2Flag(FIRST_BATTLE_MSG_FLAG_PARTY_MENU) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)) { InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), partyAction, FALSE, PARTY_MSG_NONE, - sub_8120C3C, + Task_FirstBattleEnterParty_WaitFadeIn, SetCB2ToReshowScreenAfterMenu); - sub_80EB2F4(8); + BtlCtrl_OakOldMan_SetState2Flag(FIRST_BATTLE_MSG_FLAG_PARTY_MENU); } else { @@ -5879,36 +5883,36 @@ void OpenPartyMenuInTutorialBattle(u8 partyAction) Task_HandleChooseMonInput, SetCB2ToReshowScreenAfterMenu); } - nullsub_44(); + ReshowBattleScreenDummy(); UpdatePartyToBattleOrder(); } -void OpenPartyMenuInBattle(void) +void Pokedude_OpenPartyMenuInBattle(void) { - InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, sub_8120EBC, SetCB2ToReshowScreenAfterMenu); - nullsub_44(); + InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_CHOOSE_MON, FALSE, PARTY_MSG_CHOOSE_MON, Task_PartyMenu_Pokedude, SetCB2ToReshowScreenAfterMenu); + ReshowBattleScreenDummy(); UpdatePartyToBattleOrder(); } -void ChooseMonForInBattleItem(void) +void Pokedude_ChooseMonForInBattleItem(void) { - InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_REUSABLE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, sub_8120FCC, CB2_BagMenuFromBattle); - nullsub_44(); + InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_REUSABLE_ITEM, FALSE, PARTY_MSG_USE_ON_WHICH_MON, Task_PartyMenuFromBag_Pokedude, CB2_BagMenuFromBattle); + ReshowBattleScreenDummy(); UpdatePartyToBattleOrder(); } -void sub_81279E0(void) +void EnterPartyFromItemMenuInBattle(void) { - if (!sub_80EB2E0(8) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)) + if (!BtlCtrl_OakOldMan_TestState2Flag(FIRST_BATTLE_MSG_FLAG_PARTY_MENU) && (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE)) { InitPartyMenu(PARTY_MENU_TYPE_IN_BATTLE, GetPartyLayoutFromBattleType(), PARTY_ACTION_USE_ITEM, FALSE, PARTY_MSG_NONE, - sub_8120C3C, + Task_FirstBattleEnterParty_WaitFadeIn, CB2_BagMenuFromBattle); - sub_80EB2F4(8); + BtlCtrl_OakOldMan_SetState2Flag(FIRST_BATTLE_MSG_FLAG_PARTY_MENU); } else { @@ -5926,7 +5930,7 @@ void sub_81279E0(void) Task_HandleChooseMonInput, callback); } - nullsub_44(); + ReshowBattleScreenDummy(); UpdatePartyToBattleOrder(); } @@ -5973,7 +5977,7 @@ static bool8 TrySwitchInPokemon(void) StringExpandPlaceholders(gStringVar4, gText_EggCantBattle); return FALSE; } - if (GetPartyIdFromBattleSlot(slot) == gBattleStruct->field_8B) + if (GetPartyIdFromBattleSlot(slot) == gBattleStruct->playerPartyIdx) { GetMonNickname(&gPlayerParty[slot], gStringVar1); StringExpandPlaceholders(gStringVar4, gText_PkmnAlreadySelected); @@ -6061,7 +6065,7 @@ static void BufferBattlePartyOrder(u8 *partyBattleOrder, u8 flankId) void BufferBattlePartyCurrentOrderBySide(u8 battlerId, u8 flankId) { - BufferBattlePartyOrderBySide(gBattleStruct->field_60[battlerId], flankId, battlerId); + BufferBattlePartyOrderBySide(gBattleStruct->battlerPartyOrders[battlerId], flankId, battlerId); } // when GetBattlerSide(battlerId) == B_SIDE_PLAYER, this function is identical the one above @@ -6139,7 +6143,7 @@ void SwitchPartyOrderLinkMulti(u8 battlerId, u8 slot, u8 slot2) if (IsMultiBattle()) { - partyBattleOrder = gBattleStruct->field_60[battlerId]; + partyBattleOrder = gBattleStruct->battlerPartyOrders[battlerId]; for (i = j = 0; i < 3; ++j, ++i) { partyIds[j] = partyBattleOrder[i] >> 4; diff --git a/src/pokeball.c b/src/pokeball.c index 69bab3e90..ba44a2771 100644 --- a/src/pokeball.c +++ b/src/pokeball.c @@ -775,7 +775,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) species = GetMonData(mon, MON_DATA_SPECIES); if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) - && IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1) + && IsDoubleBattle() && gBattleSpritesDataPtr->animationData->healthboxSlideInStarted) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) { @@ -788,7 +788,7 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite) } } - if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->field_9_x1) + if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->healthboxSlideInStarted) wantedCryCase = 0; else if (battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)) wantedCryCase = 1; @@ -949,7 +949,7 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite) sprite->sBattler = sprite->oam.affineParam & 0xFF; sprite->data[0] = 0; - if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1 + if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->healthboxSlideInStarted && sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT)) sprite->callback = SpriteCB_ReleaseMon2FromBall; else @@ -975,7 +975,7 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite) if (sprite->data[0] > 15) { sprite->data[0] = 0; - if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1 + if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->healthboxSlideInStarted && sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT)) sprite->callback = SpriteCB_ReleaseMon2FromBall; else @@ -1167,7 +1167,7 @@ void DestroySpriteAndFreeResources2(struct Sprite *sprite) DestroySpriteAndFreeResources(sprite); } -void sub_804BD94(u8 battlerId) +void StartHealthboxSlideIn(u8 battlerId) { struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battlerId]]; diff --git a/src/pokemon.c b/src/pokemon.c index b523c4cb9..f8c03ea02 100644 --- a/src/pokemon.c +++ b/src/pokemon.c @@ -30,6 +30,7 @@ #include "constants/abilities.h" #include "constants/moves.h" #include "constants/songs.h" +#include "constants/item_effects.h" #include "constants/trainer_classes.h" #include "constants/facility_trainer_classes.h" #include "constants/hold_effects.h" @@ -72,7 +73,7 @@ static u16 GetDeoxysStat(struct Pokemon *mon, s32 statId); static bool8 IsShinyOtIdPersonality(u32 otId, u32 personality); static u16 ModifyStatByNature(u8 nature, u16 n, u8 statIndex); static u8 GetNatureFromPersonality(u32 personality); -static bool8 sub_8042BE8(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId); +static bool8 PartyMonHasStatus(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId); static bool8 HealStatusConditions(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId); static bool8 IsPokemonStorageFull(void); static u8 SendMonToPC(struct Pokemon* mon); @@ -1472,101 +1473,101 @@ static const u8 sHoldEffectToType[][2] = {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL}, }; -const struct SpriteTemplate gUnknown_825DEF0[] = +const struct SpriteTemplate gSpriteTemplates_Battlers[] = { - { + [B_POSITION_PLAYER_LEFT] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gOamData_824F018, + .oam = &gOamData_BattlerPlayer, .anims = NULL, - .images = gUnknown_8234698, - .affineAnims = gSpriteAffineAnimTable_82348C8, - .callback = sub_80120C4, + .images = gSpriteImages_BattlerPlayerLeft, + .affineAnims = gSpriteAffineAnimTable_BattlerPlayer, + .callback = SpriteCB_AllyMon, }, - { + [B_POSITION_OPPONENT_LEFT] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gOamData_824F010, + .oam = &gOamData_BattlerOpponent, .anims = NULL, - .images = gUnknown_82346B8, - .affineAnims = gSpriteAffineAnimTable_8234944, - .callback = SpriteCB_WildMon, + .images = gSpriteImages_BattlerOpponentLeft, + .affineAnims = gSpriteAffineAnimTable_BattlerOpponent, + .callback = SpriteCB_EnemyMon, }, - { + [B_POSITION_PLAYER_RIGHT] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gOamData_824F018, + .oam = &gOamData_BattlerPlayer, .anims = NULL, - .images = gUnknown_82346D8, - .affineAnims = gSpriteAffineAnimTable_82348C8, - .callback = sub_80120C4, + .images = gSpriteImages_BattlerPlayerRight, + .affineAnims = gSpriteAffineAnimTable_BattlerPlayer, + .callback = SpriteCB_AllyMon, }, - { + [B_POSITION_OPPONENT_RIGHT] = { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gOamData_824F010, + .oam = &gOamData_BattlerOpponent, .anims = NULL, - .images = gUnknown_82346F8, - .affineAnims = gSpriteAffineAnimTable_8234944, - .callback = SpriteCB_WildMon, + .images = gSpriteImages_BattlerOpponentRight, + .affineAnims = gSpriteAffineAnimTable_BattlerOpponent, + .callback = SpriteCB_EnemyMon, }, }; -const struct SpriteTemplate gUnknown_825DF50[] = +const struct SpriteTemplate gSpriteTemplates_TrainerBackpics[] = { { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gOamData_824F018, + .oam = &gOamData_BattlerPlayer, .anims = NULL, .images = gTrainerBackPicTable_Red, - .affineAnims = gSpriteAffineAnimTable_82348C8, - .callback = sub_80120C4, + .affineAnims = gSpriteAffineAnimTable_BattlerPlayer, + .callback = SpriteCB_AllyMon, }, { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gOamData_824F018, + .oam = &gOamData_BattlerPlayer, .anims = NULL, .images = gTrainerBackPicTable_Leaf, - .affineAnims = gSpriteAffineAnimTable_82348C8, - .callback = sub_80120C4, + .affineAnims = gSpriteAffineAnimTable_BattlerPlayer, + .callback = SpriteCB_AllyMon, }, { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gOamData_824F018, + .oam = &gOamData_BattlerPlayer, .anims = NULL, .images = gTrainerBackPicTable_RSBrendan, - .affineAnims = gSpriteAffineAnimTable_82348C8, - .callback = sub_80120C4, + .affineAnims = gSpriteAffineAnimTable_BattlerPlayer, + .callback = SpriteCB_AllyMon, }, { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gOamData_824F018, + .oam = &gOamData_BattlerPlayer, .anims = NULL, .images = gTrainerBackPicTable_RSMay, - .affineAnims = gSpriteAffineAnimTable_82348C8, - .callback = sub_80120C4, + .affineAnims = gSpriteAffineAnimTable_BattlerPlayer, + .callback = SpriteCB_AllyMon, }, { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gOamData_824F018, + .oam = &gOamData_BattlerPlayer, .anims = NULL, .images = gTrainerBackPicTable_Pokedude, - .affineAnims = gSpriteAffineAnimTable_82348C8, - .callback = sub_80120C4, + .affineAnims = gSpriteAffineAnimTable_BattlerPlayer, + .callback = SpriteCB_AllyMon, }, { .tileTag = SPRITE_INVALID_TAG, .paletteTag = 0, - .oam = &gOamData_824F018, + .oam = &gOamData_BattlerPlayer, .anims = NULL, .images = gTrainerBackPicTable_OldMan, - .affineAnims = gSpriteAffineAnimTable_82348C8, - .callback = sub_80120C4, + .affineAnims = gSpriteAffineAnimTable_BattlerPlayer, + .callback = SpriteCB_AllyMon, }, }; @@ -1586,7 +1587,7 @@ static const u8 sGetMonDataEVConstants[] = MON_DATA_SPATK_EV }; -static const u8 gUnknown_825DFF0[] = +static const u8 sStatsToRaise[] = { STAT_ATK, STAT_ATK, STAT_SPEED, STAT_DEF, STAT_SPATK, STAT_ACC }; @@ -1986,7 +1987,7 @@ static void CreateEventLegalMon(struct Pokemon *mon, u16 species, u8 level, u8 f SetMonData(mon, MON_DATA_EVENT_LEGAL, &isEventLegal); } -void sub_803E23C(struct Pokemon *mon, struct BattleTowerPokemon *dest) +void ConvertPokemonToBattleTowerPokemon(struct Pokemon *mon, struct BattleTowerPokemon *dest) { s32 i; u16 heldItem; @@ -2716,7 +2717,7 @@ void SetMultiuseSpriteTemplateToPokemon(u16 speciesTag, u8 battlerPosition) if (battlerPosition >= 4) battlerPosition = 0; - gMultiuseSpriteTemplate = gUnknown_825DEF0[battlerPosition]; + gMultiuseSpriteTemplate = gSpriteTemplates_Battlers[battlerPosition]; } } gMultiuseSpriteTemplate.paletteTag = speciesTag; @@ -2728,7 +2729,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit gMultiuseSpriteTemplate.paletteTag = trainerSpriteId; if (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_PLAYER_RIGHT) { - gMultiuseSpriteTemplate = gUnknown_825DF50[trainerSpriteId]; + gMultiuseSpriteTemplate = gSpriteTemplates_TrainerBackpics[trainerSpriteId]; gMultiuseSpriteTemplate.anims = gTrainerBackAnimsPtrTable[trainerSpriteId]; } else @@ -2736,7 +2737,7 @@ void SetMultiuseSpriteTemplateToTrainerBack(u16 trainerSpriteId, u8 battlerPosit if (gMonSpritesGfxPtr != NULL) gMultiuseSpriteTemplate = gMonSpritesGfxPtr->templates[battlerPosition]; else - gMultiuseSpriteTemplate = gUnknown_825DEF0[battlerPosition]; + gMultiuseSpriteTemplate = gSpriteTemplates_Battlers[battlerPosition]; gMultiuseSpriteTemplate.anims = gTrainerFrontAnimsPtrTable[trainerSpriteId]; } } @@ -3895,7 +3896,7 @@ static void CopyPlayerPartyMonToBattleData(u8 battlerId, u8 partyIndex) gBattleMons[battlerId].statStages[i] = 6; gBattleMons[battlerId].status2 = 0; - sub_80174B8(battlerId); + UpdateSentPokesToOpponentValue(battlerId); ClearTemporarySpeciesSpriteData(battlerId, FALSE); } @@ -3911,14 +3912,14 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov s32 cmdIndex; bool8 retVal = TRUE; const u8 *itemEffect; - u8 sp24 = 6; - u32 sp28; - s8 sp2C = 0; + u8 idx = 6; + u32 i; + s8 friendshipDelta = 0; u8 holdEffect; - u8 sp34 = 4; + u8 battleMonId = 4; u16 heldItem; - u8 r10; - u32 r4; + u8 val; + u32 evDelta; heldItem = GetMonData(mon, MON_DATA_HELD_ITEM, NULL); if (heldItem == ITEM_ENIGMA_BERRY) @@ -3942,7 +3943,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { if (gBattlerPartyIndexes[cmdIndex] == partyIndex) { - sp34 = cmdIndex; + battleMonId = cmdIndex; break; } cmdIndex += 2; @@ -3951,12 +3952,12 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov else { gActiveBattler = 0; - sp34 = 4; + battleMonId = 4; } if (!IS_POKEMON_ITEM(item)) return TRUE; - if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY) + if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY) return TRUE; if (item == ITEM_ENIGMA_BERRY) @@ -3968,7 +3969,7 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } else { - itemEffect = gItemEffectTable[item - 13]; + itemEffect = gItemEffectTable[item - ITEM_POTION]; } for (cmdIndex = 0; cmdIndex < 6; cmdIndex++) @@ -3977,22 +3978,22 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { // status healing effects case 0: - if ((itemEffect[cmdIndex] & 0x80) - && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_INFATUATION)) + if ((itemEffect[cmdIndex] & ITEM0_INFATUATION) + && gMain.inBattle && battleMonId != 4 && (gBattleMons[battleMonId].status2 & STATUS2_INFATUATION)) { - gBattleMons[sp34].status2 &= ~STATUS2_INFATUATION; + gBattleMons[battleMonId].status2 &= ~STATUS2_INFATUATION; retVal = FALSE; } - if ((itemEffect[cmdIndex] & 0x30) + if ((itemEffect[cmdIndex] & ITEM0_HIGH_CRIT) && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) { gBattleMons[gActiveBattler].status2 |= STATUS2_FOCUS_ENERGY; retVal = FALSE; } - if ((itemEffect[cmdIndex] & 0xF) + if ((itemEffect[cmdIndex] & ITEM0_X_ATTACK) && gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12) { - gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[cmdIndex] & 0xF; + gBattleMons[gActiveBattler].statStages[STAT_ATK] += itemEffect[cmdIndex] & ITEM0_X_ATTACK; if (gBattleMons[gActiveBattler].statStages[STAT_ATK] > 12) gBattleMons[gActiveBattler].statStages[STAT_ATK] = 12; retVal = FALSE; @@ -4000,18 +4001,18 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; // in-battle stat boosting effects? case 1: - if ((itemEffect[cmdIndex] & 0xF0) + if ((itemEffect[cmdIndex] & ITEM1_X_DEFEND) && gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12) { - gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[cmdIndex] & 0xF0) >> 4; + gBattleMons[gActiveBattler].statStages[STAT_DEF] += (itemEffect[cmdIndex] & ITEM1_X_DEFEND) >> 4; if (gBattleMons[gActiveBattler].statStages[STAT_DEF] > 12) gBattleMons[gActiveBattler].statStages[STAT_DEF] = 12; retVal = FALSE; } - if ((itemEffect[cmdIndex] & 0xF) + if ((itemEffect[cmdIndex] & ITEM1_X_SPEED) && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12) { - gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[cmdIndex] & 0xF; + gBattleMons[gActiveBattler].statStages[STAT_SPEED] += itemEffect[cmdIndex] & ITEM1_X_SPEED; if (gBattleMons[gActiveBattler].statStages[STAT_SPEED] > 12) gBattleMons[gActiveBattler].statStages[STAT_SPEED] = 12; retVal = FALSE; @@ -4019,31 +4020,31 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; // more stat boosting effects? case 2: - if ((itemEffect[cmdIndex] & 0xF0) + if ((itemEffect[cmdIndex] & ITEM2_X_ACCURACY) && gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12) { - gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[cmdIndex] & 0xF0) >> 4; + gBattleMons[gActiveBattler].statStages[STAT_ACC] += (itemEffect[cmdIndex] & ITEM2_X_ACCURACY) >> 4; if (gBattleMons[gActiveBattler].statStages[STAT_ACC] > 12) gBattleMons[gActiveBattler].statStages[STAT_ACC] = 12; retVal = FALSE; } - if ((itemEffect[cmdIndex] & 0xF) + if ((itemEffect[cmdIndex] & ITEM2_X_SPATK) && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12) { - gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[cmdIndex] & 0xF; + gBattleMons[gActiveBattler].statStages[STAT_SPATK] += itemEffect[cmdIndex] & ITEM2_X_SPATK; if (gBattleMons[gActiveBattler].statStages[STAT_SPATK] > 12) gBattleMons[gActiveBattler].statStages[STAT_SPATK] = 12; retVal = FALSE; } break; case 3: - if ((itemEffect[cmdIndex] & 0x80) + if ((itemEffect[cmdIndex] & ITEM3_MIST) && gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0) { gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer = 5; retVal = FALSE; } - if ((itemEffect[cmdIndex] & 0x40) // raise level + if ((itemEffect[cmdIndex] & ITEM3_LEVEL_UP) // raise level && GetMonData(mon, MON_DATA_LEVEL, NULL) != 100) { data = gExperienceTables[gBaseStats[GetMonData(mon, MON_DATA_SPECIES, NULL)].growthRate][GetMonData(mon, MON_DATA_LEVEL, NULL) + 1]; @@ -4051,93 +4052,93 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov CalculateMonStats(mon); retVal = FALSE; } - if ((itemEffect[cmdIndex] & 0x20) - && HealStatusConditions(mon, partyIndex, 7, sp34) == 0) + if ((itemEffect[cmdIndex] & ITEM3_SLEEP) + && HealStatusConditions(mon, partyIndex, STATUS1_SLEEP, battleMonId) == 0) { - if (sp34 != 4) - gBattleMons[sp34].status2 &= ~STATUS2_NIGHTMARE; + if (battleMonId != 4) + gBattleMons[battleMonId].status2 &= ~STATUS2_NIGHTMARE; retVal = FALSE; } - if ((itemEffect[cmdIndex] & 0x10) && HealStatusConditions(mon, partyIndex, 0xF88, sp34) == 0) + if ((itemEffect[cmdIndex] & ITEM3_POISON) && HealStatusConditions(mon, partyIndex, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battleMonId) == 0) retVal = FALSE; - if ((itemEffect[cmdIndex] & 8) && HealStatusConditions(mon, partyIndex, 16, sp34) == 0) + if ((itemEffect[cmdIndex] & ITEM3_BURN) && HealStatusConditions(mon, partyIndex, STATUS1_BURN, battleMonId) == 0) retVal = FALSE; - if ((itemEffect[cmdIndex] & 4) && HealStatusConditions(mon, partyIndex, 32, sp34) == 0) + if ((itemEffect[cmdIndex] & ITEM3_FREEZE) && HealStatusConditions(mon, partyIndex, STATUS1_FREEZE, battleMonId) == 0) retVal = FALSE; - if ((itemEffect[cmdIndex] & 2) && HealStatusConditions(mon, partyIndex, 64, sp34) == 0) + if ((itemEffect[cmdIndex] & ITEM3_PARALYSIS) && HealStatusConditions(mon, partyIndex, STATUS1_PARALYSIS, battleMonId) == 0) retVal = FALSE; - if ((itemEffect[cmdIndex] & 1) // heal confusion - && gMain.inBattle && sp34 != 4 && (gBattleMons[sp34].status2 & STATUS2_CONFUSION)) + if ((itemEffect[cmdIndex] & ITEM3_CONFUSION) // heal confusion + && gMain.inBattle && battleMonId != 4 && (gBattleMons[battleMonId].status2 & STATUS2_CONFUSION)) { - gBattleMons[sp34].status2 &= ~STATUS2_CONFUSION; + gBattleMons[battleMonId].status2 &= ~STATUS2_CONFUSION; retVal = FALSE; } break; // EV, HP, and PP raising effects case 4: - r10 = itemEffect[cmdIndex]; - if (r10 & 0x20) + val = itemEffect[cmdIndex]; + if (val & ITEM4_PP_UP) { - r10 &= ~0x20; + val &= ~ITEM4_PP_UP; data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2); - sp28 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); - if (data < 3 && sp28 > 4) + i = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); + if (data < 3 && i > 4) { data = GetMonData(mon, MON_DATA_PP_BONUSES, NULL) + gPPUpAddMask[moveIndex]; SetMonData(mon, MON_DATA_PP_BONUSES, &data); - data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - sp28; + data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - i; data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL) + data; SetMonData(mon, MON_DATA_PP1 + moveIndex, &data); retVal = FALSE; } } - sp28 = 0; - while (r10 != 0) + i = 0; + while (val != 0) { - if (r10 & 1) + if (val & 1) { u16 evCount; s32 r5; - switch (sp28) + switch (i) { - case 0: - case 1: + case 0: // EV_HP + case 1: // EV_ATK evCount = GetMonEVCount(mon); if (evCount >= 510) return TRUE; - data = GetMonData(mon, sGetMonDataEVConstants[sp28], NULL); + data = GetMonData(mon, sGetMonDataEVConstants[i], NULL); if (data < 100) { - if (data + itemEffect[sp24] > 100) - r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24]; + if (data + itemEffect[idx] > 100) + evDelta = 100 - (data + itemEffect[idx]) + itemEffect[idx]; else - r4 = itemEffect[sp24]; - if (evCount + r4 > 510) - r4 += 510 - (evCount + r4); - data += r4; - SetMonData(mon, sGetMonDataEVConstants[sp28], &data); + evDelta = itemEffect[idx]; + if (evCount + evDelta > 510) + evDelta += 510 - (evCount + evDelta); + data += evDelta; + SetMonData(mon, sGetMonDataEVConstants[i], &data); CalculateMonStats(mon); - sp24++; + idx++; retVal = FALSE; } break; - case 2: + case 2: // HEAL_HP // revive? - if (r10 & 0x10) + if (val & (ITEM4_REVIVE >> 2)) { if (GetMonData(mon, MON_DATA_HP, NULL) != 0) { - sp24++; + idx++; break; } if (gMain.inBattle) { - if (sp34 != 4) + if (battleMonId != 4) { - gAbsentBattlerFlags &= ~gBitTable[sp34]; - CopyPlayerPartyMonToBattleData(sp34, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[sp34])); + gAbsentBattlerFlags &= ~gBitTable[battleMonId]; + CopyPlayerPartyMonToBattleData(battleMonId, GetPartyIdFromBattlePartyId(gBattlerPartyIndexes[battleMonId])); if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER && gBattleResults.numRevivesUsed < 255) gBattleResults.numRevivesUsed++; } @@ -4153,11 +4154,11 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov { if (GetMonData(mon, MON_DATA_HP, NULL) == 0) { - sp24++; + idx++; break; } } - data = itemEffect[sp24++]; + data = itemEffect[idx++]; switch (data) { case 0xFF: @@ -4180,16 +4181,16 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov if (data > GetMonData(mon, MON_DATA_MAX_HP, NULL)) data = GetMonData(mon, MON_DATA_MAX_HP, NULL); SetMonData(mon, MON_DATA_HP, &data); - if (gMain.inBattle && sp34 != 4) + if (gMain.inBattle && battleMonId != 4) { - gBattleMons[sp34].hp = data; - if (!(r10 & 0x10) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) + gBattleMons[battleMonId].hp = data; + if (!(val & (ITEM4_REVIVE >> 2)) && GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER) { if (gBattleResults.numHealingItemsUsed < 255) gBattleResults.numHealingItemsUsed++; // I have to re-use this variable to match. r5 = gActiveBattler; - gActiveBattler = sp34; + gActiveBattler = battleMonId; BtlController_EmitGetMonData(0, 0, 0); MarkBattlerForControllerExec(gActiveBattler); gActiveBattler = r5; @@ -4202,63 +4203,63 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov } retVal = FALSE; } - r10 &= 0xEF; + val &= ~(ITEM4_REVIVE >> 2); break; - case 3: - if (!(r10 & 2)) + case 3: // HEAL_PP_ALL + if (!(val & (ITEM4_HEAL_PP_ONE >> 3))) { for (r5 = 0; r5 < 4; r5++) { - u16 r4; + u16 move_id; data = GetMonData(mon, MON_DATA_PP1 + r5, NULL); - r4 = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL); - if (data != CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5)) + move_id = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL); + if (data != CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5)) { - data += itemEffect[sp24]; - r4 = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL); - if (data > CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5)) + data += itemEffect[idx]; + move_id = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL); + if (data > CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5)) { - r4 = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL); - data = CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5); + move_id = GetMonData(mon, MON_DATA_MOVE1 + r5, NULL); + data = CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), r5); } SetMonData(mon, MON_DATA_PP1 + r5, &data); if (gMain.inBattle - && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000) - && !(gDisableStructs[sp34].mimickedMoves & gBitTable[r5])) - gBattleMons[sp34].pp[r5] = data; + && battleMonId != 4 && !(gBattleMons[battleMonId].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[battleMonId].mimickedMoves & gBitTable[r5])) + gBattleMons[battleMonId].pp[r5] = data; retVal = FALSE; } } - sp24++; + idx++; } else { - u16 r4; + u16 move_id; data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL); - r4 = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); - if (data != CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex)) + move_id = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); + if (data != CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex)) { - data += itemEffect[sp24++]; - r4 = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); - if (data > CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex)) + data += itemEffect[idx++]; + move_id = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); + if (data > CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex)) { - r4 = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); - data = CalculatePPWithBonus(r4, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); + move_id = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); + data = CalculatePPWithBonus(move_id, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); } SetMonData(mon, MON_DATA_PP1 + moveIndex, &data); if (gMain.inBattle - && sp34 != 4 && !(gBattleMons[sp34].status2 & 0x200000) - && !(gDisableStructs[sp34].mimickedMoves & gBitTable[moveIndex])) - gBattleMons[sp34].pp[moveIndex] = data; + && battleMonId != 4 && !(gBattleMons[battleMonId].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[battleMonId].mimickedMoves & gBitTable[moveIndex])) + gBattleMons[battleMonId].pp[moveIndex] = data; retVal = FALSE; } } break; - case 7: + case 7: // EVO_STONE { - u16 targetSpecies = GetEvolutionTargetSpecies(mon, 2, item); + u16 targetSpecies = GetEvolutionTargetSpecies(mon, EVO_MODE_ITEM_USE, item); if (targetSpecies != SPECIES_NONE) { @@ -4269,70 +4270,70 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov break; } } - sp28++; - r10 >>= 1; + i++; + val >>= 1; } break; case 5: - r10 = itemEffect[cmdIndex]; - sp28 = 0; - while (r10 != 0) + val = itemEffect[cmdIndex]; + i = 0; + while (val != 0) { - if (r10 & 1) + if (val & 1) { u16 evCount; - switch (sp28) + switch (i) { - case 0: - case 1: - case 2: - case 3: + case 0: // EV_DEF + case 1: // EV_SPEED + case 2: // EV_SPDEF + case 3: // EV_SPATK evCount = GetMonEVCount(mon); if (evCount >= 510) return TRUE; - data = GetMonData(mon, sGetMonDataEVConstants[sp28 + 2], NULL); + data = GetMonData(mon, sGetMonDataEVConstants[i + 2], NULL); if (data < 100) { - if (data + itemEffect[sp24] > 100) - r4 = 100 - (data + itemEffect[sp24]) + itemEffect[sp24]; + if (data + itemEffect[idx] > 100) + evDelta = 100 - (data + itemEffect[idx]) + itemEffect[idx]; else - r4 = itemEffect[sp24]; - if (evCount + r4 > 510) - r4 += 510 - (evCount + r4); - data += r4; - SetMonData(mon, sGetMonDataEVConstants[sp28 + 2], &data); + evDelta = itemEffect[idx]; + if (evCount + evDelta > 510) + evDelta += 510 - (evCount + evDelta); + data += evDelta; + SetMonData(mon, sGetMonDataEVConstants[i + 2], &data); CalculateMonStats(mon); retVal = FALSE; - sp24++; + idx++; } break; - case 4: + case 4: // PP_MAX data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2); if (data < 3) { - r4 = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); + evDelta = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); data = GetMonData(mon, MON_DATA_PP_BONUSES, NULL); data &= gPPUpSetMask[moveIndex]; data += gPPUpAddMask[moveIndex] * 3; SetMonData(mon, MON_DATA_PP_BONUSES, &data); - data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - r4; + data = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), data, moveIndex) - evDelta; data = GetMonData(mon, MON_DATA_PP1 + moveIndex, NULL) + data; SetMonData(mon, MON_DATA_PP1 + moveIndex, &data); retVal = FALSE; } break; - case 5: - if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && sp2C == 0) + case 5: // FRIENDSHIP_LOW + if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == 0 && friendshipDelta == 0) { - sp2C = itemEffect[sp24]; + friendshipDelta = itemEffect[idx]; friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); - if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) - friendship += 150 * sp2C / 100; + if (friendshipDelta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + friendship += 150 * friendshipDelta / 100; else - friendship += sp2C; - if (sp2C > 0) + friendship += friendshipDelta; + if (friendshipDelta > 0) { if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11) friendship++; @@ -4345,19 +4346,19 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov friendship = 255; SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); } - sp24++; + idx++; break; - case 6: + case 6: // FRIENDSHIP_MID if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200 - && retVal == 0 && sp2C == 0) + && retVal == 0 && friendshipDelta == 0) { - sp2C = itemEffect[sp24]; + friendshipDelta = itemEffect[idx]; friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); - if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) - friendship += 150 * sp2C / 100; + if (friendshipDelta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + friendship += 150 * friendshipDelta / 100; else - friendship += sp2C; - if (sp2C > 0) + friendship += friendshipDelta; + if (friendshipDelta > 0) { if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11) friendship++; @@ -4370,18 +4371,18 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov friendship = 255; SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); } - sp24++; + idx++; break; - case 7: - if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && sp2C == 0) + case 7: // FRIENDSHIP_HIGH + if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == 0 && friendshipDelta == 0) { - sp2C = itemEffect[sp24]; + friendshipDelta = itemEffect[idx]; friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, NULL); - if (sp2C > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) - friendship += 150 * sp2C / 100; + if (friendshipDelta > 0 && holdEffect == HOLD_EFFECT_HAPPINESS_UP) + friendship += 150 * friendshipDelta / 100; else - friendship += sp2C; - if (sp2C > 0) + friendship += friendshipDelta; + if (friendshipDelta > 0) { if (GetMonData(mon, MON_DATA_POKEBALL, NULL) == 11) friendship++; @@ -4394,12 +4395,12 @@ bool8 PokemonUseItemEffects(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mov friendship = 255; SetMonData(mon, MON_DATA_FRIENDSHIP, &friendship); } - sp24++; + idx++; break; } } - sp28++; - r10 >>= 1; + i++; + val >>= 1; } break; } @@ -4432,7 +4433,7 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo s32 cmdIndex; bool8 retVal = TRUE; const u8 *itemEffect; - u8 r10 = 6; + u8 idx = 6; u32 i; s32 sp18 = 0; u8 holdEffect; @@ -4476,7 +4477,7 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo } if (!IS_POKEMON_ITEM(item)) return TRUE; - if (gItemEffectTable[item - 13] == NULL && item != ITEM_ENIGMA_BERRY) + if (gItemEffectTable[item - ITEM_POTION] == NULL && item != ITEM_ENIGMA_BERRY) return TRUE; if (item == ITEM_ENIGMA_BERRY) { @@ -4495,64 +4496,64 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo { // status healing effects case 0: - if (itemEffect[cmdIndex] & 0x80 + if (itemEffect[cmdIndex] & ITEM0_INFATUATION && gMain.inBattle && battlerId != 4 && gBattleMons[battlerId].status2 & STATUS2_INFATUATION) retVal = FALSE; - if (itemEffect[cmdIndex] & 0x30 + if (itemEffect[cmdIndex] & ITEM0_HIGH_CRIT && !(gBattleMons[gActiveBattler].status2 & STATUS2_FOCUS_ENERGY)) retVal = FALSE; - if ((itemEffect[cmdIndex] & 0xF) + if ((itemEffect[cmdIndex] & ITEM0_X_ATTACK) && gBattleMons[gActiveBattler].statStages[STAT_ATK] < 12) retVal = FALSE; break; // in-battle stat boosting effects? case 1: - if ((itemEffect[cmdIndex] & 0xF0) + if ((itemEffect[cmdIndex] & ITEM1_X_DEFEND) && gBattleMons[gActiveBattler].statStages[STAT_DEF] < 12) retVal = FALSE; - if ((itemEffect[cmdIndex] & 0xF) + if ((itemEffect[cmdIndex] & ITEM1_X_SPEED) && gBattleMons[gActiveBattler].statStages[STAT_SPEED] < 12) retVal = FALSE; break; // more stat boosting effects? case 2: - if ((itemEffect[cmdIndex] & 0xF0) + if ((itemEffect[cmdIndex] & ITEM2_X_ACCURACY) && gBattleMons[gActiveBattler].statStages[STAT_ACC] < 12) retVal = FALSE; - if ((itemEffect[cmdIndex] & 0xF) + if ((itemEffect[cmdIndex] & ITEM2_X_SPATK) && gBattleMons[gActiveBattler].statStages[STAT_SPATK] < 12) retVal = FALSE; break; case 3: - if ((itemEffect[cmdIndex] & 0x80) + if ((itemEffect[cmdIndex] & ITEM3_MIST) && gSideTimers[GetBattlerSide(gActiveBattler)].mistTimer == 0) retVal = FALSE; - if ((itemEffect[cmdIndex] & 0x40) // raise level + if ((itemEffect[cmdIndex] & ITEM3_LEVEL_UP) // raise level && GetMonData(mon, MON_DATA_LEVEL, NULL) != 100) retVal = FALSE; - if ((itemEffect[cmdIndex] & 0x20) - && sub_8042BE8(mon, partyIndex, 7, battlerId)) + if ((itemEffect[cmdIndex] & ITEM3_SLEEP) + && PartyMonHasStatus(mon, partyIndex, STATUS1_SLEEP, battlerId)) retVal = FALSE; - if ((itemEffect[cmdIndex] & 0x10) && sub_8042BE8(mon, partyIndex, 0xF88, battlerId)) + if ((itemEffect[cmdIndex] & ITEM3_POISON) && PartyMonHasStatus(mon, partyIndex, STATUS1_PSN_ANY | STATUS1_TOXIC_COUNTER, battlerId)) retVal = FALSE; - if ((itemEffect[cmdIndex] & 8) && sub_8042BE8(mon, partyIndex, 16, battlerId)) + if ((itemEffect[cmdIndex] & ITEM3_BURN) && PartyMonHasStatus(mon, partyIndex, STATUS1_BURN, battlerId)) retVal = FALSE; - if ((itemEffect[cmdIndex] & 4) && sub_8042BE8(mon, partyIndex, 32, battlerId)) + if ((itemEffect[cmdIndex] & ITEM3_FREEZE) && PartyMonHasStatus(mon, partyIndex, STATUS1_FREEZE, battlerId)) retVal = FALSE; - if ((itemEffect[cmdIndex] & 2) && sub_8042BE8(mon, partyIndex, 64, battlerId)) + if ((itemEffect[cmdIndex] & ITEM3_PARALYSIS) && PartyMonHasStatus(mon, partyIndex, STATUS1_PARALYSIS, battlerId)) retVal = FALSE; - if (itemEffect[cmdIndex] & 1 // heal confusion + if (itemEffect[cmdIndex] & ITEM3_CONFUSION // heal confusion && gMain.inBattle && battlerId != 4 && (gBattleMons[battlerId].status2 & STATUS2_CONFUSION)) retVal = FALSE; break; // EV, HP, and PP raising effects case 4: curEffect = itemEffect[cmdIndex]; - if (curEffect & 0x20) + if (curEffect & ITEM4_PP_UP) { - curEffect &= ~0x20; + curEffect &= ~ITEM4_PP_UP; data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2); i = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); if (data < 3 && i > 4) @@ -4565,24 +4566,24 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo { switch (i) { - case 0: - case 1: + case 0: // EV_HP + case 1: // EV_ATK if (GetMonEVCount(mon) >= 510) return TRUE; data = GetMonData(mon, sGetMonDataEVConstants[i], NULL); if (data < 100) { - r10++; + idx++; retVal = FALSE; } break; - case 2: + case 2: // HEAL_HP // revive? - if (curEffect & 0x10) + if (curEffect & (ITEM4_REVIVE >> 2)) { if (GetMonData(mon, MON_DATA_HP, NULL) != 0) { - r10++; + idx++; break; } } @@ -4590,17 +4591,17 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo { if (GetMonData(mon, MON_DATA_HP, NULL) == 0) { - r10++; + idx++; break; } } if (GetMonData(mon, MON_DATA_MAX_HP, NULL) != GetMonData(mon, MON_DATA_HP, NULL)) retVal = FALSE; - r10++; - curEffect &= 0xEF; + idx++; + curEffect &= ~(ITEM4_REVIVE >> 2); break; case 3: - if (!(curEffect & 2)) + if (!(curEffect & (ITEM4_HEAL_PP_ONE >> 3))) { for (tmp = 0; tmp < MAX_MON_MOVES; tmp++) { @@ -4608,7 +4609,7 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo if (data != CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + tmp, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), tmp)) retVal = FALSE; } - r10++; + idx++; } else // _080429FA { @@ -4616,13 +4617,13 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo curMoveId = GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL); if (data != CalculatePPWithBonus(curMoveId, GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex)) { - r10++; + idx++; retVal = FALSE; } } break; case 7: - if (GetEvolutionTargetSpecies(mon, 2, item) != SPECIES_NONE) + if (GetEvolutionTargetSpecies(mon, EVO_MODE_ITEM_USE, item) != SPECIES_NONE) return FALSE; break; } @@ -4640,46 +4641,46 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo { switch (i) { - case 0: - case 1: - case 2: - case 3: + case 0: // EV_DEF + case 1: // EV_SPEED + case 2: // EV_SPDEF + case 3: // EV_SPATK if (GetMonEVCount(mon) >= 510) return TRUE; data = GetMonData(mon, sGetMonDataEVConstants[i + 2], NULL); if (data < 100) { retVal = FALSE; - r10++; + idx++; } break; - case 4: + case 4: // PP_MAX data = (GetMonData(mon, MON_DATA_PP_BONUSES, NULL) & gPPUpGetMask[moveIndex]) >> (moveIndex * 2); tmp = CalculatePPWithBonus(GetMonData(mon, MON_DATA_MOVE1 + moveIndex, NULL), GetMonData(mon, MON_DATA_PP_BONUSES, NULL), moveIndex); if (data < 3 && tmp > 4) retVal = FALSE; break; - case 5: + case 5: // FRIENDSHIP_LOW if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 100 && retVal == FALSE && sp18 == 0) - sp18 = itemEffect[r10]; - r10++; + sp18 = itemEffect[idx]; + idx++; break; - case 6: + case 6: // FRIENDSHIP_MID if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 100 && GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) < 200 && retVal == FALSE && sp18 == 0) - sp18 = itemEffect[r10]; - r10++; + sp18 = itemEffect[idx]; + idx++; break; - case 7: + case 7: // FRIENDSHIP_HIGH if (GetMonData(mon, MON_DATA_FRIENDSHIP, NULL) >= 200 && retVal == FALSE && sp18 == 0) - sp18 = itemEffect[r10]; - r10++; + sp18 = itemEffect[idx]; + idx++; break; } } @@ -4692,7 +4693,7 @@ bool8 PokemonItemUseNoEffect(struct Pokemon *mon, u16 item, u8 partyIndex, u8 mo return retVal; } -static bool8 sub_8042BE8(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId) +static bool8 PartyMonHasStatus(struct Pokemon *mon, u32 unused, u32 healMask, u8 battleId) { if ((GetMonData(mon, MON_DATA_STATUS, NULL) & healMask) != 0) return TRUE; @@ -4813,10 +4814,10 @@ u8 GetItemEffectParamOffset(u16 itemId, u8 effectByte, u8 effectBit) return offset; } -static void sub_8042D50(int stat) +static void BufferStatRoseMessage(int stat) { gBattlerTarget = gBattlerInMenuId; - StringCopy(gBattleTextBuff1, gStatNamesTable[gUnknown_825DFF0[stat]]); + StringCopy(gBattleTextBuff1, gStatNamesTable[sStatsToRaise[stat]]); StringCopy(gBattleTextBuff2, gBattleText_Rose); BattleStringExpandPlaceholdersToDisplayedString(gText_PkmnsStatChanged2); } @@ -4847,12 +4848,12 @@ const u8 *Battle_PrintStatBoosterEffectMessage(u16 itemId) for (i = 0; i < 3; i++) { if (itemEffect[i] & 0xF) - sub_8042D50(i * 2); + BufferStatRoseMessage(i * 2); if (itemEffect[i] & 0xF0) { if (i) { - sub_8042D50(i * 2 + 1); + BufferStatRoseMessage(i * 2 + 1); } else { @@ -4899,12 +4900,12 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) else holdEffect = ItemId_GetHoldEffect(heldItem); - if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != 3) + if (holdEffect == HOLD_EFFECT_PREVENT_EVOLVE && type != EVO_MODE_ITEM_CHECK) return 0; switch (type) { - case 0: + case EVO_MODE_NORMAL: level = GetMonData(mon, MON_DATA_LEVEL, 0); friendship = GetMonData(mon, MON_DATA_FRIENDSHIP, 0); @@ -4969,7 +4970,7 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) } } break; - case 1: + case EVO_MODE_TRADE: for (i = 0; i < 5; i++) { switch (gEvolutionTable[species][i].method) @@ -4992,8 +4993,8 @@ u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem) } } break; - case 2: - case 3: + case EVO_MODE_ITEM_USE: + case EVO_MODE_ITEM_CHECK: for (i = 0; i < 5; i++) { if (gEvolutionTable[species][i].method == EVO_ITEM @@ -5098,96 +5099,63 @@ u16 SpeciesToCryId(u16 species) return sHoennSpeciesIdToCryId[species - ((SPECIES_OLD_UNOWN_Z + 1) - 1)]; } -static void sub_8043338(u16 species, u32 personality, u8 *dest) +#define DRAW_SPINDA_SPOTS \ +{ \ + int i; \ + for (i = 0; i < 4; i++) \ + { \ + int j; \ + u8 x = sSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); \ + u8 y = sSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); \ + \ + for (j = 0; j < 16; j++) \ + { \ + int k; \ + s32 row = sSpindaSpotGraphics[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[0] && dest != gMonSpritesGfxPtr->sprites[2]) - { - int i; - for (i = 0; i < 4; i++) - { - int j; - u8 x = sSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); - u8 y = sSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); - - for (j = 0; j < 16; j++) - { - int k; - s32 row = sSpindaSpotGraphics[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 = sSpindaSpotGraphics[i].x + ((personality & 0x0F) - 8); - u8 y = sSpindaSpotGraphics[i].y + (((personality & 0xF0) >> 4) - 8); - - for (j = 0; j < 16; j++) - { - int k; - s32 row = sSpindaSpotGraphics[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) @@ -5427,9 +5395,14 @@ u16 GetMonEVCount(struct Pokemon *mon) return count; } +// This function was stubbed from RS, but it is stubbed badly. +// This variable is likely the u8 passed to SetMonData in RSE. +// The pointer reference causes agbcc to reserve it on the stack before even checking +// whether it's used. void RandomlyGivePartyPokerus(struct Pokemon *party) { - u8 foo[4]; // huh? + u8 foo; + &foo; } u8 CheckPartyPokerus(struct Pokemon *party, u8 selection) @@ -5488,14 +5461,18 @@ u8 CheckPartyHasHadPokerus(struct Pokemon *party, u8 selection) return retVal; } -static void sub_8043B38(void) +// These two functions are stubbed from RS, but they're stubbed badly. +// See note on RandomlyGivePartyPokerus above. +static void UpdatePartyPokerusTime(void) { - u8 foo[4]; // huh? + u8 foo; + &foo; } void PartySpreadPokerus(struct Pokemon *party) { - u8 foo[4]; // huh? + u8 foo; + &foo; } static void SetMonExpWithMaxLevelCheck(struct Pokemon *mon, int species, u8 unused, u32 data) @@ -5909,7 +5886,7 @@ u16 FacilityClassToPicIndex(u16 facilityClass) return gFacilityClassToPicIndex[facilityClass]; } -bool8 sub_804455C(u8 caseId, u8 battlerId) +bool8 ShouldIgnoreDeoxysForm(u8 caseId, u8 battlerId) { switch (caseId) { @@ -6009,7 +5986,7 @@ void SetDeoxysStats(void) } } -u16 sub_80447AC(void) +u16 GetUnionRoomTrainerPic(void) { u8 linkId = GetMultiplayerId() ^ 1; u32 arrId = gLinkPlayers[linkId].trainerId & 7; @@ -6018,7 +5995,7 @@ u16 sub_80447AC(void) return FacilityClassToPicIndex(gLinkPlayerFacilityClasses[arrId]); } -u16 sub_80447F0(void) +u16 GetUnionRoomTrainerClass(void) { u8 linkId = GetMultiplayerId() ^ 1; u32 arrId = gLinkPlayers[linkId].trainerId & 7; @@ -6081,7 +6058,7 @@ static void OakSpeechNidoranFSetupTemplate(struct OakSpeechNidoranFStruct *struc { for (i = 0; i < (s8)structPtr->spriteCount; ++i) { - structPtr->templates[i] = gUnknown_825DEF0[i]; + structPtr->templates[i] = gSpriteTemplates_Battlers[i]; for (j = 0; j < structPtr->frameCount; ++j) structPtr->frameImages[i * structPtr->frameCount + j].data = &structPtr->bufferPtrs[i][j * 0x800]; structPtr->templates[i].images = &structPtr->frameImages[i * structPtr->frameCount]; @@ -6089,7 +6066,7 @@ static void OakSpeechNidoranFSetupTemplate(struct OakSpeechNidoranFStruct *struc } else { - const struct SpriteTemplate *template = &gUnknown_825DEF0[battlePosition]; + const struct SpriteTemplate *template = &gSpriteTemplates_Battlers[battlePosition]; structPtr->templates[0] = *template; for (j = 0; j < structPtr->frameCount; ++j) diff --git a/src/pokemon_jump_2.c b/src/pokemon_jump_2.c index e51d79814..a219459c1 100644 --- a/src/pokemon_jump_2.c +++ b/src/pokemon_jump_2.c @@ -1317,7 +1317,7 @@ static bool32 sub_8148D5C(void) case 4: if (!gPaletteFade.active) { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); gUnknown_203F3D4->unkA++; } break; diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c index 03b9c6744..b2ff1209b 100644 --- a/src/pokemon_summary_screen.c +++ b/src/pokemon_summary_screen.c @@ -2339,7 +2339,7 @@ static void sub_8136BC4(void) SetGpuReg(REG_OFFSET_DISPCNT, 0); ResetBgsAndClearDma3BusyFlags(0); - InitBgsFromTemplates(0, sUnknown_8463EFC, ARRAY_COUNT(sUnknown_8463EFC)); + InitBgsFromTemplates(0, sUnknown_8463EFC, NELEMS(sUnknown_8463EFC)); ChangeBgX(0, 0, 0); ChangeBgY(0, 0, 0); @@ -3902,20 +3902,20 @@ static void sub_8139768(struct Sprite * sprite) { case 0: sprite->pos1.y += sUnknown_8463FBE[sUnknown_203B170->unk00++]; - v0 = ARRAY_COUNT(sUnknown_8463FBE); + v0 = NELEMS(sUnknown_8463FBE); break; case 1: sprite->pos1.y += sUnknown_8463FC1[sUnknown_203B170->unk00++]; - v0 = ARRAY_COUNT(sUnknown_8463FC1); + v0 = NELEMS(sUnknown_8463FC1); break; case 2: sprite->pos1.y += sUnknown_8463FC6[sUnknown_203B170->unk00++]; - v0 = ARRAY_COUNT(sUnknown_8463FC6); + v0 = NELEMS(sUnknown_8463FC6); break; case 3: default: sprite->pos1.y += sUnknown_8463FCD[sUnknown_203B170->unk00++]; - v0 = ARRAY_COUNT(sUnknown_8463FCD); + v0 = NELEMS(sUnknown_8463FCD); break; } @@ -3941,7 +3941,7 @@ static void sub_8139868(struct Sprite * sprite) if (sUnknown_203B170->unk04++ >= 120) { sprite->pos1.x += sUnknown_8463FD4[sUnknown_203B170->unk00]; - if (++sUnknown_203B170->unk00 >= ARRAY_COUNT(sUnknown_8463FD4)) + if (++sUnknown_203B170->unk00 >= NELEMS(sUnknown_8463FD4)) { sUnknown_203B170->unk00 = 0; sUnknown_203B170->unk04 = 0; @@ -3953,7 +3953,7 @@ static void sub_8139868(struct Sprite * sprite) if (sUnknown_203B170->unk04++ >= 90) { sprite->pos1.x += sUnknown_8463FDF[sUnknown_203B170->unk00]; - if (++sUnknown_203B170->unk00 >= ARRAY_COUNT(sUnknown_8463FDF)) + if (++sUnknown_203B170->unk00 >= NELEMS(sUnknown_8463FDF)) { sUnknown_203B170->unk00 = 0; sUnknown_203B170->unk04 = 0; @@ -3965,7 +3965,7 @@ static void sub_8139868(struct Sprite * sprite) if (sUnknown_203B170->unk04++ >= 60) { sprite->pos1.x += sUnknown_8463FEA[sUnknown_203B170->unk00]; - if (++sUnknown_203B170->unk00 >= ARRAY_COUNT(sUnknown_8463FEA)) + if (++sUnknown_203B170->unk00 >= NELEMS(sUnknown_8463FEA)) { sUnknown_203B170->unk00 = 0; sUnknown_203B170->unk04 = 0; @@ -4002,7 +4002,7 @@ static void sub_813995C(void) } else { - if (sub_804455C(3, sLastViewedMonIndex)) + if (ShouldIgnoreDeoxysForm(3, sLastViewedMonIndex)) spriteId = CreateMonPicSprite(species, trainerId, personality, 1, 60, 65, 12, 0xffff, 1); else spriteId = CreateMonPicSprite_HandleDeoxys(species, trainerId, personality, 1, 60, 65, 12, 0xffff); @@ -4130,7 +4130,7 @@ static void sub_8139DBC(void) } else { - if (sub_804455C(3, sLastViewedMonIndex)) + if (ShouldIgnoreDeoxysForm(3, sLastViewedMonIndex)) sMonSummaryScreen->unk3014 = CreateMonIcon(species, SpriteCallbackDummy, 24, 32, 0, personality, 0); else sMonSummaryScreen->unk3014 = CreateMonIcon(species, SpriteCallbackDummy, 24, 32, 0, personality, 1); diff --git a/src/psychic.c b/src/psychic.c index 32e4dce46..9a072ad5c 100644 --- a/src/psychic.c +++ b/src/psychic.c @@ -523,10 +523,10 @@ static void sub_80B3168(struct Sprite *sprite) bool8 toBG2 = (rank ^ var0) != 0; if (IsBattlerSpriteVisible(battler)) - sub_8073128(toBG2); + ResetBattleAnimBg(toBG2); battler = battlerCopy ^ 2; if (IsBattlerSpriteVisible(battler)) - sub_8073128(toBG2 ^ var0); + ResetBattleAnimBg(toBG2 ^ var0); } sprite->callback = DestroyAnimSprite; } diff --git a/src/quest_log_events.c b/src/quest_log_events.c index 8eaf331e5..72b8ddfd7 100644 --- a/src/quest_log_events.c +++ b/src/quest_log_events.c @@ -425,7 +425,7 @@ static bool8 TrySetTrainerBattleQuestLogEvent(u16 eventId, const u16 *eventData) return TRUE; } -void sub_81139BC(void) +void QuestLogEvents_HandleEndTrainerBattle(void) { if (sDeferredEvent.id != QL_EVENT_0) { diff --git a/src/quest_log_player.c b/src/quest_log_player.c index 715061963..da1c2b76e 100644 --- a/src/quest_log_player.c +++ b/src/quest_log_player.c @@ -35,7 +35,7 @@ static void (*const gUnknown_8471EDC[])(void) = { void sub_8150454(u8 a0) { - if (a0 < ARRAY_COUNT(gUnknown_8471EDC)) + if (a0 < NELEMS(gUnknown_8471EDC)) gUnknown_8471EDC[a0](); } diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c index c65169710..cc1e14d8f 100644 --- a/src/reshow_battle_screen.c +++ b/src/reshow_battle_screen.c @@ -10,12 +10,12 @@ #include "battle_controllers.h" static void CB2_ReshowBattleScreenAfterMenu(void); -static void sub_8077AAC(void); +static void ReshowBattleScreen_TurnOnDisplay(void); static bool8 LoadBattlerSpriteGfx(u8 battlerId); static void CreateBattlerSprite(u8 battlerId); static void CreateHealthboxSprite(u8 battlerId); -void nullsub_44(void) +void ReshowBattleScreenDummy(void) { } @@ -113,35 +113,35 @@ static void CB2_ReshowBattleScreenAfterMenu(void) if (!LoadBattlerSpriteGfx(2)) --gBattleScripting.reshowMainState; break; - case 0xA: + case 10: if (!LoadBattlerSpriteGfx(3)) --gBattleScripting.reshowMainState; break; - case 0xB: + case 11: CreateBattlerSprite(0); break; - case 0xC: + case 12: CreateBattlerSprite(1); break; - case 0xD: + case 13: CreateBattlerSprite(2); break; - case 0xE: + case 14: CreateBattlerSprite(3); break; - case 0xF: + case 15: CreateHealthboxSprite(0); break; - case 0x10: + case 16: CreateHealthboxSprite(1); break; - case 0x11: + case 17: CreateHealthboxSprite(2); break; - case 0x12: + case 18: CreateHealthboxSprite(3); break; - case 0x13: + case 19: LoadAndCreateEnemyShadowSprites(); opponentBattler = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT); species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[opponentBattler]], MON_DATA_SPECIES); @@ -159,13 +159,13 @@ static void CB2_ReshowBattleScreenAfterMenu(void) CreateWirelessStatusIndicatorSprite(0, 0); } break; - case 0x14: + case 20: SetVBlankCallback(VBlankCB_Battle); - sub_8077AAC(); + ReshowBattleScreen_TurnOnDisplay(); BeginHardwarePaletteFade(0xFF, 0, 0x10, 0, 1); gPaletteFade.bufferTransferDisabled = 0; SetMainCallback2(BattleMainCB2); - sub_80357C8(); + BattleInterfaceSetWindowPals(); break; default: break; @@ -173,7 +173,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) ++gBattleScripting.reshowMainState; } -static void sub_8077AAC(void) +static void ReshowBattleScreen_TurnOnDisplay(void) { EnableInterrupts(INTR_FLAG_VBLANK); SetGpuReg(REG_OFFSET_BLDCNT, 0); @@ -202,9 +202,9 @@ static bool8 LoadBattlerSpriteGfx(u8 battler) BattleLoadSubstituteOrMonSpriteGfx(battler, FALSE); } else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler. - DecompressTrainerBackPalette(gSaveBlock2Ptr->playerGender, battler); + DecompressTrainerBackPalette(BACK_PIC_RED + gSaveBlock2Ptr->playerGender, battler); else if (gBattleTypeFlags & BATTLE_TYPE_OLD_MAN_TUTORIAL && battler == B_POSITION_PLAYER_LEFT) // Should be checking position, not battler. - DecompressTrainerBackPalette(5, battler); + DecompressTrainerBackPalette(BACK_PIC_OLDMAN, battler); else if (!gBattleSpritesDataPtr->battlerData[battler].behindSubstitute) BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battler]], battler); else diff --git a/src/roamer.c b/src/roamer.c index 074ac22cf..6367e9d43 100644 --- a/src/roamer.c +++ b/src/roamer.c @@ -94,7 +94,7 @@ void CreateInitialRoamerMon(void) saveRoamer.smart = GetMonData(tmpMon, MON_DATA_SMART); saveRoamer.tough = GetMonData(tmpMon, MON_DATA_TOUGH); sRoamerLocation[MAP_GRP] = 3; - sRoamerLocation[MAP_NUM] = sRoamerLocations[Random() % (ARRAY_COUNT(sRoamerLocations) - 1)][0]; + sRoamerLocation[MAP_NUM] = sRoamerLocations[Random() % (NELEMS(sRoamerLocations) - 1)][0]; } void InitRoamer(void) @@ -125,7 +125,7 @@ void RoamerMoveToOtherLocationSet(void) while (1) { - mapNum = sRoamerLocations[Random() % (ARRAY_COUNT(sRoamerLocations) - 1)][0]; + mapNum = sRoamerLocations[Random() % (NELEMS(sRoamerLocations) - 1)][0]; if (sRoamerLocation[MAP_NUM] != mapNum) { sRoamerLocation[MAP_NUM] = mapNum; @@ -150,7 +150,7 @@ void RoamerMove(void) if (!roamer->active) return; - while (locSet < (ARRAY_COUNT(sRoamerLocations) - 1)) + while (locSet < (NELEMS(sRoamerLocations) - 1)) { if (sRoamerLocation[MAP_NUM] == sRoamerLocations[locSet][0]) { diff --git a/src/rock.c b/src/rock.c index 922b2ad6a..c5b78fe31 100644 --- a/src/rock.c +++ b/src/rock.c @@ -407,7 +407,7 @@ void AnimTask_LoadSandstormBackground(u8 taskId) gBattle_BG1_Y = 0; SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X); SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y); - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); AnimLoadCompressedBgTilemap(animBg.bgId, gFile_graphics_battle_anims_backgrounds_sandstorm_brew_tilemap); AnimLoadCompressedBgGfx(animBg.bgId, gFile_graphics_battle_anims_backgrounds_sandstorm_brew_sheet, animBg.tilesOffset); LoadCompressedPalette(gBattleAnimSpritePal_FlyingDirt, animBg.paletteId * 16, 32); @@ -464,8 +464,8 @@ static void sub_80B490C(u8 taskId) } break; case 3: - sub_80752A0(&animBg); - sub_8075358(animBg.bgId); + GetBattleAnimBg1Data(&animBg); + InitBattleAnimBg(animBg.bgId); ++gTasks[taskId].data[12]; break; case 4: @@ -795,14 +795,14 @@ void AnimTask_MoveSeismicTossBg(u8 taskId) { if (gTasks[taskId].data[0] == 0) { - sub_8075458(0); + ToggleBg3Mode(0); gTasks[taskId].data[1] = 200; } gBattle_BG3_Y += gTasks[taskId].data[1] / 10; gTasks[taskId].data[1] -= 3; if (gTasks[taskId].data[0] == 120) { - sub_8075458(1); + ToggleBg3Mode(1); DestroyAnimVisualTask(taskId); } ++gTasks[taskId].data[0]; @@ -812,7 +812,7 @@ void AnimTask_SeismicTossBgAccelerateDownAtEnd(u8 taskId) { if (gTasks[taskId].data[0] == 0) { - sub_8075458(0); + ToggleBg3Mode(0); ++gTasks[taskId].data[0]; gTasks[taskId].data[2] = gBattle_BG3_Y; } @@ -822,7 +822,7 @@ void AnimTask_SeismicTossBgAccelerateDownAtEnd(u8 taskId) if (gBattleAnimArgs[7] == 0xFFF) { gBattle_BG3_Y = 0; - sub_8075458(1); + ToggleBg3Mode(1); DestroyAnimVisualTask(taskId); } } diff --git a/src/save.c b/src/save.c index d5993182c..894b420f6 100644 --- a/src/save.c +++ b/src/save.c @@ -45,26 +45,24 @@ min(sizeof(structure) - chunkNum * SECTOR_DATA_SIZE, SECTOR_DATA_SIZE) \ } \ -// TODO: use gSaveblock2, gSaveblock1, gPokemonStorage instead of structs -// Will be done when load_save is decompiled. const struct SaveSectionOffsets gSaveSectionOffsets[] = { - SAVEBLOCK_CHUNK(struct SaveBlock2, 0), - - SAVEBLOCK_CHUNK(struct SaveBlock1, 0), - SAVEBLOCK_CHUNK(struct SaveBlock1, 1), - SAVEBLOCK_CHUNK(struct SaveBlock1, 2), - SAVEBLOCK_CHUNK(struct SaveBlock1, 3), - - SAVEBLOCK_CHUNK(struct PokemonStorage, 0), - SAVEBLOCK_CHUNK(struct PokemonStorage, 1), - SAVEBLOCK_CHUNK(struct PokemonStorage, 2), - SAVEBLOCK_CHUNK(struct PokemonStorage, 3), - SAVEBLOCK_CHUNK(struct PokemonStorage, 4), - SAVEBLOCK_CHUNK(struct PokemonStorage, 5), - SAVEBLOCK_CHUNK(struct PokemonStorage, 6), - SAVEBLOCK_CHUNK(struct PokemonStorage, 7), - SAVEBLOCK_CHUNK(struct PokemonStorage, 8) + SAVEBLOCK_CHUNK(gSaveBlock2, 0), + + SAVEBLOCK_CHUNK(gSaveBlock1, 0), + SAVEBLOCK_CHUNK(gSaveBlock1, 1), + SAVEBLOCK_CHUNK(gSaveBlock1, 2), + SAVEBLOCK_CHUNK(gSaveBlock1, 3), + + SAVEBLOCK_CHUNK(gPokemonStorage, 0), + SAVEBLOCK_CHUNK(gPokemonStorage, 1), + SAVEBLOCK_CHUNK(gPokemonStorage, 2), + SAVEBLOCK_CHUNK(gPokemonStorage, 3), + SAVEBLOCK_CHUNK(gPokemonStorage, 4), + SAVEBLOCK_CHUNK(gPokemonStorage, 5), + SAVEBLOCK_CHUNK(gPokemonStorage, 6), + SAVEBLOCK_CHUNK(gPokemonStorage, 7), + SAVEBLOCK_CHUNK(gPokemonStorage, 8) }; // Sector num to begin writing save data. Sectors are rotated each time the game is saved. (possibly to avoid wear on flash memory?) @@ -855,7 +853,7 @@ void Task_SaveGame_UpdatedLinkRecords(u8 taskId) gTasks[taskId].data[0] = 1; break; case 1: - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); gTasks[taskId].data[0] = 2; break; case 2: @@ -889,7 +887,7 @@ void Task_SaveGame_UpdatedLinkRecords(u8 taskId) break; case 7: ClearContinueGameWarpStatus2(); - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); gTasks[taskId].data[0] = 8; break; case 8: @@ -900,7 +898,7 @@ void Task_SaveGame_UpdatedLinkRecords(u8 taskId) } break; case 9: - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); gTasks[taskId].data[0] = 10; break; case 10: diff --git a/src/string_util.c b/src/string_util.c index 17507b0e8..f059ac43d 100644 --- a/src/string_util.c +++ b/src/string_util.c @@ -487,7 +487,7 @@ u8 *GetExpandedPlaceholder(u32 id) [PLACEHOLDER_ID_KYOGRE] = ExpandPlaceholder_Kyogre, }; - if (id >= ARRAY_COUNT(funcs)) + if (id >= NELEMS(funcs)) return gExpandedPlaceholder_Empty; else return funcs[id](); @@ -627,7 +627,7 @@ u8 GetExtCtrlCodeLength(u8 code) }; u8 length = 0; - if (code < ARRAY_COUNT(lengths)) + if (code < NELEMS(lengths)) length = lengths[code]; return length; } diff --git a/src/strings.c b/src/strings.c index c696601c4..d620cdc80 100644 --- a/src/strings.c +++ b/src/strings.c @@ -342,8 +342,8 @@ const u8 gText_NotAble[] = _("NOT ABLE"); const u8 gText_Able3[] = _("ABLE!"); const u8 gText_NotAble2[] = _("NOT ABLE!"); const u8 gText_Learned[] = _("LEARNED"); -const u8 gUnknown_8417457[] = _("OAK: It's important to get to know\nyour POKéMON thoroughly.\p"); -const u8 gUnknown_8417494[] = _("This is a list of your POKéMON,\n{PLAYER}.\pOpen this to check the skills\nand moves of your POKéMON.\pYou also choose POKéMON here if\nyou want to use an item on one.{PAUSE_UNTIL_PRESS}"); +const u8 gText_OakImportantToGetToKnowPokemonThroughly[] = _("OAK: It's important to get to know\nyour POKéMON thoroughly.\p"); +const u8 gText_OakThisIsListOfPokemon[] = _("This is a list of your POKéMON,\n{PLAYER}.\pOpen this to check the skills\nand moves of your POKéMON.\pYou also choose POKéMON here if\nyou want to use an item on one.{PAUSE_UNTIL_PRESS}"); const u8 gText_CutATreeOrGrass[] = _("Cut a tree or grass."); const u8 gText_FlyToAKnownTown[] = _("Fly to a known town."); const u8 gText_TravelOnWater[] = _("Travel on water."); diff --git a/src/teachy_tv.c b/src/teachy_tv.c index d6ce57c3d..3baaa094a 100644 --- a/src/teachy_tv.c +++ b/src/teachy_tv.c @@ -1177,9 +1177,9 @@ static void TeachyTvPrepBattle(u8 taskId) InitPokedudePartyAndOpponent(); PlayMapChosenOrBattleBGM(MUS_DUMMY); if (sStaticResources.whichScript == TTVSCR_BATTLE) - data[6] = 9; + data[6] = B_TRANSITION_WHITEFADE_IN_STRIPES; else - data[6] = 8; + data[6] = B_TRANSITION_SLICED_SCREEN; data[7] = 0; gTasks[taskId].func = TeachyTvPreBattleAnimAndSetBattleCallback; } diff --git a/src/trade.c b/src/trade.c index 60643f2fc..21c127838 100644 --- a/src/trade.c +++ b/src/trade.c @@ -814,7 +814,7 @@ static void CB2_ReturnFromLinkTrade2(void) if (gWirelessCommType) { ToggleLMANlinkRecovery(TRUE); - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); } } break; @@ -2001,7 +2001,7 @@ static void TradeMenuCB_11(void) { if (gWirelessCommType) { - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); } else { @@ -2041,7 +2041,7 @@ static void TradeMenuCB_16(void) { if (!ToggleLMANlinkRecovery(FALSE)) { - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); sTradeMenuResourcesPtr->tradeMenuCBnum = 13; } } diff --git a/src/trade_scene.c b/src/trade_scene.c index f068b17d4..b259ba939 100644 --- a/src/trade_scene.c +++ b/src/trade_scene.c @@ -1725,7 +1725,7 @@ static bool8 DoTradeAnim_Cable(void) case 72: // Only if in-game trade TradeMons(gSpecialVar_0x8005, 0); gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], EVO_MODE_TRADE, ITEM_NONE); if (evoTarget != SPECIES_NONE) { TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); @@ -2246,7 +2246,7 @@ static bool8 DoTradeAnim_Wireless(void) case 72: // Only if in-game trade TradeMons(gSpecialVar_0x8005, 0); gCB2_AfterEvolution = CB2_RunTradeAnim_InGameTrade; - evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], TRUE, ITEM_NONE); + evoTarget = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], EVO_MODE_TRADE, ITEM_NONE); if (evoTarget != SPECIES_NONE) { TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoTarget, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); @@ -2290,7 +2290,7 @@ static void sub_8053788(void) break; case 4: gCB2_AfterEvolution = sub_8053E8C; - evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], 1, 0); + evoSpecies = GetEvolutionTargetSpecies(&gPlayerParty[gSelectedTradeMonPositions[0]], EVO_MODE_TRADE, 0); if (evoSpecies != SPECIES_NONE) TradeEvolutionScene(&gPlayerParty[gSelectedTradeMonPositions[0]], evoSpecies, sTradeData->pokePicSpriteIdxs[1], gSelectedTradeMonPositions[0]); else @@ -2546,7 +2546,7 @@ static void sub_8053E8C(void) DrawTextOnTradeWindow(0, gStringVar4, 0); break; case 1: - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); gMain.state = 100; sTradeData->timer = 0; break; @@ -2631,7 +2631,7 @@ static void sub_8053E8C(void) case 41: if (sTradeData->timer == 0) { - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); gMain.state = 42; } else @@ -2650,7 +2650,7 @@ static void sub_8053E8C(void) if (++sTradeData->timer > 60) { gMain.state++; - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); } break; case 6: @@ -2672,11 +2672,11 @@ static void sub_8053E8C(void) { if (gWirelessCommType && gMain.savedCallback == CB2_ReturnFromLinkTrade) { - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); } else { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); } gMain.state++; } diff --git a/src/trainer_card.c b/src/trainer_card.c index e42385243..f1af00254 100644 --- a/src/trainer_card.c +++ b/src/trainer_card.c @@ -618,7 +618,7 @@ static void Task_TrainerCard(u8 taskId) } break; case STATE_WAIT_LINK_PARTNER: - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); DrawDialogueFrame(0, 1); AddTextPrinterParameterized(0, 2, gText_WaitingTrainerFinishReading, 0, 1, TEXT_SPEED_FF, 0); CopyWindowToVram(0, COPYWIN_BOTH); @@ -1472,7 +1472,7 @@ static bool8 SetTrainerCardBgsAndPals(void) switch (sTrainerCardDataPtr->bgPalLoadState) { case 0: - LoadBgTiles(3, sTrainerCardDataPtr->badgeTiles, ARRAY_COUNT(sTrainerCardDataPtr->badgeTiles), 0); + LoadBgTiles(3, sTrainerCardDataPtr->badgeTiles, NELEMS(sTrainerCardDataPtr->badgeTiles), 0); break; case 1: LoadBgTiles(0, sTrainerCardDataPtr->cardTiles, 0x1800, 0); diff --git a/src/union_room.c b/src/union_room.c index 772af688b..24b8a4d3e 100644 --- a/src/union_room.c +++ b/src/union_room.c @@ -2022,7 +2022,7 @@ static void Task_RunScriptAndFadeToActivity(u8 taskId) case 2: if (!gPaletteFade.active) { - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); data[0]++; } break; @@ -2246,7 +2246,7 @@ static void Task_MEvent_Leader(u8 taskId) Free(data->field_8); Free(data->field_0); Free(data->field_4); - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); data->state++; break; case 17: @@ -2413,7 +2413,7 @@ static void Task_CardOrNewsWithFriend(u8 taskId) break; case 11: data->state++; - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); break; case 12: if (IsLinkTaskFinished()) @@ -2592,7 +2592,7 @@ static void Task_CardOrNewsOverWireless(u8 taskId) break; case 13: data->state++; - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); break; case 14: if (IsLinkTaskFinished()) @@ -2935,7 +2935,7 @@ static void Task_RunUnionRoom(u8 taskId) } break; case 32: - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); data->state = 36; break; case 31: @@ -2984,7 +2984,7 @@ static void Task_RunUnionRoom(u8 taskId) if (PrintOnTextbox(&data->textState, gStringVar4)) { data->state = 41; - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); data->partnerYesNoResponse = 0; data->recvActivityRequest[0] = 0; } @@ -3162,7 +3162,7 @@ static void Task_RunUnionRoom(u8 taskId) } break; case 10: - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); data->state = 36; break; case 36: @@ -3185,7 +3185,7 @@ static void Task_RunUnionRoom(u8 taskId) UnionRoom_ScheduleFieldMessageWithFollowupState(14, gStringVar4); break; case 14: - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); data->state = 15; break; case 15: @@ -3447,7 +3447,7 @@ static bool32 UnionRoom_HandleContactFromOtherPlayer(struct UnkStruct_URoom * ur else if (var == 2) { uroom->state = 36; - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); return FALSE; } } @@ -4689,7 +4689,7 @@ static void ViewURoomPartnerTrainerCard(u8 *unused, struct UnkStruct_URoom * uro DynamicPlaceholderTextUtil_Reset(); - StringCopy(uroom->trainerCardStrbufs[0], gTrainerClassNames[sub_80447F0()]); + StringCopy(uroom->trainerCardStrbufs[0], gTrainerClassNames[GetUnionRoomTrainerClass()]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(0, uroom->trainerCardStrbufs[0]); DynamicPlaceholderTextUtil_SetPlaceholderPtr(1, trainerCard->rse.playerName); diff --git a/src/union_room_battle.c b/src/union_room_battle.c index 3d5ef39eb..1e4528c8c 100644 --- a/src/union_room_battle.c +++ b/src/union_room_battle.c @@ -163,7 +163,7 @@ void CB2_UnionRoomBattle(void) } else { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); if (gBlockRecvBuffer[GetMultiplayerId()][0] == (ACTIVITY_DECLINE | 0x40)) { gMain.state = 6; @@ -179,7 +179,7 @@ void CB2_UnionRoomBattle(void) case 50: if (!UpdatePaletteFade()) { - PrepareSendLinkCmd2FFE_or_RfuCmd6600(); + SetLinkStandbyCallback(); gMain.state++; } break; diff --git a/src/union_room_chat.c b/src/union_room_chat.c index 5d19dc9cd..85df5cd39 100644 --- a/src/union_room_chat.c +++ b/src/union_room_chat.c @@ -587,7 +587,7 @@ static void ChatEntryRoutine_ExitChat(void) case 5: if (IsLinkTaskFinished() && !GetRfuUnkCE8()) { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); sWork->exitDelayTimer = 0; sWork->routineState++; } @@ -622,7 +622,7 @@ static void ChatEntryRoutine_Drop(void) case 1: if (!RunDisplaySubtask(0) && IsLinkTaskFinished() && !GetRfuUnkCE8()) { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); sWork->exitDelayTimer = 0; sWork->routineState++; } @@ -668,7 +668,7 @@ static void ChatEntryRoutine_Disbanded(void) case 2: if (RunDisplaySubtask(0) != TRUE && IsLinkTaskFinished() && !GetRfuUnkCE8()) { - Link_TryStartSend5FFF(); + SetCloseLinkCallback(); sWork->exitDelayTimer = 0; sWork->routineState++; } diff --git a/src/water.c b/src/water.c index f8dd29bd0..8a1737e58 100644 --- a/src/water.c +++ b/src/water.c @@ -812,7 +812,7 @@ void AnimTask_CreateSurfWave(u8 taskId) SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0, 16)); SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1); SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1); - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); if (!IsContest()) { SetAnimBgAttribute(1, BG_ANIM_CHAR_BASE_BLOCK, 1); @@ -889,7 +889,7 @@ static void AnimTask_CreateSurfWave_Step1(u8 taskId) *BGptrX += gTasks[taskId].data[0]; *BGptrY += gTasks[taskId].data[1]; - sub_80752A0(&animBg); + GetBattleAnimBg1Data(&animBg); gTasks[taskId].data[2] += gTasks[taskId].data[1]; if (++gTasks[taskId].data[5] == 4) { @@ -928,8 +928,8 @@ static void AnimTask_CreateSurfWave_Step2(u8 taskId) u16 *BGptrY = &gBattle_BG1_Y; if (gTasks[taskId].data[0] == 0) { - sub_8075358(1); - sub_8075358(2); + InitBattleAnimBg(1); + InitBattleAnimBg(2); gTasks[taskId].data[0]++; } else |