diff options
Diffstat (limited to 'src/battle/battle_anim.c')
-rw-r--r-- | src/battle/battle_anim.c | 1799 |
1 files changed, 770 insertions, 1029 deletions
diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 1a78b2863..8242a1ddd 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -17,42 +17,45 @@ // 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) +#define ANIM_SPRITE_INDEX_COUNT 8 +#define ANIM_ARGS_COUNT 8 + extern u16 gBattlePartyID[4]; extern u8 gObjectBankIDs[]; extern u8 gBankAttacker; extern u8 gBankTarget; -EWRAM_DATA const u8 *gBattleAnimScriptPtr = NULL; +EWRAM_DATA const u8 *sBattleAnimScriptPtr = NULL; EWRAM_DATA const u8 *gBattleAnimScriptRetAddr = NULL; 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 gDisableStructMoveAnim = 0; -EWRAM_DATA u32 gMoveDmgMoveAnim = 0; -EWRAM_DATA u16 gMovePowerMoveAnim = 0; -EWRAM_DATA u8 gHappinessMoveAnim = 0; +EWRAM_DATA struct DisableStruct *gAnimDisableStructPtr = NULL; +EWRAM_DATA u32 gAnimMoveDmg = 0; +EWRAM_DATA u16 gAnimMovePower = 0; +EWRAM_DATA u8 gAnimFriendship = 0; EWRAM_DATA u16 gWeatherMoveAnim = 0; EWRAM_DATA u8 gMonAnimTaskIdArray[2] = {0}; -EWRAM_DATA u8 gUnknown_0202F7C4 = 0; -EWRAM_DATA u8 gUnknown_0202F7C5 = 0; -EWRAM_DATA u16 gAnimMoveIndex = 0; // set but unused. -EWRAM_DATA u8 gBattleAnimBankAttacker = 0; -EWRAM_DATA u8 gBattleAnimBankTarget = 0; -EWRAM_DATA u16 gUnknown_0202F7CA[4] = {0}; +EWRAM_DATA u8 gAnimMoveTurn = 0; +EWRAM_DATA u8 sAnimBackgroundFadeState = 0; +EWRAM_DATA u16 sAnimMoveIndex = 0; // set but unused. +EWRAM_DATA u8 gAnimBankAttacker = 0; +EWRAM_DATA u8 gAnimBankTarget = 0; +EWRAM_DATA u16 gAnimSpeciesByBanks[4] = {0}; EWRAM_DATA u8 gUnknown_0202F7D2 = 0; -extern u16 gUnknown_030041B4; -extern u16 gUnknown_03004200; -extern u16 gUnknown_03004240; -extern u16 gUnknown_03004244; -extern u16 gUnknown_03004280; -extern u16 gUnknown_03004288; -extern u16 gUnknown_030042C0; -extern u16 gUnknown_030042C4; +extern u16 gBattle_BG1_Y; +extern u16 gBattle_WIN1H; +extern u16 gBattle_WIN0V; +extern u16 gBattle_WIN1V; +extern u16 gBattle_BG2_Y; +extern u16 gBattle_BG2_X; +extern u16 gBattle_BG1_X; +extern u16 gBattle_WIN0H; u16 gSoundAnimFramesToWait; -s16 gBattleAnimArgs[8]; -u16 gAnimSpriteIndexArray[8]; +s16 gBattleAnimArgs[ANIM_ARGS_COUNT]; +u16 gAnimSpriteIndexArray[ANIM_SPRITE_INDEX_COUNT]; extern struct MusicPlayerInfo gMPlay_BGM; extern struct MusicPlayerInfo gMPlay_SE1; @@ -65,10 +68,10 @@ extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; extern const struct BattleAnimBackground gBattleAnimBackgroundTable[]; 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_loadspritegfx(void); +static void ScriptCmd_unloadspritegfx(void); +static void ScriptCmd_createsprite(void); +static void ScriptCmd_createvisualtask(void); static void ScriptCmd_delay(void); static void ScriptCmd_waitforvisualfinish(void); static void ScriptCmd_hang1(void); @@ -88,33 +91,33 @@ static void ScriptCmd_setbldcnt(void); static void ScriptCmd_blendoff(void); static void ScriptCmd_call(void); static void ScriptCmd_return(void); -static void ScriptCmd_setvar(void); -static void ScriptCmd_ifelse(void); -static void ScriptCmd_jumpif(void); +static void ScriptCmd_setarg(void); +static void ScriptCmd_choosetwoturnanim(void); +static void ScriptCmd_jumpifmoveturn(void); static void ScriptCmd_jump(void); static void ScriptCmd_fadetobg(void); -static void ScriptCmd_fadetobg_25(void); -static void task_p5_load_battle_screen_elements(u8); -static void sub_8076DB8(u16); -static void dp01t_11_3_message_for_player_only(void); +static void ScriptCmd_fadetobgfromset(void); +static void Task_FadeToBg(u8); +static void LoadMoveBg(u16); +static void LoadDefaultBg(void); static void ScriptCmd_restorebg(void); static void ScriptCmd_waitbgfadeout(void); static void ScriptCmd_waitbgfadein(void); static void ScriptCmd_changebg(void); -static void ScriptCmd_panse_19(void); +static void ScriptCmd_playsewithpan(void); static void ScriptCmd_setpan(void); static void ScriptCmd_panse_1B(void); -static void c3_08073CEC(u8); +static void Task_PanFromInitialToTarget(u8); static void ScriptCmd_panse_26(void); static void ScriptCmd_panse_27(void); -static void ScriptCmd_panse_1C(void); -static void sub_80774FC(u8); -static void ScriptCmd_panse_1D(void); -static void sub_80775CC(u8); -static void ScriptCmd_createtask_1F(void); +static void ScriptCmd_loopsewithpan(void); +static void Task_LoopAndPlaySE(u8); +static void ScriptCmd_waitplaysewithpan(void); +static void Task_WaitAndPlaySE(u8); +static void ScriptCmd_createsoundtask(void); static void ScriptCmd_waitsound(void); -static void ScriptCmd_jumpvareq(void); -static void ScriptCmd_jumpunkcond(void); +static void ScriptCmd_jumpargeq(void); +static void ScriptCmd_jumpifcontest(void); static void ScriptCmd_monbgprio_28(void); static void ScriptCmd_monbgprio_29(void); static void ScriptCmd_monbgprio_2A(void); @@ -125,10 +128,10 @@ static void ScriptCmd_doublebattle_2E(void); static void ScriptCmd_stopsound(void); static void (*const sScriptCmdTable[])(void) = { - ScriptCmd_loadsprite, - ScriptCmd_unloadsprite, - ScriptCmd_sprite, - ScriptCmd_createtask, + ScriptCmd_loadspritegfx, + ScriptCmd_unloadspritegfx, + ScriptCmd_createsprite, + ScriptCmd_createvisualtask, ScriptCmd_delay, ScriptCmd_waitforvisualfinish, ScriptCmd_hang1, @@ -141,28 +144,28 @@ static void (*const sScriptCmdTable[])(void) = { ScriptCmd_blendoff, ScriptCmd_call, ScriptCmd_return, - ScriptCmd_setvar, - ScriptCmd_ifelse, - ScriptCmd_jumpif, + ScriptCmd_setarg, + ScriptCmd_choosetwoturnanim, + ScriptCmd_jumpifmoveturn, ScriptCmd_jump, ScriptCmd_fadetobg, ScriptCmd_restorebg, ScriptCmd_waitbgfadeout, ScriptCmd_waitbgfadein, ScriptCmd_changebg, - ScriptCmd_panse_19, + ScriptCmd_playsewithpan, ScriptCmd_setpan, ScriptCmd_panse_1B, - ScriptCmd_panse_1C, - ScriptCmd_panse_1D, + ScriptCmd_loopsewithpan, + ScriptCmd_waitplaysewithpan, ScriptCmd_setbldcnt, - ScriptCmd_createtask_1F, + ScriptCmd_createsoundtask, ScriptCmd_waitsound, - ScriptCmd_jumpvareq, + ScriptCmd_jumpargeq, ScriptCmd_monbg_22, ScriptCmd_clearmonbg_23, - ScriptCmd_jumpunkcond, - ScriptCmd_fadetobg_25, + ScriptCmd_jumpifcontest, + ScriptCmd_fadetobgfromset, ScriptCmd_panse_26, ScriptCmd_panse_27, ScriptCmd_monbgprio_28, @@ -175,7 +178,7 @@ static void (*const sScriptCmdTable[])(void) = { ScriptCmd_stopsound, }; -void battle_anim_clear_some_data(void) +void ClearBattleAnimationVars(void) { s32 i; @@ -183,77 +186,77 @@ void battle_anim_clear_some_data(void) gAnimScriptActive = FALSE; gAnimVisualTaskCount = 0; gAnimSoundTaskCount = 0; - gDisableStructMoveAnim = 0; - gMoveDmgMoveAnim = 0; - gMovePowerMoveAnim = 0; - gHappinessMoveAnim = 0; + gAnimDisableStructPtr = NULL; + gAnimMoveDmg = 0; + gAnimMovePower = 0; + gAnimFriendship = 0; // clear index array. - for (i = 0; i < 8; i++) + for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) gAnimSpriteIndexArray[i] |= 0xFFFF; // clear anim args. - for (i = 0; i < 8; i++) + for (i = 0; i < ANIM_ARGS_COUNT; i++) gBattleAnimArgs[i] = 0; gMonAnimTaskIdArray[0] = 0xFF; gMonAnimTaskIdArray[1] = 0xFF; - gUnknown_0202F7C4 = 0; - gUnknown_0202F7C5 = 0; - gAnimMoveIndex = 0; - gBattleAnimBankAttacker = 0; - gBattleAnimBankTarget = 0; + gAnimMoveTurn = 0; + sAnimBackgroundFadeState = 0; + sAnimMoveIndex = 0; + gAnimBankAttacker = 0; + gAnimBankTarget = 0; gUnknown_0202F7D2 = 0; } -void ExecuteMoveAnim(u16 move) +void DoMoveAnim(u16 move) { - gBattleAnimBankAttacker = gBankAttacker; - gBattleAnimBankTarget = gBankTarget; - DoMoveAnim(gBattleAnims_Moves, move, 1); + gAnimBankAttacker = gBankAttacker; + gAnimBankTarget = gBankTarget; + LaunchBattleAnimation(gBattleAnims_Moves, move, TRUE); } -void DoMoveAnim(const u8 *const moveAnims[], u16 move, u8 c) +void LaunchBattleAnimation(const u8 *const moveAnims[], u16 move, u8 isMoveAnim) { s32 i; - if (NotInBattle() == 0) + if (!IsContest()) { sub_8079E24(); - sub_8043EB4(0); + UpdateOamPriorityInAllHealthboxes(0); for (i = 0; i < 4; i++) { if (GetBankSide(i) != 0) - gUnknown_0202F7CA[i] = GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_SPECIES); + gAnimSpeciesByBanks[i] = GetMonData(&gEnemyParty[gBattlePartyID[i]], MON_DATA_SPECIES); else - gUnknown_0202F7CA[i] = GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_SPECIES); + gAnimSpeciesByBanks[i] = GetMonData(&gPlayerParty[gBattlePartyID[i]], MON_DATA_SPECIES); } } else { for (i = 0; i < 4; i++) - gUnknown_0202F7CA[i] = EWRAM_19348; + gAnimSpeciesByBanks[i] = EWRAM_19348; } - if (c == 0) - gAnimMoveIndex = 0; + if (isMoveAnim == 0) + sAnimMoveIndex = 0; else - gAnimMoveIndex = move; + sAnimMoveIndex = move; - for (i = 0; i < 8; i++) + for (i = 0; i < ANIM_ARGS_COUNT; i++) gBattleAnimArgs[i] = 0; gMonAnimTaskIdArray[0] = 0xFF; gMonAnimTaskIdArray[1] = 0xFF; - gBattleAnimScriptPtr = moveAnims[move]; + sBattleAnimScriptPtr = moveAnims[move]; gAnimScriptActive = TRUE; gAnimFramesToWait = 0; gAnimScriptCallback = RunAnimScriptCommand; - for (i = 0; i < 8; i++) + for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) gAnimSpriteIndexArray[i] |= 0xFFFF; - if (c != 0) + if (isMoveAnim) { for (i = 0; gUnknown_081C7160[i] != 0xFFFF; i++) { @@ -265,13 +268,13 @@ void DoMoveAnim(const u8 *const moveAnims[], u16 move, u8 c) } } - gUnknown_030042C4 = 0; - gUnknown_03004240 = 0; - gUnknown_03004200 = 0; - gUnknown_03004244 = 0; + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + gBattle_WIN1H = 0; + gBattle_WIN1V = 0; } -void move_anim_8072740(struct Sprite *sprite) +void DestroyAnimSprite(struct Sprite *sprite) { FreeSpriteOamMatrix(sprite); DestroySprite(sprite); @@ -294,7 +297,7 @@ static void AddSpriteIndex(u16 index) { s32 i; - for (i = 0; i < 8; i++) + for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) { if (gAnimSpriteIndexArray[i] == 0xFFFF) { @@ -308,7 +311,7 @@ static void ClearSpriteIndex(u16 index) { s32 i; - for (i = 0; i < 8; i++) + for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) { if (gAnimSpriteIndexArray[i] == index) { @@ -335,222 +338,87 @@ static void RunAnimScriptCommand(void) { do { - sScriptCmdTable[T1_READ_8(gBattleAnimScriptPtr)](); - } while (gAnimFramesToWait == 0 && gAnimScriptActive != FALSE); + sScriptCmdTable[T1_READ_8(sBattleAnimScriptPtr)](); + } while (gAnimFramesToWait == 0 && gAnimScriptActive); } -static void ScriptCmd_loadsprite(void) +static void ScriptCmd_loadspritegfx(void) { u16 index; - gBattleAnimScriptPtr++; - index = T1_READ_16(gBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + index = T1_READ_16(sBattleAnimScriptPtr); LoadCompressedObjectPic(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)]); LoadCompressedObjectPalette(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]); - gBattleAnimScriptPtr += 2; + sBattleAnimScriptPtr += 2; AddSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); gAnimFramesToWait = 1; gAnimScriptCallback = WaitAnimFrameCount; } -static void ScriptCmd_unloadsprite(void) +static void ScriptCmd_unloadspritegfx(void) { u16 index; - gBattleAnimScriptPtr++; - index = T1_READ_16(gBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + index = T1_READ_16(sBattleAnimScriptPtr); FreeSpriteTilesByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); FreeSpritePaletteByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag); - gBattleAnimScriptPtr += 2; + sBattleAnimScriptPtr += 2; ClearSpriteIndex(GET_TRUE_SPRITE_INDEX(index)); } -#ifdef NONMATCHING -static void ScriptCmd_sprite(void) +static void ScriptCmd_createsprite(void) { s32 i; - struct SpriteTemplate *r7; - u8 r4; - u8 r0; - u8 _r0; - u16 r6; - u8 r2; - s8 r1; - - gBattleAnimScriptPtr++; - r7 = (struct SpriteTemplate *)(T2_READ_32(gBattleAnimScriptPtr)); - gBattleAnimScriptPtr += 4; - r4 = T1_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - r0 = T1_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - for (i = 0; i < r0; i++) + const struct SpriteTemplate *template; + u8 argVar; + u8 argsCount; + s16 subpriority; + + sBattleAnimScriptPtr++; + template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr += 4; + + argVar = T1_READ_8(sBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + + argsCount = T1_READ_8(sBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + for (i = 0; i < argsCount; i++) { - gBattleAnimArgs[i] = T1_READ_16(gBattleAnimScriptPtr); - gBattleAnimScriptPtr += 2; + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; } - if (r4 & 0x80) + + if (argVar & 0x80) { - r4 ^= 0x80; - if (r4 > 0x3F) - r4 -= 0x40; + argVar ^= 0x80; + if (argVar >= 0x40) + argVar -= 0x40; else - r4 = -r4; - _r0 = sub_8079E90(gBattleAnimBankTarget); - r1 = r4; + argVar *= -1; + subpriority = sub_8079E90(gAnimBankTarget) + (s8)(argVar); } else { - //_08075B44 - if (r4 > 0x3F) - r4 -= 0x40; + if (argVar >= 0x40) + argVar -= 0x40; else - r4 = -r4; - _r0 = sub_8079E90(gBattleAnimBankAttacker); - r1 = r4; + argVar *= -1; + + subpriority = sub_8079E90(gAnimBankAttacker) + (s8)(argVar); } - r6 = _r0 + r1; - if ((s16)r6 < 3) - r6 = 3; - r4 = sub_8077ABC(gBattleAnimBankTarget, 2); - r2 = sub_8077ABC(gBattleAnimBankTarget, 3); - CreateSpriteAndAnimate(r7, r4, r2, r6); + if (subpriority < 3) + subpriority = 3; + + CreateSpriteAndAnimate(template, GetBankPosition(gAnimBankTarget, 2), GetBankPosition(gAnimBankTarget, 3), subpriority); gAnimVisualTaskCount++; } -#else -__attribute__((naked)) -static void ScriptCmd_sprite(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - ldr r5, _08075B2C @ =gBattleAnimScriptPtr\n\ - ldr r1, [r5]\n\ - adds r3, r1, 0x1\n\ - str r3, [r5]\n\ - ldrb r2, [r1, 0x1]\n\ - ldrb r0, [r3, 0x1]\n\ - lsls r0, 8\n\ - adds r2, r0\n\ - ldrb r0, [r3, 0x2]\n\ - lsls r0, 16\n\ - adds r2, r0\n\ - ldrb r0, [r3, 0x3]\n\ - lsls r0, 24\n\ - adds r7, r2, r0\n\ - adds r0, r1, 0x5\n\ - str r0, [r5]\n\ - ldrb r4, [r1, 0x5]\n\ - adds r0, r1, 0x6\n\ - str r0, [r5]\n\ - ldrb r0, [r1, 0x6]\n\ - adds r1, 0x7\n\ - str r1, [r5]\n\ - cmp r0, 0\n\ - beq _08075B14\n\ - adds r6, r5, 0\n\ - ldr r5, _08075B30 @ =gBattleAnimArgs\n\ - adds r3, r0, 0\n\ -_08075AFC:\n\ - ldr r2, [r6]\n\ - ldrb r1, [r2]\n\ - ldrb r0, [r2, 0x1]\n\ - lsls r0, 8\n\ - orrs r1, r0\n\ - strh r1, [r5]\n\ - adds r2, 0x2\n\ - str r2, [r6]\n\ - adds r5, 0x2\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bne _08075AFC\n\ -_08075B14:\n\ - movs r0, 0x80\n\ - ands r0, r4\n\ - cmp r0, 0\n\ - beq _08075B44\n\ - movs r0, 0x80\n\ - eors r4, r0\n\ - cmp r4, 0x3F\n\ - bls _08075B34\n\ - adds r0, r4, 0\n\ - subs r0, 0x40\n\ - b _08075B36\n\ - .align 2, 0\n\ -_08075B2C: .4byte gBattleAnimScriptPtr\n\ -_08075B30: .4byte gBattleAnimArgs\n\ -_08075B34:\n\ - negs r0, r4\n\ -_08075B36:\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldr r0, _08075B40 @ =gBattleAnimBankTarget\n\ - b _08075B56\n\ - .align 2, 0\n\ -_08075B40: .4byte gBattleAnimBankTarget\n\ -_08075B44:\n\ - cmp r4, 0x3F\n\ - bls _08075B4E\n\ - adds r0, r4, 0\n\ - subs r0, 0x40\n\ - b _08075B50\n\ -_08075B4E:\n\ - negs r0, r4\n\ -_08075B50:\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - ldr r0, _08075BAC @ =gBattleAnimBankAttacker\n\ -_08075B56:\n\ - ldrb r0, [r0]\n\ - bl sub_8079E90\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - lsls r1, r4, 24\n\ - asrs r1, 24\n\ - adds r0, r1\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - lsls r0, r6, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x2\n\ - bgt _08075B74\n\ - movs r6, 0x3\n\ -_08075B74:\n\ - ldr r5, _08075BB0 @ =gBattleAnimBankTarget\n\ - ldrb r0, [r5]\n\ - movs r1, 0x2\n\ - bl sub_8077ABC\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - ldrb r0, [r5]\n\ - movs r1, 0x3\n\ - bl sub_8077ABC\n\ - adds r2, r0, 0\n\ - lsls r2, 24\n\ - lsrs r2, 24\n\ - lsls r3, r6, 24\n\ - lsrs r3, 24\n\ - adds r0, r7, 0\n\ - adds r1, r4, 0\n\ - bl CreateSpriteAndAnimate\n\ - ldr r1, _08075BB4 @ =gAnimVisualTaskCount\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_08075BAC: .4byte gBattleAnimBankAttacker\n\ -_08075BB0: .4byte gBattleAnimBankTarget\n\ -_08075BB4: .4byte gAnimVisualTaskCount\n\ - .syntax divided\n"); -} -#endif -static void ScriptCmd_createtask(void) +static void ScriptCmd_createvisualtask(void) { TaskFunc taskFunc; u8 taskPriority; @@ -558,18 +426,21 @@ static void ScriptCmd_createtask(void) u8 numArgs; s32 i; - gBattleAnimScriptPtr++; - taskFunc = (TaskFunc)T2_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr += 4; - taskPriority = T1_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - numArgs = T1_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; + + taskFunc = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 4; + + taskPriority = T1_READ_8(sBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + + numArgs = T1_READ_8(sBattleAnimScriptPtr); + sBattleAnimScriptPtr++; for (i = 0; i < numArgs; i++) { - gBattleAnimArgs[i] = T1_READ_16(gBattleAnimScriptPtr); - gBattleAnimScriptPtr += 2; + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; } taskId = CreateTask(taskFunc, taskPriority); @@ -579,11 +450,11 @@ static void ScriptCmd_createtask(void) static void ScriptCmd_delay(void) { - gBattleAnimScriptPtr++; - gAnimFramesToWait = T1_READ_8(gBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + gAnimFramesToWait = T1_READ_8(sBattleAnimScriptPtr); if (gAnimFramesToWait == 0) gAnimFramesToWait = -1; - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; gAnimScriptCallback = WaitAnimFrameCount; } @@ -592,7 +463,7 @@ static void ScriptCmd_waitforvisualfinish(void) { if (gAnimVisualTaskCount == 0) { - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; gAnimFramesToWait = 0; } else @@ -641,7 +512,7 @@ static void ScriptCmd_end(void) // the SE has halted, so set the SE Frame Counter to 0 and continue. gSoundAnimFramesToWait = 0; - for (i = 0; i < 8; i++) + for (i = 0; i < ANIM_SPRITE_INDEX_COUNT; i++) { if (gAnimSpriteIndexArray[i] != 0xFFFF) { @@ -651,13 +522,13 @@ static void ScriptCmd_end(void) } } - if (continuousAnim == FALSE) // may have been used for debug? + if (!continuousAnim) // may have been used for debug? { m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); - if (NotInBattle() == 0) + if (IsContest() == 0) { sub_8079E24(); - sub_8043EB4(1); + UpdateOamPriorityInAllHealthboxes(1); } gAnimScriptActive = FALSE; } @@ -665,178 +536,114 @@ static void ScriptCmd_end(void) static void ScriptCmd_playse(void) { - gBattleAnimScriptPtr++; - PlaySE(T1_READ_16(gBattleAnimScriptPtr)); - gBattleAnimScriptPtr += 2; + sBattleAnimScriptPtr++; + PlaySE(T1_READ_16(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr += 2; } static void ScriptCmd_monbg(void) { - u8 r6; - u8 r5; - u8 r0; - u8 r7; + u8 animBank; + u8 bank; + u8 identity; + bool8 toBG_2; u16 r4; u8 taskId; - gBattleAnimScriptPtr++; - r6 = T1_READ_8(gBattleAnimScriptPtr); - if (r6 == 0) - r6 = 2; - else if (r6 == 1) - r6 = 3; - if (r6 == 0 || r6 == 2) - r5 = gBattleAnimBankAttacker; + sBattleAnimScriptPtr++; + animBank = T1_READ_8(sBattleAnimScriptPtr); + if (animBank == ANIM_BANK_ATTACKER) + animBank = ANIM_BANK_ATK_PARTNER; + else if (animBank == ANIM_BANK_TARGET) + animBank = ANIM_BANK_DEF_PARTNER; + + if (animBank == ANIM_BANK_ATTACKER || animBank == ANIM_BANK_ATK_PARTNER) + bank = gAnimBankAttacker; else - r5 = gBattleAnimBankTarget; - if (IsAnimBankSpriteVisible(r5)) + bank = gAnimBankTarget; + + if (IsAnimBankSpriteVisible(bank)) { - r0 = GetBankIdentity(r5); - r0 += 0xFF; - if (r0 <= 1 || NotInBattle() != 0) - r7 = 0; + identity = GetBankIdentity(bank); + identity += 0xFF; + if (identity <= 1 || IsContest() != 0) + toBG_2 = 0; else - r7 = 1; - sub_8076034(r5, r7); - r4 = gObjectBankIDs[r5]; + toBG_2 = 1; + + sub_8076034(bank, toBG_2); + r4 = gObjectBankIDs[bank]; taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); gTasks[taskId].data[0] = r4; gTasks[taskId].data[1] = gSprites[r4].pos1.x + gSprites[r4].pos2.x; gTasks[taskId].data[2] = gSprites[r4].pos1.y + gSprites[r4].pos2.y; - if (r7 == 0) + if (toBG_2 == 0) { - gTasks[taskId].data[3] = gUnknown_030042C0; - gTasks[taskId].data[4] = gUnknown_030041B4; + gTasks[taskId].data[3] = gBattle_BG1_X; + gTasks[taskId].data[4] = gBattle_BG1_Y; } else { - gTasks[taskId].data[3] = gUnknown_03004288; - gTasks[taskId].data[4] = gUnknown_03004280; + gTasks[taskId].data[3] = gBattle_BG2_X; + gTasks[taskId].data[4] = gBattle_BG2_Y; } - gTasks[taskId].data[5] = r7; - gTasks[taskId].data[6] = r5; + gTasks[taskId].data[5] = toBG_2; + gTasks[taskId].data[6] = bank; gMonAnimTaskIdArray[0] = taskId; } - r5 ^= 2; - if (r6 > 1 && IsAnimBankSpriteVisible(r5)) + bank ^= 2; + if (animBank > 1 && IsAnimBankSpriteVisible(bank)) { - r0 = GetBankIdentity(r5); - r0 += 0xFF; - if (r0 <= 1 || NotInBattle() != 0) - r7 = 0; + identity = GetBankIdentity(bank); + identity += 0xFF; + if (identity <= 1 || IsContest() != 0) + toBG_2 = 0; else - r7 = 1; - sub_8076034(r5, r7); - r4 = gObjectBankIDs[r5]; + toBG_2 = 1; + sub_8076034(bank, toBG_2); + r4 = gObjectBankIDs[bank]; taskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10); gTasks[taskId].data[0] = r4; gTasks[taskId].data[1] = gSprites[r4].pos1.x + gSprites[r4].pos2.x; gTasks[taskId].data[2] = gSprites[r4].pos1.y + gSprites[r4].pos2.y; - if (r7 == 0) + if (toBG_2 == 0) { - gTasks[taskId].data[3] = gUnknown_030042C0; - gTasks[taskId].data[4] = gUnknown_030041B4; + gTasks[taskId].data[3] = gBattle_BG1_X; + gTasks[taskId].data[4] = gBattle_BG1_Y; } else { - gTasks[taskId].data[3] = gUnknown_03004288; - gTasks[taskId].data[4] = gUnknown_03004280; + gTasks[taskId].data[3] = gBattle_BG2_X; + gTasks[taskId].data[4] = gBattle_BG2_Y; } - gTasks[taskId].data[5] = r7; - gTasks[taskId].data[6] = r5; + + gTasks[taskId].data[5] = toBG_2; + gTasks[taskId].data[6] = bank; gMonAnimTaskIdArray[1] = taskId; } - gBattleAnimScriptPtr++; + + sBattleAnimScriptPtr++; } -#ifdef NONMATCHING -bool8 IsAnimBankSpriteVisible(u8 a) +bool8 IsAnimBankSpriteVisible(u8 bank) { - if (NotInBattle()) + if (IsContest()) { - if (a == gBattleAnimBankAttacker) + if (bank == gAnimBankAttacker) return TRUE; else return FALSE; } - if (!AnimBankSpriteExists(a)) + if (!IsBankSpritePresent(bank)) return FALSE; - if (NotInBattle()) + if (IsContest()) return TRUE; // this line wont ever be reached. - if (!(EWRAM_17800[a].unk0 & 1)) + if (!(EWRAM_17800[bank].unk0 & 1) || !gSprites[gObjectBankIDs[bank]].invisible) return TRUE; - if (gSprites[gObjectBankIDs[a]].invisible) - return FALSE; - return TRUE; -} -#else -__attribute__((naked)) -bool8 IsAnimBankSpriteVisible(u8 a) -{ - asm(".syntax unified\n\ - push {r4,r5,lr}\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ - adds r5, r4, 0\n\ - bl NotInBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08075FDC\n\ - ldr r0, _08075FD8 @ =gBattleAnimBankAttacker\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - beq _0807601C\n\ - b _0807602C\n\ - .align 2, 0\n\ -_08075FD8: .4byte gBattleAnimBankAttacker\n\ -_08075FDC:\n\ - adds r0, r4, 0\n\ - bl AnimBankSpriteExists\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _0807602C\n\ - bl NotInBattle\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _0807601C\n\ - lsls r0, r5, 2\n\ - ldr r1, _08076020 @ =gSharedMem + 0x17800\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _0807601C\n\ - ldr r2, _08076024 @ =gSprites\n\ - ldr r0, _08076028 @ =gObjectBankIDs\n\ - adds r0, r5, r0\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 4\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r2\n\ - adds r0, 0x3E\n\ - ldrb r0, [r0]\n\ - lsls r0, 29\n\ - cmp r0, 0\n\ - blt _0807602C\n\ -_0807601C:\n\ - movs r0, 0x1\n\ - b _0807602E\n\ - .align 2, 0\n\ -_08076020: .4byte gSharedMem + 0x17800\n\ -_08076024: .4byte gSprites\n\ -_08076028: .4byte gObjectBankIDs\n\ -_0807602C:\n\ - movs r0, 0\n\ -_0807602E:\n\ - pop {r4,r5}\n\ - pop {r1}\n\ - bx r1\n\ - .syntax divided\n"); + + return FALSE; } -#endif void sub_8076034(u8 a, u8 b) { @@ -876,25 +683,25 @@ void sub_8076034(u8 a, u8 b) REG_BG1CNT_BITFIELD.areaOverflowMode = 0; spriteId = gObjectBankIDs[a]; - gUnknown_030042C0 = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; - if (NotInBattle() != 0 && sub_80AEB1C(EWRAM_19348) != 0) - gUnknown_030042C0--; - gUnknown_030041B4 = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; + gBattle_BG1_X = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; + if (IsContest() != 0 && IsSpeciesNotUnown(EWRAM_19348) != 0) + gBattle_BG1_X--; + gBattle_BG1_Y = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; gSprites[gObjectBankIDs[a]].invisible = TRUE; - REG_BG1HOFS = gUnknown_030042C0; - REG_BG1VOFS = gUnknown_030041B4; + REG_BG1HOFS = gBattle_BG1_X; + REG_BG1VOFS = gBattle_BG1_Y; LoadPalette(gPlttBufferUnfaded + 0x100 + a * 16, s.unk8 * 16, 32); addr3 = (u16 *)PLTT + s.unk8 * 16; DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32); - if (NotInBattle() != 0) + if (IsContest() != 0) r2 = 0; else r2 = GetBankIdentity(a); sub_80E4EF8(0, 0, r2, s.unk8, (u32)s.unk0, (((s32)s.unk4 - VRAM) / 2048), REG_BG1CNT_BITFIELD.charBaseBlock); - if (NotInBattle() != 0) + if (IsContest() != 0) sub_8076380(); } else @@ -926,12 +733,12 @@ void sub_8076034(u8 a, u8 b) REG_BG2CNT_BITFIELD.areaOverflowMode = 0; spriteId = gObjectBankIDs[a]; - gUnknown_03004288 = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; - gUnknown_03004280 = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; + gBattle_BG2_X = -(gSprites[spriteId].pos1.x + gSprites[spriteId].pos2.x) + 32; + gBattle_BG2_Y = -(gSprites[spriteId].pos1.y + gSprites[spriteId].pos2.y) + 32; gSprites[gObjectBankIDs[a]].invisible = TRUE; - REG_BG2HOFS = gUnknown_03004288; - REG_BG2VOFS = gUnknown_03004280; + REG_BG2HOFS = gBattle_BG2_X; + REG_BG2VOFS = gBattle_BG2_Y; LoadPalette(gPlttBufferUnfaded + 0x100 + a * 16, 0x90, 32); addr3 = (void *)(PLTT + 0x120); @@ -948,7 +755,7 @@ static void sub_8076380(void) struct UnknownStruct2 s; u16 *ptr; - if (sub_80AEB1C(EWRAM_19348) != 0) + if (IsSpeciesNotUnown(EWRAM_19348)) { sub_8078914(&s); ptr = s.unk4; @@ -996,7 +803,7 @@ void sub_8076464(u8 a) struct UnknownStruct2 s; sub_8078914(&s); - if (a == 0 || NotInBattle() != 0) + if (a == 0 || IsContest() != 0) { u16 *addr2; @@ -1017,8 +824,8 @@ void sub_8076464(u8 a) pointlessZero = 0; addr2 = s.unk4; DmaFill32(3, 0, addr2, 0x800); - gUnknown_030042C0 = 0; - gUnknown_030041B4 = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; } else { @@ -1041,32 +848,31 @@ void sub_8076464(u8 a) pointlessZero = 0; addr2 = (void *)(VRAM + 0xF000); DmaFill32(3, 0, addr2, 0x800); - gUnknown_03004288 = 0; - gUnknown_03004280 = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; } } static void task_pA_ma0A_obj_to_bg_pal(u8 taskId) { - u8 r4; - u8 r6; - s16 r3; - s16 r2; + u8 spriteId, palIndex; + s16 x, y; struct UnknownStruct2 s; - r4 = gTasks[taskId].data[0]; - r6 = gTasks[taskId].data[6]; + spriteId = gTasks[taskId].data[0]; + palIndex = gTasks[taskId].data[6]; sub_8078914(&s); - r3 = gTasks[taskId].data[1] - (gSprites[r4].pos1.x + gSprites[r4].pos2.x); - r2 = gTasks[taskId].data[2] - (gSprites[r4].pos1.y + gSprites[r4].pos2.y); + 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); + if (gTasks[taskId].data[5] == 0) { u16 *src; u16 *dst; - gUnknown_030042C0 = r3 + gTasks[taskId].data[3]; - gUnknown_030041B4 = r2 + gTasks[taskId].data[4]; - src = gPlttBufferFaded + 0x100 + r6 * 16; + gBattle_BG1_X = x + gTasks[taskId].data[3]; + gBattle_BG1_Y = y + gTasks[taskId].data[4]; + src = gPlttBufferFaded + 0x100 + palIndex * 16; dst = gPlttBufferFaded + 0x100 + s.unk8 * 16 - 256; DmaCopy32(3, src, dst, 32); } @@ -1075,9 +881,9 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId) u16 *src; u16 *dst; - gUnknown_03004288 = r3 + gTasks[taskId].data[3]; - gUnknown_03004280 = r2 + gTasks[taskId].data[4]; - src = gPlttBufferFaded + 0x100 + r6 * 16; + gBattle_BG2_X = x + gTasks[taskId].data[3]; + gBattle_BG2_Y = y + gTasks[taskId].data[4]; + src = gPlttBufferFaded + 0x100 + palIndex * 16; dst = gPlttBufferFaded + 0x100 - 112; DmaCopy32(3, src, dst, 32); } @@ -1085,55 +891,59 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId) static void ScriptCmd_clearmonbg(void) { - u8 r4; - u8 r5; + u8 animBankId; + u8 bank; u8 taskId; - gBattleAnimScriptPtr++; - r4 = T1_READ_8(gBattleAnimScriptPtr); - if (r4 == 0) - r4 = 2; - else if (r4 == 1) - r4 = 3; - if (r4 == 0 || r4 == 2) - r5 = gBattleAnimBankAttacker; + sBattleAnimScriptPtr++; + animBankId = T1_READ_8(sBattleAnimScriptPtr); + + if (animBankId == ANIM_BANK_ATTACKER) + animBankId = ANIM_BANK_ATK_PARTNER; + else if (animBankId == ANIM_BANK_TARGET) + animBankId = ANIM_BANK_DEF_PARTNER; + + if (animBankId == ANIM_BANK_ATTACKER || animBankId == ANIM_BANK_ATK_PARTNER) + bank = gAnimBankAttacker; else - r5 = gBattleAnimBankTarget; + bank = gAnimBankTarget; + if (gMonAnimTaskIdArray[0] != 0xFF) - gSprites[gObjectBankIDs[r5]].invisible = FALSE; - if (r4 > 1 && gMonAnimTaskIdArray[1] != 0xFF) - gSprites[gObjectBankIDs[r5 ^ 2]].invisible = FALSE; + gSprites[gObjectBankIDs[bank]].invisible = FALSE; + if (animBankId > 1 && gMonAnimTaskIdArray[1] != 0xFF) + gSprites[gObjectBankIDs[bank ^ 2]].invisible = FALSE; else - r4 = 0; + animBankId = 0; + taskId = CreateTask(sub_807672C, 5); - gTasks[taskId].data[0] = r4; - gTasks[taskId].data[2] = r5; - gBattleAnimScriptPtr++; + gTasks[taskId].data[0] = animBankId; + gTasks[taskId].data[2] = bank; + sBattleAnimScriptPtr++; } static void sub_807672C(u8 taskId) { - u8 var; - u8 r4; + u8 identity; + u8 to_BG2; gTasks[taskId].data[1]++; if (gTasks[taskId].data[1] != 1) { - var = GetBankIdentity(gTasks[taskId].data[2]); - var += 0xFF; - if (var <= 1 || NotInBattle() != 0) - r4 = 0; + identity = GetBankIdentity(gTasks[taskId].data[2]); + identity += 0xFF; + if (identity <= 1 || IsContest() != 0) + to_BG2 = 0; else - r4 = 1; + to_BG2 = 1; if (gMonAnimTaskIdArray[0] != 0xFF) { - sub_8076464(r4); + sub_8076464(to_BG2); DestroyTask(gMonAnimTaskIdArray[0]); gMonAnimTaskIdArray[0] = 0xFF; } if (gTasks[taskId].data[0] > 1) { - sub_8076464(r4 ^ 1); + sub_8076464(to_BG2 ^ 1); DestroyTask(gMonAnimTaskIdArray[1]); gMonAnimTaskIdArray[1] = 0xFF; } @@ -1143,187 +953,195 @@ static void sub_807672C(u8 taskId) static void ScriptCmd_monbg_22(void) { - u8 r5; - u8 r4; - u8 r0; + u8 animBankId; + u8 bank; + u8 identity; u8 r1; - gBattleAnimScriptPtr++; - r5 = T1_READ_8(gBattleAnimScriptPtr); - if (r5 == 0) - r5 = 2; - else if (r5 == 1) - r5 = 3; - if (r5 == 0 || r5 == 2) - r4 = gBattleAnimBankAttacker; + sBattleAnimScriptPtr++; + animBankId = T1_READ_8(sBattleAnimScriptPtr); + + if (animBankId == ANIM_BANK_ATTACKER) + animBankId = ANIM_BANK_ATK_PARTNER; + else if (animBankId == ANIM_BANK_TARGET) + animBankId = ANIM_BANK_DEF_PARTNER; + + if (animBankId == ANIM_BANK_ATTACKER || animBankId == ANIM_BANK_ATK_PARTNER) + bank = gAnimBankAttacker; else - r4 = gBattleAnimBankTarget; - if (IsAnimBankSpriteVisible(r4)) + bank = gAnimBankTarget; + + if (IsAnimBankSpriteVisible(bank)) { - r0 = GetBankIdentity(r4); - r0 += 0xFF; - if (r0 <= 1 || NotInBattle() != 0) + identity = GetBankIdentity(bank); + identity += 0xFF; + if (identity <= 1 || IsContest() != 0) r1 = 0; else r1 = 1; - sub_8076034(r4, r1); - gSprites[gObjectBankIDs[r4]].invisible = FALSE; + sub_8076034(bank, r1); + gSprites[gObjectBankIDs[bank]].invisible = FALSE; } - r4 ^= 2; - if (r5 > 1 && IsAnimBankSpriteVisible(r4)) + + bank ^= 2; + if (animBankId > ANIM_BANK_TARGET && IsAnimBankSpriteVisible(bank)) { - r0 = GetBankIdentity(r4); - r0 += 0xFF; - if (r0 <= 1 || NotInBattle() != 0) + identity = GetBankIdentity(bank); + identity += 0xFF; + if (identity <= 1 || IsContest() != 0) r1 = 0; else r1 = 1; - sub_8076034(r4, r1); - gSprites[gObjectBankIDs[r4]].invisible = FALSE; + sub_8076034(bank, r1); + gSprites[gObjectBankIDs[bank]].invisible = FALSE; } - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; } static void ScriptCmd_clearmonbg_23(void) { - u8 r5; - u8 r6; + u8 animBankId; + u8 bank; u8 taskId; - gBattleAnimScriptPtr++; - r5 = T1_READ_8(gBattleAnimScriptPtr); - if (r5 == 0) - r5 = 2; - else if (r5 == 1) - r5 = 3; - if (r5 == 0 || r5 == 2) - r6 = gBattleAnimBankAttacker; + sBattleAnimScriptPtr++; + animBankId = T1_READ_8(sBattleAnimScriptPtr); + + if (animBankId == ANIM_BANK_ATTACKER) + animBankId = ANIM_BANK_ATK_PARTNER; + else if (animBankId == ANIM_BANK_TARGET) + animBankId = ANIM_BANK_DEF_PARTNER; + + if (animBankId == ANIM_BANK_ATTACKER || animBankId == ANIM_BANK_ATK_PARTNER) + bank = gAnimBankAttacker; else - r6 = gBattleAnimBankTarget; - if (IsAnimBankSpriteVisible(r6)) - gSprites[gObjectBankIDs[r6]].invisible = FALSE; - if (r5 > 1 && IsAnimBankSpriteVisible(r6 ^ 2)) - gSprites[gObjectBankIDs[r6 ^ 2]].invisible = FALSE; + bank = gAnimBankTarget; + + if (IsAnimBankSpriteVisible(bank)) + gSprites[gObjectBankIDs[bank]].invisible = FALSE; + if (animBankId > 1 && IsAnimBankSpriteVisible(bank ^ 2)) + gSprites[gObjectBankIDs[bank ^ 2]].invisible = FALSE; else - r5 = 0; + animBankId = 0; + taskId = CreateTask(sub_80769A4, 5); - gTasks[taskId].data[0] = r5; - gTasks[taskId].data[2] = r6; - gBattleAnimScriptPtr++; + gTasks[taskId].data[0] = animBankId; + gTasks[taskId].data[2] = bank; + + sBattleAnimScriptPtr++; } static void sub_80769A4(u8 taskId) { - u8 r0; - u8 r4; - u8 r5; + u8 identity; + u8 bank; + u8 toBG_2; gTasks[taskId].data[1]++; if (gTasks[taskId].data[1] != 1) { - r4 = gTasks[taskId].data[2]; - r0 = GetBankIdentity(r4); - r0 += 0xFF; - if (r0 <= 1 || NotInBattle() != 0) - r5 = 0; + bank = gTasks[taskId].data[2]; + identity = GetBankIdentity(bank); + identity += 0xFF; + if (identity <= 1 || IsContest() != 0) + toBG_2 = 0; else - r5 = 1; - if (IsAnimBankSpriteVisible(r4)) - sub_8076464(r5); - if (gTasks[taskId].data[0] > 1 && IsAnimBankSpriteVisible(r4 ^ 2)) - sub_8076464(r5 ^ 1); + toBG_2 = 1; + if (IsAnimBankSpriteVisible(bank)) + sub_8076464(toBG_2); + if (gTasks[taskId].data[0] > 1 && IsAnimBankSpriteVisible(bank ^ 2)) + sub_8076464(toBG_2 ^ 1); DestroyTask(taskId); } } static void ScriptCmd_setalpha(void) { - u16 r3; - u16 r1; + u16 half1, half2; - gBattleAnimScriptPtr++; - r3 = *(gBattleAnimScriptPtr++); - r1 = *(gBattleAnimScriptPtr++) << 8; + sBattleAnimScriptPtr++; + half1 = *(sBattleAnimScriptPtr++); + half2 = *(sBattleAnimScriptPtr++) << 8; REG_BLDCNT = 0x3F40; - REG_BLDALPHA = r3 | r1; + REG_BLDALPHA = half1 | half2; } static void ScriptCmd_setbldcnt(void) { - u16 r3; - u16 r1; + u16 half1, half2; - gBattleAnimScriptPtr++; - r3 = *(gBattleAnimScriptPtr++); - r1 = *(gBattleAnimScriptPtr++) << 8; - REG_BLDCNT = r3 | r1; + sBattleAnimScriptPtr++; + half1 = *(sBattleAnimScriptPtr++); + half2 = *(sBattleAnimScriptPtr++) << 8; + REG_BLDCNT = half1 | half2; } static void ScriptCmd_blendoff(void) { - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; REG_BLDCNT = 0; REG_BLDALPHA = 0; } static void ScriptCmd_call(void) { - gBattleAnimScriptPtr++; - gBattleAnimScriptRetAddr = gBattleAnimScriptPtr + 4; - gBattleAnimScriptPtr = T2_READ_PTR(gBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + gBattleAnimScriptRetAddr = sBattleAnimScriptPtr + 4; + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); } static void ScriptCmd_return(void) { - gBattleAnimScriptPtr = gBattleAnimScriptRetAddr; + sBattleAnimScriptPtr = gBattleAnimScriptRetAddr; } -static void ScriptCmd_setvar(void) +static void ScriptCmd_setarg(void) { - const u8 *addr = gBattleAnimScriptPtr; - u16 r4; - u8 r2; + const u8 *addr = sBattleAnimScriptPtr; + u16 value; + u8 argId; - gBattleAnimScriptPtr++; - r2 = T1_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - r4 = T1_READ_16(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = addr + 4; - gBattleAnimArgs[r2] = r4; + sBattleAnimScriptPtr++; + argId = T1_READ_8(sBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + value = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr = addr + 4; + gBattleAnimArgs[argId] = value; } -static void ScriptCmd_ifelse(void) +static void ScriptCmd_choosetwoturnanim(void) { - gBattleAnimScriptPtr++; - if (gUnknown_0202F7C4 & 1) - gBattleAnimScriptPtr += 4; - gBattleAnimScriptPtr = T2_READ_PTR(gBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + if (gAnimMoveTurn & 1) + sBattleAnimScriptPtr += 4; + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); } -static void ScriptCmd_jumpif(void) +static void ScriptCmd_jumpifmoveturn(void) { - u8 r1; + u8 toCheck; - gBattleAnimScriptPtr++; - r1 = T1_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - if (r1 == gUnknown_0202F7C4) + sBattleAnimScriptPtr++; + toCheck = T1_READ_8(sBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + + if (toCheck == gAnimMoveTurn) { - gBattleAnimScriptPtr = T2_READ_PTR(gBattleAnimScriptPtr); + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); } else { - gBattleAnimScriptPtr += 4; + sBattleAnimScriptPtr += 4; } } static void ScriptCmd_jump(void) { - gBattleAnimScriptPtr++; - gBattleAnimScriptPtr = T2_READ_PTR(gBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); } -bool8 NotInBattle(void) +bool8 IsContest(void) { if (!gMain.inBattle) return TRUE; @@ -1331,124 +1149,131 @@ bool8 NotInBattle(void) return FALSE; } +#define tBackgroundId data[0] +#define tState data[10] + static void ScriptCmd_fadetobg(void) { - u8 r4; + u8 backgroundId; u8 taskId; - gBattleAnimScriptPtr++; - r4 = T1_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; - taskId = CreateTask(task_p5_load_battle_screen_elements, 5); - gTasks[taskId].data[0] = r4; - gUnknown_0202F7C5 = 1; + sBattleAnimScriptPtr++; + backgroundId = T1_READ_8(sBattleAnimScriptPtr); + sBattleAnimScriptPtr++; + taskId = CreateTask(Task_FadeToBg, 5); + gTasks[taskId].tBackgroundId = backgroundId; + sAnimBackgroundFadeState = 1; } -static void ScriptCmd_fadetobg_25(void) +static void ScriptCmd_fadetobgfromset(void) { - u8 r8; - u8 r7; - u8 r6; + u8 bg1, bg2, bg3; u8 taskId; - gBattleAnimScriptPtr++; - r8 = gBattleAnimScriptPtr[0]; - r7 = gBattleAnimScriptPtr[1]; - r6 = gBattleAnimScriptPtr[2]; - gBattleAnimScriptPtr += 3; - taskId = CreateTask(task_p5_load_battle_screen_elements, 5); - if (NotInBattle() != 0) - gTasks[taskId].data[0] = r6; - else if (GetBankSide(gBattleAnimBankTarget) == 0) - gTasks[taskId].data[0] = r7; + sBattleAnimScriptPtr++; + bg1 = sBattleAnimScriptPtr[0]; + bg2 = sBattleAnimScriptPtr[1]; + bg3 = sBattleAnimScriptPtr[2]; + sBattleAnimScriptPtr += 3; + taskId = CreateTask(Task_FadeToBg, 5); + + if (IsContest()) + gTasks[taskId].tBackgroundId = bg3; + else if (GetBankSide(gAnimBankTarget) == 0) + gTasks[taskId].tBackgroundId = bg2; else - gTasks[taskId].data[0] = r8; - gUnknown_0202F7C5 = 1; + gTasks[taskId].tBackgroundId = bg1; + + sAnimBackgroundFadeState = 1; } -static void task_p5_load_battle_screen_elements(u8 taskId) +static void Task_FadeToBg(u8 taskId) { - if (gTasks[taskId].data[10] == 0) + if (gTasks[taskId].tState == 0) { BeginHardwarePaletteFade(0xE8, 0, 0, 16, 0); - gTasks[taskId].data[10]++; + gTasks[taskId].tState++; return; } if (gPaletteFade.active) return; - if (gTasks[taskId].data[10] == 1) + if (gTasks[taskId].tState == 1) { - gTasks[taskId].data[10]++; - gUnknown_0202F7C5 = 2; + gTasks[taskId].tState++; + sAnimBackgroundFadeState = 2; } - else if (gTasks[taskId].data[10] == 2) + else if (gTasks[taskId].tState == 2) { - s16 data0 = (u16)gTasks[taskId].data[0]; + s16 bgId = (u16)gTasks[taskId].tBackgroundId; - if (data0 == -1) - dp01t_11_3_message_for_player_only(); + if (bgId == -1) + LoadDefaultBg(); else - sub_8076DB8(data0); + LoadMoveBg(bgId); + BeginHardwarePaletteFade(0xE8, 0, 16, 0, 1); - gTasks[taskId].data[10]++; + gTasks[taskId].tState++; return; } if (gPaletteFade.active) return; - if (gTasks[taskId].data[10] == 3) + if (gTasks[taskId].tState == 3) { DestroyTask(taskId); - gUnknown_0202F7C5 = 0; + sAnimBackgroundFadeState = 0; } } -static void sub_8076DB8(u16 a) +static void LoadMoveBg(u16 bgId) { - if (NotInBattle()) + if (IsContest()) { - void *tilemap = gBattleAnimBackgroundTable[a].tilemap; + void *tilemap = gBattleAnimBackgroundTable[bgId].tilemap; void *dmaSrc; void *dmaDest; - LZDecompressWram(tilemap, NotInBattle() ? EWRAM_14800 : EWRAM_18000); - sub_80763FC(sub_80789BC(), NotInBattle() ? EWRAM_14800 : EWRAM_18000, 0x100, 0); - dmaSrc = NotInBattle() ? EWRAM_14800 : EWRAM_18000; + LZDecompressWram(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)); - LoadCompressedPalette(gBattleAnimBackgroundTable[a].palette, sub_80789BC() * 16, 32); + LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(VRAM + 0x2000)); + LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, sub_80789BC() * 16, 32); } else { - LZDecompressVram(gBattleAnimBackgroundTable[a].tilemap, (void *)(VRAM + 0xD000)); - LZDecompressVram(gBattleAnimBackgroundTable[a].image, (void *)(VRAM + 0x8000)); - LoadCompressedPalette(gBattleAnimBackgroundTable[a].palette, 32, 32); + LZDecompressVram(gBattleAnimBackgroundTable[bgId].tilemap, (void *)(VRAM + 0xD000)); + LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(VRAM + 0x8000)); + LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, 32, 32); } } -static void dp01t_11_3_message_for_player_only(void) +static void LoadDefaultBg(void) { - if (NotInBattle()) - sub_80AB2AC(); + if (IsContest()) + LoadContestBgAfterMoveAnim(); else - sub_800D7B8(); + DrawMainBattleBackground(); } static void ScriptCmd_restorebg(void) { u8 taskId; - gBattleAnimScriptPtr++; - taskId = CreateTask(task_p5_load_battle_screen_elements, 5); - gTasks[taskId].data[0] = 0xFFFF; - gUnknown_0202F7C5 = 1; + sBattleAnimScriptPtr++; + taskId = CreateTask(Task_FadeToBg, 5); + gTasks[taskId].tBackgroundId = 0xFFFF; + sAnimBackgroundFadeState = 1; } +#undef tBackgroundId +#undef tState + static void ScriptCmd_waitbgfadeout(void) { - if (gUnknown_0202F7C5 == 2) + if (sAnimBackgroundFadeState == 2) { - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; gAnimFramesToWait = 0; } else @@ -1459,9 +1284,9 @@ static void ScriptCmd_waitbgfadeout(void) static void ScriptCmd_waitbgfadein(void) { - if (gUnknown_0202F7C5 == 0) + if (sAnimBackgroundFadeState == 0) { - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; gAnimFramesToWait = 0; } else @@ -1472,25 +1297,25 @@ static void ScriptCmd_waitbgfadein(void) static void ScriptCmd_changebg(void) { - gBattleAnimScriptPtr++; - sub_8076DB8(T1_READ_8(gBattleAnimScriptPtr)); - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; + LoadMoveBg(T1_READ_8(sBattleAnimScriptPtr)); + sBattleAnimScriptPtr++; } //Weird control flow /* -s8 sub_8076F98(s8 a) +s8 BattleAnimAdjustPanning(s8 a) { - if (!NotInBattle() && (EWRAM_17810[gBattleAnimBankAttacker].unk0 & 0x10)) + if (!IsContest() && (EWRAM_17810[gAnimBankAttacker].unk0 & 0x10)) { - a = GetBankSide(gBattleAnimBankAttacker) ? 0xC0 : 0x3F; + a = GetBankSide(gAnimBankAttacker) ? 0xC0 : 0x3F; } //_08076FDC else { - if (NotInBattle()) + if (IsContest()) { - if (gBattleAnimBankAttacker == gBattleAnimBankTarget && gBattleAnimBankAttacker == 2 + if (gAnimBankAttacker == gAnimBankTarget && gAnimBankAttacker == 2 && a == 0x3F) { //jump to _0807707A @@ -1502,9 +1327,9 @@ s8 sub_8076F98(s8 a) //_08077004 else { - if (GetBankSide(gBattleAnimBankAttacker) == 0) + if (GetBankSide(gAnimBankAttacker) == 0) { - if (GetBankSide(gBattleAnimBankTarget) == 0) + if (GetBankSide(gAnimBankTarget) == 0) } //_08077042 else @@ -1518,17 +1343,17 @@ s8 sub_8076F98(s8 a) } */ __attribute__((naked)) -s8 sub_8076F98(s8 a) +s8 BattleAnimAdjustPanning(s8 a) { asm(".syntax unified\n\ push {r4,lr}\n\ lsls r0, 24\n\ lsrs r4, r0, 24\n\ - bl NotInBattle\n\ + bl IsContest\n\ lsls r0, 24\n\ cmp r0, 0\n\ bne _08076FDC\n\ - ldr r0, _08076FD4 @ =gBattleAnimBankAttacker\n\ + ldr r0, _08076FD4 @ =gAnimBankAttacker\n\ ldrb r2, [r0]\n\ lsls r0, r2, 1\n\ adds r0, r2\n\ @@ -1549,15 +1374,15 @@ s8 sub_8076F98(s8 a) movs r4, 0x3F\n\ b _0807706E\n\ .align 2, 0\n\ -_08076FD4: .4byte gBattleAnimBankAttacker\n\ +_08076FD4: .4byte gAnimBankAttacker\n\ _08076FD8: .4byte gSharedMem + 0x17810\n\ _08076FDC:\n\ - bl NotInBattle\n\ + bl IsContest\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _08077004\n\ - ldr r0, _08076FFC @ =gBattleAnimBankAttacker\n\ - ldr r1, _08077000 @ =gBattleAnimBankTarget\n\ + ldr r0, _08076FFC @ =gAnimBankAttacker\n\ + ldr r1, _08077000 @ =gAnimBankTarget\n\ ldrb r0, [r0]\n\ ldrb r1, [r1]\n\ cmp r0, r1\n\ @@ -1568,16 +1393,16 @@ _08076FDC:\n\ beq _0807707A\n\ b _08077068\n\ .align 2, 0\n\ -_08076FFC: .4byte gBattleAnimBankAttacker\n\ -_08077000: .4byte gBattleAnimBankTarget\n\ +_08076FFC: .4byte gAnimBankAttacker\n\ +_08077000: .4byte gAnimBankTarget\n\ _08077004:\n\ - ldr r0, _0807702C @ =gBattleAnimBankAttacker\n\ + ldr r0, _0807702C @ =gAnimBankAttacker\n\ ldrb r0, [r0]\n\ bl GetBankSide\n\ lsls r0, 24\n\ cmp r0, 0\n\ bne _08077042\n\ - ldr r0, _08077030 @ =gBattleAnimBankTarget\n\ + ldr r0, _08077030 @ =gAnimBankTarget\n\ ldrb r0, [r0]\n\ bl GetBankSide\n\ lsls r0, 24\n\ @@ -1590,8 +1415,8 @@ _08077004:\n\ movs r4, 0xC0\n\ b _0807706E\n\ .align 2, 0\n\ -_0807702C: .4byte gBattleAnimBankAttacker\n\ -_08077030: .4byte gBattleAnimBankTarget\n\ +_0807702C: .4byte gAnimBankAttacker\n\ +_08077030: .4byte gAnimBankTarget\n\ _08077034:\n\ movs r0, 0x40\n\ negs r0, r0\n\ @@ -1601,7 +1426,7 @@ _08077034:\n\ lsls r0, 24\n\ b _0807706C\n\ _08077042:\n\ - ldr r0, _08077064 @ =gBattleAnimBankTarget\n\ + ldr r0, _08077064 @ =gAnimBankTarget\n\ ldrb r0, [r0]\n\ bl GetBankSide\n\ lsls r0, 24\n\ @@ -1617,7 +1442,7 @@ _08077042:\n\ movs r4, 0x3F\n\ b _0807706E\n\ .align 2, 0\n\ -_08077064: .4byte gBattleAnimBankTarget\n\ +_08077064: .4byte gAnimBankTarget\n\ _08077068:\n\ lsls r0, r4, 24\n\ negs r0, r0\n\ @@ -1647,21 +1472,21 @@ _08077088:\n\ .syntax divided\n"); } -s8 sub_8077094(s8 a) +s8 BattleAnimAdjustPanning2(s8 pan) { - if (!NotInBattle() && (EWRAM_17810[gBattleAnimBankAttacker].unk0 & 0x10)) + if (!IsContest() && (EWRAM_17810[gAnimBankAttacker].unk0 & 0x10)) { - if (GetBankSide(gBattleAnimBankAttacker) != 0) - a = 0x3F; + if (GetBankSide(gAnimBankAttacker) != 0) + pan = 0x3F; else - a = 0xC0; + pan = 0xC0; } else { - if (GetBankSide(gBattleAnimBankAttacker) != 0 || NotInBattle() != 0) - a = -a; + if (GetBankSide(gAnimBankAttacker) != 0 || IsContest() != 0) + pan = -pan; } - return a; + return pan; } s16 sub_8077104(s16 a) @@ -1675,310 +1500,232 @@ s16 sub_8077104(s16 a) return var; } -s16 sub_807712C(s16 a, s16 b, s16 c) +s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan) { - u16 var; + u16 ret; - if (a < b) - var = ((c < 0) ? -c : c); - else if (a > b) - var = -((c < 0) ? -c : c); + if (sourcePan < targetPan) + ret = ((incrementPan < 0) ? -incrementPan : incrementPan); + else if (sourcePan > targetPan) + ret = -((incrementPan < 0) ? -incrementPan : incrementPan); else - var = 0; - return var; + ret = 0; + + return ret; } -static void ScriptCmd_panse_19(void) +static void ScriptCmd_playsewithpan(void) { - u16 r4; - s8 r0; + u16 songId; + s8 pan; - gBattleAnimScriptPtr++; - r4 = T1_READ_16(gBattleAnimScriptPtr); - r0 = T1_READ_8(gBattleAnimScriptPtr + 2); - PlaySE12WithPanning(r4, sub_8076F98(r0)); - gBattleAnimScriptPtr += 3; + sBattleAnimScriptPtr++; + songId = T1_READ_16(sBattleAnimScriptPtr); + pan = T1_READ_8(sBattleAnimScriptPtr + 2); + PlaySE12WithPanning(songId, BattleAnimAdjustPanning(pan)); + sBattleAnimScriptPtr += 3; } static void ScriptCmd_setpan(void) { - s8 r0; + s8 pan; - gBattleAnimScriptPtr++; - r0 = T1_READ_8(gBattleAnimScriptPtr); - SE12PanpotControl(sub_8076F98(r0)); - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; + pan = T1_READ_8(sBattleAnimScriptPtr); + SE12PanpotControl(BattleAnimAdjustPanning(pan)); + sBattleAnimScriptPtr++; } +#define tInitialPan data[0] +#define tTargetPan data[1] +#define tIncrementPan data[2] +#define tFramesToWait data[3] +#define tCurrentPan data[4] +#define tFrameCounter data[8] + static void ScriptCmd_panse_1B(void) { u16 songNum; - s8 r0; - s8 r4; - s8 r6; - u8 r7; - s8 panning; - s8 r8; + s8 currentPanArg, incrementPan, incrementPanArg, currentPan, targetPan; + u8 framesToWait; u8 taskId; - gBattleAnimScriptPtr++; - songNum = T1_READ_16(gBattleAnimScriptPtr); - r0 = T1_READ_8(gBattleAnimScriptPtr + 2); - r4 = T1_READ_8(gBattleAnimScriptPtr + 3); - r6 = T1_READ_8(gBattleAnimScriptPtr + 4); - r7 = T1_READ_8(gBattleAnimScriptPtr + 5); - panning = sub_8076F98(r0); - r8 = sub_8076F98(r4); - r4 = sub_807712C(panning, r8, r6); - taskId = CreateTask(c3_08073CEC, 1); - gTasks[taskId].data[0] = panning; - gTasks[taskId].data[1] = r8; - gTasks[taskId].data[2] = r4; - gTasks[taskId].data[3] = r7; - gTasks[taskId].data[4] = panning; - PlaySE12WithPanning(songNum, panning); + sBattleAnimScriptPtr++; + songNum = T1_READ_16(sBattleAnimScriptPtr); + currentPanArg = T1_READ_8(sBattleAnimScriptPtr + 2); + incrementPan = T1_READ_8(sBattleAnimScriptPtr + 3); + incrementPanArg = T1_READ_8(sBattleAnimScriptPtr + 4); + framesToWait = T1_READ_8(sBattleAnimScriptPtr + 5); + + currentPan = BattleAnimAdjustPanning(currentPanArg); + targetPan = BattleAnimAdjustPanning(incrementPan); + incrementPan = CalculatePanIncrement(currentPan, targetPan, incrementPanArg); + taskId = CreateTask(Task_PanFromInitialToTarget, 1); + gTasks[taskId].tInitialPan = currentPan; + gTasks[taskId].tTargetPan = targetPan; + gTasks[taskId].tIncrementPan = incrementPan; + gTasks[taskId].tFramesToWait = framesToWait; + gTasks[taskId].tCurrentPan = currentPan; + + PlaySE12WithPanning(songNum, currentPan); + gAnimSoundTaskCount++; - gBattleAnimScriptPtr += 6; + sBattleAnimScriptPtr += 6; } -#ifdef NONMATCHING -static void c3_08073CEC(u8 taskId) +void Task_PanFromInitialToTarget(u8 taskId) { - u16 r7 = 0; - s16 r0; - s16 r6; - s16 r3; - s16 r4; - int foo; - - r0 = gTasks[taskId].data[8]; - gTasks[taskId].data[8]++; - if (r0 >= gTasks[taskId].data[3]) + bool32 destroyTask = FALSE; + if (gTasks[taskId].tFrameCounter++ >= gTasks[taskId].tFramesToWait) { - gTasks[taskId].data[8] = r7; - r6 = gTasks[taskId].data[0]; - r3 = gTasks[taskId].data[1]; - foo = gTasks[taskId].data[4] + gTasks[taskId].data[2]; - r4 = foo; - gTasks[taskId].data[4] = r4; - if (gTasks[taskId].data[2] == 0) + s16 pan; + s16 initialPanning, targetPanning, currentPan, incrementPan; + + gTasks[taskId].tFrameCounter = 0; + initialPanning = gTasks[taskId].tInitialPan; + targetPanning = gTasks[taskId].tTargetPan; + currentPan = gTasks[taskId].tCurrentPan; + incrementPan = gTasks[taskId].tIncrementPan; + pan = currentPan + incrementPan; + gTasks[taskId].tCurrentPan = pan; + + if (incrementPan == 0) // If we're not incrementing, just cancel the task immediately { - r4 = r3; - DestroyTask(taskId); - gAnimSoundTaskCount--; + destroyTask = TRUE; } - //_080772D8 - else + else if (initialPanning < targetPanning) // Panning increasing { - if (r6 < r3) - { - if (r4 < r3) - goto check; - DestroyTask(taskId); - gAnimSoundTaskCount--; - } - else - { - if (r4 <= r3) - r7 = 1; - check: - if (r7 != 0) - { - DestroyTask(taskId); - gAnimSoundTaskCount--; - } - } + if (pan >= targetPanning) // Target reached + destroyTask = TRUE; } - //_080772F8 - SE12PanpotControl(r4); + else // Panning decreasing + { + if (pan <= targetPanning) // Target reached + destroyTask = TRUE; + } + + if (destroyTask) + { + pan = targetPanning; + DestroyTask(taskId); + gAnimSoundTaskCount--; + } + + SE12PanpotControl(pan); } - //_08077314 -} -#else -__attribute__((naked)) -static void c3_08073CEC(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - lsls r0, 24\n\ - lsrs r5, r0, 24\n\ - movs r7, 0\n\ - ldr r1, _080772D4 @ =gTasks\n\ - lsls r0, r5, 2\n\ - adds r0, r5\n\ - lsls r0, 3\n\ - adds r2, r0, r1\n\ - ldrh r0, [r2, 0x18]\n\ - adds r1, r0, 0x1\n\ - strh r1, [r2, 0x18]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - movs r3, 0xE\n\ - ldrsh r1, [r2, r3]\n\ - cmp r0, r1\n\ - blt _08077314\n\ - strh r7, [r2, 0x18]\n\ - ldrh r6, [r2, 0x8]\n\ - ldrh r3, [r2, 0xA]\n\ - movs r4, 0x10\n\ - ldrsh r0, [r2, r4]\n\ - movs r4, 0xC\n\ - ldrsh r1, [r2, r4]\n\ - adds r0, r1\n\ - lsls r0, 16\n\ - lsrs r4, r0, 16\n\ - strh r4, [r2, 0x10]\n\ - cmp r1, 0\n\ - bne _080772D8\n\ - lsls r2, r3, 16\n\ - b _080772FC\n\ - .align 2, 0\n\ -_080772D4: .4byte gTasks\n\ -_080772D8:\n\ - lsls r1, r6, 16\n\ - lsls r0, r3, 16\n\ - asrs r3, r0, 16\n\ - adds r2, r0, 0\n\ - cmp r1, r2\n\ - bge _080772EE\n\ - lsls r0, r4, 16\n\ - asrs r0, 16\n\ - cmp r0, r3\n\ - blt _080772F8\n\ - b _080772FC\n\ -_080772EE:\n\ - lsls r0, r4, 16\n\ - asrs r0, 16\n\ - cmp r0, r3\n\ - bgt _080772F8\n\ - movs r7, 0x1\n\ -_080772F8:\n\ - cmp r7, 0\n\ - beq _0807730C\n\ -_080772FC:\n\ - lsrs r4, r2, 16\n\ - adds r0, r5, 0\n\ - bl DestroyTask\n\ - ldr r1, _0807731C @ =gAnimSoundTaskCount\n\ - ldrb r0, [r1]\n\ - subs r0, 0x1\n\ - strb r0, [r1]\n\ -_0807730C:\n\ - lsls r0, r4, 24\n\ - asrs r0, 24\n\ - bl SE12PanpotControl\n\ -_08077314:\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0807731C: .4byte gAnimSoundTaskCount\n\ - .syntax divided\n"); } -#endif static void ScriptCmd_panse_26(void) { - u16 r8; - s8 r4; - s8 r5; - s8 r6; - u8 r10; + u16 songId; + s8 currentPan, targetPan, incrementPan; + u8 framesToWait; u8 taskId; - gBattleAnimScriptPtr++; - r8 = T1_READ_16(gBattleAnimScriptPtr); - r4 = T1_READ_8(gBattleAnimScriptPtr + 2); - r5 = T1_READ_8(gBattleAnimScriptPtr + 3); - r6 = T1_READ_8(gBattleAnimScriptPtr + 4); - r10 = T1_READ_8(gBattleAnimScriptPtr + 5); - taskId = CreateTask(c3_08073CEC, 1); - gTasks[taskId].data[0] = r4; - gTasks[taskId].data[1] = r5; - gTasks[taskId].data[2] = r6; - gTasks[taskId].data[3] = r10; - gTasks[taskId].data[4] = r4; - PlaySE12WithPanning(r8, r4); + sBattleAnimScriptPtr++; + songId = T1_READ_16(sBattleAnimScriptPtr); + currentPan = T1_READ_8(sBattleAnimScriptPtr + 2); + targetPan = T1_READ_8(sBattleAnimScriptPtr + 3); + incrementPan = T1_READ_8(sBattleAnimScriptPtr + 4); + framesToWait = T1_READ_8(sBattleAnimScriptPtr + 5); + + taskId = CreateTask(Task_PanFromInitialToTarget, 1); + gTasks[taskId].tInitialPan = currentPan; + gTasks[taskId].tTargetPan = targetPan; + gTasks[taskId].tIncrementPan = incrementPan; + gTasks[taskId].tFramesToWait = framesToWait; + gTasks[taskId].tCurrentPan = currentPan; + + PlaySE12WithPanning(songId, currentPan); + gAnimSoundTaskCount++; - gBattleAnimScriptPtr += 6; + sBattleAnimScriptPtr += 6; } static void ScriptCmd_panse_27(void) { - u16 r9; - u8 r4; - u8 r8; - u8 r7; - u8 r0; - s8 r6; - s8 r5; - s8 r4_2; + u16 songId; + u8 targetPanArg, incrementPanArg, currentPan, currentPanArg; + s8 targetPan, incrementPan, framesToWait; u8 taskId; - gBattleAnimScriptPtr++; - r9 = T1_READ_16(gBattleAnimScriptPtr); - r0 = T1_READ_8(gBattleAnimScriptPtr + 2); - r4 = T1_READ_8(gBattleAnimScriptPtr + 3); - r8 = T1_READ_8(gBattleAnimScriptPtr + 4); - r7 = T1_READ_8(gBattleAnimScriptPtr + 5); - r6 = sub_8077094(r0); - r5 = sub_8077094(r4); - r4_2 = sub_8077094(r8); - taskId = CreateTask(c3_08073CEC, 1); - gTasks[taskId].data[0] = r6; - gTasks[taskId].data[1] = r5; - gTasks[taskId].data[2] = r4_2; - gTasks[taskId].data[3] = r7; - gTasks[taskId].data[4] = r6; - PlaySE12WithPanning(r9, r6); + sBattleAnimScriptPtr++; + songId = T1_READ_16(sBattleAnimScriptPtr); + currentPanArg = T1_READ_8(sBattleAnimScriptPtr + 2); + targetPanArg = T1_READ_8(sBattleAnimScriptPtr + 3); + incrementPanArg = T1_READ_8(sBattleAnimScriptPtr + 4); + currentPan = T1_READ_8(sBattleAnimScriptPtr + 5); + + targetPan = BattleAnimAdjustPanning2(currentPanArg); + incrementPan = BattleAnimAdjustPanning2(targetPanArg); + framesToWait = BattleAnimAdjustPanning2(incrementPanArg); + + taskId = CreateTask(Task_PanFromInitialToTarget, 1); + gTasks[taskId].data[0] = targetPan; + gTasks[taskId].data[1] = incrementPan; + gTasks[taskId].data[2] = framesToWait; + gTasks[taskId].data[3] = currentPan; + gTasks[taskId].data[4] = targetPan; + + PlaySE12WithPanning(songId, targetPan); + gAnimSoundTaskCount++; - gBattleAnimScriptPtr += 6; + sBattleAnimScriptPtr += 6; } -static void ScriptCmd_panse_1C(void) +#undef tInitialPan +#undef tTargetPan +#undef tIncrementPan +#undef tFramesToWait +#undef tCurrentPan +#undef tFrameCounter + +#define tSongId data[0] +#define tPanning data[1] +#define tFramesToWait data[2] +#define tNumberOfPlays data[3] +#define tFrameCounter data[8] + +static void ScriptCmd_loopsewithpan(void) { - u16 r5; - u8 r0; - u8 r8; - u8 r9; - s8 r4; + u16 songId; + s8 panningArg, panning; + u8 framesToWait, numberOfPlays; u8 taskId; - gBattleAnimScriptPtr++; - r5 = T1_READ_16(gBattleAnimScriptPtr); - r0 = T1_READ_8(gBattleAnimScriptPtr + 2); - r8 = T1_READ_8(gBattleAnimScriptPtr + 3); - r9 = T1_READ_8(gBattleAnimScriptPtr + 4); - r4 = sub_8076F98(r0); - taskId = CreateTask(sub_80774FC, 1); - gTasks[taskId].data[0] = r5; - gTasks[taskId].data[1] = r4; - gTasks[taskId].data[2] = r8; - gTasks[taskId].data[3] = r9; - gTasks[taskId].data[8] = r8; + sBattleAnimScriptPtr++; + songId = T1_READ_16(sBattleAnimScriptPtr); + panningArg = T1_READ_8(sBattleAnimScriptPtr + 2); + framesToWait = T1_READ_8(sBattleAnimScriptPtr + 3); + numberOfPlays = T1_READ_8(sBattleAnimScriptPtr + 4); + panning = BattleAnimAdjustPanning(panningArg); + + taskId = CreateTask(Task_LoopAndPlaySE, 1); + gTasks[taskId].tSongId = songId; + gTasks[taskId].tPanning = panning; + gTasks[taskId].tFramesToWait = framesToWait; + gTasks[taskId].tNumberOfPlays = numberOfPlays; + gTasks[taskId].tFrameCounter = framesToWait; gTasks[taskId].func(taskId); + gAnimSoundTaskCount++; - gBattleAnimScriptPtr += 5; + sBattleAnimScriptPtr += 5; } -static void sub_80774FC(u8 taskId) +static void Task_LoopAndPlaySE(u8 taskId) { - s16 data8; - u16 r0; - s8 r1; - u8 r4; - - data8 = gTasks[taskId].data[8]; - gTasks[taskId].data[8]++; - if (data8 >= gTasks[taskId].data[2]) + if (gTasks[taskId].tFrameCounter++ >= gTasks[taskId].tFramesToWait) { - gTasks[taskId].data[8] = 0; - r0 = gTasks[taskId].data[0]; - r1 = gTasks[taskId].data[1]; - gTasks[taskId].data[3]--; - r4 = gTasks[taskId].data[3]; - PlaySE12WithPanning(r0, r1); - if (r4 == 0) + u16 songId; + s8 panning; + u8 numberOfPlays; + + gTasks[taskId].tFrameCounter = 0; + songId = gTasks[taskId].tSongId; + panning = gTasks[taskId].tPanning; + numberOfPlays = --gTasks[taskId].tNumberOfPlays; + PlaySE12WithPanning(songId, panning); + if (numberOfPlays == 0) { DestroyTask(taskId); gAnimSoundTaskCount--; @@ -1986,57 +1733,67 @@ static void sub_80774FC(u8 taskId) } } -static void ScriptCmd_panse_1D(void) +#undef tSongId +#undef tPanning +#undef tFramesToWait +#undef tNumberOfPlays +#undef tFrameCounter + +#define tSongId data[0] +#define tPanning data[1] +#define tFramesToWait data[2] + +static void ScriptCmd_waitplaysewithpan(void) { - u16 r5; - u8 r0; - u8 r8; - s8 r4; + u16 songId; + s8 panningArg, panning; + u8 framesToWait; u8 taskId; - gBattleAnimScriptPtr++; - r5 = T1_READ_16(gBattleAnimScriptPtr); - r0 = T1_READ_8(gBattleAnimScriptPtr + 2); - r8 = T1_READ_8(gBattleAnimScriptPtr + 3); - r4 = sub_8076F98(r0); - taskId = CreateTask(sub_80775CC, 1); - gTasks[taskId].data[0] = r5; - gTasks[taskId].data[1] = r4; - gTasks[taskId].data[2] = r8; + sBattleAnimScriptPtr++; + songId = T1_READ_16(sBattleAnimScriptPtr); + panningArg = T1_READ_8(sBattleAnimScriptPtr + 2); + framesToWait = T1_READ_8(sBattleAnimScriptPtr + 3); + panning = BattleAnimAdjustPanning(panningArg); + + taskId = CreateTask(Task_WaitAndPlaySE, 1); + gTasks[taskId].tSongId = songId; + gTasks[taskId].tPanning = panning; + gTasks[taskId].tFramesToWait = framesToWait; + gAnimSoundTaskCount++; - gBattleAnimScriptPtr += 4; + sBattleAnimScriptPtr += 4; } -static void sub_80775CC(u8 taskId) +static void Task_WaitAndPlaySE(u8 taskId) { - s16 r0; - - r0 = gTasks[taskId].data[2]; - gTasks[taskId].data[2]--; - if (r0 <= 0) + if (gTasks[taskId].tFramesToWait-- <= 0) { - PlaySE12WithPanning(gTasks[taskId].data[0], gTasks[taskId].data[1]); + PlaySE12WithPanning(gTasks[taskId].tSongId, gTasks[taskId].tPanning); DestroyTask(taskId); gAnimSoundTaskCount--; } } -static void ScriptCmd_createtask_1F(void) +#undef tSongId +#undef tPanning +#undef tFramesToWait + +static void ScriptCmd_createsoundtask(void) { TaskFunc func; - u8 numArgs; - int i; - u8 taskId; + u8 numArgs, taskId; + s32 i; - gBattleAnimScriptPtr++; - func = (TaskFunc)T2_READ_32(gBattleAnimScriptPtr); - gBattleAnimScriptPtr += 4; - numArgs = T1_READ_8(gBattleAnimScriptPtr); - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; + func = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 4; + numArgs = T1_READ_8(sBattleAnimScriptPtr); + sBattleAnimScriptPtr++; for (i = 0; i < numArgs; i++) { - gBattleAnimArgs[i] = T1_READ_16(gBattleAnimScriptPtr); - gBattleAnimScriptPtr += 2; + gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr); + sBattleAnimScriptPtr += 2; } taskId = CreateTask(func, 1); func(taskId); @@ -2066,61 +1823,51 @@ static void ScriptCmd_waitsound(void) else { gSoundAnimFramesToWait = 0; - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; gAnimFramesToWait = 0; } } -static void ScriptCmd_jumpvareq(void) +static void ScriptCmd_jumpargeq(void) { - u8 r2; - s16 r1; - u8 *addr; + u8 argId; + s16 valueToCheck; - gBattleAnimScriptPtr++; - r2 = T1_READ_8(gBattleAnimScriptPtr); - r1 = T1_READ_16(gBattleAnimScriptPtr + 1); - if (r1 == gBattleAnimArgs[r2]) - { - addr = T2_READ_PTR(gBattleAnimScriptPtr + 3); - gBattleAnimScriptPtr = addr; - } + sBattleAnimScriptPtr++; + argId = T1_READ_8(sBattleAnimScriptPtr); + valueToCheck = T1_READ_16(sBattleAnimScriptPtr + 1); + + if (valueToCheck == gBattleAnimArgs[argId]) + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr + 3); else - { - gBattleAnimScriptPtr += 7; - } + sBattleAnimScriptPtr += 7; } -static void ScriptCmd_jumpunkcond(void) +static void ScriptCmd_jumpifcontest(void) { - u8 *addr; - - gBattleAnimScriptPtr++; - if (NotInBattle()) - { - addr = T2_READ_PTR(gBattleAnimScriptPtr); - gBattleAnimScriptPtr = addr; - } + sBattleAnimScriptPtr++; + if (IsContest()) + sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr); else - { - gBattleAnimScriptPtr += 4; - } + sBattleAnimScriptPtr += 4; } static void ScriptCmd_monbgprio_28(void) { - u8 r2; - u8 r0; - u8 r4; + u8 wantedBank; + u8 bank; + u8 bankIdentity; + + wantedBank = T1_READ_8(sBattleAnimScriptPtr + 1); + sBattleAnimScriptPtr += 2; - r2 = T1_READ_8(gBattleAnimScriptPtr + 1); - gBattleAnimScriptPtr += 2; - if (r2 != 0) - r0 = gBattleAnimBankTarget; + if (wantedBank != 0) + bank = gAnimBankTarget; else - r0 = gBattleAnimBankAttacker; - r4 = GetBankIdentity(r0); - if (!NotInBattle() && (r4 == 0 || r4 == 3)) + bank = gAnimBankAttacker; + + bankIdentity = GetBankIdentity(bank); + if (!IsContest() && (bankIdentity == 0 || bankIdentity == 3)) { REG_BG1CNT_BITFIELD.priority = 1; REG_BG2CNT_BITFIELD.priority = 2; @@ -2129,8 +1876,8 @@ static void ScriptCmd_monbgprio_28(void) static void ScriptCmd_monbgprio_29(void) { - gBattleAnimScriptPtr++; - if (!NotInBattle()) + sBattleAnimScriptPtr++; + if (!IsContest()) { REG_BG1CNT_BITFIELD.priority = 1; REG_BG2CNT_BITFIELD.priority = 2; @@ -2139,20 +1886,20 @@ static void ScriptCmd_monbgprio_29(void) static void ScriptCmd_monbgprio_2A(void) { - u8 r6; - u8 r4; - u8 r0; + u8 wantedBank; + u8 bankIdentity; + u8 bank; - r6 = T1_READ_8(gBattleAnimScriptPtr + 1); - gBattleAnimScriptPtr += 2; - if (GetBankSide(gBattleAnimBankAttacker) != GetBankSide(gBattleAnimBankTarget)) + wantedBank = T1_READ_8(sBattleAnimScriptPtr + 1); + sBattleAnimScriptPtr += 2; + if (GetBankSide(gAnimBankAttacker) != GetBankSide(gAnimBankTarget)) { - if (r6 != 0) - r0 = gBattleAnimBankTarget; + if (wantedBank != 0) + bank = gAnimBankTarget; else - r0 = gBattleAnimBankAttacker; - r4 = GetBankIdentity(r0); - if (!NotInBattle() && (r4 == 0 || r4 == 3)) + bank = gAnimBankAttacker; + bankIdentity = GetBankIdentity(bank); + if (!IsContest() && (bankIdentity == 0 || bankIdentity == 3)) { REG_BG1CNT_BITFIELD.priority = 1; REG_BG2CNT_BITFIELD.priority = 2; @@ -2162,51 +1909,45 @@ static void ScriptCmd_monbgprio_2A(void) static void ScriptCmd_invisible(void) { - u8 r0; u8 spriteId; - r0 = T1_READ_8(gBattleAnimScriptPtr + 1); - spriteId = GetAnimBankSpriteId(r0); + spriteId = GetAnimBankSpriteId(T1_READ_8(sBattleAnimScriptPtr + 1)); if (spriteId != 0xFF) - { gSprites[spriteId].invisible = TRUE; - } - gBattleAnimScriptPtr += 2; + + sBattleAnimScriptPtr += 2; } static void ScriptCmd_visible(void) { - u8 r0; u8 spriteId; - r0 = T1_READ_8(gBattleAnimScriptPtr + 1); - spriteId = GetAnimBankSpriteId(r0); + spriteId = GetAnimBankSpriteId(T1_READ_8(sBattleAnimScriptPtr + 1)); if (spriteId != 0xFF) - { gSprites[spriteId].invisible = FALSE; - } - gBattleAnimScriptPtr += 2; + + sBattleAnimScriptPtr += 2; } static void ScriptCmd_doublebattle_2D(void) { - u8 r7; + u8 wantedBank; u8 r4; u8 spriteId; - r7 = T1_READ_8(gBattleAnimScriptPtr + 1); - gBattleAnimScriptPtr += 2; - if (!NotInBattle() && IsDoubleBattle() - && GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) + wantedBank = T1_READ_8(sBattleAnimScriptPtr + 1); + sBattleAnimScriptPtr += 2; + if (!IsContest() && IsDoubleBattle() + && GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget)) { - if (r7 == 0) + if (wantedBank == 0) { - r4 = GetBankIdentity_permutated(gBattleAnimBankAttacker); + r4 = GetBankIdentity_permutated(gAnimBankAttacker); spriteId = GetAnimBankSpriteId(0); } else { - r4 = GetBankIdentity_permutated(gBattleAnimBankTarget); + r4 = GetBankIdentity_permutated(gAnimBankTarget); spriteId = GetAnimBankSpriteId(1); } if (spriteId != 0xFF) @@ -2224,23 +1965,23 @@ static void ScriptCmd_doublebattle_2D(void) static void ScriptCmd_doublebattle_2E(void) { - u8 r7; + u8 wantedBank; u8 r4; u8 spriteId; - r7 = T1_READ_8(gBattleAnimScriptPtr + 1); - gBattleAnimScriptPtr += 2; - if (!NotInBattle() && IsDoubleBattle() - && GetBankSide(gBattleAnimBankAttacker) == GetBankSide(gBattleAnimBankTarget)) + wantedBank = T1_READ_8(sBattleAnimScriptPtr + 1); + sBattleAnimScriptPtr += 2; + if (!IsContest() && IsDoubleBattle() + && GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget)) { - if (r7 == 0) + if (wantedBank == 0) { - r4 = GetBankIdentity_permutated(gBattleAnimBankAttacker); + r4 = GetBankIdentity_permutated(gAnimBankAttacker); spriteId = GetAnimBankSpriteId(0); } else { - r4 = GetBankIdentity_permutated(gBattleAnimBankTarget); + r4 = GetBankIdentity_permutated(gAnimBankTarget); spriteId = GetAnimBankSpriteId(1); } if (spriteId != 0xFF && r4 == 2) @@ -2254,5 +1995,5 @@ static void ScriptCmd_stopsound(void) { m4aMPlayStop(&gMPlay_SE1); m4aMPlayStop(&gMPlay_SE2); - gBattleAnimScriptPtr++; + sBattleAnimScriptPtr++; } |