diff options
Diffstat (limited to 'src/battle_anim.c')
-rw-r--r-- | src/battle_anim.c | 461 |
1 files changed, 241 insertions, 220 deletions
diff --git a/src/battle_anim.c b/src/battle_anim.c index a18453fa1..89798019c 100644 --- a/src/battle_anim.c +++ b/src/battle_anim.c @@ -8,6 +8,9 @@ #include "sprite.h" #include "task.h" +// sprites start at 10000 and thus must be subtracted of 10000 to account for the true index. +#define GET_TRUE_SPRITE_INDEX(i) (i - 10000) + extern u8 unk_2000000[]; extern u16 gUnknown_02024A6A[4]; extern u8 gUnknown_02024BE0[]; @@ -15,22 +18,22 @@ extern u8 gPlayerMonIndex; extern u8 gEnemyMonIndex; EWRAM_DATA const u8 *gBattleAnimScriptPtr = NULL; EWRAM_DATA const u8 *gBattleAnimScriptRetAddr = NULL; -EWRAM_DATA void (*gUnknown_0202F7AC)(void) = NULL; -EWRAM_DATA s8 gUnknown_0202F7B0 = 0; -EWRAM_DATA u8 gUnknown_0202F7B1 = 0; -EWRAM_DATA u8 gUnknown_0202F7B2 = 0; -EWRAM_DATA u8 gUnknown_0202F7B3 = 0; +EWRAM_DATA void (*gAnimScriptCallback)(void) = NULL; +EWRAM_DATA s8 gAnimFramesToWait = 0; +EWRAM_DATA u8 gAnimScriptActive = FALSE; +EWRAM_DATA u8 gAnimVisualTaskCount = 0; +EWRAM_DATA u8 gAnimSoundTaskCount = 0; EWRAM_DATA u32 gUnknown_0202F7B4 = 0; EWRAM_DATA u32 gUnknown_0202F7B8 = 0; EWRAM_DATA u16 gUnknown_0202F7BC = 0; EWRAM_DATA u8 gUnknown_0202F7BE = 0; EWRAM_DATA u16 gUnknown_0202F7C0 = 0; -EWRAM_DATA u8 gUnknown_0202F7C2[2] = {0}; +EWRAM_DATA u8 gMonAnimTaskIdArray[2] = {0}; EWRAM_DATA u8 gUnknown_0202F7C4 = 0; EWRAM_DATA u8 gUnknown_0202F7C5 = 0; -EWRAM_DATA u16 gUnknown_0202F7C6 = 0; -EWRAM_DATA u8 gUnknown_0202F7C8 = 0; -EWRAM_DATA u8 gUnknown_0202F7C9 = 0; +EWRAM_DATA u16 gAnimMoveIndex = 0; // set but unused. +EWRAM_DATA u8 gBattleAnimPlayerMonIndex = 0; +EWRAM_DATA u8 gBattleAnimEnemyMonIndex = 0; EWRAM_DATA u16 gUnknown_0202F7CA[4] = {0}; EWRAM_DATA u8 gUnknown_0202F7D2 = 0; extern u16 gUnknown_030041B4; @@ -41,8 +44,8 @@ extern u16 gUnknown_03004280; extern u16 gUnknown_03004288; extern u16 gUnknown_030042C0; extern u16 gUnknown_030042C4; -extern u16 gUnknown_03004AF0; -extern u16 gUnknown_03004B10[8]; +extern u16 gSoundAnimFramesToWait; +extern u16 gAnimSpriteIndexArray[8]; extern s16 gBattleAnimArgs[8]; extern struct MusicPlayerInfo gMPlay_BGM; extern struct MusicPlayerInfo gMPlay_SE1; @@ -69,13 +72,13 @@ extern void sub_800D7B8(void); extern u8 obj_id_for_side_relative_to_move(); extern u8 battle_get_per_side_status_permutated(); -static void sub_80759D0(void); +static void RunAnimScriptCommand(void); static void ScriptCmd_loadsprite(void); static void ScriptCmd_unloadsprite(void); static void ScriptCmd_sprite(void); static void ScriptCmd_createtask(void); static void ScriptCmd_delay(void); -static void ScriptCmd_wait(void); +static void ScriptCmd_waitforvisualfinish(void); static void ScriptCmd_hang1(void); static void ScriptCmd_hang2(void); static void ScriptCmd_end(void); @@ -135,7 +138,7 @@ static void (*const sScriptCmdTable[])(void) = { ScriptCmd_sprite, ScriptCmd_createtask, ScriptCmd_delay, - ScriptCmd_wait, + ScriptCmd_waitforvisualfinish, ScriptCmd_hang1, ScriptCmd_hang2, ScriptCmd_end, @@ -184,49 +187,54 @@ void battle_anim_clear_some_data(void) { s32 i; - gUnknown_0202F7B0 = 0; - gUnknown_0202F7B1 = 0; - gUnknown_0202F7B2 = 0; - gUnknown_0202F7B3 = 0; + gAnimFramesToWait = 0; + gAnimScriptActive = FALSE; + gAnimVisualTaskCount = 0; + gAnimSoundTaskCount = 0; gUnknown_0202F7B4 = 0; gUnknown_0202F7B8 = 0; gUnknown_0202F7BC = 0; gUnknown_0202F7BE = 0; + + // clear index array. for (i = 0; i < 8; i++) - gUnknown_03004B10[i] |= 0xFFFF; + gAnimSpriteIndexArray[i] |= 0xFFFF; + + // clear anim args. for (i = 0; i < 8; i++) gBattleAnimArgs[i] = 0; - gUnknown_0202F7C2[0] = 0xFF; - gUnknown_0202F7C2[1] = -1; + + gMonAnimTaskIdArray[0] = 0xFF; + gMonAnimTaskIdArray[1] = 0xFF; gUnknown_0202F7C4 = 0; gUnknown_0202F7C5 = 0; - gUnknown_0202F7C6 = 0; - gUnknown_0202F7C8 = 0; - gUnknown_0202F7C9 = 0; + gAnimMoveIndex = 0; + gBattleAnimPlayerMonIndex = 0; + gBattleAnimEnemyMonIndex = 0; gUnknown_0202F7D2 = 0; } -void move_anim_start_t1(u16 a) +void ExecuteMoveAnim(u16 move) { - gUnknown_0202F7C8 = gPlayerMonIndex; - gUnknown_0202F7C9 = gEnemyMonIndex; - move_something(gBattleAnims_Moves, a, 1); + gBattleAnimPlayerMonIndex = gPlayerMonIndex; + gBattleAnimEnemyMonIndex = gEnemyMonIndex; + DoMoveAnim(gBattleAnims_Moves, move, 1); } -void move_something(const u8 *const moveAnims[], u16 b, u8 c) +void DoMoveAnim(const u8 *const moveAnims[], u16 move, u8 c) { s32 i; - if (sub_8076BE0() == 0) + if (IsContest() == 0) { sub_8079E24(); sub_8043EB4(0); for (i = 0; i < 4; i++) { if (battle_side_get_owner(i) != 0) - gUnknown_0202F7CA[i] = GetMonData(&gEnemyParty[gUnknown_02024A6A[i]], 11); + gUnknown_0202F7CA[i] = GetMonData(&gEnemyParty[gUnknown_02024A6A[i]], MON_DATA_SPECIES); else - gUnknown_0202F7CA[i] = GetMonData(&gPlayerParty[gUnknown_02024A6A[i]], 11); + gUnknown_0202F7CA[i] = GetMonData(&gPlayerParty[gUnknown_02024A6A[i]], MON_DATA_SPECIES); } } else @@ -234,31 +242,37 @@ void move_something(const u8 *const moveAnims[], u16 b, u8 c) for (i = 0; i < 4; i++) gUnknown_0202F7CA[i] = EWRAM_19348; } + if (c == 0) - gUnknown_0202F7C6 = 0; + gAnimMoveIndex = 0; else - gUnknown_0202F7C6 = b; + gAnimMoveIndex = move; + for (i = 0; i < 8; i++) gBattleAnimArgs[i] = 0; - gUnknown_0202F7C2[0] = 0xFF; - gUnknown_0202F7C2[1] = -1; - gBattleAnimScriptPtr = moveAnims[b]; - gUnknown_0202F7B1 = 1; - gUnknown_0202F7B0 = 0; - gUnknown_0202F7AC = sub_80759D0; + + gMonAnimTaskIdArray[0] = 0xFF; + gMonAnimTaskIdArray[1] = 0xFF; + gBattleAnimScriptPtr = moveAnims[move]; + gAnimScriptActive = TRUE; + gAnimFramesToWait = 0; + gAnimScriptCallback = RunAnimScriptCommand; + for (i = 0; i < 8; i++) - gUnknown_03004B10[i] |= 0xFFFF; + gAnimSpriteIndexArray[i] |= 0xFFFF; + if (c != 0) { for (i = 0; gUnknown_081C7160[i] != 0xFFFF; i++) { - if (b == gUnknown_081C7160[i]) + if (move == gUnknown_081C7160[i]) { m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 128); break; } } } + gUnknown_030042C4 = 0; gUnknown_03004240 = 0; gUnknown_03004200 = 0; @@ -269,94 +283,94 @@ void move_anim_8072740(struct Sprite *sprite) { FreeSpriteOamMatrix(sprite); DestroySprite(sprite); - gUnknown_0202F7B2--; + gAnimVisualTaskCount--; } -void move_anim_task_del(u8 taskId) +void DestroyAnimVisualTask(u8 taskId) { DestroyTask(taskId); - gUnknown_0202F7B2--; + gAnimVisualTaskCount--; } -void move_anim_related_task_del(u8 taskId) +void DestroyAnimSoundTask(u8 taskId) { DestroyTask(taskId); - gUnknown_0202F7B3--; + gAnimSoundTaskCount--; } -static void sub_8075940(u16 a) +static void AddSpriteIndex(u16 index) { s32 i; for (i = 0; i < 8; i++) { - if (gUnknown_03004B10[i] == 0xFFFF) + if (gAnimSpriteIndexArray[i] == 0xFFFF) { - gUnknown_03004B10[i] = a; + gAnimSpriteIndexArray[i] = index; return; } } } -static void sub_8075970(u16 a) +static void ClearSpriteIndex(u16 index) { s32 i; for (i = 0; i < 8; i++) { - if (gUnknown_03004B10[i] == a) + if (gAnimSpriteIndexArray[i] == index) { - gUnknown_03004B10[i] |= 0xFFFF; + gAnimSpriteIndexArray[i] |= 0xFFFF; return; } } } -static void move_anim_waiter(void) +static void WaitAnimFrameCount(void) { - if (gUnknown_0202F7B0 <= 0) + if (gAnimFramesToWait <= 0) { - gUnknown_0202F7AC = sub_80759D0; - gUnknown_0202F7B0 = 0; + gAnimScriptCallback = RunAnimScriptCommand; + gAnimFramesToWait = 0; } else { - gUnknown_0202F7B0--; + gAnimFramesToWait--; } } -static void sub_80759D0(void) +static void RunAnimScriptCommand(void) { do { sScriptCmdTable[SCRIPT_READ_8(gBattleAnimScriptPtr)](); - } while (gUnknown_0202F7B0 == 0 && gUnknown_0202F7B1 != 0); + } while (gAnimFramesToWait == 0 && gAnimScriptActive != FALSE); } static void ScriptCmd_loadsprite(void) { - u16 r4; + u16 index; gBattleAnimScriptPtr++; - r4 = SCRIPT_READ_16(gBattleAnimScriptPtr); - LoadCompressedObjectPic(&gBattleAnimPicTable[r4 - 10000]); - LoadCompressedObjectPalette(&gBattleAnimPaletteTable[r4 - 10000]); + index = SCRIPT_READ_16(gBattleAnimScriptPtr); + LoadCompressedObjectPic(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)]); + LoadCompressedObjectPalette(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]); gBattleAnimScriptPtr += 2; - sub_8075940(r4 - 10000); - gUnknown_0202F7B0 = 1; - gUnknown_0202F7AC = move_anim_waiter; + AddSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); + gAnimFramesToWait = 1; + gAnimScriptCallback = WaitAnimFrameCount; } static void ScriptCmd_unloadsprite(void) { - u16 r4; + u16 index; gBattleAnimScriptPtr++; - r4 = SCRIPT_READ_16(gBattleAnimScriptPtr); - FreeSpriteTilesByTag(gBattleAnimPicTable[r4 - 10000].tag); - FreeSpritePaletteByTag(gBattleAnimPicTable[r4 - 10000].tag); + index = SCRIPT_READ_16(gBattleAnimScriptPtr); + FreeSpriteTilesByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); + FreeSpritePaletteByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); gBattleAnimScriptPtr += 2; - sub_8075970(r4 - 10000); + ClearSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); } #ifdef NONMATCHING @@ -390,7 +404,7 @@ static void ScriptCmd_sprite(void) r4 -= 0x40; else r4 = -r4; - _r0 = sub_8079E90(gUnknown_0202F7C9); + _r0 = sub_8079E90(gBattleAnimEnemyMonIndex); r1 = r4; } @@ -401,17 +415,17 @@ static void ScriptCmd_sprite(void) r4 -= 0x40; else r4 = -r4; - _r0 = sub_8079E90(gUnknown_0202F7C8); + _r0 = sub_8079E90(gBattleAnimPlayerMonIndex); r1 = r4; } r6 = _r0 + r1; if ((s16)r6 < 3) r6 = 3; - r4 = sub_8077ABC(gUnknown_0202F7C9, 2); - r2 = sub_8077ABC(gUnknown_0202F7C9, 3); + r4 = sub_8077ABC(gBattleAnimEnemyMonIndex, 2); + r2 = sub_8077ABC(gBattleAnimEnemyMonIndex, 3); CreateSpriteAndAnimate(r7, r4, r2, r6); - gUnknown_0202F7B2++; + gAnimVisualTaskCount++; } #else __attribute__((naked)) @@ -479,10 +493,10 @@ _08075B34:\n\ _08075B36:\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - ldr r0, _08075B40 @ =gUnknown_0202F7C9\n\ + ldr r0, _08075B40 @ =gBattleAnimEnemyMonIndex\n\ b _08075B56\n\ .align 2, 0\n\ -_08075B40: .4byte gUnknown_0202F7C9\n\ +_08075B40: .4byte gBattleAnimEnemyMonIndex\n\ _08075B44:\n\ cmp r4, 0x3F\n\ bls _08075B4E\n\ @@ -494,7 +508,7 @@ _08075B4E:\n\ _08075B50:\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - ldr r0, _08075BAC @ =gUnknown_0202F7C8\n\ + ldr r0, _08075BAC @ =gBattleAnimPlayerMonIndex\n\ _08075B56:\n\ ldrb r0, [r0]\n\ bl sub_8079E90\n\ @@ -511,7 +525,7 @@ _08075B56:\n\ bgt _08075B74\n\ movs r6, 0x3\n\ _08075B74:\n\ - ldr r5, _08075BB0 @ =gUnknown_0202F7C9\n\ + ldr r5, _08075BB0 @ =gBattleAnimEnemyMonIndex\n\ ldrb r0, [r5]\n\ movs r1, 0x2\n\ bl sub_8077ABC\n\ @@ -529,7 +543,7 @@ _08075B74:\n\ adds r0, r7, 0\n\ adds r1, r4, 0\n\ bl CreateSpriteAndAnimate\n\ - ldr r1, _08075BB4 @ =gUnknown_0202F7B2\n\ + ldr r1, _08075BB4 @ =gAnimVisualTaskCount\n\ ldrb r0, [r1]\n\ adds r0, 0x1\n\ strb r0, [r1]\n\ @@ -537,9 +551,9 @@ _08075B74:\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ -_08075BAC: .4byte gUnknown_0202F7C8\n\ -_08075BB0: .4byte gUnknown_0202F7C9\n\ -_08075BB4: .4byte gUnknown_0202F7B2\n\ +_08075BAC: .4byte gBattleAnimPlayerMonIndex\n\ +_08075BB0: .4byte gBattleAnimEnemyMonIndex\n\ +_08075BB4: .4byte gAnimVisualTaskCount\n\ .syntax divided\n"); } #endif @@ -559,36 +573,39 @@ static void ScriptCmd_createtask(void) gBattleAnimScriptPtr++; numArgs = SCRIPT_READ_8(gBattleAnimScriptPtr); gBattleAnimScriptPtr++; + for (i = 0; i < numArgs; i++) { gBattleAnimArgs[i] = SCRIPT_READ_16(gBattleAnimScriptPtr); gBattleAnimScriptPtr += 2; } + taskId = CreateTask(taskFunc, taskPriority); taskFunc(taskId); - gUnknown_0202F7B2++; + gAnimVisualTaskCount++; } static void ScriptCmd_delay(void) { gBattleAnimScriptPtr++; - gUnknown_0202F7B0 = SCRIPT_READ_8(gBattleAnimScriptPtr); - if (gUnknown_0202F7B0 == 0) - gUnknown_0202F7B0 = -1; + gAnimFramesToWait = SCRIPT_READ_8(gBattleAnimScriptPtr); + if (gAnimFramesToWait == 0) + gAnimFramesToWait = -1; gBattleAnimScriptPtr++; - gUnknown_0202F7AC = move_anim_waiter; + gAnimScriptCallback = WaitAnimFrameCount; } -static void ScriptCmd_wait(void) +// wait for visual tasks to finish. +static void ScriptCmd_waitforvisualfinish(void) { - if (gUnknown_0202F7B2 == 0) + if (gAnimVisualTaskCount == 0) { gBattleAnimScriptPtr++; - gUnknown_0202F7B0 = 0; + gAnimFramesToWait = 0; } else { - gUnknown_0202F7B0 = 1; + gAnimFramesToWait = 1; } } @@ -603,22 +620,23 @@ static void ScriptCmd_hang2(void) static void ScriptCmd_end(void) { s32 i; - int zero = 0; + bool32 continuousAnim = FALSE; - if (gUnknown_0202F7B2 != 0 || gUnknown_0202F7B3 != 0 - || gUnknown_0202F7C2[0] != 0xFF || gUnknown_0202F7C2[1] != 0xFF) + // keep waiting as long as there is animations to be done. + if (gAnimVisualTaskCount != 0 || gAnimSoundTaskCount != 0 + || gMonAnimTaskIdArray[0] != 0xFF || gMonAnimTaskIdArray[1] != 0xFF) { - gUnknown_03004AF0 = 0; - gUnknown_0202F7B0 = 1; + gSoundAnimFramesToWait = 0; + gAnimFramesToWait = 1; return; } + // finish the sound effects. if (IsSEPlaying()) { - gUnknown_03004AF0++; - if (gUnknown_03004AF0 <= 0x5A) + if (++gSoundAnimFramesToWait <= 90) // wait 90 frames, then halt the sound effect. { - gUnknown_0202F7B0 = 1; + gAnimFramesToWait = 1; return; } else @@ -627,25 +645,29 @@ static void ScriptCmd_end(void) m4aMPlayStop(&gMPlay_SE2); } } - gUnknown_03004AF0 = 0; + + // the SE has halted, so set the SE Frame Counter to 0 and continue. + gSoundAnimFramesToWait = 0; + for (i = 0; i < 8; i++) { - if (gUnknown_03004B10[i] != 0xFFFF) + if (gAnimSpriteIndexArray[i] != 0xFFFF) { - FreeSpriteTilesByTag(gBattleAnimPicTable[gUnknown_03004B10[i]].tag); - FreeSpritePaletteByTag(gBattleAnimPicTable[gUnknown_03004B10[i]].tag); - gUnknown_03004B10[i] |= 0xFFFF; + FreeSpriteTilesByTag(gBattleAnimPicTable[gAnimSpriteIndexArray[i]].tag); + FreeSpritePaletteByTag(gBattleAnimPicTable[gAnimSpriteIndexArray[i]].tag); + gAnimSpriteIndexArray[i] |= 0xFFFF; // set terminator. } } - if (zero == 0) + + if (continuousAnim == FALSE) // may have been used for debug? { m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); - if (sub_8076BE0() == 0) + if (IsContest() == 0) { sub_8079E24(); sub_8043EB4(1); } - gUnknown_0202F7B1 = 0; + gAnimScriptActive = FALSE; } } @@ -672,14 +694,14 @@ static void ScriptCmd_monbg(void) else if (r6 == 1) r6 = 3; if (r6 == 0 || r6 == 2) - r5 = gUnknown_0202F7C8; + r5 = gBattleAnimPlayerMonIndex; else - r5 = gUnknown_0202F7C9; + r5 = gBattleAnimEnemyMonIndex; if (b_side_obj__get_some_boolean(r5)) { r0 = battle_get_per_side_status(r5); r0 += 0xFF; - if (r0 <= 1 || sub_8076BE0() != 0) + if (r0 <= 1 || IsContest() != 0) r7 = 0; else r7 = 1; @@ -701,7 +723,7 @@ static void ScriptCmd_monbg(void) } gTasks[taskId].data[5] = r7; gTasks[taskId].data[6] = r5; - gUnknown_0202F7C2[0] = taskId; + gMonAnimTaskIdArray[0] = taskId; } r5 ^= 2; @@ -709,7 +731,7 @@ static void ScriptCmd_monbg(void) { r0 = battle_get_per_side_status(r5); r0 += 0xFF; - if (r0 <= 1 || sub_8076BE0() != 0) + if (r0 <= 1 || IsContest() != 0) r7 = 0; else r7 = 1; @@ -731,7 +753,7 @@ static void ScriptCmd_monbg(void) } gTasks[taskId].data[5] = r7; gTasks[taskId].data[6] = r5; - gUnknown_0202F7C2[1] = taskId; + gMonAnimTaskIdArray[1] = taskId; } gBattleAnimScriptPtr++; } @@ -739,17 +761,17 @@ static void ScriptCmd_monbg(void) #ifdef NONMATCHING bool8 b_side_obj__get_some_boolean(u8 a) { - if (sub_8076BE0() != 0) + if (IsContest() != 0) { - if (a == gUnknown_0202F7C8) + if (a == gBattleAnimPlayerMonIndex) return TRUE; else return FALSE; } if (sub_8078874(a) == 0) return FALSE; - if (sub_8076BE0() != 0) - return TRUE; + if (IsContest() != 0) + return TRUE; // this line wont ever be reached. if ((EWRAM_17800[a].unk0 & 1) == 0) return TRUE; if (gSprites[gUnknown_02024BE0[a]].invisible) @@ -765,24 +787,24 @@ bool8 b_side_obj__get_some_boolean(u8 a) lsls r0, 24\n\ lsrs r4, r0, 24\n\ adds r5, r4, 0\n\ - bl sub_8076BE0\n\ + bl IsContest\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _08075FDC\n\ - ldr r0, _08075FD8 @ =gUnknown_0202F7C8\n\ + ldr r0, _08075FD8 @ =gBattleAnimPlayerMonIndex\n\ ldrb r0, [r0]\n\ cmp r4, r0\n\ beq _0807601C\n\ b _0807602C\n\ .align 2, 0\n\ -_08075FD8: .4byte gUnknown_0202F7C8\n\ +_08075FD8: .4byte gBattleAnimPlayerMonIndex\n\ _08075FDC:\n\ adds r0, r4, 0\n\ bl sub_8078874\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _0807602C\n\ - bl sub_8076BE0\n\ + bl IsContest\n\ lsls r0, 24\n\ cmp r0, 0\n\ bne _0807601C\n\ @@ -863,7 +885,7 @@ void sub_8076034(u8 a, u8 b) spriteId = gUnknown_02024BE0[a]; gUnknown_030042C0 = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; - if (sub_8076BE0() != 0 && sub_80AEB1C(EWRAM_19348) != 0) + if (IsContest() != 0 && sub_80AEB1C(EWRAM_19348) != 0) gUnknown_030042C0--; gUnknown_030041B4 = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; gSprites[gUnknown_02024BE0[a]].invisible = TRUE; @@ -875,12 +897,12 @@ void sub_8076034(u8 a, u8 b) addr3 = (u16 *)PLTT + s.unk8 * 16; DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32); - if (sub_8076BE0() != 0) + if (IsContest() != 0) r2 = 0; else r2 = battle_get_per_side_status(a); sub_80E4EF8(0, 0, r2, s.unk8, (u32)s.unk0, (((s32)s.unk4 - VRAM) / 2048), REG_BG1CNT_BITFIELD.charBaseBlock); - if (sub_8076BE0() != 0) + if (IsContest() != 0) sub_8076380(); } else @@ -982,7 +1004,7 @@ void sub_8076464(u8 a) struct UnknownStruct2 s; sub_8078914(&s); - if (a == 0 || sub_8076BE0() != 0) + if (a == 0 || IsContest() != 0) { u16 *addr2; @@ -1082,12 +1104,12 @@ static void ScriptCmd_clearmonbg(void) else if (r4 == 1) r4 = 3; if (r4 == 0 || r4 == 2) - r5 = gUnknown_0202F7C8; + r5 = gBattleAnimPlayerMonIndex; else - r5 = gUnknown_0202F7C9; - if (gUnknown_0202F7C2[0] != 0xFF) + r5 = gBattleAnimEnemyMonIndex; + if (gMonAnimTaskIdArray[0] != 0xFF) gSprites[gUnknown_02024BE0[r5]].invisible = FALSE; - if (r4 > 1 && gUnknown_0202F7C2[1] != 0xFF) + if (r4 > 1 && gMonAnimTaskIdArray[1] != 0xFF) gSprites[gUnknown_02024BE0[r5 ^ 2]].invisible = FALSE; else r4 = 0; @@ -1107,21 +1129,21 @@ static void sub_807672C(u8 taskId) { var = battle_get_per_side_status(gTasks[taskId].data[2]); var += 0xFF; - if (var <= 1 || sub_8076BE0() != 0) + if (var <= 1 || IsContest() != 0) r4 = 0; else r4 = 1; - if (gUnknown_0202F7C2[0] != 0xFF) + if (gMonAnimTaskIdArray[0] != 0xFF) { sub_8076464(r4); - DestroyTask(gUnknown_0202F7C2[0]); - gUnknown_0202F7C2[0] = 0xFF; + DestroyTask(gMonAnimTaskIdArray[0]); + gMonAnimTaskIdArray[0] = 0xFF; } if (gTasks[taskId].data[0] > 1) { sub_8076464(r4 ^ 1); - DestroyTask(gUnknown_0202F7C2[1]); - gUnknown_0202F7C2[1] = 0xFF; + DestroyTask(gMonAnimTaskIdArray[1]); + gMonAnimTaskIdArray[1] = 0xFF; } DestroyTask(taskId); } @@ -1141,14 +1163,14 @@ static void ScriptCmd_monbg_22(void) else if (r5 == 1) r5 = 3; if (r5 == 0 || r5 == 2) - r4 = gUnknown_0202F7C8; + r4 = gBattleAnimPlayerMonIndex; else - r4 = gUnknown_0202F7C9; + r4 = gBattleAnimEnemyMonIndex; if (b_side_obj__get_some_boolean(r4)) { r0 = battle_get_per_side_status(r4); r0 += 0xFF; - if (r0 <= 1 || sub_8076BE0() != 0) + if (r0 <= 1 || IsContest() != 0) r1 = 0; else r1 = 1; @@ -1160,7 +1182,7 @@ static void ScriptCmd_monbg_22(void) { r0 = battle_get_per_side_status(r4); r0 += 0xFF; - if (r0 <= 1 || sub_8076BE0() != 0) + if (r0 <= 1 || IsContest() != 0) r1 = 0; else r1 = 1; @@ -1183,9 +1205,9 @@ static void ScriptCmd_clearmonbg_23(void) else if (r5 == 1) r5 = 3; if (r5 == 0 || r5 == 2) - r6 = gUnknown_0202F7C8; + r6 = gBattleAnimPlayerMonIndex; else - r6 = gUnknown_0202F7C9; + r6 = gBattleAnimEnemyMonIndex; if (b_side_obj__get_some_boolean(r6)) gSprites[gUnknown_02024BE0[r6]].invisible = FALSE; if (r5 > 1 && b_side_obj__get_some_boolean(r6 ^ 2)) @@ -1210,7 +1232,7 @@ static void sub_80769A4(u8 taskId) r4 = gTasks[taskId].data[2]; r0 = battle_get_per_side_status(r4); r0 += 0xFF; - if (r0 <= 1 || sub_8076BE0() != 0) + if (r0 <= 1 || IsContest() != 0) r5 = 0; else r5 = 1; @@ -1320,8 +1342,8 @@ static void ScriptCmd_jump(void) gBattleAnimScriptPtr = (u8 *)addr; } -//IsContest, maybe -bool8 sub_8076BE0(void) +// Uses of this function that rely on a TRUE return are expecting inBattle to not be ticked as defined in contest behavior. As a result, if misused, this function cannot reliably discern between field and contest status and could result in undefined behavior. +bool8 IsContest(void) { if (!gMain.inBattle) return TRUE; @@ -1355,9 +1377,9 @@ static void ScriptCmd_fadetobg_25(void) r6 = gBattleAnimScriptPtr[2]; gBattleAnimScriptPtr += 3; taskId = CreateTask(task_p5_load_battle_screen_elements, 5); - if (sub_8076BE0() != 0) + if (IsContest() != 0) gTasks[taskId].data[0] = r6; - else if (battle_side_get_owner(gUnknown_0202F7C9) == 0) + else if (battle_side_get_owner(gBattleAnimEnemyMonIndex) == 0) gTasks[taskId].data[0] = r7; else gTasks[taskId].data[0] = r8; @@ -1402,15 +1424,15 @@ static void task_p5_load_battle_screen_elements(u8 taskId) static void sub_8076DB8(u16 a) { - if (sub_8076BE0()) + if (IsContest()) { void *tilemap = gBattleAnimBackgroundTable[a].tilemap; void *dmaSrc; void *dmaDest; - sub_800D238(tilemap, sub_8076BE0() ? EWRAM_14800 : EWRAM_18000); - sub_80763FC(sub_80789BC(), sub_8076BE0() ? EWRAM_14800 : EWRAM_18000, 0x100, 0); - dmaSrc = sub_8076BE0() ? EWRAM_14800 : EWRAM_18000; + sub_800D238(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000); + sub_80763FC(sub_80789BC(), IsContest() ? EWRAM_14800 : EWRAM_18000, 0x100, 0); + dmaSrc = IsContest() ? EWRAM_14800 : EWRAM_18000; dmaDest = (void *)(VRAM + 0xD000); DmaCopy32(3, dmaSrc, dmaDest, 0x800); LZDecompressVram(gBattleAnimBackgroundTable[a].image, (void *)(VRAM + 0x2000)); @@ -1426,7 +1448,7 @@ static void sub_8076DB8(u16 a) static void dp01t_11_3_message_for_player_only(void) { - if (sub_8076BE0()) + if (IsContest()) sub_80AB2AC(); else sub_800D7B8(); @@ -1447,11 +1469,11 @@ static void ScriptCmd_waitbgfadeout(void) if (gUnknown_0202F7C5 == 2) { gBattleAnimScriptPtr++; - gUnknown_0202F7B0 = 0; + gAnimFramesToWait = 0; } else { - gUnknown_0202F7B0 = 1; + gAnimFramesToWait = 1; } } @@ -1460,11 +1482,11 @@ static void ScriptCmd_waitbgfadein(void) if (gUnknown_0202F7C5 == 0) { gBattleAnimScriptPtr++; - gUnknown_0202F7B0 = 0; + gAnimFramesToWait = 0; } else { - gUnknown_0202F7B0 = 1; + gAnimFramesToWait = 1; } } @@ -1479,16 +1501,16 @@ static void ScriptCmd_changebg(void) /* s8 sub_8076F98(s8 a) { - if (!sub_8076BE0() && (EWRAM_17810[gUnknown_0202F7C8].unk0 & 0x10)) + if (!IsContest() && (EWRAM_17810[gBattleAnimPlayerMonIndex].unk0 & 0x10)) { - a = battle_side_get_owner(gUnknown_0202F7C8) ? 0xC0 : 0x3F; + a = battle_side_get_owner(gBattleAnimPlayerMonIndex) ? 0xC0 : 0x3F; } //_08076FDC else { - if (sub_8076BE0()) + if (IsContest()) { - if (gUnknown_0202F7C8 == gUnknown_0202F7C9 && gUnknown_0202F7C8 == 2 + if (gBattleAnimPlayerMonIndex == gBattleAnimEnemyMonIndex && gBattleAnimPlayerMonIndex == 2 && a == 0x3F) { //jump to _0807707A @@ -1500,9 +1522,9 @@ s8 sub_8076F98(s8 a) //_08077004 else { - if (battle_side_get_owner(gUnknown_0202F7C8) == 0) + if (battle_side_get_owner(gBattleAnimPlayerMonIndex) == 0) { - if (battle_side_get_owner(gUnknown_0202F7C9) == 0) + if (battle_side_get_owner(gBattleAnimEnemyMonIndex) == 0) } //_08077042 else @@ -1522,11 +1544,11 @@ s8 sub_8076F98(s8 a) push {r4,lr}\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - bl sub_8076BE0\n\ + bl IsContest\n\ lsls r0, 24\n\ cmp r0, 0\n\ bne _08076FDC\n\ - ldr r0, _08076FD4 @ =gUnknown_0202F7C8\n\ + ldr r0, _08076FD4 @ =gBattleAnimPlayerMonIndex\n\ ldrb r2, [r0]\n\ lsls r0, r2, 1\n\ adds r0, r2\n\ @@ -1547,15 +1569,15 @@ s8 sub_8076F98(s8 a) movs r4, 0x3F\n\ b _0807706E\n\ .align 2, 0\n\ -_08076FD4: .4byte gUnknown_0202F7C8\n\ +_08076FD4: .4byte gBattleAnimPlayerMonIndex\n\ _08076FD8: .4byte 0x02017810\n\ _08076FDC:\n\ - bl sub_8076BE0\n\ + bl IsContest\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _08077004\n\ - ldr r0, _08076FFC @ =gUnknown_0202F7C8\n\ - ldr r1, _08077000 @ =gUnknown_0202F7C9\n\ + ldr r0, _08076FFC @ =gBattleAnimPlayerMonIndex\n\ + ldr r1, _08077000 @ =gBattleAnimEnemyMonIndex\n\ ldrb r0, [r0]\n\ ldrb r1, [r1]\n\ cmp r0, r1\n\ @@ -1566,16 +1588,16 @@ _08076FDC:\n\ beq _0807707A\n\ b _08077068\n\ .align 2, 0\n\ -_08076FFC: .4byte gUnknown_0202F7C8\n\ -_08077000: .4byte gUnknown_0202F7C9\n\ +_08076FFC: .4byte gBattleAnimPlayerMonIndex\n\ +_08077000: .4byte gBattleAnimEnemyMonIndex\n\ _08077004:\n\ - ldr r0, _0807702C @ =gUnknown_0202F7C8\n\ + ldr r0, _0807702C @ =gBattleAnimPlayerMonIndex\n\ ldrb r0, [r0]\n\ bl battle_side_get_owner\n\ lsls r0, 24\n\ cmp r0, 0\n\ bne _08077042\n\ - ldr r0, _08077030 @ =gUnknown_0202F7C9\n\ + ldr r0, _08077030 @ =gBattleAnimEnemyMonIndex\n\ ldrb r0, [r0]\n\ bl battle_side_get_owner\n\ lsls r0, 24\n\ @@ -1588,8 +1610,8 @@ _08077004:\n\ movs r4, 0xC0\n\ b _0807706E\n\ .align 2, 0\n\ -_0807702C: .4byte gUnknown_0202F7C8\n\ -_08077030: .4byte gUnknown_0202F7C9\n\ +_0807702C: .4byte gBattleAnimPlayerMonIndex\n\ +_08077030: .4byte gBattleAnimEnemyMonIndex\n\ _08077034:\n\ movs r0, 0x40\n\ negs r0, r0\n\ @@ -1599,7 +1621,7 @@ _08077034:\n\ lsls r0, 24\n\ b _0807706C\n\ _08077042:\n\ - ldr r0, _08077064 @ =gUnknown_0202F7C9\n\ + ldr r0, _08077064 @ =gBattleAnimEnemyMonIndex\n\ ldrb r0, [r0]\n\ bl battle_side_get_owner\n\ lsls r0, 24\n\ @@ -1615,7 +1637,7 @@ _08077042:\n\ movs r4, 0x3F\n\ b _0807706E\n\ .align 2, 0\n\ -_08077064: .4byte gUnknown_0202F7C9\n\ +_08077064: .4byte gBattleAnimEnemyMonIndex\n\ _08077068:\n\ lsls r0, r4, 24\n\ negs r0, r0\n\ @@ -1647,16 +1669,16 @@ _08077088:\n\ s8 sub_8077094(s8 a) { - if (!sub_8076BE0() && (EWRAM_17810[gUnknown_0202F7C8].unk0 & 0x10)) + if (!IsContest() && (EWRAM_17810[gBattleAnimPlayerMonIndex].unk0 & 0x10)) { - if (battle_side_get_owner(gUnknown_0202F7C8) != 0) + if (battle_side_get_owner(gBattleAnimPlayerMonIndex) != 0) a = 0x3F; else a = 0xC0; } else { - if (battle_side_get_owner(gUnknown_0202F7C8) != 0 || sub_8076BE0() != 0) + if (battle_side_get_owner(gBattleAnimPlayerMonIndex) != 0 || IsContest() != 0) a = -a; } return a; @@ -1735,7 +1757,7 @@ static void ScriptCmd_panse_1B(void) gTasks[taskId].data[3] = r7; gTasks[taskId].data[4] = panning; PlaySE12WithPanning(songNum, panning); - gUnknown_0202F7B3++; + gAnimSoundTaskCount++; gBattleAnimScriptPtr += 6; } @@ -1763,7 +1785,7 @@ static void c3_08073CEC(u8 taskId) { r4 = r3; DestroyTask(taskId); - gUnknown_0202F7B3--; + gAnimSoundTaskCount--; } //_080772D8 else @@ -1773,7 +1795,7 @@ static void c3_08073CEC(u8 taskId) if (r4 < r3) goto check; DestroyTask(taskId); - gUnknown_0202F7B3--; + gAnimSoundTaskCount--; } else { @@ -1783,7 +1805,7 @@ static void c3_08073CEC(u8 taskId) if (r7 != 0) { DestroyTask(taskId); - gUnknown_0202F7B3--; + gAnimSoundTaskCount--; } } } @@ -1857,7 +1879,7 @@ _080772FC:\n\ lsrs r4, r2, 16\n\ adds r0, r5, 0\n\ bl DestroyTask\n\ - ldr r1, _0807731C @ =gUnknown_0202F7B3\n\ + ldr r1, _0807731C @ =gAnimSoundTaskCount\n\ ldrb r0, [r1]\n\ subs r0, 0x1\n\ strb r0, [r1]\n\ @@ -1870,7 +1892,7 @@ _08077314:\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ -_0807731C: .4byte gUnknown_0202F7B3\n\ +_0807731C: .4byte gAnimSoundTaskCount\n\ .syntax divided\n"); } #endif @@ -1897,7 +1919,7 @@ static void ScriptCmd_panse_26(void) gTasks[taskId].data[3] = r10; gTasks[taskId].data[4] = r4; PlaySE12WithPanning(r8, r4); - gUnknown_0202F7B3++; + gAnimSoundTaskCount++; gBattleAnimScriptPtr += 6; } @@ -1929,7 +1951,7 @@ static void ScriptCmd_panse_27(void) gTasks[taskId].data[3] = r7; gTasks[taskId].data[4] = r6; PlaySE12WithPanning(r9, r6); - gUnknown_0202F7B3++; + gAnimSoundTaskCount++; gBattleAnimScriptPtr += 6; } @@ -1955,7 +1977,7 @@ static void ScriptCmd_panse_1C(void) gTasks[taskId].data[3] = r9; gTasks[taskId].data[8] = r8; gTasks[taskId].func(taskId); - gUnknown_0202F7B3++; + gAnimSoundTaskCount++; gBattleAnimScriptPtr += 5; } @@ -1979,7 +2001,7 @@ static void sub_80774FC(u8 taskId) if (r4 == 0) { DestroyTask(taskId); - gUnknown_0202F7B3--; + gAnimSoundTaskCount--; } } } @@ -2001,7 +2023,7 @@ static void ScriptCmd_panse_1D(void) gTasks[taskId].data[0] = r5; gTasks[taskId].data[1] = r4; gTasks[taskId].data[2] = r8; - gUnknown_0202F7B3++; + gAnimSoundTaskCount++; gBattleAnimScriptPtr += 4; } @@ -2015,7 +2037,7 @@ static void sub_80775CC(u8 taskId) { PlaySE12WithPanning(gTasks[taskId].data[0], gTasks[taskId].data[1]); DestroyTask(taskId); - gUnknown_0202F7B3--; + gAnimSoundTaskCount--; } } @@ -2038,35 +2060,34 @@ static void ScriptCmd_createtask_1F(void) } taskId = CreateTask(func, 1); func(taskId); - gUnknown_0202F7B3++; + gAnimSoundTaskCount++; } static void ScriptCmd_waitsound(void) { - if (gUnknown_0202F7B3 != 0) + if (gAnimSoundTaskCount != 0) { - gUnknown_03004AF0 = 0; - gUnknown_0202F7B0 = 1; + gSoundAnimFramesToWait = 0; + gAnimFramesToWait = 1; } else if (IsSEPlaying()) { - gUnknown_03004AF0++; - if (gUnknown_03004AF0 > 0x5A) + if (++gSoundAnimFramesToWait > 90) { m4aMPlayStop(&gMPlay_SE1); m4aMPlayStop(&gMPlay_SE2); - gUnknown_03004AF0 = 0; + gSoundAnimFramesToWait = 0; } else { - gUnknown_0202F7B0 = 1; + gAnimFramesToWait = 1; } } else { - gUnknown_03004AF0 = 0; + gSoundAnimFramesToWait = 0; gBattleAnimScriptPtr++; - gUnknown_0202F7B0 = 0; + gAnimFramesToWait = 0; } } @@ -2095,7 +2116,7 @@ static void ScriptCmd_jumpunkcond(void) u8 *addr; gBattleAnimScriptPtr++; - if (sub_8076BE0()) + if (IsContest()) { addr = (u8 *)SCRIPT_READ_32(gBattleAnimScriptPtr); gBattleAnimScriptPtr = addr; @@ -2115,11 +2136,11 @@ static void ScriptCmd_monbgprio_28(void) r2 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; if (r2 != 0) - r0 = gUnknown_0202F7C9; + r0 = gBattleAnimEnemyMonIndex; else - r0 = gUnknown_0202F7C8; + r0 = gBattleAnimPlayerMonIndex; r4 = battle_get_per_side_status(r0); - if (!sub_8076BE0() && (r4 == 0 || r4 == 3)) + if (!IsContest() && (r4 == 0 || r4 == 3)) { REG_BG1CNT_BITFIELD.priority = 1; REG_BG2CNT_BITFIELD.priority = 2; @@ -2129,7 +2150,7 @@ static void ScriptCmd_monbgprio_28(void) static void ScriptCmd_monbgprio_29(void) { gBattleAnimScriptPtr++; - if (!sub_8076BE0()) + if (!IsContest()) { REG_BG1CNT_BITFIELD.priority = 1; REG_BG2CNT_BITFIELD.priority = 2; @@ -2144,14 +2165,14 @@ static void ScriptCmd_monbgprio_2A(void) r6 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; - if (battle_side_get_owner(gUnknown_0202F7C8) != battle_side_get_owner(gUnknown_0202F7C9)) + if (battle_side_get_owner(gBattleAnimPlayerMonIndex) != battle_side_get_owner(gBattleAnimEnemyMonIndex)) { if (r6 != 0) - r0 = gUnknown_0202F7C9; + r0 = gBattleAnimEnemyMonIndex; else - r0 = gUnknown_0202F7C8; + r0 = gBattleAnimPlayerMonIndex; r4 = battle_get_per_side_status(r0); - if (!sub_8076BE0() && (r4 == 0 || r4 == 3)) + if (!IsContest() && (r4 == 0 || r4 == 3)) { REG_BG1CNT_BITFIELD.priority = 1; REG_BG2CNT_BITFIELD.priority = 2; @@ -2195,17 +2216,17 @@ static void ScriptCmd_doublebattle_2D(void) r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; - if (!sub_8076BE0() && IsDoubleBattle() - && battle_side_get_owner(gUnknown_0202F7C8) == battle_side_get_owner(gUnknown_0202F7C9)) + if (!IsContest() && IsDoubleBattle() + && battle_side_get_owner(gBattleAnimPlayerMonIndex) == battle_side_get_owner(gBattleAnimEnemyMonIndex)) { if (r7 == 0) { - r4 = battle_get_per_side_status_permutated(gUnknown_0202F7C8); + r4 = battle_get_per_side_status_permutated(gBattleAnimPlayerMonIndex); spriteId = obj_id_for_side_relative_to_move(0); } else { - r4 = battle_get_per_side_status_permutated(gUnknown_0202F7C9); + r4 = battle_get_per_side_status_permutated(gBattleAnimEnemyMonIndex); spriteId = obj_id_for_side_relative_to_move(1); } if (spriteId != 0xFF) @@ -2229,17 +2250,17 @@ static void ScriptCmd_doublebattle_2E(void) r7 = SCRIPT_READ_8(gBattleAnimScriptPtr + 1); gBattleAnimScriptPtr += 2; - if (!sub_8076BE0() && IsDoubleBattle() - && battle_side_get_owner(gUnknown_0202F7C8) == battle_side_get_owner(gUnknown_0202F7C9)) + if (!IsContest() && IsDoubleBattle() + && battle_side_get_owner(gBattleAnimPlayerMonIndex) == battle_side_get_owner(gBattleAnimEnemyMonIndex)) { if (r7 == 0) { - r4 = battle_get_per_side_status_permutated(gUnknown_0202F7C8); + r4 = battle_get_per_side_status_permutated(gBattleAnimPlayerMonIndex); spriteId = obj_id_for_side_relative_to_move(0); } else { - r4 = battle_get_per_side_status_permutated(gUnknown_0202F7C9); + r4 = battle_get_per_side_status_permutated(gBattleAnimEnemyMonIndex); spriteId = obj_id_for_side_relative_to_move(1); } if (spriteId != 0xFF && r4 == 2) |