From 4a01c3233aa8758a9a56fa419642c8bc4590d09a Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Thu, 4 Jan 2018 04:15:17 +0100 Subject: Decompiled poison.s --- src/battle/anim/poison.c | 115 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/battle/anim/poison.c (limited to 'src/battle') diff --git a/src/battle/anim/poison.c b/src/battle/anim/poison.c new file mode 100644 index 000000000..c53fb2a8b --- /dev/null +++ b/src/battle/anim/poison.c @@ -0,0 +1,115 @@ +#include "global.h" +#include "battle_anim.h" +#include "rom_8077ABC.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +void sub_80D9DD4(struct Sprite *sprite); +void sub_80D9E78(struct Sprite *sprite); +void sub_80D9EE8(struct Sprite *sprite); +void sub_80D9FF0(struct Sprite *sprite); + +void sub_80D9D70(struct Sprite *sprite) { + if (!gBattleAnimArgs[3]) { + StartSpriteAnim(sprite, 2); + } + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + sprite->data[5] = -30; + sub_80786EC(sprite); + sprite->callback = sub_80D9DD4; +} + +void sub_80D9DD4(struct Sprite *sprite) { + if (sub_8078718(sprite)) { + DestroyAnimSprite(sprite); + } +} + +void sub_80D9DF0(struct Sprite *sprite) { + s16 l1, l2; + if (!gBattleAnimArgs[3]) { + StartSpriteAnim(sprite, 2); + } + sub_80787B0(sprite, 1); + sub_807A3FC(gAnimBankTarget, 1, &l1, &l2); + if (GetBankSide(gAnimBankAttacker)) { + gBattleAnimArgs[4] = -gBattleAnimArgs[4]; + } + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[2] = l1 + gBattleAnimArgs[4]; + sprite->data[4] = l2 + gBattleAnimArgs[5]; + sprite->data[5] = -30; + sub_80786EC(sprite); + sprite->callback = sub_80D9E78; +} + +void sub_80D9E78(struct Sprite *sprite) { + if (sub_8078718(sprite)) { + DestroyAnimSprite(sprite); + } +} + +void sub_80D9E94(struct Sprite *sprite) { + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[0]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[1]; + sub_8078A5C(sprite); + sprite->data[5] = sprite->data[1] / gBattleAnimArgs[2]; + sprite->data[6] = sprite->data[2] / gBattleAnimArgs[2]; + sprite->callback = sub_80D9EE8; +} + +void sub_80D9EE8(struct Sprite *sprite) { + sub_8078394(sprite); + sprite->data[1] -= sprite->data[5]; + sprite->data[2] -= sprite->data[6]; + if (!sprite->data[0]) { + DestroyAnimSprite(sprite); + } +} + +void sub_80D9F14(struct Sprite *sprite) { + sub_807A3FC(gAnimBankTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y); + if (GetBankSide(gAnimBankAttacker)) { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[4] = sprite->pos1.y + sprite->data[0]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +void sub_80D9F88(struct Sprite *sprite) { + if (!gBattleAnimArgs[2]) { + sub_8078764(sprite, TRUE); + } else { + sub_807A3FC(gAnimBankTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y); + if (GetBankSide(gAnimBankAttacker)) { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + } + sprite->callback = sub_80D9FF0; +} + +void sub_80D9FF0(struct Sprite *sprite) { + sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF; + sprite->pos2.x = Sin(sprite->data[0], 4); + sprite->data[1] += 0x30; + sprite->pos2.y = -(sprite->data[1] >> 8); + if (sprite->affineAnimEnded) { + DestroyAnimSprite(sprite); + } +} \ No newline at end of file -- cgit v1.2.3 From 5588053754c2f1e293123cb1b793b867848f7c04 Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Thu, 4 Jan 2018 23:05:01 +0100 Subject: Formatted to fit with the rest of the source code --- src/battle/anim/poison.c | 83 +++++++++++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 29 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/poison.c b/src/battle/anim/poison.c index c53fb2a8b..f31c441fb 100644 --- a/src/battle/anim/poison.c +++ b/src/battle/anim/poison.c @@ -12,104 +12,129 @@ void sub_80D9E78(struct Sprite *sprite); void sub_80D9EE8(struct Sprite *sprite); void sub_80D9FF0(struct Sprite *sprite); -void sub_80D9D70(struct Sprite *sprite) { - if (!gBattleAnimArgs[3]) { +void sub_80D9D70(struct Sprite *sprite) +{ + if (!gBattleAnimArgs[3]) StartSpriteAnim(sprite, 2); - } + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); sprite->data[5] = -30; + sub_80786EC(sprite); + sprite->callback = sub_80D9DD4; } -void sub_80D9DD4(struct Sprite *sprite) { - if (sub_8078718(sprite)) { +void sub_80D9DD4(struct Sprite *sprite) // same as sub_80D9E78 +{ + if (sub_8078718(sprite)) DestroyAnimSprite(sprite); - } } -void sub_80D9DF0(struct Sprite *sprite) { +void sub_80D9DF0(struct Sprite *sprite) +{ s16 l1, l2; - if (!gBattleAnimArgs[3]) { + if (!gBattleAnimArgs[3]) StartSpriteAnim(sprite, 2); - } + sub_80787B0(sprite, 1); sub_807A3FC(gAnimBankTarget, 1, &l1, &l2); - if (GetBankSide(gAnimBankAttacker)) { + + if (GetBankSide(gAnimBankAttacker)) gBattleAnimArgs[4] = -gBattleAnimArgs[4]; - } + sprite->data[0] = gBattleAnimArgs[2]; sprite->data[2] = l1 + gBattleAnimArgs[4]; sprite->data[4] = l2 + gBattleAnimArgs[5]; sprite->data[5] = -30; + sub_80786EC(sprite); + sprite->callback = sub_80D9E78; } -void sub_80D9E78(struct Sprite *sprite) { - if (sub_8078718(sprite)) { +void sub_80D9E78(struct Sprite *sprite) // same as sub_80D9DD4 +{ + if (sub_8078718(sprite)) DestroyAnimSprite(sprite); - } } -void sub_80D9E94(struct Sprite *sprite) { +void sub_80D9E94(struct Sprite *sprite) +{ sprite->data[0] = gBattleAnimArgs[2]; sprite->data[1] = sprite->pos1.x; sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[0]; sprite->data[3] = sprite->pos1.y; sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[1]; + sub_8078A5C(sprite); + sprite->data[5] = sprite->data[1] / gBattleAnimArgs[2]; sprite->data[6] = sprite->data[2] / gBattleAnimArgs[2]; + sprite->callback = sub_80D9EE8; } -void sub_80D9EE8(struct Sprite *sprite) { +void sub_80D9EE8(struct Sprite *sprite) +{ sub_8078394(sprite); + sprite->data[1] -= sprite->data[5]; sprite->data[2] -= sprite->data[6]; - if (!sprite->data[0]) { + + if (!sprite->data[0]) DestroyAnimSprite(sprite); - } } -void sub_80D9F14(struct Sprite *sprite) { +void sub_80D9F14(struct Sprite *sprite) +{ sub_807A3FC(gAnimBankTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y); - if (GetBankSide(gAnimBankAttacker)) { + + if (GetBankSide(gAnimBankAttacker)) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - } + sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; sprite->data[4] = sprite->pos1.y + sprite->data[0]; + sprite->callback = sub_8078B34; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -void sub_80D9F88(struct Sprite *sprite) { - if (!gBattleAnimArgs[2]) { +void sub_80D9F88(struct Sprite *sprite) +{ + if (!gBattleAnimArgs[2]) + { sub_8078764(sprite, TRUE); - } else { + } + else + { sub_807A3FC(gAnimBankTarget, TRUE, &sprite->pos1.x, &sprite->pos1.y); - if (GetBankSide(gAnimBankAttacker)) { + + if (GetBankSide(gAnimBankAttacker)) gBattleAnimArgs[0] = -gBattleAnimArgs[0]; - } + sprite->pos1.x += gBattleAnimArgs[0]; sprite->pos1.y += gBattleAnimArgs[1]; } + sprite->callback = sub_80D9FF0; } -void sub_80D9FF0(struct Sprite *sprite) { +void sub_80D9FF0(struct Sprite *sprite) +{ sprite->data[0] = (sprite->data[0] + 0xB) & 0xFF; sprite->pos2.x = Sin(sprite->data[0], 4); sprite->data[1] += 0x30; sprite->pos2.y = -(sprite->data[1] >> 8); - if (sprite->affineAnimEnded) { + + if (sprite->affineAnimEnded) DestroyAnimSprite(sprite); - } } \ No newline at end of file -- cgit v1.2.3 From 0bbbc1c6dfc6c2b8646276de94cedab9ddc8bc4b Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sat, 6 Jan 2018 00:06:06 +0100 Subject: Started decompiling wisp_fire.s --- src/battle/anim/wisp_fire.c | 48 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 src/battle/anim/wisp_fire.c (limited to 'src/battle') diff --git a/src/battle/anim/wisp_fire.c b/src/battle/anim/wisp_fire.c new file mode 100644 index 000000000..e31c15d9c --- /dev/null +++ b/src/battle/anim/wisp_fire.c @@ -0,0 +1,48 @@ +#include "global.h" +#include "battle_anim.h" +#include "main.h" +#include "rom_8077ABC.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankTarget; +// extern u8 gAnimBankAttacker; + +void sub_80D5CC0(struct Sprite *sprite) +{ + if (!sprite->data[0]) + { + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[0] += 1; + } + + sprite->data[3] += 0xC0 * 2; + sprite->data[4] += 0xA0; + + sprite->pos2.x = Sin(sprite->data[1], sprite->data[3] >> 8); + sprite->pos2.y = Cos(sprite->data[1], sprite->data[4] >> 8); + + sprite->data[1] = (sprite->data[1] + 7) & 0xFF; + + if (gMain.inBattle) + if ((u16) (sprite->data[1] - 0x40) > 0x83) + sprite->oam.priority = sub_8079ED4(gAnimBankTarget); + else + sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1; + else + if ((u16) (sprite->data[1] - 0x40) > 0x83) + sprite->subpriority = 0x1D; + else + sprite->subpriority = 0x1F; + + if (++sprite->data[2] > 0x14) + sprite->invisible ^= 1; + + if (sprite->data[2] == 0x1E) + DestroyAnimSprite(sprite); +} + +// void sub_80D5DDC(struct Sprite *sprite) +// { + +// } \ No newline at end of file -- cgit v1.2.3 From b3551bc2f328c286c6ecc45ea288665d46b44260 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 6 Jan 2018 12:27:27 -0600 Subject: fix some code and formatting anomalies --- src/battle/battle_7.c | 9 +++++---- src/battle/contest_link_80C857C.c | 39 ++++++++++----------------------------- 2 files changed, 15 insertions(+), 33 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 7ca9ac3c4..e11971606 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -3,6 +3,7 @@ #include "battle_anim.h" #include "battle_interface.h" #include "blend_palette.h" +#include "contest.h" #include "data2.h" #include "decompress.h" #include "main.h" @@ -629,9 +630,9 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) if (IsContest()) { r10 = 0; - species = ewram19348.unk2; - personalityValue = ewram19348.unk8; - otId = ewram19348.unkC; + species = shared19348.unk2; + personalityValue = shared19348.unk8; + otId = shared19348.unkC; HandleLoadSpecialPokePic( &gMonBackPicTable[species], gMonBackPicCoords[species].coords, @@ -639,7 +640,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) eVoidSharedArr2, gUnknown_081FAF4C[0], species, - ewram19348.unk10); + shared19348.unk10); } else { diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index 0ae98af09..616a72d27 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -3,52 +3,33 @@ #if GERMAN -void de_sub_80C9274(bool32 arg0) { - if (deUnkValue2 != 1) - { - return; - } - - if (arg0) - { - deUnkValue2 = 3; - } - else +void de_sub_80C9274(bool32 arg0) +{ + if (deUnkValue2 == 1) { - deUnkValue2 = 2; + if (arg0) + deUnkValue2 = 3; + else + deUnkValue2 = 2; } } -void de_sub_80C9294(bool32 arg0) { +void de_sub_80C9294(bool32 arg0) +{ if (deUnkValue2 == 1) { if (arg0) - { deUnkValue2 = 3; - } else - { deUnkValue2 = 2; - } - - return; } - - - if (deUnkValue2 == 2) + else if (deUnkValue2 == 2) { SendBlock(0, sBlockRequestLookupTable[deUnkValue1].address, sBlockRequestLookupTable[deUnkValue1].size); - if (arg0) - { deUnkValue2 = 0; - } else - { deUnkValue2 = 1; - } - - return; } } -- cgit v1.2.3 From 344b8bffbb969cca8b1c23ddf994c0c8ec6fe1f8 Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sat, 6 Jan 2018 22:41:38 +0100 Subject: Finished decompiling wisp_fire --- src/battle/anim/wisp_fire.c | 160 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 154 insertions(+), 6 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/wisp_fire.c b/src/battle/anim/wisp_fire.c index e31c15d9c..348ce6426 100644 --- a/src/battle/anim/wisp_fire.c +++ b/src/battle/anim/wisp_fire.c @@ -1,12 +1,20 @@ #include "global.h" #include "battle_anim.h" +#include "blend_palette.h" #include "main.h" #include "rom_8077ABC.h" +#include "task.h" #include "trig.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankTarget; -// extern u8 gAnimBankAttacker; +extern u8 gAnimBankAttacker; + +extern u8 gObjectBankIDs[]; +extern s8 gUnknown_083D9794[16]; +extern s8 gUnknown_083D97A4[16]; + +void sub_80D5E4C(u8 taskId); void sub_80D5CC0(struct Sprite *sprite) { @@ -25,15 +33,19 @@ void sub_80D5CC0(struct Sprite *sprite) sprite->data[1] = (sprite->data[1] + 7) & 0xFF; if (gMain.inBattle) - if ((u16) (sprite->data[1] - 0x40) > 0x83) + { + if (sprite->data[1] < 64 || sprite->data[1] > 195) sprite->oam.priority = sub_8079ED4(gAnimBankTarget); else sprite->oam.priority = sub_8079ED4(gAnimBankTarget) + 1; + } else - if ((u16) (sprite->data[1] - 0x40) > 0x83) + { + if (sprite->data[1] < 64 || sprite->data[1] > 195) sprite->subpriority = 0x1D; else sprite->subpriority = 0x1F; + } if (++sprite->data[2] > 0x14) sprite->invisible ^= 1; @@ -42,7 +54,143 @@ void sub_80D5CC0(struct Sprite *sprite) DestroyAnimSprite(sprite); } -// void sub_80D5DDC(struct Sprite *sprite) -// { +void sub_80D5DDC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + task->data[12] = !GetBankSide(gAnimBankAttacker) ? 1 : -1; + task->data[13] = IsAnimBankSpriteVisible(gAnimBankTarget ^ 2) + 1; + task->data[14] = GetAnimBankSpriteId(1); + task->data[15] = GetAnimBankSpriteId(3); + + task->func = sub_80D5E4C; +} + +void sub_80D5E4C(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[10] += task->data[12] * 2; + if (++task->data[1] >= 2) + { + task->data[1] = 0; + task->data[2]++; + if (task->data[2] & 1) + task->data[11] = 2; + else + task->data[11] = -2; + } + + for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) + { + gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11]; + } + + if (++task->data[9] == 16) + { + task->data[9] = 0; + task->data[0]++; + } + break; + case 1: + if (++task->data[1] >= 5) + { + task->data[1] = 0; + task->data[2]++; + + if (task->data[2] & 1) + task->data[11] = 2; + else + task->data[11] = -2; + } + + for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) + { + gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11]; + } + + if (++task->data[9] == 96) + { + task->data[9] = 0; + task->data[0]++; + } + break; + case 2: + task->data[10] -= task->data[12] * 2; + + if (++task->data[1] >= 2) + { + task->data[1] = 0; + task->data[2]++; + + if (task->data[2] & 1) + task->data[11] = 2; + else + task->data[11] = -2; + } -// } \ No newline at end of file + for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) + { + gSprites[task->data[task->data[3] + 14]].pos2.x = task->data[10] + task->data[11]; + } + + if (++task->data[9] == 16) + { + task->data[0]++; + } + break; + case 3: + for (task->data[3] = 0; task->data[3] < task->data[13]; task->data[3]++) + { + gSprites[task->data[task->data[3] + 14]].pos2.x = 0; + } + + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80D6080(u8 taskId) +{ + struct Struct_sub_8078914 unk; + sub_8078914(&unk); + BlendPalette(unk.field_8 << 4, 16, gBattleAnimArgs[0], gBattleAnimArgs[1]); // u16 palOffset, u16 numEntries, u8 coeff, u16 blendColor + DestroyAnimVisualTask(taskId); +} + +void sub_80D60B4(u8 taskId) +{ + s8 unk; + u8 spriteId; + + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + gTasks[taskId].data[4] = gBattleAnimArgs[3]; + } + gTasks[taskId].data[0]++; + + spriteId = gObjectBankIDs[gAnimBankTarget]; + + if (!gTasks[taskId].data[4]) + unk = gUnknown_083D9794[gTasks[taskId].data[0] % 10]; + else + unk = gUnknown_083D97A4[gTasks[taskId].data[0] % 10]; + + if (gTasks[taskId].data[3] == 1) + gSprites[spriteId].pos2.y = gBattleAnimArgs[1] * unk < 0 ? -(gBattleAnimArgs[1] * unk) : gBattleAnimArgs[1] * unk; + else + gSprites[spriteId].pos2.x = gBattleAnimArgs[1] * unk; + + if (gTasks[taskId].data[0] == gTasks[taskId].data[1]) + { + gSprites[spriteId].pos2.x = 0; + gSprites[spriteId].pos2.y = 0; + DestroyAnimVisualTask(taskId); + } +} \ No newline at end of file -- cgit v1.2.3 From dbcd5075b036cdd700cdff2b863e9884037ddfca Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sun, 7 Jan 2018 01:47:42 +0100 Subject: Split battle_anim_81258BC.s and decompile unused --- src/battle/anim/sfx.c | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/battle/anim/sfx.c (limited to 'src/battle') diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c new file mode 100644 index 000000000..265271ac5 --- /dev/null +++ b/src/battle/anim/sfx.c @@ -0,0 +1,2 @@ +#include "global.h" + -- cgit v1.2.3 From 39810d713630fbadbd16f00862deca1f12d3a91d Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sun, 7 Jan 2018 15:05:49 +0100 Subject: Started decompiling move animation sfx --- src/battle/anim/sfx.c | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) (limited to 'src/battle') diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index 265271ac5..a66a15371 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -1,2 +1,115 @@ #include "global.h" +#include "battle_anim.h" +#include "sound.h" +#include "task.h" + +extern s16 gBattleAnimArgs[]; + +void sub_812AF98(u8 taskId); +void sub_812B004(u8 taskId); +void sub_812B004(u8 taskId); + +void sub_812AF30(u8 taskId) +{ + s8 sourcePan, targetPan, incrementPan; + + TASK.data[0] = gBattleAnimArgs[0]; + TASK.data[1] = gBattleAnimArgs[1]; + + sourcePan = BattleAnimAdjustPanning(-64); + targetPan = BattleAnimAdjustPanning(63); + incrementPan = CalculatePanIncrement(sourcePan, targetPan, 2); + + TASK.data[2] = sourcePan; + TASK.data[3] = targetPan; + TASK.data[4] = incrementPan; + TASK.data[10] = 10; + + TASK.func = sub_812AF98; +} + +#ifdef NONMATCHING +void sub_812AF98(u8 taskId) // r4 := TASK +{ + s16 pan = TASK.data[2]; // r5 + s8 var0 = TASK.data[4]; // r6 + + if (++TASK.data[11] == 111) + { + TASK.data[10] = 5; + TASK.data[11] = 0; + TASK.func = sub_812B004; + } + else + { + if (++TASK.data[10] == 11) + { + TASK.data[10] = 0; + PlaySE12WithPanning(TASK.data[0], pan); + } + TASK.data[2] = sub_8077104(var0 + pan); + } +} +#else +__attribute__((naked)) +void sub_812AF98(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r6,lr}\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + ldr r2, _0812AFC8 @ =gTasks\n\ + lsls r1, r0, 2\n\ + adds r1, r0\n\ + lsls r1, 3\n\ + adds r4, r1, r2\n\ + ldrh r5, [r4, 0xC]\n\ + ldrb r6, [r4, 0x10]\n\ + ldrh r0, [r4, 0x1E]\n\ + adds r0, 0x1\n\ + movs r1, 0\n\ + strh r0, [r4, 0x1E]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x6F\n\ + bne _0812AFD0\n\ + movs r0, 0x5\n\ + strh r0, [r4, 0x1C]\n\ + strh r1, [r4, 0x1E]\n\ + ldr r0, _0812AFCC @ =sub_812B004\n\ + str r0, [r4]\n\ + b _0812AFFE\n\ + .align 2, 0\n\ +_0812AFC8: .4byte gTasks\n\ +_0812AFCC: .4byte sub_812B004\n\ +_0812AFD0:\n\ + ldrh r0, [r4, 0x1C]\n\ + adds r0, 0x1\n\ + strh r0, [r4, 0x1C]\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0xB\n\ + bne _0812AFEA\n\ + strh r1, [r4, 0x1C]\n\ + ldrh r0, [r4, 0x8]\n\ + lsls r1, r5, 24\n\ + asrs r1, 24\n\ + bl PlaySE12WithPanning\n\ +_0812AFEA:\n\ + lsls r1, r6, 24\n\ + asrs r1, 24\n\ + lsls r0, r5, 16\n\ + asrs r0, 16\n\ + adds r0, r1\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + bl sub_8077104\n\ + strh r0, [r4, 0xC]\n\ +_0812AFFE:\n\ + pop {r4-r6}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif // NONMATCHING -- cgit v1.2.3 From 589df520baf710078abf2756d35662bda944861c Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sun, 7 Jan 2018 16:20:21 +0100 Subject: sub_812B004 - sub_812B058 --- src/battle/anim/sfx.c | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) (limited to 'src/battle') diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index a66a15371..e7e3c867e 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -8,6 +8,7 @@ extern s16 gBattleAnimArgs[]; void sub_812AF98(u8 taskId); void sub_812B004(u8 taskId); void sub_812B004(u8 taskId); +void sub_812B108(u8 taskId); void sub_812AF30(u8 taskId) { @@ -113,3 +114,140 @@ _0812AFFE:\n\ } #endif // NONMATCHING +void sub_812B004(u8 taskId) +{ + s8 pan; + + if (++TASK.data[10] == 6) + { + TASK.data[10] = 0; + + pan = BattleAnimAdjustPanning(0x3f); + PlaySE12WithPanning(TASK.data[1], pan); + + if (++TASK.data[11] == 2) + { + DestroyAnimSoundTask(taskId); + } + } +} + +#ifdef NONMATCHING +void sub_812B058(u8 taskId) +{ + s16 sp, r10, r7, r9; + s8 r5, r6, r4, r0; + + sp = gBattleAnimArgs[0]; + r5 = gBattleAnimArgs[2]; + r6 = gBattleAnimArgs[3]; + r10 = gBattleAnimArgs[4]; + r7 = gBattleAnimArgs[5]; + r9 = gBattleAnimArgs[6]; + r4 = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + r5 = BattleAnimAdjustPanning(r5); + r0 = CalculatePanIncrement(r4, r5, r6); + + TASK.data[0] = sp; + TASK.data[1] = r4; + TASK.data[2] = r5; + TASK.data[3] = r0; + TASK.data[4] = r10; + TASK.data[5] = r7; + TASK.data[6] = r9; + TASK.data[10] = 0; + TASK.data[11] = r4; + TASK.data[12] = r9; + + TASK.func = sub_812B108; + sub_812B108(taskId); +} +#else +__attribute__((naked)) +void sub_812B058(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x4\n\ + mov r8, r0\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + mov r8, r0\n\ + ldr r0, _0812B0FC @ =gBattleAnimArgs\n\ + ldrh r1, [r0]\n\ + str r1, [sp]\n\ + ldrb r5, [r0, 0x4]\n\ + ldrb r6, [r0, 0x6]\n\ + ldrb r3, [r0, 0x8]\n\ + mov r10, r3\n\ + ldrb r7, [r0, 0xA]\n\ + ldrb r1, [r0, 0xC]\n\ + mov r9, r1\n\ + ldrb r0, [r0, 0x2]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + bl BattleAnimAdjustPanning\n\ + adds r4, r0, 0\n\ + lsls r4, 24\n\ + lsrs r4, 24\n\ + lsls r5, 24\n\ + asrs r5, 24\n\ + adds r0, r5, 0\n\ + bl BattleAnimAdjustPanning\n\ + adds r5, r0, 0\n\ + lsls r4, 24\n\ + asrs r4, 24\n\ + lsls r5, 24\n\ + asrs r5, 24\n\ + lsls r6, 24\n\ + asrs r6, 24\n\ + adds r0, r4, 0\n\ + adds r1, r5, 0\n\ + adds r2, r6, 0\n\ + bl CalculatePanIncrement\n\ + ldr r2, _0812B100 @ =gTasks\n\ + mov r3, r8\n\ + lsls r1, r3, 2\n\ + add r1, r8\n\ + lsls r1, 3\n\ + adds r1, r2\n\ + movs r2, 0\n\ + mov r6, sp\n\ + ldrh r6, [r6]\n\ + strh r6, [r1, 0x8]\n\ + strh r4, [r1, 0xA]\n\ + strh r5, [r1, 0xC]\n\ + lsls r0, 24\n\ + asrs r0, 24\n\ + strh r0, [r1, 0xE]\n\ + mov r0, r10\n\ + strh r0, [r1, 0x10]\n\ + strh r7, [r1, 0x12]\n\ + mov r3, r9\n\ + strh r3, [r1, 0x14]\n\ + strh r2, [r1, 0x1C]\n\ + strh r4, [r1, 0x1E]\n\ + strh r3, [r1, 0x20]\n\ + ldr r2, _0812B104 @ =sub_812B108\n\ + str r2, [r1]\n\ + mov r0, r8\n\ + bl _call_via_r2\n\ + add sp, 0x4\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_0812B0FC: .4byte gBattleAnimArgs\n\ +_0812B100: .4byte gTasks\n\ +_0812B104: .4byte sub_812B108\n\ + .syntax divided\n"); +} +#endif // NONMATCHING -- cgit v1.2.3 From e99816d2082d009457105a5e74524f97b80661c0 Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sun, 7 Jan 2018 23:12:28 +0100 Subject: Decompiled sub_812B108 --- src/battle/anim/sfx.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/battle') diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index e7e3c867e..981022f1e 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -251,3 +251,25 @@ _0812B104: .4byte sub_812B108\n\ .syntax divided\n"); } #endif // NONMATCHING + +void sub_812B108(u8 taskId) +{ + if (TASK.data[12]++ == TASK.data[6]) + { + TASK.data[12] = 0; + PlaySE12WithPanning(TASK.data[0], TASK.data[11]); + + if (--TASK.data[4] == 0) + { + DestroyAnimSoundTask(taskId); + return; + } + } + + if (TASK.data[10]++ == TASK.data[5]) + { + TASK.data[10] = 0; + TASK.data[11] += TASK.data[3]; + TASK.data[11] = sub_8077104(TASK.data[11]); + } +} -- cgit v1.2.3 From 376e2470e9e4f5a0a7cc94b9d7677ea6f7601dfa Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Mon, 8 Jan 2018 01:49:16 +0100 Subject: Matched sub_812AF98 --- src/battle/anim/sfx.c | 72 ++++----------------------------------------------- 1 file changed, 5 insertions(+), 67 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index 981022f1e..99f050dcb 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -29,11 +29,10 @@ void sub_812AF30(u8 taskId) TASK.func = sub_812AF98; } -#ifdef NONMATCHING -void sub_812AF98(u8 taskId) // r4 := TASK +void sub_812AF98(u8 taskId) { - s16 pan = TASK.data[2]; // r5 - s8 var0 = TASK.data[4]; // r6 + s16 pan = TASK.data[2]; + s8 var0 = TASK.data[4]; if (++TASK.data[11] == 111) { @@ -48,71 +47,10 @@ void sub_812AF98(u8 taskId) // r4 := TASK TASK.data[10] = 0; PlaySE12WithPanning(TASK.data[0], pan); } - TASK.data[2] = sub_8077104(var0 + pan); + pan += var0; + TASK.data[2] = sub_8077104(pan); } } -#else -__attribute__((naked)) -void sub_812AF98(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r6,lr}\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - ldr r2, _0812AFC8 @ =gTasks\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 3\n\ - adds r4, r1, r2\n\ - ldrh r5, [r4, 0xC]\n\ - ldrb r6, [r4, 0x10]\n\ - ldrh r0, [r4, 0x1E]\n\ - adds r0, 0x1\n\ - movs r1, 0\n\ - strh r0, [r4, 0x1E]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0x6F\n\ - bne _0812AFD0\n\ - movs r0, 0x5\n\ - strh r0, [r4, 0x1C]\n\ - strh r1, [r4, 0x1E]\n\ - ldr r0, _0812AFCC @ =sub_812B004\n\ - str r0, [r4]\n\ - b _0812AFFE\n\ - .align 2, 0\n\ -_0812AFC8: .4byte gTasks\n\ -_0812AFCC: .4byte sub_812B004\n\ -_0812AFD0:\n\ - ldrh r0, [r4, 0x1C]\n\ - adds r0, 0x1\n\ - strh r0, [r4, 0x1C]\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - cmp r0, 0xB\n\ - bne _0812AFEA\n\ - strh r1, [r4, 0x1C]\n\ - ldrh r0, [r4, 0x8]\n\ - lsls r1, r5, 24\n\ - asrs r1, 24\n\ - bl PlaySE12WithPanning\n\ -_0812AFEA:\n\ - lsls r1, r6, 24\n\ - asrs r1, 24\n\ - lsls r0, r5, 16\n\ - asrs r0, 16\n\ - adds r0, r1\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - bl sub_8077104\n\ - strh r0, [r4, 0xC]\n\ -_0812AFFE:\n\ - pop {r4-r6}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif // NONMATCHING void sub_812B004(u8 taskId) { -- cgit v1.2.3 From 36841a8498134931be3d1c73927f6fec4482fb30 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 6 Jan 2018 13:56:53 -0800 Subject: Decompile more battle_2 functions --- src/battle/battle_2.c | 1645 +++++++++++++++++++++++++++++++++++++++++++++++- src/battle/battle_ai.c | 4 +- 2 files changed, 1646 insertions(+), 3 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index b0654950b..90d0d40e3 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -4,6 +4,7 @@ #include "battle_interface.h" #include "battle_setup.h" #include "data2.h" +#include "event_data.h" #include "item.h" #include "link.h" #include "main.h" @@ -26,9 +27,10 @@ #include "trig.h" #include "unknown_task.h" #include "util.h" +#include "constants/battle_move_effects.h" #include "constants/items.h" #include "constants/hold_effects.h" -#include "constants/battle_move_effects.h" +#include "constants/moves.h" #include "ewram.h" struct UnknownStruct7 @@ -56,6 +58,8 @@ struct UnknownStruct12 extern const u16 gUnknown_08D004E0[]; extern const struct MonCoords gCastformFrontSpriteCoords[]; +extern u8 gStatStageRatios[][2]; +extern u8 gUnknown_02024A76[4]; extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; extern u8 gBattleBufferB[][0x200]; extern u8 gActiveBank; @@ -2352,3 +2356,1642 @@ void sub_8012324(void) } } */ +__attribute__((naked)) +void sub_8012324(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + sub sp, 0x1C\n\ + ldr r0, _08012340 @ =gBattleCommunication\n\ + movs r1, 0\n\ + strb r1, [r0, 0x4]\n\ + ldr r0, _08012344 @ =gActiveBank\n\ + strb r1, [r0]\n\ + ldr r0, _08012348 @ =gNoOfAllBanks\n\ + bl _08012F74\n\ + .align 2, 0\n\ +_08012340: .4byte gBattleCommunication\n\ +_08012344: .4byte gActiveBank\n\ +_08012348: .4byte gNoOfAllBanks\n\ +_0801234C:\n\ + ldr r4, _08012374 @ =gActiveBank\n\ + ldrb r0, [r4]\n\ + bl GetBankIdentity\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + ldr r1, _08012378 @ =gBattleCommunication\n\ + ldrb r0, [r4]\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x6\n\ + bls _08012368\n\ + bl _08012F66\n\ +_08012368:\n\ + lsls r0, 2\n\ + ldr r1, _0801237C @ =_08012380\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08012374: .4byte gActiveBank\n\ +_08012378: .4byte gBattleCommunication\n\ +_0801237C: .4byte _08012380\n\ + .align 2, 0\n\ +_08012380:\n\ + .4byte _0801239C\n\ + .4byte _080124C8\n\ + .4byte _08012A28\n\ + .4byte _08012DA8\n\ + .4byte _08012E50\n\ + .4byte _08012E94\n\ + .4byte _08012F38\n\ +_0801239C:\n\ + ldr r4, _08012434 @ =gSharedMem\n\ + ldr r0, _08012438 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + ldr r1, _0801243C @ =0x00016068\n\ + adds r0, r1\n\ + adds r0, r4\n\ + movs r1, 0x6\n\ + strb r1, [r0]\n\ + ldr r0, _08012440 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080123F8\n\ + movs r1, 0x2\n\ + movs r0, 0x2\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + beq _080123F8\n\ + eors r5, r1\n\ + adds r0, r5, 0\n\ + bl GetBankByPlayerAI\n\ + ldr r2, _08012444 @ =0x000160a6\n\ + adds r1, r4, r2\n\ + ldrb r1, [r1]\n\ + ldr r2, _08012448 @ =gBitTable\n\ + lsls r0, 24\n\ + lsrs r0, 22\n\ + adds r0, r2\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + bne _080123F8\n\ + ldr r4, _0801244C @ =gBattleCommunication\n\ + adds r0, r5, 0\n\ + bl GetBankByPlayerAI\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r0, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x4\n\ + beq _080123F8\n\ + bl _08012F66\n\ +_080123F8:\n\ + ldr r0, _08012434 @ =gSharedMem\n\ + ldr r3, _08012444 @ =0x000160a6\n\ + adds r0, r3\n\ + ldrb r3, [r0]\n\ + ldr r1, _08012448 @ =gBitTable\n\ + ldr r4, _08012438 @ =gActiveBank\n\ + ldrb r2, [r4]\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + beq _08012468\n\ + ldr r0, _08012450 @ =gActionForBanks\n\ + adds r0, r2, r0\n\ + movs r1, 0xD\n\ + strb r1, [r0]\n\ + ldr r0, _08012440 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08012454\n\ + ldr r0, _0801244C @ =gBattleCommunication\n\ + ldrb r1, [r4]\n\ + adds r1, r0\n\ + movs r0, 0x4\n\ + strb r0, [r1]\n\ + bl _08012F66\n\ + .align 2, 0\n\ +_08012434: .4byte gSharedMem\n\ +_08012438: .4byte gActiveBank\n\ +_0801243C: .4byte 0x00016068\n\ +_08012440: .4byte gBattleTypeFlags\n\ +_08012444: .4byte 0x000160a6\n\ +_08012448: .4byte gBitTable\n\ +_0801244C: .4byte gBattleCommunication\n\ +_08012450: .4byte gActionForBanks\n\ +_08012454:\n\ + ldr r0, _08012464 @ =gBattleCommunication\n\ + ldrb r1, [r4]\n\ + adds r1, r0\n\ + movs r0, 0x3\n\ + strb r0, [r1]\n\ + bl _08012F66\n\ + .align 2, 0\n\ +_08012464: .4byte gBattleCommunication\n\ +_08012468:\n\ + ldr r1, _0801249C @ =gBattleMons\n\ + movs r0, 0x58\n\ + muls r0, r2\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r1, [r0]\n\ + movs r0, 0x80\n\ + lsls r0, 5\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08012488\n\ + movs r0, 0x80\n\ + lsls r0, 15\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _080124A8\n\ +_08012488:\n\ + ldr r0, _080124A0 @ =gActionForBanks\n\ + adds r0, r2, r0\n\ + strb r3, [r0]\n\ + ldr r1, _080124A4 @ =gBattleCommunication\n\ + ldrb r0, [r4]\n\ + adds r0, r1\n\ + movs r1, 0x3\n\ + strb r1, [r0]\n\ + bl _08012F66\n\ + .align 2, 0\n\ +_0801249C: .4byte gBattleMons\n\ +_080124A0: .4byte gActionForBanks\n\ +_080124A4: .4byte gBattleCommunication\n\ +_080124A8:\n\ + ldr r0, _080124C0 @ =gActionForBanks\n\ + ldrb r1, [r0]\n\ + ldr r0, _080124C4 @ =gBattleBufferB\n\ + ldrb r2, [r0, 0x1]\n\ + ldrb r0, [r0, 0x2]\n\ + lsls r0, 8\n\ + orrs r2, r0\n\ + movs r0, 0\n\ + bl Emitcmd18\n\ + bl _08012E32\n\ + .align 2, 0\n\ +_080124C0: .4byte gActionForBanks\n\ +_080124C4: .4byte gBattleBufferB\n\ +_080124C8:\n\ + ldr r4, _08012520 @ =gBattleExecBuffer\n\ + ldr r1, _08012524 @ =gBitTable\n\ + ldr r3, _08012528 @ =gActiveBank\n\ + ldrb r5, [r3]\n\ + lsls r0, r5, 2\n\ + adds r0, r1\n\ + ldr r2, [r0]\n\ + lsls r0, r2, 4\n\ + movs r1, 0xF0\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + orrs r0, r2\n\ + lsls r1, r2, 8\n\ + orrs r0, r1\n\ + lsls r2, 12\n\ + orrs r0, r2\n\ + ldr r1, [r4]\n\ + ands r1, r0\n\ + mov r8, r3\n\ + cmp r1, 0\n\ + beq _080124F6\n\ + bl _08012F66\n\ +_080124F6:\n\ + ldr r2, _0801252C @ =gActionForBanks\n\ + adds r2, r5, r2\n\ + ldr r1, _08012530 @ =gBattleBufferB\n\ + lsls r0, r5, 9\n\ + adds r1, 0x1\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + ldrb r0, [r3]\n\ + lsls r0, 9\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, 0xC\n\ + bls _08012514\n\ + b _08012968\n\ +_08012514:\n\ + lsls r0, 2\n\ + ldr r1, _08012534 @ =_08012538\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08012520: .4byte gBattleExecBuffer\n\ +_08012524: .4byte gBitTable\n\ +_08012528: .4byte gActiveBank\n\ +_0801252C: .4byte gActionForBanks\n\ +_08012530: .4byte gBattleBufferB\n\ +_08012534: .4byte _08012538\n\ + .align 2, 0\n\ +_08012538:\n\ + .4byte _0801256C\n\ + .4byte _080126B4\n\ + .4byte _080126E0\n\ + .4byte _08012968\n\ + .4byte _08012968\n\ + .4byte _080128B0\n\ + .4byte _08012908\n\ + .4byte _08012968\n\ + .4byte _08012968\n\ + .4byte _08012968\n\ + .4byte _08012968\n\ + .4byte _08012968\n\ + .4byte _0801292C\n\ +_0801256C:\n\ + bl AreAllMovesUnusable\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080125D0\n\ + ldr r0, _080125B4 @ =gBattleCommunication\n\ + ldr r2, _080125B8 @ =gActiveBank\n\ + ldrb r1, [r2]\n\ + adds r1, r0\n\ + movs r4, 0\n\ + movs r0, 0x5\n\ + strb r0, [r1]\n\ + ldr r3, _080125BC @ =gSharedMem\n\ + ldrb r0, [r2]\n\ + ldr r1, _080125C0 @ =0x00016060\n\ + adds r0, r1\n\ + adds r0, r3\n\ + strb r4, [r0]\n\ + ldrb r0, [r2]\n\ + ldr r4, _080125C4 @ =0x00016094\n\ + adds r0, r4\n\ + adds r0, r3\n\ + movs r1, 0x3\n\ + strb r1, [r0]\n\ + ldrb r1, [r2]\n\ + ldr r0, _080125C8 @ =0x00016010\n\ + adds r2, r1, r0\n\ + adds r2, r3\n\ + ldr r0, _080125CC @ =gBattleBufferB\n\ + lsls r1, 9\n\ + adds r0, 0x3\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + strb r0, [r2]\n\ + bl _08012F90\n\ + .align 2, 0\n\ +_080125B4: .4byte gBattleCommunication\n\ +_080125B8: .4byte gActiveBank\n\ +_080125BC: .4byte gSharedMem\n\ +_080125C0: .4byte 0x00016060\n\ +_080125C4: .4byte 0x00016094\n\ +_080125C8: .4byte 0x00016010\n\ +_080125CC: .4byte gBattleBufferB\n\ +_080125D0:\n\ + ldr r1, _080125FC @ =gDisableStructs\n\ + ldr r5, _08012600 @ =gActiveBank\n\ + ldrb r4, [r5]\n\ + lsls r0, r4, 3\n\ + subs r0, r4\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldrh r2, [r0, 0x6]\n\ + cmp r2, 0\n\ + beq _0801260C\n\ + ldr r1, _08012604 @ =gChosenMovesByBanks\n\ + lsls r0, r4, 1\n\ + adds r0, r1\n\ + strh r2, [r0]\n\ + ldr r1, _08012608 @ =gBattleCommunication\n\ + ldrb r0, [r5]\n\ + adds r0, r1\n\ + movs r1, 0x3\n\ + strb r1, [r0]\n\ + bl _08012F90\n\ + .align 2, 0\n\ +_080125FC: .4byte gDisableStructs\n\ +_08012600: .4byte gActiveBank\n\ +_08012604: .4byte gChosenMovesByBanks\n\ +_08012608: .4byte gBattleCommunication\n\ +_0801260C:\n\ + add r2, sp, 0x4\n\ + ldr r3, _080126AC @ =gBattleMons\n\ + movs r1, 0x58\n\ + adds r0, r4, 0\n\ + muls r0, r1\n\ + adds r0, r3\n\ + ldrh r0, [r0]\n\ + strh r0, [r2, 0x10]\n\ + ldrb r0, [r5]\n\ + muls r0, r1\n\ + adds r0, r3\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + strb r0, [r2, 0x12]\n\ + ldrb r0, [r5]\n\ + muls r0, r1\n\ + adds r0, r3\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + strb r0, [r2, 0x13]\n\ + movs r4, 0\n\ + mov r1, sp\n\ + adds r1, 0xC\n\ + str r1, [sp, 0x18]\n\ + add r2, sp, 0x10\n\ + mov r10, r2\n\ + mov r8, r3\n\ + adds r7, r5, 0\n\ + movs r6, 0x58\n\ + movs r3, 0xC\n\ + add r3, r8\n\ + mov r9, r3\n\ + add r5, sp, 0x4\n\ +_0801264E:\n\ + lsls r2, r4, 1\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r2, r0\n\ + add r0, r9\n\ + ldrh r0, [r0]\n\ + strh r0, [r5]\n\ + ldr r0, [sp, 0x18]\n\ + adds r3, r0, r4\n\ + ldrb r0, [r7]\n\ + muls r0, r6\n\ + adds r0, r4, r0\n\ + mov r1, r8\n\ + adds r1, 0x24\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + strb r0, [r3]\n\ + ldrb r0, [r7]\n\ + adds r1, r0, 0\n\ + muls r1, r6\n\ + adds r2, r1\n\ + add r2, r9\n\ + ldrh r0, [r2]\n\ + add r1, r8\n\ + adds r1, 0x3B\n\ + ldrb r1, [r1]\n\ + lsls r2, r4, 24\n\ + lsrs r2, 24\n\ + bl CalculatePPWithBonus\n\ + mov r2, r10\n\ + adds r1, r2, r4\n\ + strb r0, [r1]\n\ + adds r5, 0x2\n\ + adds r4, 0x1\n\ + cmp r4, 0x3\n\ + ble _0801264E\n\ + ldr r0, _080126B0 @ =gBattleTypeFlags\n\ + ldrb r0, [r0]\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + movs r0, 0\n\ + movs r2, 0\n\ + add r3, sp, 0x4\n\ + bl Emitcmd20\n\ + b _0801289E\n\ + .align 2, 0\n\ +_080126AC: .4byte gBattleMons\n\ +_080126B0: .4byte gBattleTypeFlags\n\ +_080126B4:\n\ + ldr r0, _080126D0 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + ldr r0, _080126D4 @ =0x00000902\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _080126C2\n\ + b _08012908\n\ +_080126C2:\n\ + ldr r1, _080126D8 @ =gUnknown_02024C1C\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r1, _080126DC @ =BattleScript_ActionSelectionItemsCantBeUsed\n\ + b _080129CC\n\ + .align 2, 0\n\ +_080126D0: .4byte gBattleTypeFlags\n\ +_080126D4: .4byte 0x00000902\n\ +_080126D8: .4byte gUnknown_02024C1C\n\ +_080126DC: .4byte BattleScript_ActionSelectionItemsCantBeUsed\n\ +_080126E0:\n\ + ldr r3, _08012738 @ =gSharedMem\n\ + ldr r5, _0801273C @ =gActiveBank\n\ + ldrb r0, [r5]\n\ + ldr r4, _08012740 @ =0x00016064\n\ + adds r1, r0, r4\n\ + adds r1, r3\n\ + ldr r2, _08012744 @ =gBattlePartyID\n\ + lsls r0, 1\n\ + adds r0, r2\n\ + ldrh r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r7, _08012748 @ =gBattleMons\n\ + ldrb r2, [r5]\n\ + movs r6, 0x58\n\ + adds r0, r2, 0\n\ + muls r0, r6\n\ + adds r1, r7, 0\n\ + adds r1, 0x50\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, _0801274C @ =0x0400e000\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08012722\n\ + ldr r0, _08012750 @ =gStatuses3\n\ + lsls r1, r2, 2\n\ + adds r1, r0\n\ + ldr r1, [r1]\n\ + movs r0, 0x80\n\ + lsls r0, 3\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _08012758\n\ +_08012722:\n\ + lsls r0, r2, 1\n\ + adds r0, r2\n\ + ldr r2, _08012754 @ =0x0001606c\n\ + adds r1, r3, r2\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0x2\n\ + movs r2, 0x6\n\ + b _0801286C\n\ + .align 2, 0\n\ +_08012738: .4byte gSharedMem\n\ +_0801273C: .4byte gActiveBank\n\ +_08012740: .4byte 0x00016064\n\ +_08012744: .4byte gBattlePartyID\n\ +_08012748: .4byte gBattleMons\n\ +_0801274C: .4byte 0x0400e000\n\ +_08012750: .4byte gStatuses3\n\ +_08012754: .4byte 0x0001606c\n\ +_08012758:\n\ + str r1, [sp]\n\ + movs r0, 0xC\n\ + adds r1, r2, 0\n\ + movs r2, 0x17\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + bne _080127E0\n\ + ldrb r1, [r5]\n\ + str r4, [sp]\n\ + movs r0, 0xC\n\ + movs r2, 0x47\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + beq _080127A8\n\ + ldrb r0, [r5]\n\ + muls r0, r6\n\ + adds r1, r0, r7\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + beq _080127A8\n\ + adds r0, r1, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + beq _080127A8\n\ + adds r0, r1, 0\n\ + adds r0, 0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x1A\n\ + bne _080127E0\n\ +_080127A8:\n\ + ldr r5, _08012808 @ =gActiveBank\n\ + ldrb r1, [r5]\n\ + movs r0, 0\n\ + str r0, [sp]\n\ + movs r0, 0xF\n\ + movs r2, 0x2A\n\ + movs r3, 0\n\ + bl AbilityBattleEffects\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + cmp r4, 0\n\ + beq _08012818\n\ + ldr r2, _0801280C @ =gBattleMons\n\ + ldrb r1, [r5]\n\ + movs r0, 0x58\n\ + muls r0, r1\n\ + adds r1, r0, r2\n\ + adds r0, r1, 0\n\ + adds r0, 0x21\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x8\n\ + beq _080127E0\n\ + adds r0, r1, 0\n\ + adds r0, 0x22\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x8\n\ + bne _08012818\n\ +_080127E0:\n\ + subs r1, r4, 0x1\n\ + lsls r1, 4\n\ + movs r0, 0x4\n\ + orrs r1, r0\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ + ldr r0, _08012810 @ =gLastUsedAbility\n\ + ldrb r3, [r0]\n\ + ldr r0, _08012808 @ =gActiveBank\n\ + ldrb r2, [r0]\n\ + lsls r0, r2, 1\n\ + adds r0, r2\n\ + ldr r2, _08012814 @ =gSharedMem + 0x1606C\n\ + adds r0, r2\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r2, 0x6\n\ + bl EmitChoosePokemon\n\ + b _0801289E\n\ + .align 2, 0\n\ +_08012808: .4byte gActiveBank\n\ +_0801280C: .4byte gBattleMons\n\ +_08012810: .4byte gLastUsedAbility\n\ +_08012814: .4byte gSharedMem + 0x1606C\n\ +_08012818:\n\ + ldr r0, _08012830 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + mov r8, r0\n\ + cmp r1, 0x2\n\ + bne _08012840\n\ + ldr r0, _08012834 @ =gActionForBanks\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x2\n\ + bne _08012840\n\ + ldr r3, _08012838 @ =gSharedMem\n\ + ldr r4, _0801283C @ =0x00016068\n\ + b _08012854\n\ + .align 2, 0\n\ +_08012830: .4byte gActiveBank\n\ +_08012834: .4byte gActionForBanks\n\ +_08012838: .4byte gSharedMem\n\ +_0801283C: .4byte 0x00016068\n\ +_08012840:\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + cmp r0, 0x3\n\ + bne _08012884\n\ + ldr r0, _08012874 @ =gActionForBanks\n\ + ldrb r0, [r0, 0x1]\n\ + cmp r0, 0x2\n\ + bne _08012884\n\ + ldr r3, _08012878 @ =gSharedMem\n\ + ldr r4, _0801287C @ =0x00016069\n\ +_08012854:\n\ + adds r0, r3, r4\n\ + ldrb r2, [r0]\n\ + mov r0, r8\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + ldr r1, _08012880 @ =0x0001606c\n\ + adds r3, r1\n\ + adds r0, r3\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0\n\ +_0801286C:\n\ + movs r3, 0\n\ + bl EmitChoosePokemon\n\ + b _0801289E\n\ + .align 2, 0\n\ +_08012874: .4byte gActionForBanks\n\ +_08012878: .4byte gSharedMem\n\ +_0801287C: .4byte 0x00016069\n\ +_08012880: .4byte 0x0001606c\n\ +_08012884:\n\ + ldr r0, _080128A8 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + ldr r1, _080128AC @ =gSharedMem + 0x1606C\n\ + adds r0, r1\n\ + str r0, [sp]\n\ + movs r0, 0\n\ + movs r1, 0\n\ + movs r2, 0x6\n\ + movs r3, 0\n\ + bl EmitChoosePokemon\n\ +_0801289E:\n\ + ldr r0, _080128A8 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + bl MarkBufferBankForExecution\n\ + b _08012968\n\ + .align 2, 0\n\ +_080128A8: .4byte gActiveBank\n\ +_080128AC: .4byte gSharedMem + 0x1606C\n\ +_080128B0:\n\ + bl PlayerPartyAndPokemonStorageFull\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08012968\n\ + ldr r1, _080128EC @ =gUnknown_02024C1C\n\ + ldr r2, _080128F0 @ =gActiveBank\n\ + ldrb r0, [r2]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r1, _080128F4 @ =BattleScript_PrintFullBox\n\ + str r1, [r0]\n\ + ldr r0, _080128F8 @ =gBattleCommunication\n\ + ldrb r1, [r2]\n\ + adds r1, r0\n\ + movs r3, 0\n\ + movs r0, 0x5\n\ + strb r0, [r1]\n\ + ldr r1, _080128FC @ =gSharedMem\n\ + ldrb r0, [r2]\n\ + ldr r4, _08012900 @ =0x00016060\n\ + adds r0, r4\n\ + adds r0, r1\n\ + strb r3, [r0]\n\ + ldrb r0, [r2]\n\ + ldr r2, _08012904 @ =0x00016094\n\ + adds r0, r2\n\ + adds r0, r1\n\ + strb r3, [r0]\n\ + b _08012F90\n\ + .align 2, 0\n\ +_080128EC: .4byte gUnknown_02024C1C\n\ +_080128F0: .4byte gActiveBank\n\ +_080128F4: .4byte BattleScript_PrintFullBox\n\ +_080128F8: .4byte gBattleCommunication\n\ +_080128FC: .4byte gSharedMem\n\ +_08012900: .4byte 0x00016060\n\ +_08012904: .4byte 0x00016094\n\ +_08012908:\n\ + ldr r4, _08012924 @ =gActiveBank\n\ + ldrb r0, [r4]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + ldr r0, _08012928 @ =gSharedMem + 0x1606C\n\ + adds r1, r0\n\ + movs r0, 0\n\ + bl EmitOpenBag\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08012968\n\ + .align 2, 0\n\ +_08012924: .4byte gActiveBank\n\ +_08012928: .4byte gSharedMem + 0x1606C\n\ +_0801292C:\n\ + ldr r4, _08012964 @ =gBattleCommunication\n\ + mov r3, r8\n\ + ldrb r1, [r3]\n\ + adds r1, r4\n\ + movs r5, 0\n\ + movs r0, 0x6\n\ + strb r0, [r1]\n\ + ldrb r0, [r3]\n\ + bl GetBankIdentity\n\ + movs r1, 0x2\n\ + eors r0, r1\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + bl GetBankByPlayerAI\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + adds r0, r4\n\ + strb r5, [r0]\n\ + movs r0, 0\n\ + bl Emitcmd50\n\ + mov r4, r8\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + b _08012F90\n\ + .align 2, 0\n\ +_08012964: .4byte gBattleCommunication\n\ +_08012968:\n\ + ldr r0, _08012994 @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0xA\n\ + ands r0, r1\n\ + cmp r0, 0x8\n\ + bne _080129A8\n\ + ldr r0, _08012998 @ =gBattleBufferB\n\ + ldr r4, _0801299C @ =gActiveBank\n\ + ldrb r1, [r4]\n\ + lsls r1, 9\n\ + adds r0, 0x1\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x3\n\ + bne _080129A8\n\ + ldr r0, _080129A0 @ =BattleScript_PrintCantRunFromTrainer\n\ + bl b_call_bc_move_exec\n\ + ldr r1, _080129A4 @ =gBattleCommunication\n\ + ldrb r0, [r4]\n\ + adds r0, r1\n\ + b _08012BFE\n\ + .align 2, 0\n\ +_08012994: .4byte gBattleTypeFlags\n\ +_08012998: .4byte gBattleBufferB\n\ +_0801299C: .4byte gActiveBank\n\ +_080129A0: .4byte BattleScript_PrintCantRunFromTrainer\n\ +_080129A4: .4byte gBattleCommunication\n\ +_080129A8:\n\ + bl CanRunFromBattle\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08012A14\n\ + ldr r0, _080129F4 @ =gBattleBufferB\n\ + ldr r3, _080129F8 @ =gActiveBank\n\ + ldrb r2, [r3]\n\ + lsls r1, r2, 9\n\ + adds r0, 0x1\n\ + adds r1, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, 0x3\n\ + bne _08012A14\n\ + ldr r1, _080129FC @ =gUnknown_02024C1C\n\ + lsls r0, r2, 2\n\ + adds r0, r1\n\ + ldr r1, _08012A00 @ =BattleScript_PrintCantEscapeFromBattle\n\ +_080129CC:\n\ + str r1, [r0]\n\ + ldr r0, _08012A04 @ =gBattleCommunication\n\ + ldrb r1, [r3]\n\ + adds r1, r0\n\ + movs r2, 0\n\ + movs r0, 0x5\n\ + strb r0, [r1]\n\ + ldr r1, _08012A08 @ =gSharedMem\n\ + ldrb r0, [r3]\n\ + ldr r4, _08012A0C @ =0x00016060\n\ + adds r0, r4\n\ + adds r0, r1\n\ + strb r2, [r0]\n\ + ldrb r0, [r3]\n\ + ldr r3, _08012A10 @ =0x00016094\n\ + adds r0, r3\n\ + adds r0, r1\n\ + strb r2, [r0]\n\ + b _08012F90\n\ + .align 2, 0\n\ +_080129F4: .4byte gBattleBufferB\n\ +_080129F8: .4byte gActiveBank\n\ +_080129FC: .4byte gUnknown_02024C1C\n\ +_08012A00: .4byte BattleScript_PrintCantEscapeFromBattle\n\ +_08012A04: .4byte gBattleCommunication\n\ +_08012A08: .4byte gSharedMem\n\ +_08012A0C: .4byte 0x00016060\n\ +_08012A10: .4byte 0x00016094\n\ +_08012A14:\n\ + ldr r2, _08012A20 @ =gBattleCommunication\n\ + ldr r0, _08012A24 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012A20: .4byte gBattleCommunication\n\ +_08012A24: .4byte gActiveBank\n\ +_08012A28:\n\ + ldr r4, _08012A6C @ =gBattleExecBuffer\n\ + ldr r1, _08012A70 @ =gBitTable\n\ + ldr r3, _08012A74 @ =gActiveBank\n\ + ldrb r5, [r3]\n\ + lsls r0, r5, 2\n\ + adds r0, r1\n\ + ldr r2, [r0]\n\ + lsls r0, r2, 4\n\ + movs r1, 0xF0\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + orrs r0, r2\n\ + lsls r1, r2, 8\n\ + orrs r0, r1\n\ + lsls r2, 12\n\ + orrs r0, r2\n\ + ldr r1, [r4]\n\ + ands r1, r0\n\ + mov r8, r3\n\ + cmp r1, 0\n\ + beq _08012A54\n\ + b _08012F66\n\ +_08012A54:\n\ + ldr r1, _08012A78 @ =gActionForBanks\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + adds r3, r1, 0\n\ + cmp r0, 0x9\n\ + bls _08012A62\n\ + b _08012F66\n\ +_08012A62:\n\ + lsls r0, 2\n\ + ldr r1, _08012A7C @ =_08012A80\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_08012A6C: .4byte gBattleExecBuffer\n\ +_08012A70: .4byte gBitTable\n\ +_08012A74: .4byte gActiveBank\n\ +_08012A78: .4byte gActionForBanks\n\ +_08012A7C: .4byte _08012A80\n\ + .align 2, 0\n\ +_08012A80:\n\ + .4byte _08012AA8\n\ + .4byte _08012BB0\n\ + .4byte _08012BE8\n\ + .4byte _08012CE0\n\ + .4byte _08012D04\n\ + .4byte _08012D18\n\ + .4byte _08012D2C\n\ + .4byte _08012D5C\n\ + .4byte _08012D70\n\ + .4byte _08012D94\n\ +_08012AA8:\n\ + ldr r0, _08012AC8 @ =gBattleBufferB\n\ + mov r1, r8\n\ + ldrb r4, [r1]\n\ + lsls r1, r4, 9\n\ + adds r2, r0, 0x1\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + adds r6, r0, 0\n\ + cmp r1, 0x9\n\ + bgt _08012ACC\n\ + cmp r1, 0x3\n\ + blt _08012ACC\n\ + adds r0, r4, r3\n\ + strb r1, [r0]\n\ + b _08012F90\n\ + .align 2, 0\n\ +_08012AC8: .4byte gBattleBufferB\n\ +_08012ACC:\n\ + adds r3, r6, 0\n\ + mov r5, r8\n\ + ldrb r4, [r5]\n\ + lsls r1, r4, 9\n\ + adds r7, r3, 0x2\n\ + adds r0, r1, r7\n\ + ldrb r2, [r0]\n\ + adds r3, 0x3\n\ + mov r9, r3\n\ + add r1, r9\n\ + ldrb r0, [r1]\n\ + lsls r0, 8\n\ + orrs r2, r0\n\ + ldr r0, _08012AF4 @ =0x0000ffff\n\ + cmp r2, r0\n\ + bne _08012AFC\n\ + ldr r0, _08012AF8 @ =gBattleCommunication\n\ + adds r0, r4, r0\n\ + b _08012BFE\n\ + .align 2, 0\n\ +_08012AF4: .4byte 0x0000ffff\n\ +_08012AF8: .4byte gBattleCommunication\n\ +_08012AFC:\n\ + bl sub_8015894\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08012B48\n\ + ldr r0, _08012B38 @ =gBattleCommunication\n\ + ldrb r1, [r5]\n\ + adds r1, r0\n\ + movs r2, 0\n\ + movs r0, 0x5\n\ + strb r0, [r1]\n\ + ldr r3, _08012B3C @ =gSharedMem\n\ + ldrb r0, [r5]\n\ + ldr r4, _08012B40 @ =0x00016060\n\ + adds r0, r4\n\ + adds r0, r3\n\ + strb r2, [r0]\n\ + ldrb r0, [r5]\n\ + lsls r0, 9\n\ + adds r1, r6, 0x1\n\ + adds r0, r1\n\ + strb r2, [r0]\n\ + ldrb r0, [r5]\n\ + ldr r1, _08012B44 @ =0x00016094\n\ + adds r0, r1\n\ + adds r0, r3\n\ + movs r1, 0x1\n\ + strb r1, [r0]\n\ + b _08012F90\n\ + .align 2, 0\n\ +_08012B38: .4byte gBattleCommunication\n\ +_08012B3C: .4byte gSharedMem\n\ +_08012B40: .4byte 0x00016060\n\ +_08012B44: .4byte 0x00016094\n\ +_08012B48:\n\ + ldr r6, _08012B98 @ =gSharedMem\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + ldr r2, _08012B9C @ =0x0001608c\n\ + adds r1, r0, r2\n\ + adds r1, r6\n\ + lsls r0, 9\n\ + adds r0, r7\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r0, _08012BA0 @ =gChosenMovesByBanks\n\ + mov r4, r8\n\ + ldrb r3, [r4]\n\ + lsls r5, r3, 1\n\ + adds r5, r0\n\ + ldr r4, _08012BA4 @ =gBattleMons\n\ + adds r2, r3, r2\n\ + adds r2, r6\n\ + ldrb r0, [r2]\n\ + lsls r0, 1\n\ + movs r1, 0x58\n\ + muls r1, r3\n\ + adds r0, r1\n\ + adds r4, 0xC\n\ + adds r0, r4\n\ + ldrh r0, [r0]\n\ + strh r0, [r5]\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + ldr r2, _08012BA8 @ =0x00016010\n\ + adds r1, r0, r2\n\ + adds r1, r6\n\ + lsls r0, 9\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldr r0, _08012BAC @ =gBattleCommunication\n\ + mov r3, r8\n\ + ldrb r1, [r3]\n\ + b _08012E3C\n\ + .align 2, 0\n\ +_08012B98: .4byte gSharedMem\n\ +_08012B9C: .4byte 0x0001608c\n\ +_08012BA0: .4byte gChosenMovesByBanks\n\ +_08012BA4: .4byte gBattleMons\n\ +_08012BA8: .4byte 0x00016010\n\ +_08012BAC: .4byte gBattleCommunication\n\ +_08012BB0:\n\ + ldr r2, _08012BD8 @ =gBattleBufferB\n\ + ldr r5, _08012BDC @ =gActiveBank\n\ + ldrb r4, [r5]\n\ + lsls r1, r4, 9\n\ + adds r0, r2, 0x1\n\ + adds r0, r1, r0\n\ + ldrb r3, [r0]\n\ + adds r2, 0x2\n\ + adds r1, r2\n\ + ldrb r0, [r1]\n\ + lsls r0, 8\n\ + orrs r3, r0\n\ + cmp r3, 0\n\ + bne _08012BCE\n\ + b _08012F60\n\ +_08012BCE:\n\ + ldr r0, _08012BE0 @ =gLastUsedItem\n\ + strh r3, [r0]\n\ + ldr r0, _08012BE4 @ =gBattleCommunication\n\ + ldrb r1, [r5]\n\ + b _08012E3C\n\ + .align 2, 0\n\ +_08012BD8: .4byte gBattleBufferB\n\ +_08012BDC: .4byte gActiveBank\n\ +_08012BE0: .4byte gLastUsedItem\n\ +_08012BE4: .4byte gBattleCommunication\n\ +_08012BE8:\n\ + ldr r4, _08012C04 @ =gBattleBufferB\n\ + ldr r7, _08012C08 @ =gActiveBank\n\ + ldrb r2, [r7]\n\ + lsls r0, r2, 9\n\ + adds r1, r4, 0x1\n\ + adds r0, r1\n\ + ldrb r1, [r0]\n\ + cmp r1, 0x6\n\ + bne _08012C10\n\ + ldr r0, _08012C0C @ =gBattleCommunication\n\ + adds r0, r2, r0\n\ +_08012BFE:\n\ + movs r1, 0\n\ + strb r1, [r0]\n\ + b _08012F66\n\ + .align 2, 0\n\ +_08012C04: .4byte gBattleBufferB\n\ +_08012C08: .4byte gActiveBank\n\ +_08012C0C: .4byte gBattleCommunication\n\ +_08012C10:\n\ + ldr r0, _08012CC4 @ =gSharedMem\n\ + mov r12, r0\n\ + ldr r3, _08012CC8 @ =0x00016068\n\ + adds r0, r2, r3\n\ + add r0, r12\n\ + strb r1, [r0]\n\ + ldr r0, _08012CCC @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x40\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08012CBE\n\ + ldrb r0, [r7]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + ldr r5, _08012CD0 @ =0x0001606c\n\ + adds r1, r5\n\ + add r1, r12\n\ + ldrb r2, [r1]\n\ + movs r0, 0xF\n\ + ands r0, r2\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + lsls r2, r0, 1\n\ + adds r2, r0\n\ + adds r2, r5\n\ + add r2, r12\n\ + lsls r0, 9\n\ + adds r6, r4, 0x2\n\ + adds r0, r6\n\ + ldrb r1, [r0]\n\ + movs r3, 0xF0\n\ + adds r0, r3, 0\n\ + ands r0, r1\n\ + ldrb r1, [r2]\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + ldrb r0, [r7]\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + ldr r2, _08012CD4 @ =0x0001606d\n\ + adds r1, r2\n\ + add r1, r12\n\ + lsls r0, 9\n\ + adds r4, 0x3\n\ + mov r8, r4\n\ + add r0, r8\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + movs r4, 0x2\n\ + eors r0, r4\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + adds r1, r5\n\ + add r1, r12\n\ + ldrb r2, [r1]\n\ + adds r0, r3, 0\n\ + ands r0, r2\n\ + strb r0, [r1]\n\ + ldrb r0, [r7]\n\ + eors r0, r4\n\ + lsls r1, r0, 1\n\ + adds r1, r0\n\ + adds r1, r5\n\ + add r1, r12\n\ + ldrb r0, [r7]\n\ + lsls r0, 9\n\ + adds r0, r6\n\ + ldrb r0, [r0]\n\ + ands r3, r0\n\ + lsrs r3, 4\n\ + ldrb r0, [r1]\n\ + orrs r3, r0\n\ + strb r3, [r1]\n\ + ldrb r0, [r7]\n\ + eors r4, r0\n\ + lsls r1, r4, 1\n\ + adds r1, r4\n\ + ldr r3, _08012CD8 @ =0x0001606e\n\ + adds r1, r3\n\ + add r1, r12\n\ + ldrb r0, [r7]\n\ + lsls r0, 9\n\ + add r0, r8\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ +_08012CBE:\n\ + ldr r0, _08012CDC @ =gBattleCommunication\n\ + ldrb r1, [r7]\n\ + b _08012E3C\n\ + .align 2, 0\n\ +_08012CC4: .4byte gSharedMem\n\ +_08012CC8: .4byte 0x00016068\n\ +_08012CCC: .4byte gBattleTypeFlags\n\ +_08012CD0: .4byte 0x0001606c\n\ +_08012CD4: .4byte 0x0001606d\n\ +_08012CD8: .4byte 0x0001606e\n\ +_08012CDC: .4byte gBattleCommunication\n\ +_08012CE0:\n\ + ldr r2, _08012CF8 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 8\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _08012CFC @ =gBattleCommunication\n\ + ldr r0, _08012D00 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012CF8: .4byte gHitMarker\n\ +_08012CFC: .4byte gBattleCommunication\n\ +_08012D00: .4byte gActiveBank\n\ +_08012D04:\n\ + ldr r2, _08012D10 @ =gBattleCommunication\n\ + ldr r0, _08012D14 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012D10: .4byte gBattleCommunication\n\ +_08012D14: .4byte gActiveBank\n\ +_08012D18:\n\ + ldr r2, _08012D24 @ =gBattleCommunication\n\ + ldr r0, _08012D28 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012D24: .4byte gBattleCommunication\n\ +_08012D28: .4byte gActiveBank\n\ +_08012D2C:\n\ + ldr r2, _08012D50 @ =gBattleBufferB\n\ + ldr r0, _08012D54 @ =gActiveBank\n\ + ldrb r4, [r0]\n\ + lsls r1, r4, 9\n\ + adds r0, r2, 0x1\n\ + adds r0, r1, r0\n\ + ldrb r3, [r0]\n\ + adds r2, 0x2\n\ + adds r1, r2\n\ + ldrb r0, [r1]\n\ + lsls r0, 8\n\ + orrs r3, r0\n\ + cmp r3, 0\n\ + bne _08012D4A\n\ + b _08012F60\n\ +_08012D4A:\n\ + ldr r1, _08012D58 @ =gBattleCommunication\n\ + adds r1, r4, r1\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012D50: .4byte gBattleBufferB\n\ +_08012D54: .4byte gActiveBank\n\ +_08012D58: .4byte gBattleCommunication\n\ +_08012D5C:\n\ + ldr r2, _08012D68 @ =gBattleCommunication\n\ + ldr r0, _08012D6C @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012D68: .4byte gBattleCommunication\n\ +_08012D6C: .4byte gActiveBank\n\ +_08012D70:\n\ + ldr r2, _08012D88 @ =gHitMarker\n\ + ldr r0, [r2]\n\ + movs r1, 0x80\n\ + lsls r1, 8\n\ + orrs r0, r1\n\ + str r0, [r2]\n\ + ldr r2, _08012D8C @ =gBattleCommunication\n\ + ldr r0, _08012D90 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012D88: .4byte gHitMarker\n\ +_08012D8C: .4byte gBattleCommunication\n\ +_08012D90: .4byte gActiveBank\n\ +_08012D94:\n\ + ldr r2, _08012DA0 @ =gBattleCommunication\n\ + ldr r0, _08012DA4 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, r2\n\ + b _08012E3E\n\ + .align 2, 0\n\ +_08012DA0: .4byte gBattleCommunication\n\ +_08012DA4: .4byte gActiveBank\n\ +_08012DA8:\n\ + ldr r3, _08012E10 @ =gBattleExecBuffer\n\ + ldr r4, _08012E14 @ =gBitTable\n\ + ldr r0, _08012E18 @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r4\n\ + ldr r2, [r0]\n\ + lsls r1, r2, 4\n\ + movs r0, 0xF0\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + orrs r1, r2\n\ + lsls r0, r2, 8\n\ + orrs r1, r0\n\ + lsls r2, 12\n\ + orrs r1, r2\n\ + ldr r0, [r3]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08012DD2\n\ + b _08012F66\n\ +_08012DD2:\n\ + ldr r0, _08012E1C @ =gBattleTypeFlags\n\ + ldrh r1, [r0]\n\ + movs r0, 0x41\n\ + ands r0, r1\n\ + cmp r0, 0x1\n\ + bne _08012E06\n\ + movs r1, 0x2\n\ + movs r0, 0x2\n\ + ands r0, r5\n\ + cmp r0, 0\n\ + bne _08012E06\n\ + adds r0, r5, 0\n\ + eors r0, r1\n\ + bl GetBankByPlayerAI\n\ + ldr r1, _08012E20 @ =gSharedMem\n\ + ldr r2, _08012E24 @ =0x000160a6\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + lsls r0, 24\n\ + lsrs r0, 22\n\ + adds r0, r4\n\ + ldr r0, [r0]\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _08012E28\n\ +_08012E06:\n\ + movs r0, 0\n\ + movs r1, 0\n\ + bl EmitLinkStandbyMsg\n\ + b _08012E30\n\ + .align 2, 0\n\ +_08012E10: .4byte gBattleExecBuffer\n\ +_08012E14: .4byte gBitTable\n\ +_08012E18: .4byte gActiveBank\n\ +_08012E1C: .4byte gBattleTypeFlags\n\ +_08012E20: .4byte gSharedMem\n\ +_08012E24: .4byte 0x000160a6\n\ +_08012E28:\n\ + movs r0, 0\n\ + movs r1, 0x1\n\ + bl EmitLinkStandbyMsg\n\ +_08012E30:\n\ + ldr r4, _08012E48 @ =gActiveBank\n\ +_08012E32:\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + ldr r0, _08012E4C @ =gBattleCommunication\n\ + ldrb r1, [r4]\n\ +_08012E3C:\n\ + adds r1, r0\n\ +_08012E3E:\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + b _08012F66\n\ + .align 2, 0\n\ +_08012E48: .4byte gActiveBank\n\ +_08012E4C: .4byte gBattleCommunication\n\ +_08012E50:\n\ + ldr r3, _08012E84 @ =gBattleExecBuffer\n\ + ldr r1, _08012E88 @ =gBitTable\n\ + ldr r0, _08012E8C @ =gActiveBank\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r2, [r0]\n\ + lsls r1, r2, 4\n\ + movs r0, 0xF0\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + orrs r1, r2\n\ + lsls r0, r2, 8\n\ + orrs r1, r0\n\ + lsls r2, 12\n\ + orrs r1, r2\n\ + ldr r0, [r3]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08012F66\n\ + ldr r1, _08012E90 @ =gBattleCommunication\n\ + ldrb r0, [r1, 0x4]\n\ + adds r0, 0x1\n\ + strb r0, [r1, 0x4]\n\ + b _08012F66\n\ + .align 2, 0\n\ +_08012E84: .4byte gBattleExecBuffer\n\ +_08012E88: .4byte gBitTable\n\ +_08012E8C: .4byte gActiveBank\n\ +_08012E90: .4byte gBattleCommunication\n\ +_08012E94:\n\ + ldr r2, _08012EB8 @ =gSharedMem\n\ + ldr r5, _08012EBC @ =gActiveBank\n\ + ldrb r1, [r5]\n\ + ldr r3, _08012EC0 @ =0x00016060\n\ + adds r0, r1, r3\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0\n\ + beq _08012ECC\n\ + ldr r0, _08012EC4 @ =gBattleCommunication\n\ + adds r0, r1, r0\n\ + ldr r4, _08012EC8 @ =0x00016094\n\ + adds r1, r4\n\ + adds r1, r2\n\ + ldrb r1, [r1]\n\ + strb r1, [r0]\n\ + b _08012F66\n\ + .align 2, 0\n\ +_08012EB8: .4byte gSharedMem\n\ +_08012EBC: .4byte gActiveBank\n\ +_08012EC0: .4byte 0x00016060\n\ +_08012EC4: .4byte gBattleCommunication\n\ +_08012EC8: .4byte 0x00016094\n\ +_08012ECC:\n\ + ldr r0, _08012F20 @ =gBankAttacker\n\ + strb r1, [r0]\n\ + ldr r7, _08012F24 @ =gBattlescriptCurrInstr\n\ + ldr r6, _08012F28 @ =gUnknown_02024C1C\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r4, [r0]\n\ + str r4, [r7]\n\ + ldr r3, _08012F2C @ =gBattleExecBuffer\n\ + ldr r1, _08012F30 @ =gBitTable\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r2, [r0]\n\ + lsls r1, r2, 4\n\ + movs r0, 0xF0\n\ + lsls r0, 24\n\ + orrs r1, r0\n\ + orrs r1, r2\n\ + lsls r0, r2, 8\n\ + orrs r1, r0\n\ + lsls r2, 12\n\ + orrs r1, r2\n\ + ldr r0, [r3]\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + bne _08012F12\n\ + ldr r0, _08012F34 @ =gBattleScriptingCommandsTable\n\ + ldrb r1, [r4]\n\ + lsls r1, 2\n\ + adds r1, r0\n\ + ldr r0, [r1]\n\ + bl _call_via_r0\n\ +_08012F12:\n\ + ldrb r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r6\n\ + ldr r1, [r7]\n\ + str r1, [r0]\n\ + b _08012F66\n\ + .align 2, 0\n\ +_08012F20: .4byte gBankAttacker\n\ +_08012F24: .4byte gBattlescriptCurrInstr\n\ +_08012F28: .4byte gUnknown_02024C1C\n\ +_08012F2C: .4byte gBattleExecBuffer\n\ +_08012F30: .4byte gBitTable\n\ +_08012F34: .4byte gBattleScriptingCommandsTable\n\ +_08012F38:\n\ + ldr r3, _08012FA0 @ =gBattleExecBuffer\n\ + ldr r1, _08012FA4 @ =gBitTable\n\ + ldr r0, _08012FA8 @ =gActiveBank\n\ + ldrb r4, [r0]\n\ + lsls r0, r4, 2\n\ + adds r0, r1\n\ + ldr r2, [r0]\n\ + lsls r0, r2, 4\n\ + movs r1, 0xF0\n\ + lsls r1, 24\n\ + orrs r0, r1\n\ + orrs r0, r2\n\ + lsls r1, r2, 8\n\ + orrs r0, r1\n\ + lsls r2, 12\n\ + orrs r0, r2\n\ + ldr r3, [r3]\n\ + ands r3, r0\n\ + cmp r3, 0\n\ + bne _08012F66\n\ +_08012F60:\n\ + ldr r0, _08012FAC @ =gBattleCommunication\n\ + adds r0, r4, r0\n\ + strb r3, [r0]\n\ +_08012F66:\n\ + ldr r0, _08012FA8 @ =gActiveBank\n\ + ldrb r1, [r0]\n\ + adds r1, 0x1\n\ + strb r1, [r0]\n\ + ldr r0, _08012FB0 @ =gNoOfAllBanks\n\ + lsls r1, 24\n\ + lsrs r1, 24\n\ +_08012F74:\n\ + adds r2, r0, 0\n\ + ldrb r0, [r2]\n\ + cmp r1, r0\n\ + bcs _08012F80\n\ + bl _0801234C\n\ +_08012F80:\n\ + ldr r0, _08012FAC @ =gBattleCommunication\n\ + ldrb r0, [r0, 0x4]\n\ + ldrb r2, [r2]\n\ + cmp r0, r2\n\ + bne _08012F90\n\ + ldr r1, _08012FB4 @ =gBattleMainFunc\n\ + ldr r0, _08012FB8 @ =sub_80133C8\n\ + str r0, [r1]\n\ +_08012F90:\n\ + add sp, 0x1C\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08012FA0: .4byte gBattleExecBuffer\n\ +_08012FA4: .4byte gBitTable\n\ +_08012FA8: .4byte gActiveBank\n\ +_08012FAC: .4byte gBattleCommunication\n\ +_08012FB0: .4byte gNoOfAllBanks\n\ +_08012FB4: .4byte gBattleMainFunc\n\ +_08012FB8: .4byte sub_80133C8\n\ + .syntax divided\n"); +} + +void sub_8012FBC(u8 a, u8 b) +{ + int temp; + + temp = gUnknown_02024A76[a]; + gUnknown_02024A76[a] = gUnknown_02024A76[b]; + gUnknown_02024A76[b] = temp; + + temp = gTurnOrder[a]; + gTurnOrder[a] = gTurnOrder[b]; + gTurnOrder[b] = temp; +} + +// Determines which of the two given mons will strike first in a battle. +// Returns: +// 0 = first mon moves first +// 1 = second mon moves first +// 2 = second mon moves first because it won a 50/50 roll +u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreMovePriorities) +{ + int bank1SpeedMultiplier, bank2SpeedMultiplier; + u32 bank1AdjustedSpeed, bank2AdjustedSpeed; + u8 heldItemEffect; + u8 heldItemEffectParam; + u16 bank1Move; + u16 bank2Move; + u8 strikesFirst = 0; + + // Check for abilities that boost speed in weather. + if (WEATHER_HAS_EFFECT) + { + if ((gBattleMons[bank1].ability == ABILITY_SWIFT_SWIM && (gBattleWeather & WEATHER_RAIN_ANY)) + || (gBattleMons[bank1].ability == ABILITY_CHLOROPHYLL && (gBattleWeather & WEATHER_SUN_ANY))) + bank1SpeedMultiplier = 2; + else + bank1SpeedMultiplier = 1; + + if ((gBattleMons[bank2].ability == ABILITY_SWIFT_SWIM && (gBattleWeather & WEATHER_RAIN_ANY)) + || (gBattleMons[bank2].ability == ABILITY_CHLOROPHYLL && (gBattleWeather & WEATHER_SUN_ANY))) + bank2SpeedMultiplier = 2; + else + bank2SpeedMultiplier = 1; + } + else + { + bank1SpeedMultiplier = 1; + bank2SpeedMultiplier = 1; + } + + // Calculate adjusted speed for first mon. + bank1AdjustedSpeed = (gBattleMons[bank1].speed * bank1SpeedMultiplier) + * gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][0] / gStatStageRatios[gBattleMons[bank1].statStages[STAT_STAGE_SPEED]][1]; + + if (gBattleMons[bank1].item == ITEM_ENIGMA_BERRY) + { + heldItemEffect = gEnigmaBerries[bank1].holdEffect; + heldItemEffectParam = gEnigmaBerries[bank1].holdEffectParam; + } + else + { + heldItemEffect = ItemId_GetHoldEffect(gBattleMons[bank1].item); + heldItemEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank1].item); + } + + // Only give badge speed boost to the player's mon. + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && FlagGet(FLAG_BADGE03_GET) && GetBankSide(bank1) == 0) + bank1AdjustedSpeed = (bank1AdjustedSpeed * 110) / 100; + + if (heldItemEffect == HOLD_EFFECT_MACHO_BRACE) + bank1AdjustedSpeed /= 2; + + if (gBattleMons[bank1].status1 & STATUS_PARALYSIS) + bank1AdjustedSpeed /= 4; + + if (heldItemEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (heldItemEffectParam * 0xFFFF) / 100) + bank1AdjustedSpeed = UINT_MAX; + + // Calculate adjusted speed for second mon. + bank2AdjustedSpeed = gBattleMons[bank2].speed * bank2SpeedMultiplier + * gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][0] / gStatStageRatios[gBattleMons[bank2].statStages[STAT_STAGE_SPEED]][1]; + + if (gBattleMons[bank2].item == ITEM_ENIGMA_BERRY) + { + heldItemEffect = gEnigmaBerries[bank2].holdEffect; + heldItemEffectParam = gEnigmaBerries[bank2].holdEffectParam; + } + else + { + heldItemEffect = ItemId_GetHoldEffect(gBattleMons[bank2].item); + heldItemEffectParam = ItemId_GetHoldEffectParam(gBattleMons[bank2].item); + } + + // Only give badge speed boost to the player's mon. + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && FlagGet(FLAG_BADGE03_GET) && GetBankSide(bank2) == 0) + { + bank2AdjustedSpeed = (bank2AdjustedSpeed * 110) / 100; + } + + if (heldItemEffect == HOLD_EFFECT_MACHO_BRACE) + bank2AdjustedSpeed /= 2; + + if (gBattleMons[bank2].status1 & STATUS_PARALYSIS) + bank2AdjustedSpeed /= 4; + + if (heldItemEffect == HOLD_EFFECT_QUICK_CLAW && gRandomTurnNumber < (heldItemEffectParam * 0xFFFF) / 100) + bank2AdjustedSpeed = UINT_MAX; + + if (ignoreMovePriorities) + { + bank1Move = MOVE_NONE; + bank2Move = MOVE_NONE; + } + else + { + if (gActionForBanks[bank1] == 0) + { + if (gProtectStructs[bank1].onlyStruggle) + bank1Move = MOVE_STRUGGLE; + else + bank1Move = gBattleMons[bank1].moves[ewram1608Carr(bank1)]; + } + else + bank1Move = MOVE_NONE; + + if (gActionForBanks[bank2] == 0) + { + if (gProtectStructs[bank2].onlyStruggle) + bank2Move = MOVE_STRUGGLE; + else + bank2Move = gBattleMons[bank2].moves[ewram1608Carr(bank2)]; + } + else + bank2Move = MOVE_NONE; + } + + if (gBattleMoves[bank1Move].priority != 0 || gBattleMoves[bank2Move].priority != 0) + { + if (gBattleMoves[bank1Move].priority == gBattleMoves[bank2Move].priority) + { + if (bank1AdjustedSpeed == bank2AdjustedSpeed && (Random() & 1)) + strikesFirst = 2; + else if (bank1AdjustedSpeed < bank2AdjustedSpeed) + strikesFirst = 1; + } + else if (gBattleMoves[bank1Move].priority < gBattleMoves[bank2Move].priority) + strikesFirst = 1; + } + else + { + if (bank1AdjustedSpeed == bank2AdjustedSpeed && (Random() & 1)) + strikesFirst = 2; + else if (bank1AdjustedSpeed < bank2AdjustedSpeed) + strikesFirst = 1; + } + + return strikesFirst; +} diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 1fa7a2ed2..6b892ea7a 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -1275,7 +1275,7 @@ static void BattleAICmd_if_arg_not_equal(void) static void BattleAICmd_if_would_go_first(void) { - if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) == gAIScriptPtr[1]) + if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, TRUE) == gAIScriptPtr[1]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; @@ -1283,7 +1283,7 @@ static void BattleAICmd_if_would_go_first(void) static void BattleAICmd_if_would_not_go_first(void) { - if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, 1) != gAIScriptPtr[1]) + if (GetWhoStrikesFirst(gBankAttacker, gBankTarget, TRUE) != gAIScriptPtr[1]) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2); else gAIScriptPtr += 6; -- cgit v1.2.3 From c0e0004ffabfcb9bc9827bdce28e3c18a6e52922 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 7 Jan 2018 10:59:12 -0800 Subject: Decompile through HandleEndTurn_BattleWon, and update trainer class constant names --- src/battle/anim/fire_2.c | 4 +- src/battle/battle_2.c | 313 ++++++++++++++++++++++++++++++-- src/battle/battle_3.c | 62 +++---- src/battle/battle_4.c | 124 ++++++------- src/battle/battle_7.c | 10 +- src/battle/battle_ai.c | 2 +- src/battle/battle_anim_80A7E7C.c | 8 +- src/battle/battle_controller_opponent.c | 24 +-- src/battle/battle_controller_player.c | 22 +-- src/battle/battle_controller_safari.c | 6 +- src/battle/battle_controller_wally.c | 6 +- src/battle/battle_message.c | 16 +- src/battle/battle_party_menu.c | 14 +- src/battle/pokeball.c | 10 +- src/battle/reshow_battle_screen.c | 4 +- 15 files changed, 449 insertions(+), 176 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/fire_2.c b/src/battle/anim/fire_2.c index 6dc304232..4d577a765 100644 --- a/src/battle/anim/fire_2.c +++ b/src/battle/anim/fire_2.c @@ -23,8 +23,8 @@ void sub_80D57C4(u8 spriteId, u8 taskId, u8 a3); void sub_80D51A8(struct Sprite *sprite) { if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget) - && (gAnimBankAttacker == GetBankByPlayerAI(2) - || gAnimBankAttacker == GetBankByPlayerAI(3))) + && (gAnimBankAttacker == GetBankByIdentity(2) + || gAnimBankAttacker == GetBankByIdentity(3))) gBattleAnimArgs[2] = -gBattleAnimArgs[2]; sprite->callback = sub_8079534; diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 90d0d40e3..92e9e3e1d 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -24,6 +24,7 @@ #include "sprite.h" #include "task.h" #include "text.h" +#include "trainer.h" #include "trig.h" #include "unknown_task.h" #include "util.h" @@ -66,7 +67,7 @@ extern u8 gActiveBank; extern u32 gBattleExecBuffer; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; -extern u8 gFightStateTracker; +extern u8 gCurrentActionFuncId; extern u8 gTurnOrder[]; extern struct UnknownStruct12 gUnknown_02024AD0[]; extern u8 gObjectBankIDs[]; @@ -133,8 +134,26 @@ extern u16 gBattleWeather; extern u32 gBattleMoveDamage; extern struct BattlePokemon gBattleMons[]; extern u8 gBattleMoveFlags; +extern const u8 BattleScript_FocusPunchSetUp[]; +extern u16 gDynamicBasePower; +extern u8 gCurrentTurnActionNumber; +extern void (* const gUnknown_081FA640[])(void); +extern void (* const gUnknown_081FA678[])(void); +extern u8* gBattlescriptCurrInstr; +extern u8 gUnknown_081D8E02[]; +extern u8 BattleScript_PayDayMoneyAndPickUpItems[]; +extern u8 gUnknown_081D8E0D[]; +extern u8 BattleScript_LocalTrainerBattleWon[]; + +void b_call_bc_move_exec(const u8* BS_ptr); static void BattlePrepIntroSlide(void); +void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); +void SetActionsAndBanksTurnOrder(void); +static void TurnValuesCleanUp(u8); +void SpecialStatusesClear(void); +static void RunTurnActionsFunctions(void); +void sub_8013C9C(); void sub_800E7C4(void) { @@ -1538,7 +1557,7 @@ void sub_8010874(void) for (i = 0; i < 2; i++) { gSideAffecting[i] = 0; - MEMSET_ALT(&gSideTimer[i], 0, 12, j, r4); + MEMSET_ALT(&gSideTimers[i], 0, 12, j, r4); } gBankAttacker = 0; @@ -1791,7 +1810,7 @@ static void BattlePrepIntroSlide(void) { if (gBattleExecBuffer == 0) { - gActiveBank = GetBankByPlayerAI(0); + gActiveBank = GetBankByIdentity(0); EmitIntroSlide(0, gBattleTerrain); MarkBufferBankForExecution(gActiveBank); gBattleMainFunc = sub_8011384; @@ -1895,7 +1914,7 @@ void bc_801333C(void) hpStatus[i].status = GetMonData(&gEnemyParty[i], MON_DATA_STATUS); } } - gActiveBank = GetBankByPlayerAI(1); + gActiveBank = GetBankByIdentity(1); EmitDrawPartyStatusSummary(0, hpStatus, 0x80); MarkBufferBankForExecution(gActiveBank); @@ -1913,7 +1932,7 @@ void bc_801333C(void) hpStatus[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); } } - gActiveBank = GetBankByPlayerAI(0); + gActiveBank = GetBankByIdentity(0); EmitDrawPartyStatusSummary(0, hpStatus, 0x80); MarkBufferBankForExecution(gActiveBank); @@ -1948,7 +1967,7 @@ void bc_battle_begin_message(void) { if (gBattleExecBuffer == 0) { - gActiveBank = GetBankByPlayerAI(1); + gActiveBank = GetBankByIdentity(1); PrepareStringBattle(0, gActiveBank); gBattleMainFunc = sub_8011800; } @@ -1967,7 +1986,7 @@ void sub_8011800(void) { if (gBattleExecBuffer == 0) { - PrepareStringBattle(1, GetBankByPlayerAI(1)); + PrepareStringBattle(1, GetBankByIdentity(1)); gBattleMainFunc = sub_8011834; } } @@ -2019,7 +2038,7 @@ void sub_8011970(void) if (gBattleExecBuffer == 0) { if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) - PrepareStringBattle(1, GetBankByPlayerAI(0)); + PrepareStringBattle(1, GetBankByIdentity(0)); gBattleMainFunc = sub_80119B4; } } @@ -2085,7 +2104,7 @@ void BattleBeginFirstTurn(void) for (j = i + 1; j < gNoOfAllBanks; j++) { if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 1) != 0) - sub_8012FBC(i, j); + SwapTurnOrder(i, j); } } } @@ -2199,8 +2218,8 @@ void BattleTurnPassed(void) gBattleCommunication[i] = 0; if (gBattleOutcome != 0) { - gFightStateTracker = 12; - gBattleMainFunc = sub_80138F0; + gCurrentActionFuncId = 12; + gBattleMainFunc = RunTurnActionsFunctions; return; } if (gBattleResults.battleTurnCounter < 0xFF) @@ -2323,8 +2342,8 @@ void sub_8012324(void) ewram16068arr(gActiveBank) = 6; if (!(gBattleTypeFlags & 0x40) && (r5 & 2) - && !(ewram160A6 & gBitTable[GetBankByPlayerAI(r5 ^ 2)]) - && gBattleCommunication[GetBankByPlayerAI(r5)] != 4) + && !(ewram160A6 & gBitTable[GetBankByIdentity(r5 ^ 2)]) + && gBattleCommunication[GetBankByIdentity(r5)] != 4) break; //_080123F8 if (ewram160A6 & gBitTable[gActiveBank]) @@ -2431,7 +2450,7 @@ _0801239C:\n\ beq _080123F8\n\ eors r5, r1\n\ adds r0, r5, 0\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ ldr r2, _08012444 @ =0x000160a6\n\ adds r1, r4, r2\n\ ldrb r1, [r1]\n\ @@ -2445,7 +2464,7 @@ _0801239C:\n\ bne _080123F8\n\ ldr r4, _0801244C @ =gBattleCommunication\n\ adds r0, r5, 0\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ lsls r0, 24\n\ lsrs r0, 24\n\ adds r0, r4\n\ @@ -3071,7 +3090,7 @@ _0801292C:\n\ eors r0, r1\n\ lsls r0, 24\n\ lsrs r0, 24\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ lsls r0, 24\n\ lsrs r0, 24\n\ adds r0, r4\n\ @@ -3621,7 +3640,7 @@ _08012DD2:\n\ bne _08012E06\n\ adds r0, r5, 0\n\ eors r0, r1\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ ldr r1, _08012E20 @ =gSharedMem\n\ ldr r2, _08012E24 @ =0x000160a6\n\ adds r1, r2\n\ @@ -3816,7 +3835,7 @@ _08012F80:\n\ cmp r0, r2\n\ bne _08012F90\n\ ldr r1, _08012FB4 @ =gBattleMainFunc\n\ - ldr r0, _08012FB8 @ =sub_80133C8\n\ + ldr r0, _08012FB8 @ =SetActionsAndBanksTurnOrder\n\ str r0, [r1]\n\ _08012F90:\n\ add sp, 0x1C\n\ @@ -3834,11 +3853,11 @@ _08012FA8: .4byte gActiveBank\n\ _08012FAC: .4byte gBattleCommunication\n\ _08012FB0: .4byte gNoOfAllBanks\n\ _08012FB4: .4byte gBattleMainFunc\n\ -_08012FB8: .4byte sub_80133C8\n\ +_08012FB8: .4byte SetActionsAndBanksTurnOrder\n\ .syntax divided\n"); } -void sub_8012FBC(u8 a, u8 b) +void SwapTurnOrder(u8 a, u8 b) { int temp; @@ -3995,3 +4014,257 @@ u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreMovePriorities) return strikesFirst; } + +void SetActionsAndBanksTurnOrder(void) +{ + s32 var = 0; + s32 i, j; + + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + gUnknown_02024A76[var] = gActionForBanks[gActiveBank]; + gTurnOrder[var] = gActiveBank; + var++; + } + } + else + { + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (gActionForBanks[gActiveBank] == ACTION_RUN) + { + var = 5; + break; + } + } + } + else + { + if (gActionForBanks[0] == ACTION_RUN) + { + gActiveBank = 0; + var = 5; + } + } + + if (var == 5) + { + gUnknown_02024A76[0] = gActionForBanks[gActiveBank]; + gTurnOrder[0] = gActiveBank; + var = 1; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (i != gActiveBank) + { + gUnknown_02024A76[var] = gActionForBanks[i]; + gTurnOrder[var] = i; + var++; + } + } + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + eFocusPunchBank = 0; + return; + } + else + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (gActionForBanks[gActiveBank] == ACTION_USE_ITEM || gActionForBanks[gActiveBank] == ACTION_SWITCH) + { + gUnknown_02024A76[var] = gActionForBanks[gActiveBank]; + gTurnOrder[var] = gActiveBank; + var++; + } + } + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (gActionForBanks[gActiveBank] != ACTION_USE_ITEM && gActionForBanks[gActiveBank] != ACTION_SWITCH) + { + gUnknown_02024A76[var] = gActionForBanks[gActiveBank]; + gTurnOrder[var] = gActiveBank; + var++; + } + } + for (i = 0; i < gNoOfAllBanks - 1; i++) + { + for (j = i + 1; j < gNoOfAllBanks; j++) + { + u8 bank1 = gTurnOrder[i]; + u8 bank2 = gTurnOrder[j]; + if (gUnknown_02024A76[i] != ACTION_USE_ITEM + && gUnknown_02024A76[j] != ACTION_USE_ITEM + && gUnknown_02024A76[i] != ACTION_SWITCH + && gUnknown_02024A76[j] != ACTION_SWITCH) + { + if (GetWhoStrikesFirst(bank1, bank2, FALSE)) + SwapTurnOrder(i, j); + } + } + } + } + } + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; + eFocusPunchBank = 0; +} + +static void TurnValuesCleanUp(bool8 var0) +{ + s32 i; + u8 *dataPtr; + + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (var0) + { + gProtectStructs[gActiveBank].protected = 0; + gProtectStructs[gActiveBank].endured = 0; + } + else + { + dataPtr = (u8*)(&gProtectStructs[gActiveBank]); + for (i = 0; i < sizeof(struct ProtectStruct); i++) + dataPtr[i] = 0; + + if (gDisableStructs[gActiveBank].isFirstTurn) + gDisableStructs[gActiveBank].isFirstTurn--; + + if (gDisableStructs[gActiveBank].rechargeCounter) + { + gDisableStructs[gActiveBank].rechargeCounter--; + if (gDisableStructs[gActiveBank].rechargeCounter == 0) + gBattleMons[gActiveBank].status2 &= ~(STATUS2_RECHARGE); + } + } + + if (gDisableStructs[gActiveBank].substituteHP == 0) + gBattleMons[gActiveBank].status2 &= ~(STATUS2_SUBSTITUTE); + } + + gSideTimers[0].followmeTimer = 0; + gSideTimers[1].followmeTimer = 0; +} + +void SpecialStatusesClear(void) +{ + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + s32 i; + u8 *dataPtr = (u8*)(&gSpecialStatuses[gActiveBank]); + + for (i = 0; i < sizeof(struct SpecialStatus); i++) + dataPtr[i] = 0; + } +} + +void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) +{ + if (!(gHitMarker & HITMARKER_RUN)) + { + while (eFocusPunchBank < gNoOfAllBanks) + { + gActiveBank = gBankAttacker = eFocusPunchBank; + eFocusPunchBank++; + if (gChosenMovesByBanks[gActiveBank] == MOVE_FOCUS_PUNCH + && !(gBattleMons[gActiveBank].status1 & STATUS_SLEEP) + && !(gDisableStructs[gBankAttacker].truantCounter) + && !(gProtectStructs[gActiveBank].onlyStruggle)) + { + b_call_bc_move_exec(BattleScript_FocusPunchSetUp); + return; + } + } + } + + b_clear_atk_up_if_hit_flag_unless_enraged(); + gCurrentTurnActionNumber = 0; + { + // something stupid needed to match + u8 zero; + gCurrentActionFuncId = gUnknown_02024A76[(zero = 0)]; + } + + gDynamicBasePower = 0; + BATTLE_STRUCT->dynamicMoveType = 0; + gBattleMainFunc = RunTurnActionsFunctions; + gBattleCommunication[3] = 0; + gBattleCommunication[4] = 0; + eMultihitMoveEffect = 0; + ewram17130 = 0; +} + +static void RunTurnActionsFunctions(void) +{ + if (gBattleOutcome != 0) + gCurrentActionFuncId = 12; + + BATTLE_STRUCT->unk16057 = gCurrentTurnActionNumber; + gUnknown_081FA640[gCurrentActionFuncId](); + + if (gCurrentTurnActionNumber >= gNoOfAllBanks) // everyone did their actions, turn finished + { + gHitMarker &= ~(HITMARKER_x100000); + gBattleMainFunc = gUnknown_081FA678[gBattleOutcome & 0x7F]; + } + else + { + if (BATTLE_STRUCT->unk16057 != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank + { + gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); + gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); + } + } +} + +void HandleEndTurn_BattleWon(void) +{ + gCurrentActionFuncId = 0; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleTextBuff1[0] = gBattleOutcome; + gBankAttacker = GetBankByIdentity(IDENTITY_PLAYER_MON1); + gBattlescriptCurrInstr = gUnknown_081D8E02; + gBattleOutcome &= ~(OUTCOME_LINK_BATTLE_RUN); + } + else if (gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)) + { + gBattlescriptCurrInstr = gUnknown_081D8E0D; + } + else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + BattleMusicStop(); + gBattlescriptCurrInstr = BattleScript_LocalTrainerBattleWon; + + switch (gTrainers[gTrainerBattleOpponent].trainerClass) + { + case TRAINER_CLASS_ELITE_FOUR: + case TRAINER_CLASS_CHAMPION: + PlayBGM(BGM_KACHI5); + break; + case TRAINER_CLASS_TEAM_AQUA: + case TRAINER_CLASS_TEAM_MAGMA: + case TRAINER_CLASS_AQUA_ADMIN: + case TRAINER_CLASS_AQUA_LEADER: + case TRAINER_CLASS_MAGMA_ADMIN: + case TRAINER_CLASS_MAGMA_LEADER: + PlayBGM(BGM_KACHI4); + break; + case TRAINER_CLASS_LEADER: + PlayBGM(BGM_KACHI3); + break; + default: + PlayBGM(BGM_KACHI1); + break; + } + } + else + { + gBattlescriptCurrInstr = BattleScript_PayDayMoneyAndPickUpItems; + } + + gBattleMainFunc = sub_8013C9C; +} diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index e5a730598..cfa188fa4 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -50,7 +50,7 @@ extern u8 gTakenDmgBanks[4]; extern u8 gBattleMoveFlags; extern u8 gLastUsedAbility; extern u8 gBattleTextBuff2[]; -extern u8 gFightStateTracker; +extern u8 gCurrentActionFuncId; extern struct BattleEnigmaBerry gEnigmaBerries[4]; extern u8 gUnknown_02024BE5; extern u8 gCurrMovePos; @@ -69,7 +69,7 @@ extern const u8 gStatusConditionString_LoveJpn[]; extern const BattleCmdFunc gBattleScriptingCommandsTable[]; u8 IsImprisoned(u8 bank, u16 move); -u8 GetBankByPlayerAI(u8 ID); +u8 GetBankByIdentity(u8 ID); u8 GetBankIdentity(u8 bank); u8 GetBankSide(u8 bank); void b_call_bc_move_exec(u8* BS_ptr); @@ -320,9 +320,9 @@ bool8 AreAllMovesUnusable(void) gProtectStructs[gActiveBank].onlyStruggle = 1; gUnknown_02024C1C[gActiveBank] = BattleScript_NoMovesLeft; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleBufferB[gActiveBank][3] = GetBankByPlayerAI((GetBankIdentity(gActiveBank) ^ 1) | (Random() & 2)); + gBattleBufferB[gActiveBank][3] = GetBankByIdentity((GetBankIdentity(gActiveBank) ^ 1) | (Random() & 2)); else - gBattleBufferB[gActiveBank][3] = GetBankByPlayerAI(GetBankIdentity(gActiveBank) ^ 1); + gBattleBufferB[gActiveBank][3] = GetBankByIdentity(GetBankIdentity(gActiveBank) ^ 1); } else gProtectStructs[gActiveBank].onlyStruggle = 0; @@ -380,7 +380,7 @@ u8 UpdateTurnCounters(void) for (j = i + 1; j < gNoOfAllBanks; j++) { if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 0)) - sub_8012FBC(i, j); + SwapTurnOrder(i, j); } } BATTLE_STRUCT->turncountersTracker++; @@ -392,7 +392,7 @@ u8 UpdateTurnCounters(void) if (gSideAffecting[sideBank] & SIDE_STATUS_REFLECT) { - if (--gSideTimer[sideBank].reflectTimer == 0) + if (--gSideTimers[sideBank].reflectTimer == 0) { gSideAffecting[sideBank] &= ~SIDE_STATUS_REFLECT; @@ -421,7 +421,7 @@ u8 UpdateTurnCounters(void) gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; if (gSideAffecting[sideBank] & SIDE_STATUS_LIGHTSCREEN) { - if (--gSideTimer[sideBank].lightscreenTimer == 0) + if (--gSideTimers[sideBank].lightscreenTimer == 0) { gSideAffecting[sideBank] &= ~SIDE_STATUS_LIGHTSCREEN; b_call_bc_move_exec(BattleScript_SideStatusWoreOff); @@ -448,7 +448,7 @@ u8 UpdateTurnCounters(void) while (BATTLE_STRUCT->turnSideTracker < 2) { gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; - if (gSideTimer[sideBank].mistTimer && --gSideTimer[sideBank].mistTimer == 0) + if (gSideTimers[sideBank].mistTimer && --gSideTimers[sideBank].mistTimer == 0) { gSideAffecting[sideBank] &= ~SIDE_STATUS_MIST; b_call_bc_move_exec(BattleScript_SideStatusWoreOff); @@ -476,7 +476,7 @@ u8 UpdateTurnCounters(void) gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; if (gSideAffecting[sideBank] & SIDE_STATUS_SAFEGUARD) { - if (--gSideTimer[sideBank].safeguardTimer == 0) + if (--gSideTimers[sideBank].safeguardTimer == 0) { gSideAffecting[sideBank] &= ~SIDE_STATUS_SAFEGUARD; b_call_bc_move_exec(BattleScript_SafeguardEnds); @@ -1363,14 +1363,14 @@ bool8 sub_8018018(u8 bank, u8 r1, u8 r2) { if (GetBankSide(bank) == 1) { - r7 = GetBankByPlayerAI(1); - r6 = GetBankByPlayerAI(3); + r7 = GetBankByIdentity(1); + r6 = GetBankByIdentity(3); party = gEnemyParty; } else { - r7 = GetBankByPlayerAI(0); - r6 = GetBankByPlayerAI(2); + r7 = GetBankByIdentity(0); + r6 = GetBankByIdentity(2); party = gPlayerParty; } if (r1 == 6) @@ -2053,15 +2053,15 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { u8 target2; side = (GetBankIdentity(i) ^ 1) & 1; - target1 = GetBankByPlayerAI(side); - target2 = GetBankByPlayerAI(side + 2); + target1 = GetBankByIdentity(side); + target2 = GetBankByIdentity(side + 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0 && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) { //_080199AE - gActiveBank = GetBankByPlayerAI(((Random() & 1) * 2) | side); + gActiveBank = GetBankByIdentity(((Random() & 1) * 2) | side); gBattleMons[i].ability = gBattleMons[gActiveBank].ability; gLastUsedAbility = gBattleMons[gActiveBank].ability; effect++; @@ -2256,7 +2256,7 @@ void b_call_bc_move_exec(u8* BS_ptr) gBattlescriptCurrInstr = BS_ptr; B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; gBattleMainFunc = sub_8013F54; - gFightStateTracker = 0; + gCurrentActionFuncId = 0; } void b_push_move_exec(u8* BS_ptr) @@ -3028,14 +3028,14 @@ void unref_sub_801B40C(void) { if (sCombinedMoves[i].move1 == gChosenMovesByBanks[bank] && sCombinedMoves[i].move2 == gChosenMovesByBanks[bank + 2]) { - gSideTimer[GetBankIdentity(bank) & 1].field3 = (bank) | ((bank + 2) << 4); - gSideTimer[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; + gSideTimers[GetBankIdentity(bank) & 1].field3 = (bank) | ((bank + 2) << 4); + gSideTimers[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; gSideAffecting[GetBankIdentity(bank) & 1] |= SIDE_STATUS_X4; } if (sCombinedMoves[i].move1 == gChosenMovesByBanks[bank + 2] && sCombinedMoves[i].move2 == gChosenMovesByBanks[bank]) { - gSideTimer[GetBankIdentity(bank) & 1].field3 = (bank + 2) | ((bank) << 4); - gSideTimer[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; + gSideTimers[GetBankIdentity(bank) & 1].field3 = (bank + 2) | ((bank) << 4); + gSideTimers[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; gSideAffecting[GetBankIdentity(bank) & 1] |= SIDE_STATUS_X4; } bank++; @@ -3067,8 +3067,8 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target { case 0: side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp) - targetBank = gSideTimer[side].followmeTarget; + if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + targetBank = gSideTimers[side].followmeTarget; else { side = GetBankSide(gBankAttacker); @@ -3090,35 +3090,35 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target case 8: case 32: case 64: - targetBank = GetBankByPlayerAI((GetBankIdentity(gBankAttacker) & 1) ^ 1); + targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & 1) ^ 1); if (gAbsentBankFlags & gBitTable[targetBank]) targetBank ^= 2; break; case 4: side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp) - targetBank = gSideTimer[side].followmeTarget; + if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + targetBank = gSideTimers[side].followmeTarget; else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & 4) { if (GetBankSide(gBankAttacker) == 0) { if (Random() & 1) - targetBank = GetBankByPlayerAI(1); + targetBank = GetBankByIdentity(1); else - targetBank = GetBankByPlayerAI(3); + targetBank = GetBankByIdentity(3); } else { if (Random() & 1) - targetBank = GetBankByPlayerAI(0); + targetBank = GetBankByIdentity(0); else - targetBank = GetBankByPlayerAI(2); + targetBank = GetBankByIdentity(2); } if (gAbsentBankFlags & gBitTable[targetBank]) targetBank ^= 2; } else - targetBank = GetBankByPlayerAI((GetBankIdentity(gBankAttacker) & 1) ^ 1); + targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & 1) ^ 1); break; case 2: case 16: diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 0c147e471..d9789f76d 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -58,7 +58,7 @@ extern u8 gBankAttacker; extern u8 gBankTarget; extern u8* gBattlescriptCurrInstr; extern u8 gCurrMovePos; -extern u8 gFightStateTracker; +extern u8 gCurrentActionFuncId; extern u32 gHitMarker; extern u8 gBattleMoveFlags; extern u8 gBattleCommunication[]; @@ -94,7 +94,7 @@ extern u8 gActionForBanks[4]; extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch extern u16 gUnknown_030041B0; extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one -extern u8 gCurrentMoveTurn; +extern u8 gCurrentTurnActionNumber; extern u16 gTrappingMoves[]; //extern functions @@ -129,7 +129,7 @@ u8 GetSetPokedexFlag(u16 nationalNum, u8 caseID); u16 SpeciesToNationalPokedexNum(u16 species); u8 sub_803FC34(u8 bank); u16 sub_803FBFC(u8 a); -u8 GetBankByPlayerAI(u8 ID); +u8 GetBankByIdentity(u8 ID); void sub_8012258(u8); void sub_80157C4(u8 bank); //update sent pokes in battle //MonTryLearningNewMove teach poke a move @@ -1028,7 +1028,7 @@ static void atk00_attackcanceler(void) int i; if (gBattleOutcome) { - gFightStateTracker = 0xC; + gCurrentActionFuncId = 0xC; return; } if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) @@ -2518,7 +2518,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) } else { - if (BankGetTurnOrder(gEffectBank) > gCurrentMoveTurn) + if (BankGetTurnOrder(gEffectBank) > gCurrentTurnActionNumber) gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattlescriptCurrInstr++; return; } @@ -3861,7 +3861,7 @@ _0801ED14: .4byte BattleScript_FlinchPrevention\n\ _0801ED18:\n\ adds r0, r2, 0\n\ bl BankGetTurnOrder\n\ - ldr r1, _0801ED54 @ =gCurrentMoveTurn\n\ + ldr r1, _0801ED54 @ =gCurrentTurnActionNumber\n\ lsls r0, 24\n\ lsrs r0, 24\n\ ldrb r1, [r1]\n\ @@ -3887,7 +3887,7 @@ _0801ED2E:\n\ str r1, [r2]\n\ bl _0801F5DC\n\ .align 2, 0\n\ -_0801ED54: .4byte gCurrentMoveTurn\n\ +_0801ED54: .4byte gCurrentTurnActionNumber\n\ _0801ED58: .4byte gStatusFlagsForMoveEffects\n\ _0801ED5C: .4byte gBattleCommunication\n\ _0801ED60:\n\ @@ -7290,14 +7290,14 @@ static void atk3D_end(void) { gBattleMoveFlags = 0; gActiveBank = 0; - gFightStateTracker = 0xB; + gCurrentActionFuncId = 0xB; } static void atk3E_end2(void) { //not much difference between this and 3D. It's more apparent in Emerald gActiveBank = 0; - gFightStateTracker = 0xB; + gCurrentActionFuncId = 0xB; } static void atk3F_end3(void) //pops the main function stack @@ -7467,7 +7467,7 @@ static void atk48_playstatchangeanimation(void) if (!(T2_READ_8(gBattlescriptCurrInstr + 3))) { u8 ability; - if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer) + if (gSideTimers[GetBankIdentity(gActiveBank) & 1].mistTimer) continue; ability = gBattleMons[gActiveBank].ability; if (ability == ABILITY_CLEAR_BODY || ability == ABILITY_WHITE_SMOKE || (ability == ABILITY_KEEN_EYE && curr_stat == 6) || (ability == ABILITY_HYPER_CUTTER && curr_stat == 1)) @@ -7602,7 +7602,7 @@ _0802167C:\n\ lsls r0, r1, 1\n\ adds r0, r1\n\ lsls r0, 2\n\ - ldr r1, _08021704 @ =gSideTimer\n\ + ldr r1, _08021704 @ =gSideTimers\n\ adds r0, r1\n\ ldrb r0, [r0, 0x2]\n\ ldr r3, [sp]\n\ @@ -7665,7 +7665,7 @@ _080216E4:\n\ b _08021770\n\ .align 2, 0\n\ _08021700: .4byte gActiveBank\n\ -_08021704: .4byte gSideTimer\n\ +_08021704: .4byte gSideTimers\n\ _08021708: .4byte gBattleMons\n\ _0802170C: .4byte gBattlescriptCurrInstr\n\ _08021710:\n\ @@ -9154,7 +9154,7 @@ _080221C0:\n\ eors r0, r1\n\ lsls r0, 24\n\ lsrs r0, 24\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ lsls r0, 24\n\ lsrs r2, r0, 24\n\ ldr r1, _080222CC @ =gBattleMons\n\ @@ -9457,18 +9457,18 @@ static void atk4F_jumpifcantswitch(void) { if (GetBankSide(gActiveBank) == 1) { - r7 = GetBankByPlayerAI(1); + r7 = GetBankByIdentity(1); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - to_cmp = GetBankByPlayerAI(3); + to_cmp = GetBankByIdentity(3); else to_cmp = r7; party = gEnemyParty; } else { - r7 = GetBankByPlayerAI(0); + r7 = GetBankByIdentity(0); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - to_cmp = GetBankByPlayerAI(2); + to_cmp = GetBankByIdentity(2); else to_cmp = r7; party = gPlayerParty; @@ -10528,7 +10528,7 @@ _080232C4:\n\ eors r0, r1\n\ lsls r0, 24\n\ lsrs r0, 24\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ ldr r4, _08023310 @ =gActiveBank\n\ strb r0, [r4]\n\ ldr r0, _08023314 @ =gAbsentBankFlags\n\ @@ -10632,7 +10632,7 @@ static void atk52_switchineffects(void) gSideAffecting[GetBankSide(gActiveBank)] |= SIDE_STATUS_SPIKES_DAMAGED; - spikesDmg = (5 - gSideTimer[GetBankSide(gActiveBank)].spikesAmount) * 2; + spikesDmg = (5 - gSideTimers[GetBankSide(gActiveBank)].spikesAmount) * 2; gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / (spikesDmg); if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; @@ -10690,9 +10690,9 @@ static void atk52_switchineffects(void) static void atk53_trainerslidein(void) { if (!T2_READ_8(gBattlescriptCurrInstr + 1)) - gActiveBank = GetBankByPlayerAI(0); + gActiveBank = GetBankByIdentity(0); else - gActiveBank = GetBankByPlayerAI(1); + gActiveBank = GetBankByIdentity(1); EmitTrainerSlide(0); MarkBufferBankForExecution(gActiveBank); @@ -10725,7 +10725,7 @@ static void atk56_playfaintcry(void) static void atk57(void) { - gActiveBank = GetBankByPlayerAI(0); + gActiveBank = GetBankByIdentity(0); Emitcmd55(0, gBattleOutcome); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 1; @@ -10758,12 +10758,12 @@ void atk59_handlelearnnewmove(void) } else { - gActiveBank = GetBankByPlayerAI(0); + gActiveBank = GetBankByIdentity(0); if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) //what is else if { - gActiveBank = GetBankByPlayerAI(2); + gActiveBank = GetBankByIdentity(2); if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); } @@ -11907,7 +11907,7 @@ static void atk6D_resetsentmonsvalue(void) static void atk6E_setatktoplayer0(void) { - gBankAttacker = GetBankByPlayerAI(0); + gBankAttacker = GetBankByIdentity(0); gBattlescriptCurrInstr++; } @@ -12020,8 +12020,8 @@ static void atk76_various(void) u8 side; gBankAttacker = gBankTarget; side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].followmeTimer && gBattleMons[gSideTimer[side].followmeTarget].hp) - gBankTarget = gSideTimer[side].followmeTarget; + if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + gBankTarget = gSideTimers[side].followmeTarget; else gBankTarget = gActiveBank; } @@ -12080,7 +12080,7 @@ static void atk77_setprotectlike(void) //protect and endure if (last_move != MOVE_PROTECT && last_move != MOVE_DETECT && last_move != MOVE_ENDURE) gDisableStructs[gBankAttacker].protectUses = 0; - if (gCurrentMoveTurn == (gNoOfAllBanks - 1)) + if (gCurrentTurnActionNumber == (gNoOfAllBanks - 1)) not_last_turn = 0; if (sProtectSuccessRates[gDisableStructs[gBankAttacker].protectUses] > Random() && not_last_turn) @@ -12266,7 +12266,7 @@ static void atk7E_setreflect(void) else { gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_REFLECT; - gSideTimer[GetBankIdentity(gBankAttacker) & 1].reflectTimer = 5; + gSideTimers[GetBankIdentity(gBankAttacker) & 1].reflectTimer = 5; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = 2; else @@ -12502,7 +12502,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) if ((statchanger << 0x18) < 0) //stat decrease { - if (gSideTimer[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE) + if (gSideTimers[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE) { if (flags == 1) { @@ -12728,7 +12728,7 @@ _08025E88:\n\ blt _08025EAC\n\ b _080261B0\n\ _08025EAC:\n\ - ldr r4, _08025F04 @ =gSideTimer\n\ + ldr r4, _08025F04 @ =gSideTimers\n\ ldr r1, _08025EF8 @ =gActiveBank\n\ ldrb r0, [r1]\n\ bl GetBankIdentity\n\ @@ -12769,7 +12769,7 @@ _08025EAC:\n\ _08025EF8: .4byte gActiveBank\n\ _08025EFC: .4byte gBankTarget\n\ _08025F00: .4byte gBattleTextBuff1\n\ -_08025F04: .4byte gSideTimer\n\ +_08025F04: .4byte gSideTimers\n\ _08025F08: .4byte gCurrentMove\n\ _08025F0C: .4byte gSpecialStatuses\n\ _08025F10: .4byte gBattlescriptCurrInstr\n\ @@ -13488,7 +13488,7 @@ static void atk92_setlightscreen(void) else { gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_LIGHTSCREEN; - gSideTimer[GetBankIdentity(gBankAttacker) & 1].lightscreenTimer = 5; + gSideTimers[GetBankIdentity(gBankAttacker) & 1].lightscreenTimer = 5; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && CountAliveMons(1) == 2) gBattleCommunication[MULTISTRING_CHOOSER] = 4; else @@ -14034,7 +14034,7 @@ static void atk98_updatestatusicon(void) } if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (!(gAbsentBankFlags & gBitTable[gActiveBank])) { EmitStatusIconUpdate(0, gBattleMons[gActiveBank].status1, gBattleMons[gActiveBank].status2); @@ -14047,14 +14047,14 @@ static void atk98_updatestatusicon(void) static void atk99_setmist(void) { - if (gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer) + if (gSideTimers[GetBankIdentity(gBankAttacker) & 1].mistTimer) { gBattleMoveFlags |= MOVESTATUS_FAILED; gBattleCommunication[MULTISTRING_CHOOSER] = 1; } else { - gSideTimer[GetBankIdentity(gBankAttacker) & 1].mistTimer = 5; + gSideTimers[GetBankIdentity(gBankAttacker) & 1].mistTimer = 5; gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_MIST; gBattleCommunication[MULTISTRING_CHOOSER] = 0; } @@ -14315,8 +14315,8 @@ static void atkA1_counterdamagecalculator(void) if (gProtectStructs[gBankAttacker].physicalDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].physicalBank].hp) { gBattleMoveDamage = gProtectStructs[gBankAttacker].physicalDmg * 2; - if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp) - gBankTarget = gSideTimer[def_side].followmeTarget; + if (gSideTimers[def_side].followmeTimer && gBattleMons[gSideTimers[def_side].followmeTarget].hp) + gBankTarget = gSideTimers[def_side].followmeTarget; else gBankTarget = gProtectStructs[gBankAttacker].physicalBank; gBattlescriptCurrInstr += 5; @@ -14335,8 +14335,8 @@ static void atkA2_mirrorcoatdamagecalculator(void) //a copy of atkA1 with the ph if (gProtectStructs[gBankAttacker].specialDmg && atk_side != def_side && gBattleMons[gProtectStructs[gBankAttacker].specialBank].hp) { gBattleMoveDamage = gProtectStructs[gBankAttacker].specialDmg * 2; - if (gSideTimer[def_side].followmeTimer && gBattleMons[gSideTimer[def_side].followmeTarget].hp) - gBankTarget = gSideTimer[def_side].followmeTarget; + if (gSideTimers[def_side].followmeTimer && gBattleMons[gSideTimers[def_side].followmeTarget].hp) + gBankTarget = gSideTimers[def_side].followmeTarget; else gBankTarget = gProtectStructs[gBankAttacker].specialBank; gBattlescriptCurrInstr += 5; @@ -14948,7 +14948,7 @@ static void atkAE_healpartystatus(void) gBattleCommunication[MULTISTRING_CHOOSER] |= 1; } - gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) { if (gBattleMons[gActiveBank].ability != ABILITY_SOUNDPROOF) @@ -14986,7 +14986,7 @@ static void atkAE_healpartystatus(void) to_heal = 0x3F; gBattleMons[gBankAttacker].status1 = zero2; - gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) gBattleMons[gActiveBank].status1 = 0; @@ -15018,7 +15018,7 @@ static void atkAF_cursetarget(void) static void atkB0_trysetspikes(void) { u8 side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].spikesAmount == 3) + if (gSideTimers[side].spikesAmount == 3) { gSpecialStatuses[gBankAttacker].flag20 = 1; gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); @@ -15026,7 +15026,7 @@ static void atkB0_trysetspikes(void) else { gSideAffecting[side] |= SIDE_STATUS_SPIKES; - gSideTimer[side].spikesAmount++; + gSideTimers[side].spikesAmount++; gBattlescriptCurrInstr += 5; } } @@ -15167,7 +15167,7 @@ static void atkB8_setsafeguard(void) else { gSideAffecting[GetBankIdentity(gBankAttacker) & 1] |= SIDE_STATUS_SAFEGUARD; - gSideTimer[GetBankIdentity(gBankAttacker) & 1].safeguardTimer = 5; + gSideTimers[GetBankIdentity(gBankAttacker) & 1].safeguardTimer = 5; gBattleCommunication[MULTISTRING_CHOOSER] = 5; } gBattlescriptCurrInstr++; @@ -15234,16 +15234,16 @@ static void atkBA_jumpifnopursuitswitchdmg(void) if (gMultiHitCounter == 1) { if (GetBankSide(gBankAttacker) == 0) - gBankTarget = GetBankByPlayerAI(1); + gBankTarget = GetBankByIdentity(1); else - gBankTarget = GetBankByPlayerAI(0); + gBankTarget = GetBankByIdentity(0); } else { if (GetBankSide(gBankAttacker) == 0) - gBankTarget = GetBankByPlayerAI(3); + gBankTarget = GetBankByIdentity(3); else - gBankTarget = GetBankByPlayerAI(2); + gBankTarget = GetBankByIdentity(2); } if (gActionForBanks[gBankTarget] == 0 && gBankAttacker == ewram16010arr(gBankTarget) && !(gBattleMons[gBankTarget].status1 & (STATUS_SLEEP | STATUS_FREEZE)) @@ -15334,7 +15334,7 @@ static void atkBE_rapidspinfree(void) //rapid spin else if (gSideAffecting[GetBankSide(gBankAttacker)] & SIDE_STATUS_SPIKES) { gSideAffecting[GetBankSide(gBankAttacker)] &= ~(SIDE_STATUS_SPIKES); - gSideTimer[GetBankSide(gBankAttacker)].spikesAmount = 0; + gSideTimers[GetBankSide(gBankAttacker)].spikesAmount = 0; b_movescr_stack_push_cursor(); gBattlescriptCurrInstr = BattleScript_SpikesFree; } @@ -15935,8 +15935,8 @@ static void atkC9_jumpifattackandspecialattackcannotfall(void) //memento static void atkCA_setforcedtarget(void) //follow me { - gSideTimer[GetBankSide(gBankAttacker)].followmeTimer = 1; - gSideTimer[GetBankSide(gBankAttacker)].followmeTarget = gBankAttacker; + gSideTimers[GetBankSide(gBankAttacker)].followmeTimer = 1; + gSideTimers[GetBankSide(gBankAttacker)].followmeTarget = gBankAttacker; gBattlescriptCurrInstr++; } @@ -16004,7 +16004,7 @@ static void atkD0_settaunt(void) static void atkD1_trysethelpinghand(void) { - gBankTarget = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gBankTarget]) && !gProtectStructs[gBankAttacker].helpingHand && !gProtectStructs[gBankTarget].helpingHand) { @@ -16774,7 +16774,7 @@ static void atkDF_trysetmagiccoat(void) { gBankTarget = gBankAttacker; gSpecialStatuses[gBankAttacker].flag20 = 1; - if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn + if (gCurrentTurnActionNumber == gNoOfAllBanks - 1) //last turn gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { @@ -16786,7 +16786,7 @@ static void atkDF_trysetmagiccoat(void) static void atkE0_trysetsnatch(void) { gSpecialStatuses[gBankAttacker].flag20 = 1; - if (gCurrentMoveTurn == gNoOfAllBanks - 1) //last turn + if (gCurrentTurnActionNumber == gNoOfAllBanks - 1) //last turn gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { @@ -17011,7 +17011,7 @@ static void atkEB_settypetoterrain(void) static void atkEC_pursuitrelated(void) { - gActiveBank = GetBankByPlayerAI(GetBankIdentity(gBankAttacker) ^ 2); + gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]) && gActionForBanks[gActiveBank] == 0 && gChosenMovesByBanks[gActiveBank] == MOVE_PURSUIT) { gUnknown_02024A76[gActiveBank] = 11; @@ -17039,12 +17039,12 @@ static void atkED_snatchsetbanks(void) static void atkEE_removelightscreenreflect(void) //brick break { u8 side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimer[side].reflectTimer || gSideTimer[side].lightscreenTimer) + if (gSideTimers[side].reflectTimer || gSideTimers[side].lightscreenTimer) { gSideAffecting[side] &= ~(SIDE_STATUS_REFLECT); gSideAffecting[side] &= ~(SIDE_STATUS_LIGHTSCREEN); - gSideTimer[side].reflectTimer = 0; - gSideTimer[side].lightscreenTimer = 0; + gSideTimers[side].reflectTimer = 0; + gSideTimers[side].lightscreenTimer = 0; BATTLE_STRUCT->animTurn = 1; BATTLE_STRUCT->animTargetsHit = 1; } @@ -17428,11 +17428,11 @@ static void atkF5_removeattackerstatus1(void) static void atkF6_finishaction(void) { - gFightStateTracker = 0xC; + gCurrentActionFuncId = 0xC; } static void atkF7_finishturn(void) { - gFightStateTracker = 0xC; - gCurrentMoveTurn = gNoOfAllBanks; + gCurrentActionFuncId = 0xC; + gCurrentTurnActionNumber = gNoOfAllBanks; } diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index e11971606..1c79d7ebf 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -795,7 +795,7 @@ void sub_80324F8(struct Pokemon *pkmn, u8 b) void BattleMusicStop(void) { - u8 r4 = GetBankByPlayerAI(0); + u8 r4 = GetBankByIdentity(0); ewram17800[r4].unk0_1 = 0; if (IsDoubleBattle()) @@ -815,8 +815,8 @@ void sub_8032638(void) { if (gMain.inBattle) { - u8 r8 = GetBankByPlayerAI(0); - u8 r9 = GetBankByPlayerAI(2); + u8 r8 = GetBankByIdentity(0); + u8 r9 = GetBankByIdentity(2); u8 r4 = pokemon_order_func(gBattlePartyID[r8]); u8 r5 = pokemon_order_func(gBattlePartyID[r9]); @@ -857,12 +857,12 @@ void sub_80327CC(void) u8 r5; LoadCompressedObjectPic(&gUnknown_081FAF24); - r5 = GetBankByPlayerAI(1); + r5 = GetBankByIdentity(1); ewram17810[r5].unk7 = CreateSprite(&gSpriteTemplate_81FAF34, GetBankPosition(r5, 0), GetBankPosition(r5, 1) + 32, 0xC8); gSprites[ewram17810[r5].unk7].data[0] = r5; if (IsDoubleBattle()) { - r5 = GetBankByPlayerAI(3); + r5 = GetBankByIdentity(3); ewram17810[r5].unk7 = CreateSprite(&gSpriteTemplate_81FAF34, GetBankPosition(r5, 0), GetBankPosition(r5, 1) + 32, 0xC8); gSprites[ewram17810[r5].unk7].data[0] = r5; } diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 6b892ea7a..977e91f5c 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -1321,7 +1321,7 @@ static void BattleAICmd_count_alive_pokemon(void) u32 status; var = gBattlePartyID[index]; status = GetBankIdentity(index) ^ 2; - var2 = gBattlePartyID[GetBankByPlayerAI(status)]; + var2 = gBattlePartyID[GetBankByIdentity(status)]; } else { diff --git a/src/battle/battle_anim_80A7E7C.c b/src/battle/battle_anim_80A7E7C.c index 3097f1a0e..c35434df0 100644 --- a/src/battle/battle_anim_80A7E7C.c +++ b/src/battle/battle_anim_80A7E7C.c @@ -108,17 +108,17 @@ void sub_80A7FA0(u8 taskId) switch (gBattleAnimArgs[0]) { case 4: - side = GetBankByPlayerAI(0); + side = GetBankByIdentity(0); break; case 5: - side = GetBankByPlayerAI(2); + side = GetBankByIdentity(2); break; case 6: - side = GetBankByPlayerAI(1); + side = GetBankByIdentity(1); break; case 7: default: - side = GetBankByPlayerAI(3); + side = GetBankByIdentity(3); break; } if (IsAnimBankSpriteVisible(side) == FALSE) diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 54bb9d7f9..477b600ac 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -98,7 +98,7 @@ extern void sub_80324BC(); extern void BufferStringBattle(); extern void sub_80331D0(void); extern void sub_8036B0C(void); -extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankByIdentity(u8); extern u8 sub_8036CD4(void); extern void sub_80330C8(void); extern void sub_8043D84(); @@ -1451,9 +1451,9 @@ void OpponentHandlecmd20(void) gBankTarget = gActiveBank; if (gBattleMoves[r5->moves[r4]].target & 8) { - gBankTarget = GetBankByPlayerAI(0); + gBankTarget = GetBankByIdentity(0); if (gAbsentBankFlags & gBitTable[gBankTarget]) - gBankTarget = GetBankByPlayerAI(2); + gBankTarget = GetBankByIdentity(2); } r4 |= gBankTarget << 8; Emitcmd33(1, 10, r4); @@ -1479,13 +1479,13 @@ void OpponentHandlecmd20(void) } else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - u16 r2 = GetBankByPlayerAI(Random() & 2) << 8; + u16 r2 = GetBankByIdentity(Random() & 2) << 8; Emitcmd33(1, 10, r4 | r2); } else { - u16 r2 = GetBankByPlayerAI(0) << 8; + u16 r2 = GetBankByIdentity(0) << 8; Emitcmd33(1, 10, r4 | r2); } @@ -1561,7 +1561,7 @@ _08035494:\n\ cmp r0, 0\n\ beq _080354CE\n\ movs r0, 0\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ ldr r5, _080354EC @ =gBankTarget\n\ strb r0, [r5]\n\ ldr r0, _080354F0 @ =gAbsentBankFlags\n\ @@ -1575,7 +1575,7 @@ _08035494:\n\ cmp r1, 0\n\ beq _080354CE\n\ movs r0, 0x2\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ strb r0, [r5]\n\ _080354CE:\n\ ldr r0, _080354EC @ =gBankTarget\n\ @@ -1640,7 +1640,7 @@ _0803553C:\n\ lsls r1, 24\n\ lsrs r1, 24\n\ adds r0, r1, 0\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ adds r2, r0, 0\n\ lsls r2, 24\n\ lsrs r2, 16\n\ @@ -1653,7 +1653,7 @@ _0803553C:\n\ _0803556C: .4byte gBattleTypeFlags\n\ _08035570:\n\ movs r0, 0\n\ - bl GetBankByPlayerAI\n\ + bl GetBankByIdentity\n\ adds r2, r0, 0\n\ lsls r2, 24\n\ lsrs r2, 16\n\ @@ -1692,13 +1692,13 @@ void OpponentHandlecmd22(void) { if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - r5 = GetBankByPlayerAI(1); + r5 = GetBankByIdentity(1); r6 = r5; } else { - r6 = GetBankByPlayerAI(1); - r5 = GetBankByPlayerAI(3); + r6 = GetBankByIdentity(1); + r5 = GetBankByIdentity(3); } for (r4 = 0; r4 < 6; r4++) { diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 70773473d..62a38311a 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -118,7 +118,7 @@ extern void sub_8031F24(void); extern void sub_80324BC(); extern u8 sub_8031720(); extern void bx_wait_t1(void); -extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankByIdentity(u8); extern void sub_802DE10(void); extern void sub_80105EC(struct Sprite *); extern void sub_802D274(void); @@ -167,7 +167,7 @@ extern const u8 BattleText_LinkStandby[]; extern void dp11b_obj_instanciate(u8, u8, s8, s8); extern u8 GetBankIdentity(u8); -extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankByIdentity(u8); extern void dp11b_obj_free(u8, u8); extern void sub_8010520(struct Sprite *); extern void sub_8010574(struct Sprite *); @@ -445,7 +445,7 @@ void sub_802C098(void) { if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && GetBankIdentity(gActiveBank) == 2 - && !(gAbsentBankFlags & gBitTable[GetBankByPlayerAI(0)]) + && !(gAbsentBankFlags & gBitTable[GetBankByIdentity(0)]) && !(gBattleTypeFlags & BATTLE_TYPE_MULTI)) { if (gBattleBufferA[gActiveBank][1] == 1) @@ -529,7 +529,7 @@ void sub_802C2EC(void) i--; if (i < 0) i = 3; - gUnknown_03004344 = GetBankByPlayerAI(arr[i]); + gUnknown_03004344 = GetBankByIdentity(arr[i]); } while(gUnknown_03004344 == gNoOfAllBanks); i = 0; switch (GetBankIdentity(gUnknown_03004344)) @@ -576,7 +576,7 @@ void sub_802C2EC(void) i++; if (i > 3) i = 0; - gUnknown_03004344 = GetBankByPlayerAI(arr[i]); + gUnknown_03004344 = GetBankByIdentity(arr[i]); } while (gUnknown_03004344 == gNoOfAllBanks); i = 0; switch (GetBankIdentity(gUnknown_03004344)) @@ -636,7 +636,7 @@ void sub_802C68C(void) if (r4 & 0x10) gUnknown_03004344 = gActiveBank; else - gUnknown_03004344 = GetBankByPlayerAI((GetBankIdentity(gActiveBank) & 1) ^ 1); + gUnknown_03004344 = GetBankByIdentity((GetBankIdentity(gActiveBank) & 1) ^ 1); if (gBattleBufferA[gActiveBank][1] == 0) { @@ -668,10 +668,10 @@ void sub_802C68C(void) gBattleBankFunc[gActiveBank] = sub_802C2EC; if (r4 & 0x12) gUnknown_03004344 = gActiveBank; - else if (gAbsentBankFlags & gBitTable[GetBankByPlayerAI(1)]) - gUnknown_03004344 = GetBankByPlayerAI(3); + else if (gAbsentBankFlags & gBitTable[GetBankByIdentity(1)]) + gUnknown_03004344 = GetBankByIdentity(3); else - gUnknown_03004344 = GetBankByPlayerAI(1); + gUnknown_03004344 = GetBankByIdentity(1); gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520; } } @@ -2458,7 +2458,7 @@ void PlayerHandlecmd12(void) { ewram17840.unk8 = 4; gDoingBattleAnim = 1; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 3); gBattleBankFunc[gActiveBank] = bx_wait_t1; } @@ -2468,7 +2468,7 @@ void PlayerHandleBallThrow(void) ewram17840.unk8 = var; gDoingBattleAnim = 1; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 3); gBattleBankFunc[gActiveBank] = bx_wait_t1; } diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 6f6286945..37c58f951 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -40,7 +40,7 @@ extern u16 gUnknown_02024DE8; extern u8 gBattleOutcome; extern u8 GetBankSide(u8); -extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankByIdentity(u8); extern u8 GetBankIdentity(u8); extern void LoadPlayerTrainerBankSprite(); extern u8 sub_8079E90(); @@ -423,7 +423,7 @@ void SafariHandlecmd12(void) { ewram17840.unk8 = 4; gDoingBattleAnim = 1; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 4); gBattleBankFunc[gActiveBank] = bx_wait_t6; } @@ -433,7 +433,7 @@ void SafariHandleBallThrow(void) ewram17840.unk8 = var; gDoingBattleAnim = 1; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 4); gBattleBankFunc[gActiveBank] = bx_wait_t6; } diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 8ace11fc1..be40f968c 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -75,7 +75,7 @@ extern void PlayerHandlecmd1(void); extern void LoadPlayerTrainerBankSprite(); extern u8 GetBankIdentity(u8); extern void sub_80313A0(struct Sprite *); -extern u8 GetBankByPlayerAI(u8); +extern u8 GetBankByIdentity(u8); extern u8 sub_8031720(); extern void DoMoveAnim(); extern void sub_80326EC(); @@ -1149,7 +1149,7 @@ void WallyHandlecmd12(void) { ewram17840.unk8 = 4; gDoingBattleAnim = TRUE; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 4); gBattleBankFunc[gActiveBank] = bx_wait_t5; } @@ -1159,7 +1159,7 @@ void WallyHandleBallThrow(void) ewram17840.unk8 = val; gDoingBattleAnim = TRUE; - move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4); + move_anim_start_t4(gActiveBank, gActiveBank, GetBankByIdentity(1), 4); gBattleBankFunc[gActiveBank] = bx_wait_t5; } diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index 4ac8c7a6f..d8efc09c5 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -199,7 +199,7 @@ s32 sub_803FC34(u16); void get_trainer_name(u8* dst); u8 get_trainer_class_name_index(void); u8 GetMultiplayerId(void); -u8 GetBankByPlayerAI(u8 ID); +u8 GetBankByIdentity(u8 ID); u8 GetBankSide(u8 bank); u8 GetBankIdentity(u8 bank); #ifdef GERMAN @@ -572,22 +572,22 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = gBattleTextBuff3; break; case 2: // first player poke name - GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(0)]], MON_DATA_NICKNAME, text); + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByIdentity(0)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case 3: // first enemy poke name - GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(1)]], MON_DATA_NICKNAME, text); + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByIdentity(1)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case 4: // second player poke name - GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(2)]], MON_DATA_NICKNAME, text); + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByIdentity(2)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; case 5: // second enemy poke name - GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(3)]], MON_DATA_NICKNAME, text); + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByIdentity(3)]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; break; @@ -612,13 +612,13 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = text; break; case 10: // attacker name with prefix, only bank 0/1 - HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1)]) + HANDLE_NICKNAME_STRING_CASE(gBankAttacker, gBattlePartyID[GetBankByIdentity(GetBankIdentity(gBankAttacker) & 1)]) break; case 11: // attacker partner name, only bank 0/1 if (GetBankSide(gBankAttacker) == 0) - GetMonData(&gPlayerParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); + GetMonData(&gPlayerParty[gBattlePartyID[GetBankByIdentity(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); else - GetMonData(&gEnemyParty[gBattlePartyID[GetBankByPlayerAI(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); + GetMonData(&gEnemyParty[gBattlePartyID[GetBankByIdentity(GetBankIdentity(gBankAttacker) & 1) + 2]], MON_DATA_NICKNAME, text); StringGetEnd10(text); toCpy = text; diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index d4dcae0ca..7bce00d82 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -122,7 +122,7 @@ static void sub_8094998(u8 arg[3], u8 player_number) if (!IsDoubleBattle()) { pos = 1; - *temp = gBattlePartyID[GetBankByPlayerAI(0)]; + *temp = gBattlePartyID[GetBankByIdentity(0)]; for (i = 0; i <= 5; i++) if (i != *temp) temp[pos++] = i; @@ -130,8 +130,8 @@ static void sub_8094998(u8 arg[3], u8 player_number) else { pos = 2; - *temp = gBattlePartyID[GetBankByPlayerAI(0)]; - temp[1] = gBattlePartyID[GetBankByPlayerAI(2)]; + *temp = gBattlePartyID[GetBankByIdentity(0)]; + temp[1] = gBattlePartyID[GetBankByIdentity(2)]; for (i = 0; i <= 5; i++) if ((i != *temp) && (i != temp[1])) temp[pos++] = i; @@ -147,13 +147,13 @@ static void sub_8094A74(u8 arg[3], u8 player_number, u32 arg3) u8 temp[6]; if (!GetBankSide(arg3)) { - i = GetBankByPlayerAI(0); - j = GetBankByPlayerAI(2); + i = GetBankByIdentity(0); + j = GetBankByIdentity(2); } else { - i = GetBankByPlayerAI(1); - j = GetBankByPlayerAI(3); + i = GetBankByIdentity(1); + j = GetBankByIdentity(3); } if (IsLinkDoubleBattle() == TRUE) { diff --git a/src/battle/pokeball.c b/src/battle/pokeball.c index bcaaebcda..6f27469ce 100644 --- a/src/battle/pokeball.c +++ b/src/battle/pokeball.c @@ -383,7 +383,7 @@ static void sub_8046464(u8 taskId) gSprites[spriteId].callback = sub_8047254; break; default: - gBankTarget = GetBankByPlayerAI(1); + gBankTarget = GetBankByIdentity(1); sp0 = TRUE; break; } @@ -722,7 +722,7 @@ static void sub_8046C78(struct Sprite *sprite) r8 = -25; } species = GetMonData(pkmn, MON_DATA_SPECIES); - if ((r5 == GetBankByPlayerAI(0) || r5 == GetBankByPlayerAI(1)) + if ((r5 == GetBankByIdentity(0) || r5 == GetBankByIdentity(1)) && IsDoubleBattle() && ewram17840.unk9_0) { if (gBattleTypeFlags & BATTLE_TYPE_MULTI) @@ -737,7 +737,7 @@ static void sub_8046C78(struct Sprite *sprite) } if (!IsDoubleBattle() || !ewram17840.unk9_0) r4_2 = 0; - else if (r5 == GetBankByPlayerAI(0) || r5 == GetBankByPlayerAI(1)) + else if (r5 == GetBankByIdentity(0) || r5 == GetBankByIdentity(1)) r4_2 = 1; else r4_2 = 2; @@ -885,7 +885,7 @@ static void sub_80470C4(struct Sprite *sprite) sprite->data[6] = sprite->oam.affineParam & 0xFF; sprite->data[0] = 0; if (IsDoubleBattle() && ewram17840.unk9_0 - && sprite->data[6] == GetBankByPlayerAI(2)) + && sprite->data[6] == GetBankByIdentity(2)) sprite->callback = sub_8047230; else sprite->callback = sub_8046C78; @@ -910,7 +910,7 @@ static void sub_8047254(struct Sprite *sprite) { sprite->data[0] = 0; if (IsDoubleBattle() && ewram17840.unk9_0 - && sprite->data[6] == GetBankByPlayerAI(3)) + && sprite->data[6] == GetBankByIdentity(3)) sprite->callback = sub_8047230; else sprite->callback = sub_8046C78; diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index 49b0854cc..a7646e78b 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -171,13 +171,13 @@ static void CB2_ReshowBattleScreenAfterMenu(void) sub_80327CC(); - opponentBank = GetBankByPlayerAI(1); + opponentBank = GetBankByIdentity(1); species = GetMonData(&gEnemyParty[gBattlePartyID[opponentBank]], MON_DATA_SPECIES); sub_8032984(opponentBank, species); if (IsDoubleBattle()) { - opponentBank = GetBankByPlayerAI(3); + opponentBank = GetBankByIdentity(3); species = GetMonData(&gEnemyParty[gBattlePartyID[opponentBank]], MON_DATA_SPECIES); sub_8032984(opponentBank, species); } -- cgit v1.2.3 From 82ab732d673946af609f896dc51639030eb1bd19 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 7 Jan 2018 14:59:16 -0800 Subject: Finish decompiling battle_2 --- src/battle/battle_2.c | 1214 +++++++++++++++++++++++++-- src/battle/battle_3.c | 24 +- src/battle/battle_4.c | 69 +- src/battle/battle_controller_linkopponent.c | 8 +- src/battle/battle_controller_linkpartner.c | 8 +- src/battle/battle_controller_opponent.c | 8 +- src/battle/battle_controller_player.c | 34 +- src/battle/battle_controller_safari.c | 14 +- src/battle/battle_controller_wally.c | 14 +- src/battle/reshow_battle_screen.c | 10 +- 10 files changed, 1260 insertions(+), 143 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 92e9e3e1d..a30245081 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1,13 +1,17 @@ #include "global.h" #include "constants/abilities.h" #include "battle.h" +#include "battle_ai.h" #include "battle_interface.h" +#include "battle_message.h" #include "battle_setup.h" #include "data2.h" #include "event_data.h" +#include "evolution_scene.h" #include "item.h" #include "link.h" #include "main.h" +#include "m4a.h" #include "name_string_util.h" #include "palette.h" #include "party_menu.h" @@ -15,6 +19,7 @@ #include "pokedex.h" #include "pokemon.h" #include "random.h" +#include "roamer.h" #include "rom3.h" #include "rom_8077ABC.h" #include "rom_8094928.h" @@ -22,10 +27,12 @@ #include "sound.h" #include "constants/species.h" #include "sprite.h" +#include "string_util.h" #include "task.h" #include "text.h" #include "trainer.h" #include "trig.h" +#include "tv.h" #include "unknown_task.h" #include "util.h" #include "constants/battle_move_effects.h" @@ -60,7 +67,7 @@ extern const u16 gUnknown_08D004E0[]; extern const struct MonCoords gCastformFrontSpriteCoords[]; extern u8 gStatStageRatios[][2]; -extern u8 gUnknown_02024A76[4]; +extern u8 gActionsByTurnOrder[4]; extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; extern u8 gBattleBufferB[][0x200]; extern u8 gActiveBank; @@ -68,7 +75,7 @@ extern u32 gBattleExecBuffer; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; extern u8 gCurrentActionFuncId; -extern u8 gTurnOrder[]; +extern u8 gBanksByTurnOrder[]; extern struct UnknownStruct12 gUnknown_02024AD0[]; extern u8 gObjectBankIDs[]; extern u16 gCurrentMove; @@ -82,7 +89,7 @@ extern u16 gLastUsedMove[]; extern u16 gMoveHitWith[]; extern u16 gUnknown_02024C44[]; extern u16 gUnknown_02024C4C[]; -extern u16 gLockedMove[]; +extern u16 gLockedMoves[]; extern u8 gUnknown_02024C5C[]; extern u16 gChosenMovesByBanks[]; extern u32 gHitMarker; @@ -112,8 +119,8 @@ extern u16 gBattle_WIN0V; extern u16 gBattle_BG2_Y; extern u32 gUnknown_03004284; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u16 gBattle_WIN0H; extern MainCallback gPreBattleCallback1; @@ -140,10 +147,33 @@ extern u8 gCurrentTurnActionNumber; extern void (* const gUnknown_081FA640[])(void); extern void (* const gUnknown_081FA678[])(void); extern u8* gBattlescriptCurrInstr; -extern u8 gUnknown_081D8E02[]; +extern u8 BattleScript_LinkBattleWonOrLost[]; extern u8 BattleScript_PayDayMoneyAndPickUpItems[]; extern u8 gUnknown_081D8E0D[]; extern u8 BattleScript_LocalTrainerBattleWon[]; +extern u8 BattleScript_LocalBattleLost[]; +extern u8 BattleScript_GotAwaySafely[]; +extern u8 BattleScript_SmokeBallEscape[]; +extern u8 BattleScript_RanAwayUsingMonAbility[]; +extern u8 BattleScript_WildMonFled[]; +extern u8 BattleScript_ActionSwitch[]; +extern u8 BattleScript_PrintFailedToRunString[]; +extern const BattleCmdFunc gBattleScriptingCommandsTable[]; +extern u8 gCritMultiplier; +extern u8 gCurrMovePos; +extern u8 gUnknown_02024BE5; +extern u16 gChosenMove; +extern u8* gBattleScriptsForMoveEffects[]; +extern u16 gLastUsedItem; +extern u8 * const gBattlescriptsForBallThrow[]; +extern u8 * const gBattlescriptsForRunningByItem[]; +extern u8 * const gBattlescriptsForUsingItem[]; +extern u8 * const gBattlescriptsForSafariActions[]; +extern u8 gBattleTextBuff2[]; +extern u8 gNumSafariBalls; +extern u8 gUnknown_081FA70C[][3]; +extern u8 gUnknown_081FA71B[]; +extern u8 gUnknown_081FA71F[]; void b_call_bc_move_exec(const u8* BS_ptr); @@ -153,7 +183,11 @@ void SetActionsAndBanksTurnOrder(void); static void TurnValuesCleanUp(u8); void SpecialStatusesClear(void); static void RunTurnActionsFunctions(void); -void sub_8013C9C(); +void HandleEndTurn_FinishBattle(); +static void FreeResetData_ReturnToOvOrDoEvolutions(void); +void TryEvolvePokemon(void); +static void ReturnFromBattleToOverworld(void); +static void WaitForEvoSceneToFinish(void); void sub_800E7C4(void) { @@ -202,8 +236,8 @@ void InitBattle(void) sub_80895F8(gUnknown_081F9674); SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -491,7 +525,7 @@ void sub_800EC9C(void) { gPreBattleCallback1 = gMain.callback1; gMain.callback1 = sub_8010824; - SetMainCallback2(sub_800F808); + SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { gTrainerBattleOpponent = 0x800; @@ -849,7 +883,7 @@ void sub_800F298(void) { gPreBattleCallback1 = gMain.callback1; gMain.callback1 = sub_8010824; - SetMainCallback2(sub_800F808); + SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { gTrainerBattleOpponent = 0x800; @@ -860,7 +894,7 @@ void sub_800F298(void) } } -void sub_800F808(void) +void BattleMainCB2(void) { AnimateSprites(); BuildOamBuffer(); @@ -1024,8 +1058,8 @@ void sub_800FCD4(void) void sub_800FCFC(void) { Random(); // unused return value - REG_BG0HOFS = gUnknown_030042A4; - REG_BG0VOFS = gUnknown_030042A0; + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; @@ -1178,8 +1212,8 @@ void c2_8011A1C(void) } SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -1549,7 +1583,7 @@ void sub_8010874(void) gUnknown_02024C44[i] = 0; gUnknown_02024C4C[i] = 0; gUnknown_02024C5C[i] = 0xFF; - gLockedMove[i] = 0; + gLockedMoves[i] = 0; gUnknown_02024C2C[i] = 0; eFlashFireArr.arr[i] = 0; } @@ -2098,12 +2132,12 @@ void BattleBeginFirstTurn(void) if (ewram16058 == 0) { for (i = 0; i < gNoOfAllBanks; i++) - gTurnOrder[i] = i; + gBanksByTurnOrder[i] = i; for (i = 0; i < gNoOfAllBanks - 1; i++) { for (j = i + 1; j < gNoOfAllBanks; j++) { - if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 1) != 0) + if (GetWhoStrikesFirst(gBanksByTurnOrder[i], gBanksByTurnOrder[j], 1) != 0) SwapTurnOrder(i, j); } } @@ -2115,7 +2149,7 @@ void BattleBeginFirstTurn(void) } while (ewram16058 < gNoOfAllBanks) { - if (AbilityBattleEffects(0, gTurnOrder[ewram16058], 0, 0, 0) != 0) + if (AbilityBattleEffects(0, gBanksByTurnOrder[ewram16058], 0, 0, 0) != 0) r9++; ewram16058++; if (r9 != 0) @@ -2127,7 +2161,7 @@ void BattleBeginFirstTurn(void) return; while (ewram160F9 < gNoOfAllBanks) { - if (ItemBattleEffects(0, gTurnOrder[ewram160F9], 0) != 0) + if (ItemBattleEffects(0, gBanksByTurnOrder[ewram160F9], 0) != 0) r9++; ewram160F9++; if (r9 != 0) @@ -2199,7 +2233,7 @@ void BattleTurnPassed(void) if (TurnBasedEffects() != 0) return; } - if (sub_80173A4() != 0) + if (HandleFaintedMonActions() != 0) return; ewram16059 = 0; if (sub_80170DC() != 0) @@ -3861,13 +3895,13 @@ void SwapTurnOrder(u8 a, u8 b) { int temp; - temp = gUnknown_02024A76[a]; - gUnknown_02024A76[a] = gUnknown_02024A76[b]; - gUnknown_02024A76[b] = temp; + temp = gActionsByTurnOrder[a]; + gActionsByTurnOrder[a] = gActionsByTurnOrder[b]; + gActionsByTurnOrder[b] = temp; - temp = gTurnOrder[a]; - gTurnOrder[a] = gTurnOrder[b]; - gTurnOrder[b] = temp; + temp = gBanksByTurnOrder[a]; + gBanksByTurnOrder[a] = gBanksByTurnOrder[b]; + gBanksByTurnOrder[b] = temp; } // Determines which of the two given mons will strike first in a battle. @@ -4024,8 +4058,8 @@ void SetActionsAndBanksTurnOrder(void) { for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) { - gUnknown_02024A76[var] = gActionForBanks[gActiveBank]; - gTurnOrder[var] = gActiveBank; + gActionsByTurnOrder[var] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[var] = gActiveBank; var++; } } @@ -4053,15 +4087,15 @@ void SetActionsAndBanksTurnOrder(void) if (var == 5) { - gUnknown_02024A76[0] = gActionForBanks[gActiveBank]; - gTurnOrder[0] = gActiveBank; + gActionsByTurnOrder[0] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[0] = gActiveBank; var = 1; for (i = 0; i < gNoOfAllBanks; i++) { if (i != gActiveBank) { - gUnknown_02024A76[var] = gActionForBanks[i]; - gTurnOrder[var] = i; + gActionsByTurnOrder[var] = gActionForBanks[i]; + gBanksByTurnOrder[var] = i; var++; } } @@ -4075,8 +4109,8 @@ void SetActionsAndBanksTurnOrder(void) { if (gActionForBanks[gActiveBank] == ACTION_USE_ITEM || gActionForBanks[gActiveBank] == ACTION_SWITCH) { - gUnknown_02024A76[var] = gActionForBanks[gActiveBank]; - gTurnOrder[var] = gActiveBank; + gActionsByTurnOrder[var] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[var] = gActiveBank; var++; } } @@ -4084,8 +4118,8 @@ void SetActionsAndBanksTurnOrder(void) { if (gActionForBanks[gActiveBank] != ACTION_USE_ITEM && gActionForBanks[gActiveBank] != ACTION_SWITCH) { - gUnknown_02024A76[var] = gActionForBanks[gActiveBank]; - gTurnOrder[var] = gActiveBank; + gActionsByTurnOrder[var] = gActionForBanks[gActiveBank]; + gBanksByTurnOrder[var] = gActiveBank; var++; } } @@ -4093,12 +4127,12 @@ void SetActionsAndBanksTurnOrder(void) { for (j = i + 1; j < gNoOfAllBanks; j++) { - u8 bank1 = gTurnOrder[i]; - u8 bank2 = gTurnOrder[j]; - if (gUnknown_02024A76[i] != ACTION_USE_ITEM - && gUnknown_02024A76[j] != ACTION_USE_ITEM - && gUnknown_02024A76[i] != ACTION_SWITCH - && gUnknown_02024A76[j] != ACTION_SWITCH) + u8 bank1 = gBanksByTurnOrder[i]; + u8 bank2 = gBanksByTurnOrder[j]; + if (gActionsByTurnOrder[i] != ACTION_USE_ITEM + && gActionsByTurnOrder[j] != ACTION_USE_ITEM + && gActionsByTurnOrder[i] != ACTION_SWITCH + && gActionsByTurnOrder[j] != ACTION_SWITCH) { if (GetWhoStrikesFirst(bank1, bank2, FALSE)) SwapTurnOrder(i, j); @@ -4184,7 +4218,7 @@ void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) { // something stupid needed to match u8 zero; - gCurrentActionFuncId = gUnknown_02024A76[(zero = 0)]; + gCurrentActionFuncId = gActionsByTurnOrder[(zero = 0)]; } gDynamicBasePower = 0; @@ -4227,7 +4261,7 @@ void HandleEndTurn_BattleWon(void) { gBattleTextBuff1[0] = gBattleOutcome; gBankAttacker = GetBankByIdentity(IDENTITY_PLAYER_MON1); - gBattlescriptCurrInstr = gUnknown_081D8E02; + gBattlescriptCurrInstr = BattleScript_LinkBattleWonOrLost; gBattleOutcome &= ~(OUTCOME_LINK_BATTLE_RUN); } else if (gBattleTypeFlags & (BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)) @@ -4266,5 +4300,1091 @@ void HandleEndTurn_BattleWon(void) gBattlescriptCurrInstr = BattleScript_PayDayMoneyAndPickUpItems; } - gBattleMainFunc = sub_8013C9C; + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_BattleLost(void) +{ + gCurrentActionFuncId = 0; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleTextBuff1[0] = gBattleOutcome; + gBankAttacker = GetBankByIdentity(IDENTITY_PLAYER_MON1); + gBattlescriptCurrInstr = BattleScript_LinkBattleWonOrLost; + gBattleOutcome &= ~(OUTCOME_LINK_BATTLE_RUN); + } + else + { + gBattlescriptCurrInstr = BattleScript_LocalBattleLost; + } + + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_RanFromBattle(void) +{ + gCurrentActionFuncId = 0; + + switch (gProtectStructs[gBankAttacker].fleeFlag) + { + default: + gBattlescriptCurrInstr = BattleScript_GotAwaySafely; + break; + case 1: + gBattlescriptCurrInstr = BattleScript_SmokeBallEscape; + break; + case 2: + gBattlescriptCurrInstr = BattleScript_RanAwayUsingMonAbility; + break; + } + + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_MonFled(void) +{ + gCurrentActionFuncId = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBankAttacker, gBattlePartyID[gBankAttacker]); + gBattlescriptCurrInstr = BattleScript_WildMonFled; + + gBattleMainFunc = HandleEndTurn_FinishBattle; +} + +void HandleEndTurn_FinishBattle(void) +{ + if (gCurrentActionFuncId == 0xB || gCurrentActionFuncId == 0xC) + { + if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK + | BATTLE_TYPE_FIRST_BATTLE + | BATTLE_TYPE_SAFARI + | BATTLE_TYPE_EREADER_TRAINER + | BATTLE_TYPE_WALLY_TUTORIAL + | BATTLE_TYPE_BATTLE_TOWER))) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (GetBankSide(gActiveBank) == SIDE_PLAYER) + { + if (gBattleResults.poke1Species == SPECIES_NONE) + { + gBattleResults.poke1Species = gBattleMons[gActiveBank].species; + StringCopy(gBattleResults.pokeString1, gBattleMons[gActiveBank].nickname); + } + else + { + gBattleResults.opponentSpecies = gBattleMons[gActiveBank].species; + StringCopy(gBattleResults.pokeString2, gBattleMons[gActiveBank].nickname); + } + } + } + PutPokemonTodayCaughtOnAir(); + } + + BeginFastPaletteFade(3); + FadeOutMapMusic(5); + gBattleMainFunc = FreeResetData_ReturnToOvOrDoEvolutions; + gCB2_AfterEvolution = BattleMainCB2; + } + else + { + if (gBattleExecBuffer == 0) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); + } +} + +static void FreeResetData_ReturnToOvOrDoEvolutions(void) +{ + if (!gPaletteFade.active) + { + ResetSpriteData(); + if (gLeveledUpInBattle == 0 || gBattleOutcome != BATTLE_WON) + { + gBattleMainFunc = ReturnFromBattleToOverworld; + return; + } + else + { + gBattleMainFunc = TryEvolvePokemon; + } + } +} + +void TryEvolvePokemon(void) +{ + s32 i; + + while (gLeveledUpInBattle != 0) + { + for (i = 0; i < 6; i++) + { + if (gLeveledUpInBattle & gBitTable[i]) + { + u16 species; + u8 levelUpBits = gLeveledUpInBattle; + + levelUpBits &= ~(gBitTable[i]); + gLeveledUpInBattle = levelUpBits; + + species = GetEvolutionTargetSpecies(&gPlayerParty[i], 0, levelUpBits); + if (species != SPECIES_NONE) + { + gBattleMainFunc = WaitForEvoSceneToFinish; + EvolutionScene(&gPlayerParty[i], species, 0x81, i); + return; + } + } + } + } + + gBattleMainFunc = ReturnFromBattleToOverworld; +} + +static void WaitForEvoSceneToFinish(void) +{ + if (gMain.callback2 == BattleMainCB2) + gBattleMainFunc = TryEvolvePokemon; +} + +static void ReturnFromBattleToOverworld(void) +{ + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + { + RandomlyGivePartyPokerus(gPlayerParty); + PartySpreadPokerus(gPlayerParty); + } + + if (gBattleTypeFlags & BATTLE_TYPE_LINK && gReceivedRemoteLinkPlayers != 0) + return; + + gSpecialVar_Result = gBattleOutcome; + gMain.inBattle = 0; + gMain.callback1 = gPreBattleCallback1; + + if (gBattleTypeFlags & BATTLE_TYPE_ROAMER) + { + UpdateRoamerHPStatus(&gEnemyParty[0]); + if (gBattleOutcome == BATTLE_WON || gBattleOutcome == BATTLE_CAUGHT) + SetRoamerInactive(); + } + + m4aSongNumStop(0x5A); + SetMainCallback2(gMain.savedCallback); +} + +void RunBattleScriptCommands_PopCallbacksStack(void) +{ + if (gCurrentActionFuncId == 0xB || gCurrentActionFuncId == 0xC) + { + if (B_FUNCTION_STACK->size != 0) + B_FUNCTION_STACK->size--; + gBattleMainFunc = B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size]; + } + else + { + if (gBattleExecBuffer == 0) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); + } +} + +void RunBattleScriptCommands(void) +{ + if (gBattleExecBuffer == 0) + gBattleScriptingCommandsTable[gBattlescriptCurrInstr[0]](); +} + +void HandleAction_UseMove(void) +{ + u8 side; + u8 var = 4; + + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + + if (ewram160A6 & gBitTable[gBankAttacker]) + { + gCurrentActionFuncId = ACTION_FINISHED; + return; + } + + gCritMultiplier = 1; + eDmgMultiplier = 1; + ewram160E7 = 0; + gBattleMoveFlags = 0; + gMultiHitCounter = 0; + gBattleCommunication[6] = 0; + gCurrMovePos = gUnknown_02024BE5 = ewram1608Carr(gBankAttacker); + + // choose move + if (gProtectStructs[gBankAttacker].onlyStruggle) + { + gProtectStructs[gBankAttacker].onlyStruggle = 0; + gCurrentMove = gChosenMove = MOVE_STRUGGLE; + gHitMarker |= HITMARKER_NO_PPDEDUCT; + ewram16010arr(gBankAttacker) = GetMoveTarget(MOVE_STRUGGLE, 0); + } + else if (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS || gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE) + { + gCurrentMove = gChosenMove = gLockedMoves[gBankAttacker]; + } + // encore forces you to use the same move + else if (gDisableStructs[gBankAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBankAttacker].encoredMove == gBattleMons[gBankAttacker].moves[gDisableStructs[gBankAttacker].encoredMovePos]) + { + gCurrentMove = gChosenMove = gDisableStructs[gBankAttacker].encoredMove; + gCurrMovePos = gUnknown_02024BE5 = gDisableStructs[gBankAttacker].encoredMovePos; + ewram16010arr(gBankAttacker) = GetMoveTarget(gCurrentMove, 0); + } + // check if the encored move wasn't overwritten + else if (gDisableStructs[gBankAttacker].encoredMove != MOVE_NONE + && gDisableStructs[gBankAttacker].encoredMove != gBattleMons[gBankAttacker].moves[gDisableStructs[gBankAttacker].encoredMovePos]) + { + gCurrMovePos = gUnknown_02024BE5 = gDisableStructs[gBankAttacker].encoredMovePos; + gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; + gDisableStructs[gBankAttacker].encoredMove = MOVE_NONE; + gDisableStructs[gBankAttacker].encoredMovePos = 0; + gDisableStructs[gBankAttacker].encoreTimer1 = 0; + ewram16010arr(gBankAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else if (gBattleMons[gBankAttacker].moves[gCurrMovePos] != gChosenMovesByBanks[gBankAttacker]) + { + gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; + ewram16010arr(gBankAttacker) = GetMoveTarget(gCurrentMove, 0); + } + else + { + gCurrentMove = gChosenMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; + } + + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + gBattleResults.lastUsedMove = gCurrentMove; + else + gBattleResults.opponentMove = gCurrentMove; + + // choose target + side = GetBankSide(gBankAttacker) ^ BIT_SIDE; + if (gSideTimers[side].followmeTimer != 0 + && gBattleMoves[gCurrentMove].target == MOVE_TARGET_SELECTED + && GetBankSide(gBankAttacker) != GetBankSide(gSideTimers[side].followmeTarget) + && gBattleMons[gSideTimers[side].followmeTarget].hp != 0) + { + gBankTarget = gSideTimers[side].followmeTarget; + } + else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + && gSideTimers[side].followmeTimer == 0 + && (gBattleMoves[gCurrentMove].power != 0 + || gBattleMoves[gCurrentMove].target != MOVE_TARGET_x10) + && gBattleMons[ewram16010arr(gBankAttacker)].ability != ABILITY_LIGHTNING_ROD + && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) + { + side = GetBankSide(gBankAttacker); + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (side != GetBankSide(gActiveBank) + && ewram16010arr(gBankAttacker) != gActiveBank + && gBattleMons[gActiveBank].ability == ABILITY_LIGHTNING_ROD + && BankGetTurnOrder(gActiveBank) < var) + { + var = BankGetTurnOrder(gActiveBank); + } + } + if (var == 4) + { + if (gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON2); + } + else + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON2); + } + } + else + { + gBankTarget = ewram16010arr(gBankAttacker); + } + + if (gAbsentBankFlags & gBitTable[gBankTarget]) + { + if (GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)) + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + else + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ BIT_SIDE); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + } + } + else + { + gActiveBank = gBanksByTurnOrder[var]; + RecordAbilityBattle(gActiveBank, gBattleMons[gActiveBank].ability); + gSpecialStatuses[gActiveBank].lightningRodRedirected = 1; + gBankTarget = gActiveBank; + } + } + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE + && gBattleMoves[gChosenMove].target & MOVE_TARGET_RANDOM) + { + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_OPPONENT_MON2); + } + else + { + if (Random() & 1) + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON1); + else + gBankTarget = GetBankByIdentity(IDENTITY_PLAYER_MON2); + } + + if (gAbsentBankFlags & gBitTable[gBankTarget] + && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)) + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + } + else + { + gBankTarget = ewram16010arr(gBankAttacker); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + { + if (GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)) + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + else + { + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ BIT_SIDE); + if (gAbsentBankFlags & gBitTable[gBankTarget]) + gBankTarget = GetBankByIdentity(GetBankIdentity(gBankTarget) ^ BIT_MON); + } + } + } + + gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_Switch(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gActionSelectionCursor[gBankAttacker] = 0; + gMoveSelectionCursor[gBankAttacker] = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBankAttacker, ewram16064arr(gBankAttacker)) + + ewram16003 = gBankAttacker; + gBattlescriptCurrInstr = BattleScript_ActionSwitch; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + + if (gBattleResults.unk2 < 255) + gBattleResults.unk2++; +} + +#ifdef NONMATCHING +void HandleAction_UseItem(void) +{ + gBankAttacker = gBankTarget = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gDisableStructs[gBankAttacker].furyCutterCounter = 0; + gLastUsedItem = gBattleBufferB[gBankAttacker][1] | (gBattleBufferB[gBankAttacker][2] << 8); + + if (gLastUsedItem <= ITEM_PREMIER_BALL) // is ball + { + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[gLastUsedItem]; + } + else if (gLastUsedItem == ITEM_POKE_DOLL || gLastUsedItem == ITEM_FLUFFY_TAIL) + { + gBattlescriptCurrInstr = gBattlescriptsForRunningByItem[0]; + } + else if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[0]; + } + else + { + ewram16003 = gBankAttacker; + + switch (ewram160D8(gBankAttacker)) + { + case AI_ITEM_FULL_RESTORE: + case AI_ITEM_HEAL_HP: + break; + case AI_ITEM_CURE_CONDITION: + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (ewram160DA(gBankAttacker) & 1) + { + if (ewram160DA(gBankAttacker) & 0x3E) + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + while (!(ewram160DA(gBankAttacker) & 1)) + { + ewram160DA(gBankAttacker) /= 2; + gBattleCommunication[MULTISTRING_CHOOSER]++; + } + } + break; + case AI_ITEM_X_STAT: + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + if (ewram160DA(gBankAttacker) & 0x80) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 5; + } + else + { + PREPARE_STAT_BUFFER(gBattleTextBuff1, STAT_ATK) + PREPARE_STRING_BUFFER(gBattleTextBuff2, 0xD2) + + while (!(ewram160DA(gBankAttacker) & 1)) + { + ewram160DA(gBankAttacker) /= 2; + gBattleTextBuff1[2]++; + } + + ewram160A4 = gBattleTextBuff1[2] + 14; + ewram160A5 = 0; + } + break; + case AI_ITEM_GUARD_SPECS: + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + break; + } + + gBattlescriptCurrInstr = gBattlescriptsForUsingItem[ewram160D8(gBankAttacker)]; + } + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} +#else +__attribute__((naked)) +void HandleAction_UseItem(void) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + ldr r4, _08014804 @ =gBankAttacker\n\ + ldr r2, _08014808 @ =gBankTarget\n\ + ldr r1, _0801480C @ =gBanksByTurnOrder\n\ + ldr r0, _08014810 @ =gCurrentTurnActionNumber\n\ + ldrb r0, [r0]\n\ + adds r0, r1\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + strb r0, [r4]\n\ + ldr r0, _08014814 @ =gBattle_BG0_X\n\ + movs r2, 0\n\ + strh r2, [r0]\n\ + ldr r0, _08014818 @ =gBattle_BG0_Y\n\ + strh r2, [r0]\n\ + ldr r3, _0801481C @ =gDisableStructs\n\ + ldrb r1, [r4]\n\ + lsls r0, r1, 3\n\ + subs r0, r1\n\ + lsls r0, 2\n\ + adds r0, r3\n\ + strb r2, [r0, 0x10]\n\ + ldr r5, _08014820 @ =gLastUsedItem\n\ + ldr r2, _08014824 @ =gBattleBufferB\n\ + ldrb r1, [r4]\n\ + lsls r1, 9\n\ + adds r0, r2, 0x1\n\ + adds r0, r1, r0\n\ + ldrb r3, [r0]\n\ + adds r2, 0x2\n\ + adds r1, r2\n\ + ldrb r0, [r1]\n\ + lsls r0, 8\n\ + orrs r3, r0\n\ + strh r3, [r5]\n\ + cmp r3, 0xC\n\ + bhi _08014830\n\ + ldr r2, _08014828 @ =gBattlescriptCurrInstr\n\ + ldr r1, _0801482C @ =gBattlescriptsForBallThrow\n\ + ldrh r0, [r5]\n\ + lsls r0, 2\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + str r0, [r2]\n\ + b _08014A8C\n\ + .align 2, 0\n\ +_08014804: .4byte gBankAttacker\n\ +_08014808: .4byte gBankTarget\n\ +_0801480C: .4byte gBanksByTurnOrder\n\ +_08014810: .4byte gCurrentTurnActionNumber\n\ +_08014814: .4byte gBattle_BG0_X\n\ +_08014818: .4byte gBattle_BG0_Y\n\ +_0801481C: .4byte gDisableStructs\n\ +_08014820: .4byte gLastUsedItem\n\ +_08014824: .4byte gBattleBufferB\n\ +_08014828: .4byte gBattlescriptCurrInstr\n\ +_0801482C: .4byte gBattlescriptsForBallThrow\n\ +_08014830:\n\ + adds r0, r3, 0\n\ + subs r0, 0x50\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + cmp r0, 0x1\n\ + bhi _0801484C\n\ + ldr r0, _08014844 @ =gBattlescriptCurrInstr\n\ + ldr r1, _08014848 @ =gBattlescriptsForRunningByItem\n\ + b _0801485C\n\ + .align 2, 0\n\ +_08014844: .4byte gBattlescriptCurrInstr\n\ +_08014848: .4byte gBattlescriptsForRunningByItem\n\ +_0801484C:\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _0801486C\n\ + ldr r0, _08014864 @ =gBattlescriptCurrInstr\n\ + ldr r1, _08014868 @ =gBattlescriptsForUsingItem\n\ +_0801485C:\n\ + ldr r1, [r1]\n\ + str r1, [r0]\n\ + b _08014A8C\n\ + .align 2, 0\n\ +_08014864: .4byte gBattlescriptCurrInstr\n\ +_08014868: .4byte gBattlescriptsForUsingItem\n\ +_0801486C:\n\ + ldr r2, _080148A0 @ =gSharedMem\n\ + ldrb r0, [r4]\n\ + ldr r3, _080148A4 @ =0x00016003\n\ + adds r1, r2, r3\n\ + strb r0, [r1]\n\ + lsls r0, 24\n\ + lsrs r0, 25\n\ + ldr r1, _080148A8 @ =0x000160d8\n\ + adds r0, r1\n\ + adds r0, r2\n\ + ldrb r0, [r0]\n\ + subs r0, 0x1\n\ + mov r8, r4\n\ + ldr r3, _080148AC @ =gBattlescriptCurrInstr\n\ + mov r9, r3\n\ + ldr r1, _080148B0 @ =gBattlescriptsForUsingItem\n\ + mov r10, r1\n\ + adds r7, r2, 0\n\ + cmp r0, 0x4\n\ + bls _08014896\n\ + b _08014A74\n\ +_08014896:\n\ + lsls r0, 2\n\ + ldr r1, _080148B4 @ =_080148B8\n\ + adds r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ + .align 2, 0\n\ +_080148A0: .4byte gSharedMem\n\ +_080148A4: .4byte 0x00016003\n\ +_080148A8: .4byte 0x000160d8\n\ +_080148AC: .4byte gBattlescriptCurrInstr\n\ +_080148B0: .4byte gBattlescriptsForUsingItem\n\ +_080148B4: .4byte _080148B8\n\ + .align 2, 0\n\ +_080148B8:\n\ + .4byte _08014A74\n\ + .4byte _08014A74\n\ + .4byte _080148CC\n\ + .4byte _08014958\n\ + .4byte _08014A30\n\ +_080148CC:\n\ + ldr r2, _08014904 @ =gBattleCommunication\n\ + movs r0, 0\n\ + strb r0, [r2, 0x5]\n\ + ldr r1, _08014908 @ =gBankAttacker\n\ + ldrb r0, [r1]\n\ + lsrs r0, 1\n\ + ldr r6, _0801490C @ =0x000160da\n\ + adds r0, r6\n\ + adds r0, r7\n\ + ldrb r3, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r3\n\ + mov r8, r1\n\ + cmp r0, 0\n\ + beq _08014918\n\ + movs r0, 0x3E\n\ + ands r0, r3\n\ + ldr r3, _08014910 @ =gBattlescriptCurrInstr\n\ + mov r9, r3\n\ + ldr r1, _08014914 @ =gBattlescriptsForUsingItem\n\ + mov r10, r1\n\ + cmp r0, 0\n\ + bne _080148FC\n\ + b _08014A74\n\ +_080148FC:\n\ + movs r0, 0x5\n\ + strb r0, [r2, 0x5]\n\ + b _08014A74\n\ + .align 2, 0\n\ +_08014904: .4byte gBattleCommunication\n\ +_08014908: .4byte gBankAttacker\n\ +_0801490C: .4byte 0x000160da\n\ +_08014910: .4byte gBattlescriptCurrInstr\n\ +_08014914: .4byte gBattlescriptsForUsingItem\n\ +_08014918:\n\ + ldr r3, _08014950 @ =gBattlescriptCurrInstr\n\ + mov r9, r3\n\ + ldr r0, _08014954 @ =gBattlescriptsForUsingItem\n\ + mov r10, r0\n\ + adds r5, r7, 0\n\ + mov r4, r8\n\ + adds r3, r6, 0\n\ +_08014926:\n\ + ldrb r0, [r4]\n\ + lsrs r0, 1\n\ + adds r0, r3\n\ + adds r0, r5\n\ + ldrb r1, [r0]\n\ + lsrs r1, 1\n\ + strb r1, [r0]\n\ + ldrb r0, [r2, 0x5]\n\ + adds r0, 0x1\n\ + strb r0, [r2, 0x5]\n\ + ldrb r0, [r4]\n\ + lsrs r0, 1\n\ + adds r0, r3\n\ + adds r0, r5\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _08014926\n\ + b _08014A74\n\ + .align 2, 0\n\ +_08014950: .4byte gBattlescriptCurrInstr\n\ +_08014954: .4byte gBattlescriptsForUsingItem\n\ +_08014958:\n\ + ldr r3, _0801498C @ =gBattleCommunication\n\ + movs r0, 0x4\n\ + strb r0, [r3, 0x5]\n\ + ldr r2, _08014990 @ =gBankAttacker\n\ + ldrb r0, [r2]\n\ + lsrs r0, 1\n\ + ldr r1, _08014994 @ =0x000160da\n\ + mov r12, r1\n\ + add r0, r12\n\ + adds r6, r0, r7\n\ + ldrb r1, [r6]\n\ + movs r0, 0x80\n\ + ands r0, r1\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + mov r8, r2\n\ + cmp r5, 0\n\ + beq _080149A0\n\ + movs r0, 0x5\n\ + strb r0, [r3, 0x5]\n\ + ldr r2, _08014998 @ =gBattlescriptCurrInstr\n\ + mov r9, r2\n\ + ldr r3, _0801499C @ =gBattlescriptsForUsingItem\n\ + mov r10, r3\n\ + b _08014A74\n\ + .align 2, 0\n\ +_0801498C: .4byte gBattleCommunication\n\ +_08014990: .4byte gBankAttacker\n\ +_08014994: .4byte 0x000160da\n\ +_08014998: .4byte gBattlescriptCurrInstr\n\ +_0801499C: .4byte gBattlescriptsForUsingItem\n\ +_080149A0:\n\ + ldr r3, _08014A18 @ =gBattleTextBuff1\n\ + movs r4, 0xFD\n\ + strb r4, [r3]\n\ + movs r0, 0x5\n\ + strb r0, [r3, 0x1]\n\ + movs r2, 0x1\n\ + strb r2, [r3, 0x2]\n\ + movs r0, 0xFF\n\ + strb r0, [r3, 0x3]\n\ + ldr r1, _08014A1C @ =gBattleTextBuff2\n\ + strb r4, [r1]\n\ + strb r5, [r1, 0x1]\n\ + movs r0, 0xD2\n\ + strb r0, [r1, 0x2]\n\ + strb r5, [r1, 0x3]\n\ + subs r0, 0xD3\n\ + strb r0, [r1, 0x4]\n\ + ldrb r0, [r6]\n\ + ands r2, r0\n\ + ldr r0, _08014A20 @ =gBattlescriptCurrInstr\n\ + mov r9, r0\n\ + ldr r1, _08014A24 @ =gBattlescriptsForUsingItem\n\ + mov r10, r1\n\ + adds r6, r3, 0\n\ + cmp r2, 0\n\ + bne _08014A02\n\ + adds r3, r7, 0\n\ + mov r5, r8\n\ + mov r4, r12\n\ + adds r2, r6, 0\n\ +_080149DC:\n\ + ldrb r0, [r5]\n\ + lsrs r0, 1\n\ + adds r0, r4\n\ + adds r0, r3\n\ + ldrb r1, [r0]\n\ + lsrs r1, 1\n\ + strb r1, [r0]\n\ + ldrb r0, [r2, 0x2]\n\ + adds r0, 0x1\n\ + strb r0, [r2, 0x2]\n\ + ldrb r0, [r5]\n\ + lsrs r0, 1\n\ + adds r0, r4\n\ + adds r0, r3\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + cmp r0, 0\n\ + beq _080149DC\n\ +_08014A02:\n\ + ldrb r0, [r6, 0x2]\n\ + adds r0, 0xE\n\ + ldr r2, _08014A28 @ =0x000160a4\n\ + adds r1, r7, r2\n\ + movs r2, 0\n\ + strb r0, [r1]\n\ + ldr r3, _08014A2C @ =0x000160a5\n\ + adds r0, r7, r3\n\ + strb r2, [r0]\n\ + b _08014A74\n\ + .align 2, 0\n\ +_08014A18: .4byte gBattleTextBuff1\n\ +_08014A1C: .4byte gBattleTextBuff2\n\ +_08014A20: .4byte gBattlescriptCurrInstr\n\ +_08014A24: .4byte gBattlescriptsForUsingItem\n\ +_08014A28: .4byte 0x000160a4\n\ +_08014A2C: .4byte 0x000160a5\n\ +_08014A30:\n\ + ldr r0, _08014A50 @ =gBattleTypeFlags\n\ + ldrh r0, [r0]\n\ + movs r1, 0x1\n\ + ands r1, r0\n\ + cmp r1, 0\n\ + beq _08014A64\n\ + ldr r1, _08014A54 @ =gBattleCommunication\n\ + movs r0, 0x2\n\ + strb r0, [r1, 0x5]\n\ + ldr r0, _08014A58 @ =gBankAttacker\n\ + mov r8, r0\n\ + ldr r1, _08014A5C @ =gBattlescriptCurrInstr\n\ + mov r9, r1\n\ + ldr r2, _08014A60 @ =gBattlescriptsForUsingItem\n\ + mov r10, r2\n\ + b _08014A74\n\ + .align 2, 0\n\ +_08014A50: .4byte gBattleTypeFlags\n\ +_08014A54: .4byte gBattleCommunication\n\ +_08014A58: .4byte gBankAttacker\n\ +_08014A5C: .4byte gBattlescriptCurrInstr\n\ +_08014A60: .4byte gBattlescriptsForUsingItem\n\ +_08014A64:\n\ + ldr r0, _08014AA0 @ =gBattleCommunication\n\ + strb r1, [r0, 0x5]\n\ + ldr r3, _08014AA4 @ =gBankAttacker\n\ + mov r8, r3\n\ + ldr r0, _08014AA8 @ =gBattlescriptCurrInstr\n\ + mov r9, r0\n\ + ldr r1, _08014AAC @ =gBattlescriptsForUsingItem\n\ + mov r10, r1\n\ +_08014A74:\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + lsrs r0, 1\n\ + ldr r3, _08014AB0 @ =0x000160d8\n\ + adds r0, r3\n\ + adds r0, r7\n\ + ldrb r0, [r0]\n\ + lsls r0, 2\n\ + add r0, r10\n\ + ldr r0, [r0]\n\ + mov r1, r9\n\ + str r0, [r1]\n\ +_08014A8C:\n\ + movs r0, 0xA\n\ + ldr r2, _08014AB4 @ =gCurrentActionFuncId\n\ + strb r0, [r2]\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_08014AA0: .4byte gBattleCommunication\n\ +_08014AA4: .4byte gBankAttacker\n\ +_08014AA8: .4byte gBattlescriptCurrInstr\n\ +_08014AAC: .4byte gBattlescriptsForUsingItem\n\ +_08014AB0: .4byte 0x000160d8\n\ +_08014AB4: .4byte gCurrentActionFuncId\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +bool8 TryRunFromBattle(u8 bank) +{ + bool8 effect = FALSE; + u8 holdEffect; + u8 speedVar; + + if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY) + holdEffect = gEnigmaBerries[bank].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(gBattleMons[bank].item); + + gStringBank = bank; + + if (holdEffect == HOLD_EFFECT_CAN_ALWAYS_RUN) + { + gLastUsedItem = gBattleMons[bank].item ; + gProtectStructs[bank].fleeFlag = 1; + effect++; + } + else if (gBattleMons[bank].ability == ABILITY_RUN_AWAY) + { + gLastUsedAbility = ABILITY_RUN_AWAY; + gProtectStructs[bank].fleeFlag = 2; + effect++; + } + else + { + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + { + if (gBattleMons[bank].speed < gBattleMons[bank ^ BIT_SIDE].speed) + { + speedVar = (gBattleMons[bank].speed * 128) / (gBattleMons[bank ^ BIT_SIDE].speed) + (ewram16078 * 30); + if (speedVar > (Random() & 0xFF)) + effect++; + } + else // same speed or faster + { + effect++; + } + } + + ewram16078++; + } + + if (effect) + { + gCurrentTurnActionNumber = gNoOfAllBanks; + gBattleOutcome = BATTLE_RAN; + } + + return effect; +} + +void HandleAction_Run(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gCurrentTurnActionNumber = gNoOfAllBanks; + + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + { + if (GetBankSide(gActiveBank) == SIDE_PLAYER) + { + if (gActionForBanks[gActiveBank] == ACTION_RUN) + gBattleOutcome |= BATTLE_LOST; + } + else + { + if (gActionForBanks[gActiveBank] == ACTION_RUN) + gBattleOutcome |= BATTLE_WON; + } + } + + gBattleOutcome |= OUTCOME_LINK_BATTLE_RUN; + } + else + { + if (GetBankSide(gBankAttacker) == SIDE_PLAYER) + { + if (!TryRunFromBattle(gBankAttacker)) // failed to run away + { + gBattleMons[gBankAttacker].status2 &= ~STATUS2_DESTINY_BOND; + gBattleCommunication[MULTISTRING_CHOOSER] = 3; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + } + } + else + { + if (gBattleMons[gBankAttacker].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 4; + gBattlescriptCurrInstr = BattleScript_PrintFailedToRunString; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + } + else + { + gCurrentTurnActionNumber = gNoOfAllBanks; + gBattleOutcome = BATTLE_POKE_FLED; + } + } + } +} + +void HandleAction_WatchesCarefully(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[0]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_SafariZoneBallThrow(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gNumSafariBalls--; + gLastUsedItem = ITEM_SAFARI_BALL; + gBattlescriptCurrInstr = gBattlescriptsForBallThrow[ITEM_SAFARI_BALL]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_ThrowPokeblock(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattleCommunication[MULTISTRING_CHOOSER] = gBattleBufferB[gBankAttacker][1] - 1; + gLastUsedItem = gBattleBufferB[gBankAttacker][2]; + + if (ewram16087 < 3) + ewram16087++; + if (ewram16088 > 1) + { + if (ewram16088 < gUnknown_081FA70C[ewram16087][gBattleCommunication[MULTISTRING_CHOOSER]]) + ewram16088 = 1; + else + ewram16088 -= gUnknown_081FA70C[ewram16087][gBattleCommunication[MULTISTRING_CHOOSER]]; + } + + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[2]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_GoNear(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + + ewram16089 += gUnknown_081FA71B[ewram16086]; + if (ewram16089 > 20) + ewram16089 = 20; + + ewram16088 += gUnknown_081FA71F[ewram16086]; + if (ewram16088 > 20) + ewram16088 = 20; + + if (ewram16086 < 3) + { + ewram16086++; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[1]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; +} + +void HandleAction_SafriZoneRun(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + PlaySE(SE_NIGERU); + gCurrentTurnActionNumber = gNoOfAllBanks; + gBattleOutcome = BATTLE_RAN; +} + +void HandleAction_Action9(void) +{ + gBankAttacker = gBanksByTurnOrder[gCurrentTurnActionNumber]; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gBankAttacker, gBattlePartyID[gBankAttacker]) + + gBattlescriptCurrInstr = gBattlescriptsForSafariActions[3]; + gCurrentActionFuncId = ACTION_RUN_BATTLESCRIPT; + gActionsByTurnOrder[1] = ACTION_FINISHED; +} + +void HandleAction_Action11(void) +{ + if (!HandleFaintedMonActions()) + { + ewram16059 = 0; + gCurrentActionFuncId = ACTION_FINISHED; + } +} + +void HandleAction_NothingIsFainted(void) +{ + gCurrentTurnActionNumber++; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; + gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 + | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_x8000000 | HITMARKER_x4000000); +} + +void HandleAction_ActionFinished(void) +{ + gCurrentTurnActionNumber++; + gCurrentActionFuncId = gActionsByTurnOrder[gCurrentTurnActionNumber]; + SpecialStatusesClear(); + gHitMarker &= ~(HITMARKER_DESTINYBOND | HITMARKER_IGNORE_SUBSTITUTE | HITMARKER_ATTACKSTRING_PRINTED + | HITMARKER_NO_PPDEDUCT | HITMARKER_IGNORE_SAFEGUARD | HITMARKER_IGNORE_ON_AIR + | HITMARKER_IGNORE_UNDERGROUND | HITMARKER_IGNORE_UNDERWATER | HITMARKER_x100000 + | HITMARKER_OBEYS | HITMARKER_x10 | HITMARKER_SYNCHRONISE_EFFECT + | HITMARKER_x8000000 | HITMARKER_x4000000); + + gBattleMoveDamage = 0; + ewram16002 = 0; + ewram160A1 = 0; + gMoveHitWith[gBankAttacker] = 0; + gUnknown_02024C44[gBankAttacker] = 0; + eDynamicMoveType = 0; + gDynamicBasePower = 0; + ewram1600C = 0; + gBattleCommunication[3] = 0; + gBattleCommunication[4] = 0; + eMultihitMoveEffect = 0; + ewram17130 = 0; } diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c index cfa188fa4..92e0404cc 100644 --- a/src/battle/battle_3.c +++ b/src/battle/battle_3.c @@ -33,7 +33,7 @@ extern u8 gNoOfAllBanks; extern u32 gStatuses3[4]; extern u8 gBankAttacker; extern u8 gBankTarget; -extern u8 gTurnOrder[4]; +extern u8 gBanksByTurnOrder[4]; extern u16 gSideAffecting[2]; extern u16 gBattleWeather; extern void (*gBattleMainFunc)(void); @@ -87,8 +87,6 @@ u8 weather_get_current(void); void b_push_move_exec(u8* BS_ptr); void RecordAbilityBattle(u8 bank, u8 ability); void RecordItemBattle(u8 bank, u8 holdEffect); -void sub_8013F54(void); -void sub_8013FBC(void); s8 GetPokeFlavourRelation(u32 pid, u8 flavor); extern u8 BattleScript_MoveSelectionDisabledMove[]; @@ -372,14 +370,14 @@ u8 UpdateTurnCounters(void) case 0: for (i = 0; i < gNoOfAllBanks; i++) { - gTurnOrder[i] = i; + gBanksByTurnOrder[i] = i; } for (i = 0; i < gNoOfAllBanks - 1; i++) { s32 j; for (j = i + 1; j < gNoOfAllBanks; j++) { - if (GetWhoStrikesFirst(gTurnOrder[i], gTurnOrder[j], 0)) + if (GetWhoStrikesFirst(gBanksByTurnOrder[i], gBanksByTurnOrder[j], 0)) SwapTurnOrder(i, j); } } @@ -496,7 +494,7 @@ u8 UpdateTurnCounters(void) case 5: while (BATTLE_STRUCT->turnSideTracker < gNoOfAllBanks) { - gActiveBank = gTurnOrder[BATTLE_STRUCT->turnSideTracker]; + gActiveBank = gBanksByTurnOrder[BATTLE_STRUCT->turnSideTracker]; if (gWishFutureKnock.wishCounter[gActiveBank] && --gWishFutureKnock.wishCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) { gBankTarget = gActiveBank; @@ -606,7 +604,7 @@ u8 TurnBasedEffects(void) gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); while (BATTLE_STRUCT->turnEffectsBank < gNoOfAllBanks && BATTLE_STRUCT->turnEffectsTracker <= TURNBASED_MAX_CASE) { - gActiveBank = gBankAttacker = gTurnOrder[BATTLE_STRUCT->turnEffectsBank]; + gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->turnEffectsBank]; if (gAbsentBankFlags & gBitTable[gActiveBank]) { BATTLE_STRUCT->turnEffectsBank++; @@ -948,7 +946,7 @@ bool8 sub_80170DC(void) // handle future sight and perish song case 1: // perish song while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) { - gActiveBank = gBankAttacker = gTurnOrder[BATTLE_STRUCT->sub80170DC_Bank]; + gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->sub80170DC_Bank]; if (gAbsentBankFlags & gBitTable[gActiveBank]) BATTLE_STRUCT->sub80170DC_Bank++; else @@ -984,9 +982,9 @@ bool8 sub_80170DC(void) // handle future sight and perish song return 0; } -#define sub_80173A4_MAX_CASE 7 +#define HandleFaintedMonActions_MAX_CASE 7 -bool8 sub_80173A4(void) +bool8 HandleFaintedMonActions(void) { if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) return 0; @@ -1053,7 +1051,7 @@ bool8 sub_80173A4(void) case 7: break; } - } while (BATTLE_STRUCT->sub80173A4_Tracker != sub_80173A4_MAX_CASE); + } while (BATTLE_STRUCT->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE); return 0; } @@ -2255,7 +2253,7 @@ void b_call_bc_move_exec(u8* BS_ptr) { gBattlescriptCurrInstr = BS_ptr; B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; - gBattleMainFunc = sub_8013F54; + gBattleMainFunc = RunBattleScriptCommands_PopCallbacksStack; gCurrentActionFuncId = 0; } @@ -2264,7 +2262,7 @@ void b_push_move_exec(u8* BS_ptr) b_movescr_stack_push_cursor(); gBattlescriptCurrInstr = BS_ptr; B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; - gBattleMainFunc = sub_8013FBC; + gBattleMainFunc = RunBattleScriptCommands; } enum diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index d9789f76d..3b1092e45 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -35,8 +35,8 @@ extern u8 gActiveBank; extern u32 gBattleExecBuffer; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[4]; -extern u8 gTurnOrder[4]; -extern u8 gUnknown_02024A76[4]; +extern u8 gBanksByTurnOrder[4]; +extern u8 gActionsByTurnOrder[4]; extern u16 gCurrentMove; extern u8 gLastUsedAbility; extern u16 gBattleWeather; @@ -45,7 +45,7 @@ extern u8 gEffectBank; extern u8 gAbsentBankFlags; extern u8 gMultiHitCounter; extern u16 gLastUsedMove[4]; -extern u16 gLockedMove[4]; +extern u16 gLockedMoves[4]; extern u16 gChosenMovesByBanks[4]; extern u16 gSideAffecting[2]; extern u16 gPauseCounterBattle; @@ -145,10 +145,9 @@ bool32 IsHMMove2(u16 move); void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0); void nullsub_6(void); void ReshowBattleScreenAfterMenu(void); -void sub_800F808(void); +void BattleMainCB2(void); void AddMoney(u32* moneySaveblock, u32 to_give); void sub_80156DC(void); //set sentpokes value -bool8 sub_8014AB8(u8 bank); //can run from battle u8 CountAliveMons(u8 caseID); void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); u8 CanRunFromBattle(void); @@ -1074,11 +1073,11 @@ static void atk00_attackcanceler(void) } for (i = 0; i < gNoOfAllBanks; i++) { - if ((gProtectStructs[gTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) + if ((gProtectStructs[gBanksByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) { - PressurePPLose(gBankAttacker, gTurnOrder[i], MOVE_SNATCH); - gProtectStructs[gTurnOrder[i]].stealMove = 0; - BATTLE_STRUCT->scriptingActive = gTurnOrder[i]; + PressurePPLose(gBankAttacker, gBanksByTurnOrder[i], MOVE_SNATCH); + gProtectStructs[gBanksByTurnOrder[i]].stealMove = 0; + BATTLE_STRUCT->scriptingActive = gBanksByTurnOrder[i]; b_movescr_stack_push_cursor(); gBattlescriptCurrInstr = BattleScript_SnatchedMove; return; @@ -2253,7 +2252,7 @@ u8 BankGetTurnOrder(u8 bank) int i; for (i = 0; i < gNoOfAllBanks; i++) { - if (gTurnOrder[i] == bank) + if (gBanksByTurnOrder[i] == bank) break; } return i; @@ -2527,7 +2526,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleMons[gEffectBank].status2 & STATUS2_UPROAR) {gBattlescriptCurrInstr++; return;} gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4; b_movescr_stack_push(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; @@ -2551,7 +2550,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) break; case 12: //charging move gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gProtectStructs[gEffectBank].chargingTurn = 1; gBattlescriptCurrInstr++; break; @@ -2619,7 +2618,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) case 29: //recharge gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE; gDisableStructs[gEffectBank].rechargeCounter = 2; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gBattlescriptCurrInstr++; break; case 30: //rage @@ -2711,7 +2710,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (!(gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE)) { gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gEffectBank] = gCurrentMove; + gLockedMoves[gEffectBank] = gCurrentMove; gBattleMons[gEffectBank].status2 |= (((Random() & 1) + 2) << 0xA); } else @@ -3909,7 +3908,7 @@ _0801ED7C:\n\ lsls r0, 5\n\ orrs r1, r0\n\ str r1, [r2]\n\ - ldr r1, _0801EDC8 @ =gLockedMove\n\ + ldr r1, _0801EDC8 @ =gLockedMoves\n\ ldrb r0, [r3]\n\ lsls r0, 1\n\ adds r0, r1\n\ @@ -3941,7 +3940,7 @@ _0801ED7C:\n\ ldr r0, [r0]\n\ bl _0801F5F8\n\ .align 2, 0\n\ -_0801EDC8: .4byte gLockedMove\n\ +_0801EDC8: .4byte gLockedMoves\n\ _0801EDCC: .4byte gCurrentMove\n\ _0801EDD0: .4byte gBattlescriptCurrInstr\n\ _0801EDD4: .4byte gMoveEffectBS_Ptrs\n\ @@ -4035,7 +4034,7 @@ _0801EE84:\n\ lsls r1, 5\n\ orrs r0, r1\n\ str r0, [r2]\n\ - ldr r1, _0801EEC0 @ =gLockedMove\n\ + ldr r1, _0801EEC0 @ =gLockedMoves\n\ mov r2, r8\n\ ldrb r0, [r2]\n\ lsls r0, 1\n\ @@ -4053,7 +4052,7 @@ _0801EE84:\n\ strb r0, [r1, 0x1]\n\ b _0801F5DC\n\ .align 2, 0\n\ -_0801EEC0: .4byte gLockedMove\n\ +_0801EEC0: .4byte gLockedMoves\n\ _0801EEC4: .4byte gCurrentMove\n\ _0801EEC8: .4byte gProtectStructs\n\ _0801EECC:\n\ @@ -4365,7 +4364,7 @@ _0801F13C:\n\ adds r0, r2\n\ movs r1, 0x2\n\ strb r1, [r0, 0x19]\n\ - ldr r1, _0801F17C @ =gLockedMove\n\ + ldr r1, _0801F17C @ =gLockedMoves\n\ ldrb r0, [r3]\n\ lsls r0, 1\n\ adds r0, r1\n\ @@ -4375,7 +4374,7 @@ _0801F13C:\n\ b _0801F5DC\n\ .align 2, 0\n\ _0801F178: .4byte gDisableStructs\n\ -_0801F17C: .4byte gLockedMove\n\ +_0801F17C: .4byte gLockedMoves\n\ _0801F180: .4byte gCurrentMove\n\ _0801F184:\n\ ldr r0, _0801F1A0 @ =gBankAttacker\n\ @@ -4764,7 +4763,7 @@ _0801F4C4:\n\ lsls r0, 5\n\ orrs r1, r0\n\ str r1, [r2]\n\ - ldr r1, _0801F4F8 @ =gLockedMove\n\ + ldr r1, _0801F4F8 @ =gLockedMoves\n\ ldrb r0, [r3]\n\ lsls r0, 1\n\ adds r0, r1\n\ @@ -4787,7 +4786,7 @@ _0801F4F2:\n\ str r0, [r2]\n\ b _0801F5FA\n\ .align 2, 0\n\ -_0801F4F8: .4byte gLockedMove\n\ +_0801F4F8: .4byte gLockedMoves\n\ _0801F4FC: .4byte gCurrentMove\n\ _0801F500:\n\ mov r5, r8\n\ @@ -10660,8 +10659,8 @@ static void atk52_switchineffects(void) for (i = 0; i < gNoOfAllBanks; i++) { - if (gTurnOrder[i] == gActiveBank) - gUnknown_02024A76[i] = 0xC; + if (gBanksByTurnOrder[i] == gActiveBank) + gActionsByTurnOrder[i] = 0xC; } for (i = 0; i < gNoOfAllBanks; i++) @@ -10838,7 +10837,7 @@ static void atk5A_yesnoboxlearnmove(void) } break; case 3: - if (!gPaletteFade.active && gMain.callback2 == sub_800F808) + if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2) { u8 move_pos = sub_809FA30(); if (move_pos == 4) @@ -11404,7 +11403,7 @@ static void atk68_cancelallactions(void) int i; for (i = 0; i < gNoOfAllBanks; i++) { - gUnknown_02024A76[i] = 0xC; + gActionsByTurnOrder[i] = 0xC; } gBattlescriptCurrInstr++; } @@ -11943,7 +11942,7 @@ static void atk71_buffermovetolearn(void) static void atk72_jumpifplayerran(void) { - if (sub_8014AB8(gBank1)) + if (TryRunFromBattle(gBank1)) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else gBattlescriptCurrInstr += 5; @@ -13251,7 +13250,7 @@ static void atk8A_normalisebuffs(void) //haze static void atk8B_setbide(void) { gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gBankAttacker] = gCurrentMove; + gLockedMoves[gBankAttacker] = gCurrentMove; gTakenDmg[gBankAttacker] = 0; gBattleMons[gBankAttacker].status2 |= (STATUS2_BIDE - 0x100); //2 turns gBattlescriptCurrInstr++; @@ -15075,7 +15074,7 @@ static void atkB3_rolloutdamagecalculation(void) gDisableStructs[gBankAttacker].rolloutTimer1 = 5; gDisableStructs[gBankAttacker].rolloutTimer2 = 5; gBattleMons[gBankAttacker].status2 |= STATUS2_MULTIPLETURNS; - gLockedMove[gBankAttacker] = gCurrentMove; + gLockedMoves[gBankAttacker] = gCurrentMove; } if (--gDisableStructs[gBankAttacker].rolloutTimer1 == 0) gBattleMons[gBankAttacker].status2 &= ~(STATUS2_MULTIPLETURNS); @@ -15252,8 +15251,8 @@ static void atkBA_jumpifnopursuitswitchdmg(void) int i; for (i = 0; i < gNoOfAllBanks; i++) { - if (gTurnOrder[i] == gBankTarget) - gUnknown_02024A76[i] = 11; + if (gBanksByTurnOrder[i] == gBankTarget) + gActionsByTurnOrder[i] = 11; } gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; @@ -17014,7 +17013,7 @@ static void atkEC_pursuitrelated(void) gActiveBank = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank]) && gActionForBanks[gActiveBank] == 0 && gChosenMovesByBanks[gActiveBank] == MOVE_PURSUIT) { - gUnknown_02024A76[gActiveBank] = 11; + gActionsByTurnOrder[gActiveBank] = 11; gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; BATTLE_STRUCT->animTurn = 1; @@ -17230,7 +17229,7 @@ static void atkF2_displaydexinfo(void) } break; case 2: - if (!gPaletteFade.active && gMain.callback2 == sub_800F808 && !gTasks[gBattleCommunication[1]].isActive) + if (!gPaletteFade.active && gMain.callback2 == BattleMainCB2 && !gTasks[gBattleCommunication[1]].isActive) { LZDecompressVram(gBattleTerrainTiles_Building, (void*)(0x06008000)); LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(0x0600d000)); @@ -17394,12 +17393,12 @@ static void atkF3_trygivecaughtmonnick(void) if (!gPaletteFade.active) { GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); - DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), sub_800F808); + DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2); gBattleCommunication[0]++; } break; case 3: - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active ) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active ) { SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 35d8f33c8..54181bc21 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -48,8 +48,8 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gUnknown_0300434C[]; extern u32 gBattleExecBuffer; extern MainCallback gPreBattleCallback1; @@ -1410,8 +1410,8 @@ void sub_8039B64(void) void LinkOpponentHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_8037C2C; diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index adc3c1c85..2c78d4a82 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -48,8 +48,8 @@ extern u8 gAnimFriendship; extern u16 gWeatherMoveAnim; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern MainCallback gPreBattleCallback1; extern void (*gBattleBankFunc[])(void); extern u8 gHealthboxIDs[]; @@ -1355,8 +1355,8 @@ void sub_811FF30(void) void LinkPartnerHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_811DFA0; diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 477b600ac..ab7b6944b 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -50,8 +50,8 @@ extern u8 gAnimMoveTurn; extern u8 gAnimScriptActive; extern void (*gAnimScriptCallback)(void); extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gDisplayedStringBattle[]; extern u8 gBankTarget; extern u8 gAbsentBankFlags; @@ -1404,8 +1404,8 @@ void sub_8035238(void) void OpponentHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_80331D0; diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 62a38311a..f992e3e51 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -35,8 +35,8 @@ struct MovePpInfo #define SUB_803037C_TILE_DATA_OFFSET 444 #endif -extern u16 gUnknown_030042A4; -extern u16 gUnknown_030042A0; +extern u16 gBattle_BG0_X; +extern u16 gBattle_BG0_Y; extern struct Window gUnknown_03004210; @@ -72,7 +72,7 @@ extern u16 gBattle_BG1_Y; extern u16 gUnknown_030041B8; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u8 gUnknown_03004344; extern u8 gUnknown_0300434C[]; @@ -148,8 +148,8 @@ extern u8 gAbsentBankFlags; extern u8 gUnknown_03004344; extern u8 gNoOfAllBanks; extern u16 gBattlePartyID[]; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern struct Window gUnknown_03004210; extern const u8 BattleText_SwitchWhich[]; extern u8 gUnknown_03004348; @@ -679,8 +679,8 @@ void sub_802C68C(void) { DestroyMenuCursor(); PlaySE(SE_SELECT); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 320; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 320; Emitcmd33(1, 10, 0xFFFF); PlayerBufferExecCompleted(); } @@ -1495,7 +1495,7 @@ void sub_802DF30(void) void sub_802DF88(void) { - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { if (gUnknown_0202E8F4 == 1) Emitcmd34(1, gUnknown_0202E8F5, gUnknown_02038470); @@ -1519,7 +1519,7 @@ void sub_802E004(void) void sub_802E03C(void) { - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { Emitcmd35(1, gSpecialVar_ItemId); PlayerBufferExecCompleted(); @@ -1695,8 +1695,8 @@ void b_link_standby_message(void) { if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; sub_8002EB0(&gUnknown_03004210, BattleText_LinkStandby, 0x90, 2, 15); } } @@ -2559,8 +2559,8 @@ void sub_8030190(void) void PlayerHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); gBattleBankFunc[gActiveBank] = sub_802DF18; @@ -2578,8 +2578,8 @@ void PlayerHandlecmd18(void) { int r4; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38); @@ -2612,8 +2612,8 @@ void PlayerHandlecmd20(void) void sub_80304A8(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 320; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 320; sub_802E1B0(); gUnknown_03004344 = 0xFF; sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 37c58f951..0a629ba4d 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -23,8 +23,8 @@ extern u8 gActiveBank; extern const u8 BattleText_MenuOptionsSafari[]; extern void *gBattleBankFunc[]; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gBattleBufferA[][0x200]; extern bool8 gDoingBattleAnim; extern u8 gObjectBankIDs[]; @@ -313,7 +313,7 @@ void sub_812B724(void) void sub_812B758(void) { - if (gMain.callback2 == sub_800F808 && !gPaletteFade.active) + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { Emitcmd35(1, gSpecialVar_ItemId); SafariBufferExecCompleted(); @@ -450,8 +450,8 @@ void SafariHandleMoveAnimation(void) void SafariHandlePrintString(void) { - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_812B694; @@ -469,8 +469,8 @@ void SafariHandlecmd18(void) { int i; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; gUnknown_03004210.paletteNum = 0; FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index be40f968c..bd2b4a45b 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -53,8 +53,8 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern struct Window gUnknown_03004210; -extern u16 gUnknown_030042A0; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_Y; +extern u16 gBattle_BG0_X; extern u8 gUnknown_0300434C[]; extern const u8 BattleText_WallyMenu[]; extern const u8 BattleText_MenuOptions[]; @@ -363,7 +363,7 @@ void sub_81374C4(void) void sub_81374FC(void) { - if (gMain.callback2 == sub_800F808 + if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active) { Emitcmd35(1, gSpecialVar_ItemId); @@ -1240,8 +1240,8 @@ void WallyHandlePrintString(void) { u16 *ptr; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; ptr = (u16 *)&gBattleBufferA[gActiveBank][2]; if (*ptr == 2) DestroyMenuCursor(); @@ -1262,8 +1262,8 @@ void WallyHandlecmd18(void) { s32 i; - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 160; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 160; gUnknown_03004210.paletteNum = 0; FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index a7646e78b..6a6d7a137 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -13,12 +13,12 @@ extern struct SpriteTemplate gUnknown_02024E8C; extern struct Window gUnknown_03004210; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; -extern u16 gUnknown_030042A4; +extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; extern u16 gUnknown_030041B0; extern u16 gBattle_BG1_Y; extern u16 gUnknown_030041B8; -extern u16 gUnknown_030042A0; +extern u16 gBattle_BG0_Y; extern u8 gReservedSpritePaletteCount; extern u8 gActionSelectionCursor[4]; extern u8 gBankInMenu; @@ -81,8 +81,8 @@ static void CB2_ReshowBattleScreenAfterMenu(void) SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); - gUnknown_030042A4 = 0; - gUnknown_030042A0 = 0; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; gBattle_BG1_X = 0; gBattle_BG1_Y = 0; gBattle_BG2_X = 0; @@ -190,7 +190,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) sub_807B06C(); BeginHardwarePaletteFade(0xFF, 0, 0x10, 0, 1); gPaletteFade.bufferTransferDisabled = 0; - SetMainCallback2(sub_800F808); + SetMainCallback2(BattleMainCB2); break; } gReshowState++; -- cgit v1.2.3 From be36c506387648a11afe51b0f4209386947feb37 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 7 Jan 2018 17:57:46 -0800 Subject: Finish battle_2.c and battle_util.c decompilation --- src/battle/battle_2.c | 16 +- src/battle/battle_3.c | 3229 ------------------------------------------ src/battle/battle_4.c | 258 ++-- src/battle/battle_util.c | 3479 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 3613 insertions(+), 3369 deletions(-) delete mode 100644 src/battle/battle_3.c create mode 100644 src/battle/battle_util.c (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index a30245081..ae84e5585 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -5,6 +5,7 @@ #include "battle_interface.h" #include "battle_message.h" #include "battle_setup.h" +#include "battle_util.h" #include "data2.h" #include "event_data.h" #include "evolution_scene.h" @@ -141,7 +142,7 @@ extern u16 gBattleWeather; extern u32 gBattleMoveDamage; extern struct BattlePokemon gBattleMons[]; extern u8 gBattleMoveFlags; -extern const u8 BattleScript_FocusPunchSetUp[]; +extern u8 BattleScript_FocusPunchSetUp[]; extern u16 gDynamicBasePower; extern u8 gCurrentTurnActionNumber; extern void (* const gUnknown_081FA640[])(void); @@ -175,7 +176,6 @@ extern u8 gUnknown_081FA70C[][3]; extern u8 gUnknown_081FA71B[]; extern u8 gUnknown_081FA71F[]; -void b_call_bc_move_exec(const u8* BS_ptr); static void BattlePrepIntroSlide(void); void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); @@ -2180,7 +2180,7 @@ void BattleBeginFirstTurn(void) SpecialStatusesClear(); ewram160A6 = gAbsentBankFlags; gBattleMainFunc = sub_8012324; - sub_80156DC(); + ResetSentPokesToOpponentValue(); for (i = 0; i < 8; i++) gBattleCommunication[i] = 0; for (i = 0; i < gNoOfAllBanks; i++) @@ -2236,7 +2236,7 @@ void BattleTurnPassed(void) if (HandleFaintedMonActions() != 0) return; ewram16059 = 0; - if (sub_80170DC() != 0) + if (HandleWishPerishSongOnTurnEnd() != 0) return; TurnValuesCleanUp(0); gHitMarker &= ~HITMARKER_NO_ATTACKSTRING; @@ -3154,7 +3154,7 @@ _08012968:\n\ cmp r0, 0x3\n\ bne _080129A8\n\ ldr r0, _080129A0 @ =BattleScript_PrintCantRunFromTrainer\n\ - bl b_call_bc_move_exec\n\ + bl BattleScriptExecute\n\ ldr r1, _080129A4 @ =gBattleCommunication\n\ ldrb r0, [r4]\n\ adds r0, r1\n\ @@ -3318,7 +3318,7 @@ _08012ACC:\n\ _08012AF4: .4byte 0x0000ffff\n\ _08012AF8: .4byte gBattleCommunication\n\ _08012AFC:\n\ - bl sub_8015894\n\ + bl TrySetCantSelectMoveBattleScript\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _08012B48\n\ @@ -4207,13 +4207,13 @@ void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) && !(gDisableStructs[gBankAttacker].truantCounter) && !(gProtectStructs[gActiveBank].onlyStruggle)) { - b_call_bc_move_exec(BattleScript_FocusPunchSetUp); + BattleScriptExecute(BattleScript_FocusPunchSetUp); return; } } } - b_clear_atk_up_if_hit_flag_unless_enraged(); + TryClearRageStatuses(); gCurrentTurnActionNumber = 0; { // something stupid needed to match diff --git a/src/battle/battle_3.c b/src/battle/battle_3.c deleted file mode 100644 index 92e0404cc..000000000 --- a/src/battle/battle_3.c +++ /dev/null @@ -1,3229 +0,0 @@ -#include "global.h" -#include "constants/abilities.h" -#include "battle.h" -#include "constants/moves.h" -#include "item.h" -#include "constants/items.h" -#include "event_data.h" -#include "constants/hold_effects.h" -#include "constants/species.h" -#include "constants/weather.h" -#include "pokemon.h" -#include "data2.h" -#include "random.h" -#include "text.h" -#include "constants/battle_move_effects.h" -#include "string_util.h" -#include "constants/flags.h" -#include "ewram.h" - -extern u8* gBattlescriptCurrInstr; -extern u8 gActiveBank; -extern u8 gBattleBufferB[4][0x200]; -extern u8* gUnknown_02024C1C[4]; //battlescript location when you try to choose a move you're not allowed to -extern u16 gLastUsedMove[4]; -extern struct BattlePokemon gBattleMons[4]; -extern struct BattleEnigmaBerry gEnigmaBerries[4]; -extern u8 gStringBank; -extern u16 gLastUsedItem; -extern u16 gCurrentMove; -extern const u32 gBitTable[]; -extern u16 gBattleTypeFlags; -extern u8 gNoOfAllBanks; -extern u32 gStatuses3[4]; -extern u8 gBankAttacker; -extern u8 gBankTarget; -extern u8 gBanksByTurnOrder[4]; -extern u16 gSideAffecting[2]; -extern u16 gBattleWeather; -extern void (*gBattleMainFunc)(void); -extern u8 gAbsentBankFlags; -extern u8 gBattleCommunication[]; -extern u32 gHitMarker; -extern u8 gEffectBank; -extern u8 gBank1; -extern s32 gBattleMoveDamage; -extern u16 gBattlePartyID[4]; -extern u16 gChosenMovesByBanks[4]; -extern s32 gTakenDmg[4]; -extern u8 gTakenDmgBanks[4]; -extern u8 gBattleMoveFlags; -extern u8 gLastUsedAbility; -extern u8 gBattleTextBuff2[]; -extern u8 gCurrentActionFuncId; -extern struct BattleEnigmaBerry gEnigmaBerries[4]; -extern u8 gUnknown_02024BE5; -extern u8 gCurrMovePos; -extern u16 gRandomMove; -extern s32 gBattleMoveDamage; -extern u16 gDynamicBasePower; -extern u32 gBattleExecBuffer; -extern const u16 gSoundMovesTable[]; -extern const u8 gStatusConditionString_PoisonJpn[]; -extern const u8 gStatusConditionString_SleepJpn[]; -extern const u8 gStatusConditionString_ParalysisJpn[]; -extern const u8 gStatusConditionString_BurnJpn[]; -extern const u8 gStatusConditionString_IceJpn[]; -extern const u8 gStatusConditionString_ConfusionJpn[]; -extern const u8 gStatusConditionString_LoveJpn[]; -extern const BattleCmdFunc gBattleScriptingCommandsTable[]; - -u8 IsImprisoned(u8 bank, u16 move); -u8 GetBankByIdentity(u8 ID); -u8 GetBankIdentity(u8 bank); -u8 GetBankSide(u8 bank); -void b_call_bc_move_exec(u8* BS_ptr); -bool8 sub_8015660(u8 bank); //check if a move failed -void SetMoveEffect(bool8 primary, u8 certainArg); -bool8 UproarWakeUpCheck(u8 bank); -bool8 sub_8018018(u8 bank, u8, u8); -void sub_8015740(u8 bank); -s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def); -u8 CountTrailingZeroBits(u32 a); -u8 GetMoveTarget(u16 move, u8 useMoveTarget); -u8 sub_803FC34(u8 bank); -u16 sub_803FBFC(u8 a); -u8 weather_get_current(void); -void b_push_move_exec(u8* BS_ptr); -void RecordAbilityBattle(u8 bank, u8 ability); -void RecordItemBattle(u8 bank, u8 holdEffect); -s8 GetPokeFlavourRelation(u32 pid, u8 flavor); - -extern u8 BattleScript_MoveSelectionDisabledMove[]; -extern u8 BattleScript_MoveSelectionTormented[]; -extern u8 BattleScript_MoveSelectionTaunted[]; -extern u8 BattleScript_MoveSelectionImprisoned[]; -extern u8 BattleScript_MoveSelectionChoiceBanded[]; -extern u8 BattleScript_MoveSelectionNoPP[]; -extern u8 BattleScript_NoMovesLeft[]; -extern u8 BattleScript_WishComesTrue[]; -extern u8 BattleScript_IngrainTurnHeal[]; -extern u8 BattleScript_LeechSeedTurnDrain[]; -extern u8 BattleScript_PoisonTurnDmg[]; -extern u8 BattleScript_BurnTurnDmg[]; -extern u8 BattleScript_NightmareTurnDmg[]; -extern u8 BattleScript_CurseTurnDmg[]; -extern u8 BattleScript_WrapTurnDmg[]; -extern u8 BattleScript_WrapEnds[]; -extern u8 BattleScript_DisabledNoMore[]; -extern u8 BattleScript_EncoredNoMore[]; - -extern u8 BattleScript_SideStatusWoreOff[]; -extern u8 BattleScript_RainContinuesOrEnds[]; -extern u8 BattleScript_SandStormHailEnds[]; -extern u8 BattleScript_DamagingWeatherContinues[]; -extern u8 BattleScript_SunlightFaded[]; -extern u8 BattleScript_SunlightContinues[]; -extern u8 BattleScript_SafeguardEnds[]; -extern u8 BattleScript_MonWokeUpInUproar[]; //uproar wakeup BS -extern u8 BattleScript_PrintUproarOverTurns[]; //uproar BS -extern u8 BattleScript_ThrashConfuses[]; -extern u8 BattleScript_YawnMakesAsleep[]; -extern u8 BattleScript_MonTookFutureAttack[]; -extern u8 BattleScript_PerishSongHits[]; -extern u8 BattleScript_PerishSongTimerGoesDown[]; -extern u8 BattleScript_GiveExp[]; -extern u8 BattleScript_HandleFaintedMon[]; - -extern u8 BattleScript_MoveUsedIsAsleep[]; -extern u8 BattleScript_MoveUsedWokeUp[]; -extern u8 BattleScript_MoveUsedIsFrozen[]; -extern u8 BattleScript_MoveUsedUnfroze[]; -extern u8 BattleScript_MoveUsedLoafingAround[]; -extern u8 BattleScript_MoveUsedMustRecharge[]; -extern u8 BattleScript_MoveUsedFlinched[]; -extern u8 BattleScript_MoveUsedIsDisabled[]; -extern u8 BattleScript_MoveUsedIsTaunted[]; -extern u8 BattleScript_MoveUsedIsImprisoned[]; -extern u8 BattleScript_MoveUsedIsConfused[]; -extern u8 BattleScript_MoveUsedIsConfusedNoMore[]; -extern u8 BattleScript_MoveUsedIsParalyzed[]; -extern u8 BattleScript_MoveUsedIsParalyzedCantAttack[]; -extern u8 BattleScript_MoveUsedIsInLove[]; -extern u8 BattleScript_BideStoringEnergy[]; -extern u8 BattleScript_BideAttack[]; -extern u8 BattleScript_BideNoEnergyToAttack[]; - -extern u8 BattleScript_OverworldWeatherStarts[]; //load weather from overworld -extern u8 BattleScript_DrizzleActivates[]; -extern u8 BattleScript_SandstreamActivates[]; -extern u8 BattleScript_DroughtActivates[]; -extern u8 BattleScript_CastformChange[]; -extern u8 BattleScript_RainDishActivates[]; -extern u8 BattleScript_ShedSkinActivates[]; -extern u8 BattleScript_SpeedBoostActivates[]; -extern u8 BattleScript_SoundproofProtected[]; -extern u8 BattleScript_MoveHPDrain[]; -extern u8 BattleScript_MoveHPDrain_PPLoss[]; -extern u8 BattleScript_FlashFireBoost[]; -extern u8 BattleScript_FlashFireBoost_PPLoss[]; -extern u8 BattleScript_MoveHPDrain_FullHP[]; -extern u8 BattleScript_MoveHPDrain_FullHP_PPLoss[]; -extern u8 BattleScript_ColorChangeActivates[]; -extern u8 BattleScript_RoughSkinActivates[]; -extern u8 BattleScript_ApplySecondaryEffect[]; -extern u8 BattleScript_CuteCharmActivates[]; -extern u8 BattleScript_AbilityCuredStatus[]; //ability status clear -extern u8 BattleScript_SynchronizeActivates[]; -extern u8 gUnknown_081D978C[]; //intimidate1 -extern u8 gUnknown_081D9795[]; //intimidate2 -extern u8 BattleScript_TraceActivates[]; - -extern u8 BattleScript_WhiteHerbEnd2[]; -extern u8 BattleScript_WhiteHerbRet[]; -extern u8 BattleScript_ItemHealHP_RemoveItem[]; -extern u8 BattleScript_BerryPPHealEnd2[]; -extern u8 BattleScript_ItemHealHP_End2[]; -extern u8 BattleScript_BerryConfuseHealEnd2[]; -extern u8 BattleScript_BerryStatRaiseEnd2[]; -extern u8 BattleScript_BerryFocusEnergyEnd2[]; -extern u8 BattleScript_BerryCurePrlzEnd2[]; -extern u8 BattleScript_BerryCurePsnEnd2[]; -extern u8 BattleScript_BerryCureBrnEnd2[]; -extern u8 BattleScript_BerryCureFrzEnd2[]; -extern u8 BattleScript_BerryCureSlpEnd2[]; -extern u8 BattleScript_BerryCureConfusionEnd2[]; -extern u8 BattleScript_BerryCureChosenStatusEnd2[]; //berry cure any status end2 -extern u8 BattleScript_BerryCureParRet[]; -extern u8 BattleScript_BerryCurePsnRet[]; -extern u8 BattleScript_BerryCureBrnRet[]; -extern u8 BattleScript_BerryCureFrzRet[]; -extern u8 BattleScript_BerryCureSlpRet[]; -extern u8 BattleScript_BerryCureConfusionRet[]; -extern u8 BattleScript_BerryCureChosenStatusRet[]; //berry cure any status return - -extern u8 BattleScript_ItemHealHP_Ret[]; - -extern u8 gUnknown_081D995F[]; //disobedient while asleep -extern u8 BattleScript_IgnoresAndUsesRandomMove[]; //disobedient, uses a random move -extern u8 BattleScript_IgnoresAndFallsAsleep[]; //disobedient, went to sleep -extern u8 gUnknown_081D99A0[]; //disobedient, hits itself - -//array entries for battle communication -#define MOVE_EFFECT_BYTE 0x3 -#define MULTISTRING_CHOOSER 0x5 -#define MSG_DISPLAY 0x7 - -void b_movescr_stack_push(u8* BS_ptr) -{ - B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = BS_ptr; -} - -void b_movescr_stack_push_cursor(void) -{ - B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = gBattlescriptCurrInstr; -} - -void b_movescr_stack_pop_cursor(void) -{ - gBattlescriptCurrInstr = B_BATTLESCRIPTS_STACK->ptr[--B_BATTLESCRIPTS_STACK->size]; -} - -u8 sub_8015894(void) //msg can't select a move -{ - u8 limitations = 0; - u16 move = gBattleMons[gActiveBank].moves[gBattleBufferB[gActiveBank][2]]; - u8 holdEffect; - u16* choicedMove = CHOICED_MOVE(gActiveBank); - if (gDisableStructs[gActiveBank].disabledMove == move && move) - { - BATTLE_STRUCT->scriptingActive = gActiveBank; - gCurrentMove = move; - gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionDisabledMove; - limitations++; - } - if (move == gLastUsedMove[gActiveBank] && move != MOVE_STRUGGLE && gBattleMons[gActiveBank].status2 & STATUS2_TORMENT) - { - CancelMultiTurnMoves(gActiveBank); - gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionTormented; - limitations++; - } - if (gDisableStructs[gActiveBank].tauntTimer1 && gBattleMoves[move].power == 0) - { - gCurrentMove = move; - gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionTaunted; - limitations++; - } - if (IsImprisoned(gActiveBank, move)) - { - gCurrentMove = move; - gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionImprisoned; - limitations++; - } - if (gBattleMons[gActiveBank].item == ITEM_ENIGMA_BERRY) - holdEffect = gEnigmaBerries[gActiveBank].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBank].item); - gStringBank = gActiveBank; - if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != move) - { - gCurrentMove = *choicedMove; - gLastUsedItem = gBattleMons[gActiveBank].item; - gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionChoiceBanded; - limitations++; - } - if (gBattleMons[gActiveBank].pp[gBattleBufferB[gActiveBank][2]] == 0) - { - gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionNoPP; - limitations++; - } - return limitations; -} - -#define MOVE_LIMITATION_ZEROMOVE (1 << 0) -#define MOVE_LIMITATION_PP (1 << 1) -#define MOVE_LIMITATION_DISABLED (1 << 2) -#define MOVE_LIMITATION_TORMENTED (1 << 3) -#define MOVE_LIMITATION_TAUNT (1 << 4) -#define MOVE_LIMITATION_IMPRISION (1 << 5) - -u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check) -{ - u8 holdEffect; - u16* choicedMove = CHOICED_MOVE(bank); - s32 i; - if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY) - holdEffect = gEnigmaBerries[bank].holdEffect; - else - holdEffect = ItemId_GetHoldEffect(gBattleMons[bank].item); - gStringBank = bank; - for (i = 0; i < 4; i++) - { - if (gBattleMons[bank].moves[i] == 0 && check & MOVE_LIMITATION_ZEROMOVE) - unusableMoves |= gBitTable[i]; - if (gBattleMons[bank].pp[i] == 0 && check & MOVE_LIMITATION_PP) - unusableMoves |= gBitTable[i]; - if (gBattleMons[bank].moves[i] == gDisableStructs[bank].disabledMove && check & MOVE_LIMITATION_DISABLED) - unusableMoves |= gBitTable[i]; - if (gBattleMons[bank].moves[i] == gLastUsedMove[bank] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[bank].status2 & STATUS2_TORMENT) - unusableMoves |= gBitTable[i]; - if (gDisableStructs[bank].tauntTimer1 && check & MOVE_LIMITATION_TAUNT && gBattleMoves[gBattleMons[bank].moves[i]].power == 0) - unusableMoves |= gBitTable[i]; - if (IsImprisoned(bank, gBattleMons[bank].moves[i]) && check & MOVE_LIMITATION_IMPRISION) - unusableMoves |= gBitTable[i]; - if (gDisableStructs[bank].encoreTimer1 && gDisableStructs[bank].encoredMove != gBattleMons[bank].moves[i]) - unusableMoves |= gBitTable[i]; - if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != gBattleMons[bank].moves[i]) - unusableMoves |= gBitTable[i]; - } - return unusableMoves; -} - -bool8 AreAllMovesUnusable(void) -{ - u8 unusable; - unusable = CheckMoveLimitations(gActiveBank, 0, 0xFF); - if (unusable == 0xF) //all moves are unusable - { - gProtectStructs[gActiveBank].onlyStruggle = 1; - gUnknown_02024C1C[gActiveBank] = BattleScript_NoMovesLeft; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - gBattleBufferB[gActiveBank][3] = GetBankByIdentity((GetBankIdentity(gActiveBank) ^ 1) | (Random() & 2)); - else - gBattleBufferB[gActiveBank][3] = GetBankByIdentity(GetBankIdentity(gActiveBank) ^ 1); - } - else - gProtectStructs[gActiveBank].onlyStruggle = 0; - return (unusable == 0xF); -} - -u8 IsImprisoned(u8 bank, u16 move) -{ - u8 imprisionedMoves = 0; - u8 bankSide = GetBankSide(bank); - s32 i; - for (i = 0; i < gNoOfAllBanks; i++) - { - if (bankSide != GetBankSide(i) && gStatuses3[i] & STATUS3_IMPRISIONED) - { - s32 j; - for (j = 0; j < 4; j++) - { - if (move == gBattleMons[i].moves[j]) - break; - } - if (j < 4) - imprisionedMoves++; - } - } - return imprisionedMoves; -} - -u8 UpdateTurnCounters(void) -{ - u8 effect = 0; - s32 i; - - for (gBankAttacker = 0; gBankAttacker < gNoOfAllBanks && gAbsentBankFlags & gBitTable[gBankAttacker]; gBankAttacker++) - { - } - for (gBankTarget = 0; gBankTarget < gNoOfAllBanks && gAbsentBankFlags & gBitTable[gBankTarget]; gBankTarget++) - { - } - - do - { - u8 sideBank; - - switch (BATTLE_STRUCT->turncountersTracker) - { - case 0: - for (i = 0; i < gNoOfAllBanks; i++) - { - gBanksByTurnOrder[i] = i; - } - for (i = 0; i < gNoOfAllBanks - 1; i++) - { - s32 j; - for (j = i + 1; j < gNoOfAllBanks; j++) - { - if (GetWhoStrikesFirst(gBanksByTurnOrder[i], gBanksByTurnOrder[j], 0)) - SwapTurnOrder(i, j); - } - } - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; - case 1: - while (BATTLE_STRUCT->turnSideTracker < 2) - { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; - - if (gSideAffecting[sideBank] & SIDE_STATUS_REFLECT) - { - if (--gSideTimers[sideBank].reflectTimer == 0) - { - - gSideAffecting[sideBank] &= ~SIDE_STATUS_REFLECT; - b_call_bc_move_exec(BattleScript_SideStatusWoreOff); - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = MOVE_REFLECT; - gBattleTextBuff1[3] = MOVE_REFLECT >> 8; - gBattleTextBuff1[4] = EOS; - effect++; - } - } - BATTLE_STRUCT->turnSideTracker++; - if (effect) - break; - } - if (!effect) - { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; - } - break; - case 2: - while (BATTLE_STRUCT->turnSideTracker < 2) - { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; - if (gSideAffecting[sideBank] & SIDE_STATUS_LIGHTSCREEN) - { - if (--gSideTimers[sideBank].lightscreenTimer == 0) - { - gSideAffecting[sideBank] &= ~SIDE_STATUS_LIGHTSCREEN; - b_call_bc_move_exec(BattleScript_SideStatusWoreOff); - gBattleCommunication[MULTISTRING_CHOOSER] = sideBank; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = MOVE_LIGHT_SCREEN; - gBattleTextBuff1[3] = MOVE_LIGHT_SCREEN >> 8; - gBattleTextBuff1[4] = EOS; - effect++; - } - } - BATTLE_STRUCT->turnSideTracker++; - if (effect) - break; - } - if (!effect) - { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; - } - break; - case 3: - while (BATTLE_STRUCT->turnSideTracker < 2) - { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; - if (gSideTimers[sideBank].mistTimer && --gSideTimers[sideBank].mistTimer == 0) - { - gSideAffecting[sideBank] &= ~SIDE_STATUS_MIST; - b_call_bc_move_exec(BattleScript_SideStatusWoreOff); - gBattleCommunication[MULTISTRING_CHOOSER] = sideBank; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = MOVE_MIST; - gBattleTextBuff1[3] = MOVE_MIST >> 8; - gBattleTextBuff1[4] = EOS; - effect++; - } - BATTLE_STRUCT->turnSideTracker++; - if (effect) - break; - } - if (!effect) - { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; - } - break; - case 4: - while (BATTLE_STRUCT->turnSideTracker < 2) - { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; - if (gSideAffecting[sideBank] & SIDE_STATUS_SAFEGUARD) - { - if (--gSideTimers[sideBank].safeguardTimer == 0) - { - gSideAffecting[sideBank] &= ~SIDE_STATUS_SAFEGUARD; - b_call_bc_move_exec(BattleScript_SafeguardEnds); - effect++; - } - } - BATTLE_STRUCT->turnSideTracker++; - if (effect) - break; - } - if (!effect) - { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; - } - break; - case 5: - while (BATTLE_STRUCT->turnSideTracker < gNoOfAllBanks) - { - gActiveBank = gBanksByTurnOrder[BATTLE_STRUCT->turnSideTracker]; - if (gWishFutureKnock.wishCounter[gActiveBank] && --gWishFutureKnock.wishCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) - { - gBankTarget = gActiveBank; - b_call_bc_move_exec(BattleScript_WishComesTrue); - effect++; - } - BATTLE_STRUCT->turnSideTracker++; - if (effect) - break; - } - if (!effect) - { - BATTLE_STRUCT->turncountersTracker++; - } - break; - case 6: - if (gBattleWeather & WEATHER_RAIN_ANY) - { - if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) - { - if (--gWishFutureKnock.weatherDuration == 0) - { - gBattleWeather &= ~WEATHER_RAIN_TEMPORARY; - gBattleWeather &= ~WEATHER_RAIN_DOWNPOUR; - gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } - else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR) - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR) - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - b_call_bc_move_exec(BattleScript_RainContinuesOrEnds); - effect++; - } - BATTLE_STRUCT->turncountersTracker++; - break; - case 7: - if (gBattleWeather & WEATHER_SANDSTORM_ANY) - { - if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) - { - gBattleWeather &= ~WEATHER_SANDSTORM_TEMPORARY; - gBattlescriptCurrInstr = BattleScript_SandStormHailEnds; - } - else - gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; - - BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - b_call_bc_move_exec(gBattlescriptCurrInstr); - effect++; - } - BATTLE_STRUCT->turncountersTracker++; - break; - case 8: - if (gBattleWeather & WEATHER_SUN_ANY) - { - if (!(gBattleWeather & WEATHER_SUN_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) - { - gBattleWeather &= ~WEATHER_SUN_TEMPORARY; - gBattlescriptCurrInstr = BattleScript_SunlightFaded; - } - else - gBattlescriptCurrInstr = BattleScript_SunlightContinues; - - b_call_bc_move_exec(gBattlescriptCurrInstr); - effect++; - } - BATTLE_STRUCT->turncountersTracker++; - break; - case 9: - if (gBattleWeather & WEATHER_HAIL) - { - if (--gWishFutureKnock.weatherDuration == 0) - { - gBattleWeather &= ~WEATHER_HAIL; - gBattlescriptCurrInstr = BattleScript_SandStormHailEnds; - } - else - gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; - - BATTLE_STRUCT->animArg1 = B_ANIM_HAIL_CONTINUES; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - b_call_bc_move_exec(gBattlescriptCurrInstr); - effect++; - } - BATTLE_STRUCT->turncountersTracker++; - break; - case 10: - effect++; - break; - } - } while (effect == 0); - return (gBattleMainFunc != BattleTurnPassed); -} - -#define TURNBASED_MAX_CASE 19 - -u8 TurnBasedEffects(void) -{ - u8 effect = 0; - - gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); - while (BATTLE_STRUCT->turnEffectsBank < gNoOfAllBanks && BATTLE_STRUCT->turnEffectsTracker <= TURNBASED_MAX_CASE) - { - gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->turnEffectsBank]; - if (gAbsentBankFlags & gBitTable[gActiveBank]) - { - BATTLE_STRUCT->turnEffectsBank++; - } - else - { - switch (BATTLE_STRUCT->turnEffectsTracker) - { - case 0: // ingrain - if ((gStatuses3[gActiveBank] & STATUS3_ROOTED) - && gBattleMons[gActiveBank].hp != gBattleMons[gActiveBank].maxHP - && gBattleMons[gActiveBank].hp != 0) - { - gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - b_call_bc_move_exec(BattleScript_IngrainTurnHeal); - effect++; - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 1: // end turn abilities - if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBank, 0, 0, 0)) - effect++; - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 2: // item effects - if (ItemBattleEffects(1, gActiveBank, 0)) - effect++; - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 18: // item effects again - if (ItemBattleEffects(1, gActiveBank, 1)) - effect++; - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 3: // leech seed - if (gStatuses3[gActiveBank] & STATUS3_LEECHSEED && gBattleMons[gStatuses3[gActiveBank] & STATUS3_LEECHSEED_BANK].hp != 0 && gBattleMons[gActiveBank].hp != 0) - { - gBankTarget = gStatuses3[gActiveBank] & STATUS3_LEECHSEED_BANK; //funny how the 'target' is actually the bank that receives HP - gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - BATTLE_STRUCT->animArg1 = gBankTarget; - BATTLE_STRUCT->animArg2 = gBankAttacker; - b_call_bc_move_exec(BattleScript_LeechSeedTurnDrain); - effect++; - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 4: // poison - if ((gBattleMons[gActiveBank].status1 & STATUS_POISON) && gBattleMons[gActiveBank].hp != 0) - { - gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - b_call_bc_move_exec(BattleScript_PoisonTurnDmg); - effect++; - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 5: // toxic poison - if ((gBattleMons[gActiveBank].status1 & STATUS_TOXIC_POISON) && gBattleMons[gActiveBank].hp != 0) - { - gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if ((gBattleMons[gActiveBank].status1 & 0xF00) != 0xF00) //not 16 turns - gBattleMons[gActiveBank].status1 += 0x100; - gBattleMoveDamage *= (gBattleMons[gActiveBank].status1 & 0xF00) >> 8; - b_call_bc_move_exec(BattleScript_PoisonTurnDmg); - effect++; - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 6: // burn - if ((gBattleMons[gActiveBank].status1 & STATUS_BURN) && gBattleMons[gActiveBank].hp != 0) - { - gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - b_call_bc_move_exec(BattleScript_BurnTurnDmg); - effect++; - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 7: // spooky nightmares - if ((gBattleMons[gActiveBank].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBank].hp != 0) - { - // missing sleep check - gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 4; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - b_call_bc_move_exec(BattleScript_NightmareTurnDmg); - effect++; - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 8: // curse - if ((gBattleMons[gActiveBank].status2 & STATUS2_CURSED) && gBattleMons[gActiveBank].hp != 0) - { - gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 4; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - b_call_bc_move_exec(BattleScript_CurseTurnDmg); - effect++; - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 9: // wrap - if ((gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBank].hp != 0) - { - gBattleMons[gActiveBank].status2 -= 0x2000; - if (gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) // damaged by wrap - { - BATTLE_STRUCT->animArg1 = ewram16004arr(0, gActiveBank); - BATTLE_STRUCT->animArg2 = ewram16004arr(1, gActiveBank); - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = ewram16004arr(0, gActiveBank); - gBattleTextBuff1[3] = ewram16004arr(1, gActiveBank); - gBattleTextBuff1[4] = EOS; - gBattlescriptCurrInstr = BattleScript_WrapTurnDmg; - gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - } - else // broke free - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = ewram16004arr(0, gActiveBank); - gBattleTextBuff1[3] = ewram16004arr(1, gActiveBank); - gBattleTextBuff1[4] = EOS; - gBattlescriptCurrInstr = BattleScript_WrapEnds; - } - b_call_bc_move_exec(gBattlescriptCurrInstr); - effect++; - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 10: // uproar - if (gBattleMons[gActiveBank].status2 & STATUS2_UPROAR) - { - for (gBankAttacker = 0; gBankAttacker < gNoOfAllBanks; gBankAttacker++) - { - if ((gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) - && gBattleMons[gBankAttacker].ability != ABILITY_SOUNDPROOF) - { - gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP); - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE); - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - b_call_bc_move_exec(BattleScript_MonWokeUpInUproar); - gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); - MarkBufferBankForExecution(gActiveBank); - break; - } - } - if (gBankAttacker != gNoOfAllBanks) - { - effect = 2; // a pokemon was awaken - break; - } - else - { - gBankAttacker = gActiveBank; - gBattleMons[gActiveBank].status2 -= 0x10; // uproar timer goes down - if (sub_8015660(gActiveBank)) - { - CancelMultiTurnMoves(gActiveBank); - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - else if (gBattleMons[gActiveBank].status2 & STATUS2_UPROAR) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gBattleMons[gActiveBank].status2 |= STATUS2_MULTIPLETURNS; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - CancelMultiTurnMoves(gActiveBank); - } - b_call_bc_move_exec(BattleScript_PrintUproarOverTurns); - effect = 1; - } - } - if (effect != 2) - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 11: // thrash - if (gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE) - { - gBattleMons[gActiveBank].status2 -= 0x400; - if (sub_8015660(gActiveBank)) - CancelMultiTurnMoves(gActiveBank); - else if (!(gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE) - && (gBattleMons[gActiveBank].status2 & STATUS2_MULTIPLETURNS)) - { - gBattleMons[gActiveBank].status2 &= ~(STATUS2_MULTIPLETURNS); - if (!(gBattleMons[gActiveBank].status2 & STATUS2_CONFUSION)) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x47; - SetMoveEffect(1, 0); - if (gBattleMons[gActiveBank].status2 & STATUS2_CONFUSION) - b_call_bc_move_exec(BattleScript_ThrashConfuses); - effect++; - } - } - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 12: // disable - if (gDisableStructs[gActiveBank].disableTimer1 != 0) - { - int i; - for (i = 0; i < 4; i++) - { - if (gDisableStructs[gActiveBank].disabledMove == gBattleMons[gActiveBank].moves[i]) - break; - } - if (i == 4) // pokemon does not have the disabled move anymore - { - gDisableStructs[gActiveBank].disabledMove = 0; - gDisableStructs[gActiveBank].disableTimer1 = 0; - } - else if (--gDisableStructs[gActiveBank].disableTimer1 == 0) // disable ends - { - gDisableStructs[gActiveBank].disabledMove = 0; - b_call_bc_move_exec(BattleScript_DisabledNoMore); - effect++; - } - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 13: // encore - if (gDisableStructs[gActiveBank].encoreTimer1 != 0) - { - if (gBattleMons[gActiveBank].moves[gDisableStructs[gActiveBank].encoredMovePos] != gDisableStructs[gActiveBank].encoredMove) // pokemon does not have the encored move anymore - { - gDisableStructs[gActiveBank].encoredMove = 0; - gDisableStructs[gActiveBank].encoreTimer1 = 0; - } - else if (--gDisableStructs[gActiveBank].encoreTimer1 == 0 - || gBattleMons[gActiveBank].pp[gDisableStructs[gActiveBank].encoredMovePos] == 0) - { - gDisableStructs[gActiveBank].encoredMove = 0; - gDisableStructs[gActiveBank].encoreTimer1 = 0; - b_call_bc_move_exec(BattleScript_EncoredNoMore); - effect++; - } - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 14: // lock-on decrement - if (gStatuses3[gActiveBank] & STATUS3_ALWAYS_HITS) - gStatuses3[gActiveBank] -= 0x8; - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 15: // charge - if (gDisableStructs[gActiveBank].chargeTimer1 && --gDisableStructs[gActiveBank].chargeTimer1 == 0) - gStatuses3[gActiveBank] &= ~STATUS3_CHARGED_UP; - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 16: // taunt - if (gDisableStructs[gActiveBank].tauntTimer1) - gDisableStructs[gActiveBank].tauntTimer1--; - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 17: // yawn - if (gStatuses3[gActiveBank] & STATUS3_YAWN) - { - gStatuses3[gActiveBank] -= 0x800; - if (!(gStatuses3[gActiveBank] & STATUS3_YAWN) && !(gBattleMons[gActiveBank].status1 & STATUS_ANY) - && gBattleMons[gActiveBank].ability != ABILITY_VITAL_SPIRIT - && gBattleMons[gActiveBank].ability != ABILITY_INSOMNIA && !UproarWakeUpCheck(gActiveBank)) - { - CancelMultiTurnMoves(gActiveBank); - gBattleMons[gActiveBank].status1 |= (Random() & 3) + 2; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); - MarkBufferBankForExecution(gActiveBank); - gEffectBank = gActiveBank; - b_call_bc_move_exec(BattleScript_YawnMakesAsleep); - effect++; - } - } - BATTLE_STRUCT->turnEffectsTracker++; - break; - case 19: // done - BATTLE_STRUCT->turnEffectsTracker = 0; - BATTLE_STRUCT->turnEffectsBank++; - break; - } - if (effect != 0) - return effect; - } - } - gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20); - return 0; -} - -bool8 sub_80170DC(void) // handle future sight and perish song -{ - gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); - switch (BATTLE_STRUCT->sub80170DC_Tracker) - { - case 0: // future sight - while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) - { - gActiveBank = BATTLE_STRUCT->sub80170DC_Bank; - if (gAbsentBankFlags & gBitTable[gActiveBank]) - BATTLE_STRUCT->sub80170DC_Bank++; - else - { - BATTLE_STRUCT->sub80170DC_Bank++; - if (gWishFutureKnock.futureSightCounter[gActiveBank] && --gWishFutureKnock.futureSightCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) - { - if (gWishFutureKnock.futureSightMove[gActiveBank] == MOVE_FUTURE_SIGHT) - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - else //Doom Desire - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = gWishFutureKnock.futureSightMove[gActiveBank]; - gBattleTextBuff1[3] = gWishFutureKnock.futureSightMove[gActiveBank] >> 8; - gBattleTextBuff1[4] = 0xFF; - gBankTarget = gActiveBank; - gBankAttacker = gWishFutureKnock.futureSightAttacker[gActiveBank]; - gBattleMoveDamage = gWishFutureKnock.futureSightDmg[gActiveBank]; - gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF; - b_call_bc_move_exec(BattleScript_MonTookFutureAttack); - return 1; - } - } - } - BATTLE_STRUCT->sub80170DC_Tracker = 1; - BATTLE_STRUCT->sub80170DC_Bank = 0; - case 1: // perish song - while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) - { - gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->sub80170DC_Bank]; - if (gAbsentBankFlags & gBitTable[gActiveBank]) - BATTLE_STRUCT->sub80170DC_Bank++; - else - { - BATTLE_STRUCT->sub80170DC_Bank++; - if (gStatuses3[gActiveBank] & STATUS3_PERISH_SONG) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 1; - gBattleTextBuff1[2] = 1; - gBattleTextBuff1[3] = 1; - gBattleTextBuff1[4] = gDisableStructs[gActiveBank].perishSong1; - gBattleTextBuff1[5] = 0xFF; - if (gDisableStructs[gActiveBank].perishSong1 == 0) - { - gStatuses3[gActiveBank] &= ~(STATUS3_PERISH_SONG); - gBattleMoveDamage = gBattleMons[gActiveBank].hp; - gBattlescriptCurrInstr = BattleScript_PerishSongHits; - } - else - { - gDisableStructs[gActiveBank].perishSong1--; - gBattlescriptCurrInstr = BattleScript_PerishSongTimerGoesDown; - } - b_call_bc_move_exec(gBattlescriptCurrInstr); - return 1; - } - } - } - break; - } - gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20); - return 0; -} - -#define HandleFaintedMonActions_MAX_CASE 7 - -bool8 HandleFaintedMonActions(void) -{ - if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) - return 0; - do - { - int i; - switch (BATTLE_STRUCT->sub80173A4_Tracker) - { - case 0: - BATTLE_STRUCT->unk1605A = 0; - BATTLE_STRUCT->sub80173A4_Tracker++; - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gAbsentBankFlags & gBitTable[i] && !sub_8018018(i, 6, 6)) - gAbsentBankFlags &= ~(gBitTable[i]); - } - case 1: - do - { - gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; - if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(BATTLE_STRUCT->unk16113 & gBitTable[gBattlePartyID[BATTLE_STRUCT->unk1605A]]) && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A])) - { - b_call_bc_move_exec(BattleScript_GiveExp); - BATTLE_STRUCT->sub80173A4_Tracker = 2; - return 1; - } - } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks); - BATTLE_STRUCT->sub80173A4_Tracker = 3; - break; - case 2: - sub_8015740(gBank1); - if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks) - BATTLE_STRUCT->sub80173A4_Tracker = 3; - else - BATTLE_STRUCT->sub80173A4_Tracker = 1; - break; - case 3: - BATTLE_STRUCT->unk1605A = 0; - BATTLE_STRUCT->sub80173A4_Tracker++; - case 4: - do - { - gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; //or should banks be switched? - if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A])) - { - b_call_bc_move_exec(BattleScript_HandleFaintedMon); - BATTLE_STRUCT->sub80173A4_Tracker = 5; - return 1; - } - } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks); - BATTLE_STRUCT->sub80173A4_Tracker = 6; - break; - case 5: - if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks) - BATTLE_STRUCT->sub80173A4_Tracker = 6; - else - BATTLE_STRUCT->sub80173A4_Tracker = 4; - break; - case 6: - if (AbilityBattleEffects(9, 0, 0, 0, 0) || AbilityBattleEffects(0xB, 0, 0, 0, 0) || ItemBattleEffects(1, 0, 1) || AbilityBattleEffects(6, 0, 0, 0, 0)) - return 1; - BATTLE_STRUCT->sub80173A4_Tracker++; - break; - case 7: - break; - } - } while (BATTLE_STRUCT->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE); - return 0; -} - -void b_clear_atk_up_if_hit_flag_unless_enraged(void) -{ - int i; - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleMons[i].status2 & STATUS2_RAGE && gChosenMovesByBanks[i] != MOVE_RAGE) - gBattleMons[i].status2 &= ~(STATUS2_RAGE); - } -} - -#define ATKCANCELLER_MAX_CASE 14 - -u8 AtkCanceller_UnableToUseMove(void) -{ - u8 effect = 0; - s32* bideDmg = &BATTLE_STRUCT->bideDmg; - do - { - switch (BATTLE_STRUCT->atkCancellerTracker) - { - case 0: // flags clear - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_DESTINY_BOND); - gStatuses3[gBankAttacker] &= ~(STATUS3_GRUDGE); - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 1: // check being asleep - if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) - { - if (UproarWakeUpCheck(gBankAttacker)) - { - gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP); - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE); - b_movescr_stack_push_cursor(); - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; - effect = 2; - } - else - { - u8 toSub; - if (gBattleMons[gBankAttacker].ability == ABILITY_EARLY_BIRD) - toSub = 2; - else - toSub = 1; - if ((gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) < toSub) - gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP); - else - gBattleMons[gBankAttacker].status1 -= toSub; - if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) - { - if (gCurrentMove != MOVE_SNORE && gCurrentMove != MOVE_SLEEP_TALK) - { - gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - effect = 2; - } - } - else - { - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE); - b_movescr_stack_push_cursor(); - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; - effect = 2; - } - } - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 2: // check being frozen - if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE) - { - if (Random() % 5) - { - if (gBattleMoves[gCurrentMove].effect != EFFECT_THAW_HIT) // unfreezing via a move effect happens in case 13 - { - gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen; - gHitMarker |= HITMARKER_NO_ATTACKSTRING; - } - else - { - BATTLE_STRUCT->atkCancellerTracker++; - break; - } - } - else // unfreeze - { - gBattleMons[gBankAttacker].status1 &= ~(STATUS_FREEZE); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - } - effect = 2; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 3: // truant - if (gBattleMons[gBankAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBankAttacker].truantCounter) - { - CancelMultiTurnMoves(gBankAttacker); - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; - gBattleMoveFlags |= MOVESTATUS_MISSED; - effect = 1; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 4: // recharge - if (gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE) - { - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_RECHARGE); - gDisableStructs[gBankAttacker].rechargeCounter = 0; - CancelMultiTurnMoves(gBankAttacker); - gBattlescriptCurrInstr = BattleScript_MoveUsedMustRecharge; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - effect = 1; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 5: // flinch - if (gBattleMons[gBankAttacker].status2 & STATUS2_FLINCHED) - { - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_FLINCHED); - gProtectStructs[gBankAttacker].flinchImmobility = 1; - CancelMultiTurnMoves(gBankAttacker); - gBattlescriptCurrInstr = BattleScript_MoveUsedFlinched; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - effect = 1; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 6: // disabled move - if (gDisableStructs[gBankAttacker].disabledMove == gCurrentMove && gDisableStructs[gBankAttacker].disabledMove != 0) - { - gProtectStructs[gBankAttacker].usedDisabledMove = 1; - BATTLE_STRUCT->scriptingActive = gBankAttacker; - CancelMultiTurnMoves(gBankAttacker); - gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - effect = 1; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 7: // taunt - if (gDisableStructs[gBankAttacker].tauntTimer1 && gBattleMoves[gCurrentMove].power == 0) - { - gProtectStructs[gBankAttacker].usedTauntedMove = 1; - CancelMultiTurnMoves(gBankAttacker); - gBattlescriptCurrInstr = BattleScript_MoveUsedIsTaunted; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - effect = 1; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 8: // imprisoned - if (IsImprisoned(gBankAttacker, gCurrentMove)) - { - gProtectStructs[gBankAttacker].usedImprisionedMove = 1; - CancelMultiTurnMoves(gBankAttacker); - gBattlescriptCurrInstr = BattleScript_MoveUsedIsImprisoned; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - effect = 1; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 9: // confusion - if (gBattleMons[gBankAttacker].status2 & STATUS2_CONFUSION) - { - gBattleMons[gBankAttacker].status2--; - if (gBattleMons[gBankAttacker].status2 & STATUS2_CONFUSION) - { - if (Random() & 1) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - b_movescr_stack_push_cursor(); - } - else // confusion dmg - { - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - gBankTarget = gBankAttacker; - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankAttacker], MOVE_POUND, 0, 40, 0, gBankAttacker, gBankAttacker); - gProtectStructs[gBankAttacker].confusionSelfDmg = 1; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - } - gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfused; - } - else // snapped out of confusion - { - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfusedNoMore; - } - effect = 1; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 10: // paralysis - if (gBattleMons[gBankAttacker].status1 & STATUS_PARALYSIS && (Random() % 4) == 0) - { - gProtectStructs[gBankAttacker].prlzImmobility = 1; - CancelMultiTurnMoves(gBankAttacker); - gBattlescriptCurrInstr = BattleScript_MoveUsedIsParalyzed; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - effect = 1; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 11: // infatuation - if (gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) - { - BATTLE_STRUCT->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10); - if (Random() & 1) - b_movescr_stack_push_cursor(); - else - { - b_movescr_stack_push(BattleScript_MoveUsedIsParalyzedCantAttack); - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - gProtectStructs[gBankAttacker].loveImmobility = 1; - CancelMultiTurnMoves(gBankAttacker); - } - gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove; - effect = 1; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 12: // bide - if (gBattleMons[gBankAttacker].status2 & STATUS2_BIDE) - { - gBattleMons[gBankAttacker].status2 -= 0x100; - if (gBattleMons[gBankAttacker].status2 & STATUS2_BIDE) - gBattlescriptCurrInstr = BattleScript_BideStoringEnergy; - else - { - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_MULTIPLETURNS); - if (gTakenDmg[gBankAttacker]) - { - gCurrentMove = MOVE_BIDE; - *bideDmg = gTakenDmg[gBankAttacker] * 2; - gBankTarget = gTakenDmgBanks[gBankAttacker]; - if (gAbsentBankFlags & gBitTable[gBankTarget]) - gBankTarget = GetMoveTarget(MOVE_BIDE, 1); - gBattlescriptCurrInstr = BattleScript_BideAttack; - } - else - gBattlescriptCurrInstr = BattleScript_BideNoEnergyToAttack; - } - effect = 1; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 13: // move thawing - if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE) - { - if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT) - { - gBattleMons[gBankAttacker].status1 &= ~(STATUS_FREEZE); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - } - effect = 2; - } - BATTLE_STRUCT->atkCancellerTracker++; - break; - case 14: // last case - break; - } - - } while (BATTLE_STRUCT->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0); - - if (effect == 2) - { - gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); - MarkBufferBankForExecution(gActiveBank); - } - return effect; -} - -bool8 sub_8018018(u8 bank, u8 r1, u8 r2) -{ - struct Pokemon* party; - u8 r7; - u8 r6; - s32 i; - if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) - return 0; - if (gBattleTypeFlags & BATTLE_TYPE_MULTI) - { - r7 = sub_803FC34(bank); - if (GetBankSide(bank) == 0) - party = gPlayerParty; - else - party = gEnemyParty; - r6 = sub_803FBFC(r7); - for (i = r6 * 3; i < r6 * 3 + 3; i++) - { - if (GetMonData(&party[i], MON_DATA_HP) && GetMonData(&party[i], MON_DATA_SPECIES2) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) - break; - } - return (i == r6 * 3 + 3); - } - else - { - if (GetBankSide(bank) == 1) - { - r7 = GetBankByIdentity(1); - r6 = GetBankByIdentity(3); - party = gEnemyParty; - } - else - { - r7 = GetBankByIdentity(0); - r6 = GetBankByIdentity(2); - party = gPlayerParty; - } - if (r1 == 6) - r1 = gBattlePartyID[r7]; - if (r2 == 6) - r2 = gBattlePartyID[r6]; - for (i = 0; i < 6; i++) - { - if (GetMonData(&party[i], MON_DATA_HP) && GetMonData(&party[i], MON_DATA_SPECIES2) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG && i != r1 && i != r2 && i != ewram16068arr(r7) && i != ewram16068arr(r6)) - break; - } - return (i == 6); - } -} - -enum -{ - CASTFORM_NO_CHANGE, //0 - CASTFORM_TO_NORMAL, //1 - CASTFORM_TO_FIRE, //2 - CASTFORM_TO_WATER, //3 - CASTFORM_TO_ICE, //4 -}; - -u8 CastformDataTypeChange(u8 bank) -{ - u8 formChange = 0; - if (gBattleMons[bank].species != SPECIES_CASTFORM || gBattleMons[bank].ability != ABILITY_FORECAST || gBattleMons[bank].hp == 0) - return CASTFORM_NO_CHANGE; - if (!WEATHER_HAS_EFFECT && gBattleMons[bank].type1 != TYPE_NORMAL && gBattleMons[bank].type2 != TYPE_NORMAL) - { - gBattleMons[bank].type1 = TYPE_NORMAL; - gBattleMons[bank].type2 = TYPE_NORMAL; - return CASTFORM_TO_NORMAL; - } - if (!WEATHER_HAS_EFFECT) - return CASTFORM_NO_CHANGE; - if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL)) && gBattleMons[bank].type1 != TYPE_NORMAL && gBattleMons[bank].type2 != TYPE_NORMAL) - { - gBattleMons[bank].type1 = TYPE_NORMAL; - gBattleMons[bank].type2 = TYPE_NORMAL; - formChange = CASTFORM_TO_NORMAL; - } - if (gBattleWeather & WEATHER_SUN_ANY && gBattleMons[bank].type1 != TYPE_FIRE && gBattleMons[bank].type2 != TYPE_FIRE) - { - gBattleMons[bank].type1 = TYPE_FIRE; - gBattleMons[bank].type2 = TYPE_FIRE; - formChange = CASTFORM_TO_FIRE; - } - if (gBattleWeather & WEATHER_RAIN_ANY && gBattleMons[bank].type1 != TYPE_WATER && gBattleMons[bank].type2 != TYPE_WATER) - { - gBattleMons[bank].type1 = TYPE_WATER; - gBattleMons[bank].type2 = TYPE_WATER; - formChange = CASTFORM_TO_WATER; - } - if (gBattleWeather & WEATHER_HAIL && gBattleMons[bank].type1 != TYPE_ICE && gBattleMons[bank].type2 != TYPE_ICE) - { - gBattleMons[bank].type1 = TYPE_ICE; - gBattleMons[bank].type2 = TYPE_ICE; - formChange = CASTFORM_TO_ICE; - } - return formChange; -} - -u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) -{ - u8 effect = 0; - struct Pokemon* pokeAtk; - struct Pokemon* pokeDef; - u16 speciesAtk; - u16 speciesDef; - u32 pidAtk; - u32 pidDef; - - if (gBankAttacker >= gNoOfAllBanks) - gBankAttacker = bank; - if (GetBankSide(gBankAttacker) == 0) - pokeAtk = &gPlayerParty[gBattlePartyID[gBankAttacker]]; - else - pokeAtk = &gEnemyParty[gBattlePartyID[gBankAttacker]]; - - if (gBankTarget >= gNoOfAllBanks) - gBankTarget = bank; - if (GetBankSide(gBankTarget) == 0) - pokeDef = &gPlayerParty[gBattlePartyID[gBankTarget]]; - else - pokeDef = &gEnemyParty[gBattlePartyID[gBankTarget]]; - - speciesAtk = GetMonData(pokeAtk, MON_DATA_SPECIES); - pidAtk = GetMonData(pokeAtk, MON_DATA_PERSONALITY); - - speciesDef = GetMonData(pokeDef, MON_DATA_SPECIES); - pidDef = GetMonData(pokeDef, MON_DATA_PERSONALITY); - - if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // why isn't that check done at the beginning? - { - u8 moveType; - s32 i; - u16 move; - u8 side; - u8 target1; - - if (special) - gLastUsedAbility = special; - else - gLastUsedAbility = gBattleMons[bank].ability; - - if (moveArg) - move = moveArg; - else - move = gCurrentMove; - - if (BATTLE_STRUCT->dynamicMoveType) - moveType = BATTLE_STRUCT->dynamicMoveType & 0x3F; - else - moveType = gBattleMoves[move].type; - - //_080184AC - switch (caseID) - { - case ABILITYEFFECT_ON_SWITCHIN: // 0 - //_08018518 - if (gBankAttacker >= gNoOfAllBanks) - gBankAttacker = bank; - switch (gLastUsedAbility) - { - case 0xFF: //weather from overworld - //_08018586 - switch (weather_get_current()) - { - case WEATHER_RAIN_LIGHT: - case WEATHER_RAIN_MED: - case WEATHER_RAIN_HEAVY: - if (!(gBattleWeather & WEATHER_RAIN_ANY)) - { - gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT); - BATTLE_STRUCT->animArg1 = B_ANIM_RAIN_CONTINUES; - BATTLE_STRUCT->scriptingActive = bank; - effect++; - } - break; - case WEATHER_SANDSTORM: - if (!(gBattleWeather & WEATHER_SANDSTORM_ANY)) - { - gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); - BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; - BATTLE_STRUCT->scriptingActive = bank; - effect++; - } - break; - case WEATHER_DROUGHT: - if (!(gBattleWeather & WEATHER_SUN_ANY)) - { - gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); - BATTLE_STRUCT->animArg1 = B_ANIM_SUN_CONTINUES; - BATTLE_STRUCT->scriptingActive = bank; - effect++; - } - break; - } - if (effect) - { - gBattleCommunication[MULTISTRING_CHOOSER] = weather_get_current(); - b_push_move_exec(BattleScript_OverworldWeatherStarts); - } - break; - case ABILITY_DRIZZLE: - //_08018680 - if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) - { - gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY); - b_push_move_exec(BattleScript_DrizzleActivates); - BATTLE_STRUCT->scriptingActive = bank; - effect++; - } - break; - case ABILITY_SAND_STREAM: - //_080186B8 - if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT)) - { - gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); - b_push_move_exec(BattleScript_SandstreamActivates); - BATTLE_STRUCT->scriptingActive = bank; - effect++; - } - break; - case ABILITY_DROUGHT: - //_080186F0 - if (!(gBattleWeather & WEATHER_SUN_PERMANENT)) - { - gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); - b_push_move_exec(BattleScript_DroughtActivates); - BATTLE_STRUCT->scriptingActive = bank; - effect++; - } - break; - case ABILITY_INTIMIDATE: - //_08018728 - if (!(gSpecialStatuses[bank].intimidatedPoke)) - { - gStatuses3[bank] |= STATUS3_INTIMIDATE_POKES; - gSpecialStatuses[bank].intimidatedPoke = 1; - } - break; - case ABILITY_FORECAST: - //_0801875C - effect = CastformDataTypeChange(bank); - if (effect != 0) - { - b_push_move_exec(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = bank; - BATTLE_STRUCT->castformToChangeInto = effect - 1; - } - break; - case ABILITY_TRACE: - //_080187A0 - if (!(gSpecialStatuses[bank].traced)) - { - gStatuses3[bank] |= STATUS3_TRACE; - gSpecialStatuses[bank].traced = 1; - } - break; - case ABILITY_CLOUD_NINE: - case ABILITY_AIR_LOCK: - //_080187DC - { - // that's a weird choice for a variable, why not use i or bank? - for (target1 = 0; target1 < gNoOfAllBanks; target1++) - { - effect = CastformDataTypeChange(target1); - if (effect != 0) - { - b_push_move_exec(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = target1; - BATTLE_STRUCT->castformToChangeInto = effect - 1; - break; - } - } - } - break; - } - break; - case ABILITYEFFECT_ENDTURN: // 1 - //_08018814 - if (gBattleMons[bank].hp != 0) - { - gBankAttacker = bank; - switch (gLastUsedAbility) - { - case ABILITY_RAIN_DISH: - if (WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) - && gBattleMons[bank].maxHP > gBattleMons[bank].hp) - { - gLastUsedAbility = ABILITY_RAIN_DISH; // why - b_push_move_exec(BattleScript_RainDishActivates); - gBattleMoveDamage = gBattleMons[bank].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - effect++; - } - break; - case ABILITY_SHED_SKIN: - if ((gBattleMons[bank].status1 & STATUS_ANY) && (Random() % 3) == 0) - { - if (gBattleMons[bank].status1 & (STATUS_POISON | STATUS_TOXIC_POISON)) - StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - if (gBattleMons[bank].status1 & STATUS_SLEEP) - StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - if (gBattleMons[bank].status1 & STATUS_PARALYSIS) - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - if (gBattleMons[bank].status1 & STATUS_BURN) - StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - if (gBattleMons[bank].status1 & STATUS_FREEZE) - StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - gBattleMons[bank].status1 = 0; - // BUG: The nightmare status does not get cleared here. This was fixed in Emerald. - //gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); - BATTLE_STRUCT->scriptingActive = gActiveBank = bank; - b_push_move_exec(BattleScript_ShedSkinActivates); - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); - MarkBufferBankForExecution(gActiveBank); - effect++; - } - break; - case ABILITY_SPEED_BOOST: - if (gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC && gDisableStructs[bank].isFirstTurn != 2) - { - gBattleMons[bank].statStages[STAT_STAGE_SPEED]++; - BATTLE_STRUCT->animArg1 = 0x11; - BATTLE_STRUCT->animArg2 = 0; - b_push_move_exec(BattleScript_SpeedBoostActivates); - BATTLE_STRUCT->scriptingActive = bank; - effect++; - } - break; - case ABILITY_TRUANT: - gDisableStructs[gBankAttacker].truantCounter ^= 1; - break; - } - } - break; - case ABILITYEFFECT_MOVES_BLOCK: // 2 - //_08018A40 - if (gLastUsedAbility == ABILITY_SOUNDPROOF) - { - for (i = 0; gSoundMovesTable[i] != 0xFFFF; i++) - { - if (gSoundMovesTable[i] == move) - break; - } - if (gSoundMovesTable[i] != 0xFFFF) - { - if (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS) - gHitMarker |= HITMARKER_NO_PPDEDUCT; - gBattlescriptCurrInstr = BattleScript_SoundproofProtected; - effect = 1; - } - } - break; - case ABILITYEFFECT_ABSORBING: // 3 - //_08018AD8 - if (move) - { - switch (gLastUsedAbility) - { - case ABILITY_VOLT_ABSORB: - if (moveType == TYPE_ELECTRIC && gBattleMoves[move].power != 0) - { - if (gProtectStructs[gBankAttacker].notFirstStrike) - gBattlescriptCurrInstr = BattleScript_MoveHPDrain; - else - gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss; - effect = 1; - } - break; - case ABILITY_WATER_ABSORB: - if (moveType == TYPE_WATER && gBattleMoves[move].power != 0) - { - if (gProtectStructs[gBankAttacker].notFirstStrike) - gBattlescriptCurrInstr = BattleScript_MoveHPDrain; - else - gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss; - effect = 1; - } - break; - case ABILITY_FLASH_FIRE: - if (moveType == TYPE_FIRE && !(gBattleMons[bank].status1 & STATUS_FREEZE)) - { - if (!(eFlashFireArr.arr[bank] & 1)) - { - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - if (gProtectStructs[gBankAttacker].notFirstStrike) - gBattlescriptCurrInstr = BattleScript_FlashFireBoost; - else - gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - eFlashFireArr.arr[bank] |= 1; - effect = 2; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - if (gProtectStructs[gBankAttacker].notFirstStrike) - gBattlescriptCurrInstr = BattleScript_FlashFireBoost; - else - gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; - effect = 2; - } - } - break; - } - if (effect == 1) - { - if (gBattleMons[bank].maxHP == gBattleMons[bank].hp) - { - if ((gProtectStructs[gBankAttacker].notFirstStrike)) - gBattlescriptCurrInstr = BattleScript_MoveHPDrain_FullHP; - else - gBattlescriptCurrInstr = BattleScript_MoveHPDrain_FullHP_PPLoss; - } - else - { - gBattleMoveDamage = gBattleMons[bank].maxHP / 4; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - gBattleMoveDamage *= -1; - } - } - } - break; - case ABILITYEFFECT_CONTACT: // 4 - //_08018CF0 - switch (gLastUsedAbility) - { - case ABILITY_COLOR_CHANGE: - //_08018DCC - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && move != MOVE_STRUGGLE - && gBattleMoves[move].power != 0 - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && gBattleMons[bank].type1 != moveType - && gBattleMons[bank].type2 != moveType - && gBattleMons[bank].hp != 0) - { - gBattleMons[bank].type1 = moveType; - gBattleMons[bank].type2 = moveType; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 3; - gBattleTextBuff1[2] = moveType; - gBattleTextBuff1[3] = 0xFF; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_ColorChangeActivates; - effect++; - } - break; - case ABILITY_ROUGH_SKIN: - //_08018E94 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) - { - gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_RoughSkinActivates; - effect++; - } - break; - case ABILITY_EFFECT_SPORE: - //_08018F54 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 10) == 0) - { - do - { - gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; - } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); - if (gBattleCommunication[MOVE_EFFECT_BYTE] == 3) - gBattleCommunication[MOVE_EFFECT_BYTE] += 2; - gBattleCommunication[MOVE_EFFECT_BYTE] += 0x40; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITY_POISON_POINT: - //_0801904C - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x42; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITY_STATIC: - //_08019128 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x45; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITY_FLAME_BODY: - //_08019204 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x43; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITY_CUTE_CHARM: - //_080192E0 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && gBattleMons[gBankTarget].hp != 0 - && (Random() % 3) == 0 - && gBattleMons[gBankAttacker].ability != ABILITY_OBLIVIOUS - && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) - && !(gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) - && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != 0xFF - && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != 0xFF) - { - gBattleMons[gBankAttacker].status2 |= (gBitTable[gBankTarget] << 0x10); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; - effect++; - } - break; - } - break; - case ABILITYEFFECT_IMMUNITY: // 5 - //_08019448 - { - for (bank = 0; bank < gNoOfAllBanks; bank++) - { - switch (gBattleMons[bank].ability) - { - case ABILITY_IMMUNITY: - if (gBattleMons[bank].status1 & (STATUS_POISON | STATUS_TOXIC_POISON | 0xF00)) // TODO: what is 0xF00? - { - StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - effect = 1; - } - break; - case ABILITY_OWN_TEMPO: - if (gBattleMons[bank].status2 & STATUS2_CONFUSION) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); - effect = 2; - } - break; - case ABILITY_LIMBER: - if (gBattleMons[bank].status1 & STATUS_PARALYSIS) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - effect = 1; - } - break; - case ABILITY_INSOMNIA: - case ABILITY_VITAL_SPIRIT: - if (gBattleMons[bank].status1 & STATUS_SLEEP) - { - gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); - StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - effect = 1; - } - break; - case ABILITY_WATER_VEIL: - if (gBattleMons[bank].status1 & STATUS_BURN) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - effect = 1; - } - break; - case ABILITY_MAGMA_ARMOR: - if (gBattleMons[bank].status1 & STATUS_FREEZE) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - effect = 1; - } - break; - case ABILITY_OBLIVIOUS: - if (gBattleMons[bank].status2 & STATUS2_INFATUATION) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); - effect = 3; - } - break; - } - if (effect) - { - switch (effect) - { - case 1: // status cleared - gBattleMons[bank].status1 = 0; - break; - case 2: // get rid of confusion - gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); - break; - case 3: // get rid of infatuation - gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION); - break; - } - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; - BATTLE_STRUCT->scriptingActive = bank; - gActiveBank = bank; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); - MarkBufferBankForExecution(gActiveBank); - return effect; - } - } - } - break; - case ABILITYEFFECT_FORECAST: // 6 - //_080197B4 - { - for (bank = 0; bank < gNoOfAllBanks; bank++) - { - if (gBattleMons[bank].ability == ABILITY_FORECAST) - { - effect = CastformDataTypeChange(bank); - if (effect) - { - b_push_move_exec(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = bank; - BATTLE_STRUCT->castformToChangeInto = effect - 1; - return effect; - } - } - } - } - break; - case ABILITYEFFECT_SYNCHRONIZE: // 7 - //_08019804 - if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) - { - gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); - BATTLE_STRUCT->synchroniseEffect &= 0x3F; - if (BATTLE_STRUCT->synchroniseEffect == 6) - BATTLE_STRUCT->synchroniseEffect = 2; - gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect + 0x40; - BATTLE_STRUCT->scriptingActive = gBankTarget; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8 - //_08019880 - if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) - { - gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); - BATTLE_STRUCT->synchroniseEffect &= 0x3F; - if (BATTLE_STRUCT->synchroniseEffect == 6) - BATTLE_STRUCT->synchroniseEffect = 2; - gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect; - BATTLE_STRUCT->scriptingActive = gBankAttacker; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } - break; - case ABILITYEFFECT_INTIMIDATE1: // 9 - //_080198FC - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleMons[i].ability == ABILITY_INTIMIDATE && gStatuses3[i] & STATUS3_INTIMIDATE_POKES) - { - gLastUsedAbility = ABILITY_INTIMIDATE; - gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); - b_push_move_exec(gUnknown_081D978C); - BATTLE_STRUCT->intimidateBank = i; - effect++; - break; - } - } - break; - case ABILITYEFFECT_TRACE: // 11 - //_08019940 - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE)) - { - u8 target2; - side = (GetBankIdentity(i) ^ 1) & 1; - target1 = GetBankByIdentity(side); - target2 = GetBankByIdentity(side + 2); - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0 - && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) - { - //_080199AE - gActiveBank = GetBankByIdentity(((Random() & 1) * 2) | side); - gBattleMons[i].ability = gBattleMons[gActiveBank].ability; - gLastUsedAbility = gBattleMons[gActiveBank].ability; - effect++; - } - else if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0) - { - //_08019A34 - gActiveBank = target1; - gBattleMons[i].ability = gBattleMons[gActiveBank].ability; - gLastUsedAbility = gBattleMons[gActiveBank].ability; - effect++; - } - else if (gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) - { - //_08019A78 - gActiveBank = target2; - gBattleMons[i].ability = gBattleMons[gActiveBank].ability; - gLastUsedAbility = gBattleMons[gActiveBank].ability; - effect++; - } - } - else - //_08019ABC - { - gActiveBank = target1; - if (gBattleMons[target1].ability && gBattleMons[target1].hp) - { - gBattleMons[i].ability = gBattleMons[target1].ability; - gLastUsedAbility = gBattleMons[target1].ability; - effect++; - } - } - if (effect) - { - b_push_move_exec(BattleScript_TraceActivates); - gStatuses3[i] &= ~(STATUS3_TRACE); - BATTLE_STRUCT->scriptingActive = i; - - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = gActiveBank; - gBattleTextBuff1[3] = gBattlePartyID[gActiveBank]; - gBattleTextBuff1[4] = EOS; - - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 9; - gBattleTextBuff2[2] = gLastUsedAbility; - gBattleTextBuff2[3] = EOS; - break; - } - } - } - break; - case ABILITYEFFECT_INTIMIDATE2: // 10 - //_08019B1C - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleMons[i].ability == ABILITY_INTIMIDATE && (gStatuses3[i] & STATUS3_INTIMIDATE_POKES)) - { - gLastUsedAbility = ABILITY_INTIMIDATE; - gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = gUnknown_081D9795; - BATTLE_STRUCT->intimidateBank = i; - effect++; - break; - } - } - break; - case ABILITYEFFECT_CHECK_OTHER_SIDE: // 12 - //_08019B60 - side = GetBankSide(bank); - for (i = 0; i < gNoOfAllBanks; i++) - { - if (GetBankSide(i) != side && gBattleMons[i].ability == ability) - { - gLastUsedAbility = ability; - effect = i + 1; - } - } - break; - case ABILITYEFFECT_CHECK_BANK_SIDE: // 13 - //_08019BBC - side = GetBankSide(bank); - for (i = 0; i < gNoOfAllBanks; i++) - { - if (GetBankSide(i) == side && gBattleMons[i].ability == ability) - { - gLastUsedAbility = ability; - effect = i + 1; - } - } - break; - case ABILITYEFFECT_FIELD_SPORT: // 14 - //_08019C18 - switch (gLastUsedAbility) - { - case 0xFD: - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gStatuses3[i] & STATUS3_MUDSPORT) - effect = i + 1; - } - break; - case 0xFE: - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gStatuses3[i] & STATUS3_WATERSPORT) - effect = i + 1; - } - break; - default: - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleMons[i].ability == ability) - { - gLastUsedAbility = ability; - effect = i + 1; - } - } - break; - } - break; - case ABILITYEFFECT_CHECK_ON_FIELD: // 19 - //_08019CD4 - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleMons[i].ability == ability && gBattleMons[i].hp != 0) - { - gLastUsedAbility = ability; - effect = i + 1; - } - } - break; - case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK: // 15 - //_08019D18 - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleMons[i].ability == ability && i != bank) - { - gLastUsedAbility = ability; - effect = i + 1; - } - } - break; - case ABILITYEFFECT_COUNT_OTHER_SIZE: // 16 - //_08019D5C - side = GetBankSide(bank); - for (i = 0; i < gNoOfAllBanks; i++) - { - if (GetBankSide(i) != side && gBattleMons[i].ability == ability) - { - gLastUsedAbility = ability; - effect++; - } - } - break; - case ABILITYEFFECT_COUNT_BANK_SIDE: // 17 - //_08019DB8 - side = GetBankSide(bank); - for (i = 0; i < gNoOfAllBanks; i++) - { - if (GetBankSide(i) == side && gBattleMons[i].ability == ability) - { - gLastUsedAbility = ability; - effect++; - } - } - break; - case ABILITYEFFECT_COUNT_ON_FIELD: // 18 - //_08019F44 - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleMons[i].ability == ability && i != bank) - { - gLastUsedAbility = ability; - effect++; - } - } - break; - } - //_08019F76 - if (effect && caseID < 0xC && gLastUsedAbility != 0xFF) - RecordAbilityBattle(bank, gLastUsedAbility); - } - - return effect; -} - -void b_call_bc_move_exec(u8* BS_ptr) -{ - gBattlescriptCurrInstr = BS_ptr; - B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; - gBattleMainFunc = RunBattleScriptCommands_PopCallbacksStack; - gCurrentActionFuncId = 0; -} - -void b_push_move_exec(u8* BS_ptr) -{ - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BS_ptr; - B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; - gBattleMainFunc = RunBattleScriptCommands; -} - -enum -{ - ITEM_NO_EFFECT, // 0 - ITEM_STATUS_CHANGE, // 1 - ITEM_EFFECT_OTHER, // 2 - ITEM_PP_CHANGE, // 3 - ITEM_HP_CHANGE, // 4 - ITEM_STATS_CHANGE, // 5 -}; - -enum -{ - FLAVOR_SPICY, // 0 - FLAVOR_DRY, // 1 - FLAVOR_SWEET, // 2 - FLAVOR_BITTER, // 3 - FLAVOR_SOUR, // 4 -}; - -u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) -{ - int i = 0; - u8 effect = ITEM_NO_EFFECT; - u8 changedPP = 0; - u8 bankHoldEffect, atkHoldEffect, defHoldEffect; - u8 bankQuality, atkQuality, defQuality; - u16 atkItem, defItem; - - gLastUsedItem = gBattleMons[bank].item; - if (gLastUsedItem == ITEM_ENIGMA_BERRY) - { - bankHoldEffect = gEnigmaBerries[bank].holdEffect; - bankQuality = gEnigmaBerries[bank].holdEffectParam; - } - else - { - bankHoldEffect = ItemId_GetHoldEffect(gLastUsedItem); - bankQuality = ItemId_GetHoldEffectParam(gLastUsedItem); - } - - atkItem = gBattleMons[gBankAttacker].item; - if (atkItem == ITEM_ENIGMA_BERRY) - { - atkHoldEffect = gEnigmaBerries[gBankAttacker].holdEffect; - atkQuality = gEnigmaBerries[gBankAttacker].holdEffectParam; - } - else - { - atkHoldEffect = ItemId_GetHoldEffect(atkItem); - atkQuality = ItemId_GetHoldEffectParam(atkItem); - } - - // def variables are unused - defItem = gBattleMons[gBankTarget].item; - if (defItem == ITEM_ENIGMA_BERRY) - { - defHoldEffect = gEnigmaBerries[gBankTarget].holdEffect; - defQuality = gEnigmaBerries[gBankTarget].holdEffectParam; - } - else - { - defHoldEffect = ItemId_GetHoldEffect(defItem); - defQuality = ItemId_GetHoldEffectParam(defItem); - } - - switch (caseID) - { - case 0: - switch (bankHoldEffect) - { - case HOLD_EFFECT_DOUBLE_PRIZE: - BATTLE_STRUCT->moneyMultiplier = 2; - break; - case HOLD_EFFECT_RESTORE_STATS: - for (i = 0; i < 8; i++) - { - if (gBattleMons[bank].statStages[i] < 6) - { - gBattleMons[bank].statStages[i] = 6; - effect = ITEM_STATS_CHANGE; - } - } - if (effect) - { - BATTLE_STRUCT->scriptingActive = bank; - gStringBank = bank; - gActiveBank = gBankAttacker = bank; - b_call_bc_move_exec(BattleScript_WhiteHerbEnd2); - } - break; - } - break; - case 1: - if (gBattleMons[bank].hp) - { - switch (bankHoldEffect) - { - case HOLD_EFFECT_RESTORE_HP: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) - { - gBattleMoveDamage = bankQuality; - if (gBattleMons[bank].hp + bankQuality > gBattleMons[bank].maxHP) - gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; - gBattleMoveDamage *= -1; - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); - effect = 4; - } - break; - case HOLD_EFFECT_RESTORE_PP: - if (!moveTurn) - { - struct Pokemon* poke; - u8 ppBonuses; - u16 move; - - if (GetBankSide(bank) == 0) - poke = &gPlayerParty[gBattlePartyID[bank]]; - else - poke = &gEnemyParty[gBattlePartyID[bank]]; - for (i = 0; i < 4; i++) - { - move = GetMonData(poke, MON_DATA_MOVE1 + i); - changedPP = GetMonData(poke, MON_DATA_PP1 + i); - ppBonuses = GetMonData(poke, MON_DATA_PP_BONUSES); - if (move && changedPP == 0) - break; - } - if (i != 4) - { - u8 maxPP = CalculatePPWithBonus(move, ppBonuses, i); - if (changedPP + bankQuality > maxPP) - changedPP = maxPP; - else - changedPP = changedPP + bankQuality; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 2; - gBattleTextBuff1[2] = move; - gBattleTextBuff1[3] = move >> 8; - gBattleTextBuff1[4] = 0xFF; - b_call_bc_move_exec(BattleScript_BerryPPHealEnd2); - EmitSetAttributes(0, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); - MarkBufferBankForExecution(gActiveBank); - effect = ITEM_PP_CHANGE; - } - } - break; - case HOLD_EFFECT_RESTORE_STATS: - for (i = 0; i < 8; i++) - { - if (gBattleMons[bank].statStages[i] < 6) - { - gBattleMons[bank].statStages[i] = 6; - effect = ITEM_STATS_CHANGE; - } - } - if (effect) - { - BATTLE_STRUCT->scriptingActive = bank; - gStringBank = bank; - gActiveBank = gBankAttacker = bank; - b_call_bc_move_exec(BattleScript_WhiteHerbEnd2); - } - break; - case HOLD_EFFECT_LEFTOVERS: - if (gBattleMons[bank].hp < gBattleMons[bank].maxHP && !moveTurn) - { - gBattleMoveDamage = gBattleMons[bank].maxHP / 16; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) - gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; - gBattleMoveDamage *= -1; - b_call_bc_move_exec(BattleScript_ItemHealHP_End2); - effect = ITEM_HP_CHANGE; - RecordItemBattle(bank, bankHoldEffect); - } - break; - // nice copy/paste there gamefreak, making a function for confuse berries was too much eh? - case HOLD_EFFECT_CONFUSE_SPICY: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 8; - gBattleTextBuff1[2] = FLAVOR_SPICY; - gBattleTextBuff1[3] = EOS; - gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) - gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; - gBattleMoveDamage *= -1; - if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SPICY) < 0) - b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2); - else - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); - effect = ITEM_HP_CHANGE; - } - break; - case HOLD_EFFECT_CONFUSE_DRY: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 8; - gBattleTextBuff1[2] = FLAVOR_DRY; - gBattleTextBuff1[3] = EOS; - gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) - gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; - gBattleMoveDamage *= -1; - if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_DRY) < 0) - b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2); - else - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); - effect = ITEM_HP_CHANGE; - } - break; - case HOLD_EFFECT_CONFUSE_SWEET: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 8; - gBattleTextBuff1[2] = FLAVOR_SWEET; - gBattleTextBuff1[3] = EOS; - gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) - gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; - gBattleMoveDamage *= -1; - if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SWEET) < 0) - b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2); - else - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); - effect = ITEM_HP_CHANGE; - } - break; - case HOLD_EFFECT_CONFUSE_BITTER: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 8; - gBattleTextBuff1[2] = FLAVOR_BITTER; - gBattleTextBuff1[3] = EOS; - gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) - gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; - gBattleMoveDamage *= -1; - if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_BITTER) < 0) - b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2); - else - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); - effect = ITEM_HP_CHANGE; - } - break; - case HOLD_EFFECT_CONFUSE_SOUR: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 8; - gBattleTextBuff1[2] = FLAVOR_SOUR; - gBattleTextBuff1[3] = EOS; - gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = 1; - if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) - gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; - gBattleMoveDamage *= -1; - if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SOUR) < 0) - b_call_bc_move_exec(BattleScript_BerryConfuseHealEnd2); - else - b_call_bc_move_exec(BattleScript_ItemHealHP_RemoveItem); - effect = ITEM_HP_CHANGE; - } - break; - // copy/paste again, smh - case HOLD_EFFECT_ATTACK_UP: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_ATK] < 0xC) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 5; - gBattleTextBuff1[2] = STAT_STAGE_ATK; - gBattleTextBuff1[3] = EOS; - - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = 0xD2; - gBattleTextBuff2[3] = 0xD2 >> 8; - gBattleTextBuff2[4] = EOS; - - gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_ATK; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_ATK; - BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } - break; - case HOLD_EFFECT_DEFENSE_UP: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_DEF] < 0xC) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 5; - gBattleTextBuff1[2] = STAT_STAGE_DEF; - gBattleTextBuff1[3] = EOS; - - gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_DEF; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_DEF; - BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } - break; - case HOLD_EFFECT_SPEED_UP: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 5; - gBattleTextBuff1[2] = STAT_STAGE_SPEED; - gBattleTextBuff1[3] = EOS; - - gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPEED; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPEED; - BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } - break; - case HOLD_EFFECT_SP_ATTACK_UP: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPATK] < 0xC) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 5; - gBattleTextBuff1[2] = STAT_STAGE_SPATK; - gBattleTextBuff1[3] = EOS; - - gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPATK; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPATK; - BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } - break; - case HOLD_EFFECT_SP_DEFENSE_UP: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPDEF] < 0xC) - { - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 5; - gBattleTextBuff1[2] = STAT_STAGE_SPDEF; - gBattleTextBuff1[3] = EOS; - - gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPDEF; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPDEF; - BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } - break; - case HOLD_EFFECT_CRITICAL_UP: - if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && !(gBattleMons[bank].status2 & STATUS2_FOCUS_ENERGY)) - { - gBattleMons[bank].status2 |= STATUS2_FOCUS_ENERGY; - b_call_bc_move_exec(BattleScript_BerryFocusEnergyEnd2); - effect = ITEM_EFFECT_OTHER; - } - break; - case HOLD_EFFECT_RANDOM_STAT_UP: - if (!moveTurn && gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality) - { - for (i = 0; i < 5; i++) - { - if (gBattleMons[bank].statStages[STAT_STAGE_ATK + i] < 0xC) - break; - } - if (i != 5) - { - do - { - i = Random() % 5; - } while (gBattleMons[bank].statStages[STAT_STAGE_ATK + i] == 0xC); - - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 5; - gBattleTextBuff1[2] = i + 1; - gBattleTextBuff1[3] = EOS; - - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = 0xD1; - gBattleTextBuff2[3] = 0xD1 >> 8; - gBattleTextBuff2[4] = 0; - gBattleTextBuff2[5] = 0xD2; - gBattleTextBuff2[6] = 0xD2 >> 8; - gBattleTextBuff2[7] = EOS; - - gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x21 + i; - BATTLE_STRUCT->animArg1 = 0x21 + i + 6; - BATTLE_STRUCT->animArg2 = 0; - b_call_bc_move_exec(BattleScript_BerryStatRaiseEnd2); - effect = ITEM_STATS_CHANGE; - } - } - break; - case HOLD_EFFECT_CURE_PAR: - if (gBattleMons[bank].status1 & STATUS_PARALYSIS) - { - gBattleMons[bank].status1 &= ~(STATUS_PARALYSIS); - b_call_bc_move_exec(BattleScript_BerryCurePrlzEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_PSN: - if (gBattleMons[bank].status1 & STATUS_PSN_ANY) - { - gBattleMons[bank].status1 &= ~(STATUS_PSN_ANY | STATUS_TOXIC_COUNTER); - b_call_bc_move_exec(BattleScript_BerryCurePsnEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_BRN: - if (gBattleMons[bank].status1 & STATUS_BURN) - { - gBattleMons[bank].status1 &= ~(STATUS_BURN); - b_call_bc_move_exec(BattleScript_BerryCureBrnEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_FRZ: - if (gBattleMons[bank].status1 & STATUS_FREEZE) - { - gBattleMons[bank].status1 &= ~(STATUS_FREEZE); - b_call_bc_move_exec(BattleScript_BerryCureFrzEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_SLP: - if (gBattleMons[bank].status1 & STATUS_SLEEP) - { - gBattleMons[bank].status1 &= ~(STATUS_SLEEP); - gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); - b_call_bc_move_exec(BattleScript_BerryCureSlpEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_CONFUSION: - if (gBattleMons[bank].status2 & STATUS2_CONFUSION) - { - gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); - b_call_bc_move_exec(BattleScript_BerryCureConfusionEnd2); - effect = ITEM_EFFECT_OTHER; - } - break; - case HOLD_EFFECT_CURE_STATUS: - if (gBattleMons[bank].status1 & STATUS_ANY || gBattleMons[bank].status2 & STATUS2_CONFUSION) - { - i = 0; - if (gBattleMons[bank].status1 & STATUS_PSN_ANY) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - i++; - } - if (gBattleMons[bank].status1 & STATUS_SLEEP) - { - gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); - StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - i++; - } - if (gBattleMons[bank].status1 & STATUS_PARALYSIS) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - i++; - } - if (gBattleMons[bank].status1 & STATUS_BURN) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - i++; - } - if (gBattleMons[bank].status1 & STATUS_FREEZE) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - i++; - } - if (gBattleMons[bank].status2 & STATUS2_CONFUSION) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); - i++; - } - if (!(i > 1)) - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - else - gBattleCommunication[MULTISTRING_CHOOSER] = 1; - gBattleMons[bank].status1 = 0; - gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); - b_call_bc_move_exec(BattleScript_BerryCureChosenStatusEnd2); - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_ATTRACT: - if (gBattleMons[bank].status2 & STATUS2_INFATUATION) - { - gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION); - StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); - b_call_bc_move_exec(BattleScript_BerryCureChosenStatusEnd2); - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - effect = ITEM_EFFECT_OTHER; - } - break; - } - if (effect) - { - BATTLE_STRUCT->scriptingActive = bank; - gStringBank = bank; - gActiveBank = gBankAttacker = bank; - switch (effect) - { - case ITEM_STATUS_CHANGE: - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); - MarkBufferBankForExecution(gActiveBank); - break; - case ITEM_PP_CHANGE: - if (!(gBattleMons[bank].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[bank].unk18_b & gBitTable[i])) - gBattleMons[bank].pp[i] = changedPP; - break; - } - } - } - break; - case 2: - break; - case 3: - for (bank = 0; bank < gNoOfAllBanks; bank++) - { - gLastUsedItem = gBattleMons[bank].item; - if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY) - { - bankHoldEffect = gEnigmaBerries[bank].holdEffect; - bankQuality = gEnigmaBerries[bank].holdEffectParam; - } - else - { - bankHoldEffect = ItemId_GetHoldEffect(gLastUsedItem); - bankQuality = ItemId_GetHoldEffectParam(gLastUsedItem); - } - switch (bankHoldEffect) - { - case HOLD_EFFECT_CURE_PAR: - if (gBattleMons[bank].status1 & STATUS_PARALYSIS) - { - gBattleMons[bank].status1 &= ~(STATUS_PARALYSIS); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureParRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_PSN: - if (gBattleMons[bank].status1 & STATUS_PSN_ANY) - { - gBattleMons[bank].status1 &= ~(STATUS_PSN_ANY | STATUS_TOXIC_COUNTER); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_BerryCurePsnRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_BRN: - if (gBattleMons[bank].status1 & STATUS_BURN) - { - gBattleMons[bank].status1 &= ~(STATUS_BURN); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureBrnRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_FRZ: - if (gBattleMons[bank].status1 & STATUS_FREEZE) - { - gBattleMons[bank].status1 &= ~(STATUS_FREEZE); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureFrzRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_SLP: - if (gBattleMons[bank].status1 & STATUS_SLEEP) - { - gBattleMons[bank].status1 &= ~(STATUS_SLEEP); - gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureSlpRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_CURE_CONFUSION: - if (gBattleMons[bank].status2 & STATUS2_CONFUSION) - { - gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_BerryCureConfusionRet; - effect = ITEM_EFFECT_OTHER; - } - break; - case HOLD_EFFECT_CURE_ATTRACT: - if (gBattleMons[bank].status2 & STATUS2_INFATUATION) - { - gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION); - StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); - b_movescr_stack_push_cursor(); - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; - effect = ITEM_EFFECT_OTHER; - } - break; - case HOLD_EFFECT_CURE_STATUS: - if (gBattleMons[bank].status1 & STATUS_ANY || gBattleMons[bank].status2 & STATUS2_CONFUSION) - { - if (gBattleMons[bank].status1 & STATUS_PSN_ANY) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); - } - if (gBattleMons[bank].status1 & STATUS_SLEEP) - { - gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); - StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); - } - if (gBattleMons[bank].status1 & STATUS_PARALYSIS) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); - } - if (gBattleMons[bank].status1 & STATUS_BURN) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); - } - if (gBattleMons[bank].status1 & STATUS_FREEZE) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); - } - if (gBattleMons[bank].status2 & STATUS2_CONFUSION) - { - StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); - } - gBattleMons[bank].status1 = 0; - gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); - b_movescr_stack_push_cursor(); - gBattleCommunication[MULTISTRING_CHOOSER] = 0; - gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; - effect = ITEM_STATUS_CHANGE; - } - break; - case HOLD_EFFECT_RESTORE_STATS: - for (i = 0; i < 8; i++) - { - if (gBattleMons[bank].statStages[i] < 6) - { - gBattleMons[bank].statStages[i] = 6; - effect = ITEM_STATS_CHANGE; - } - } - if (effect) - { - BATTLE_STRUCT->scriptingActive = bank; - gStringBank = bank; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_WhiteHerbRet; - return effect; // unnecessary return - } - break; - } - if (effect) - { - BATTLE_STRUCT->scriptingActive = bank; - gStringBank = bank; - gActiveBank = bank; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); - MarkBufferBankForExecution(gActiveBank); - break; - } - } - break; - case 4: - if (gBattleMoveDamage) - { - switch (atkHoldEffect) - { - case HOLD_EFFECT_FLINCH: - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (Random() % 100) < bankQuality - && gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED - && gBattleMons[gBankTarget].hp) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 8; - b_movescr_stack_push_cursor(); - SetMoveEffect(0, 0); - b_movescr_stack_pop_cursor(); - } - break; - case HOLD_EFFECT_SHELL_BELL: - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gSpecialStatuses[gBankTarget].moveturnLostHP != 0 - && gSpecialStatuses[gBankTarget].moveturnLostHP != 0xFFFF - && gBankAttacker != gBankTarget - && gBattleMons[gBankAttacker].hp != gBattleMons[gBankAttacker].maxHP - && gBattleMons[gBankAttacker].hp != 0) - { - gLastUsedItem = atkItem; - gStringBank = gBankAttacker; - BATTLE_STRUCT->scriptingActive = gBankAttacker; - gBattleMoveDamage = (gSpecialStatuses[gBankTarget].moveturnLostHP / atkQuality) * -1; - if (gBattleMoveDamage == 0) - gBattleMoveDamage = -1; - gSpecialStatuses[gBankTarget].moveturnLostHP = 0; - b_movescr_stack_push_cursor(); - gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret; - effect++; - } - break; - } - } - break; - } - - return effect; -} - -struct CombinedMove -{ - u16 move1; - u16 move2; - u16 newMove; -}; - -static const struct CombinedMove sCombinedMoves[2] = -{ - {MOVE_EMBER, MOVE_GUST, MOVE_HEAT_WAVE}, - {0xFFFF, 0xFFFF, 0xFFFF} -}; - -void unref_sub_801B40C(void) -{ - int i = 0; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) - { - do - { - u8 bank = 0; - do - { - u8 absent = gAbsentBankFlags; - if (gBitTable[bank] & absent || absent & gBitTable[bank + 2]) - bank++; - else - { - if (sCombinedMoves[i].move1 == gChosenMovesByBanks[bank] && sCombinedMoves[i].move2 == gChosenMovesByBanks[bank + 2]) - { - gSideTimers[GetBankIdentity(bank) & 1].field3 = (bank) | ((bank + 2) << 4); - gSideTimers[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; - gSideAffecting[GetBankIdentity(bank) & 1] |= SIDE_STATUS_X4; - } - if (sCombinedMoves[i].move1 == gChosenMovesByBanks[bank + 2] && sCombinedMoves[i].move2 == gChosenMovesByBanks[bank]) - { - gSideTimers[GetBankIdentity(bank) & 1].field3 = (bank + 2) | ((bank) << 4); - gSideTimers[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; - gSideAffecting[GetBankIdentity(bank) & 1] |= SIDE_STATUS_X4; - } - bank++; - } - } while (bank < 2); - i++; - } while (sCombinedMoves[i].move1 != 0xFFFF); - } -} - -void sub_801B594(void) -{ - if (gBattleExecBuffer == 0) - gBattleScriptingCommandsTable[*gBattlescriptCurrInstr](); -} - -u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target -{ - u8 targetBank = 0; - u8 moveTarget; - u8 side; - - if (useMoveTarget) - moveTarget = useMoveTarget - 1; - else - moveTarget = gBattleMoves[move].target; - - switch (moveTarget) - { - case 0: - side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) - targetBank = gSideTimers[side].followmeTarget; - else - { - side = GetBankSide(gBankAttacker); - do - { - targetBank = Random() % gNoOfAllBanks; - } while (targetBank == gBankAttacker || side == GetBankSide(targetBank) || gAbsentBankFlags & gBitTable[targetBank]); - if (gBattleMoves[move].type == TYPE_ELECTRIC - && AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_LIGHTNING_ROD, 0, 0) - && gBattleMons[targetBank].ability != ABILITY_LIGHTNING_ROD) - { - targetBank ^= 2; - RecordAbilityBattle(targetBank, gBattleMons[targetBank].ability); - gSpecialStatuses[targetBank].lightningRodRedirected = 1; - } - } - break; - case 1: - case 8: - case 32: - case 64: - targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & 1) ^ 1); - if (gAbsentBankFlags & gBitTable[targetBank]) - targetBank ^= 2; - break; - case 4: - side = GetBankSide(gBankAttacker) ^ 1; - if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) - targetBank = gSideTimers[side].followmeTarget; - else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & 4) - { - if (GetBankSide(gBankAttacker) == 0) - { - if (Random() & 1) - targetBank = GetBankByIdentity(1); - else - targetBank = GetBankByIdentity(3); - } - else - { - if (Random() & 1) - targetBank = GetBankByIdentity(0); - else - targetBank = GetBankByIdentity(2); - } - if (gAbsentBankFlags & gBitTable[targetBank]) - targetBank ^= 2; - } - else - targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & 1) ^ 1); - break; - case 2: - case 16: - targetBank = gBankAttacker; - break; - } - ewram16010arr(gBankAttacker) = targetBank; - return targetBank; -} - -u8 IsPokeDisobedient(void) -{ - u8 obedienceLevel; - s32 rnd; - s32 calc; - - if (gBattleTypeFlags & BATTLE_TYPE_LINK - || GetBankSide(gBankAttacker) == 1 - || !IsOtherTrainer(gBattleMons[gBankAttacker].otId, gBattleMons[gBankAttacker].otName) - || FlagGet(FLAG_BADGE08_GET)) - return 0; - - obedienceLevel = 10; - if (FlagGet(FLAG_BADGE02_GET)) - obedienceLevel = 30; - if (FlagGet(FLAG_BADGE04_GET)) - obedienceLevel = 50; - if (FlagGet(FLAG_BADGE06_GET)) - obedienceLevel = 70; - - if (gBattleMons[gBankAttacker].level <= obedienceLevel) - return 0; - rnd = (Random() & 255); - calc = (gBattleMons[gBankAttacker].level + obedienceLevel) * rnd >> 8; - if (calc < obedienceLevel) - return 0; - - // is not obedient - if (gCurrentMove == MOVE_RAGE) - gBattleMons[gBankAttacker].status2 &= ~(STATUS2_RAGE); - if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK)) - { - gBattlescriptCurrInstr = gUnknown_081D995F; - return 1; - } - - rnd = (Random() & 255); - calc = (gBattleMons[gBankAttacker].level + obedienceLevel) * rnd >> 8; - if (calc < obedienceLevel) - { - calc = CheckMoveLimitations(gBankAttacker, gBitTable[gCurrMovePos], 0xFF); - if (calc == 0xF) // all moves cannot be used - { - gBattleCommunication[MULTISTRING_CHOOSER] = Random() & 3; - gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; - return 1; - } - else // use a random move - { - do - { - gCurrMovePos = gUnknown_02024BE5 = Random() & 3; - } while (gBitTable[gCurrMovePos] & calc); - gRandomMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; - gBattleCommunication[3] = 0; - gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove; - gBankTarget = GetMoveTarget(gRandomMove, 0); - gHitMarker |= HITMARKER_x200000; - return 2; - } - } - else - { - obedienceLevel = gBattleMons[gBankAttacker].level - obedienceLevel; - - calc = (Random() & 255); - if (calc < obedienceLevel && !(gBattleMons[gBankAttacker].status1 & STATUS_ANY) && gBattleMons[gBankAttacker].ability != ABILITY_VITAL_SPIRIT && gBattleMons[gBankAttacker].ability != ABILITY_INSOMNIA) - { - // try putting asleep - int i; - for (i = 0; i < gNoOfAllBanks; i++) - { - if (gBattleMons[i].status2 & STATUS2_UPROAR) - break; - } - if (i == gNoOfAllBanks) - { - gBattlescriptCurrInstr = BattleScript_IgnoresAndFallsAsleep; - return 1; - } - } - calc -= obedienceLevel; - if (calc < obedienceLevel) - { - gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankAttacker], MOVE_POUND, 0, 40, 0, gBankAttacker, gBankAttacker); - gBankTarget = gBankAttacker; - gBattlescriptCurrInstr = gUnknown_081D99A0; - gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; - return 2; - } - else - { - gBattleCommunication[MULTISTRING_CHOOSER] = Random() & 3; - gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; - return 1; - } - } -} diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 3b1092e45..5a20a8324 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -1,5 +1,6 @@ #include "global.h" #include "battle.h" +#include "battle_util.h" #include "constants/battle_move_effects.h" #include "constants/moves.h" #include "constants/abilities.h" @@ -101,11 +102,10 @@ extern u16 gTrappingMoves[]; u8 AtkCanceller_UnableToUseMove(void); void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move); void CancelMultiTurnMoves(u8 bank); -void b_movescr_stack_push(u8* BS_ptr); -void b_movescr_stack_push_cursor(void); +void BattleScriptPush(u8* BS_ptr); +void BattleScriptPushCursor(void); void RecordAbilityBattle(u8 bank, u8 ability); void RecordItemBattle(u8 bank, u8 holdEffect); -int IsPokeDisobedient(void); static bool8 IsTwoTurnsMove(u16 move); static void DestinyBondFlagUpdate(void); static void b_wonderguard_and_levitate(void); @@ -122,7 +122,7 @@ extern u8 gBattleBufferB[4][0x200]; void sub_80324F8(struct Pokemon*, u8 bank); void AdjustFriendship(struct Pokemon*, u8 value); bool8 IsTradedMon(struct Pokemon*); -void b_movescr_stack_pop_cursor(void); +void BattleScriptPop(void); void SwitchInClearStructs(void); u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8); u8 GetSetPokedexFlag(u16 nationalNum, u8 caseID); @@ -131,7 +131,6 @@ u8 sub_803FC34(u8 bank); u16 sub_803FBFC(u8 a); u8 GetBankByIdentity(u8 ID); void sub_8012258(u8); -void sub_80157C4(u8 bank); //update sent pokes in battle //MonTryLearningNewMove teach poke a move u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move); void IncrementGameStat(u8 index); @@ -147,21 +146,17 @@ void nullsub_6(void); void ReshowBattleScreenAfterMenu(void); void BattleMainCB2(void); void AddMoney(u32* moneySaveblock, u32 to_give); -void sub_80156DC(void); //set sentpokes value u8 CountAliveMons(u8 caseID); void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); u8 CanRunFromBattle(void); u8 GetMoveTarget(u16 move, u8 targetbyte); //get target of move -void sub_80153D0(u8 atk); //pressure perish song pp decrement u8 CastformDataTypeChange(u8 bank); -void b_push_move_exec(u8* bs_ptr); u8 Overworld_GetMapTypeOfSaveblockLocation(void); u8 CalculatePlayerPartyCount(void); u16 Sqrt(u32 num); u8 sub_809070C(u16 nationalNum, u32 TiD, u32 PiD); //task prepare poke dex display void sub_814A880(u8 a1, u8 a2); u8 CheckMoveLimitations(u8 bank, u8 unusable_moves, u8 flags); -void sub_801529C(u8 bank); bool8 IsLinkDoubleBattle(void); void sub_8094B6C(u8 bank, u8 partyID, u8 r2); @@ -1050,7 +1045,7 @@ static void atk00_attackcanceler(void) gHitMarker &= ~(HITMARKER_x800000); if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) { - u8 disobedient = IsPokeDisobedient(); + u8 disobedient = IsMonDisobedient(); asm("":::"r0"); //It's impossible to match asm("":::"r1"); if ((disobedient)) @@ -1067,7 +1062,7 @@ static void atk00_attackcanceler(void) { PressurePPLose(gBankAttacker, gBankTarget, MOVE_MAGIC_COAT); gProtectStructs[gBankTarget].bounceMove = 0; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; return; } @@ -1078,7 +1073,7 @@ static void atk00_attackcanceler(void) PressurePPLose(gBankAttacker, gBanksByTurnOrder[i], MOVE_SNATCH); gProtectStructs[gBanksByTurnOrder[i]].stealMove = 0; BATTLE_STRUCT->scriptingActive = gBanksByTurnOrder[i]; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SnatchedMove; return; } @@ -1087,7 +1082,7 @@ static void atk00_attackcanceler(void) { gSpecialStatuses[gBankTarget].lightningRodRedirected = 0; gLastUsedAbility = ABILITY_LIGHTNING_ROD; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_TookAttack; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } @@ -1325,7 +1320,7 @@ static void atk03_ppreduce(void) && !((gDisableStructs[gBankAttacker].unk18_b) & gBitTable[gCurrMovePos])) { gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBankAttacker].pp[gCurrMovePos]); + EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + gCurrMovePos, 0, 1, &gBattleMons[gBankAttacker].pp[gCurrMovePos]); MarkBufferBankForExecution(gBankAttacker); } } @@ -1844,7 +1839,7 @@ static void atk09_attackanimation(void) if ((gHitMarker & HITMARKER_NO_ANIMATIONS) && (gCurrentMove != MOVE_TRANSFORM && gCurrentMove != MOVE_SUBSTITUTE)) { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_Pausex20; BATTLE_STRUCT->animTurn += 1; BATTLE_STRUCT->animTargetsHit += 1; @@ -1868,7 +1863,7 @@ static void atk09_attackanimation(void) } else { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_Pausex20; } } @@ -1947,7 +1942,7 @@ static void atk0C_datahpupdate(void) if (gDisableStructs[gActiveBank].substituteHP == 0) { gBattlescriptCurrInstr += 2; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SubstituteFade; return; } @@ -2023,7 +2018,7 @@ static void atk0C_datahpupdate(void) } } gHitMarker &= ~(HITMARKER_x100000); - EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); + EmitSetMonData(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); MarkBufferBankForExecution(gActiveBank); } } @@ -2132,7 +2127,7 @@ static void atk0F_resultmessage(void) gLastUsedItem = gBattleMons[gBankTarget].item; gStringBank = gBankTarget; gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_HangedOnMsg; return; default: @@ -2144,14 +2139,14 @@ static void atk0F_resultmessage(void) gBattleMoveFlags &= ~(MOVESTATUS_ONEHITKO); gBattleMoveFlags &= ~(MOVESTATUS_SUPEREFFECTIVE); gBattleMoveFlags &= ~(MOVESTATUS_NOTVERYEFFECTIVE); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_OneHitKOMsg; return; } else if (gBattleMoveFlags & MOVESTATUS_ENDURED) { gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_EnduredMsg; return; } @@ -2160,7 +2155,7 @@ static void atk0F_resultmessage(void) gLastUsedItem = gBattleMons[gBankTarget].item; gStringBank = gBankTarget; gBattleMoveFlags &= ~(MOVESTATUS_ENDURED | MOVESTATUS_HUNGON); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_HangedOnMsg; return; } @@ -2321,7 +2316,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { gLastUsedAbility = ABILITY_IMMUNITY; RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); //_0801E664: gBattlescriptCurrInstr = BattleScript_PSNPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) @@ -2336,7 +2331,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL) && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PSNPrevention; gBattleCommunication[MULTISTRING_CHOOSER] = 2; return; @@ -2355,7 +2350,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { gLastUsedAbility = ABILITY_WATER_VEIL; RecordAbilityBattle(gEffectBank, ABILITY_WATER_VEIL); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); //_0801E664: gBattlescriptCurrInstr = BattleScript_BRNPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) @@ -2370,7 +2365,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if ((gBattleMons[gEffectBank].type1 == TYPE_FIRE || gBattleMons[gEffectBank].type2 == TYPE_FIRE) && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_BRNPrevention; gBattleCommunication[MULTISTRING_CHOOSER] = 2; return; @@ -2399,7 +2394,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { gLastUsedAbility = ABILITY_LIMBER; RecordAbilityBattle(gEffectBank, ABILITY_LIMBER); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); //_0801E664: gBattlescriptCurrInstr = BattleScript_PRLZPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) @@ -2421,7 +2416,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { gLastUsedAbility = ABILITY_IMMUNITY; RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); //_0801E664: gBattlescriptCurrInstr = BattleScript_PSNPrevention; if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) @@ -2436,7 +2431,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL) && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80)) { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PSNPrevention; gBattleCommunication[MULTISTRING_CHOOSER] = 2; return; @@ -2458,14 +2453,14 @@ void SetMoveEffect(bool8 primary, u8 certainArg) } if (StatusChanged == 1) { - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP) gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2); else gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; gActiveBank = gEffectBank; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1); MarkBufferBankForExecution(gActiveBank); if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD) { @@ -2499,7 +2494,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleMons[gEffectBank].status2 & STATUS2_CONFUSION) {gBattlescriptCurrInstr++; return;} gBattleMons[gEffectBank].status2 |= (((Random()) % 0x4)) + 2; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 8: //flinch @@ -2528,7 +2523,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS; gLockedMoves[gEffectBank] = gCurrentMove; gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 11: //pay day @@ -2539,7 +2534,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (PayDay > gPaydayMoney) gPaydayMoney = 0xFFFF; } - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 9: //tri attack @@ -2561,7 +2556,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) BATTLE_STRUCT->wrappedMove[gEffectBank*2] = (u8)gCurrentMove; (1 + BATTLE_STRUCT->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask. BATTLE_STRUCT->wrappedBy[gEffectBank] = gBankAttacker; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattleCommunication[MULTISTRING_CHOOSER] = 0; while (gBattleCommunication[MULTISTRING_CHOOSER] <= 4 @@ -2572,7 +2567,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattleMoveDamage = (gHP_dealt) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 15 ... 21: //stat + 1 @@ -2581,7 +2576,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one BATTLE_STRUCT->animArg2 = 0; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatUp; } break; @@ -2591,7 +2586,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; BATTLE_STRUCT->animArg2 = 0; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatDown; } break; @@ -2601,7 +2596,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; BATTLE_STRUCT->animArg2 = 0; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatUp; } break; @@ -2611,7 +2606,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; BATTLE_STRUCT->animArg2 = 0; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatDown; } break; @@ -2634,7 +2629,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) {gBattlescriptCurrInstr++; return;} if (gBattleMons[gBankTarget].item && gBattleMons[gBankTarget].ability == ABILITY_STICKY_HOLD) { - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_NoItemSteal; gLastUsedAbility = gBattleMons[gBankTarget].ability; RecordAbilityBattle(gBankTarget, gLastUsedAbility); @@ -2652,14 +2647,14 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattleMons[gBankTarget].item = 0; gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); + EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem); MarkBufferBankForExecution(gBankAttacker); gActiveBank = gBankTarget; - EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].item); + EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].item); MarkBufferBankForExecution(gBankTarget); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_ItemSteal; CHOICED_MOVE(gBankTarget) = 0; @@ -2675,11 +2670,11 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattlescriptCurrInstr++; break; case 34: //ancientpower - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_AllStatsUp; return; case 35: //break free rapidspin - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_RapidSpinAway; return; case 36: //paralysis removal @@ -2687,23 +2682,23 @@ void SetMoveEffect(bool8 primary, u8 certainArg) { gBattleMons[gBankTarget].status1 &= ~(STATUS_PARALYSIS); gActiveBank = gBankTarget; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); MarkBufferBankForExecution(gActiveBank); - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal; } else {gBattlescriptCurrInstr++; return;} break; case 37: //superpower - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_AtkDefDown; return; case 38: //33% recoil gBattleMoveDamage = gHP_dealt / 3; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; break; case 53: //thrash @@ -2734,14 +2729,14 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gLastUsedItem = gBattleMons[gEffectBank].item; gBattleMons[gEffectBank].item = 0; gWishFutureKnock.knockedOffPokes[side] |= gBitTable[gBattlePartyID[gEffectBank]]; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_KnockedOff; CHOICED_MOVE(gEffectBank) = 0; } break; case 59: //overheat - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_SAtkDown2; return; } @@ -3065,7 +3060,7 @@ _0801E64A:\n\ ldr r4, _0801E67C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E680 @ =BattleScript_PSNPrevention\n\ _0801E664:\n\ str r0, [r4]\n\ @@ -3188,7 +3183,7 @@ _0801E72E:\n\ ldr r4, _0801E750 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E754 @ =BattleScript_BRNPrevention\n\ b _0801E664\n\ .align 2, 0\n\ @@ -3228,7 +3223,7 @@ _0801E78E:\n\ ldr r4, _0801E7A0 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E7A4 @ =BattleScript_BRNPrevention\n\ b _0801E998\n\ .align 2, 0\n\ @@ -3379,7 +3374,7 @@ _0801E8A6:\n\ ldr r4, _0801E8C8 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E8CC @ =BattleScript_PRLZPrevention\n\ b _0801E664\n\ .align 2, 0\n\ @@ -3422,7 +3417,7 @@ _0801E8FE:\n\ ldr r4, _0801E93C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E940 @ =BattleScript_PSNPrevention\n\ str r0, [r4]\n\ ldr r2, _0801E944 @ =gHitMarker\n\ @@ -3483,7 +3478,7 @@ _0801E98C:\n\ ldr r4, _0801E9A8 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801E9AC @ =BattleScript_PSNPrevention\n\ _0801E998:\n\ str r0, [r4]\n\ @@ -3556,7 +3551,7 @@ _0801EA1C:\n\ ldr r0, _0801EA5C @ =gBattlescriptCurrInstr\n\ ldr r0, [r0]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects\n\ ldr r0, _0801EA64 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -3621,7 +3616,7 @@ _0801EA84:\n\ movs r1, 0x28\n\ movs r2, 0\n\ movs r3, 0x4\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ ldr r2, _0801EAF0 @ =gHitMarker\n\ @@ -3814,7 +3809,7 @@ _0801EC8E:\n\ ldr r4, _0801ECC8 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801ECCC @ =gMoveEffectBS_Ptrs\n\ ldr r0, _0801ECD0 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -3931,7 +3926,7 @@ _0801ED7C:\n\ ldr r4, _0801EDD0 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801EDD4 @ =gMoveEffectBS_Ptrs\n\ ldr r0, _0801EDD8 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -3977,7 +3972,7 @@ _0801EE14:\n\ ldr r4, _0801EE40 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801EE44 @ =gMoveEffectBS_Ptrs\n\ ldr r0, _0801EE48 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -4112,7 +4107,7 @@ _0801EEE8:\n\ ldr r4, _0801EF98 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801EF9C @ =gMoveEffectBS_Ptrs\n\ ldr r2, _0801EFA0 @ =gBattleCommunication\n\ ldrb r0, [r2, 0x3]\n\ @@ -4177,7 +4172,7 @@ _0801EFC0:\n\ ldr r4, _0801EFE0 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801EFE4 @ =gMoveEffectBS_Ptrs\n\ ldr r0, _0801EFE8 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -4219,7 +4214,7 @@ _0801F008:\n\ ldr r4, _0801F038 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F03C @ =BattleScript_StatUp\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4257,7 +4252,7 @@ _0801F05E:\n\ ldr r4, _0801F08C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F090 @ =BattleScript_StatDown\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4294,7 +4289,7 @@ _0801F0B0:\n\ ldr r4, _0801F0E0 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F0E4 @ =BattleScript_StatUp\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4332,7 +4327,7 @@ _0801F106:\n\ ldr r4, _0801F134 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F138 @ =BattleScript_StatDown\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4545,7 +4540,7 @@ _0801F2B6:\n\ movs r1, 0x2\n\ movs r2, 0\n\ movs r3, 0x2\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ mov r3, r10\n\ ldrb r0, [r3]\n\ bl MarkBufferBankForExecution\n\ @@ -4563,13 +4558,13 @@ _0801F2B6:\n\ movs r1, 0x2\n\ movs r2, 0\n\ movs r3, 0x2\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldrb r0, [r7]\n\ bl MarkBufferBankForExecution\n\ ldr r4, _0801F350 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F354 @ =BattleScript_ItemSteal\n\ str r0, [r4]\n\ ldr r0, _0801F358 @ =0xfffe9f10\n\ @@ -4644,7 +4639,7 @@ _0801F3BC:\n\ ldr r4, _0801F3CC @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F3D0 @ =BattleScript_AllStatsUp\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4654,7 +4649,7 @@ _0801F3D4:\n\ ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F3E8 @ =BattleScript_RapidSpinAway\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4690,13 +4685,13 @@ _0801F406:\n\ movs r1, 0x28\n\ movs r2, 0\n\ movs r3, 0x4\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ ldr r4, _0801F444 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F448 @ =BattleScript_TargetPRLZHeal\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4708,7 +4703,7 @@ _0801F44C:\n\ ldr r4, _0801F45C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F460 @ =BattleScript_AtkDefDown\n\ b _0801F5F8\n\ .align 2, 0\n\ @@ -4729,7 +4724,7 @@ _0801F47A:\n\ ldr r4, _0801F49C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _0801F4A0 @ =gMoveEffectBS_Ptrs\n\ ldr r0, _0801F4A4 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ @@ -4857,7 +4852,7 @@ _0801F540:\n\ ldr r4, _0801F5C8 @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F5CC @ =BattleScript_KnockedOff\n\ str r0, [r4]\n\ ldr r1, _0801F5D0 @ =gSharedMem\n\ @@ -4897,7 +4892,7 @@ _0801F5EC:\n\ ldr r4, _0801F60C @ =gBattlescriptCurrInstr\n\ ldr r0, [r4]\n\ adds r0, 0x1\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _0801F610 @ =BattleScript_SAtkDown2\n\ _0801F5F8:\n\ str r0, [r4]\n\ @@ -4977,7 +4972,7 @@ static void atk19_tryfaintmon(void) { r4 = T1_READ_PTR(gBattlescriptCurrInstr + 3); - b_movescr_stack_pop_cursor(); + BattleScriptPop(); gBattlescriptCurrInstr = r4; gSideAffecting[GetBankSide(gActiveBank)] &= ~SIDE_STATUS_SPIKES_DAMAGED; } @@ -5013,7 +5008,7 @@ static void atk19_tryfaintmon(void) ewram16100arr2(3, bank) = 0; gHitMarker |= HITMARKER_FAINTED(gActiveBank); - b_movescr_stack_push(gBattlescriptCurrInstr + 7); + BattleScriptPush(gBattlescriptCurrInstr + 7); gBattlescriptCurrInstr = r4; if (GetBankSide(gActiveBank) == 0) { @@ -5036,7 +5031,7 @@ static void atk19_tryfaintmon(void) } if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBankAttacker].hp != 0) { - b_movescr_stack_push(gBattlescriptCurrInstr); + BattleScriptPush(gBattlescriptCurrInstr); gBattleMoveDamage = gBattleMons[bank].hp; gBattlescriptCurrInstr = BattleScript_DestinyBondTakesLife; } @@ -5049,10 +5044,10 @@ static void atk19_tryfaintmon(void) u8 moveIndex = ewram1608Carr(gBankAttacker); gBattleMons[gBankAttacker].pp[moveIndex] = 0; - b_movescr_stack_push(gBattlescriptCurrInstr); + BattleScriptPush(gBattlescriptCurrInstr); gBattlescriptCurrInstr = BattleScript_SelectingImprisionedMoveInPalace; gActiveBank = gBankAttacker; - EmitSetAttributes(0, moveIndex + 9, 0, 1, &gBattleMons[gActiveBank].pp[moveIndex]); + EmitSetMonData(0, moveIndex + 9, 0, 1, &gBattleMons[gActiveBank].pp[moveIndex]); MarkBufferBankForExecution(gActiveBank); gBattleTextBuff1[0] = 0xFD; @@ -5087,7 +5082,7 @@ static void atk1B_cleareffectsonfaint(void) { gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); gBattleMons[gActiveBank].status1 = 0; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 0x4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); UndoEffectsAfterFainting(); gBattlescriptCurrInstr += 2; @@ -5476,7 +5471,7 @@ static void atk23_getexp(void) gBattleTextBuff2[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); gBattleTextBuff2[5] = 0xFF; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gLeveledUpInBattle |= gBitTable[BATTLE_STRUCT->expGetterID]; gBattlescriptCurrInstr = BattleScript_LevelUp; gBattleMoveDamage = (gBattleBufferB[gActiveBank][2] | (gBattleBufferB[gActiveBank][3] << 8)); @@ -6353,7 +6348,7 @@ _080206A8:\n\ movs r0, 0x1\n\ negs r0, r0\n\ strb r0, [r4, 0x5]\n\ - bl b_movescr_stack_push_cursor\n\ + bl BattleScriptPushCursor\n\ ldr r2, _080208D8 @ =gLeveledUpInBattle\n\ ldr r1, _080208DC @ =gBitTable\n\ ldrb r0, [r6]\n\ @@ -7282,7 +7277,7 @@ static void atk3B_healthbar_update(void) static void atk3C_return(void) { - b_movescr_stack_pop_cursor(); + BattleScriptPop(); } static void atk3D_end(void) @@ -7301,7 +7296,7 @@ static void atk3E_end2(void) static void atk3F_end3(void) //pops the main function stack { - b_movescr_stack_pop_cursor(); + BattleScriptPop(); if (B_FUNCTION_STACK->size) B_FUNCTION_STACK->size--; gBattleMainFunc = B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size]; @@ -7309,7 +7304,7 @@ static void atk3F_end3(void) //pops the main function stack static void atk41_call(void) { - b_movescr_stack_push(gBattlescriptCurrInstr + 5); + BattleScriptPush(gBattlescriptCurrInstr + 5); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } @@ -7353,7 +7348,7 @@ static void atk45_playanimation(void) } else if (gHitMarker & HITMARKER_NO_ANIMATIONS) { - b_movescr_stack_push(gBattlescriptCurrInstr + 7); + BattleScriptPush(gBattlescriptCurrInstr + 7); gBattlescriptCurrInstr = BattleScript_Pausex20; } else if (gBattlescriptCurrInstr[2] == B_ANIM_RAIN_CONTINUES @@ -7829,7 +7824,7 @@ static void atk49_moveend(void) && gBattleMoves[gCurrentMove].power && gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK] <= 0xB) { gBattleMons[gBankTarget].statStages[STAT_STAGE_ATK]++; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_RageIsBuilding; effect = 1; } @@ -7843,9 +7838,9 @@ static void atk49_moveend(void) { gBattleMons[gBankTarget].status1 &= ~(STATUS_FREEZE); gActiveBank = gBankTarget; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1); MarkBufferBankForExecution(gActiveBank); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; effect = 1; } @@ -7903,10 +7898,9 @@ static void atk49_moveend(void) } BATTLE_STRUCT->cmd49StateTracker++; break; - //sub_8015660 CheckIfMoveFailed case 9: //semi-invlurneable attacker make visible if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - || sub_8015660(gBankAttacker)) + || WasUnableToUseMove(gBankAttacker)) { gActiveBank = gBankAttacker; EmitSpriteInvisibility(0, 0); @@ -7918,7 +7912,7 @@ static void atk49_moveend(void) break; case 10: //semi-invlurneable target make visible if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) - || sub_8015660(gBankTarget)) + || WasUnableToUseMove(gBankTarget)) { gActiveBank = gBankTarget; EmitSpriteInvisibility(0, 0); @@ -8018,7 +8012,7 @@ _08021874:\n\ lsls r0, 2\n\ adds r0, r2\n\ ldr r0, [r0]\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r1, _080218B8 @ =gBattlescriptCurrInstr\n\ ldr r0, _080218BC @ =gUnknown_081D9B2D\n\ bl _0802229C\n\ @@ -8163,7 +8157,7 @@ _080219C8:\n\ bgt _080219FE\n\ adds r0, r2, 0x1\n\ strb r0, [r1, 0x19]\n\ - bl b_movescr_stack_push_cursor\n\ + bl BattleScriptPushCursor\n\ ldr r1, _08021A24 @ =gBattlescriptCurrInstr\n\ ldr r0, _08021A28 @ =BattleScript_RageIsBuilding\n\ str r0, [r1]\n\ @@ -8258,10 +8252,10 @@ _08021A92:\n\ movs r1, 0x28\n\ movs r2, 0\n\ movs r3, 0x4\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldrb r0, [r4]\n\ bl MarkBufferBankForExecution\n\ - bl b_movescr_stack_push_cursor\n\ + bl BattleScriptPushCursor\n\ ldr r1, _08021AE8 @ =gBattlescriptCurrInstr\n\ ldr r0, _08021AEC @ =BattleScript_DefrostedViaFireMove\n\ str r0, [r1]\n\ @@ -8571,7 +8565,7 @@ _08021D18:\n\ cmp r0, 0\n\ beq _08021D44\n\ adds r0, r2, 0\n\ - bl sub_8015660\n\ + bl WasUnableToUseMove\n\ lsls r0, 24\n\ cmp r0, 0\n\ beq _08021D7E\n\ @@ -10637,7 +10631,7 @@ static void atk52_switchineffects(void) gBattleMoveDamage = 1; BATTLE_STRUCT->scriptingActive = gActiveBank; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) gBattlescriptCurrInstr = BattleScript_SpikesOnTarget; @@ -11457,7 +11451,7 @@ void atk6A_removeitem(void) USED_HELD_ITEMS(gActiveBank) = gBattleMons[gActiveBank].item; gBattleMons[gActiveBank].item = 0; - EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); + EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 2; } @@ -11900,7 +11894,7 @@ _08024C48: .4byte gBattlescriptCurrInstr\n\ static void atk6D_resetsentmonsvalue(void) { - sub_80156DC(); + ResetSentPokesToOpponentValue(); gBattlescriptCurrInstr++; } @@ -12148,7 +12142,7 @@ static void atk79_setatkhptozero(void) gActiveBank = gBankAttacker; gBattleMons[gActiveBank].hp = 0; - EmitSetAttributes(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); + EmitSetMonData(0, REQUEST_HP_BATTLE, 0, 2, &gBattleMons[gActiveBank].hp); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr++; @@ -12333,7 +12327,7 @@ static void atk81_trysetrest(void) gBattleCommunication[MULTISTRING_CHOOSER] = 0; gBattleMons[gBankTarget].status1 = 3; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 5; } @@ -12509,7 +12503,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) gBattlescriptCurrInstr = bs_ptr; else { - b_movescr_stack_push(bs_ptr); + BattleScriptPush(bs_ptr); BATTLE_STRUCT->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_MistProtected; gSpecialStatuses[gActiveBank].statloweringflag = 1; @@ -12530,7 +12524,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) gBattlescriptCurrInstr = bs_ptr; else { - b_movescr_stack_push(bs_ptr); + BattleScriptPush(bs_ptr); BATTLE_STRUCT->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -12544,7 +12538,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) { if (flags == 1) { - b_movescr_stack_push(bs_ptr); + BattleScriptPush(bs_ptr); BATTLE_STRUCT->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -12556,7 +12550,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) { if (flags == 1) { - b_movescr_stack_push(bs_ptr); + BattleScriptPush(bs_ptr); BATTLE_STRUCT->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -12774,7 +12768,7 @@ _08025F0C: .4byte gSpecialStatuses\n\ _08025F10: .4byte gBattlescriptCurrInstr\n\ _08025F14:\n\ mov r0, r8\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _08025F40 @ =gSharedMem\n\ ldr r6, _08025F44 @ =gActiveBank\n\ ldrb r1, [r6]\n\ @@ -12869,7 +12863,7 @@ _08025FD8: .4byte gSpecialStatuses\n\ _08025FDC: .4byte gBattlescriptCurrInstr\n\ _08025FE0:\n\ mov r0, r8\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _08026028 @ =gSharedMem\n\ ldr r2, _0802602C @ =gActiveBank\n\ ldrb r1, [r2]\n\ @@ -12926,7 +12920,7 @@ _08026040:\n\ cmp r5, 0x1\n\ bne _08025F74\n\ mov r0, r8\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _08026094 @ =gSharedMem\n\ ldr r3, _08026090 @ =gActiveBank\n\ ldrb r1, [r3]\n\ @@ -12974,7 +12968,7 @@ _080260A8:\n\ b _08025F74\n\ _080260CA:\n\ mov r0, r8\n\ - bl b_movescr_stack_push\n\ + bl BattleScriptPush\n\ ldr r0, _08026100 @ =gSharedMem\n\ ldr r3, _080260FC @ =gActiveBank\n\ ldrb r1, [r3]\n\ @@ -13470,7 +13464,7 @@ static void atk91_givepaydaymoney(void) gBattleTextBuff1[4] = gPaydayMoney; gBattleTextBuff1[5] = uBYTE1_16(gPaydayMoney); gBattleTextBuff1[6] = 0xFF; - b_movescr_stack_push(gBattlescriptCurrInstr + 1); + BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_PrintPayDayMoneyString; } else @@ -14766,7 +14760,7 @@ static void atkA8_copymovepermanently(void) moves_data.pp[i] = gBattleMons[gBankAttacker].pp[i]; } moves_data.ppBonuses = gBattleMons[gBankAttacker].ppBonuses; - EmitSetAttributes(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct move_pp), &moves_data); + EmitSetMonData(0, REQUEST_MOVES_PP_BATTLE, 0, sizeof(struct move_pp), &moves_data); MarkBufferBankForExecution(gActiveBank); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; @@ -14909,7 +14903,7 @@ static void atkAD_tryspiteppreduce(void) if (!(gDisableStructs[gActiveBank].unk18_b & gBitTable[i]) && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) { - EmitSetAttributes(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBank].pp[i]); + EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBank].pp[i]); MarkBufferBankForExecution(gActiveBank); } gBattlescriptCurrInstr += 5; @@ -14992,7 +14986,7 @@ static void atkAE_healpartystatus(void) } //missing check? gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, to_heal, 4, &zero); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, to_heal, 4, &zero); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr++; @@ -15052,7 +15046,7 @@ static void atkB2_trysetperishsong(void) } } - sub_80153D0(gBankAttacker); + PressurePPLoseOnUsingPerishSong(gBankAttacker); if (not_affected_pokes == gNoOfAllBanks) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else @@ -15320,21 +15314,21 @@ static void atkBE_rapidspinfree(void) //rapid spin gBattleTextBuff1[2] = ewram16004arr(0, gBankAttacker); gBattleTextBuff1[3] = ewram16004arr(1, gBankAttacker); gBattleTextBuff1[4] = 0xFF; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_WrapFree; } else if (gStatuses3[gBankAttacker] & STATUS3_LEECHSEED) { gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED); gStatuses3[gBankAttacker] &= ~(STATUS3_LEECHSEED_BANK); - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_LeechSeedFree; } else if (gSideAffecting[GetBankSide(gBankAttacker)] & SIDE_STATUS_SPIKES) { gSideAffecting[GetBankSide(gBankAttacker)] &= ~(SIDE_STATUS_SPIKES); gSideTimers[GetBankSide(gBankAttacker)].spikesAmount = 0; - b_movescr_stack_push_cursor(); + BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SpikesFree; } else @@ -15952,7 +15946,7 @@ static void atkCC_callterrainattack(void) //nature power gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); gCurrentMove = sNaturePowerMoves[gBattleTerrain]; gBankTarget = GetMoveTarget(gCurrentMove, 0); - b_movescr_stack_push(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); + BattleScriptPush(gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]); gBattlescriptCurrInstr++; } @@ -15963,7 +15957,7 @@ static void atkCD_cureifburnedparalysedorpoisoned(void) //refresh gBattleMons[gBankAttacker].status1 = 0; gBattlescriptCurrInstr += 5; gActiveBank = gBankAttacker; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); } else @@ -16222,7 +16216,7 @@ _0802A36C:\n\ movs r1, 0x2\n\ movs r2, 0\n\ movs r3, 0x2\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldr r2, _0802A45C @ =gBankAttacker\n\ ldrb r0, [r2]\n\ bl MarkBufferBankForExecution\n\ @@ -16240,7 +16234,7 @@ _0802A36C:\n\ movs r1, 0x2\n\ movs r2, 0\n\ movs r3, 0x2\n\ - bl EmitSetAttributes\n\ + bl EmitSetMonData\n\ ldrb r0, [r7]\n\ bl MarkBufferBankForExecution\n\ ldr r0, _0802A464 @ =0xfffe9f10\n\ @@ -16471,7 +16465,7 @@ static void atkDB_tryimprision(void) else { u8 bank; - sub_801529C(gBankAttacker); + PressurePPLoseOnUsingImprision(gBankAttacker); for (bank = 0; bank < gNoOfAllBanks; bank++) { if (r8 != GetBankSide(bank)) @@ -16826,7 +16820,7 @@ static void atkE2_switchoutabilities(void) { case ABILITY_NATURAL_CURE: gBattleMons[gActiveBank].status1 = 0; - EmitSetAttributes(0, REQUEST_STATUS_BATTLE, gBitTable[ewram16064arr(gActiveBank)], 4, &gBattleMons[gActiveBank].status1); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, gBitTable[ewram16064arr(gActiveBank)], 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); break; } @@ -16922,7 +16916,7 @@ static void atkE7_trycastformdatachange(void) form = CastformDataTypeChange(BATTLE_STRUCT->scriptingActive); if (form) { - b_push_move_exec(BattleScript_CastformChange); + BattleScriptPushCursorAndCallback(BattleScript_CastformChange); BATTLE_STRUCT->castformToChangeInto = form - 1; } } @@ -16984,7 +16978,7 @@ static void atkEA_tryrecycleitem(void) gLastUsedItem = *used_item; *used_item = 0; gBattleMons[gActiveBank].item = gLastUsedItem; - EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); + EmitSetMonData(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gActiveBank].item); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr += 5; } diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c new file mode 100644 index 000000000..9dc030a1a --- /dev/null +++ b/src/battle/battle_util.c @@ -0,0 +1,3479 @@ +#include "global.h" +#include "battle.h" +#include "battle_util.h" +#include "data2.h" +#include "event_data.h" +#include "ewram.h" +#include "item.h" +#include "link.h" +#include "pokemon.h" +#include "random.h" +#include "rom_8077ABC.h" +#include "string_util.h" +#include "text.h" +#include "util.h" +#include "constants/abilities.h" +#include "constants/battle_move_effects.h" +#include "constants/flags.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/species.h" +#include "constants/weather.h" + +extern u8* gBattlescriptCurrInstr; +extern u8 gActiveBank; +extern u8 gBattleBufferB[4][0x200]; +extern u8* gUnknown_02024C1C[4]; //battlescript location when you try to choose a move you're not allowed to +extern u16 gLastUsedMove[4]; +extern struct BattlePokemon gBattleMons[4]; +extern struct BattleEnigmaBerry gEnigmaBerries[4]; +extern u8 gStringBank; +extern u16 gLastUsedItem; +extern u16 gCurrentMove; +extern const u32 gBitTable[]; +extern u16 gBattleTypeFlags; +extern u8 gNoOfAllBanks; +extern u32 gStatuses3[4]; +extern u8 gBankAttacker; +extern u8 gBankTarget; +extern u8 gBanksByTurnOrder[4]; +extern u16 gSideAffecting[2]; +extern u16 gBattleWeather; +extern void (*gBattleMainFunc)(void); +extern u8 gAbsentBankFlags; +extern u8 gBattleCommunication[]; +extern u32 gHitMarker; +extern u8 gEffectBank; +extern u8 gBank1; +extern s32 gBattleMoveDamage; +extern u16 gBattlePartyID[4]; +extern u16 gChosenMovesByBanks[4]; +extern s32 gTakenDmg[4]; +extern u8 gTakenDmgBanks[4]; +extern u8 gBattleMoveFlags; +extern u8 gLastUsedAbility; +extern u8 gBattleTextBuff2[]; +extern u8 gCurrentActionFuncId; +extern struct BattleEnigmaBerry gEnigmaBerries[4]; +extern u8 gUnknown_02024BE5; +extern u8 gCurrMovePos; +extern u16 gRandomMove; +extern s32 gBattleMoveDamage; +extern u16 gDynamicBasePower; +extern u32 gBattleExecBuffer; +extern u8 gSentPokesToOpponent[2]; +extern const u16 gSoundMovesTable[]; +extern const u8 gStatusConditionString_PoisonJpn[]; +extern const u8 gStatusConditionString_SleepJpn[]; +extern const u8 gStatusConditionString_ParalysisJpn[]; +extern const u8 gStatusConditionString_BurnJpn[]; +extern const u8 gStatusConditionString_IceJpn[]; +extern const u8 gStatusConditionString_ConfusionJpn[]; +extern const u8 gStatusConditionString_LoveJpn[]; +extern const BattleCmdFunc gBattleScriptingCommandsTable[]; + +u8 IsImprisoned(u8 bank, u16 move); +u8 GetBankByIdentity(u8 ID); +u8 GetBankIdentity(u8 bank); +u8 GetBankSide(u8 bank); +void SetMoveEffect(bool8 primary, u8 certainArg); +bool8 UproarWakeUpCheck(u8 bank); +bool8 sub_8018018(u8 bank, u8, u8); +s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def); +u8 CountTrailingZeroBits(u32 a); +u8 GetMoveTarget(u16 move, u8 useMoveTarget); +u8 sub_803FC34(u8 bank); +u16 sub_803FBFC(u8 a); +u8 weather_get_current(void); +void RecordAbilityBattle(u8 bank, u8 ability); +void RecordItemBattle(u8 bank, u8 holdEffect); +s8 GetPokeFlavourRelation(u32 pid, u8 flavor); + +extern u8 BattleScript_MoveSelectionDisabledMove[]; +extern u8 BattleScript_MoveSelectionTormented[]; +extern u8 BattleScript_MoveSelectionTaunted[]; +extern u8 BattleScript_MoveSelectionImprisoned[]; +extern u8 BattleScript_MoveSelectionChoiceBanded[]; +extern u8 BattleScript_MoveSelectionNoPP[]; +extern u8 BattleScript_NoMovesLeft[]; +extern u8 BattleScript_WishComesTrue[]; +extern u8 BattleScript_IngrainTurnHeal[]; +extern u8 BattleScript_LeechSeedTurnDrain[]; +extern u8 BattleScript_PoisonTurnDmg[]; +extern u8 BattleScript_BurnTurnDmg[]; +extern u8 BattleScript_NightmareTurnDmg[]; +extern u8 BattleScript_CurseTurnDmg[]; +extern u8 BattleScript_WrapTurnDmg[]; +extern u8 BattleScript_WrapEnds[]; +extern u8 BattleScript_DisabledNoMore[]; +extern u8 BattleScript_EncoredNoMore[]; + +extern u8 BattleScript_SideStatusWoreOff[]; +extern u8 BattleScript_RainContinuesOrEnds[]; +extern u8 BattleScript_SandStormHailEnds[]; +extern u8 BattleScript_DamagingWeatherContinues[]; +extern u8 BattleScript_SunlightFaded[]; +extern u8 BattleScript_SunlightContinues[]; +extern u8 BattleScript_SafeguardEnds[]; +extern u8 BattleScript_MonWokeUpInUproar[]; //uproar wakeup BS +extern u8 BattleScript_PrintUproarOverTurns[]; //uproar BS +extern u8 BattleScript_ThrashConfuses[]; +extern u8 BattleScript_YawnMakesAsleep[]; +extern u8 BattleScript_MonTookFutureAttack[]; +extern u8 BattleScript_PerishSongHits[]; +extern u8 BattleScript_PerishSongTimerGoesDown[]; +extern u8 BattleScript_GiveExp[]; +extern u8 BattleScript_HandleFaintedMon[]; + +extern u8 BattleScript_MoveUsedIsAsleep[]; +extern u8 BattleScript_MoveUsedWokeUp[]; +extern u8 BattleScript_MoveUsedIsFrozen[]; +extern u8 BattleScript_MoveUsedUnfroze[]; +extern u8 BattleScript_MoveUsedLoafingAround[]; +extern u8 BattleScript_MoveUsedMustRecharge[]; +extern u8 BattleScript_MoveUsedFlinched[]; +extern u8 BattleScript_MoveUsedIsDisabled[]; +extern u8 BattleScript_MoveUsedIsTaunted[]; +extern u8 BattleScript_MoveUsedIsImprisoned[]; +extern u8 BattleScript_MoveUsedIsConfused[]; +extern u8 BattleScript_MoveUsedIsConfusedNoMore[]; +extern u8 BattleScript_MoveUsedIsParalyzed[]; +extern u8 BattleScript_MoveUsedIsParalyzedCantAttack[]; +extern u8 BattleScript_MoveUsedIsInLove[]; +extern u8 BattleScript_BideStoringEnergy[]; +extern u8 BattleScript_BideAttack[]; +extern u8 BattleScript_BideNoEnergyToAttack[]; + +extern u8 BattleScript_OverworldWeatherStarts[]; //load weather from overworld +extern u8 BattleScript_DrizzleActivates[]; +extern u8 BattleScript_SandstreamActivates[]; +extern u8 BattleScript_DroughtActivates[]; +extern u8 BattleScript_CastformChange[]; +extern u8 BattleScript_RainDishActivates[]; +extern u8 BattleScript_ShedSkinActivates[]; +extern u8 BattleScript_SpeedBoostActivates[]; +extern u8 BattleScript_SoundproofProtected[]; +extern u8 BattleScript_MoveHPDrain[]; +extern u8 BattleScript_MoveHPDrain_PPLoss[]; +extern u8 BattleScript_FlashFireBoost[]; +extern u8 BattleScript_FlashFireBoost_PPLoss[]; +extern u8 BattleScript_MoveHPDrain_FullHP[]; +extern u8 BattleScript_MoveHPDrain_FullHP_PPLoss[]; +extern u8 BattleScript_ColorChangeActivates[]; +extern u8 BattleScript_RoughSkinActivates[]; +extern u8 BattleScript_ApplySecondaryEffect[]; +extern u8 BattleScript_CuteCharmActivates[]; +extern u8 BattleScript_AbilityCuredStatus[]; //ability status clear +extern u8 BattleScript_SynchronizeActivates[]; +extern u8 gUnknown_081D978C[]; //intimidate1 +extern u8 gUnknown_081D9795[]; //intimidate2 +extern u8 BattleScript_TraceActivates[]; + +extern u8 BattleScript_WhiteHerbEnd2[]; +extern u8 BattleScript_WhiteHerbRet[]; +extern u8 BattleScript_ItemHealHP_RemoveItem[]; +extern u8 BattleScript_BerryPPHealEnd2[]; +extern u8 BattleScript_ItemHealHP_End2[]; +extern u8 BattleScript_BerryConfuseHealEnd2[]; +extern u8 BattleScript_BerryStatRaiseEnd2[]; +extern u8 BattleScript_BerryFocusEnergyEnd2[]; +extern u8 BattleScript_BerryCurePrlzEnd2[]; +extern u8 BattleScript_BerryCurePsnEnd2[]; +extern u8 BattleScript_BerryCureBrnEnd2[]; +extern u8 BattleScript_BerryCureFrzEnd2[]; +extern u8 BattleScript_BerryCureSlpEnd2[]; +extern u8 BattleScript_BerryCureConfusionEnd2[]; +extern u8 BattleScript_BerryCureChosenStatusEnd2[]; //berry cure any status end2 +extern u8 BattleScript_BerryCureParRet[]; +extern u8 BattleScript_BerryCurePsnRet[]; +extern u8 BattleScript_BerryCureBrnRet[]; +extern u8 BattleScript_BerryCureFrzRet[]; +extern u8 BattleScript_BerryCureSlpRet[]; +extern u8 BattleScript_BerryCureConfusionRet[]; +extern u8 BattleScript_BerryCureChosenStatusRet[]; //berry cure any status return + +extern u8 BattleScript_ItemHealHP_Ret[]; + +extern u8 gUnknown_081D995F[]; //disobedient while asleep +extern u8 BattleScript_IgnoresAndUsesRandomMove[]; //disobedient, uses a random move +extern u8 BattleScript_IgnoresAndFallsAsleep[]; //disobedient, went to sleep +extern u8 gUnknown_081D99A0[]; //disobedient, hits itself + +//array entries for battle communication +#define MOVE_EFFECT_BYTE 0x3 +#define MULTISTRING_CHOOSER 0x5 +#define MSG_DISPLAY 0x7 + +u8 GetBattleBank(u8 caseId) +{ + u8 ret = 0; + switch (caseId) + { + case BS_GET_TARGET: + ret = gBankTarget; + break; + case BS_GET_ATTACKER: + ret = gBankAttacker; + break; + case BS_GET_EFFECT_BANK: + ret = gEffectBank; + break; + case BS_GET_BANK_0: + ret = 0; + break; + case BS_GET_SCRIPTING_BANK: + ret = ewram16003; + break; + case BS_GET_gBank1: + ret = gBank1; + break; + case 5: + ret = gBank1; + break; + } + return ret; +} + +void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move) +{ + s32 i; + + if (gBattleMons[bankDef].ability != ABILITY_PRESSURE) + return; + + for (i = 0; i < 4; i++) + { + if (gBattleMons[bankAtk].moves[i] == move) + break; + } + + if (i == 4) // mons don't share any moves + return; + + if (gBattleMons[bankAtk].pp[i] != 0) + gBattleMons[bankAtk].pp[i]--; + + if (!(gBattleMons[bankAtk].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[bankAtk].unk18_b & gBitTable[i])) + { + gActiveBank = bankAtk; + EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + i, 0, 1, &gBattleMons[gActiveBank].pp[i]); + MarkBufferBankForExecution(gActiveBank); + } +} + +void PressurePPLoseOnUsingImprision(u8 bankAtk) +{ + s32 i, j; + s32 imprisionPos = 4; + u8 atkSide = GetBankSide(bankAtk); + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (atkSide != GetBankSide(i) && gBattleMons[i].ability == ABILITY_PRESSURE) + { + for (j = 0; j < 4; j++) + { + if (gBattleMons[bankAtk].moves[j] == MOVE_IMPRISON) + break; + } + if (j != 4) + { + imprisionPos = j; + if (gBattleMons[bankAtk].pp[j] != 0) + gBattleMons[bankAtk].pp[j]--; + } + } + } + + if (imprisionPos != 4 + && !(gBattleMons[bankAtk].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[bankAtk].unk18_b & gBitTable[imprisionPos])) + { + gActiveBank = bankAtk; + EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + imprisionPos, 0, 1, &gBattleMons[gActiveBank].pp[imprisionPos]); + MarkBufferBankForExecution(gActiveBank); + } +} + +void PressurePPLoseOnUsingPerishSong(u8 bankAtk) +{ + s32 i, j; + s32 perishSongPos = 4; + + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].ability == ABILITY_PRESSURE && i != bankAtk) + { + for (j = 0; j < 4; j++) + { + if (gBattleMons[bankAtk].moves[j] == MOVE_PERISH_SONG) + break; + } + if (j != 4) + { + perishSongPos = j; + if (gBattleMons[bankAtk].pp[j] != 0) + gBattleMons[bankAtk].pp[j]--; + } + } + } + + if (perishSongPos != 4 + && !(gBattleMons[bankAtk].status2 & STATUS2_TRANSFORMED) + && !(gDisableStructs[bankAtk].unk18_b & gBitTable[perishSongPos])) + { + gActiveBank = bankAtk; + EmitSetMonData(0, REQUEST_PPMOVE1_BATTLE + perishSongPos, 0, 1, &gBattleMons[gActiveBank].pp[perishSongPos]); + MarkBufferBankForExecution(gActiveBank); + } +} + + +void MarkAllBufferBanksForExecution(void) // unused +{ + s32 i; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + for (i = 0; i < gNoOfAllBanks; i++) + gBattleExecBuffer |= gBitTable[i] << 0x1C; + } + else + { + for (i = 0; i < gNoOfAllBanks; i++) + gBattleExecBuffer |= gBitTable[i]; + } +} + +void MarkBufferBankForExecution(u8 bank) +{ + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gBattleExecBuffer |= gBitTable[bank] << 0x1C; + } + else + { + gBattleExecBuffer |= gBitTable[bank]; + } +} + +void sub_80155A4(u8 arg0) +{ + s32 i; + + for (i = 0; i < GetLinkPlayerCount(); i++) + gBattleExecBuffer |= gBitTable[arg0] << (i << 2); + + gBattleExecBuffer &= ~(0x10000000 << arg0); +} + +void CancelMultiTurnMoves(u8 bank) +{ + gBattleMons[bank].status2 &= ~(STATUS2_MULTIPLETURNS); + gBattleMons[bank].status2 &= ~(STATUS2_LOCK_CONFUSE); + gBattleMons[bank].status2 &= ~(STATUS2_UPROAR); + gBattleMons[bank].status2 &= ~(STATUS2_BIDE); + + gStatuses3[bank] &= ~(STATUS3_SEMI_INVULNERABLE); + + gDisableStructs[bank].rolloutTimer1 = 0; + gDisableStructs[bank].furyCutterCounter = 0; +} + +bool8 WasUnableToUseMove(u8 bank) +{ + if (gProtectStructs[bank].prlzImmobility + || gProtectStructs[bank].notEffective + || gProtectStructs[bank].usedImprisionedMove + || gProtectStructs[bank].loveImmobility + || gProtectStructs[bank].usedDisabledMove + || gProtectStructs[bank].usedTauntedMove + || gProtectStructs[bank].flag2Unknown + || gProtectStructs[bank].flinchImmobility + || gProtectStructs[bank].confusionSelfDmg) + return TRUE; + else + return FALSE; +} + +void PrepareStringBattle(u16 stringId, u8 bank) +{ + gActiveBank = bank; + EmitPrintString(0, stringId); + MarkBufferBankForExecution(gActiveBank); +} + +void ResetSentPokesToOpponentValue(void) +{ + s32 i; + u32 bits = 0; + + gSentPokesToOpponent[0] = 0; + gSentPokesToOpponent[1] = 0; + + for (i = 0; i < gNoOfAllBanks; i += 2) + bits |= gBitTable[gBattlePartyID[i]]; + + for (i = 1; i < gNoOfAllBanks; i += 2) + gSentPokesToOpponent[(i & BIT_MON) >> 1] = bits; +} + +void sub_8015740(u8 bank) +{ + s32 i = 0; + u32 bits = 0; + + if (GetBankSide(bank) == SIDE_OPPONENT) + { + u8 id = ((bank & BIT_MON) >> 1); + gSentPokesToOpponent[id] = 0; + + for (i = 0; i < gNoOfAllBanks; i += 2) + { + if (!(gAbsentBankFlags & gBitTable[i])) + bits |= gBitTable[gBattlePartyID[i]]; + } + + gSentPokesToOpponent[id] = bits; + } +} + +void sub_80157C4(u8 bank) +{ + if (GetBankSide(bank) == SIDE_OPPONENT) + { + sub_8015740(bank); + } + else + { + s32 i; + for (i = 1; i < gNoOfAllBanks; i++) + gSentPokesToOpponent[(i & BIT_MON) >> 1] |= gBitTable[gBattlePartyID[bank]]; + } +} + +void BattleScriptPush(u8* BS_ptr) +{ + B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = BS_ptr; +} + +void BattleScriptPushCursor(void) +{ + B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = gBattlescriptCurrInstr; +} + +void BattleScriptPop(void) +{ + gBattlescriptCurrInstr = B_BATTLESCRIPTS_STACK->ptr[--B_BATTLESCRIPTS_STACK->size]; +} + +u8 TrySetCantSelectMoveBattleScript(void) //msg can't select a move +{ + u8 limitations = 0; + u16 move = gBattleMons[gActiveBank].moves[gBattleBufferB[gActiveBank][2]]; + u8 holdEffect; + u16* choicedMove = CHOICED_MOVE(gActiveBank); + if (gDisableStructs[gActiveBank].disabledMove == move && move) + { + BATTLE_STRUCT->scriptingActive = gActiveBank; + gCurrentMove = move; + gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionDisabledMove; + limitations++; + } + if (move == gLastUsedMove[gActiveBank] && move != MOVE_STRUGGLE && gBattleMons[gActiveBank].status2 & STATUS2_TORMENT) + { + CancelMultiTurnMoves(gActiveBank); + gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionTormented; + limitations++; + } + if (gDisableStructs[gActiveBank].tauntTimer1 && gBattleMoves[move].power == 0) + { + gCurrentMove = move; + gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionTaunted; + limitations++; + } + if (IsImprisoned(gActiveBank, move)) + { + gCurrentMove = move; + gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionImprisoned; + limitations++; + } + if (gBattleMons[gActiveBank].item == ITEM_ENIGMA_BERRY) + holdEffect = gEnigmaBerries[gActiveBank].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(gBattleMons[gActiveBank].item); + gStringBank = gActiveBank; + if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != move) + { + gCurrentMove = *choicedMove; + gLastUsedItem = gBattleMons[gActiveBank].item; + gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionChoiceBanded; + limitations++; + } + if (gBattleMons[gActiveBank].pp[gBattleBufferB[gActiveBank][2]] == 0) + { + gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionNoPP; + limitations++; + } + return limitations; +} + +#define MOVE_LIMITATION_ZEROMOVE (1 << 0) +#define MOVE_LIMITATION_PP (1 << 1) +#define MOVE_LIMITATION_DISABLED (1 << 2) +#define MOVE_LIMITATION_TORMENTED (1 << 3) +#define MOVE_LIMITATION_TAUNT (1 << 4) +#define MOVE_LIMITATION_IMPRISION (1 << 5) + +u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check) +{ + u8 holdEffect; + u16* choicedMove = CHOICED_MOVE(bank); + s32 i; + if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY) + holdEffect = gEnigmaBerries[bank].holdEffect; + else + holdEffect = ItemId_GetHoldEffect(gBattleMons[bank].item); + gStringBank = bank; + for (i = 0; i < 4; i++) + { + if (gBattleMons[bank].moves[i] == 0 && check & MOVE_LIMITATION_ZEROMOVE) + unusableMoves |= gBitTable[i]; + if (gBattleMons[bank].pp[i] == 0 && check & MOVE_LIMITATION_PP) + unusableMoves |= gBitTable[i]; + if (gBattleMons[bank].moves[i] == gDisableStructs[bank].disabledMove && check & MOVE_LIMITATION_DISABLED) + unusableMoves |= gBitTable[i]; + if (gBattleMons[bank].moves[i] == gLastUsedMove[bank] && check & MOVE_LIMITATION_TORMENTED && gBattleMons[bank].status2 & STATUS2_TORMENT) + unusableMoves |= gBitTable[i]; + if (gDisableStructs[bank].tauntTimer1 && check & MOVE_LIMITATION_TAUNT && gBattleMoves[gBattleMons[bank].moves[i]].power == 0) + unusableMoves |= gBitTable[i]; + if (IsImprisoned(bank, gBattleMons[bank].moves[i]) && check & MOVE_LIMITATION_IMPRISION) + unusableMoves |= gBitTable[i]; + if (gDisableStructs[bank].encoreTimer1 && gDisableStructs[bank].encoredMove != gBattleMons[bank].moves[i]) + unusableMoves |= gBitTable[i]; + if (holdEffect == HOLD_EFFECT_CHOICE_BAND && *choicedMove != 0 && *choicedMove != 0xFFFF && *choicedMove != gBattleMons[bank].moves[i]) + unusableMoves |= gBitTable[i]; + } + return unusableMoves; +} + +bool8 AreAllMovesUnusable(void) +{ + u8 unusable; + unusable = CheckMoveLimitations(gActiveBank, 0, 0xFF); + if (unusable == 0xF) //all moves are unusable + { + gProtectStructs[gActiveBank].onlyStruggle = 1; + gUnknown_02024C1C[gActiveBank] = BattleScript_NoMovesLeft; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + gBattleBufferB[gActiveBank][3] = GetBankByIdentity((GetBankIdentity(gActiveBank) ^ 1) | (Random() & 2)); + else + gBattleBufferB[gActiveBank][3] = GetBankByIdentity(GetBankIdentity(gActiveBank) ^ 1); + } + else + gProtectStructs[gActiveBank].onlyStruggle = 0; + return (unusable == 0xF); +} + +u8 IsImprisoned(u8 bank, u16 move) +{ + u8 imprisionedMoves = 0; + u8 bankSide = GetBankSide(bank); + s32 i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (bankSide != GetBankSide(i) && gStatuses3[i] & STATUS3_IMPRISIONED) + { + s32 j; + for (j = 0; j < 4; j++) + { + if (move == gBattleMons[i].moves[j]) + break; + } + if (j < 4) + imprisionedMoves++; + } + } + return imprisionedMoves; +} + +u8 UpdateTurnCounters(void) +{ + u8 effect = 0; + s32 i; + + for (gBankAttacker = 0; gBankAttacker < gNoOfAllBanks && gAbsentBankFlags & gBitTable[gBankAttacker]; gBankAttacker++) + { + } + for (gBankTarget = 0; gBankTarget < gNoOfAllBanks && gAbsentBankFlags & gBitTable[gBankTarget]; gBankTarget++) + { + } + + do + { + u8 sideBank; + + switch (BATTLE_STRUCT->turncountersTracker) + { + case 0: + for (i = 0; i < gNoOfAllBanks; i++) + { + gBanksByTurnOrder[i] = i; + } + for (i = 0; i < gNoOfAllBanks - 1; i++) + { + s32 j; + for (j = i + 1; j < gNoOfAllBanks; j++) + { + if (GetWhoStrikesFirst(gBanksByTurnOrder[i], gBanksByTurnOrder[j], 0)) + SwapTurnOrder(i, j); + } + } + BATTLE_STRUCT->turncountersTracker++; + BATTLE_STRUCT->turnSideTracker = 0; + case 1: + while (BATTLE_STRUCT->turnSideTracker < 2) + { + gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + + if (gSideAffecting[sideBank] & SIDE_STATUS_REFLECT) + { + if (--gSideTimers[sideBank].reflectTimer == 0) + { + + gSideAffecting[sideBank] &= ~SIDE_STATUS_REFLECT; + BattleScriptExecute(BattleScript_SideStatusWoreOff); + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = MOVE_REFLECT; + gBattleTextBuff1[3] = MOVE_REFLECT >> 8; + gBattleTextBuff1[4] = EOS; + effect++; + } + } + BATTLE_STRUCT->turnSideTracker++; + if (effect) + break; + } + if (!effect) + { + BATTLE_STRUCT->turncountersTracker++; + BATTLE_STRUCT->turnSideTracker = 0; + } + break; + case 2: + while (BATTLE_STRUCT->turnSideTracker < 2) + { + gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + if (gSideAffecting[sideBank] & SIDE_STATUS_LIGHTSCREEN) + { + if (--gSideTimers[sideBank].lightscreenTimer == 0) + { + gSideAffecting[sideBank] &= ~SIDE_STATUS_LIGHTSCREEN; + BattleScriptExecute(BattleScript_SideStatusWoreOff); + gBattleCommunication[MULTISTRING_CHOOSER] = sideBank; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = MOVE_LIGHT_SCREEN; + gBattleTextBuff1[3] = MOVE_LIGHT_SCREEN >> 8; + gBattleTextBuff1[4] = EOS; + effect++; + } + } + BATTLE_STRUCT->turnSideTracker++; + if (effect) + break; + } + if (!effect) + { + BATTLE_STRUCT->turncountersTracker++; + BATTLE_STRUCT->turnSideTracker = 0; + } + break; + case 3: + while (BATTLE_STRUCT->turnSideTracker < 2) + { + gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + if (gSideTimers[sideBank].mistTimer && --gSideTimers[sideBank].mistTimer == 0) + { + gSideAffecting[sideBank] &= ~SIDE_STATUS_MIST; + BattleScriptExecute(BattleScript_SideStatusWoreOff); + gBattleCommunication[MULTISTRING_CHOOSER] = sideBank; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = MOVE_MIST; + gBattleTextBuff1[3] = MOVE_MIST >> 8; + gBattleTextBuff1[4] = EOS; + effect++; + } + BATTLE_STRUCT->turnSideTracker++; + if (effect) + break; + } + if (!effect) + { + BATTLE_STRUCT->turncountersTracker++; + BATTLE_STRUCT->turnSideTracker = 0; + } + break; + case 4: + while (BATTLE_STRUCT->turnSideTracker < 2) + { + gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + if (gSideAffecting[sideBank] & SIDE_STATUS_SAFEGUARD) + { + if (--gSideTimers[sideBank].safeguardTimer == 0) + { + gSideAffecting[sideBank] &= ~SIDE_STATUS_SAFEGUARD; + BattleScriptExecute(BattleScript_SafeguardEnds); + effect++; + } + } + BATTLE_STRUCT->turnSideTracker++; + if (effect) + break; + } + if (!effect) + { + BATTLE_STRUCT->turncountersTracker++; + BATTLE_STRUCT->turnSideTracker = 0; + } + break; + case 5: + while (BATTLE_STRUCT->turnSideTracker < gNoOfAllBanks) + { + gActiveBank = gBanksByTurnOrder[BATTLE_STRUCT->turnSideTracker]; + if (gWishFutureKnock.wishCounter[gActiveBank] && --gWishFutureKnock.wishCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) + { + gBankTarget = gActiveBank; + BattleScriptExecute(BattleScript_WishComesTrue); + effect++; + } + BATTLE_STRUCT->turnSideTracker++; + if (effect) + break; + } + if (!effect) + { + BATTLE_STRUCT->turncountersTracker++; + } + break; + case 6: + if (gBattleWeather & WEATHER_RAIN_ANY) + { + if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) + { + if (--gWishFutureKnock.weatherDuration == 0) + { + gBattleWeather &= ~WEATHER_RAIN_TEMPORARY; + gBattleWeather &= ~WEATHER_RAIN_DOWNPOUR; + gBattleCommunication[MULTISTRING_CHOOSER] = 2; + } + else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + else if (gBattleWeather & WEATHER_RAIN_DOWNPOUR) + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + BattleScriptExecute(BattleScript_RainContinuesOrEnds); + effect++; + } + BATTLE_STRUCT->turncountersTracker++; + break; + case 7: + if (gBattleWeather & WEATHER_SANDSTORM_ANY) + { + if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) + { + gBattleWeather &= ~WEATHER_SANDSTORM_TEMPORARY; + gBattlescriptCurrInstr = BattleScript_SandStormHailEnds; + } + else + gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; + + BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + BattleScriptExecute(gBattlescriptCurrInstr); + effect++; + } + BATTLE_STRUCT->turncountersTracker++; + break; + case 8: + if (gBattleWeather & WEATHER_SUN_ANY) + { + if (!(gBattleWeather & WEATHER_SUN_PERMANENT) && --gWishFutureKnock.weatherDuration == 0) + { + gBattleWeather &= ~WEATHER_SUN_TEMPORARY; + gBattlescriptCurrInstr = BattleScript_SunlightFaded; + } + else + gBattlescriptCurrInstr = BattleScript_SunlightContinues; + + BattleScriptExecute(gBattlescriptCurrInstr); + effect++; + } + BATTLE_STRUCT->turncountersTracker++; + break; + case 9: + if (gBattleWeather & WEATHER_HAIL) + { + if (--gWishFutureKnock.weatherDuration == 0) + { + gBattleWeather &= ~WEATHER_HAIL; + gBattlescriptCurrInstr = BattleScript_SandStormHailEnds; + } + else + gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; + + BATTLE_STRUCT->animArg1 = B_ANIM_HAIL_CONTINUES; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + BattleScriptExecute(gBattlescriptCurrInstr); + effect++; + } + BATTLE_STRUCT->turncountersTracker++; + break; + case 10: + effect++; + break; + } + } while (effect == 0); + return (gBattleMainFunc != BattleTurnPassed); +} + +#define TURNBASED_MAX_CASE 19 + +u8 TurnBasedEffects(void) +{ + u8 effect = 0; + + gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); + while (BATTLE_STRUCT->turnEffectsBank < gNoOfAllBanks && BATTLE_STRUCT->turnEffectsTracker <= TURNBASED_MAX_CASE) + { + gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->turnEffectsBank]; + if (gAbsentBankFlags & gBitTable[gActiveBank]) + { + BATTLE_STRUCT->turnEffectsBank++; + } + else + { + switch (BATTLE_STRUCT->turnEffectsTracker) + { + case 0: // ingrain + if ((gStatuses3[gActiveBank] & STATUS3_ROOTED) + && gBattleMons[gActiveBank].hp != gBattleMons[gActiveBank].maxHP + && gBattleMons[gActiveBank].hp != 0) + { + gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + BattleScriptExecute(BattleScript_IngrainTurnHeal); + effect++; + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 1: // end turn abilities + if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBank, 0, 0, 0)) + effect++; + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 2: // item effects + if (ItemBattleEffects(1, gActiveBank, 0)) + effect++; + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 18: // item effects again + if (ItemBattleEffects(1, gActiveBank, 1)) + effect++; + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 3: // leech seed + if (gStatuses3[gActiveBank] & STATUS3_LEECHSEED && gBattleMons[gStatuses3[gActiveBank] & STATUS3_LEECHSEED_BANK].hp != 0 && gBattleMons[gActiveBank].hp != 0) + { + gBankTarget = gStatuses3[gActiveBank] & STATUS3_LEECHSEED_BANK; //funny how the 'target' is actually the bank that receives HP + gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BATTLE_STRUCT->animArg1 = gBankTarget; + BATTLE_STRUCT->animArg2 = gBankAttacker; + BattleScriptExecute(BattleScript_LeechSeedTurnDrain); + effect++; + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 4: // poison + if ((gBattleMons[gActiveBank].status1 & STATUS_POISON) && gBattleMons[gActiveBank].hp != 0) + { + gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptExecute(BattleScript_PoisonTurnDmg); + effect++; + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 5: // toxic poison + if ((gBattleMons[gActiveBank].status1 & STATUS_TOXIC_POISON) && gBattleMons[gActiveBank].hp != 0) + { + gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if ((gBattleMons[gActiveBank].status1 & 0xF00) != 0xF00) //not 16 turns + gBattleMons[gActiveBank].status1 += 0x100; + gBattleMoveDamage *= (gBattleMons[gActiveBank].status1 & 0xF00) >> 8; + BattleScriptExecute(BattleScript_PoisonTurnDmg); + effect++; + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 6: // burn + if ((gBattleMons[gActiveBank].status1 & STATUS_BURN) && gBattleMons[gActiveBank].hp != 0) + { + gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptExecute(BattleScript_BurnTurnDmg); + effect++; + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 7: // spooky nightmares + if ((gBattleMons[gActiveBank].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBank].hp != 0) + { + // missing sleep check + gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptExecute(BattleScript_NightmareTurnDmg); + effect++; + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 8: // curse + if ((gBattleMons[gActiveBank].status2 & STATUS2_CURSED) && gBattleMons[gActiveBank].hp != 0) + { + gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptExecute(BattleScript_CurseTurnDmg); + effect++; + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 9: // wrap + if ((gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBank].hp != 0) + { + gBattleMons[gActiveBank].status2 -= 0x2000; + if (gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) // damaged by wrap + { + BATTLE_STRUCT->animArg1 = ewram16004arr(0, gActiveBank); + BATTLE_STRUCT->animArg2 = ewram16004arr(1, gActiveBank); + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = ewram16004arr(0, gActiveBank); + gBattleTextBuff1[3] = ewram16004arr(1, gActiveBank); + gBattleTextBuff1[4] = EOS; + gBattlescriptCurrInstr = BattleScript_WrapTurnDmg; + gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + } + else // broke free + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = ewram16004arr(0, gActiveBank); + gBattleTextBuff1[3] = ewram16004arr(1, gActiveBank); + gBattleTextBuff1[4] = EOS; + gBattlescriptCurrInstr = BattleScript_WrapEnds; + } + BattleScriptExecute(gBattlescriptCurrInstr); + effect++; + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 10: // uproar + if (gBattleMons[gActiveBank].status2 & STATUS2_UPROAR) + { + for (gBankAttacker = 0; gBankAttacker < gNoOfAllBanks; gBankAttacker++) + { + if ((gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) + && gBattleMons[gBankAttacker].ability != ABILITY_SOUNDPROOF) + { + gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP); + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE); + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + BattleScriptExecute(BattleScript_MonWokeUpInUproar); + gActiveBank = gBankAttacker; + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + break; + } + } + if (gBankAttacker != gNoOfAllBanks) + { + effect = 2; // a pokemon was awaken + break; + } + else + { + gBankAttacker = gActiveBank; + gBattleMons[gActiveBank].status2 -= 0x10; // uproar timer goes down + if (WasUnableToUseMove(gActiveBank)) + { + CancelMultiTurnMoves(gActiveBank); + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + else if (gBattleMons[gActiveBank].status2 & STATUS2_UPROAR) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattleMons[gActiveBank].status2 |= STATUS2_MULTIPLETURNS; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + CancelMultiTurnMoves(gActiveBank); + } + BattleScriptExecute(BattleScript_PrintUproarOverTurns); + effect = 1; + } + } + if (effect != 2) + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 11: // thrash + if (gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE) + { + gBattleMons[gActiveBank].status2 -= 0x400; + if (WasUnableToUseMove(gActiveBank)) + CancelMultiTurnMoves(gActiveBank); + else if (!(gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE) + && (gBattleMons[gActiveBank].status2 & STATUS2_MULTIPLETURNS)) + { + gBattleMons[gActiveBank].status2 &= ~(STATUS2_MULTIPLETURNS); + if (!(gBattleMons[gActiveBank].status2 & STATUS2_CONFUSION)) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x47; + SetMoveEffect(1, 0); + if (gBattleMons[gActiveBank].status2 & STATUS2_CONFUSION) + BattleScriptExecute(BattleScript_ThrashConfuses); + effect++; + } + } + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 12: // disable + if (gDisableStructs[gActiveBank].disableTimer1 != 0) + { + int i; + for (i = 0; i < 4; i++) + { + if (gDisableStructs[gActiveBank].disabledMove == gBattleMons[gActiveBank].moves[i]) + break; + } + if (i == 4) // pokemon does not have the disabled move anymore + { + gDisableStructs[gActiveBank].disabledMove = 0; + gDisableStructs[gActiveBank].disableTimer1 = 0; + } + else if (--gDisableStructs[gActiveBank].disableTimer1 == 0) // disable ends + { + gDisableStructs[gActiveBank].disabledMove = 0; + BattleScriptExecute(BattleScript_DisabledNoMore); + effect++; + } + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 13: // encore + if (gDisableStructs[gActiveBank].encoreTimer1 != 0) + { + if (gBattleMons[gActiveBank].moves[gDisableStructs[gActiveBank].encoredMovePos] != gDisableStructs[gActiveBank].encoredMove) // pokemon does not have the encored move anymore + { + gDisableStructs[gActiveBank].encoredMove = 0; + gDisableStructs[gActiveBank].encoreTimer1 = 0; + } + else if (--gDisableStructs[gActiveBank].encoreTimer1 == 0 + || gBattleMons[gActiveBank].pp[gDisableStructs[gActiveBank].encoredMovePos] == 0) + { + gDisableStructs[gActiveBank].encoredMove = 0; + gDisableStructs[gActiveBank].encoreTimer1 = 0; + BattleScriptExecute(BattleScript_EncoredNoMore); + effect++; + } + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 14: // lock-on decrement + if (gStatuses3[gActiveBank] & STATUS3_ALWAYS_HITS) + gStatuses3[gActiveBank] -= 0x8; + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 15: // charge + if (gDisableStructs[gActiveBank].chargeTimer1 && --gDisableStructs[gActiveBank].chargeTimer1 == 0) + gStatuses3[gActiveBank] &= ~STATUS3_CHARGED_UP; + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 16: // taunt + if (gDisableStructs[gActiveBank].tauntTimer1) + gDisableStructs[gActiveBank].tauntTimer1--; + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 17: // yawn + if (gStatuses3[gActiveBank] & STATUS3_YAWN) + { + gStatuses3[gActiveBank] -= 0x800; + if (!(gStatuses3[gActiveBank] & STATUS3_YAWN) && !(gBattleMons[gActiveBank].status1 & STATUS_ANY) + && gBattleMons[gActiveBank].ability != ABILITY_VITAL_SPIRIT + && gBattleMons[gActiveBank].ability != ABILITY_INSOMNIA && !UproarWakeUpCheck(gActiveBank)) + { + CancelMultiTurnMoves(gActiveBank); + gBattleMons[gActiveBank].status1 |= (Random() & 3) + 2; + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + gEffectBank = gActiveBank; + BattleScriptExecute(BattleScript_YawnMakesAsleep); + effect++; + } + } + BATTLE_STRUCT->turnEffectsTracker++; + break; + case 19: // done + BATTLE_STRUCT->turnEffectsTracker = 0; + BATTLE_STRUCT->turnEffectsBank++; + break; + } + if (effect != 0) + return effect; + } + } + gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20); + return 0; +} + +bool8 HandleWishPerishSongOnTurnEnd(void) +{ + gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); + switch (BATTLE_STRUCT->sub80170DC_Tracker) + { + case 0: // future sight + while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) + { + gActiveBank = BATTLE_STRUCT->sub80170DC_Bank; + if (gAbsentBankFlags & gBitTable[gActiveBank]) + BATTLE_STRUCT->sub80170DC_Bank++; + else + { + BATTLE_STRUCT->sub80170DC_Bank++; + if (gWishFutureKnock.futureSightCounter[gActiveBank] && --gWishFutureKnock.futureSightCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) + { + if (gWishFutureKnock.futureSightMove[gActiveBank] == MOVE_FUTURE_SIGHT) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else //Doom Desire + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = gWishFutureKnock.futureSightMove[gActiveBank]; + gBattleTextBuff1[3] = gWishFutureKnock.futureSightMove[gActiveBank] >> 8; + gBattleTextBuff1[4] = 0xFF; + gBankTarget = gActiveBank; + gBankAttacker = gWishFutureKnock.futureSightAttacker[gActiveBank]; + gBattleMoveDamage = gWishFutureKnock.futureSightDmg[gActiveBank]; + gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF; + BattleScriptExecute(BattleScript_MonTookFutureAttack); + return 1; + } + } + } + BATTLE_STRUCT->sub80170DC_Tracker = 1; + BATTLE_STRUCT->sub80170DC_Bank = 0; + case 1: // perish song + while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) + { + gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->sub80170DC_Bank]; + if (gAbsentBankFlags & gBitTable[gActiveBank]) + BATTLE_STRUCT->sub80170DC_Bank++; + else + { + BATTLE_STRUCT->sub80170DC_Bank++; + if (gStatuses3[gActiveBank] & STATUS3_PERISH_SONG) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 1; + gBattleTextBuff1[2] = 1; + gBattleTextBuff1[3] = 1; + gBattleTextBuff1[4] = gDisableStructs[gActiveBank].perishSong1; + gBattleTextBuff1[5] = 0xFF; + if (gDisableStructs[gActiveBank].perishSong1 == 0) + { + gStatuses3[gActiveBank] &= ~(STATUS3_PERISH_SONG); + gBattleMoveDamage = gBattleMons[gActiveBank].hp; + gBattlescriptCurrInstr = BattleScript_PerishSongHits; + } + else + { + gDisableStructs[gActiveBank].perishSong1--; + gBattlescriptCurrInstr = BattleScript_PerishSongTimerGoesDown; + } + BattleScriptExecute(gBattlescriptCurrInstr); + return 1; + } + } + } + break; + } + gHitMarker &= ~(HITMARKER_GRUDGE | HITMARKER_x20); + return 0; +} + +#define HandleFaintedMonActions_MAX_CASE 7 + +bool8 HandleFaintedMonActions(void) +{ + if (gBattleTypeFlags & BATTLE_TYPE_SAFARI) + return 0; + do + { + int i; + switch (BATTLE_STRUCT->sub80173A4_Tracker) + { + case 0: + BATTLE_STRUCT->unk1605A = 0; + BATTLE_STRUCT->sub80173A4_Tracker++; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gAbsentBankFlags & gBitTable[i] && !sub_8018018(i, 6, 6)) + gAbsentBankFlags &= ~(gBitTable[i]); + } + case 1: + do + { + gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; + if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(BATTLE_STRUCT->unk16113 & gBitTable[gBattlePartyID[BATTLE_STRUCT->unk1605A]]) && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A])) + { + BattleScriptExecute(BattleScript_GiveExp); + BATTLE_STRUCT->sub80173A4_Tracker = 2; + return 1; + } + } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks); + BATTLE_STRUCT->sub80173A4_Tracker = 3; + break; + case 2: + sub_8015740(gBank1); + if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks) + BATTLE_STRUCT->sub80173A4_Tracker = 3; + else + BATTLE_STRUCT->sub80173A4_Tracker = 1; + break; + case 3: + BATTLE_STRUCT->unk1605A = 0; + BATTLE_STRUCT->sub80173A4_Tracker++; + case 4: + do + { + gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; //or should banks be switched? + if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A])) + { + BattleScriptExecute(BattleScript_HandleFaintedMon); + BATTLE_STRUCT->sub80173A4_Tracker = 5; + return 1; + } + } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks); + BATTLE_STRUCT->sub80173A4_Tracker = 6; + break; + case 5: + if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks) + BATTLE_STRUCT->sub80173A4_Tracker = 6; + else + BATTLE_STRUCT->sub80173A4_Tracker = 4; + break; + case 6: + if (AbilityBattleEffects(9, 0, 0, 0, 0) || AbilityBattleEffects(0xB, 0, 0, 0, 0) || ItemBattleEffects(1, 0, 1) || AbilityBattleEffects(6, 0, 0, 0, 0)) + return 1; + BATTLE_STRUCT->sub80173A4_Tracker++; + break; + case 7: + break; + } + } while (BATTLE_STRUCT->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE); + return 0; +} + +void TryClearRageStatuses(void) +{ + int i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].status2 & STATUS2_RAGE && gChosenMovesByBanks[i] != MOVE_RAGE) + gBattleMons[i].status2 &= ~(STATUS2_RAGE); + } +} + +#define ATKCANCELLER_MAX_CASE 14 + +u8 AtkCanceller_UnableToUseMove(void) +{ + u8 effect = 0; + s32* bideDmg = &BATTLE_STRUCT->bideDmg; + do + { + switch (BATTLE_STRUCT->atkCancellerTracker) + { + case 0: // flags clear + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_DESTINY_BOND); + gStatuses3[gBankAttacker] &= ~(STATUS3_GRUDGE); + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 1: // check being asleep + if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) + { + if (UproarWakeUpCheck(gBankAttacker)) + { + gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP); + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE); + BattleScriptPushCursor(); + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; + effect = 2; + } + else + { + u8 toSub; + if (gBattleMons[gBankAttacker].ability == ABILITY_EARLY_BIRD) + toSub = 2; + else + toSub = 1; + if ((gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) < toSub) + gBattleMons[gBankAttacker].status1 &= ~(STATUS_SLEEP); + else + gBattleMons[gBankAttacker].status1 -= toSub; + if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) + { + if (gCurrentMove != MOVE_SNORE && gCurrentMove != MOVE_SLEEP_TALK) + { + gBattlescriptCurrInstr = BattleScript_MoveUsedIsAsleep; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 2; + } + } + else + { + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_NIGHTMARE); + BattleScriptPushCursor(); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattlescriptCurrInstr = BattleScript_MoveUsedWokeUp; + effect = 2; + } + } + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 2: // check being frozen + if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE) + { + if (Random() % 5) + { + if (gBattleMoves[gCurrentMove].effect != EFFECT_THAW_HIT) // unfreezing via a move effect happens in case 13 + { + gBattlescriptCurrInstr = BattleScript_MoveUsedIsFrozen; + gHitMarker |= HITMARKER_NO_ATTACKSTRING; + } + else + { + BATTLE_STRUCT->atkCancellerTracker++; + break; + } + } + else // unfreeze + { + gBattleMons[gBankAttacker].status1 &= ~(STATUS_FREEZE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + } + effect = 2; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 3: // truant + if (gBattleMons[gBankAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBankAttacker].truantCounter) + { + CancelMultiTurnMoves(gBankAttacker); + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; + gBattleMoveFlags |= MOVESTATUS_MISSED; + effect = 1; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 4: // recharge + if (gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE) + { + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_RECHARGE); + gDisableStructs[gBankAttacker].rechargeCounter = 0; + CancelMultiTurnMoves(gBankAttacker); + gBattlescriptCurrInstr = BattleScript_MoveUsedMustRecharge; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 5: // flinch + if (gBattleMons[gBankAttacker].status2 & STATUS2_FLINCHED) + { + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_FLINCHED); + gProtectStructs[gBankAttacker].flinchImmobility = 1; + CancelMultiTurnMoves(gBankAttacker); + gBattlescriptCurrInstr = BattleScript_MoveUsedFlinched; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 6: // disabled move + if (gDisableStructs[gBankAttacker].disabledMove == gCurrentMove && gDisableStructs[gBankAttacker].disabledMove != 0) + { + gProtectStructs[gBankAttacker].usedDisabledMove = 1; + BATTLE_STRUCT->scriptingActive = gBankAttacker; + CancelMultiTurnMoves(gBankAttacker); + gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 7: // taunt + if (gDisableStructs[gBankAttacker].tauntTimer1 && gBattleMoves[gCurrentMove].power == 0) + { + gProtectStructs[gBankAttacker].usedTauntedMove = 1; + CancelMultiTurnMoves(gBankAttacker); + gBattlescriptCurrInstr = BattleScript_MoveUsedIsTaunted; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 8: // imprisoned + if (IsImprisoned(gBankAttacker, gCurrentMove)) + { + gProtectStructs[gBankAttacker].usedImprisionedMove = 1; + CancelMultiTurnMoves(gBankAttacker); + gBattlescriptCurrInstr = BattleScript_MoveUsedIsImprisoned; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 9: // confusion + if (gBattleMons[gBankAttacker].status2 & STATUS2_CONFUSION) + { + gBattleMons[gBankAttacker].status2--; + if (gBattleMons[gBankAttacker].status2 & STATUS2_CONFUSION) + { + if (Random() & 1) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + BattleScriptPushCursor(); + } + else // confusion dmg + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + gBankTarget = gBankAttacker; + gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankAttacker], MOVE_POUND, 0, 40, 0, gBankAttacker, gBankAttacker); + gProtectStructs[gBankAttacker].confusionSelfDmg = 1; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + } + gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfused; + } + else // snapped out of confusion + { + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MoveUsedIsConfusedNoMore; + } + effect = 1; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 10: // paralysis + if (gBattleMons[gBankAttacker].status1 & STATUS_PARALYSIS && (Random() % 4) == 0) + { + gProtectStructs[gBankAttacker].prlzImmobility = 1; + CancelMultiTurnMoves(gBankAttacker); + gBattlescriptCurrInstr = BattleScript_MoveUsedIsParalyzed; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + effect = 1; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 11: // infatuation + if (gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) + { + BATTLE_STRUCT->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10); + if (Random() & 1) + BattleScriptPushCursor(); + else + { + BattleScriptPush(BattleScript_MoveUsedIsParalyzedCantAttack); + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + gProtectStructs[gBankAttacker].loveImmobility = 1; + CancelMultiTurnMoves(gBankAttacker); + } + gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove; + effect = 1; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 12: // bide + if (gBattleMons[gBankAttacker].status2 & STATUS2_BIDE) + { + gBattleMons[gBankAttacker].status2 -= 0x100; + if (gBattleMons[gBankAttacker].status2 & STATUS2_BIDE) + gBattlescriptCurrInstr = BattleScript_BideStoringEnergy; + else + { + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_MULTIPLETURNS); + if (gTakenDmg[gBankAttacker]) + { + gCurrentMove = MOVE_BIDE; + *bideDmg = gTakenDmg[gBankAttacker] * 2; + gBankTarget = gTakenDmgBanks[gBankAttacker]; + if (gAbsentBankFlags & gBitTable[gBankTarget]) + gBankTarget = GetMoveTarget(MOVE_BIDE, 1); + gBattlescriptCurrInstr = BattleScript_BideAttack; + } + else + gBattlescriptCurrInstr = BattleScript_BideNoEnergyToAttack; + } + effect = 1; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 13: // move thawing + if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE) + { + if (gBattleMoves[gCurrentMove].effect == EFFECT_THAW_HIT) + { + gBattleMons[gBankAttacker].status1 &= ~(STATUS_FREEZE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_MoveUsedUnfroze; + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + } + effect = 2; + } + BATTLE_STRUCT->atkCancellerTracker++; + break; + case 14: // last case + break; + } + + } while (BATTLE_STRUCT->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0); + + if (effect == 2) + { + gActiveBank = gBankAttacker; + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + } + return effect; +} + +bool8 sub_8018018(u8 bank, u8 r1, u8 r2) +{ + struct Pokemon* party; + u8 r7; + u8 r6; + s32 i; + if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + return 0; + if (gBattleTypeFlags & BATTLE_TYPE_MULTI) + { + r7 = sub_803FC34(bank); + if (GetBankSide(bank) == 0) + party = gPlayerParty; + else + party = gEnemyParty; + r6 = sub_803FBFC(r7); + for (i = r6 * 3; i < r6 * 3 + 3; i++) + { + if (GetMonData(&party[i], MON_DATA_HP) && GetMonData(&party[i], MON_DATA_SPECIES2) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG) + break; + } + return (i == r6 * 3 + 3); + } + else + { + if (GetBankSide(bank) == 1) + { + r7 = GetBankByIdentity(1); + r6 = GetBankByIdentity(3); + party = gEnemyParty; + } + else + { + r7 = GetBankByIdentity(0); + r6 = GetBankByIdentity(2); + party = gPlayerParty; + } + if (r1 == 6) + r1 = gBattlePartyID[r7]; + if (r2 == 6) + r2 = gBattlePartyID[r6]; + for (i = 0; i < 6; i++) + { + if (GetMonData(&party[i], MON_DATA_HP) && GetMonData(&party[i], MON_DATA_SPECIES2) && GetMonData(&party[i], MON_DATA_SPECIES2) != SPECIES_EGG && i != r1 && i != r2 && i != ewram16068arr(r7) && i != ewram16068arr(r6)) + break; + } + return (i == 6); + } +} + +enum +{ + CASTFORM_NO_CHANGE, //0 + CASTFORM_TO_NORMAL, //1 + CASTFORM_TO_FIRE, //2 + CASTFORM_TO_WATER, //3 + CASTFORM_TO_ICE, //4 +}; + +u8 CastformDataTypeChange(u8 bank) +{ + u8 formChange = 0; + if (gBattleMons[bank].species != SPECIES_CASTFORM || gBattleMons[bank].ability != ABILITY_FORECAST || gBattleMons[bank].hp == 0) + return CASTFORM_NO_CHANGE; + if (!WEATHER_HAS_EFFECT && gBattleMons[bank].type1 != TYPE_NORMAL && gBattleMons[bank].type2 != TYPE_NORMAL) + { + gBattleMons[bank].type1 = TYPE_NORMAL; + gBattleMons[bank].type2 = TYPE_NORMAL; + return CASTFORM_TO_NORMAL; + } + if (!WEATHER_HAS_EFFECT) + return CASTFORM_NO_CHANGE; + if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL)) && gBattleMons[bank].type1 != TYPE_NORMAL && gBattleMons[bank].type2 != TYPE_NORMAL) + { + gBattleMons[bank].type1 = TYPE_NORMAL; + gBattleMons[bank].type2 = TYPE_NORMAL; + formChange = CASTFORM_TO_NORMAL; + } + if (gBattleWeather & WEATHER_SUN_ANY && gBattleMons[bank].type1 != TYPE_FIRE && gBattleMons[bank].type2 != TYPE_FIRE) + { + gBattleMons[bank].type1 = TYPE_FIRE; + gBattleMons[bank].type2 = TYPE_FIRE; + formChange = CASTFORM_TO_FIRE; + } + if (gBattleWeather & WEATHER_RAIN_ANY && gBattleMons[bank].type1 != TYPE_WATER && gBattleMons[bank].type2 != TYPE_WATER) + { + gBattleMons[bank].type1 = TYPE_WATER; + gBattleMons[bank].type2 = TYPE_WATER; + formChange = CASTFORM_TO_WATER; + } + if (gBattleWeather & WEATHER_HAIL && gBattleMons[bank].type1 != TYPE_ICE && gBattleMons[bank].type2 != TYPE_ICE) + { + gBattleMons[bank].type1 = TYPE_ICE; + gBattleMons[bank].type2 = TYPE_ICE; + formChange = CASTFORM_TO_ICE; + } + return formChange; +} + +u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) +{ + u8 effect = 0; + struct Pokemon* pokeAtk; + struct Pokemon* pokeDef; + u16 speciesAtk; + u16 speciesDef; + u32 pidAtk; + u32 pidDef; + + if (gBankAttacker >= gNoOfAllBanks) + gBankAttacker = bank; + if (GetBankSide(gBankAttacker) == 0) + pokeAtk = &gPlayerParty[gBattlePartyID[gBankAttacker]]; + else + pokeAtk = &gEnemyParty[gBattlePartyID[gBankAttacker]]; + + if (gBankTarget >= gNoOfAllBanks) + gBankTarget = bank; + if (GetBankSide(gBankTarget) == 0) + pokeDef = &gPlayerParty[gBattlePartyID[gBankTarget]]; + else + pokeDef = &gEnemyParty[gBattlePartyID[gBankTarget]]; + + speciesAtk = GetMonData(pokeAtk, MON_DATA_SPECIES); + pidAtk = GetMonData(pokeAtk, MON_DATA_PERSONALITY); + + speciesDef = GetMonData(pokeDef, MON_DATA_SPECIES); + pidDef = GetMonData(pokeDef, MON_DATA_PERSONALITY); + + if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI)) // why isn't that check done at the beginning? + { + u8 moveType; + s32 i; + u16 move; + u8 side; + u8 target1; + + if (special) + gLastUsedAbility = special; + else + gLastUsedAbility = gBattleMons[bank].ability; + + if (moveArg) + move = moveArg; + else + move = gCurrentMove; + + if (BATTLE_STRUCT->dynamicMoveType) + moveType = BATTLE_STRUCT->dynamicMoveType & 0x3F; + else + moveType = gBattleMoves[move].type; + + //_080184AC + switch (caseID) + { + case ABILITYEFFECT_ON_SWITCHIN: // 0 + //_08018518 + if (gBankAttacker >= gNoOfAllBanks) + gBankAttacker = bank; + switch (gLastUsedAbility) + { + case 0xFF: //weather from overworld + //_08018586 + switch (weather_get_current()) + { + case WEATHER_RAIN_LIGHT: + case WEATHER_RAIN_MED: + case WEATHER_RAIN_HEAVY: + if (!(gBattleWeather & WEATHER_RAIN_ANY)) + { + gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT); + BATTLE_STRUCT->animArg1 = B_ANIM_RAIN_CONTINUES; + BATTLE_STRUCT->scriptingActive = bank; + effect++; + } + break; + case WEATHER_SANDSTORM: + if (!(gBattleWeather & WEATHER_SANDSTORM_ANY)) + { + gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); + BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; + BATTLE_STRUCT->scriptingActive = bank; + effect++; + } + break; + case WEATHER_DROUGHT: + if (!(gBattleWeather & WEATHER_SUN_ANY)) + { + gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); + BATTLE_STRUCT->animArg1 = B_ANIM_SUN_CONTINUES; + BATTLE_STRUCT->scriptingActive = bank; + effect++; + } + break; + } + if (effect) + { + gBattleCommunication[MULTISTRING_CHOOSER] = weather_get_current(); + BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts); + } + break; + case ABILITY_DRIZZLE: + //_08018680 + if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) + { + gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY); + BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates); + BATTLE_STRUCT->scriptingActive = bank; + effect++; + } + break; + case ABILITY_SAND_STREAM: + //_080186B8 + if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT)) + { + gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); + BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates); + BATTLE_STRUCT->scriptingActive = bank; + effect++; + } + break; + case ABILITY_DROUGHT: + //_080186F0 + if (!(gBattleWeather & WEATHER_SUN_PERMANENT)) + { + gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); + BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates); + BATTLE_STRUCT->scriptingActive = bank; + effect++; + } + break; + case ABILITY_INTIMIDATE: + //_08018728 + if (!(gSpecialStatuses[bank].intimidatedPoke)) + { + gStatuses3[bank] |= STATUS3_INTIMIDATE_POKES; + gSpecialStatuses[bank].intimidatedPoke = 1; + } + break; + case ABILITY_FORECAST: + //_0801875C + effect = CastformDataTypeChange(bank); + if (effect != 0) + { + BattleScriptPushCursorAndCallback(BattleScript_CastformChange); + BATTLE_STRUCT->scriptingActive = bank; + BATTLE_STRUCT->castformToChangeInto = effect - 1; + } + break; + case ABILITY_TRACE: + //_080187A0 + if (!(gSpecialStatuses[bank].traced)) + { + gStatuses3[bank] |= STATUS3_TRACE; + gSpecialStatuses[bank].traced = 1; + } + break; + case ABILITY_CLOUD_NINE: + case ABILITY_AIR_LOCK: + //_080187DC + { + // that's a weird choice for a variable, why not use i or bank? + for (target1 = 0; target1 < gNoOfAllBanks; target1++) + { + effect = CastformDataTypeChange(target1); + if (effect != 0) + { + BattleScriptPushCursorAndCallback(BattleScript_CastformChange); + BATTLE_STRUCT->scriptingActive = target1; + BATTLE_STRUCT->castformToChangeInto = effect - 1; + break; + } + } + } + break; + } + break; + case ABILITYEFFECT_ENDTURN: // 1 + //_08018814 + if (gBattleMons[bank].hp != 0) + { + gBankAttacker = bank; + switch (gLastUsedAbility) + { + case ABILITY_RAIN_DISH: + if (WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) + && gBattleMons[bank].maxHP > gBattleMons[bank].hp) + { + gLastUsedAbility = ABILITY_RAIN_DISH; // why + BattleScriptPushCursorAndCallback(BattleScript_RainDishActivates); + gBattleMoveDamage = gBattleMons[bank].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + effect++; + } + break; + case ABILITY_SHED_SKIN: + if ((gBattleMons[bank].status1 & STATUS_ANY) && (Random() % 3) == 0) + { + if (gBattleMons[bank].status1 & (STATUS_POISON | STATUS_TOXIC_POISON)) + StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); + if (gBattleMons[bank].status1 & STATUS_SLEEP) + StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); + if (gBattleMons[bank].status1 & STATUS_PARALYSIS) + StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); + if (gBattleMons[bank].status1 & STATUS_BURN) + StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); + if (gBattleMons[bank].status1 & STATUS_FREEZE) + StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); + gBattleMons[bank].status1 = 0; + // BUG: The nightmare status does not get cleared here. This was fixed in Emerald. + //gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); + BATTLE_STRUCT->scriptingActive = gActiveBank = bank; + BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates); + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); + MarkBufferBankForExecution(gActiveBank); + effect++; + } + break; + case ABILITY_SPEED_BOOST: + if (gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC && gDisableStructs[bank].isFirstTurn != 2) + { + gBattleMons[bank].statStages[STAT_STAGE_SPEED]++; + BATTLE_STRUCT->animArg1 = 0x11; + BATTLE_STRUCT->animArg2 = 0; + BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates); + BATTLE_STRUCT->scriptingActive = bank; + effect++; + } + break; + case ABILITY_TRUANT: + gDisableStructs[gBankAttacker].truantCounter ^= 1; + break; + } + } + break; + case ABILITYEFFECT_MOVES_BLOCK: // 2 + //_08018A40 + if (gLastUsedAbility == ABILITY_SOUNDPROOF) + { + for (i = 0; gSoundMovesTable[i] != 0xFFFF; i++) + { + if (gSoundMovesTable[i] == move) + break; + } + if (gSoundMovesTable[i] != 0xFFFF) + { + if (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS) + gHitMarker |= HITMARKER_NO_PPDEDUCT; + gBattlescriptCurrInstr = BattleScript_SoundproofProtected; + effect = 1; + } + } + break; + case ABILITYEFFECT_ABSORBING: // 3 + //_08018AD8 + if (move) + { + switch (gLastUsedAbility) + { + case ABILITY_VOLT_ABSORB: + if (moveType == TYPE_ELECTRIC && gBattleMoves[move].power != 0) + { + if (gProtectStructs[gBankAttacker].notFirstStrike) + gBattlescriptCurrInstr = BattleScript_MoveHPDrain; + else + gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss; + effect = 1; + } + break; + case ABILITY_WATER_ABSORB: + if (moveType == TYPE_WATER && gBattleMoves[move].power != 0) + { + if (gProtectStructs[gBankAttacker].notFirstStrike) + gBattlescriptCurrInstr = BattleScript_MoveHPDrain; + else + gBattlescriptCurrInstr = BattleScript_MoveHPDrain_PPLoss; + effect = 1; + } + break; + case ABILITY_FLASH_FIRE: + if (moveType == TYPE_FIRE && !(gBattleMons[bank].status1 & STATUS_FREEZE)) + { + if (!(eFlashFireArr.arr[bank] & 1)) + { + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + if (gProtectStructs[gBankAttacker].notFirstStrike) + gBattlescriptCurrInstr = BattleScript_FlashFireBoost; + else + gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; + eFlashFireArr.arr[bank] |= 1; + effect = 2; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + if (gProtectStructs[gBankAttacker].notFirstStrike) + gBattlescriptCurrInstr = BattleScript_FlashFireBoost; + else + gBattlescriptCurrInstr = BattleScript_FlashFireBoost_PPLoss; + effect = 2; + } + } + break; + } + if (effect == 1) + { + if (gBattleMons[bank].maxHP == gBattleMons[bank].hp) + { + if ((gProtectStructs[gBankAttacker].notFirstStrike)) + gBattlescriptCurrInstr = BattleScript_MoveHPDrain_FullHP; + else + gBattlescriptCurrInstr = BattleScript_MoveHPDrain_FullHP_PPLoss; + } + else + { + gBattleMoveDamage = gBattleMons[bank].maxHP / 4; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + gBattleMoveDamage *= -1; + } + } + } + break; + case ABILITYEFFECT_CONTACT: // 4 + //_08018CF0 + switch (gLastUsedAbility) + { + case ABILITY_COLOR_CHANGE: + //_08018DCC + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && move != MOVE_STRUGGLE + && gBattleMoves[move].power != 0 + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && gBattleMons[bank].type1 != moveType + && gBattleMons[bank].type2 != moveType + && gBattleMons[bank].hp != 0) + { + gBattleMons[bank].type1 = moveType; + gBattleMons[bank].type2 = moveType; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 3; + gBattleTextBuff1[2] = moveType; + gBattleTextBuff1[3] = 0xFF; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ColorChangeActivates; + effect++; + } + break; + case ABILITY_ROUGH_SKIN: + //_08018E94 + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + { + gBattleMoveDamage = gBattleMons[gBankAttacker].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_RoughSkinActivates; + effect++; + } + break; + case ABILITY_EFFECT_SPORE: + //_08018F54 + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (Random() % 10) == 0) + { + do + { + gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; + } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); + if (gBattleCommunication[MOVE_EFFECT_BYTE] == 3) + gBattleCommunication[MOVE_EFFECT_BYTE] += 2; + gBattleCommunication[MOVE_EFFECT_BYTE] += 0x40; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + case ABILITY_POISON_POINT: + //_0801904C + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (Random() % 3) == 0) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x42; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + case ABILITY_STATIC: + //_08019128 + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (Random() % 3) == 0) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x45; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + case ABILITY_FLAME_BODY: + //_08019204 + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (Random() % 3) == 0) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x43; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + case ABILITY_CUTE_CHARM: + //_080192E0 + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && gBattleMons[gBankTarget].hp != 0 + && (Random() % 3) == 0 + && gBattleMons[gBankAttacker].ability != ABILITY_OBLIVIOUS + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) + && !(gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != 0xFF + && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != 0xFF) + { + gBattleMons[gBankAttacker].status2 |= (gBitTable[gBankTarget] << 0x10); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; + effect++; + } + break; + } + break; + case ABILITYEFFECT_IMMUNITY: // 5 + //_08019448 + { + for (bank = 0; bank < gNoOfAllBanks; bank++) + { + switch (gBattleMons[bank].ability) + { + case ABILITY_IMMUNITY: + if (gBattleMons[bank].status1 & (STATUS_POISON | STATUS_TOXIC_POISON | 0xF00)) // TODO: what is 0xF00? + { + StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); + effect = 1; + } + break; + case ABILITY_OWN_TEMPO: + if (gBattleMons[bank].status2 & STATUS2_CONFUSION) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); + effect = 2; + } + break; + case ABILITY_LIMBER: + if (gBattleMons[bank].status1 & STATUS_PARALYSIS) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); + effect = 1; + } + break; + case ABILITY_INSOMNIA: + case ABILITY_VITAL_SPIRIT: + if (gBattleMons[bank].status1 & STATUS_SLEEP) + { + gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); + StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); + effect = 1; + } + break; + case ABILITY_WATER_VEIL: + if (gBattleMons[bank].status1 & STATUS_BURN) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); + effect = 1; + } + break; + case ABILITY_MAGMA_ARMOR: + if (gBattleMons[bank].status1 & STATUS_FREEZE) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); + effect = 1; + } + break; + case ABILITY_OBLIVIOUS: + if (gBattleMons[bank].status2 & STATUS2_INFATUATION) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); + effect = 3; + } + break; + } + if (effect) + { + switch (effect) + { + case 1: // status cleared + gBattleMons[bank].status1 = 0; + break; + case 2: // get rid of confusion + gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); + break; + case 3: // get rid of infatuation + gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION); + break; + } + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; + BATTLE_STRUCT->scriptingActive = bank; + gActiveBank = bank; + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + return effect; + } + } + } + break; + case ABILITYEFFECT_FORECAST: // 6 + //_080197B4 + { + for (bank = 0; bank < gNoOfAllBanks; bank++) + { + if (gBattleMons[bank].ability == ABILITY_FORECAST) + { + effect = CastformDataTypeChange(bank); + if (effect) + { + BattleScriptPushCursorAndCallback(BattleScript_CastformChange); + BATTLE_STRUCT->scriptingActive = bank; + BATTLE_STRUCT->castformToChangeInto = effect - 1; + return effect; + } + } + } + } + break; + case ABILITYEFFECT_SYNCHRONIZE: // 7 + //_08019804 + if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) + { + gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); + BATTLE_STRUCT->synchroniseEffect &= 0x3F; + if (BATTLE_STRUCT->synchroniseEffect == 6) + BATTLE_STRUCT->synchroniseEffect = 2; + gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect + 0x40; + BATTLE_STRUCT->scriptingActive = gBankTarget; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8 + //_08019880 + if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) + { + gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); + BATTLE_STRUCT->synchroniseEffect &= 0x3F; + if (BATTLE_STRUCT->synchroniseEffect == 6) + BATTLE_STRUCT->synchroniseEffect = 2; + gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect; + BATTLE_STRUCT->scriptingActive = gBankAttacker; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + break; + case ABILITYEFFECT_INTIMIDATE1: // 9 + //_080198FC + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].ability == ABILITY_INTIMIDATE && gStatuses3[i] & STATUS3_INTIMIDATE_POKES) + { + gLastUsedAbility = ABILITY_INTIMIDATE; + gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); + BattleScriptPushCursorAndCallback(gUnknown_081D978C); + BATTLE_STRUCT->intimidateBank = i; + effect++; + break; + } + } + break; + case ABILITYEFFECT_TRACE: // 11 + //_08019940 + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE)) + { + u8 target2; + side = (GetBankIdentity(i) ^ 1) & 1; + target1 = GetBankByIdentity(side); + target2 = GetBankByIdentity(side + 2); + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0 + && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) + { + //_080199AE + gActiveBank = GetBankByIdentity(((Random() & 1) * 2) | side); + gBattleMons[i].ability = gBattleMons[gActiveBank].ability; + gLastUsedAbility = gBattleMons[gActiveBank].ability; + effect++; + } + else if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0) + { + //_08019A34 + gActiveBank = target1; + gBattleMons[i].ability = gBattleMons[gActiveBank].ability; + gLastUsedAbility = gBattleMons[gActiveBank].ability; + effect++; + } + else if (gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) + { + //_08019A78 + gActiveBank = target2; + gBattleMons[i].ability = gBattleMons[gActiveBank].ability; + gLastUsedAbility = gBattleMons[gActiveBank].ability; + effect++; + } + } + else + //_08019ABC + { + gActiveBank = target1; + if (gBattleMons[target1].ability && gBattleMons[target1].hp) + { + gBattleMons[i].ability = gBattleMons[target1].ability; + gLastUsedAbility = gBattleMons[target1].ability; + effect++; + } + } + if (effect) + { + BattleScriptPushCursorAndCallback(BattleScript_TraceActivates); + gStatuses3[i] &= ~(STATUS3_TRACE); + BATTLE_STRUCT->scriptingActive = i; + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 4; + gBattleTextBuff1[2] = gActiveBank; + gBattleTextBuff1[3] = gBattlePartyID[gActiveBank]; + gBattleTextBuff1[4] = EOS; + + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 9; + gBattleTextBuff2[2] = gLastUsedAbility; + gBattleTextBuff2[3] = EOS; + break; + } + } + } + break; + case ABILITYEFFECT_INTIMIDATE2: // 10 + //_08019B1C + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].ability == ABILITY_INTIMIDATE && (gStatuses3[i] & STATUS3_INTIMIDATE_POKES)) + { + gLastUsedAbility = ABILITY_INTIMIDATE; + gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = gUnknown_081D9795; + BATTLE_STRUCT->intimidateBank = i; + effect++; + break; + } + } + break; + case ABILITYEFFECT_CHECK_OTHER_SIDE: // 12 + //_08019B60 + side = GetBankSide(bank); + for (i = 0; i < gNoOfAllBanks; i++) + { + if (GetBankSide(i) != side && gBattleMons[i].ability == ability) + { + gLastUsedAbility = ability; + effect = i + 1; + } + } + break; + case ABILITYEFFECT_CHECK_BANK_SIDE: // 13 + //_08019BBC + side = GetBankSide(bank); + for (i = 0; i < gNoOfAllBanks; i++) + { + if (GetBankSide(i) == side && gBattleMons[i].ability == ability) + { + gLastUsedAbility = ability; + effect = i + 1; + } + } + break; + case ABILITYEFFECT_FIELD_SPORT: // 14 + //_08019C18 + switch (gLastUsedAbility) + { + case 0xFD: + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gStatuses3[i] & STATUS3_MUDSPORT) + effect = i + 1; + } + break; + case 0xFE: + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gStatuses3[i] & STATUS3_WATERSPORT) + effect = i + 1; + } + break; + default: + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].ability == ability) + { + gLastUsedAbility = ability; + effect = i + 1; + } + } + break; + } + break; + case ABILITYEFFECT_CHECK_ON_FIELD: // 19 + //_08019CD4 + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].ability == ability && gBattleMons[i].hp != 0) + { + gLastUsedAbility = ability; + effect = i + 1; + } + } + break; + case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK: // 15 + //_08019D18 + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].ability == ability && i != bank) + { + gLastUsedAbility = ability; + effect = i + 1; + } + } + break; + case ABILITYEFFECT_COUNT_OTHER_SIZE: // 16 + //_08019D5C + side = GetBankSide(bank); + for (i = 0; i < gNoOfAllBanks; i++) + { + if (GetBankSide(i) != side && gBattleMons[i].ability == ability) + { + gLastUsedAbility = ability; + effect++; + } + } + break; + case ABILITYEFFECT_COUNT_BANK_SIDE: // 17 + //_08019DB8 + side = GetBankSide(bank); + for (i = 0; i < gNoOfAllBanks; i++) + { + if (GetBankSide(i) == side && gBattleMons[i].ability == ability) + { + gLastUsedAbility = ability; + effect++; + } + } + break; + case ABILITYEFFECT_COUNT_ON_FIELD: // 18 + //_08019F44 + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].ability == ability && i != bank) + { + gLastUsedAbility = ability; + effect++; + } + } + break; + } + //_08019F76 + if (effect && caseID < 0xC && gLastUsedAbility != 0xFF) + RecordAbilityBattle(bank, gLastUsedAbility); + } + + return effect; +} + +void BattleScriptExecute(u8* BS_ptr) +{ + gBattlescriptCurrInstr = BS_ptr; + B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; + gBattleMainFunc = RunBattleScriptCommands_PopCallbacksStack; + gCurrentActionFuncId = 0; +} + +void BattleScriptPushCursorAndCallback(u8* BS_ptr) +{ + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BS_ptr; + B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; + gBattleMainFunc = RunBattleScriptCommands; +} + +enum +{ + ITEM_NO_EFFECT, // 0 + ITEM_STATUS_CHANGE, // 1 + ITEM_EFFECT_OTHER, // 2 + ITEM_PP_CHANGE, // 3 + ITEM_HP_CHANGE, // 4 + ITEM_STATS_CHANGE, // 5 +}; + +enum +{ + FLAVOR_SPICY, // 0 + FLAVOR_DRY, // 1 + FLAVOR_SWEET, // 2 + FLAVOR_BITTER, // 3 + FLAVOR_SOUR, // 4 +}; + +u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) +{ + int i = 0; + u8 effect = ITEM_NO_EFFECT; + u8 changedPP = 0; + u8 bankHoldEffect, atkHoldEffect, defHoldEffect; + u8 bankQuality, atkQuality, defQuality; + u16 atkItem, defItem; + + gLastUsedItem = gBattleMons[bank].item; + if (gLastUsedItem == ITEM_ENIGMA_BERRY) + { + bankHoldEffect = gEnigmaBerries[bank].holdEffect; + bankQuality = gEnigmaBerries[bank].holdEffectParam; + } + else + { + bankHoldEffect = ItemId_GetHoldEffect(gLastUsedItem); + bankQuality = ItemId_GetHoldEffectParam(gLastUsedItem); + } + + atkItem = gBattleMons[gBankAttacker].item; + if (atkItem == ITEM_ENIGMA_BERRY) + { + atkHoldEffect = gEnigmaBerries[gBankAttacker].holdEffect; + atkQuality = gEnigmaBerries[gBankAttacker].holdEffectParam; + } + else + { + atkHoldEffect = ItemId_GetHoldEffect(atkItem); + atkQuality = ItemId_GetHoldEffectParam(atkItem); + } + + // def variables are unused + defItem = gBattleMons[gBankTarget].item; + if (defItem == ITEM_ENIGMA_BERRY) + { + defHoldEffect = gEnigmaBerries[gBankTarget].holdEffect; + defQuality = gEnigmaBerries[gBankTarget].holdEffectParam; + } + else + { + defHoldEffect = ItemId_GetHoldEffect(defItem); + defQuality = ItemId_GetHoldEffectParam(defItem); + } + + switch (caseID) + { + case 0: + switch (bankHoldEffect) + { + case HOLD_EFFECT_DOUBLE_PRIZE: + BATTLE_STRUCT->moneyMultiplier = 2; + break; + case HOLD_EFFECT_RESTORE_STATS: + for (i = 0; i < 8; i++) + { + if (gBattleMons[bank].statStages[i] < 6) + { + gBattleMons[bank].statStages[i] = 6; + effect = ITEM_STATS_CHANGE; + } + } + if (effect) + { + BATTLE_STRUCT->scriptingActive = bank; + gStringBank = bank; + gActiveBank = gBankAttacker = bank; + BattleScriptExecute(BattleScript_WhiteHerbEnd2); + } + break; + } + break; + case 1: + if (gBattleMons[bank].hp) + { + switch (bankHoldEffect) + { + case HOLD_EFFECT_RESTORE_HP: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) + { + gBattleMoveDamage = bankQuality; + if (gBattleMons[bank].hp + bankQuality > gBattleMons[bank].maxHP) + gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; + gBattleMoveDamage *= -1; + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); + effect = 4; + } + break; + case HOLD_EFFECT_RESTORE_PP: + if (!moveTurn) + { + struct Pokemon* poke; + u8 ppBonuses; + u16 move; + + if (GetBankSide(bank) == 0) + poke = &gPlayerParty[gBattlePartyID[bank]]; + else + poke = &gEnemyParty[gBattlePartyID[bank]]; + for (i = 0; i < 4; i++) + { + move = GetMonData(poke, MON_DATA_MOVE1 + i); + changedPP = GetMonData(poke, MON_DATA_PP1 + i); + ppBonuses = GetMonData(poke, MON_DATA_PP_BONUSES); + if (move && changedPP == 0) + break; + } + if (i != 4) + { + u8 maxPP = CalculatePPWithBonus(move, ppBonuses, i); + if (changedPP + bankQuality > maxPP) + changedPP = maxPP; + else + changedPP = changedPP + bankQuality; + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 2; + gBattleTextBuff1[2] = move; + gBattleTextBuff1[3] = move >> 8; + gBattleTextBuff1[4] = 0xFF; + BattleScriptExecute(BattleScript_BerryPPHealEnd2); + EmitSetMonData(0, i + REQUEST_PPMOVE1_BATTLE, 0, 1, &changedPP); + MarkBufferBankForExecution(gActiveBank); + effect = ITEM_PP_CHANGE; + } + } + break; + case HOLD_EFFECT_RESTORE_STATS: + for (i = 0; i < 8; i++) + { + if (gBattleMons[bank].statStages[i] < 6) + { + gBattleMons[bank].statStages[i] = 6; + effect = ITEM_STATS_CHANGE; + } + } + if (effect) + { + BATTLE_STRUCT->scriptingActive = bank; + gStringBank = bank; + gActiveBank = gBankAttacker = bank; + BattleScriptExecute(BattleScript_WhiteHerbEnd2); + } + break; + case HOLD_EFFECT_LEFTOVERS: + if (gBattleMons[bank].hp < gBattleMons[bank].maxHP && !moveTurn) + { + gBattleMoveDamage = gBattleMons[bank].maxHP / 16; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) + gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; + gBattleMoveDamage *= -1; + BattleScriptExecute(BattleScript_ItemHealHP_End2); + effect = ITEM_HP_CHANGE; + RecordItemBattle(bank, bankHoldEffect); + } + break; + // nice copy/paste there gamefreak, making a function for confuse berries was too much eh? + case HOLD_EFFECT_CONFUSE_SPICY: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 8; + gBattleTextBuff1[2] = FLAVOR_SPICY; + gBattleTextBuff1[3] = EOS; + gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) + gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; + gBattleMoveDamage *= -1; + if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SPICY) < 0) + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); + else + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); + effect = ITEM_HP_CHANGE; + } + break; + case HOLD_EFFECT_CONFUSE_DRY: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 8; + gBattleTextBuff1[2] = FLAVOR_DRY; + gBattleTextBuff1[3] = EOS; + gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) + gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; + gBattleMoveDamage *= -1; + if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_DRY) < 0) + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); + else + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); + effect = ITEM_HP_CHANGE; + } + break; + case HOLD_EFFECT_CONFUSE_SWEET: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 8; + gBattleTextBuff1[2] = FLAVOR_SWEET; + gBattleTextBuff1[3] = EOS; + gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) + gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; + gBattleMoveDamage *= -1; + if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SWEET) < 0) + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); + else + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); + effect = ITEM_HP_CHANGE; + } + break; + case HOLD_EFFECT_CONFUSE_BITTER: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 8; + gBattleTextBuff1[2] = FLAVOR_BITTER; + gBattleTextBuff1[3] = EOS; + gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) + gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; + gBattleMoveDamage *= -1; + if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_BITTER) < 0) + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); + else + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); + effect = ITEM_HP_CHANGE; + } + break; + case HOLD_EFFECT_CONFUSE_SOUR: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / 2 && !moveTurn) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 8; + gBattleTextBuff1[2] = FLAVOR_SOUR; + gBattleTextBuff1[3] = EOS; + gBattleMoveDamage = gBattleMons[bank].maxHP / bankQuality; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = 1; + if (gBattleMons[bank].hp + gBattleMoveDamage > gBattleMons[bank].maxHP) + gBattleMoveDamage = gBattleMons[bank].maxHP - gBattleMons[bank].hp; + gBattleMoveDamage *= -1; + if (GetPokeFlavourRelation(gBattleMons[bank].personality, FLAVOR_SOUR) < 0) + BattleScriptExecute(BattleScript_BerryConfuseHealEnd2); + else + BattleScriptExecute(BattleScript_ItemHealHP_RemoveItem); + effect = ITEM_HP_CHANGE; + } + break; + // copy/paste again, smh + case HOLD_EFFECT_ATTACK_UP: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_ATK] < 0xC) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 5; + gBattleTextBuff1[2] = STAT_STAGE_ATK; + gBattleTextBuff1[3] = EOS; + + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 0; + gBattleTextBuff2[2] = 0xD2; + gBattleTextBuff2[3] = 0xD2 >> 8; + gBattleTextBuff2[4] = EOS; + + gEffectBank = bank; + BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_ATK; + BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_ATK; + BATTLE_STRUCT->animArg2 = 0; + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + effect = ITEM_STATS_CHANGE; + } + break; + case HOLD_EFFECT_DEFENSE_UP: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_DEF] < 0xC) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 5; + gBattleTextBuff1[2] = STAT_STAGE_DEF; + gBattleTextBuff1[3] = EOS; + + gEffectBank = bank; + BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_DEF; + BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_DEF; + BATTLE_STRUCT->animArg2 = 0; + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + effect = ITEM_STATS_CHANGE; + } + break; + case HOLD_EFFECT_SPEED_UP: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 5; + gBattleTextBuff1[2] = STAT_STAGE_SPEED; + gBattleTextBuff1[3] = EOS; + + gEffectBank = bank; + BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPEED; + BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPEED; + BATTLE_STRUCT->animArg2 = 0; + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + effect = ITEM_STATS_CHANGE; + } + break; + case HOLD_EFFECT_SP_ATTACK_UP: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPATK] < 0xC) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 5; + gBattleTextBuff1[2] = STAT_STAGE_SPATK; + gBattleTextBuff1[3] = EOS; + + gEffectBank = bank; + BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPATK; + BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPATK; + BATTLE_STRUCT->animArg2 = 0; + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + effect = ITEM_STATS_CHANGE; + } + break; + case HOLD_EFFECT_SP_DEFENSE_UP: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && gBattleMons[bank].statStages[STAT_STAGE_SPDEF] < 0xC) + { + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 5; + gBattleTextBuff1[2] = STAT_STAGE_SPDEF; + gBattleTextBuff1[3] = EOS; + + gEffectBank = bank; + BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPDEF; + BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPDEF; + BATTLE_STRUCT->animArg2 = 0; + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + effect = ITEM_STATS_CHANGE; + } + break; + case HOLD_EFFECT_CRITICAL_UP: + if (gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality && !moveTurn && !(gBattleMons[bank].status2 & STATUS2_FOCUS_ENERGY)) + { + gBattleMons[bank].status2 |= STATUS2_FOCUS_ENERGY; + BattleScriptExecute(BattleScript_BerryFocusEnergyEnd2); + effect = ITEM_EFFECT_OTHER; + } + break; + case HOLD_EFFECT_RANDOM_STAT_UP: + if (!moveTurn && gBattleMons[bank].hp <= gBattleMons[bank].maxHP / bankQuality) + { + for (i = 0; i < 5; i++) + { + if (gBattleMons[bank].statStages[STAT_STAGE_ATK + i] < 0xC) + break; + } + if (i != 5) + { + do + { + i = Random() % 5; + } while (gBattleMons[bank].statStages[STAT_STAGE_ATK + i] == 0xC); + + gBattleTextBuff1[0] = 0xFD; + gBattleTextBuff1[1] = 5; + gBattleTextBuff1[2] = i + 1; + gBattleTextBuff1[3] = EOS; + + gBattleTextBuff2[0] = 0xFD; + gBattleTextBuff2[1] = 0; + gBattleTextBuff2[2] = 0xD1; + gBattleTextBuff2[3] = 0xD1 >> 8; + gBattleTextBuff2[4] = 0; + gBattleTextBuff2[5] = 0xD2; + gBattleTextBuff2[6] = 0xD2 >> 8; + gBattleTextBuff2[7] = EOS; + + gEffectBank = bank; + BATTLE_STRUCT->statChanger = 0x21 + i; + BATTLE_STRUCT->animArg1 = 0x21 + i + 6; + BATTLE_STRUCT->animArg2 = 0; + BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); + effect = ITEM_STATS_CHANGE; + } + } + break; + case HOLD_EFFECT_CURE_PAR: + if (gBattleMons[bank].status1 & STATUS_PARALYSIS) + { + gBattleMons[bank].status1 &= ~(STATUS_PARALYSIS); + BattleScriptExecute(BattleScript_BerryCurePrlzEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_PSN: + if (gBattleMons[bank].status1 & STATUS_PSN_ANY) + { + gBattleMons[bank].status1 &= ~(STATUS_PSN_ANY | STATUS_TOXIC_COUNTER); + BattleScriptExecute(BattleScript_BerryCurePsnEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_BRN: + if (gBattleMons[bank].status1 & STATUS_BURN) + { + gBattleMons[bank].status1 &= ~(STATUS_BURN); + BattleScriptExecute(BattleScript_BerryCureBrnEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_FRZ: + if (gBattleMons[bank].status1 & STATUS_FREEZE) + { + gBattleMons[bank].status1 &= ~(STATUS_FREEZE); + BattleScriptExecute(BattleScript_BerryCureFrzEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_SLP: + if (gBattleMons[bank].status1 & STATUS_SLEEP) + { + gBattleMons[bank].status1 &= ~(STATUS_SLEEP); + gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); + BattleScriptExecute(BattleScript_BerryCureSlpEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_CONFUSION: + if (gBattleMons[bank].status2 & STATUS2_CONFUSION) + { + gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); + BattleScriptExecute(BattleScript_BerryCureConfusionEnd2); + effect = ITEM_EFFECT_OTHER; + } + break; + case HOLD_EFFECT_CURE_STATUS: + if (gBattleMons[bank].status1 & STATUS_ANY || gBattleMons[bank].status2 & STATUS2_CONFUSION) + { + i = 0; + if (gBattleMons[bank].status1 & STATUS_PSN_ANY) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); + i++; + } + if (gBattleMons[bank].status1 & STATUS_SLEEP) + { + gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); + StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); + i++; + } + if (gBattleMons[bank].status1 & STATUS_PARALYSIS) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); + i++; + } + if (gBattleMons[bank].status1 & STATUS_BURN) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); + i++; + } + if (gBattleMons[bank].status1 & STATUS_FREEZE) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); + i++; + } + if (gBattleMons[bank].status2 & STATUS2_CONFUSION) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); + i++; + } + if (!(i > 1)) + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + else + gBattleCommunication[MULTISTRING_CHOOSER] = 1; + gBattleMons[bank].status1 = 0; + gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); + BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_ATTRACT: + if (gBattleMons[bank].status2 & STATUS2_INFATUATION) + { + gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION); + StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); + BattleScriptExecute(BattleScript_BerryCureChosenStatusEnd2); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + effect = ITEM_EFFECT_OTHER; + } + break; + } + if (effect) + { + BATTLE_STRUCT->scriptingActive = bank; + gStringBank = bank; + gActiveBank = gBankAttacker = bank; + switch (effect) + { + case ITEM_STATUS_CHANGE: + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); + MarkBufferBankForExecution(gActiveBank); + break; + case ITEM_PP_CHANGE: + if (!(gBattleMons[bank].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[bank].unk18_b & gBitTable[i])) + gBattleMons[bank].pp[i] = changedPP; + break; + } + } + } + break; + case 2: + break; + case 3: + for (bank = 0; bank < gNoOfAllBanks; bank++) + { + gLastUsedItem = gBattleMons[bank].item; + if (gBattleMons[bank].item == ITEM_ENIGMA_BERRY) + { + bankHoldEffect = gEnigmaBerries[bank].holdEffect; + bankQuality = gEnigmaBerries[bank].holdEffectParam; + } + else + { + bankHoldEffect = ItemId_GetHoldEffect(gLastUsedItem); + bankQuality = ItemId_GetHoldEffectParam(gLastUsedItem); + } + switch (bankHoldEffect) + { + case HOLD_EFFECT_CURE_PAR: + if (gBattleMons[bank].status1 & STATUS_PARALYSIS) + { + gBattleMons[bank].status1 &= ~(STATUS_PARALYSIS); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryCureParRet; + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_PSN: + if (gBattleMons[bank].status1 & STATUS_PSN_ANY) + { + gBattleMons[bank].status1 &= ~(STATUS_PSN_ANY | STATUS_TOXIC_COUNTER); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryCurePsnRet; + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_BRN: + if (gBattleMons[bank].status1 & STATUS_BURN) + { + gBattleMons[bank].status1 &= ~(STATUS_BURN); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryCureBrnRet; + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_FRZ: + if (gBattleMons[bank].status1 & STATUS_FREEZE) + { + gBattleMons[bank].status1 &= ~(STATUS_FREEZE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryCureFrzRet; + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_SLP: + if (gBattleMons[bank].status1 & STATUS_SLEEP) + { + gBattleMons[bank].status1 &= ~(STATUS_SLEEP); + gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryCureSlpRet; + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_CURE_CONFUSION: + if (gBattleMons[bank].status2 & STATUS2_CONFUSION) + { + gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_BerryCureConfusionRet; + effect = ITEM_EFFECT_OTHER; + } + break; + case HOLD_EFFECT_CURE_ATTRACT: + if (gBattleMons[bank].status2 & STATUS2_INFATUATION) + { + gBattleMons[bank].status2 &= ~(STATUS2_INFATUATION); + StringCopy(gBattleTextBuff1, gStatusConditionString_LoveJpn); + BattleScriptPushCursor(); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; + effect = ITEM_EFFECT_OTHER; + } + break; + case HOLD_EFFECT_CURE_STATUS: + if (gBattleMons[bank].status1 & STATUS_ANY || gBattleMons[bank].status2 & STATUS2_CONFUSION) + { + if (gBattleMons[bank].status1 & STATUS_PSN_ANY) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_PoisonJpn); + } + if (gBattleMons[bank].status1 & STATUS_SLEEP) + { + gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); + StringCopy(gBattleTextBuff1, gStatusConditionString_SleepJpn); + } + if (gBattleMons[bank].status1 & STATUS_PARALYSIS) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ParalysisJpn); + } + if (gBattleMons[bank].status1 & STATUS_BURN) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_BurnJpn); + } + if (gBattleMons[bank].status1 & STATUS_FREEZE) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_IceJpn); + } + if (gBattleMons[bank].status2 & STATUS2_CONFUSION) + { + StringCopy(gBattleTextBuff1, gStatusConditionString_ConfusionJpn); + } + gBattleMons[bank].status1 = 0; + gBattleMons[bank].status2 &= ~(STATUS2_CONFUSION); + BattleScriptPushCursor(); + gBattleCommunication[MULTISTRING_CHOOSER] = 0; + gBattlescriptCurrInstr = BattleScript_BerryCureChosenStatusRet; + effect = ITEM_STATUS_CHANGE; + } + break; + case HOLD_EFFECT_RESTORE_STATS: + for (i = 0; i < 8; i++) + { + if (gBattleMons[bank].statStages[i] < 6) + { + gBattleMons[bank].statStages[i] = 6; + effect = ITEM_STATS_CHANGE; + } + } + if (effect) + { + BATTLE_STRUCT->scriptingActive = bank; + gStringBank = bank; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_WhiteHerbRet; + return effect; // unnecessary return + } + break; + } + if (effect) + { + BATTLE_STRUCT->scriptingActive = bank; + gStringBank = bank; + gActiveBank = bank; + EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); + MarkBufferBankForExecution(gActiveBank); + break; + } + } + break; + case 4: + if (gBattleMoveDamage) + { + switch (atkHoldEffect) + { + case HOLD_EFFECT_FLINCH: + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (Random() % 100) < bankQuality + && gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED + && gBattleMons[gBankTarget].hp) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 8; + BattleScriptPushCursor(); + SetMoveEffect(0, 0); + BattleScriptPop(); + } + break; + case HOLD_EFFECT_SHELL_BELL: + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gSpecialStatuses[gBankTarget].moveturnLostHP != 0 + && gSpecialStatuses[gBankTarget].moveturnLostHP != 0xFFFF + && gBankAttacker != gBankTarget + && gBattleMons[gBankAttacker].hp != gBattleMons[gBankAttacker].maxHP + && gBattleMons[gBankAttacker].hp != 0) + { + gLastUsedItem = atkItem; + gStringBank = gBankAttacker; + BATTLE_STRUCT->scriptingActive = gBankAttacker; + gBattleMoveDamage = (gSpecialStatuses[gBankTarget].moveturnLostHP / atkQuality) * -1; + if (gBattleMoveDamage == 0) + gBattleMoveDamage = -1; + gSpecialStatuses[gBankTarget].moveturnLostHP = 0; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ItemHealHP_Ret; + effect++; + } + break; + } + } + break; + } + + return effect; +} + +struct CombinedMove +{ + u16 move1; + u16 move2; + u16 newMove; +}; + +static const struct CombinedMove sCombinedMoves[2] = +{ + {MOVE_EMBER, MOVE_GUST, MOVE_HEAT_WAVE}, + {0xFFFF, 0xFFFF, 0xFFFF} +}; + +void unref_sub_801B40C(void) +{ + int i = 0; + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + { + do + { + u8 bank = 0; + do + { + u8 absent = gAbsentBankFlags; + if (gBitTable[bank] & absent || absent & gBitTable[bank + 2]) + bank++; + else + { + if (sCombinedMoves[i].move1 == gChosenMovesByBanks[bank] && sCombinedMoves[i].move2 == gChosenMovesByBanks[bank + 2]) + { + gSideTimers[GetBankIdentity(bank) & 1].field3 = (bank) | ((bank + 2) << 4); + gSideTimers[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; + gSideAffecting[GetBankIdentity(bank) & 1] |= SIDE_STATUS_X4; + } + if (sCombinedMoves[i].move1 == gChosenMovesByBanks[bank + 2] && sCombinedMoves[i].move2 == gChosenMovesByBanks[bank]) + { + gSideTimers[GetBankIdentity(bank) & 1].field3 = (bank + 2) | ((bank) << 4); + gSideTimers[GetBankIdentity(bank) & 1].field4 = sCombinedMoves[i].newMove; + gSideAffecting[GetBankIdentity(bank) & 1] |= SIDE_STATUS_X4; + } + bank++; + } + } while (bank < 2); + i++; + } while (sCombinedMoves[i].move1 != 0xFFFF); + } +} + +void sub_801B594(void) +{ + if (gBattleExecBuffer == 0) + gBattleScriptingCommandsTable[*gBattlescriptCurrInstr](); +} + +u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target +{ + u8 targetBank = 0; + u8 moveTarget; + u8 side; + + if (useMoveTarget) + moveTarget = useMoveTarget - 1; + else + moveTarget = gBattleMoves[move].target; + + switch (moveTarget) + { + case 0: + side = GetBankSide(gBankAttacker) ^ 1; + if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + targetBank = gSideTimers[side].followmeTarget; + else + { + side = GetBankSide(gBankAttacker); + do + { + targetBank = Random() % gNoOfAllBanks; + } while (targetBank == gBankAttacker || side == GetBankSide(targetBank) || gAbsentBankFlags & gBitTable[targetBank]); + if (gBattleMoves[move].type == TYPE_ELECTRIC + && AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_LIGHTNING_ROD, 0, 0) + && gBattleMons[targetBank].ability != ABILITY_LIGHTNING_ROD) + { + targetBank ^= 2; + RecordAbilityBattle(targetBank, gBattleMons[targetBank].ability); + gSpecialStatuses[targetBank].lightningRodRedirected = 1; + } + } + break; + case 1: + case 8: + case 32: + case 64: + targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & 1) ^ 1); + if (gAbsentBankFlags & gBitTable[targetBank]) + targetBank ^= 2; + break; + case 4: + side = GetBankSide(gBankAttacker) ^ 1; + if (gSideTimers[side].followmeTimer && gBattleMons[gSideTimers[side].followmeTarget].hp) + targetBank = gSideTimers[side].followmeTarget; + else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && moveTarget & 4) + { + if (GetBankSide(gBankAttacker) == 0) + { + if (Random() & 1) + targetBank = GetBankByIdentity(1); + else + targetBank = GetBankByIdentity(3); + } + else + { + if (Random() & 1) + targetBank = GetBankByIdentity(0); + else + targetBank = GetBankByIdentity(2); + } + if (gAbsentBankFlags & gBitTable[targetBank]) + targetBank ^= 2; + } + else + targetBank = GetBankByIdentity((GetBankIdentity(gBankAttacker) & 1) ^ 1); + break; + case 2: + case 16: + targetBank = gBankAttacker; + break; + } + ewram16010arr(gBankAttacker) = targetBank; + return targetBank; +} + +u8 IsMonDisobedient(void) +{ + u8 obedienceLevel; + s32 rnd; + s32 calc; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK + || GetBankSide(gBankAttacker) == 1 + || !IsOtherTrainer(gBattleMons[gBankAttacker].otId, gBattleMons[gBankAttacker].otName) + || FlagGet(FLAG_BADGE08_GET)) + return 0; + + obedienceLevel = 10; + if (FlagGet(FLAG_BADGE02_GET)) + obedienceLevel = 30; + if (FlagGet(FLAG_BADGE04_GET)) + obedienceLevel = 50; + if (FlagGet(FLAG_BADGE06_GET)) + obedienceLevel = 70; + + if (gBattleMons[gBankAttacker].level <= obedienceLevel) + return 0; + rnd = (Random() & 255); + calc = (gBattleMons[gBankAttacker].level + obedienceLevel) * rnd >> 8; + if (calc < obedienceLevel) + return 0; + + // is not obedient + if (gCurrentMove == MOVE_RAGE) + gBattleMons[gBankAttacker].status2 &= ~(STATUS2_RAGE); + if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP && (gCurrentMove == MOVE_SNORE || gCurrentMove == MOVE_SLEEP_TALK)) + { + gBattlescriptCurrInstr = gUnknown_081D995F; + return 1; + } + + rnd = (Random() & 255); + calc = (gBattleMons[gBankAttacker].level + obedienceLevel) * rnd >> 8; + if (calc < obedienceLevel) + { + calc = CheckMoveLimitations(gBankAttacker, gBitTable[gCurrMovePos], 0xFF); + if (calc == 0xF) // all moves cannot be used + { + gBattleCommunication[MULTISTRING_CHOOSER] = Random() & 3; + gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; + return 1; + } + else // use a random move + { + do + { + gCurrMovePos = gUnknown_02024BE5 = Random() & 3; + } while (gBitTable[gCurrMovePos] & calc); + gRandomMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; + gBattleCommunication[3] = 0; + gDynamicBasePower = 0; + BATTLE_STRUCT->dynamicMoveType = 0; + gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove; + gBankTarget = GetMoveTarget(gRandomMove, 0); + gHitMarker |= HITMARKER_x200000; + return 2; + } + } + else + { + obedienceLevel = gBattleMons[gBankAttacker].level - obedienceLevel; + + calc = (Random() & 255); + if (calc < obedienceLevel && !(gBattleMons[gBankAttacker].status1 & STATUS_ANY) && gBattleMons[gBankAttacker].ability != ABILITY_VITAL_SPIRIT && gBattleMons[gBankAttacker].ability != ABILITY_INSOMNIA) + { + // try putting asleep + int i; + for (i = 0; i < gNoOfAllBanks; i++) + { + if (gBattleMons[i].status2 & STATUS2_UPROAR) + break; + } + if (i == gNoOfAllBanks) + { + gBattlescriptCurrInstr = BattleScript_IgnoresAndFallsAsleep; + return 1; + } + } + calc -= obedienceLevel; + if (calc < obedienceLevel) + { + gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankAttacker], MOVE_POUND, 0, 40, 0, gBankAttacker, gBankAttacker); + gBankTarget = gBankAttacker; + gBattlescriptCurrInstr = gUnknown_081D99A0; + gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; + return 2; + } + else + { + gBattleCommunication[MULTISTRING_CHOOSER] = Random() & 3; + gBattlescriptCurrInstr = BattleScript_MoveUsedLoafingAround; + return 1; + } + } +} -- cgit v1.2.3 From 7f3eb30bcb9da4a3a651f1aca7a8fd6b7980491a Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Mon, 8 Jan 2018 16:03:33 +0100 Subject: Matched sub_812B058 --- src/battle/anim/sfx.c | 95 ++------------------------------------------------- 1 file changed, 3 insertions(+), 92 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index 99f050dcb..484548d4d 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -70,16 +70,16 @@ void sub_812B004(u8 taskId) } } -#ifdef NONMATCHING void sub_812B058(u8 taskId) { - s16 sp, r10, r7, r9; + s16 sp; + u8 r10, r7, r9; s8 r5, r6, r4, r0; sp = gBattleAnimArgs[0]; r5 = gBattleAnimArgs[2]; r6 = gBattleAnimArgs[3]; - r10 = gBattleAnimArgs[4]; + r10 = gBattleAnimArgs[4]; r7 = gBattleAnimArgs[5]; r9 = gBattleAnimArgs[6]; r4 = BattleAnimAdjustPanning(gBattleAnimArgs[1]); @@ -100,95 +100,6 @@ void sub_812B058(u8 taskId) TASK.func = sub_812B108; sub_812B108(taskId); } -#else -__attribute__((naked)) -void sub_812B058(u8 taskId) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - sub sp, 0x4\n\ - mov r8, r0\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r8, r0\n\ - ldr r0, _0812B0FC @ =gBattleAnimArgs\n\ - ldrh r1, [r0]\n\ - str r1, [sp]\n\ - ldrb r5, [r0, 0x4]\n\ - ldrb r6, [r0, 0x6]\n\ - ldrb r3, [r0, 0x8]\n\ - mov r10, r3\n\ - ldrb r7, [r0, 0xA]\n\ - ldrb r1, [r0, 0xC]\n\ - mov r9, r1\n\ - ldrb r0, [r0, 0x2]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - bl BattleAnimAdjustPanning\n\ - adds r4, r0, 0\n\ - lsls r4, 24\n\ - lsrs r4, 24\n\ - lsls r5, 24\n\ - asrs r5, 24\n\ - adds r0, r5, 0\n\ - bl BattleAnimAdjustPanning\n\ - adds r5, r0, 0\n\ - lsls r4, 24\n\ - asrs r4, 24\n\ - lsls r5, 24\n\ - asrs r5, 24\n\ - lsls r6, 24\n\ - asrs r6, 24\n\ - adds r0, r4, 0\n\ - adds r1, r5, 0\n\ - adds r2, r6, 0\n\ - bl CalculatePanIncrement\n\ - ldr r2, _0812B100 @ =gTasks\n\ - mov r3, r8\n\ - lsls r1, r3, 2\n\ - add r1, r8\n\ - lsls r1, 3\n\ - adds r1, r2\n\ - movs r2, 0\n\ - mov r6, sp\n\ - ldrh r6, [r6]\n\ - strh r6, [r1, 0x8]\n\ - strh r4, [r1, 0xA]\n\ - strh r5, [r1, 0xC]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - strh r0, [r1, 0xE]\n\ - mov r0, r10\n\ - strh r0, [r1, 0x10]\n\ - strh r7, [r1, 0x12]\n\ - mov r3, r9\n\ - strh r3, [r1, 0x14]\n\ - strh r2, [r1, 0x1C]\n\ - strh r4, [r1, 0x1E]\n\ - strh r3, [r1, 0x20]\n\ - ldr r2, _0812B104 @ =sub_812B108\n\ - str r2, [r1]\n\ - mov r0, r8\n\ - bl _call_via_r2\n\ - add sp, 0x4\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_0812B0FC: .4byte gBattleAnimArgs\n\ -_0812B100: .4byte gTasks\n\ -_0812B104: .4byte sub_812B108\n\ - .syntax divided\n"); -} -#endif // NONMATCHING void sub_812B108(u8 taskId) { -- cgit v1.2.3 From 4bdab579016705c6dc914e3d2af2d608eb256a9b Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Mon, 8 Jan 2018 18:40:57 +0100 Subject: Decompiled sub_812B18C --- src/battle/anim/sfx.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'src/battle') diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index 484548d4d..cb61a566f 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -1,9 +1,15 @@ #include "global.h" #include "battle_anim.h" +#include "contest.h" +#include "ewram.h" +#include "rom_8077ABC.h" #include "sound.h" #include "task.h" extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u16 gBattlePartyID[]; void sub_812AF98(u8 taskId); void sub_812B004(u8 taskId); @@ -122,3 +128,57 @@ void sub_812B108(u8 taskId) TASK.data[11] = sub_8077104(TASK.data[11]); } } + +// #define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348)) +// #define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348)) + +void sub_812B18C(u8 taskId) +{ + u16 species = 0; + s8 pan = BattleAnimAdjustPanning(-64); + + if (IsContest()) + { + if (!gBattleAnimArgs[0]) + species = shared19348.unk0; + else + DestroyAnimVisualTask(taskId); + } + else + { + u8 bank; + if (gBattleAnimArgs[0] == 0) + bank = gAnimBankAttacker; + else if (gBattleAnimArgs[0] == 1) + bank = gAnimBankTarget; + else if (gBattleAnimArgs[0] == 2) + bank = gAnimBankAttacker ^ 0x2; + else + bank = gAnimBankTarget ^ 0x2; + + if (gBattleAnimArgs[0] == 1 || gBattleAnimArgs[0] == 3) + { + if (!IsAnimBankSpriteVisible(bank)) + { + DestroyAnimVisualTask(taskId); + return; + } + } + + if (GetBankSide(bank)) + species = GetMonData(&gEnemyParty[gBattlePartyID[bank]], 0xB); + else + species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], 0xB); + } + + if (species != 0) + { + s16 mode = gBattleAnimArgs[1]; + if (mode == 0xFF) + PlayCry1(species, pan); + else + PlayCry3(species, pan, mode); + } + + DestroyAnimVisualTask(taskId); +} \ No newline at end of file -- cgit v1.2.3 From 353a083d97be81cbc612ecb8de46b62a0e523362 Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Tue, 9 Jan 2018 02:38:57 +0100 Subject: Finished decompiling battle_anim_sfx --- src/battle/anim/sfx.c | 149 ++++++++++++++++++++++++++++++++++++++--------- src/battle/battle_anim.c | 6 +- 2 files changed, 126 insertions(+), 29 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index cb61a566f..470fea3cc 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -10,26 +10,31 @@ extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u16 gBattlePartyID[]; +extern u16 gAnimSpeciesByBanks[]; +extern u8 gUnknown_0202F7D2; void sub_812AF98(u8 taskId); void sub_812B004(u8 taskId); void sub_812B004(u8 taskId); void sub_812B108(u8 taskId); +void sub_812B404(u8 taskId); +// used in 1 move: +// Move_FIRE_BLAST void sub_812AF30(u8 taskId) { - s8 sourcePan, targetPan, incrementPan; + s8 sourcePan, targetPan, panIncrement; TASK.data[0] = gBattleAnimArgs[0]; TASK.data[1] = gBattleAnimArgs[1]; sourcePan = BattleAnimAdjustPanning(-64); targetPan = BattleAnimAdjustPanning(63); - incrementPan = CalculatePanIncrement(sourcePan, targetPan, 2); + panIncrement = CalculatePanIncrement(sourcePan, targetPan, 2); TASK.data[2] = sourcePan; TASK.data[3] = targetPan; - TASK.data[4] = incrementPan; + TASK.data[4] = panIncrement; TASK.data[10] = 10; TASK.func = sub_812AF98; @@ -38,7 +43,7 @@ void sub_812AF30(u8 taskId) void sub_812AF98(u8 taskId) { s16 pan = TASK.data[2]; - s8 var0 = TASK.data[4]; + s8 dPan = TASK.data[4]; if (++TASK.data[11] == 111) { @@ -53,8 +58,8 @@ void sub_812AF98(u8 taskId) TASK.data[10] = 0; PlaySE12WithPanning(TASK.data[0], pan); } - pan += var0; - TASK.data[2] = sub_8077104(pan); + pan += dPan; + TASK.data[2] = sub_8077104(pan, dPan); } } @@ -66,7 +71,7 @@ void sub_812B004(u8 taskId) { TASK.data[10] = 0; - pan = BattleAnimAdjustPanning(0x3f); + pan = BattleAnimAdjustPanning(63); PlaySE12WithPanning(TASK.data[1], pan); if (++TASK.data[11] == 2) @@ -76,31 +81,32 @@ void sub_812B004(u8 taskId) } } +// used in 7 moves: +// Move_ICE_BEAM, Move_AURORA_BEAM, Move_PSYBEAM, +// Move_PSYWAVE, Move_SHADOW_BALL, Move_TRI_ATTACK, +// Move_HYPER_BEAM void sub_812B058(u8 taskId) { - s16 sp; - u8 r10, r7, r9; - s8 r5, r6, r4, r0; - - sp = gBattleAnimArgs[0]; - r5 = gBattleAnimArgs[2]; - r6 = gBattleAnimArgs[3]; - r10 = gBattleAnimArgs[4]; - r7 = gBattleAnimArgs[5]; - r9 = gBattleAnimArgs[6]; - r4 = BattleAnimAdjustPanning(gBattleAnimArgs[1]); - r5 = BattleAnimAdjustPanning(r5); - r0 = CalculatePanIncrement(r4, r5, r6); + s16 sp = gBattleAnimArgs[0]; + s8 r5 = gBattleAnimArgs[2]; + s8 panIncrement = gBattleAnimArgs[3]; + u8 r10 = gBattleAnimArgs[4]; // number of times the sound must be played + u8 r7 = gBattleAnimArgs[5]; + u8 r9 = gBattleAnimArgs[6]; + + s8 pan1 = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + s8 pan2 = BattleAnimAdjustPanning(r5); + panIncrement = CalculatePanIncrement(pan1, pan2, panIncrement); TASK.data[0] = sp; - TASK.data[1] = r4; - TASK.data[2] = r5; - TASK.data[3] = r0; + TASK.data[1] = pan1; + TASK.data[2] = pan2; + TASK.data[3] = panIncrement; TASK.data[4] = r10; TASK.data[5] = r7; TASK.data[6] = r9; TASK.data[10] = 0; - TASK.data[11] = r4; + TASK.data[11] = pan1; TASK.data[12] = r9; TASK.func = sub_812B108; @@ -123,15 +129,20 @@ void sub_812B108(u8 taskId) if (TASK.data[10]++ == TASK.data[5]) { + u16 dPan, oldPan; TASK.data[10] = 0; - TASK.data[11] += TASK.data[3]; - TASK.data[11] = sub_8077104(TASK.data[11]); + dPan = TASK.data[3]; + oldPan = TASK.data[11]; + TASK.data[11] = dPan + oldPan; + TASK.data[11] = sub_8077104(TASK.data[11], oldPan); } } // #define shared19348 (*(struct UnknownContestStruct8 *)(gSharedMem + 0x19348)) // #define EWRAM_19348 (*(u16 *)(gSharedMem + 0x19348)) +// used in 3 moves: +// Move_HOWL, Move_ROAR, Move_GROWL void sub_812B18C(u8 taskId) { u16 species = 0; @@ -181,4 +192,90 @@ void sub_812B18C(u8 taskId) } DestroyAnimVisualTask(taskId); +} + +// used in Move_HYPER_VOICE +void sub_812B2B8(u8 taskId) +{ + u16 species; + s8 pan = BattleAnimAdjustPanning(-64); + + if (IsContest()) + species = shared19348.unk0; + else + species = gAnimSpeciesByBanks[gAnimBankAttacker]; + + if (species != 0) + PlayCry3(species, pan, 4); + + DestroyAnimVisualTask(taskId); +} + +// used in 6 moves: +// Move_SKY_ATTACK, Move_LUSTER_PURGE, Move_FLATTER, +// Move_DRAGON_CLAW, Move_RETURN, Move_COSMIC_POWER, +void sub_812B30C(u8 taskId) +{ + u16 songNum = gBattleAnimArgs[0]; + s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + PlaySE1WithPanning(songNum, pan); + + DestroyAnimVisualTask(taskId); +} + +// used in 6 moves: +// Move_SKY_ATTACK, Move_SUPERPOWER, Move_ENCORE, +// Move_FLATTER, Move_RETURN, Move_COSMIC_POWER +void sub_812B340(u8 taskId) +{ + u16 songNum = gBattleAnimArgs[0]; + s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]); + PlaySE2WithPanning(songNum, pan); + + DestroyAnimVisualTask(taskId); +} + +// used in 2 moves: +// Move_CONFUSE_RAY, Move_WILL_O_WISP +void sub_812B374(u8 taskId) +{ + u8 r5 = gBattleAnimArgs[1]; + s8 panIncrement = gBattleAnimArgs[2]; + s16 r9 = gBattleAnimArgs[3]; + s8 r1 = gBattleAnimArgs[0]; + + s8 sourcePan = BattleAnimAdjustPanning(r1); + s8 targetPan = BattleAnimAdjustPanning(r5); + panIncrement = CalculatePanIncrement(sourcePan, targetPan, panIncrement); + + TASK.data[1] = sourcePan; + TASK.data[2] = targetPan; + TASK.data[3] = panIncrement; + TASK.data[5] = r9; + TASK.data[10] = 0; + TASK.data[11] = sourcePan; + + TASK.func = sub_812B404; + sub_812B404(taskId); +} + +void sub_812B404(u8 taskId) +{ + u16 dPan = TASK.data[3]; + + if (TASK.data[10]++ == TASK.data[5]) + { + u16 oldPan; + TASK.data[10] = 0; + oldPan = TASK.data[11]; + TASK.data[11] = dPan + oldPan; + TASK.data[11] = sub_8077104(TASK.data[11], oldPan); + } + + gUnknown_0202F7D2 = TASK.data[11]; + + if (TASK.data[11] == TASK.data[2]) + { + DestroyAnimVisualTask(taskId); + } } \ No newline at end of file diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 8242a1ddd..a0c74be1d 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -43,7 +43,7 @@ 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; +EWRAM_DATA u8 gUnknown_0202F7D2 = 0; // some global pan variable extern u16 gBattle_BG1_Y; extern u16 gBattle_WIN1H; extern u16 gBattle_WIN0V; @@ -1489,9 +1489,9 @@ s8 BattleAnimAdjustPanning2(s8 pan) return pan; } -s16 sub_8077104(s16 a) +s16 sub_8077104(s16 newPan, int oldPan) { - s16 var = a; + s16 var = newPan; if (var > 63) var = 63; -- cgit v1.2.3 From 84118e6fed04b1533458b891bcd0317683fe38c2 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 8 Jan 2018 19:23:43 -0800 Subject: Move unused files back to src/ level --- src/battle/anim/sfx.c | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/sfx.c b/src/battle/anim/sfx.c index 470fea3cc..10ef1681e 100644 --- a/src/battle/anim/sfx.c +++ b/src/battle/anim/sfx.c @@ -13,11 +13,10 @@ extern u16 gBattlePartyID[]; extern u16 gAnimSpeciesByBanks[]; extern u8 gUnknown_0202F7D2; -void sub_812AF98(u8 taskId); -void sub_812B004(u8 taskId); -void sub_812B004(u8 taskId); -void sub_812B108(u8 taskId); -void sub_812B404(u8 taskId); +static void sub_812AF98(u8 taskId); +static void sub_812B004(u8 taskId); +static void sub_812B108(u8 taskId); +static void sub_812B404(u8 taskId); // used in 1 move: // Move_FIRE_BLAST @@ -40,7 +39,7 @@ void sub_812AF30(u8 taskId) TASK.func = sub_812AF98; } -void sub_812AF98(u8 taskId) +static void sub_812AF98(u8 taskId) { s16 pan = TASK.data[2]; s8 dPan = TASK.data[4]; @@ -63,7 +62,7 @@ void sub_812AF98(u8 taskId) } } -void sub_812B004(u8 taskId) +static void sub_812B004(u8 taskId) { s8 pan; @@ -110,10 +109,10 @@ void sub_812B058(u8 taskId) TASK.data[12] = r9; TASK.func = sub_812B108; - sub_812B108(taskId); + TASK.func(taskId); } -void sub_812B108(u8 taskId) +static void sub_812B108(u8 taskId) { if (TASK.data[12]++ == TASK.data[6]) { @@ -256,10 +255,10 @@ void sub_812B374(u8 taskId) TASK.data[11] = sourcePan; TASK.func = sub_812B404; - sub_812B404(taskId); + TASK.func(taskId); } -void sub_812B404(u8 taskId) +static void sub_812B404(u8 taskId) { u16 dPan = TASK.data[3]; -- cgit v1.2.3 From 6d16dba22e9ea2b40bf684f7549b73a583d143f6 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 8 Jan 2018 23:16:13 -0600 Subject: re-label some window and text code --- src/battle/battle_2.c | 14 +++++----- src/battle/battle_4.c | 12 ++++----- src/battle/battle_controller_linkopponent.c | 2 +- src/battle/battle_controller_linkpartner.c | 2 +- src/battle/battle_controller_opponent.c | 2 +- src/battle/battle_controller_player.c | 42 ++++++++++++++--------------- src/battle/battle_controller_safari.c | 10 +++---- src/battle/battle_controller_wally.c | 12 ++++----- src/battle/battle_party_menu.c | 6 ++--- src/battle/battle_records.c | 32 +++++++++++----------- src/battle/reshow_battle_screen.c | 2 +- 11 files changed, 68 insertions(+), 68 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index ae84e5585..dccf73fa8 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -245,9 +245,9 @@ void InitBattle(void) gUnknown_030041B0 = 0; gUnknown_030041B8 = 0; gBattleTerrain = BattleSetup_GetTerrain(); - InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); - InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0); - InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC); + Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowConfig_81E6C58); + Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowConfig_81E71D0); + Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowConfig_81E71EC); sub_800D6D4(); sub_800DAB8(); ResetSpriteData(); @@ -898,7 +898,7 @@ void BattleMainCB2(void) { AnimateSprites(); BuildOamBuffer(); - sub_800374C(&gUnknown_03004210); + Text_UpdateWindowInBattle(&gUnknown_03004210); UpdatePaletteFade(); RunTasks(); } @@ -1221,9 +1221,9 @@ void c2_8011A1C(void) gUnknown_030041B0 = 0; gUnknown_030041B8 = 0; - InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); - InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0); - InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC); + Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowConfig_81E6C58); + Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowConfig_81E71D0); + Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowConfig_81E71EC); sub_800D6D4(); LoadCompressedPalette(gUnknown_08D004E0, 0, 64); sub_800D74C(); diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 5a20a8324..4be9b7d1c 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -10767,8 +10767,8 @@ void atk59_handlelearnnewmove(void) void sub_8023A80(void) { sub_802BBD4(0x18, 8, 0x1D, 0xD, 0); - InitWindow(&gUnknown_03004210, BattleText_YesNo, 0x100, 0x19, 0x9); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, BattleText_YesNo, 0x100, 0x19, 0x9); + Text_PrintWindow8002F44(&gUnknown_03004210); sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); } @@ -11714,9 +11714,9 @@ _08024AC4:\n\ str r0, [sp]\n\ adds r0, r4, 0\n\ movs r3, 0xC\n\ - bl InitWindow\n\ + bl Text_InitWindow\n\ adds r0, r4, 0\n\ - bl sub_8002F44\n\ + bl Text_PrintWindow8002F44\n\ ldr r1, _08024AEC @ =gSharedMem\n\ ldr r2, _08024AF0 @ =0x0001609c\n\ adds r1, r2\n\ @@ -11835,9 +11835,9 @@ _08024BC0:\n\ str r0, [sp]\n\ adds r0, r4, 0\n\ movs r3, 0xC\n\ - bl InitWindow\n\ + bl Text_InitWindow\n\ adds r0, r4, 0\n\ - bl sub_8002F44\n\ + bl Text_PrintWindow8002F44\n\ ldr r1, _08024BFC @ =gSharedMem\n\ ldr r0, _08024C00 @ =0x0001609c\n\ adds r1, r0\n\ diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 54181bc21..69306b725 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -1413,7 +1413,7 @@ void LinkOpponentHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_8037C2C; } diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index 2c78d4a82..c86c337d9 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -1358,7 +1358,7 @@ void LinkPartnerHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_811DFA0; } diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index ab7b6944b..622e3e9f9 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -1407,7 +1407,7 @@ void OpponentHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_80331D0; } diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index f992e3e51..4bbda2afd 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -745,8 +745,8 @@ void sub_802C68C(void) gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1; sub_802E3B4(gUnknown_03004344, 27); FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, BattleText_SwitchWhich, 0x290, 0x17, 0x37); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, BattleText_SwitchWhich, 0x290, 0x17, 0x37); + Text_PrintWindow8002F44(&gUnknown_03004210); gBattleBankFunc[gActiveBank] = sub_802CA60; } } @@ -854,8 +854,8 @@ void sub_802CA60(void) gMoveSelectionCursor[gActiveBank] = gUnknown_03004344; sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); + Text_PrintWindow8002F44(&gUnknown_03004210); sub_802E220(); sub_802E2D4(); } @@ -867,8 +867,8 @@ void sub_802CA60(void) sub_802E12C(gMoveSelectionCursor[gActiveBank], BattleText_Format); gBattleBankFunc[gActiveBank] = sub_802C68C; FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); + Text_PrintWindow8002F44(&gUnknown_03004210); sub_802E220(); sub_802E2D4(); } @@ -1557,13 +1557,13 @@ void sub_802E12C(s32 a, const u8 *b) StringCopy(gDisplayedStringBattle, b); StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]); - InitWindow( + Text_InitWindow( &gUnknown_03004210, gDisplayedStringBattle, 0x300 + a * 20, (a & 1) ? 11 : 1, (a < 2) ? 0x37 : 0x39); - sub_8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gUnknown_03004210); } void sub_802E1B0(void) @@ -1601,8 +1601,8 @@ void sub_802E220(void) str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBank]], 1, 2); *str++ = CHAR_SLASH; ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBank]], 1, 2); - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37); + Text_PrintWindow8002F44(&gUnknown_03004210); } } @@ -1614,7 +1614,7 @@ void sub_802E2D4(void) if (gBattleBufferA[gActiveBank][2] == 1) { FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, BattleText_ForgetMove, 0x290, 0x13, 0x37); + Text_InitWindow(&gUnknown_03004210, BattleText_ForgetMove, 0x290, 0x13, 0x37); } else { @@ -1624,9 +1624,9 @@ void sub_802E2D4(void) str = StringCopy(str, BattleText_Format); StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]); FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A); - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); + Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); } - sub_8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gUnknown_03004210); } const u8 gUnknown_081FAE89[][2] = @@ -1697,7 +1697,7 @@ void b_link_standby_message(void) { gBattle_BG0_X = 0; gBattle_BG0_Y = 0; - sub_8002EB0(&gUnknown_03004210, BattleText_LinkStandby, 0x90, 2, 15); + Text_InitWindow8002EB0(&gUnknown_03004210, BattleText_LinkStandby, 0x90, 2, 15); } } @@ -2562,7 +2562,7 @@ void PlayerHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); + Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); gBattleBankFunc[gActiveBank] = sub_802DF18; } @@ -2585,8 +2585,8 @@ void PlayerHandlecmd18(void) gBattleBankFunc[gActiveBank] = sub_802C098; - InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); sub_814A5C0(0, 0xFFFF, 12, 11679, 0); for (r4 = 0; r4 < 4; r4++) @@ -2595,8 +2595,8 @@ void PlayerHandlecmd18(void) sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); StrCpyDecodeToDisplayedStringBattle(BattleText_OtherMenu); - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); } void PlayerHandlecmd19() @@ -2619,8 +2619,8 @@ void sub_80304A8(void) sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); if (gBattleBufferA[gActiveBank][2] != 1) { - InitWindow(&gUnknown_03004210, BattleText_PP, 656, 23, 55); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, BattleText_PP, 656, 23, 55); + Text_PrintWindow8002F44(&gUnknown_03004210); } sub_802E220(); sub_802E2D4(); diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 0a629ba4d..72a0cc32c 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -453,7 +453,7 @@ void SafariHandlePrintString(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 0; BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); + Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15); gBattleBankFunc[gActiveBank] = sub_812B694; } @@ -476,8 +476,8 @@ void SafariHandlecmd18(void) FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); gBattleBankFunc[gActiveBank] = bx_battle_menu_t6_2; - InitWindow(&gUnknown_03004210, BattleText_MenuOptionsSafari, 400, 18, 35); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptionsSafari, 400, 18, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); sub_814A5C0(0, 0xFFFF, 12, 11679, 0); for (i = 0; i < 4; i++) @@ -486,8 +486,8 @@ void SafariHandlecmd18(void) sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); StrCpyDecodeToDisplayedStringBattle(BattleText_PlayerMenu); - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); } void SafariHandlecmd19(void) diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index bd2b4a45b..6a9e8071e 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -1246,7 +1246,7 @@ void WallyHandlePrintString(void) if (*ptr == 2) DestroyMenuCursor(); BufferStringBattle(*ptr); - sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); + Text_InitWindow8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15); gBattleBankFunc[gActiveBank] = sub_8137454; } @@ -1268,19 +1268,19 @@ void WallyHandlecmd18(void) FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); gBattleBankFunc[gActiveBank] = sub_81372BC; - InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); - sub_8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); for (i = 0; i < 4; i++) nullsub_8(i); sub_802E3E4(0, 0); StrCpyDecodeToDisplayedStringBattle(BattleText_WallyMenu); #ifdef ENGLISH - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 440, 2, 35); + Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 440, 2, 35); #else - InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 444, 2, 35); + Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 444, 2, 35); #endif - sub_8002F44(&gUnknown_03004210); + Text_PrintWindow8002F44(&gUnknown_03004210); } void WallyHandlecmd19(void) diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index 7bce00d82..67f6e24ef 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -583,13 +583,13 @@ static void Task_HandlePopupMenuInput(u8 taskId) if (gMain.newAndRepeatedKeys & DPAD_UP) { PlaySE(SE_SELECT); - MoveMenuCursor(-1); + Menu_MoveCursor(-1); return; } if (gMain.newAndRepeatedKeys & DPAD_DOWN) { PlaySE(SE_SELECT); - MoveMenuCursor(1); + Menu_MoveCursor(1); return; } if (gMain.newKeys & A_BUTTON) @@ -598,7 +598,7 @@ static void Task_HandlePopupMenuInput(u8 taskId) func = PartyMenuGetPopupMenuFunc(gTasks[taskId].data[4], sBattlePartyPopupMenus, sBattlePartyMenuActions, - GetMenuCursorPos()); + Menu_GetCursorPos()); func(taskId); return; } diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index 97740e3da..fb7392f33 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -202,7 +202,7 @@ static void PrintLinkBattleWinsLossesDraws(struct LinkBattleRecord *records) ConvertIntToDecimalStringN_DigitWidth6(gStringVar1, GetGameStat(GAME_STAT_LINK_BATTLE_WINS), STR_CONV_MODE_RIGHT_ALIGN, 4); ConvertIntToDecimalStringN_DigitWidth6(gStringVar2, GetGameStat(GAME_STAT_LINK_BATTLE_LOSSES), STR_CONV_MODE_RIGHT_ALIGN, 4); ConvertIntToDecimalStringN_DigitWidth6(gStringVar3, GetGameStat(GAME_STAT_LINK_BATTLE_DRAWS), STR_CONV_MODE_RIGHT_ALIGN, 4); - MenuPrint(gOtherText_WinRecord, 3, 3); + Menu_PrintText(gOtherText_WinRecord, 3, 3); } static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y) @@ -217,37 +217,37 @@ static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y) buffer[4] = 0x11; buffer[5] = 1; StringCopy(buffer + 6, gOtherText_SevenDashes); - MenuPrint(buffer, 3, y); + Menu_PrintText(buffer, 3, y); StringCopy(buffer + 6, gOtherText_FourDashes); - MenuPrint(buffer, 11, y); - MenuPrint(buffer, 17, y); - MenuPrint(buffer, 23, y); + Menu_PrintText(buffer, 11, y); + Menu_PrintText(buffer, 17, y); + Menu_PrintText(buffer, 23, y); } else { StringFillWithTerminator(gStringVar1, 8); StringCopyN(gStringVar1, record->name, 7); - MenuPrint(gStringVar1, 3, y); + Menu_PrintText(gStringVar1, 3, y); gStringVar1[0] = EXT_CTRL_CODE_BEGIN; gStringVar1[1] = 0x14; gStringVar1[2] = 6; ConvertIntToDecimalStringN(gStringVar1 + 3, record->wins, STR_CONV_MODE_RIGHT_ALIGN, 4); - MenuPrint(gStringVar1, 11, y); + Menu_PrintText(gStringVar1, 11, y); ConvertIntToDecimalStringN(gStringVar1 + 3, record->losses, STR_CONV_MODE_RIGHT_ALIGN, 4); - MenuPrint(gStringVar1, 17, y); + Menu_PrintText(gStringVar1, 17, y); ConvertIntToDecimalStringN(gStringVar1 + 3, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4); - MenuPrint(gStringVar1, 23, y); + Menu_PrintText(gStringVar1, 23, y); } } void ShowLinkBattleRecords(void) { s32 i; - MenuDrawTextWindow(1, 0, 28, 18); + Menu_DrawStdWindowFrame(1, 0, 28, 18); sub_8072BD8(gOtherText_BattleResults, 0, 1, 240); PrintLinkBattleWinsLossesDraws(gSaveBlock1.linkBattleRecords); #if ENGLISH - MenuPrint(gOtherText_WinLoseDraw, 12, 6); + Menu_PrintText(gOtherText_WinLoseDraw, 12, 6); #elif GERMAN MenuPrint_PixelCoords(gOtherText_WinLoseDraw, 88, 48, 1); #endif @@ -285,11 +285,11 @@ static bool32 sub_8110494(u8 level) static void PrintWinStreak(const u8 *str, u16 streak, u8 left, u8 top) { - MenuPrint(str, left, top); + Menu_PrintText(str, left, top); if (streak > 9999) streak = 9999; sub_8072C14(gStringVar1, streak, 24, 1); - MenuPrint(gOtherText_WinStreak, left + 7, top); + Menu_PrintText(gOtherText_WinStreak, left + 7, top); } static void PrintRecordWinStreak(u8 level, u8 left, u8 top) @@ -320,10 +320,10 @@ static void PrintLastWinStreak(u8 level, u8 left, u8 top) void ShowBattleTowerRecords(void) { u16 i; - MenuDrawTextWindow(3, 1, 27, 17); + Menu_DrawStdWindowFrame(3, 1, 27, 17); sub_8072BD8(gOtherText_BattleTowerResults, 3, 2, 0xC8); - MenuPrint(gOtherText_Lv50, 5, 6); - MenuPrint(gOtherText_Lv100, 5, 12); + Menu_PrintText(gOtherText_Lv50, 5, 6); + Menu_PrintText(gOtherText_Lv100, 5, 12); for (i = 5; i < 26; i++) { sub_8071F60(CHAR_HYPHEN, i, 10); diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index 6a6d7a137..fded87090 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -80,7 +80,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) dp12_8087EA4(); SetUpWindowConfig(&gWindowConfig_81E6C58); ResetPaletteFade(); - InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58); + Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowConfig_81E6C58); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; gBattle_BG1_X = 0; -- cgit v1.2.3 From 8869cbc98e2f8e761e9ff89182933643992e2bd7 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 9 Jan 2018 00:16:15 -0600 Subject: s/gWindowConfig/gWindowTemplate/g --- src/battle/battle_2.c | 16 ++++++++-------- src/battle/reshow_battle_screen.c | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index dccf73fa8..42cc0b538 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -234,7 +234,7 @@ void InitBattle(void) } //sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); sub_80895F8(gUnknown_081F9674); - SetUpWindowConfig(&gWindowConfig_81E6C58); + SetUpWindowConfig(&gWindowTemplate_81E6C58); ResetPaletteFade(); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; @@ -245,9 +245,9 @@ void InitBattle(void) gUnknown_030041B0 = 0; gUnknown_030041B8 = 0; gBattleTerrain = BattleSetup_GetTerrain(); - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowConfig_81E6C58); - Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowConfig_81E71D0); - Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowConfig_81E71EC); + Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); + Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowTemplate_81E71EC); sub_800D6D4(); sub_800DAB8(); ResetSpriteData(); @@ -1210,7 +1210,7 @@ void c2_8011A1C(void) gUnknown_03004DE0[0][i] = 0xFF10; gUnknown_03004DE0[1][i] = 0xFF10; } - SetUpWindowConfig(&gWindowConfig_81E6C58); + SetUpWindowConfig(&gWindowTemplate_81E6C58); ResetPaletteFade(); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; @@ -1221,9 +1221,9 @@ void c2_8011A1C(void) gUnknown_030041B0 = 0; gUnknown_030041B8 = 0; - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowConfig_81E6C58); - Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowConfig_81E71D0); - Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowConfig_81E71EC); + Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); + Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowTemplate_81E71EC); sub_800D6D4(); LoadCompressedPalette(gUnknown_08D004E0, 0, 64); sub_800D74C(); diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index fded87090..bf77e5c07 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -78,9 +78,9 @@ static void CB2_ReshowBattleScreenAfterMenu(void) { case 0: dp12_8087EA4(); - SetUpWindowConfig(&gWindowConfig_81E6C58); + SetUpWindowConfig(&gWindowTemplate_81E6C58); ResetPaletteFade(); - Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowConfig_81E6C58); + Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; gBattle_BG1_X = 0; -- cgit v1.2.3 From 66bf3cc2bbe16dd2b51bb76b2cae9e15272a6a34 Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Tue, 9 Jan 2018 18:43:52 +0100 Subject: Started decompiling bug.s --- src/battle/anim/bug.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) create mode 100644 src/battle/anim/bug.c (limited to 'src/battle') diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c new file mode 100644 index 000000000..e9372ed9e --- /dev/null +++ b/src/battle/anim/bug.c @@ -0,0 +1,105 @@ +#include "global.h" +#include "battle_anim.h" +#include "contest.h" +#include "rom_8077ABC.h" +#include "trig.h" +// #include "util.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; + +static void sub_80DCA38(struct Sprite *sprite); + +// used in Move_MEGAHORN +void sub_80DC824(struct Sprite *sprite) +{ + if (IsContest()) + { + StartSpriteAffineAnim(sprite, 2); + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + else if (!GetBankSide(gAnimBankTarget)) + { + StartSpriteAffineAnim(sprite, 1); + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + + sprite->pos1.x = sub_8077EE4(gAnimBankTarget, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077EE4(gAnimBankTarget, 3) + gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[4]; + + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// used in Move_LEECH_LIFE +void sub_80DC8F4(struct Sprite *sprite) +{ + if (IsContest()) + { + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + StartSpriteAffineAnim(sprite, 2); + } + else if (!GetBankSide(gAnimBankTarget)) + { + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + } + + sprite->pos1.x = sub_8077EE4(gAnimBankTarget, 2) + gBattleAnimArgs[0]; + sprite->pos1.y = sub_8077EE4(gAnimBankTarget, 3) + gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// used in 2 moves: +// Move_STRING_SHOT, Move_SPIDER_WEB +void sub_80DC9A0(struct Sprite *sprite) +{ + if (IsContest()) + gBattleAnimArgs[2] /= 2; + + sub_80787B0(sprite, 1); + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = sprite->pos1.x; + sprite->data[3] = sprite->pos1.y; + + if (!gBattleAnimArgs[4]) + { + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + } + else + { + sub_807A3FC(gAnimBankTarget, 1, &sprite->data[2], &sprite->data[4]); + } + + sub_8078BD4(sprite); + sprite->data[5] = gBattleAnimArgs[3]; + sprite->callback = sub_80DCA38; +} + +static void sub_80DCA38(struct Sprite *sprite) +{ + if (sub_8078B5C(sprite)) + { + DestroyAnimSprite(sprite); + return; + } + + sprite->pos2.x += Sin(sprite->data[6], sprite->data[5]); + sprite->data[6] = (sprite->data[6] + 13) & 0xFF; +} \ No newline at end of file -- cgit v1.2.3 From 03b167a73e2f18fa79bbf0e6ffe11e0c35c12ad8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 9 Jan 2018 14:26:15 -0600 Subject: more text/menu renaming --- src/battle/battle_2.c | 6 +++--- src/battle/battle_4.c | 8 ++++---- src/battle/battle_controller_player.c | 24 ++++++++++++------------ src/battle/battle_controller_safari.c | 6 +++--- src/battle/battle_controller_wally.c | 6 +++--- src/battle/battle_party_menu.c | 2 +- src/battle/battle_records.c | 2 +- src/battle/reshow_battle_screen.c | 2 +- 8 files changed, 28 insertions(+), 28 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 42cc0b538..249b67e0d 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -234,7 +234,7 @@ void InitBattle(void) } //sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); sub_80895F8(gUnknown_081F9674); - SetUpWindowConfig(&gWindowTemplate_81E6C58); + Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; @@ -553,7 +553,7 @@ void sub_800F02C(void) gUnknown_02023A00[i].status = GetMonData(&gPlayerParty[i], MON_DATA_STATUS); gUnknown_02023A00[i].personality = GetMonData(&gPlayerParty[i], MON_DATA_PERSONALITY); gUnknown_02023A00[i].gender = GetMonGender(&gPlayerParty[i]); - StripExtCtrlCodes(nickname); + Text_StripExtCtrlCodes(nickname); gUnknown_02023A00[i].language = GetMonData(&gPlayerParty[i], MON_DATA_LANGUAGE); if (gUnknown_02023A00[i].language != 1) PadNameString(nickname, 0); @@ -1210,7 +1210,7 @@ void c2_8011A1C(void) gUnknown_03004DE0[0][i] = 0xFF10; gUnknown_03004DE0[1][i] = 0xFF10; } - SetUpWindowConfig(&gWindowTemplate_81E6C58); + Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); gBattle_BG0_X = 0; gBattle_BG0_Y = 0; diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 4be9b7d1c..164329c1b 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -136,7 +136,7 @@ u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move); void IncrementGameStat(u8 index); u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale); u16 GetPokedexHeightWeight(u16 national_num, u8 heightweight); -u8 sub_814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); +u8 MenuCursor_Create814A5C0(u8 a1, u16 a2, u8 a3, u16 a4, u8 a5); void DestroyMenuCursor(void); void sub_802BC6C(void); u8 sub_809FA30(void); @@ -155,7 +155,7 @@ u8 Overworld_GetMapTypeOfSaveblockLocation(void); u8 CalculatePlayerPartyCount(void); u16 Sqrt(u32 num); u8 sub_809070C(u16 nationalNum, u32 TiD, u32 PiD); //task prepare poke dex display -void sub_814A880(u8 a1, u8 a2); +void MenuCursor_SetPos814A880(u8 a1, u8 a2); u8 CheckMoveLimitations(u8 bank, u8 unusable_moves, u8 flags); bool8 IsLinkDoubleBattle(void); void sub_8094B6C(u8 bank, u8 partyID, u8 r2); @@ -10769,7 +10769,7 @@ void sub_8023A80(void) sub_802BBD4(0x18, 8, 0x1D, 0xD, 0); Text_InitWindow(&gUnknown_03004210, BattleText_YesNo, 0x100, 0x19, 0x9); Text_PrintWindow8002F44(&gUnknown_03004210); - sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); + MenuCursor_Create814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20); } void sub_8023AD8(void) @@ -17333,7 +17333,7 @@ _0802BC68: .4byte 0x00001025\n\ void sub_802BC6C(void) { - sub_814A880(0xC8, ((gBattleCommunication[1] << 28) + 1207959552) >> 24); //what could that be? + MenuCursor_SetPos814A880(0xC8, ((gBattleCommunication[1] << 28) + 1207959552) >> 24); //what could that be? } void nullsub_6(void) diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 4bbda2afd..489581132 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -744,7 +744,7 @@ void sub_802C68C(void) else gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1; sub_802E3B4(gUnknown_03004344, 27); - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); Text_InitWindow(&gUnknown_03004210, BattleText_SwitchWhich, 0x290, 0x17, 0x37); Text_PrintWindow8002F44(&gUnknown_03004210); gBattleBankFunc[gActiveBank] = sub_802CA60; @@ -853,7 +853,7 @@ void sub_802CA60(void) gBattleBankFunc[gActiveBank] = sub_802C68C; gMoveSelectionCursor[gActiveBank] = gUnknown_03004344; sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); Text_InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); Text_PrintWindow8002F44(&gUnknown_03004210); sub_802E220(); @@ -866,7 +866,7 @@ void sub_802CA60(void) sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0); sub_802E12C(gMoveSelectionCursor[gActiveBank], BattleText_Format); gBattleBankFunc[gActiveBank] = sub_802C68C; - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); Text_InitWindow(&gUnknown_03004210, BattleText_PP, 0x290, 0x17, 0x37); Text_PrintWindow8002F44(&gUnknown_03004210); sub_802E220(); @@ -1572,7 +1572,7 @@ void sub_802E1B0(void) s32 i; gUnknown_03004348 = 0; - FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A); + Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A); for (i = 0; i < 4; i++) { nullsub_7(i); @@ -1613,7 +1613,7 @@ void sub_802E2D4(void) { if (gBattleBufferA[gActiveBank][2] == 1) { - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); + Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A); Text_InitWindow(&gUnknown_03004210, BattleText_ForgetMove, 0x290, 0x13, 0x37); } else @@ -1623,7 +1623,7 @@ void sub_802E2D4(void) str = StringCopy(str, BattleText_Format); StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]); - FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A); + Text_FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A); Text_InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39); } Text_PrintWindow8002F44(&gUnknown_03004210); @@ -1652,7 +1652,7 @@ const u8 gUnknown_081FAE91[][2] = void sub_802E3B4(u8 a, int unused) { sub_814A958(0x48); - sub_814A880(gUnknown_081FAE89[a][0], gUnknown_081FAE89[a][1]); + MenuCursor_SetPos814A880(gUnknown_081FAE89[a][0], gUnknown_081FAE89[a][1]); } void nullsub_7(u8 a) @@ -1662,7 +1662,7 @@ void nullsub_7(u8 a) void sub_802E3E4(u8 a, int unused) { sub_814A958(0x2A); - sub_814A880(gUnknown_081FAE91[a][0], gUnknown_081FAE91[a][1]); + MenuCursor_SetPos814A880(gUnknown_081FAE91[a][0], gUnknown_081FAE91[a][1]); } void nullsub_8(u8 a) @@ -2580,14 +2580,14 @@ void PlayerHandlecmd18(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 160; - FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18); - FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38); + Text_FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18); + Text_FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38); gBattleBankFunc[gActiveBank] = sub_802C098; Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); Text_PrintWindow8002F44(&gUnknown_03004210); - sub_814A5C0(0, 0xFFFF, 12, 11679, 0); + MenuCursor_Create814A5C0(0, 0xFFFF, 12, 11679, 0); for (r4 = 0; r4 < 4; r4++) nullsub_8(r4); @@ -2605,7 +2605,7 @@ void PlayerHandlecmd19() void PlayerHandlecmd20(void) { - sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); + MenuCursor_Create814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); sub_80304A8(); gBattleBankFunc[gActiveBank] = sub_802C68C; } diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 72a0cc32c..a4b610752 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -472,13 +472,13 @@ void SafariHandlecmd18(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 160; gUnknown_03004210.paletteNum = 0; - FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); - FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); + Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); + Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); gBattleBankFunc[gActiveBank] = bx_battle_menu_t6_2; Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptionsSafari, 400, 18, 35); Text_PrintWindow8002F44(&gUnknown_03004210); - sub_814A5C0(0, 0xFFFF, 12, 11679, 0); + MenuCursor_Create814A5C0(0, 0xFFFF, 12, 11679, 0); for (i = 0; i < 4; i++) nullsub_8(i); diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 6a9e8071e..6266d955c 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -1265,12 +1265,12 @@ void WallyHandlecmd18(void) gBattle_BG0_X = 0; gBattle_BG0_Y = 160; gUnknown_03004210.paletteNum = 0; - FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); - FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); + Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 15, 27, 18); + Text_FillWindowRectDefPalette(&gUnknown_03004210, 10, 2, 35, 16, 36); gBattleBankFunc[gActiveBank] = sub_81372BC; Text_InitWindow(&gUnknown_03004210, BattleText_MenuOptions, 400, 18, 35); Text_PrintWindow8002F44(&gUnknown_03004210); - sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); + MenuCursor_Create814A5C0(0, 0xFFFF, 12, 0x2D9F, 0); for (i = 0; i < 4; i++) nullsub_8(i); sub_802E3E4(0, 0); diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index 67f6e24ef..68a97c536 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -723,7 +723,7 @@ static void Task_BattlePartyMenuShift(u8 taskId) static void Task_BattlePartyMenuCancel(u8 taskId) { - HandleDestroyMenuCursors(); + Menu_DestroyCursor(); ClosePartyPopupMenu(gTasks[taskId].data[4], sBattlePartyPopupMenus); gTasks[taskId].data[4] = gTasks[taskId].data[5]; PrintPartyMenuPromptText(0, 0); diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index fb7392f33..4979760d7 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -249,7 +249,7 @@ void ShowLinkBattleRecords(void) { #if ENGLISH Menu_PrintText(gOtherText_WinLoseDraw, 12, 6); #elif GERMAN - MenuPrint_PixelCoords(gOtherText_WinLoseDraw, 88, 48, 1); + Menu_PrintTextPixelCoords(gOtherText_WinLoseDraw, 88, 48, 1); #endif for (i = 0; i < 5; i++) diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index bf77e5c07..42bb3ba7f 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -78,7 +78,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) { case 0: dp12_8087EA4(); - SetUpWindowConfig(&gWindowTemplate_81E6C58); + Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); gBattle_BG0_X = 0; -- cgit v1.2.3 From 8d7f3f65635bba4f9550e9206564c0724b88dd2e Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Wed, 10 Jan 2018 01:15:15 +0100 Subject: finished decompiling bug.s with nonmatching --- src/battle/anim/bug.c | 314 +++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 313 insertions(+), 1 deletion(-) (limited to 'src/battle') diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c index e9372ed9e..3736a86a8 100644 --- a/src/battle/anim/bug.c +++ b/src/battle/anim/bug.c @@ -10,6 +10,10 @@ extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; static void sub_80DCA38(struct Sprite *sprite); +static void sub_80DCAEC(struct Sprite *sprite); +static void sub_80DCB5C(struct Sprite *sprite); +static void sub_80DCBB4(struct Sprite *sprite); +void sub_80DCD78(struct Sprite *sprite); // used in Move_MEGAHORN void sub_80DC824(struct Sprite *sprite) @@ -102,4 +106,312 @@ static void sub_80DCA38(struct Sprite *sprite) sprite->pos2.x += Sin(sprite->data[6], sprite->data[5]); sprite->data[6] = (sprite->data[6] + 13) & 0xFF; -} \ No newline at end of file +} + +// used in Move_STRING_SHOT +void sub_80DCA70(struct Sprite *sprite) +{ + sub_807A3FC(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + if (GetBankSide(gAnimBankAttacker)) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + sprite->pos1.y += gBattleAnimArgs[1]; + if (!GetBankSide(gAnimBankTarget)) + sprite->pos1.y += 8; + + sprite->callback = sub_80DCAEC; +} + +static void sub_80DCAEC(struct Sprite *sprite) +{ + if (++sprite->data[0] == 3) + { + sprite->data[0] = 0; + sprite->invisible ^= 1; + } + + if (++sprite->data[1] == 51) + { + DestroyAnimSprite(sprite); + } +} + +// used in Move_SPIDER_WEB +void sub_80DCB38(struct Sprite *sprite) +{ + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 16; + + sprite->data[0] = 16; + sprite->callback = sub_80DCB5C; +} + +static void sub_80DCB5C(struct Sprite *sprite) +{ + if (sprite->data[2] < 20) + { + sprite->data[2]++; + } + else if (sprite->data[1]++ & 1) + { + sprite->data[0]--; + REG_BLDALPHA = sprite->data[0] | ((16 - sprite->data[0]) << 8); + + if (sprite->data[0] == 0) + { + sprite->invisible = TRUE; + sprite->callback = sub_80DCBB4; + } + } +} + +static void sub_80DCBB4(struct Sprite *sprite) +{ + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimSprite(sprite); +} + +// used in 3 moves: +// Move_POISON_STING, Move_TWINEEDLE, Move_SPIKE_CANNON +void sub_80DCBCC(struct Sprite *sprite) +{ + s16 lVarX, lVarY; + u16 rot; + + if (IsContest()) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + } + else + { + if (GetBankSide(gAnimBankAttacker)) + { + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + } + } + + if (!IsContest()) + { + if (GetBankSide(gAnimBankAttacker) == GetBankSide(gAnimBankTarget)) + { + if (GetBankIdentity(gAnimBankTarget) == 0 || GetBankIdentity(gAnimBankTarget) == 1) + { + s16 temp1, temp2; + + temp1 = gBattleAnimArgs[2]; + gBattleAnimArgs[2] = -temp1; + + temp2 = gBattleAnimArgs[0]; + gBattleAnimArgs[0] = -temp2; + } + } + } + + sub_80787B0(sprite, 1); + + lVarX = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + lVarY = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + rot = sub_80790F0(lVarX - sprite->pos1.x, lVarY - sprite->pos1.y); + rot += 0xC000; + sub_8078FDC(sprite, FALSE, 0x100, 0x100, rot); + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = lVarX; + sprite->data[4] = lVarY; + + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +// used in 2 moves: +// Move_PIN_MISSILE, Move_ICICLE_SPEAR +void sub_80DCCFC(struct Sprite *sprite) +{ + sub_80787B0(sprite, 1); + + if (GetBankSide(gAnimBankAttacker)) + gBattleAnimArgs[2] = -gBattleAnimArgs[2]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; + sprite->data[5] = gBattleAnimArgs[5]; + sub_80786EC(sprite); + + sprite->callback = sub_80DCD78; + sprite->invisible = TRUE; +} + +#ifdef NONMATCHING +void sub_80DCD78(struct Sprite *sprite) +{ + int i; + s16 x1, x2, y1, y2; + // s16 scale; + // u16 *data; + u16 tempData[8]; + s16 rot; + + sprite->invisible = FALSE; + + if (sub_8078718(sprite)) + { + DestroyAnimSprite(sprite); + return; + } + + // data = &sprite->data[7]; + x1 = sprite->pos1.x; + x2 = sprite->pos2.x; + y1 = sprite->pos1.y; + y2 = sprite->pos2.y; + for (i = 0; i < 8; i++) + { + tempData[i] = sprite->data[i]; + } + x2 += x1; + y2 += y1; + + if (!sub_8078718(sprite)) + { + rot = sub_80790F0(sprite->pos1.x + sprite->pos2.x - x2, + sprite->pos1.y + sprite->pos2.y - y2); + rot += 0xC000; + // scale = 0x100 + sub_8078FDC(sprite, FALSE, 0x100, 0x100, rot); + + for (i = 0; i < 8; i++) + { + sprite->data[i] = tempData[1]; + } + } +} +#else +__attribute__((naked)) +void sub_80DCD78(struct Sprite *sprite) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x14\n\ + adds r4, r0, 0\n\ + adds r2, r4, 0\n\ + adds r2, 0x3E\n\ + ldrb r0, [r2]\n\ + movs r1, 0x5\n\ + negs r1, r1\n\ + ands r1, r0\n\ + strb r1, [r2]\n\ + adds r0, r4, 0\n\ + bl sub_8078718\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _080DCDA4\n\ + adds r0, r4, 0\n\ + bl DestroyAnimSprite\n\ + b _080DCE34\n\ +_080DCDA4:\n\ + movs r0, 0x2E\n\ + adds r0, r4\n\ + mov r8, r0\n\ + ldrh r7, [r4, 0x20]\n\ + ldrh r5, [r4, 0x24]\n\ + ldrh r1, [r4, 0x22]\n\ + mov r12, r1\n\ + ldrh r6, [r4, 0x26]\n\ + mov r2, r8\n\ + add r1, sp, 0x4\n\ + movs r3, 0x7\n\ +_080DCDBA:\n\ + ldrh r0, [r2]\n\ + strh r0, [r1]\n\ + adds r2, 0x2\n\ + adds r1, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _080DCDBA\n\ + adds r0, r7, r5\n\ + lsls r0, 16\n\ + lsrs r5, r0, 16\n\ + mov r2, r12\n\ + adds r0, r2, r6\n\ + lsls r0, 16\n\ + lsrs r6, r0, 16\n\ + adds r0, r4, 0\n\ + bl sub_8078718\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + bne _080DCE34\n\ + ldrh r0, [r4, 0x24]\n\ + ldrh r1, [r4, 0x20]\n\ + adds r0, r1\n\ + lsls r1, r5, 16\n\ + asrs r1, 16\n\ + subs r0, r1\n\ + lsls r0, 16\n\ + asrs r0, 16\n\ + ldrh r1, [r4, 0x26]\n\ + ldrh r2, [r4, 0x22]\n\ + adds r1, r2\n\ + lsls r2, r6, 16\n\ + asrs r2, 16\n\ + subs r1, r2\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + bl sub_80790F0\n\ + lsls r0, 16\n\ + movs r1, 0xC0\n\ + lsls r1, 24\n\ + adds r0, r1\n\ + lsrs r0, 16\n\ + movs r3, 0x80\n\ + lsls r3, 1\n\ + str r0, [sp]\n\ + adds r0, r4, 0\n\ + movs r1, 0\n\ + adds r2, r3, 0\n\ + bl sub_8078FDC\n\ + add r2, sp, 0x4\n\ + mov r1, r8\n\ + movs r3, 0x7\n\ +_080DCE26:\n\ + ldrh r0, [r2]\n\ + strh r0, [r1]\n\ + adds r2, 0x2\n\ + adds r1, 0x2\n\ + subs r3, 0x1\n\ + cmp r3, 0\n\ + bge _080DCE26\n\ +_080DCE34:\n\ + add sp, 0x14\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80DCE40(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3) + 18; + } + else + { + sprite->pos1.x = GetBankPosition(gAnimBankTarget, 2); + sprite->pos1.y = GetBankPosition(gAnimBankTarget, 3) + 18; + } + + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_80785E4; +} -- cgit v1.2.3 From f6d7abc83482cd56b7051784ec5420dc34a2ffe2 Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Wed, 10 Jan 2018 01:26:38 +0100 Subject: oops --- src/battle/anim/bug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/battle') diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c index 3736a86a8..501d544b1 100644 --- a/src/battle/anim/bug.c +++ b/src/battle/anim/bug.c @@ -287,7 +287,7 @@ void sub_80DCD78(struct Sprite *sprite) for (i = 0; i < 8; i++) { - sprite->data[i] = tempData[1]; + sprite->data[i] = tempData[i]; } } } -- cgit v1.2.3 From 0be27e16d2bea0fb4a9145849706779501ae3450 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 9 Jan 2018 19:54:56 -0600 Subject: match sub_80DCD78 --- src/battle/anim/bug.c | 161 ++++++++------------------------------------------ 1 file changed, 23 insertions(+), 138 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/bug.c b/src/battle/anim/bug.c index 501d544b1..dbc0f75a5 100644 --- a/src/battle/anim/bug.c +++ b/src/battle/anim/bug.c @@ -39,7 +39,7 @@ void sub_80DC824(struct Sprite *sprite) sprite->data[2] = GetBankPosition(gAnimBankTarget, 2) + gBattleAnimArgs[2]; sprite->data[4] = GetBankPosition(gAnimBankTarget, 3) + gBattleAnimArgs[3]; - + sprite->callback = sub_8078B34; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } @@ -64,7 +64,7 @@ void sub_80DC8F4(struct Sprite *sprite) sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); - + sprite->callback = sub_8078B34; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } @@ -247,157 +247,42 @@ void sub_80DCCFC(struct Sprite *sprite) sprite->invisible = TRUE; } -#ifdef NONMATCHING void sub_80DCD78(struct Sprite *sprite) { - int i; - s16 x1, x2, y1, y2; - // s16 scale; - // u16 *data; - u16 tempData[8]; - s16 rot; - sprite->invisible = FALSE; if (sub_8078718(sprite)) { DestroyAnimSprite(sprite); - return; } - - // data = &sprite->data[7]; - x1 = sprite->pos1.x; - x2 = sprite->pos2.x; - y1 = sprite->pos1.y; - y2 = sprite->pos2.y; - for (i = 0; i < 8; i++) - { - tempData[i] = sprite->data[i]; - } - x2 += x1; - y2 += y1; - - if (!sub_8078718(sprite)) + else { - rot = sub_80790F0(sprite->pos1.x + sprite->pos2.x - x2, - sprite->pos1.y + sprite->pos2.y - y2); - rot += 0xC000; - // scale = 0x100 - sub_8078FDC(sprite, FALSE, 0x100, 0x100, rot); + s16 tempData[8]; + u16 *data = sprite->data; + u16 x1 = sprite->pos1.x; + s16 x2 = sprite->pos2.x; + u16 y1 = sprite->pos1.y; + s16 y2 = sprite->pos2.y; + int i; for (i = 0; i < 8; i++) + tempData[i] = data[i]; + + x2 += x1; + y2 += y1; + + if (!sub_8078718(sprite)) { - sprite->data[i] = tempData[i]; + u16 rot = sub_80790F0(sprite->pos1.x + sprite->pos2.x - x2, + sprite->pos1.y + sprite->pos2.y - y2); + rot += 0xC000; + sub_8078FDC(sprite, FALSE, 0x100, 0x100, rot); + + for (i = 0; i < 8; i++) + data[i] = tempData[i]; } } } -#else -__attribute__((naked)) -void sub_80DCD78(struct Sprite *sprite) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r8\n\ - push {r7}\n\ - sub sp, 0x14\n\ - adds r4, r0, 0\n\ - adds r2, r4, 0\n\ - adds r2, 0x3E\n\ - ldrb r0, [r2]\n\ - movs r1, 0x5\n\ - negs r1, r1\n\ - ands r1, r0\n\ - strb r1, [r2]\n\ - adds r0, r4, 0\n\ - bl sub_8078718\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _080DCDA4\n\ - adds r0, r4, 0\n\ - bl DestroyAnimSprite\n\ - b _080DCE34\n\ -_080DCDA4:\n\ - movs r0, 0x2E\n\ - adds r0, r4\n\ - mov r8, r0\n\ - ldrh r7, [r4, 0x20]\n\ - ldrh r5, [r4, 0x24]\n\ - ldrh r1, [r4, 0x22]\n\ - mov r12, r1\n\ - ldrh r6, [r4, 0x26]\n\ - mov r2, r8\n\ - add r1, sp, 0x4\n\ - movs r3, 0x7\n\ -_080DCDBA:\n\ - ldrh r0, [r2]\n\ - strh r0, [r1]\n\ - adds r2, 0x2\n\ - adds r1, 0x2\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bge _080DCDBA\n\ - adds r0, r7, r5\n\ - lsls r0, 16\n\ - lsrs r5, r0, 16\n\ - mov r2, r12\n\ - adds r0, r2, r6\n\ - lsls r0, 16\n\ - lsrs r6, r0, 16\n\ - adds r0, r4, 0\n\ - bl sub_8078718\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - bne _080DCE34\n\ - ldrh r0, [r4, 0x24]\n\ - ldrh r1, [r4, 0x20]\n\ - adds r0, r1\n\ - lsls r1, r5, 16\n\ - asrs r1, 16\n\ - subs r0, r1\n\ - lsls r0, 16\n\ - asrs r0, 16\n\ - ldrh r1, [r4, 0x26]\n\ - ldrh r2, [r4, 0x22]\n\ - adds r1, r2\n\ - lsls r2, r6, 16\n\ - asrs r2, 16\n\ - subs r1, r2\n\ - lsls r1, 16\n\ - asrs r1, 16\n\ - bl sub_80790F0\n\ - lsls r0, 16\n\ - movs r1, 0xC0\n\ - lsls r1, 24\n\ - adds r0, r1\n\ - lsrs r0, 16\n\ - movs r3, 0x80\n\ - lsls r3, 1\n\ - str r0, [sp]\n\ - adds r0, r4, 0\n\ - movs r1, 0\n\ - adds r2, r3, 0\n\ - bl sub_8078FDC\n\ - add r2, sp, 0x4\n\ - mov r1, r8\n\ - movs r3, 0x7\n\ -_080DCE26:\n\ - ldrh r0, [r2]\n\ - strh r0, [r1]\n\ - adds r2, 0x2\n\ - adds r1, 0x2\n\ - subs r3, 0x1\n\ - cmp r3, 0\n\ - bge _080DCE26\n\ -_080DCE34:\n\ - add sp, 0x14\n\ - pop {r3}\n\ - mov r8, r3\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .syntax divided\n"); -} -#endif // NONMATCHING void sub_80DCE40(struct Sprite *sprite) { -- cgit v1.2.3 From cf7ffa568a2a09c761bae6aa4c70b8d8913c3e81 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 9 Jan 2018 23:37:26 -0600 Subject: rename unknown_task to scanline_effect --- src/battle/anim/draw.c | 2 +- src/battle/battle_2.c | 2 +- src/battle/battle_transition.c | 2 +- src/battle/reshow_battle_screen.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c index 3adb62e06..0508eed8c 100755 --- a/src/battle/anim/draw.c +++ b/src/battle/anim/draw.c @@ -3,7 +3,7 @@ #include "trig.h" #include "battle_anim.h" #include "sound.h" -#include "unknown_task.h" +#include "scanline_effect.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 249b67e0d..20daf4052 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -34,7 +34,7 @@ #include "trainer.h" #include "trig.h" #include "tv.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "util.h" #include "constants/battle_move_effects.h" #include "constants/items.h" diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index 985f43945..48ef86fa2 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -13,7 +13,7 @@ #include "trainer.h" #include "field_camera.h" #include "ewram.h" -#include "unknown_task.h" +#include "scanline_effect.h" void sub_807DE10(void); void dp12_8087EA4(void); diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index 42bb3ba7f..83dad5f60 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -3,7 +3,7 @@ #include "battle_anim.h" #include "palette.h" #include "main.h" -#include "unknown_task.h" +#include "scanline_effect.h" #include "text.h" #include "rom_8077ABC.h" #include "data2.h" -- cgit v1.2.3 From f9f0e84b70f1b313200acd6f0d180413e34517da Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 9 Jan 2018 23:55:03 -0600 Subject: label some scanline_effect functions --- src/battle/anim/draw.c | 6 +++--- src/battle/battle_2.c | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c index 0508eed8c..ac1ae08cb 100755 --- a/src/battle/anim/draw.c +++ b/src/battle/anim/draw.c @@ -97,7 +97,7 @@ void sub_80D0D68(u8 taskId) if (++task->data[3] >= task->data[15]) { - gUnknown_03004DC0.unk15 = 3; + gScanlineEffect.unk15 = 3; DestroyAnimVisualTask(taskId); } } @@ -202,7 +202,7 @@ _080D0E04:\n\ ldrsh r1, [r3, r2]\n\ cmp r0, r1\n\ blt _080D0E22\n\ - ldr r1, _080D0E2C @ =gUnknown_03004DC0\n\ + ldr r1, _080D0E2C @ =gScanlineEffect\n\ movs r0, 0x3\n\ strb r0, [r1, 0x15]\n\ adds r0, r4, 0\n\ @@ -213,7 +213,7 @@ _080D0E22:\n\ bx r0\n\ .align 2, 0\n\ _080D0E28: .4byte gUnknown_03004DE0\n\ -_080D0E2C: .4byte gUnknown_03004DC0\n\ +_080D0E2C: .4byte gScanlineEffect\n\ .syntax divided\n"); } #endif diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 20daf4052..da6c9a2b4 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1073,7 +1073,7 @@ void sub_800FCFC(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - sub_8089668(); + ScanlineEffect_TransferDma(); } void nullsub_36(struct Sprite *sprite) -- cgit v1.2.3 From beac14a9a0ab072186fa99afcfcc0d844b77a68d Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Wed, 10 Jan 2018 12:12:55 -0600 Subject: label more of scanline_effect.c --- src/battle/anim/draw.c | 28 ++++---- src/battle/battle_2.c | 22 +++--- src/battle/battle_transition.c | 148 ++++++++++++++++++++--------------------- 3 files changed, 99 insertions(+), 99 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c index ac1ae08cb..fc74e3f46 100755 --- a/src/battle/anim/draw.c +++ b/src/battle/anim/draw.c @@ -21,7 +21,8 @@ static void sub_80D0E8C(struct Sprite* sprite); void sub_80D0C88(u8 taskId) { struct Task* task = &gTasks[taskId]; - struct UnknownTaskStruct sp; + struct ScanlineEffectParams params; + s16 i; task->data[0] = sub_8077FC0(gAnimBankTarget) + 32; task->data[1] = 4; @@ -30,30 +31,31 @@ void sub_80D0C88(u8 taskId) task->data[4] = 0; task->data[5] = 0; task->data[15] = sub_807A100(gAnimBankTarget, 0); + if (GetBankIdentity_permutated(gAnimBankTarget) == 1) { task->data[6] = gBattle_BG1_X; - sp.dest = (u16 *)REG_ADDR_BG1HOFS; + params.dmaDest = (u16 *)REG_ADDR_BG1HOFS; } else { task->data[6] = gBattle_BG2_X; - sp.dest = (u16 *)REG_ADDR_BG2HOFS; + params.dmaDest = (u16 *)REG_ADDR_BG2HOFS; } for (i = task->data[0] - 0x40; i <= task->data[0];i++) { if (i >= 0) { - gUnknown_03004DE0[0][i] = task->data[6] + 0xF0; - gUnknown_03004DE0[1][i] = task->data[6] + 0xF0; + gScanlineEffectRegBuffers[0][i] = task->data[6] + 0xF0; + gScanlineEffectRegBuffers[1][i] = task->data[6] + 0xF0; } } - sp.control = 0xa2600001; - sp.unk8 = 1; - sp.unk9 = 0; - sub_80895F8(sp); + params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; + params.unk8 = 1; + params.unk9 = 0; + ScanlineEffect_SetParams(params); task->func = sub_80D0D68; } @@ -91,8 +93,8 @@ void sub_80D0D68(u8 taskId) if (task->data[5] >= 0) { - gUnknown_03004DE0[0][task->data[5]] = task->data[6]; - gUnknown_03004DE0[1][task->data[5]] = task->data[6]; + gScanlineEffectRegBuffers[0][task->data[5]] = task->data[6]; + gScanlineEffectRegBuffers[1][task->data[5]] = task->data[6]; } if (++task->data[3] >= task->data[15]) @@ -178,7 +180,7 @@ _080D0DE0:\n\ ldrsh r0, [r3, r1]\n\ cmp r0, 0\n\ blt _080D0E04\n\ - ldr r2, _080D0E28 @ =gUnknown_03004DE0\n\ + ldr r2, _080D0E28 @ =gScanlineEffectRegBuffers\n\ lsls r0, 1\n\ adds r0, r2\n\ ldrh r1, [r3, 0x14]\n\ @@ -212,7 +214,7 @@ _080D0E22:\n\ pop {r0}\n\ bx r0\n\ .align 2, 0\n\ -_080D0E28: .4byte gUnknown_03004DE0\n\ +_080D0E28: .4byte gScanlineEffectRegBuffers\n\ _080D0E2C: .4byte gScanlineEffect\n\ .syntax divided\n"); } diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index da6c9a2b4..f4fff742c 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -223,17 +223,17 @@ void InitBattle(void) for (i = 0; i < 80; i++) { - gUnknown_03004DE0[0][i] = 0xF0; - gUnknown_03004DE0[1][i] = 0xF0; + gScanlineEffectRegBuffers[0][i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0xF0; } for (i = 80; i < 160; i++) { asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter - gUnknown_03004DE0[0][i] = 0xFF10; - gUnknown_03004DE0[1][i] = 0xFF10; + gScanlineEffectRegBuffers[0][i] = 0xFF10; + gScanlineEffectRegBuffers[1][i] = 0xFF10; } - //sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); - sub_80895F8(gUnknown_081F9674); + //ScanlineEffect_SetParams(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8); + ScanlineEffect_SetParams(gUnknown_081F9674); Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); gBattle_BG0_X = 0; @@ -1073,7 +1073,7 @@ void sub_800FCFC(void) LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); - ScanlineEffect_TransferDma(); + ScanlineEffect_InitHBlankDmaTransfer(); } void nullsub_36(struct Sprite *sprite) @@ -1201,14 +1201,14 @@ void c2_8011A1C(void) for (i = 0; i < 80; i++) { - gUnknown_03004DE0[0][i] = 0xF0; - gUnknown_03004DE0[1][i] = 0xF0; + gScanlineEffectRegBuffers[0][i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0xF0; } for (i = 80; i < 160; i++) { asm(""::"r"(i)); // Needed to stop the compiler from optimizing out the loop counter - gUnknown_03004DE0[0][i] = 0xFF10; - gUnknown_03004DE0[1][i] = 0xFF10; + gScanlineEffectRegBuffers[0][i] = 0xFF10; + gScanlineEffectRegBuffers[1][i] = 0xFF10; } Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index 48ef86fa2..843203a1e 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -18,8 +18,6 @@ void sub_807DE10(void); void dp12_8087EA4(void); -extern u16 gUnknown_03005560[]; - extern const struct OamData gFieldOamData_32x32; struct TransitionData @@ -674,7 +672,7 @@ static bool8 Phase2_Transition_Swirl_Func1(struct Task* task) sub_811D658(); dp12_8087EA4(); BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); - sub_811D6E8(gUnknown_03005560, TRANSITION_STRUCT.field_14, 0, 2, 0, 160); + sub_811D6E8(gScanlineEffectRegBuffers[1], TRANSITION_STRUCT.field_14, 0, 2, 0, 160); SetVBlankCallback(VBlankCB_Phase2_Transition_Swirl); SetHBlankCallback(HBlankCB_Phase2_Transition_Swirl); @@ -695,7 +693,7 @@ static bool8 Phase2_Transition_Swirl_Func2(struct Task* task) task->data[1] += 4; task->data[2] += 8; - sub_811D6E8(gUnknown_03004DE0[0], TRANSITION_STRUCT.field_14, task->data[1], 2, task->data[2], 160); + sub_811D6E8(gScanlineEffectRegBuffers[0], TRANSITION_STRUCT.field_14, task->data[1], 2, task->data[2], 160); if (!gPaletteFade.active) { @@ -711,12 +709,12 @@ static void VBlankCB_Phase2_Transition_Swirl(void) { VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } static void HBlankCB_Phase2_Transition_Swirl(void) { - u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; + u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1HOFS = var; REG_BG2HOFS = var; REG_BG3HOFS = var; @@ -735,7 +733,7 @@ static bool8 Phase2_Transition_Shuffle_Func1(struct Task* task) dp12_8087EA4(); BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); - memset(gUnknown_03005560, TRANSITION_STRUCT.field_16, 0x140); + memset(gScanlineEffectRegBuffers[1], TRANSITION_STRUCT.field_16, 0x140); SetVBlankCallback(VBlankCB_Phase2_Transition_Shuffle); SetHBlankCallback(HBlankCB_Phase2_Transition_Shuffle); @@ -764,7 +762,7 @@ static bool8 Phase2_Transition_Shuffle_Func2(struct Task* task) for (i = 0; i < 160; i++, r4 += 4224) { u16 var = r4 / 256; - gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3); + gScanlineEffectRegBuffers[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3); } if (!gPaletteFade.active) @@ -778,12 +776,12 @@ static void VBlankCB_Phase2_Transition_Shuffle(void) { VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } static void HBlankCB_Phase2_Transition_Shuffle(void) { - u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; + u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1VOFS = var; REG_BG2VOFS = var; REG_BG3VOFS = var; @@ -815,7 +813,7 @@ static bool8 Phase2_Transition_BigPokeball_Func1(struct Task* task) for (i = 0; i < 160; i++) { - gUnknown_03005560[i] = 240; + gScanlineEffectRegBuffers[1][i] = 240; } SetVBlankCallback(VBlankCB0_Phase2_Transition_BigPokeball); @@ -844,7 +842,7 @@ static bool8 Phase2_Transition_BigPokeball_Func2(struct Task* task) dst1[i * 32 + j] = *BigPokeballMap | 0xF000; } } - sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5], 160); + sub_811D6E8(gScanlineEffectRegBuffers[0], 0, task->data[4], 132, task->data[5], 160); task->tState++; return TRUE; @@ -864,7 +862,7 @@ static bool8 Phase2_Transition_BigPokeball_Func3(struct Task* task) task->data[4] += 8; task->data[5] -= 256; - sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160); + sub_811D6E8(gScanlineEffectRegBuffers[0], 0, task->data[4], 132, task->data[5] >> 8, 160); TRANSITION_STRUCT.VBlank_DMA++; return FALSE; @@ -884,7 +882,7 @@ static bool8 Phase2_Transition_BigPokeball_Func4(struct Task* task) task->data[4] += 8; task->data[5] -= 256; - sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160); + sub_811D6E8(gScanlineEffectRegBuffers[0], 0, task->data[4], 132, task->data[5] >> 8, 160); TRANSITION_STRUCT.VBlank_DMA++; return FALSE; @@ -896,7 +894,7 @@ static bool8 Phase2_Transition_BigPokeball_Func5(struct Task* task) task->data[4] += 8; task->data[5] -= 256; - sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160); + sub_811D6E8(gScanlineEffectRegBuffers[0], 0, task->data[4], 132, task->data[5] >> 8, 160); if (task->data[5] <= 0) { @@ -921,7 +919,7 @@ static bool8 Phase2_Transition_BigPokeball_Func6(struct Task* task) if (task->data[1] < 0) task->data[1] = 0; } - sub_811D764(gUnknown_03004DE0[0], 120, 80, task->data[1]); + sub_811D764(gScanlineEffectRegBuffers[0], 120, 80, task->data[1]); if (task->data[1] == 0) { DmaStop(0); @@ -943,7 +941,7 @@ static void Transition_BigPokeball_Vblank(void) DmaStop(0); VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_WININ = TRANSITION_STRUCT.WININ; REG_WINOUT = TRANSITION_STRUCT.WINOUT; REG_WIN0V = TRANSITION_STRUCT.WIN0V; @@ -954,13 +952,13 @@ static void Transition_BigPokeball_Vblank(void) static void VBlankCB0_Phase2_Transition_BigPokeball(void) { Transition_BigPokeball_Vblank(); - DmaSet(0, gUnknown_03005560, ®_BG0HOFS, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BG0HOFS, 0xA2400001); } static void VBlankCB1_Phase2_Transition_BigPokeball(void) { Transition_BigPokeball_Vblank(); - DmaSet(0, gUnknown_03005560, ®_WIN0H, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); } static void Phase2Task_Transition_PokeballsTrail(u8 taskID) @@ -1087,7 +1085,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func1(struct Task* task) for (i = 0; i < 160; i++) { - gUnknown_03005560[i] = 0xF3F4; + gScanlineEffectRegBuffers[1][i] = 0xF3F4; } SetVBlankCallback(VBlankCB_Phase2_Transition_Clockwise_BlackFade); @@ -1104,7 +1102,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func2(struct Task* task) sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, TRANSITION_STRUCT.data[4], -1, 1, 1); do { - gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] + 1) | 0x7800; + gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] + 1) | 0x7800; } while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1)); TRANSITION_STRUCT.data[4] += 16; @@ -1132,7 +1130,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func3(struct Task* task) r1 = 120, r3 = TRANSITION_STRUCT.data[2] + 1; if (TRANSITION_STRUCT.data[5] >= 80) r1 = TRANSITION_STRUCT.data[2], r3 = 240; - gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8); + gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8); if (var != 0) break; var = sub_811D978(TRANSITION_STRUCT.data, 1, 1); @@ -1148,7 +1146,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func3(struct Task* task) { while (TRANSITION_STRUCT.data[3] < TRANSITION_STRUCT.data[5]) { - gUnknown_03004DE0[0][++TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8); + gScanlineEffectRegBuffers[0][++TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8); } } @@ -1163,7 +1161,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func4(struct Task* task) sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, TRANSITION_STRUCT.data[4], 160, 1, 1); do { - gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] << 8) | 0xF0; + gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] << 8) | 0xF0; } while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1)); TRANSITION_STRUCT.data[4] -= 16; @@ -1188,10 +1186,10 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func5(struct Task* task) while (1) { - r1 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] & 0xFF, r2 = TRANSITION_STRUCT.data[2]; + r1 = gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] & 0xFF, r2 = TRANSITION_STRUCT.data[2]; if (TRANSITION_STRUCT.data[5] <= 80) r2 = 120, r1 = TRANSITION_STRUCT.data[2]; - gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8); + gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8); r3 = 0; if (var != 0) break; @@ -1208,7 +1206,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func5(struct Task* task) { while (TRANSITION_STRUCT.data[3] > TRANSITION_STRUCT.data[5]) { - gUnknown_03004DE0[0][--TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8); + gScanlineEffectRegBuffers[0][--TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8); } } @@ -1228,7 +1226,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func6(struct Task* task) r2 = 120, r3 = TRANSITION_STRUCT.data[2]; if (TRANSITION_STRUCT.data[2] >= 120) r2 = 0, r3 = 240; - gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r3) | (r2 << 8); + gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (r3) | (r2 << 8); } while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1)); @@ -1253,12 +1251,12 @@ static void VBlankCB_Phase2_Transition_Clockwise_BlackFade(void) DmaStop(0); VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA != 0) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_WININ = TRANSITION_STRUCT.WININ; REG_WINOUT = TRANSITION_STRUCT.WINOUT; REG_WIN0V = TRANSITION_STRUCT.WIN0V; - REG_WIN0H = gUnknown_03004DE0[1][0]; - DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); + REG_WIN0H = gScanlineEffectRegBuffers[1][0]; + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); } static void Phase2Task_Transition_Ripple(u8 taskID) @@ -1275,7 +1273,7 @@ static bool8 Phase2_Transition_Ripple_Func1(struct Task* task) for (i = 0; i < 160; i++) { - gUnknown_03005560[i] = TRANSITION_STRUCT.field_16; + gScanlineEffectRegBuffers[1][i] = TRANSITION_STRUCT.field_16; } SetVBlankCallback(VBlankCB_Phase2_Transition_Ripple); @@ -1308,7 +1306,7 @@ static bool8 Phase2_Transition_Ripple_Func2(struct Task* task) // todo: fix the asm s16 var = r4 >> 8; asm(""); - gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3); + gScanlineEffectRegBuffers[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3); asm(""); } @@ -1329,12 +1327,12 @@ static void VBlankCB_Phase2_Transition_Ripple(void) { VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); } static void HBlankCB_Phase2_Transition_Ripple(void) { - u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; + u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1VOFS = var; REG_BG2VOFS = var; REG_BG3VOFS = var; @@ -1359,7 +1357,7 @@ static bool8 Phase2_Transition_Wave_Func1(struct Task* task) for (i = 0; i < 160; i++) { - gUnknown_03004DE0[1][i] = 242; + gScanlineEffectRegBuffers[1][i] = 242; } SetVBlankCallback(VBlankCB_Phase2_Transition_Wave); @@ -1375,7 +1373,7 @@ static bool8 Phase2_Transition_Wave_Func2(struct Task* task) bool8 nextFunc; TRANSITION_STRUCT.VBlank_DMA = 0; - toStore = gUnknown_03004DE0[0]; + toStore = gScanlineEffectRegBuffers[0]; r5 = task->data[2]; task->data[2] += 16; task->data[1] += 8; @@ -1411,11 +1409,11 @@ static void VBlankCB_Phase2_Transition_Wave(void) DmaStop(0); VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA != 0) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_WININ = TRANSITION_STRUCT.WININ; REG_WINOUT = TRANSITION_STRUCT.WINOUT; REG_WIN0V = TRANSITION_STRUCT.WIN0V; - DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); } #define tMugshotOpponentID data[13] @@ -1474,7 +1472,7 @@ static bool8 Phase2_Mugshot_Func1(struct Task* task) for (i = 0; i < 160; i++) { - gUnknown_03004DE0[1][i] = 0xF0F1; + gScanlineEffectRegBuffers[1][i] = 0xF0F1; } SetVBlankCallback(VBlankCB0_Phase2_Mugshots); @@ -1519,7 +1517,7 @@ static bool8 Phase2_Mugshot_Func3(struct Task* task) TRANSITION_STRUCT.VBlank_DMA = 0; - toStore = gUnknown_03004DE0[0]; + toStore = gScanlineEffectRegBuffers[0]; r5 = task->data[1]; task->data[1] += 0x10; @@ -1565,7 +1563,7 @@ static bool8 Phase2_Mugshot_Func4(struct Task* task) TRANSITION_STRUCT.VBlank_DMA = 0; - for (i = 0, toStore = gUnknown_03004DE0[0]; i < 160; i++, toStore++) + for (i = 0, toStore = gScanlineEffectRegBuffers[0]; i < 160; i++, toStore++) { *toStore = 0xF0; } @@ -1608,8 +1606,8 @@ static bool8 Phase2_Mugshot_Func6(struct Task* task) TRANSITION_STRUCT.VBlank_DMA = 0; SetVBlankCallback(NULL); DmaStop(0); - memset(gUnknown_03004DE0[0], 0, 0x140); - memset(gUnknown_03004DE0[1], 0, 0x140); + memset(gScanlineEffectRegBuffers[0], 0, 0x140); + memset(gScanlineEffectRegBuffers[1], 0, 0x140); REG_WIN0H = 0xF0; REG_BLDY = 0; task->tState++; @@ -1642,15 +1640,15 @@ static bool8 Phase2_Mugshot_Func7(struct Task* task) { s16 index1 = 0x50 - i; s16 index2 = 0x50 + i; - if (gUnknown_03004DE0[0][index1] <= 15) + if (gScanlineEffectRegBuffers[0][index1] <= 15) { r6 = TRUE; - gUnknown_03004DE0[0][index1]++; + gScanlineEffectRegBuffers[0][index1]++; } - if (gUnknown_03004DE0[0][index2] <= 15) + if (gScanlineEffectRegBuffers[0][index2] <= 15) { r6 = TRUE; - gUnknown_03004DE0[0][index2]++; + gScanlineEffectRegBuffers[0][index2]++; } } } @@ -1678,7 +1676,7 @@ static bool8 Phase2_Mugshot_Func9(struct Task* task) TRANSITION_STRUCT.VBlank_DMA = 0; task->data[3]++; - memset(gUnknown_03004DE0[0], task->data[3], 0x140); + memset(gScanlineEffectRegBuffers[0], task->data[3], 0x140); if (task->data[3] > 15) task->tState++; @@ -1699,12 +1697,12 @@ static void VBlankCB0_Phase2_Mugshots(void) DmaStop(0); VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA != 0) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_BG0VOFS = TRANSITION_STRUCT.field_1C; REG_WININ = TRANSITION_STRUCT.WININ; REG_WINOUT = TRANSITION_STRUCT.WINOUT; REG_WIN0V = TRANSITION_STRUCT.WIN0V; - DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); } static void VBlankCB1_Phase2_Mugshots(void) @@ -1712,9 +1710,9 @@ static void VBlankCB1_Phase2_Mugshots(void) DmaStop(0); VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA != 0) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_BLDCNT = TRANSITION_STRUCT.BLDCNT; - DmaSet(0, gUnknown_03004DE0[1], ®_BLDY, 0xA2400001); + DmaSet(0, gScanlineEffectRegBuffers[1], ®_BLDY, 0xA2400001); } static void HBlankCB_Phase2_Mugshots(void) @@ -1856,8 +1854,8 @@ static bool8 Phase2_Transition_Slice_Func1(struct Task* task) for (i = 0; i < 160; i++) { - gUnknown_03004DE0[1][i] = TRANSITION_STRUCT.field_14; - gUnknown_03004DE0[1][160 + i] = 0xF0; + gScanlineEffectRegBuffers[1][i] = TRANSITION_STRUCT.field_14; + gScanlineEffectRegBuffers[1][160 + i] = 0xF0; } REG_IE |= INTR_FLAG_HBLANK; @@ -1886,8 +1884,8 @@ static bool8 Phase2_Transition_Slice_Func2(struct Task* task) for (i = 0; i < 160; i++) { - u16* storeLoc1 = &gUnknown_03004DE0[0][i]; - u16* storeLoc2 = &gUnknown_03004DE0[0][i + 160]; + u16* storeLoc1 = &gScanlineEffectRegBuffers[0][i]; + u16* storeLoc2 = &gScanlineEffectRegBuffers[0][i + 160]; if (1 & i) { *storeLoc1 = TRANSITION_STRUCT.field_14 + task->data[1]; @@ -1923,13 +1921,13 @@ static void VBlankCB_Phase2_Transition_Slice(void) REG_WINOUT = TRANSITION_STRUCT.WINOUT; REG_WIN0V = TRANSITION_STRUCT.WIN0V; if (TRANSITION_STRUCT.VBlank_DMA) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 640); - DmaSet(0, &gUnknown_03004DE0[1][160], ®_WIN0H, 0xA2400001); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); + DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, 0xA2400001); } static void HBlankCB_Phase2_Transition_Slice(void) { - u16 var = gUnknown_03004DE0[1][REG_VCOUNT]; + u16 var = gScanlineEffectRegBuffers[1][REG_VCOUNT]; REG_BG1HOFS = var; REG_BG2HOFS = var; REG_BG3HOFS = var; @@ -1955,8 +1953,8 @@ static bool8 Phase2_Transition_WhiteFade_Func1(struct Task* task) for (i = 0; i < 160; i++) { - gUnknown_03004DE0[1][i] = 0; - gUnknown_03004DE0[1][i + 160] = 0xF0; + gScanlineEffectRegBuffers[1][i] = 0; + gScanlineEffectRegBuffers[1][i + 160] = 0xF0; } REG_IE |= INTR_FLAG_HBLANK; @@ -2038,8 +2036,8 @@ static void VBlankCB0_Phase2_Transition_WhiteFade(void) REG_WINOUT = TRANSITION_STRUCT.WINOUT; REG_WIN0V = TRANSITION_STRUCT.field_6; if (TRANSITION_STRUCT.VBlank_DMA) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 640); - DmaSet(0, &gUnknown_03004DE0[1][160], ®_WIN0H, 0xA2400001); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 640); + DmaSet(0, &gScanlineEffectRegBuffers[1][160], ®_WIN0H, 0xA2400001); } static void VBlankCB1_Phase2_Transition_WhiteFade(void) @@ -2055,7 +2053,7 @@ static void VBlankCB1_Phase2_Transition_WhiteFade(void) static void HBlankCB_Phase2_Transition_WhiteFade(void) { - REG_BLDY = gUnknown_03004DE0[1][REG_VCOUNT]; + REG_BLDY = gScanlineEffectRegBuffers[1][REG_VCOUNT]; } static void sub_811CFD0(struct Sprite* sprite) @@ -2069,8 +2067,8 @@ static void sub_811CFD0(struct Sprite* sprite) else { u16 i; - u16* ptr1 = &gUnknown_03004DE0[0][sprite->pos1.y]; - u16* ptr2 = &gUnknown_03004DE0[0][sprite->pos1.y + 160]; + u16* ptr1 = &gScanlineEffectRegBuffers[0][sprite->pos1.y]; + u16* ptr2 = &gScanlineEffectRegBuffers[0][sprite->pos1.y + 160]; for (i = 0; i < 20; i++) { ptr1[i] = sprite->data[0] >> 8; @@ -2168,10 +2166,10 @@ static bool8 Phase2_Transition_Shards_Func1(struct Task* task) for (i = 0; i < 160; i++) { - gUnknown_03004DE0[0][i] = 0xF0; + gScanlineEffectRegBuffers[0][i] = 0xF0; } - CpuSet(gUnknown_03004DE0[0], gUnknown_03004DE0[1], 0xA0); + CpuSet(gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 0xA0); SetVBlankCallback(VBlankCB_Phase2_Transition_Shards); task->tState++; @@ -2200,8 +2198,8 @@ static bool8 Phase2_Transition_Shards_Func3(struct Task* task) for (i = 0, nextFunc = FALSE; i < 16; i++) { - s16 r3 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] >> 8; - s16 r4 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] & 0xFF; + s16 r3 = gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] >> 8; + s16 r4 = gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] & 0xFF; if (task->data[2] == 0) { if (r3 < TRANSITION_STRUCT.data[2]) @@ -2216,7 +2214,7 @@ static bool8 Phase2_Transition_Shards_Func3(struct Task* task) if (r4 <= r3) r4 = r3; } - gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r4) | (r3 << 8); + gScanlineEffectRegBuffers[0][TRANSITION_STRUCT.data[3]] = (r4) | (r3 << 8); if (nextFunc) { task->tState++; @@ -2263,12 +2261,12 @@ static void VBlankCB_Phase2_Transition_Shards(void) DmaStop(0); VBlankCB_BattleTransition(); if (TRANSITION_STRUCT.VBlank_DMA) - DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320); + DmaCopy16(3, gScanlineEffectRegBuffers[0], gScanlineEffectRegBuffers[1], 320); REG_WININ = TRANSITION_STRUCT.WININ; REG_WINOUT = TRANSITION_STRUCT.WINOUT; REG_WIN0V = TRANSITION_STRUCT.WIN0V; - REG_WIN0H = gUnknown_03004DE0[1][0]; - DmaSet(0, gUnknown_03004DE0[1], ®_WIN0H, 0xA2400001); + REG_WIN0H = gScanlineEffectRegBuffers[1][0]; + DmaSet(0, gScanlineEffectRegBuffers[1], ®_WIN0H, 0xA2400001); } static void CreatePhase1Task(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4) -- cgit v1.2.3 From bb2c758e8fa730b2bd19b92119a2bd7e37af57f8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Wed, 10 Jan 2018 13:18:31 -0600 Subject: finish labeling scanline_effect.c --- src/battle/anim/draw.c | 4 ++-- src/battle/battle_2.c | 20 ++++++++++---------- src/battle/battle_4.c | 4 ++-- src/battle/battle_controller_player.c | 4 ++-- src/battle/battle_transition.c | 22 +++++++++++----------- src/battle/reshow_battle_screen.c | 10 +++++----- 6 files changed, 32 insertions(+), 32 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c index fc74e3f46..f9e505bf2 100755 --- a/src/battle/anim/draw.c +++ b/src/battle/anim/draw.c @@ -53,8 +53,8 @@ void sub_80D0C88(u8 taskId) } params.dmaControl = SCANLINE_EFFECT_DMACNT_16BIT; - params.unk8 = 1; - params.unk9 = 0; + params.initState = 1; + params.unused9 = 0; ScanlineEffect_SetParams(params); task->func = sub_80D0D68; } diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index f4fff742c..990535b4e 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -108,9 +108,9 @@ extern u16 gUnknown_02024DE8; extern u8 gActionSelectionCursor[]; extern u8 gMoveSelectionCursor[]; extern u8 gUnknown_02038470[]; -extern u16 gUnknown_030041B0; +extern u16 gBattle_BG3_X; extern u16 gBattle_BG1_Y; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_Y; extern struct Window gUnknown_030041D0; extern u16 gBattle_WIN1H; extern struct Window gUnknown_03004210; @@ -219,7 +219,7 @@ void InitBattle(void) REG_WINOUT = 0; gBattle_WIN0H = 0xF0; gBattle_WIN0V = 0x5051; - dp12_8087EA4(); + ScanlineEffect_Clear(); for (i = 0; i < 80; i++) { @@ -242,8 +242,8 @@ void InitBattle(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; gBattleTerrain = BattleSetup_GetTerrain(); Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); @@ -1064,8 +1064,8 @@ void sub_800FCFC(void) REG_BG1VOFS = gBattle_BG1_Y; REG_BG2HOFS = gBattle_BG2_X; REG_BG2VOFS = gBattle_BG2_Y; - REG_BG3HOFS = gUnknown_030041B0; - REG_BG3VOFS = gUnknown_030041B8; + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; REG_WIN0H = gBattle_WIN0H; REG_WIN0V = gBattle_WIN0V; REG_WIN1H = gBattle_WIN1H; @@ -1197,7 +1197,7 @@ void c2_8011A1C(void) REG_WINOUT = 0; gBattle_WIN0H = 0xF0; gBattle_WIN0V = 0x5051; - dp12_8087EA4(); + ScanlineEffect_Clear(); for (i = 0; i < 80; i++) { @@ -1218,8 +1218,8 @@ void c2_8011A1C(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 164329c1b..ae8f94130 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -93,7 +93,7 @@ extern u16 gChosenMove; //last used move in battle extern u8 gBankInMenu; extern u8 gActionForBanks[4]; extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch -extern u16 gUnknown_030041B0; +extern u16 gBattle_BG3_X; extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one extern u8 gCurrentTurnActionNumber; extern u16 gTrappingMoves[]; @@ -17229,7 +17229,7 @@ static void atkF2_displaydexinfo(void) LZDecompressVram(gBattleTerrainTilemap_Building, (void*)(0x0600d000)); LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60); REG_BG3CNT = 0x5a0b; - gUnknown_030041B0 = 0x100; + gBattle_BG3_X = 0x100; BeginNormalPaletteFade(0xfffc, 0, 0x10, 0, 0); gBattleCommunication[0]++; } diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 489581132..a5f833b6c 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -67,9 +67,9 @@ extern u8 gUnknown_02024E68[]; extern struct SpriteTemplate gUnknown_02024E8C; extern u8 gAnimMoveTurn; extern u8 gUnknown_02038470[]; -extern u16 gUnknown_030041B0; +extern u16 gBattle_BG3_X; extern u16 gBattle_BG1_Y; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_Y; extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; extern u16 gBattle_BG0_X; diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index 843203a1e..f7cdc0694 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -16,7 +16,7 @@ #include "scanline_effect.h" void sub_807DE10(void); -void dp12_8087EA4(void); +void ScanlineEffect_Clear(void); extern const struct OamData gFieldOamData_32x32; @@ -670,7 +670,7 @@ static bool8 Phase2_Transition_Swirl_Func1(struct Task* task) u16 savedIME; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); sub_811D6E8(gScanlineEffectRegBuffers[1], TRANSITION_STRUCT.field_14, 0, 2, 0, 160); @@ -730,7 +730,7 @@ static bool8 Phase2_Transition_Shuffle_Func1(struct Task* task) u16 savedIME; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); BeginNormalPaletteFade(-1, 4, 0, 0x10, 0); memset(gScanlineEffectRegBuffers[1], TRANSITION_STRUCT.field_16, 0x140); @@ -798,7 +798,7 @@ static bool8 Phase2_Transition_BigPokeball_Func1(struct Task* task) u16 *dst1, *dst2; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); task->data[1] = 16; task->data[2] = 0; @@ -1076,7 +1076,7 @@ static bool8 Phase2_Transition_Clockwise_BlackFade_Func1(struct Task* task) u16 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); TRANSITION_STRUCT.WININ = 0; TRANSITION_STRUCT.WINOUT = 63; @@ -1269,7 +1269,7 @@ static bool8 Phase2_Transition_Ripple_Func1(struct Task* task) u8 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); for (i = 0; i < 160; i++) { @@ -1348,7 +1348,7 @@ static bool8 Phase2_Transition_Wave_Func1(struct Task* task) u8 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); TRANSITION_STRUCT.WININ = 63; TRANSITION_STRUCT.WINOUT = 0; @@ -1460,7 +1460,7 @@ static bool8 Phase2_Mugshot_Func1(struct Task* task) u8 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); Mugshots_CreateOpponentPlayerSprites(task); task->data[1] = 0; @@ -1844,7 +1844,7 @@ static bool8 Phase2_Transition_Slice_Func1(struct Task* task) u16 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); task->data[2] = 256; task->data[3] = 1; @@ -1943,7 +1943,7 @@ static bool8 Phase2_Transition_WhiteFade_Func1(struct Task* task) u16 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); TRANSITION_STRUCT.BLDCNT = 0xBF; TRANSITION_STRUCT.BLDY = 0; @@ -2158,7 +2158,7 @@ static bool8 Phase2_Transition_Shards_Func1(struct Task* task) u16 i; sub_811D658(); - dp12_8087EA4(); + ScanlineEffect_Clear(); TRANSITION_STRUCT.WININ = 0x3F; TRANSITION_STRUCT.WINOUT = 0; diff --git a/src/battle/reshow_battle_screen.c b/src/battle/reshow_battle_screen.c index 83dad5f60..a78cb20df 100644 --- a/src/battle/reshow_battle_screen.c +++ b/src/battle/reshow_battle_screen.c @@ -15,9 +15,9 @@ extern u16 gBattle_BG2_Y; extern u16 gBattle_BG2_X; extern u16 gBattle_BG0_X; extern u16 gBattle_BG1_X; -extern u16 gUnknown_030041B0; +extern u16 gBattle_BG3_X; extern u16 gBattle_BG1_Y; -extern u16 gUnknown_030041B8; +extern u16 gBattle_BG3_Y; extern u16 gBattle_BG0_Y; extern u8 gReservedSpritePaletteCount; extern u8 gActionSelectionCursor[4]; @@ -77,7 +77,7 @@ static void CB2_ReshowBattleScreenAfterMenu(void) switch (gReshowState) { case 0: - dp12_8087EA4(); + ScanlineEffect_Clear(); Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); ResetPaletteFade(); Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); @@ -87,8 +87,8 @@ static void CB2_ReshowBattleScreenAfterMenu(void) gBattle_BG1_Y = 0; gBattle_BG2_X = 0; gBattle_BG2_Y = 0; - gUnknown_030041B0 = 0; - gUnknown_030041B8 = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; break; case 1: { -- cgit v1.2.3 From 8d658666a14f8364df32d3f14c6923ebe194153e Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Wed, 10 Jan 2018 17:03:17 -0500 Subject: decompiled up to sub_80DFBD8 --- src/battle/anim/dragon.c | 262 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 262 insertions(+) create mode 100755 src/battle/anim/dragon.c (limited to 'src/battle') diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c new file mode 100755 index 000000000..04859e39f --- /dev/null +++ b/src/battle/anim/dragon.c @@ -0,0 +1,262 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "unknown_task.h" + +void sub_80DF81C(struct Sprite *sprite); +void sub_80DFBD8(struct Sprite *sprite); + +void sub_80DF9F4(u8 taskId); + +void sub_80DFAB0(struct Task *task); + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u8 gBankAttacker; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG2_X; +extern u16 gUnknown_03000730[]; + + +// Outrage +void sub_80DF5A0(struct Sprite *sprite) +{ + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3); + if (GetBankSide(gAnimBankAttacker)) + { + sprite->pos1.x -= gBattleAnimArgs[0]; + gBattleAnimArgs[3] = -gBattleAnimArgs[3]; + gBattleAnimArgs[4] = -gBattleAnimArgs[4]; + } + else + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[0] = gBattleAnimArgs[2]; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->data[3] = gBattleAnimArgs[4]; + sprite->data[5] = gBattleAnimArgs[5]; + sprite->invisible = 1; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_8078504; +} + +void sub_80DF63C(struct Sprite *sprite) +{ + sub_8078650(sprite); + sprite->data[2] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[4] = GetBankPosition(gAnimBankTarget, 3); + if (GetBankSide(gAnimBankAttacker)) + { + sprite->pos1.x -= gBattleAnimArgs[1]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[2] -= gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + } + else + { + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + sprite->data[2] += gBattleAnimArgs[2]; + sprite->data[4] += gBattleAnimArgs[3]; + StartSpriteAnim(sprite, 1); + } + sprite->data[0] = gBattleAnimArgs[4]; + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); +} + +void sub_80DF6F0(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 0); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 1); + } + else + { + sprite->pos1.x = GetBankPosition(gAnimBankTarget, 0); + sprite->pos1.y = GetBankPosition(gAnimBankTarget, 1); + } + sub_807867C(sprite, gBattleAnimArgs[1]); + sprite->pos1.y += gBattleAnimArgs[2]; + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); +} + +void sub_80DF760(struct Sprite *sprite) +{ + if (GetBankSide(gAnimBankAttacker)) + StartSpriteAffineAnim(sprite, 1); + sub_80DF63C(sprite); +} + +void sub_80DF78C(struct Sprite *sprite) +{ + u16 r5; + u16 r0; + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3); + sprite->data[4] = 0; + sprite->data[5] = 1; + sprite->data[6] = gBattleAnimArgs[0]; + r5 = sub_807A100(gBankAttacker, 0); + r0 = sub_807A100(gBankAttacker, 1); + if (r5 > r0) + sprite->data[7] = r5 / 2; + else + sprite->data[7] = r0 / 2; + sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); + sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); + sprite->callback = sub_80DF81C; +} + +void sub_80DF81C(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF; + sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); + sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); + if (++sprite->data[4] > 5) + { + sprite->data[4] = 0; + if (sprite->data[5] <= 15 && ++sprite->data[5] > 15) + sprite->data[5] = 16; + } + if (++sprite->data[3] > 0x3C) + { + sprite->data[3] = 0; + sprite->data[0]++; + } + break; + case 1: + sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF; + if (sprite->data[7] <= 0x95 && (sprite->data[7] += 8) > 0x95) + sprite->data[7] = 0x96; + sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); + sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); + if (++sprite->data[4] > 5) + { + sprite->data[4] = 0; + if (sprite->data[5] <= 15 && ++sprite->data[5] > 15) + sprite->data[5] = 16; + } + if (++sprite->data[3] > 20) + DestroyAnimSprite(sprite); + break; + } +} + +void sub_80DF924(u8 taskId) +{ + struct UnknownTaskStruct sp; + struct Task *task = &gTasks[taskId]; + u16 i; + u8 r1; + if (GetBankIdentity_permutated(gAnimBankAttacker) == 1) + { + sp.dest = ®_BG1HOFS; + task->data[2] = gBattle_BG1_X; + } + else + { + sp.dest = ®_BG2HOFS; + task->data[2] = gBattle_BG2_X; + } + sp.control = 0xA2600001; + sp.unk8 = 1; + sp.unk9 = 0; + r1 = sub_8077FC0(gAnimBankAttacker); + task->data[3] = r1 - 32; + task->data[4] = r1 + 32; + if (task->data[3] < 0) + task->data[3] = 0; + for(i = task->data[3];i <= task->data[4];i++) + { + gUnknown_03004DE0[0][i] = task->data[2]; + gUnknown_03004DE0[1][i] = task->data[2]; + } + sub_80895F8(sp); + task->func = sub_80DF9F4; +} + +void sub_80DF9F4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + switch (task->data[0]) + { + case 0: + if (++task->data[7] > 1) + { + task->data[7] = 0; + if (++task->data[6] == 3) + task->data[0]++; + } + sub_80DFAB0(task); + break; + case 1: + if (++task->data[1] > 0x3C) + task->data[0]++; + sub_80DFAB0(task); + break; + case 2: + if (++task->data[7] > 1) + { + task->data[7] = 0; + if (--task->data[6] == 0) + task->data[0]++; + } + sub_80DFAB0(task); + break; + case 3: + gUnknown_03004DC0.unk15 = 3; + task->data[0]++; + break; + case 4: + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80DFAB0(struct Task *task) +{ + u16 r3 = task->data[5]; + u16 i; + for (i = task->data[3]; i <= task->data[4]; i++) + { + gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2]; + r3 = (r3 + 8) & 0xFF; + } + task->data[5] = (task->data[5] + 9) & 0xFF; +} + +void sub_80DFB28(struct Sprite *sprite) +{ + int r6 = (gBattleAnimArgs[2] * 3) / 5; + int i; + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3) + gBattleAnimArgs[4]; + sprite->data[1] = Cos(gBattleAnimArgs[1], gBattleAnimArgs[2]); + sprite->data[2] = Sin(gBattleAnimArgs[1], r6); + sprite->pos1.x += sprite->data[1] * gBattleAnimArgs[0]; + sprite->pos1.y += sprite->data[2] * gBattleAnimArgs[0]; + sprite->data[3] = gBattleAnimArgs[3]; + sprite->callback = sub_80DFBD8; + for (i = 0; i <= 6; i++) + gUnknown_03000730[i] = sprite->data[i]; +} + +void sub_80DFBD8(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[1]; + sprite->data[5] += sprite->data[2]; + sprite->pos2.x = sprite->data[4] / 10; + sprite->pos2.y = sprite->data[5] / 10; + if (++sprite->data[0] > sprite->data[3]) + DestroyAnimSprite(sprite); +} \ No newline at end of file -- cgit v1.2.3 From bde368e439b3a279df18efcf563ec908f3e84330 Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Thu, 11 Jan 2018 11:41:33 -0500 Subject: finish splitting and decompiling dragon.s --- src/battle/anim/dark.c | 138 +++++++++++++++++++++++++++++++++++++++++++++++ src/battle/anim/dragon.c | 42 ++++++++++----- 2 files changed, 166 insertions(+), 14 deletions(-) create mode 100755 src/battle/anim/dark.c (limited to 'src/battle') diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c new file mode 100755 index 000000000..306784609 --- /dev/null +++ b/src/battle/anim/dark.c @@ -0,0 +1,138 @@ +#include "global.h" +#include "rom_8077ABC.h" +#include "trig.h" +#include "battle_anim.h" +#include "sound.h" +#include "scanline_effect.h" + +void sub_80DFE90(struct Sprite *sprite); + +void sub_80DFC9C(u8 taskId); +void sub_80DFD58(u8 taskId); + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u8 gObjectBankIDs[]; + +// used in Smoke Ball escape, Sky Attack, Feint Attack and Camouflage + +void sub_80DFC24(u8 taskId) +{ + int bank; + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + bank = gAnimBankAttacker; + gTasks[taskId].data[1] = 16; + REG_BLDALPHA = 16; + if (GetBankIdentity_permutated(bank) == 1) + REG_BLDCNT = 0x3F42; + else + REG_BLDCNT = 0x3F44; + gTasks[taskId].func = sub_80DFC9C; +} + +void sub_80DFC9C(u8 taskId) +{ + u8 r2 = gTasks[taskId].data[1] >> 8; + u8 r1 = gTasks[taskId].data[1]; + if (gTasks[taskId].data[2] == (u8)gTasks[taskId].data[0]) + { + r2++; + r1--; + gTasks[taskId].data[1] = (r2 << 8) | r1; + REG_BLDALPHA = (r2 << 8) | r1; + gTasks[taskId].data[2] = 0; + if (r2 == 16) + { + gSprites[gObjectBankIDs[gAnimBankAttacker]].invisible = 1; + DestroyAnimVisualTask(taskId); + } + } + else + gTasks[taskId].data[2]++; +} + +void sub_80DFD24(u8 taskId) +{ + gTasks[taskId].data[0] = gBattleAnimArgs[0]; + gTasks[taskId].data[1] = 0x1000; + gTasks[taskId].func = sub_80DFD58; + REG_BLDALPHA = 0x1000; +} + +void sub_80DFD58(u8 taskId) +{ + u8 r1 = gTasks[taskId].data[1] >> 8; + u8 r5 = gTasks[taskId].data[1]; + if (gTasks[taskId].data[2] == (u8)gTasks[taskId].data[0]) + { + r1--; + r5++; + gTasks[taskId].data[1] = (r1 << 8) | r5; + REG_BLDALPHA = (r1 << 8) | r5; + gTasks[taskId].data[2] = 0; + if (r1 == 0) + { + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimVisualTask(taskId); + } + } + else + gTasks[taskId].data[2]++; +} + +// unlike the above is only used in Feint Attack + +void sub_80DFDC0(u8 taskId) +{ + REG_BLDALPHA = 0x1000; + if (GetBankIdentity_permutated(gAnimBankAttacker) == 1) + REG_BLDCNT = 0x3F42; + else + REG_BLDCNT = 0x3F44; + DestroyAnimVisualTask(taskId); +} + +// unused sprite template's callback + +void sub_80DFE14(struct Sprite *sprite) +{ + sprite->data[1] = GetBankPosition(gAnimBankTarget, 2); + sprite->data[2] = GetBankPosition(gAnimBankAttacker, 2); + sprite->data[3] = GetBankPosition(gAnimBankTarget, 3); + sprite->data[4] = GetBankPosition(gAnimBankAttacker, 3); + sprite->data[0] = 0x7E; + sub_8078A5C(sprite); + sprite->data[3] = -sprite->data[1]; + sprite->data[4] = -sprite->data[2]; + sprite->data[6] = 0xFFD8; + sprite->callback = sub_80DFE90; + sub_80DFE90(sprite); +} + +void sub_80DFE90(struct Sprite *sprite) +{ + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + if (sprite->data[7] == 0) + { + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x = sprite->data[3] >> 8; + sprite->pos2.y = sprite->data[4] >> 8; + sprite->data[0]--; + } + sprite->pos2.y += Sin(sprite->data[5], sprite->data[6]); + sprite->data[5] = (sprite->data[5] + 3) & 0xFF; + if (sprite->data[5] > 0x7F) + { + sprite->data[5] = 0; + sprite->data[6] += 20; + sprite->data[7]++; + } + if (--sprite->data[0] == 0) + DestroyAnimSprite(sprite); +} \ No newline at end of file diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c index 04859e39f..0feb27dac 100755 --- a/src/battle/anim/dragon.c +++ b/src/battle/anim/dragon.c @@ -3,7 +3,7 @@ #include "trig.h" #include "battle_anim.h" #include "sound.h" -#include "unknown_task.h" +#include "scanline_effect.h" void sub_80DF81C(struct Sprite *sprite); void sub_80DFBD8(struct Sprite *sprite); @@ -19,9 +19,10 @@ extern u8 gBankAttacker; extern u16 gBattle_BG1_X; extern u16 gBattle_BG2_X; extern u16 gUnknown_03000730[]; - +extern u8 gObjectBankIDs[]; // Outrage + void sub_80DF5A0(struct Sprite *sprite) { sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); @@ -44,6 +45,8 @@ void sub_80DF5A0(struct Sprite *sprite) sprite->callback = sub_8078504; } +// part of Dragon Breath + void sub_80DF63C(struct Sprite *sprite) { sub_8078650(sprite); @@ -69,6 +72,8 @@ void sub_80DF63C(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, move_anim_8074EE0); } +// Dragon Rage + void sub_80DF6F0(struct Sprite *sprite) { if (gBattleAnimArgs[0] == 0) @@ -87,6 +92,8 @@ void sub_80DF6F0(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, move_anim_8074EE0); } +// Dragon Breath init + void sub_80DF760(struct Sprite *sprite) { if (GetBankSide(gAnimBankAttacker)) @@ -94,6 +101,8 @@ void sub_80DF760(struct Sprite *sprite) sub_80DF63C(sprite); } +//next 2 tasks might be Dragon Dance orbs? + void sub_80DF78C(struct Sprite *sprite) { u16 r5; @@ -152,25 +161,27 @@ void sub_80DF81C(struct Sprite *sprite) } } +// Dragon Dance scanline eff + void sub_80DF924(u8 taskId) { - struct UnknownTaskStruct sp; + struct ScanlineEffectParams sp; struct Task *task = &gTasks[taskId]; u16 i; u8 r1; if (GetBankIdentity_permutated(gAnimBankAttacker) == 1) { - sp.dest = ®_BG1HOFS; + sp.dmaDest = ®_BG1HOFS; task->data[2] = gBattle_BG1_X; } else { - sp.dest = ®_BG2HOFS; + sp.dmaDest = ®_BG2HOFS; task->data[2] = gBattle_BG2_X; } - sp.control = 0xA2600001; - sp.unk8 = 1; - sp.unk9 = 0; + sp.dmaControl = 0xA2600001; + sp.initState = 1; + sp.unused9 = 0; r1 = sub_8077FC0(gAnimBankAttacker); task->data[3] = r1 - 32; task->data[4] = r1 + 32; @@ -178,10 +189,10 @@ void sub_80DF924(u8 taskId) task->data[3] = 0; for(i = task->data[3];i <= task->data[4];i++) { - gUnknown_03004DE0[0][i] = task->data[2]; - gUnknown_03004DE0[1][i] = task->data[2]; + gScanlineEffectRegBuffers[0][i] = task->data[2]; + gScanlineEffectRegBuffers[1][i] = task->data[2]; } - sub_80895F8(sp); + ScanlineEffect_SetParams(sp); task->func = sub_80DF9F4; } @@ -214,7 +225,7 @@ void sub_80DF9F4(u8 taskId) sub_80DFAB0(task); break; case 3: - gUnknown_03004DC0.unk15 = 3; + gScanlineEffect.state = 3; task->data[0]++; break; case 4: @@ -229,12 +240,14 @@ void sub_80DFAB0(struct Task *task) u16 i; for (i = task->data[3]; i <= task->data[4]; i++) { - gUnknown_03004DE0[gUnknown_03004DC0.srcBank][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2]; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = ((gSineTable[r3] * task->data[6]) >> 7) + task->data[2]; r3 = (r3 + 8) & 0xFF; } task->data[5] = (task->data[5] + 9) & 0xFF; } +// Overheat + void sub_80DFB28(struct Sprite *sprite) { int r6 = (gBattleAnimArgs[2] * 3) / 5; @@ -259,4 +272,5 @@ void sub_80DFBD8(struct Sprite *sprite) sprite->pos2.y = sprite->data[5] / 10; if (++sprite->data[0] > sprite->data[3]) DestroyAnimSprite(sprite); -} \ No newline at end of file +} + -- cgit v1.2.3 From bed652ee5411efbbbdf7e0920d9fd13646ec39c1 Mon Sep 17 00:00:00 2001 From: golem galvanize Date: Thu, 11 Jan 2018 13:21:20 -0500 Subject: fixing things --- src/battle/anim/dark.c | 2 +- src/battle/anim/dragon.c | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c index 306784609..8ceb00298 100755 --- a/src/battle/anim/dark.c +++ b/src/battle/anim/dark.c @@ -135,4 +135,4 @@ void sub_80DFE90(struct Sprite *sprite) } if (--sprite->data[0] == 0) DestroyAnimSprite(sprite); -} \ No newline at end of file +} diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c index 0feb27dac..bf39e01c0 100755 --- a/src/battle/anim/dragon.c +++ b/src/battle/anim/dragon.c @@ -127,7 +127,7 @@ void sub_80DF81C(struct Sprite *sprite) { switch (sprite->data[0]) { - case 0: + case 0: sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF; sprite->pos2.x = Cos(sprite->data[6], sprite->data[7]); sprite->pos2.y = Sin(sprite->data[6], sprite->data[7]); @@ -143,7 +143,7 @@ void sub_80DF81C(struct Sprite *sprite) sprite->data[0]++; } break; - case 1: + case 1: sprite->data[6] = (sprite->data[6] - sprite->data[5]) & 0xFF; if (sprite->data[7] <= 0x95 && (sprite->data[7] += 8) > 0x95) sprite->data[7] = 0x96; @@ -201,7 +201,7 @@ void sub_80DF9F4(u8 taskId) struct Task *task = &gTasks[taskId]; switch (task->data[0]) { - case 0: + case 0: if (++task->data[7] > 1) { task->data[7] = 0; @@ -210,12 +210,12 @@ void sub_80DF9F4(u8 taskId) } sub_80DFAB0(task); break; - case 1: + case 1: if (++task->data[1] > 0x3C) task->data[0]++; sub_80DFAB0(task); break; - case 2: + case 2: if (++task->data[7] > 1) { task->data[7] = 0; @@ -224,11 +224,11 @@ void sub_80DF9F4(u8 taskId) } sub_80DFAB0(task); break; - case 3: + case 3: gScanlineEffect.state = 3; task->data[0]++; break; - case 4: + case 4: DestroyAnimVisualTask(taskId); break; } @@ -273,4 +273,3 @@ void sub_80DFBD8(struct Sprite *sprite) if (++sprite->data[0] > sprite->data[3]) DestroyAnimSprite(sprite); } - -- cgit v1.2.3 From 2be2b22589de437ae5f53df8e380533958da9e70 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Fri, 12 Jan 2018 21:24:21 -0600 Subject: decompile battle_intro.s --- src/battle/anim/battle_intro.c | 480 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 480 insertions(+) create mode 100644 src/battle/anim/battle_intro.c (limited to 'src/battle') diff --git a/src/battle/anim/battle_intro.c b/src/battle/anim/battle_intro.c new file mode 100644 index 000000000..46ea292bd --- /dev/null +++ b/src/battle/anim/battle_intro.c @@ -0,0 +1,480 @@ +#include "global.h" +#include "constants/battle_constants.h" +#include "battle.h" +#include "battle_anim.h" +#include "battle_anim_80CA710.h" +#include "data2.h" +#include "ewram.h" +#include "main.h" +#include "rom_8077ABC.h" +#include "scanline_effect.h" +#include "task.h" +#include "trig.h" + +extern u16 gBattleTypeFlags; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; +extern u16 gBattle_BG2_X; +extern u16 gBattle_BG2_Y; +extern u16 gBattle_WIN0V; +extern u16 gUnknown_02024DE8; +extern u8 gBattleMonForms[]; + +extern void sub_800FE20(struct Sprite *); + +static void task_battle_intro_80BC47C(u8); +static void task00_battle_intro_80BC6C8(u8); +static void task_battle_intro_anim(u8); +static void sub_80E4C34(u8); + +static const TaskFunc gUnknown_083DB56C[] = +{ + task_battle_intro_80BC47C, + task_battle_intro_80BC47C, + task00_battle_intro_80BC6C8, + task00_battle_intro_80BC6C8, + task00_battle_intro_80BC6C8, + task_battle_intro_80BC47C, + task_battle_intro_80BC47C, + task_battle_intro_80BC47C, + task_battle_intro_anim, + task_battle_intro_anim, +}; + +void sub_80E43C0(u8 a) +{ + u8 taskId; + + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + taskId = CreateTask(sub_80E4C34, 0); + } + else if ((gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) && gGameVersion != VERSION_RUBY) + { + a = 3; + taskId = CreateTask(task00_battle_intro_80BC6C8, 0); + } + else + { + taskId = CreateTask(gUnknown_083DB56C[a], 0); + } + + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = a; + gTasks[taskId].data[2] = 0; + gTasks[taskId].data[3] = 0; + gTasks[taskId].data[4] = 0; + gTasks[taskId].data[5] = 0; + gTasks[taskId].data[6] = 0; +} + +static void sub_80E443C(u8 taskId) +{ + DestroyTask(taskId); + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BLDY = 0; + REG_WININ = WIN_RANGE(63, 63); + REG_WINOUT = WIN_RANGE(63, 63); +} + +static void task_battle_intro_80BC47C(u8 taskId) +{ + s32 i; + + gBattle_BG1_X += 6; + + switch (gTasks[taskId].data[0]) + { + case 0: + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTasks[taskId].data[2] = 16; + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[2] = 1; + gTasks[taskId].data[0]++; + } + break; + case 1: + gTasks[taskId].data[2]--; + if (gTasks[taskId].data[2] == 0) + { + gTasks[taskId].data[0]++; + REG_WININ = 0x3F; + } + break; + case 2: + gBattle_WIN0V -= 255; + if ((gBattle_WIN0V & 0xFF00) == 0x3000) + { + gTasks[taskId].data[0]++; + gTasks[taskId].data[2] = DISPLAY_WIDTH; + gTasks[taskId].data[3] = 32; + gUnknown_02024DE8 &= ~1; + } + break; + case 3: + if (gTasks[taskId].data[3] != 0) + { + gTasks[taskId].data[3]--; + } + else if (gTasks[taskId].data[1] == 1) + { + if (gBattle_BG1_Y != 0xFFB0) + gBattle_BG1_Y -= 2; + } + else + { + if (gBattle_BG1_Y != 0xFFC8) + gBattle_BG1_Y -= 1; + } + + if ((gBattle_WIN0V & 0xFF00) != 0) + gBattle_WIN0V -= 1020; + + if (gTasks[taskId].data[2] != 0) + gTasks[taskId].data[2] -= 2; + + // Set the x offset for the the top half of the screen. + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; + // Set the x offset for the bottom half of the screen. + for (; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; + + if (gTasks[taskId].data[2] == 0) + { + gScanlineEffect.state = 3; + gTasks[taskId].data[0]++; + CpuFill32(0, (void *)(VRAM + 0xE000), 0x800); + REG_BG1CNT = 0x9C00; + REG_BG2CNT = 0x5E00; + } + break; + case 4: + sub_80E443C(taskId); + break; + } +} + +static void task00_battle_intro_80BC6C8(u8 taskId) +{ + s32 i; + + switch (gTasks[taskId].data[1]) + { + case 2: + case 4: + gBattle_BG1_X += 8; + break; + case 3: + gBattle_BG1_X += 6; + break; + } + + if (gTasks[taskId].data[1] == 4) + { + gBattle_BG1_Y = Cos2(gTasks[taskId].data[6]) / 512 - 8; + if (gTasks[taskId].data[6] < 0xB4) + gTasks[taskId].data[6] += 4; + else + gTasks[taskId].data[6] += 6; + if (gTasks[taskId].data[6] == 0x168) + gTasks[taskId].data[6] = 0; + } + + switch (gTasks[taskId].data[0]) + { + case 0: + gTasks[taskId].data[4] = 16; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTasks[taskId].data[2] = 16; + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[2] = 1; + gTasks[taskId].data[0]++; + } + break; + case 1: + gTasks[taskId].data[2]--; + if (gTasks[taskId].data[2] == 0) + { + gTasks[taskId].data[0]++; + REG_WININ = 0x3F; + } + break; + case 2: + gBattle_WIN0V -= 255; + if ((gBattle_WIN0V & 0xFF00) == 0x3000) + { + gTasks[taskId].data[0]++; + gTasks[taskId].data[2] = 240; + gTasks[taskId].data[3] = 32; + gTasks[taskId].data[5] = 1; + gUnknown_02024DE8 &= ~1; + } + break; + case 3: + if (gTasks[taskId].data[3] != 0) + { + gTasks[taskId].data[3]--; + if (gTasks[taskId].data[3] == 0) + { + REG_BLDCNT = 0x1842; + REG_BLDALPHA = 0xF; + REG_BLDY = 0; + } + } + else + { + if ((gTasks[taskId].data[4] & 0x1F) && --gTasks[taskId].data[5] == 0) + { + gTasks[taskId].data[4] += 255; + gTasks[taskId].data[5] = 4; + } + } + + if ((gBattle_WIN0V & 0xFF00) != 0) + gBattle_WIN0V -= 1020; + + if (gTasks[taskId].data[2] != 0) + gTasks[taskId].data[2] -= 2; + + // Set the x offset for the the top half of the screen. + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; + // Set the x offset for the bottom half of the screen. + for (; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; + + if (gTasks[taskId].data[2] == 0) + { + gScanlineEffect.state = 3; + gTasks[taskId].data[0]++; + CpuFill32(0, (void *)(VRAM + 0xE000), 0x800); + REG_BG1CNT = 0x9C00; + REG_BG2CNT = 0x5E00; + } + break; + case 4: + sub_80E443C(taskId); + break; + } + + if (gTasks[taskId].data[0] != 4) + REG_BLDALPHA = gTasks[taskId].data[4]; +} + +static void task_battle_intro_anim(u8 taskId) +{ + s32 i; + + gBattle_BG1_X += 8; + + switch (gTasks[taskId].data[0]) + { + case 0: + REG_BLDCNT = 0x1842; + REG_BLDALPHA = 0x0808; + REG_BLDY = 0; + gTasks[taskId].data[4] = 0x0808; + if (gBattleTypeFlags & BATTLE_TYPE_LINK) + { + gTasks[taskId].data[2] = 16; + gTasks[taskId].data[0]++; + } + else + { + gTasks[taskId].data[2] = 1; + gTasks[taskId].data[0]++; + } + break; + case 1: + gTasks[taskId].data[2]--; + if (gTasks[taskId].data[2] == 0) + { + gTasks[taskId].data[0]++; + REG_WININ = 0x3F; + } + break; + case 2: + gBattle_WIN0V -= 255; + if ((gBattle_WIN0V & 0xFF00) == 0x3000) + { + gTasks[taskId].data[0]++; + gTasks[taskId].data[2] = 240; + gTasks[taskId].data[3] = 32; + gTasks[taskId].data[5] = 1; + gUnknown_02024DE8 &= ~1; + } + break; + case 3: + if (gTasks[taskId].data[3] != 0) + { + gTasks[taskId].data[3]--; + } + else if ((gTasks[taskId].data[4] & 0xF) && --gTasks[taskId].data[5] == 0) + { + gTasks[taskId].data[4] += 255; + gTasks[taskId].data[5] = 6; + } + + if ((gBattle_WIN0V & 0xFF00) != 0) + gBattle_WIN0V -= 1020; + + if (gTasks[taskId].data[2] != 0) + gTasks[taskId].data[2] -= 2; + + // Set the x offset for the the top half of the screen. + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; + // Set the x offset for the bottom half of the screen. + for (; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; + + if (gTasks[taskId].data[2] == 0) + { + gScanlineEffect.state = 3; + gTasks[taskId].data[0]++; + CpuFill32(0, (void *)(VRAM + 0xE000), 0x800); + REG_BG1CNT = 0x9C00; + REG_BG2CNT = 0x5E00; + } + break; + case 4: + sub_80E443C(taskId); + break; + } + + if (gTasks[taskId].data[0] != 4) + REG_BLDALPHA = gTasks[taskId].data[4]; +} + +static void sub_80E4C34(u8 taskId) +{ + s32 i; + + if (gTasks[taskId].data[0] > 1 && gTasks[taskId].data[4] == 0) + { + if ((gBattle_BG1_X & 0x8000) || gBattle_BG1_X < 80) // hmm... + { + gBattle_BG1_X += 3; + gBattle_BG2_X -= 3; + } + else + { + CpuFill32(0, (void *)(VRAM + 0xE000), 0x800); + CpuFill32(0, (void *)(VRAM + 0xF000), 0x800); + gTasks[taskId].data[4] = 1; + } + } + + switch (gTasks[taskId].data[0]) + { + case 0: + gTasks[taskId].data[2] = 16; + gTasks[taskId].data[0]++; + break; + case 1: + gTasks[taskId].data[2]--; + if (gTasks[taskId].data[2] == 0) + { + gTasks[taskId].data[0]++; + gSprites[ewram1608A].oam.objMode = 2; + gSprites[ewram1608A].callback = sub_800FE20; + gSprites[ewram1608B].oam.objMode = 2; + gSprites[ewram1608B].callback = sub_800FE20; + REG_WININ = 0x3F; + REG_WINOUT = 0x3F06; + } + break; + case 2: + gBattle_WIN0V -= 255; + if ((gBattle_WIN0V & 0xFF00) == 0x3000) + { + gTasks[taskId].data[0]++; + gTasks[taskId].data[2] = 240; + gTasks[taskId].data[3] = 32; + gUnknown_02024DE8 &= ~1; + } + break; + case 3: + if ((gBattle_WIN0V & 0xFF00) != 0) + gBattle_WIN0V -= 1020; + + if (gTasks[taskId].data[2] != 0) + gTasks[taskId].data[2] -= 2; + + // Set the x offset for the the top half of the screen. + for (i = 0; i < DISPLAY_HEIGHT / 2; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; + // Set the x offset for the bottom half of the screen. + for (; i < DISPLAY_HEIGHT; i++) + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; + + if (gTasks[taskId].data[2] == 0) + { + gScanlineEffect.state = 3; + gTasks[taskId].data[0]++; + REG_BG1CNT = 0x9C00; + REG_BG2CNT = 0x5E00; + } + break; + case 4: + sub_80E443C(taskId); + break; + } +} + +void unref_sub_80E4EC8(u8 a, u8 b, u8 c, u8 d) +{ + sub_80E4EF8(a, b, c, d, 0x4000, 30, 1); +} + +// draws some 8x8 tilemap +void sub_80E4EF8(u8 left, u8 top, u8 c, u8 paletteNum, u16 e, u8 bgMap, u8 g) +{ + u32 tileNum; + s32 x; + s32 y; + u8 bank = GetBankByIdentity(c); + + DmaCopy16(3, gUnknown_081FAF4C[c] + gBattleMonForms[bank] * 0x800, (void *)(VRAM + e), 0x800); + tileNum = e / 32 - g * 512; + for (y = top; y < top + 8; y++) + { + for (x = left; x < left + 8; x++) + { + *(u16 *)(VRAM + x * 2 + bgMap * 0x800 + y * 64) = tileNum | (paletteNum << 12); + tileNum++; + } + } +} + +void unref_sub_80E4FDC(u8 left, u8 top, u8 c, u8 form, u8 paletteNum, u16 f, u8 bgMap, u8 h) +{ + u32 tileNum; + s32 x; + s32 y; + + DmaCopy16(3, gUnknown_081FAF4C[c] + form * 0x800, (void *)(VRAM + f), 0x800); + tileNum = f / 32 - h * 512; + for (y = top; y < top + 8; y++) + { + for (x = left; x < left + 8; x++) + { + *(u16 *)(VRAM + x * 2 + bgMap * 0x800 + y * 64) = tileNum | (paletteNum << 12); + tileNum++; + } + } +} -- cgit v1.2.3 From 2e8f0cd4b33a7a3ea92b2b42742d78d98959d1e5 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 13 Jan 2018 16:00:39 -0600 Subject: label battle_intro.c --- src/battle/anim/battle_intro.c | 281 +++++++++++++++------------- src/battle/battle_controller_linkopponent.c | 4 +- src/battle/battle_controller_linkpartner.c | 4 +- src/battle/battle_controller_opponent.c | 4 +- src/battle/battle_controller_player.c | 4 +- src/battle/battle_controller_safari.c | 4 +- src/battle/battle_controller_wally.c | 4 +- 7 files changed, 162 insertions(+), 143 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/battle_intro.c b/src/battle/anim/battle_intro.c index 46ea292bd..01f823fa7 100644 --- a/src/battle/anim/battle_intro.c +++ b/src/battle/anim/battle_intro.c @@ -22,53 +22,57 @@ extern u8 gBattleMonForms[]; extern void sub_800FE20(struct Sprite *); -static void task_battle_intro_80BC47C(u8); -static void task00_battle_intro_80BC6C8(u8); -static void task_battle_intro_anim(u8); -static void sub_80E4C34(u8); +static void BattleIntroTask_ScrollScenery(u8); +static void BattleIntroTask_FadeScenery(u8); +static void BattleIntroTask_ScrollAndFadeScenery(u8); +static void BattleIntroTask_80E4C34(u8); -static const TaskFunc gUnknown_083DB56C[] = +static const TaskFunc sBattleIntroTaskFuncs[] = { - task_battle_intro_80BC47C, - task_battle_intro_80BC47C, - task00_battle_intro_80BC6C8, - task00_battle_intro_80BC6C8, - task00_battle_intro_80BC6C8, - task_battle_intro_80BC47C, - task_battle_intro_80BC47C, - task_battle_intro_80BC47C, - task_battle_intro_anim, - task_battle_intro_anim, + BattleIntroTask_ScrollScenery, + BattleIntroTask_ScrollScenery, + BattleIntroTask_FadeScenery, + BattleIntroTask_FadeScenery, + BattleIntroTask_FadeScenery, + BattleIntroTask_ScrollScenery, + BattleIntroTask_ScrollScenery, + BattleIntroTask_ScrollScenery, + BattleIntroTask_ScrollAndFadeScenery, + BattleIntroTask_ScrollAndFadeScenery, }; -void sub_80E43C0(u8 a) +#define tState data[0] +#define tBgXOffset data[2] +#define tFramesUntilBg1Slide data[3] + +void StartBattleIntroAnim(u8 a) { u8 taskId; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - taskId = CreateTask(sub_80E4C34, 0); + taskId = CreateTask(BattleIntroTask_80E4C34, 0); } else if ((gBattleTypeFlags & BATTLE_TYPE_KYOGRE_GROUDON) && gGameVersion != VERSION_RUBY) { a = 3; - taskId = CreateTask(task00_battle_intro_80BC6C8, 0); + taskId = CreateTask(BattleIntroTask_FadeScenery, 0); } else { - taskId = CreateTask(gUnknown_083DB56C[a], 0); + taskId = CreateTask(sBattleIntroTaskFuncs[a], 0); } - gTasks[taskId].data[0] = 0; + gTasks[taskId].tState = 0; gTasks[taskId].data[1] = a; - gTasks[taskId].data[2] = 0; - gTasks[taskId].data[3] = 0; + gTasks[taskId].tBgXOffset = 0; + gTasks[taskId].tFramesUntilBg1Slide = 0; gTasks[taskId].data[4] = 0; gTasks[taskId].data[5] = 0; gTasks[taskId].data[6] = 0; } -static void sub_80E443C(u8 taskId) +static void EndBattleIntroTask(u8 taskId) { DestroyTask(taskId); gBattle_BG1_X = 0; @@ -78,93 +82,98 @@ static void sub_80E443C(u8 taskId) REG_BLDCNT = 0; REG_BLDALPHA = 0; REG_BLDY = 0; - REG_WININ = WIN_RANGE(63, 63); - REG_WINOUT = WIN_RANGE(63, 63); + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3F; } -static void task_battle_intro_80BC47C(u8 taskId) +static void BattleIntroTask_ScrollScenery(u8 taskId) { s32 i; gBattle_BG1_X += 6; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - gTasks[taskId].data[2] = 16; - gTasks[taskId].data[0]++; + gTasks[taskId].tBgXOffset = 16; + gTasks[taskId].tState++; } else { - gTasks[taskId].data[2] = 1; - gTasks[taskId].data[0]++; + gTasks[taskId].tBgXOffset = 1; + gTasks[taskId].tState++; } break; case 1: - gTasks[taskId].data[2]--; - if (gTasks[taskId].data[2] == 0) + gTasks[taskId].tBgXOffset--; + if (gTasks[taskId].tBgXOffset == 0) { - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; REG_WININ = 0x3F; } break; case 2: - gBattle_WIN0V -= 255; + // Open up the window + gBattle_WIN0V -= WIN_RANGE(1, 0); // decrement min Y + gBattle_WIN0V += WIN_RANGE(0, 1); // increment max Y if ((gBattle_WIN0V & 0xFF00) == 0x3000) { - gTasks[taskId].data[0]++; - gTasks[taskId].data[2] = DISPLAY_WIDTH; - gTasks[taskId].data[3] = 32; + gTasks[taskId].tState++; + gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; + gTasks[taskId].tFramesUntilBg1Slide = 32; gUnknown_02024DE8 &= ~1; } break; case 3: - if (gTasks[taskId].data[3] != 0) - { - gTasks[taskId].data[3]--; - } - else if (gTasks[taskId].data[1] == 1) + if (gTasks[taskId].tFramesUntilBg1Slide != 0) { - if (gBattle_BG1_Y != 0xFFB0) - gBattle_BG1_Y -= 2; + gTasks[taskId].tFramesUntilBg1Slide--; } else { - if (gBattle_BG1_Y != 0xFFC8) - gBattle_BG1_Y -= 1; + if (gTasks[taskId].data[1] == 1) + { + if (gBattle_BG1_Y != 0xFFB0) + gBattle_BG1_Y -= 2; + } + else + { + if (gBattle_BG1_Y != 0xFFC8) + gBattle_BG1_Y -= 1; + } } if ((gBattle_WIN0V & 0xFF00) != 0) gBattle_WIN0V -= 1020; - if (gTasks[taskId].data[2] != 0) - gTasks[taskId].data[2] -= 2; + if (gTasks[taskId].tBgXOffset != 0) + gTasks[taskId].tBgXOffset -= 2; - // Set the x offset for the the top half of the screen. + // Slide in the top half of the BG from the left for (i = 0; i < DISPLAY_HEIGHT / 2; i++) - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - // Set the x offset for the bottom half of the screen. + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].tBgXOffset; + // Slide in the bottom half of the BG from the right for (; i < DISPLAY_HEIGHT; i++) - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].tBgXOffset; - if (gTasks[taskId].data[2] == 0) + if (gTasks[taskId].tBgXOffset == 0) { gScanlineEffect.state = 3; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; CpuFill32(0, (void *)(VRAM + 0xE000), 0x800); REG_BG1CNT = 0x9C00; REG_BG2CNT = 0x5E00; } break; case 4: - sub_80E443C(taskId); + EndBattleIntroTask(taskId); break; } } -static void task00_battle_intro_80BC6C8(u8 taskId) +static void BattleIntroTask_FadeScenery(u8 taskId) { s32 i; @@ -190,45 +199,47 @@ static void task00_battle_intro_80BC6C8(u8 taskId) gTasks[taskId].data[6] = 0; } - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: gTasks[taskId].data[4] = 16; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - gTasks[taskId].data[2] = 16; - gTasks[taskId].data[0]++; + gTasks[taskId].tBgXOffset = 16; + gTasks[taskId].tState++; } else { - gTasks[taskId].data[2] = 1; - gTasks[taskId].data[0]++; + gTasks[taskId].tBgXOffset = 1; + gTasks[taskId].tState++; } break; case 1: - gTasks[taskId].data[2]--; - if (gTasks[taskId].data[2] == 0) + gTasks[taskId].tBgXOffset--; + if (gTasks[taskId].tBgXOffset == 0) { - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; REG_WININ = 0x3F; } break; case 2: - gBattle_WIN0V -= 255; + // Open up window + gBattle_WIN0V -= WIN_RANGE(1, 0); // decrement min Y + gBattle_WIN0V += WIN_RANGE(0, 1); // increment max Y if ((gBattle_WIN0V & 0xFF00) == 0x3000) { - gTasks[taskId].data[0]++; - gTasks[taskId].data[2] = 240; - gTasks[taskId].data[3] = 32; + gTasks[taskId].tState++; + gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; + gTasks[taskId].tFramesUntilBg1Slide = 32; gTasks[taskId].data[5] = 1; gUnknown_02024DE8 &= ~1; } break; case 3: - if (gTasks[taskId].data[3] != 0) + if (gTasks[taskId].tFramesUntilBg1Slide != 0) { - gTasks[taskId].data[3]--; - if (gTasks[taskId].data[3] == 0) + gTasks[taskId].tFramesUntilBg1Slide--; + if (gTasks[taskId].tFramesUntilBg1Slide == 0) { REG_BLDCNT = 0x1842; REG_BLDALPHA = 0xF; @@ -247,41 +258,41 @@ static void task00_battle_intro_80BC6C8(u8 taskId) if ((gBattle_WIN0V & 0xFF00) != 0) gBattle_WIN0V -= 1020; - if (gTasks[taskId].data[2] != 0) - gTasks[taskId].data[2] -= 2; + if (gTasks[taskId].tBgXOffset != 0) + gTasks[taskId].tBgXOffset -= 2; - // Set the x offset for the the top half of the screen. + // Slide in the top half of the BG from the left for (i = 0; i < DISPLAY_HEIGHT / 2; i++) - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - // Set the x offset for the bottom half of the screen. + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].tBgXOffset; + // Slide in the bottom half of the BG from the right for (; i < DISPLAY_HEIGHT; i++) - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].tBgXOffset; - if (gTasks[taskId].data[2] == 0) + if (gTasks[taskId].tBgXOffset == 0) { gScanlineEffect.state = 3; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; CpuFill32(0, (void *)(VRAM + 0xE000), 0x800); REG_BG1CNT = 0x9C00; REG_BG2CNT = 0x5E00; } break; case 4: - sub_80E443C(taskId); + EndBattleIntroTask(taskId); break; } - if (gTasks[taskId].data[0] != 4) + if (gTasks[taskId].tState != 4) REG_BLDALPHA = gTasks[taskId].data[4]; } -static void task_battle_intro_anim(u8 taskId) +static void BattleIntroTask_ScrollAndFadeScenery(u8 taskId) { s32 i; gBattle_BG1_X += 8; - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: REG_BLDCNT = 0x1842; @@ -290,81 +301,87 @@ static void task_battle_intro_anim(u8 taskId) gTasks[taskId].data[4] = 0x0808; if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - gTasks[taskId].data[2] = 16; - gTasks[taskId].data[0]++; + gTasks[taskId].tBgXOffset = 16; + gTasks[taskId].tState++; } else { - gTasks[taskId].data[2] = 1; - gTasks[taskId].data[0]++; + gTasks[taskId].tBgXOffset = 1; + gTasks[taskId].tState++; } break; case 1: - gTasks[taskId].data[2]--; - if (gTasks[taskId].data[2] == 0) + gTasks[taskId].tBgXOffset--; + if (gTasks[taskId].tBgXOffset == 0) { - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; REG_WININ = 0x3F; } break; case 2: - gBattle_WIN0V -= 255; + // Open up window + gBattle_WIN0V -= WIN_RANGE(1, 0); // decrement min Y + gBattle_WIN0V += WIN_RANGE(0, 1); // increment max Y if ((gBattle_WIN0V & 0xFF00) == 0x3000) { - gTasks[taskId].data[0]++; - gTasks[taskId].data[2] = 240; - gTasks[taskId].data[3] = 32; + gTasks[taskId].tState++; + gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; + gTasks[taskId].tFramesUntilBg1Slide = 32; gTasks[taskId].data[5] = 1; gUnknown_02024DE8 &= ~1; } break; case 3: - if (gTasks[taskId].data[3] != 0) + if (gTasks[taskId].tFramesUntilBg1Slide != 0) { - gTasks[taskId].data[3]--; + gTasks[taskId].tFramesUntilBg1Slide--; } - else if ((gTasks[taskId].data[4] & 0xF) && --gTasks[taskId].data[5] == 0) + else { - gTasks[taskId].data[4] += 255; - gTasks[taskId].data[5] = 6; + if ((gTasks[taskId].data[4] & 0xF) && --gTasks[taskId].data[5] == 0) + { + gTasks[taskId].data[4] += 255; + gTasks[taskId].data[5] = 6; + } } if ((gBattle_WIN0V & 0xFF00) != 0) gBattle_WIN0V -= 1020; - if (gTasks[taskId].data[2] != 0) - gTasks[taskId].data[2] -= 2; + if (gTasks[taskId].tBgXOffset != 0) + gTasks[taskId].tBgXOffset -= 2; - // Set the x offset for the the top half of the screen. + // Slide in the top half of the BG from the left for (i = 0; i < DISPLAY_HEIGHT / 2; i++) - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - // Set the x offset for the bottom half of the screen. + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].tBgXOffset; + // Slide in the bottom half of the BG from the right for (; i < DISPLAY_HEIGHT; i++) - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].tBgXOffset; - if (gTasks[taskId].data[2] == 0) + if (gTasks[taskId].tBgXOffset == 0) { gScanlineEffect.state = 3; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; CpuFill32(0, (void *)(VRAM + 0xE000), 0x800); REG_BG1CNT = 0x9C00; REG_BG2CNT = 0x5E00; } break; case 4: - sub_80E443C(taskId); + EndBattleIntroTask(taskId); break; } - if (gTasks[taskId].data[0] != 4) + if (gTasks[taskId].tState != 4) REG_BLDALPHA = gTasks[taskId].data[4]; } -static void sub_80E4C34(u8 taskId) +// Seems to only be used for link battles. +static void BattleIntroTask_80E4C34(u8 taskId) { s32 i; - if (gTasks[taskId].data[0] > 1 && gTasks[taskId].data[4] == 0) + if (gTasks[taskId].tState > 1 && gTasks[taskId].data[4] == 0) { if ((gBattle_BG1_X & 0x8000) || gBattle_BG1_X < 80) // hmm... { @@ -379,17 +396,17 @@ static void sub_80E4C34(u8 taskId) } } - switch (gTasks[taskId].data[0]) + switch (gTasks[taskId].tState) { case 0: - gTasks[taskId].data[2] = 16; - gTasks[taskId].data[0]++; + gTasks[taskId].tBgXOffset = 16; + gTasks[taskId].tState++; break; case 1: - gTasks[taskId].data[2]--; - if (gTasks[taskId].data[2] == 0) + gTasks[taskId].tBgXOffset--; + if (gTasks[taskId].tBgXOffset == 0) { - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; gSprites[ewram1608A].oam.objMode = 2; gSprites[ewram1608A].callback = sub_800FE20; gSprites[ewram1608B].oam.objMode = 2; @@ -399,12 +416,14 @@ static void sub_80E4C34(u8 taskId) } break; case 2: - gBattle_WIN0V -= 255; + // Open up window + gBattle_WIN0V -= WIN_RANGE(1, 0); // decrement min Y + gBattle_WIN0V += WIN_RANGE(0, 1); // increment max Y if ((gBattle_WIN0V & 0xFF00) == 0x3000) { - gTasks[taskId].data[0]++; - gTasks[taskId].data[2] = 240; - gTasks[taskId].data[3] = 32; + gTasks[taskId].tState++; + gTasks[taskId].tBgXOffset = DISPLAY_WIDTH; + gTasks[taskId].tFramesUntilBg1Slide = 32; gUnknown_02024DE8 &= ~1; } break; @@ -412,26 +431,26 @@ static void sub_80E4C34(u8 taskId) if ((gBattle_WIN0V & 0xFF00) != 0) gBattle_WIN0V -= 1020; - if (gTasks[taskId].data[2] != 0) - gTasks[taskId].data[2] -= 2; + if (gTasks[taskId].tBgXOffset != 0) + gTasks[taskId].tBgXOffset -= 2; - // Set the x offset for the the top half of the screen. + // Slide in the top half of the BG from the left for (i = 0; i < DISPLAY_HEIGHT / 2; i++) - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].data[2]; - // Set the x offset for the bottom half of the screen. + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = gTasks[taskId].tBgXOffset; + // Slide in the bottom half of the BG from the right for (; i < DISPLAY_HEIGHT; i++) - gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].data[2]; + gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = -gTasks[taskId].tBgXOffset; - if (gTasks[taskId].data[2] == 0) + if (gTasks[taskId].tBgXOffset == 0) { gScanlineEffect.state = 3; - gTasks[taskId].data[0]++; + gTasks[taskId].tState++; REG_BG1CNT = 0x9C00; REG_BG2CNT = 0x5E00; } break; case 4: - sub_80E443C(taskId); + EndBattleIntroTask(taskId); break; } } diff --git a/src/battle/battle_controller_linkopponent.c b/src/battle/battle_controller_linkopponent.c index 69306b725..40f50d7ff 100644 --- a/src/battle/battle_controller_linkopponent.c +++ b/src/battle/battle_controller_linkopponent.c @@ -93,7 +93,7 @@ extern void move_anim_start_t2_for_situation(); extern void dp01t_0F_4_move_anim(void); extern void sub_8047858(); extern u8 GetBankSide(u8); -extern void sub_80E43C0(); +extern void StartBattleIntroAnim(); extern void sub_803A3A8(struct Sprite *); extern void sub_8044CA0(u8); extern void nullsub_47(void); @@ -1620,7 +1620,7 @@ void LinkOpponentHandleFaintingCry(void) void LinkOpponentHandleIntroSlide(void) { - sub_80E43C0(gBattleBufferA[gActiveBank][1]); + StartBattleIntroAnim(gBattleBufferA[gActiveBank][1]); gUnknown_02024DE8 |= 1; LinkOpponentBufferExecCompleted(); } diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index c86c337d9..e39d98997 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -62,7 +62,7 @@ extern u8 move_anim_start_t3(); extern u8 IsBankSpritePresent(); extern void sub_8044CA0(u8); extern void sub_8030E38(struct Sprite *); -extern void sub_80E43C0(); +extern void StartBattleIntroAnim(); extern void sub_8047858(); extern void move_anim_start_t2_for_situation(); extern void load_gfxc_health_bar(); @@ -1565,7 +1565,7 @@ void LinkPartnerHandleFaintingCry(void) void LinkPartnerHandleIntroSlide(void) { - sub_80E43C0(gBattleBufferA[gActiveBank][1]); + StartBattleIntroAnim(gBattleBufferA[gActiveBank][1]); gUnknown_02024DE8 |= 1; LinkPartnerBufferExecCompleted(); } diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 622e3e9f9..5947053b6 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -108,7 +108,7 @@ extern void move_anim_start_t2_for_situation(); extern void bx_blink_t7(void); extern void sub_8047858(); extern u8 GetBankSide(u8); -extern void sub_80E43C0(); +extern void StartBattleIntroAnim(); extern void sub_8044CA0(u8); extern void nullsub_45(void); extern void sub_8031B74(); @@ -1892,7 +1892,7 @@ void OpponentHandleFaintingCry(void) void OpponentHandleIntroSlide(void) { - sub_80E43C0(gBattleBufferA[gActiveBank][1]); + StartBattleIntroAnim(gBattleBufferA[gActiveBank][1]); gUnknown_02024DE8 |= 1; OpponentBufferExecCompleted(); } diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index a5f833b6c..2bdf448db 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -98,7 +98,7 @@ extern void move_anim_start_t2_for_situation(); extern void bx_blink_t1(void); extern void sub_8047858(); extern u8 GetBankSide(u8); -extern void sub_80E43C0(); +extern void StartBattleIntroAnim(); extern void oamt_add_pos2_onto_pos1(); extern void sub_8078B34(struct Sprite *); extern void StoreSpriteCallbackInData(); @@ -2875,7 +2875,7 @@ void PlayerHandleFaintingCry(void) void PlayerHandleIntroSlide(void) { - sub_80E43C0(gBattleBufferA[gActiveBank][1]); + StartBattleIntroAnim(gBattleBufferA[gActiveBank][1]); gUnknown_02024DE8 |= 1; PlayerBufferExecCompleted(); } diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index a4b610752..0d193d68f 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -47,7 +47,7 @@ extern u8 sub_8079E90(); extern void sub_80313A0(struct Sprite *); extern void sub_810BADC(void); extern void sub_8045A5C(); -extern void sub_80E43C0(); +extern void StartBattleIntroAnim(); extern void sub_804777C(); extern void sub_8043DFC(); extern bool8 move_anim_start_t3(); @@ -641,7 +641,7 @@ void SafariHandleFaintingCry(void) void SafariHandleIntroSlide(void) { - sub_80E43C0(gBattleBufferA[gActiveBank][1]); + StartBattleIntroAnim(gBattleBufferA[gActiveBank][1]); gUnknown_02024DE8 |= 1; SafariBufferExecCompleted(); } diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 6266d955c..4c0adab5e 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -85,7 +85,7 @@ extern void BufferStringBattle(); extern u8 GetBankSide(u8); extern void sub_80304A8(void); extern void sub_8047858(); -extern void sub_80E43C0(); +extern void StartBattleIntroAnim(); extern void oamt_add_pos2_onto_pos1(); extern void sub_8078B34(struct Sprite *); extern void sub_8030E38(struct Sprite *); @@ -1470,7 +1470,7 @@ void WallyHandleFaintingCry(void) void WallyHandleIntroSlide(void) { - sub_80E43C0(gBattleBufferA[gActiveBank][1]); + StartBattleIntroAnim(gBattleBufferA[gActiveBank][1]); gUnknown_02024DE8 |= 1; WallyBufferExecCompleted(); } -- cgit v1.2.3 From 29d16a0af10c2de52de8ff37c13dd5aa3401c98f Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sun, 14 Jan 2018 01:17:02 +0100 Subject: started decompiling data/battle_anim.s --- src/battle/battle_anim.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index a0c74be1d..05a2e5752 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -13,6 +13,7 @@ #include "sprite.h" #include "task.h" #include "ewram.h" +#include "../data/battle_anim.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) @@ -64,8 +65,7 @@ extern struct MusicPlayerInfo gMPlay_SE2; extern const u16 gUnknown_081C7160[]; extern const u8 *const gBattleAnims_Moves[]; extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; -extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; -extern const struct BattleAnimBackground gBattleAnimBackgroundTable[]; +// extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; static void RunAnimScriptCommand(void); static void ScriptCmd_loadspritegfx(void); -- cgit v1.2.3 From 94a1fbf1d90bb9d033b112c97d58f0885582578e Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sun, 14 Jan 2018 02:42:10 +0100 Subject: finished decompiling data/battle_anim.s --- src/battle/battle_anim.c | 1845 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 1842 insertions(+), 3 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 05a2e5752..5239e239d 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -13,7 +13,7 @@ #include "sprite.h" #include "task.h" #include "ewram.h" -#include "../data/battle_anim.h" +#include "graphics.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) @@ -21,6 +21,1847 @@ #define ANIM_SPRITE_INDEX_COUNT 8 #define ANIM_ARGS_COUNT 8 +const struct OamData gOamData_837DF24 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF2C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF34 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF3C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF44 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF4C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF54 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF5C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF64 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF6C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF74 = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF7C = +{ + .y = 0, + .affineMode = 0, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF84 = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF8C = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF94 = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DF9C = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFA4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFAC = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFB4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFBC = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFC4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFCC = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFD4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFDC = +{ + .y = 0, + .affineMode = 1, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFE4 = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFEC = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFF4 = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837DFFC = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837D004 = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837D00C = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E014 = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E01C = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E024 = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E02C = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E034 = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E03C = +{ + .y = 0, + .affineMode = 3, + .objMode = 0, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E044 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E04C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E054 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E05C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E064 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E06C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E074 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E07C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E084 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E08C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E094 = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E09C = +{ + .y = 0, + .affineMode = 0, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0A4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0AC = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0B4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0BC = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0C4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0CC = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0D4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0DC = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0E4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0EC = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0F4 = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E0FC = +{ + .y = 0, + .affineMode = 1, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E104 = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E10C = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E114 = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E11C = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 0, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E124 = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E12C = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E134 = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E13C = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 1, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E144 = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 0, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E14C = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 1, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E154 = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 2, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct OamData gOamData_837E15C = +{ + .y = 0, + .affineMode = 3, + .objMode = 1, + .mosaic = 0, + .bpp = 0, + .shape = 2, + .x = 0, + .matrixNum = 0, + .size = 3, + .tileNum = 0, + .priority = 2, + .paletteNum = 0, + .affineParam = 0, +}; + +const struct CompressedSpriteSheet gBattleAnimPicTable[] = +{ + { (u8 *) &gBattleAnimSpriteSheet_000, 0x200, 10000 }, + { (u8 *) &gBattleAnimSpriteSheet_001, 0x300, 10001 }, + { (u8 *) &gBattleAnimSpriteSheet_002, 0x200, 10002 }, + { (u8 *) &gBattleAnimSpriteSheet_003, 0x100, 10003 }, + { (u8 *) &gBattleAnimSpriteSheet_004, 0x200, 10004 }, + { (u8 *) &gBattleAnimSpriteSheet_005, 0x400, 10005 }, + { (u8 *) &gBattleAnimSpriteSheet_006, 0x180, 10006 }, + { (u8 *) &gBattleAnimSpriteSheet_007, 0x800, 10007 }, + { (u8 *) &gBattleAnimSpriteSheet_008, 0x20, 10008 }, + { (u8 *) &gBattleAnimSpriteSheet_009, 0x400, 10009 }, + { (u8 *) &gBattleAnimSpriteSheet_010, 0x1200, 10010 }, + { (u8 *) &gBattleAnimSpriteSheet_011, 0x180, 10011 }, + { (u8 *) &gBattleAnimSpriteSheet_012, 0x80, 10012 }, + { (u8 *) &gBattleAnimSpriteSheet_013, 0x80, 10013 }, + { (u8 *) &gBattleAnimSpriteSheet_014, 0x280, 10014 }, + { (u8 *) &gBattleAnimSpriteSheet_015, 0x80, 10015 }, + { (u8 *) &gBattleAnimSpriteSheet_016, 0x100, 10016 }, + { (u8 *) &gBattleAnimSpriteSheet_017, 0x20, 10017 }, + { (u8 *) &gBattleAnimSpriteSheet_018, 0x80, 10018 }, + { (u8 *) &gBattleAnimSpriteSheet_019, 0x400, 10019 }, + { (u8 *) &gBattleAnimSpriteSheet_020, 0x200, 10020 }, + { (u8 *) &gBattleAnimSpriteSheet_021, 0xA00, 10021 }, + { (u8 *) &gBattleAnimSpriteSheet_021, 0xA00, 10022 }, + { (u8 *) &gBattleAnimSpriteSheet_023, 0x380, 10023 }, + { (u8 *) &gBattleAnimSpriteSheet_024, 0x300, 10024 }, + { (u8 *) &gBattleAnimSpriteSheet_025, 0xA00, 10025 }, + { (u8 *) &gBattleAnimSpriteSheet_026, 0xA00, 10026 }, + { (u8 *) &gBattleAnimSpriteSheet_027, 0xA00, 10027 }, + { (u8 *) &gBattleAnimSpriteSheet_028, 0xA00, 10028 }, + { (u8 *) &gBattleAnimSpriteSheet_029, 0xA00, 10029 }, + { (u8 *) &gBattleAnimSpriteSheet_030, 0xA00, 10030 }, + { (u8 *) &gBattleAnimSpriteSheet_031, 0xE00, 10031 }, + { (u8 *) &gBattleAnimSpriteSheet_032, 0x380, 10032 }, + { (u8 *) &gBattleAnimSpriteSheet_033, 0x1000, 10033 }, + { (u8 *) &gBattleAnimSpriteSheet_034, 0x800, 10034 }, + { (u8 *) &gBattleAnimSpriteSheet_035, 0xA00, 10035 }, + { (u8 *) &gBattleAnimSpriteSheet_036, 0x800, 10036 }, + { (u8 *) &gBattleAnimSpriteSheet_037, 0xA00, 10037 }, + { (u8 *) &gBattleAnimSpriteSheet_038, 0xA00, 10038 }, + { (u8 *) &gBattleAnimSpriteSheet_039, 0xA00, 10039 }, + { (u8 *) &gBattleAnimSpriteSheet_040, 0xA00, 10040 }, + { (u8 *) &gBattleAnimSpriteSheet_041, 0xA00, 10041 }, + { (u8 *) &gBattleAnimSpriteSheet_042, 0xA00, 10042 }, + { (u8 *) &gBattleAnimSpriteSheet_043, 0xA00, 10043 }, + { (u8 *) &gBattleAnimSpriteSheet_044, 0xA00, 10044 }, + { (u8 *) &gBattleAnimSpriteSheet_045, 0xA00, 10045 }, + { (u8 *) &gBattleAnimSpriteSheet_046, 0x1000, 10046 }, + { (u8 *) &gBattleAnimSpriteSheet_046, 0x1000, 10047 }, + { (u8 *) &gBattleAnimSpriteSheet_048, 0x1000, 10048 }, + { (u8 *) &gBattleAnimSpriteSheet_048, 0x1000, 10049 }, + { (u8 *) &gBattleAnimSpriteSheet_050, 0x200, 10050 }, + { (u8 *) &gBattleAnimSpriteSheet_051, 0x200, 10051 }, + { (u8 *) &gBattleAnimSpriteSheet_052, 0x200, 10052 }, + { (u8 *) &gBattleAnimSpriteSheet_053, 0x800, 10053 }, + { (u8 *) &gBattleAnimSpriteSheet_054, 0x80, 10054 }, + { (u8 *) &gBattleAnimSpriteSheet_055, 0x200, 10055 }, + { (u8 *) &gBattleAnimSpriteSheet_056, 0x1000, 10056 }, + { (u8 *) &gBattleAnimSpriteSheet_057, 0x180, 10057 }, + { (u8 *) &gBattleAnimSpriteSheet_058, 0xC00, 10058 }, + { (u8 *) &gBattleAnimSpriteSheet_059, 0x100, 10059 }, + { (u8 *) &gBattleAnimSpriteSheet_060, 0x40, 10060 }, + { (u8 *) &gBattleAnimSpriteSheet_061, 0x180, 10061 }, + { (u8 *) &gBattleAnimSpriteSheet_062, 0x800, 10062 }, + { (u8 *) &gBattleAnimSpriteSheet_063, 0x480, 10063 }, + { (u8 *) &gBattleAnimSpriteSheet_064, 0x200, 10064 }, + { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10065 }, + { (u8 *) &gBattleAnimSpriteSheet_066, 0x100, 10066 }, + { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10067 }, + { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10068 }, + { (u8 *) &gBattleAnimSpriteSheet_065, 0x200, 10069 }, + { (u8 *) &gBattleAnimSpriteSheet_070, 0x200, 10070 }, + { (u8 *) &gBattleAnimSpriteSheet_071, 0xA00, 10071 }, + { (u8 *) &gBattleAnimSpriteSheet_072, 0x300, 10072 }, + { (u8 *) &gBattleAnimSpriteSheet_073, 0x180, 10073 }, + { (u8 *) &gBattleAnimSpriteSheet_074, 0xA0, 10074 }, + { (u8 *) &gBattleAnimSpriteSheet_075, 0x700, 10075 }, + { (u8 *) &gBattleAnimSpriteSheet_076, 0x400, 10076 }, + { (u8 *) &gBattleAnimSpriteSheet_077, 0x200, 10077 }, + { (u8 *) &gBattleAnimSpriteSheet_078, 0x300, 10078 }, + { (u8 *) &gBattleAnimSpriteSheet_079, 0xC00, 10079 }, + { (u8 *) &gBattleAnimSpriteSheet_080, 0xA00, 10080 }, + { (u8 *) &gBattleAnimSpriteSheet_081, 0x80, 10081 }, + { (u8 *) &gBattleAnimSpriteSheet_082, 0x40, 10082 }, + { (u8 *) &gBattleAnimSpriteSheet_083, 0xE00, 10083 }, + { (u8 *) &gBattleAnimSpriteSheet_084, 0xE00, 10084 }, + { (u8 *) &gBattleAnimSpriteSheet_085, 0x280, 10085 }, + { (u8 *) &gBattleAnimSpriteSheet_086, 0x200, 10086 }, + { (u8 *) &gBattleAnimSpriteSheet_087, 0x80, 10087 }, + { (u8 *) &gBattleAnimSpriteSheet_088, 0xC0, 10088 }, + { (u8 *) &gBattleAnimSpriteSheet_089, 0xA00, 10089 }, + { (u8 *) &gBattleAnimSpriteSheet_090, 0x200, 10090 }, + { (u8 *) &gBattleAnimSpriteSheet_091, 0x180, 10091 }, + { (u8 *) &gBattleAnimSpriteSheet_092, 0x80, 10092 }, + { (u8 *) &gBattleAnimSpriteSheet_093, 0x1000, 10093 }, + { (u8 *) &gBattleAnimSpriteSheet_094, 0xA00, 10094 }, + { (u8 *) &gBattleAnimSpriteSheet_095, 0x180, 10095 }, + { (u8 *) &gBattleAnimSpriteSheet_096, 0x380, 10096 }, + { (u8 *) &gBattleAnimSpriteSheet_097, 0xC00, 10097 }, + { (u8 *) &gBattleAnimSpriteSheet_098, 0x200, 10098 }, + { (u8 *) &gBattleAnimSpriteSheet_099, 0x200, 10099 }, + { (u8 *) &gBattleAnimSpriteSheet_100, 0x200, 10100 }, + { (u8 *) &gBattleAnimSpriteSheet_101, 0x200, 10101 }, + { (u8 *) &gBattleAnimSpriteSheet_102, 0x400, 10102 }, + { (u8 *) &gBattleAnimSpriteSheet_103, 0x80, 10103 }, + { (u8 *) &gBattleAnimSpriteSheet_104, 0x400, 10104 }, + { (u8 *) &gBattleAnimSpriteSheet_105, 0xC00, 10105 }, + { (u8 *) &gBattleAnimSpriteSheet_106, 0x200, 10106 }, + { (u8 *) &gBattleAnimSpriteSheet_107, 0x1000, 10107 }, + { (u8 *) &gBattleAnimSpriteSheet_108, 0xA00, 10108 }, + { (u8 *) &gBattleAnimSpriteSheet_109, 0x20, 10109 }, + { (u8 *) &gBattleAnimSpriteSheet_110, 0xE00, 10110 }, + { (u8 *) &gBattleAnimSpriteSheet_111, 0x80, 10111 }, + { (u8 *) &gBattleAnimSpriteSheet_112, 0xA00, 10112 }, + { (u8 *) &gBattleAnimSpriteSheet_113, 0x400, 10113 }, + { (u8 *) &gBattleAnimSpriteSheet_114, 0x200, 10114 }, + { (u8 *) &gBattleAnimSpriteSheet_115, 0x700, 10115 }, + { (u8 *) &gBattleAnimSpriteSheet_116, 0x800, 10116 }, + { (u8 *) &gBattleAnimSpriteSheet_117, 0xA00, 10117 }, + { (u8 *) &gBattleAnimSpriteSheet_118, 0x600, 10118 }, + { (u8 *) &gBattleAnimSpriteSheet_119, 0x800, 10119 }, + { (u8 *) &gBattleAnimSpriteSheet_120, 0x200, 10120 }, + { (u8 *) &gBattleAnimSpriteSheet_121, 0x40, 10121 }, + { (u8 *) &gBattleAnimSpriteSheet_122, 0x180, 10122 }, + { (u8 *) &gBattleAnimSpriteSheet_123, 0x600, 10123 }, + { (u8 *) &gBattleAnimSpriteSheet_124, 0x600, 10124 }, + { (u8 *) &gBattleAnimSpriteSheet_125, 0x200, 10125 }, + { (u8 *) &gBattleAnimSpriteSheet_126, 0x80, 10126 }, + { (u8 *) &gBattleAnimSpriteSheet_127, 0x200, 10127 }, + { (u8 *) &gBattleAnimSpriteSheet_128, 0x800, 10128 }, + { (u8 *) &gBattleAnimSpriteSheet_129, 0x80, 10129 }, + { (u8 *) &gBattleAnimSpriteSheet_130, 0xA00, 10130 }, + { (u8 *) &gBattleAnimSpriteSheet_131, 0x280, 10131 }, + { (u8 *) &gBattleAnimSpriteSheet_132, 0x280, 10132 }, + { (u8 *) &gBattleAnimSpriteSheet_133, 0x100, 10133 }, + { (u8 *) &gBattleAnimSpriteSheet_134, 0x200, 10134 }, + { (u8 *) &gBattleAnimSpriteSheet_135, 0x200, 10135 }, + { (u8 *) &gBattleAnimSpriteSheet_136, 0x20, 10136 }, + { (u8 *) &gBattleAnimSpriteSheet_137, 0xA00, 10137 }, + { (u8 *) &gBattleAnimSpriteSheet_138, 0x800, 10138 }, + { (u8 *) &gBattleAnimSpriteSheet_139, 0x800, 10139 }, + { (u8 *) &gBattleAnimSpriteSheet_140, 0xC0, 10140 }, + { (u8 *) &gBattleAnimSpriteSheet_141, 0x1C0, 10141 }, + { (u8 *) &gBattleAnimSpriteSheet_142, 0x100, 10142 }, + { (u8 *) &gBattleAnimSpriteSheet_143, 0x800, 10143 }, + { (u8 *) &gBattleAnimSpriteSheet_144, 0x200, 10144 }, + { (u8 *) &gBattleAnimSpriteSheet_145, 0x800, 10145 }, + { (u8 *) &gBattleAnimSpriteSheet_146, 0x180, 10146 }, + { (u8 *) &gBattleAnimSpriteSheet_147, 0x180, 10147 }, + { (u8 *) &gBattleAnimSpriteSheet_148, 0x200, 10148 }, + { (u8 *) &gBattleAnimSpriteSheet_149, 0x200, 10149 }, + { (u8 *) &gBattleAnimSpriteSheet_150, 0x180, 10150 }, + { (u8 *) &gBattleAnimSpriteSheet_151, 0x400, 10151 }, + { (u8 *) &gBattleAnimSpriteSheet_152, 0x80, 10152 }, + { (u8 *) &gBattleAnimSpriteSheet_153, 0x100, 10153 }, + { (u8 *) &gBattleAnimSpriteSheet_154, 0x100, 10154 }, + { (u8 *) &gBattleAnimSpriteSheet_155, 0x140, 10155 }, + { (u8 *) &gBattleAnimSpriteSheet_156, 0x800, 10156 }, + { (u8 *) &gBattleAnimSpriteSheet_157, 0x200, 10157 }, + { (u8 *) &gBattleAnimSpriteSheet_158, 0x100, 10158 }, + { (u8 *) &gBattleAnimSpriteSheet_159, 0xA0, 10159 }, + { (u8 *) &gBattleAnimSpriteSheet_160, 0x100, 10160 }, + { (u8 *) &gBattleAnimSpriteSheet_161, 0x80, 10161 }, + { (u8 *) &gBattleAnimSpriteSheet_162, 0x300, 10162 }, + { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10163 }, + { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10164 }, + { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10165 }, + { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10166 }, + { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10167 }, + { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10168 }, + { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10169 }, + { (u8 *) &gBattleAnimSpriteSheet_166, 0x800, 10170 }, + { (u8 *) &gBattleAnimSpriteSheet_171, 0x80, 10171 }, + { (u8 *) &gBattleAnimSpriteSheet_144, 0x200, 10172 }, + { (u8 *) &gBattleAnimSpriteSheet_173, 0x200, 10173 }, + { (u8 *) &gBattleAnimSpriteSheet_174, 0x200, 10174 }, + { (u8 *) &gBattleAnimSpriteSheet_175, 0x80, 10175 }, + { (u8 *) &gBattleAnimSpriteSheet_176, 0x200, 10176 }, + { (u8 *) &gBattleAnimSpriteSheet_177, 0x500, 10177 }, + { (u8 *) &gBattleAnimSpriteSheet_178, 0x800, 10178 }, + { (u8 *) &gBattleAnimSpriteSheet_179, 0x400, 10179 }, + { (u8 *) &gBattleAnimSpriteSheet_180, 0x20, 10180 }, + { (u8 *) &gBattleAnimSpriteSheet_181, 0x800, 10181 }, + { (u8 *) &gBattleAnimSpriteSheet_182, 0x100, 10182 }, + { (u8 *) &gBattleAnimSpriteSheet_183, 0x800, 10183 }, + { (u8 *) &gBattleAnimSpriteSheet_184, 0x400, 10184 }, + { (u8 *) &gBattleAnimSpriteSheet_185, 0xA00, 10185 }, + { (u8 *) &gBattleAnimSpriteSheet_186, 0x1000, 10186 }, + { (u8 *) &gBattleAnimSpriteSheet_187, 0x800, 10187 }, + { (u8 *) &gBattleAnimSpriteSheet_188, 0x400, 10188 }, + { (u8 *) &gBattleAnimSpriteSheet_189, 0x200, 10189 }, + { (u8 *) &gBattleAnimSpriteSheet_190, 0x800, 10190 }, + { (u8 *) &gBattleAnimSpriteSheet_191, 0x800, 10191 }, + { (u8 *) &gBattleAnimSpriteSheet_192, 0x800, 10192 }, + { (u8 *) &gBattleAnimSpriteSheet_193, 0x200, 10193 }, + { (u8 *) &gBattleAnimSpriteSheet_194, 0x800, 10194 }, + { (u8 *) &gBattleAnimSpriteSheet_195, 0x200, 10195 }, + { (u8 *) &gBattleAnimSpriteSheet_196, 0x800, 10196 }, + { (u8 *) &gBattleAnimSpriteSheet_197, 0x200, 10197 }, + { (u8 *) &gBattleAnimSpriteSheet_198, 0x800, 10198 }, + { (u8 *) &gBattleAnimSpriteSheet_199, 0x400, 10199 }, + { (u8 *) &gBattleAnimSpriteSheet_200, 0x200, 10200 }, + { (u8 *) &gBattleAnimSpriteSheet_201, 0xA80, 10201 }, + { (u8 *) &gBattleAnimSpriteSheet_202, 0x600, 10202 }, + { (u8 *) &gBattleAnimSpriteSheet_203, 0x800, 10203 }, + { (u8 *) &gBattleAnimSpriteSheet_204, 0x200, 10204 }, + { (u8 *) &gBattleAnimSpriteSheet_205, 0x600, 10205 }, + { (u8 *) &gBattleAnimSpriteSheet_206, 0x800, 10206 }, + { (u8 *) &gBattleAnimSpriteSheet_207, 0x180, 10207 }, + { (u8 *) &gBattleAnimSpriteSheet_208, 0x800, 10208 }, + { (u8 *) &gBattleAnimSpriteSheet_209, 0x800, 10209 }, + { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10210 }, + { (u8 *) &gBattleAnimSpriteSheet_211, 0x80, 10211 }, + { (u8 *) &gBattleAnimSpriteSheet_212, 0x800, 10212 }, + { (u8 *) &gBattleAnimSpriteSheet_213, 0x800, 10213 }, + { (u8 *) &gBattleAnimSpriteSheet_214, 0x600, 10214 }, + { (u8 *) &gBattleAnimSpriteSheet_215, 0x600, 10215 }, + { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10216 }, + { (u8 *) &gBattleAnimSpriteSheet_217, 0x80, 10217 }, + { (u8 *) &gBattleAnimSpriteSheet_218, 0x180, 10218 }, + { (u8 *) &gBattleAnimSpriteSheet_210, 0x80, 10219 }, + { (u8 *) &gBattleAnimSpriteSheet_220, 0x200, 10220 }, + { (u8 *) &gBattleAnimSpriteSheet_221, 0x400, 10221 }, + { (u8 *) &gBattleAnimSpriteSheet_222, 0xA00, 10222 }, + { (u8 *) &gBattleAnimSpriteSheet_223, 0x800, 10223 }, + { (u8 *) &gBattleAnimSpriteSheet_224, 0x200, 10224 }, + { (u8 *) &gBattleAnimSpriteSheet_225, 0x400, 10225 }, + { (u8 *) &gBattleAnimSpriteSheet_226, 0x80, 10226 }, + { (u8 *) &gBattleAnimSpriteSheet_227, 0x800, 10227 }, + { (u8 *) &gBattleAnimSpriteSheet_228, 0x200, 10228 }, + { (u8 *) &gBattleAnimSpriteSheet_229, 0x300, 10229 }, + { (u8 *) &gBattleAnimSpriteSheet_230, 0x800, 10230 }, + { (u8 *) &gBattleAnimSpriteSheet_231, 0x380, 10231 }, + { (u8 *) &gBattleAnimSpriteSheet_232, 0x800, 10232 }, + { (u8 *) &gBattleAnimSpriteSheet_233, 0xC0, 10233 }, + { (u8 *) &gBattleAnimSpriteSheet_234, 0x800, 10234 }, + { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10235 }, + { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10236 }, + { (u8 *) &gBattleAnimSpriteSheet_235, 0x60, 10237 }, + { (u8 *) &gBattleAnimSpriteSheet_238, 0x80, 10238 }, + { (u8 *) &gBattleAnimSpriteSheet_239, 0x180, 10239 }, + { (u8 *) &gBattleAnimSpriteSheet_240, 0x180, 10240 }, + { (u8 *) &gBattleAnimSpriteSheet_241, 0x200, 10241 }, + { (u8 *) &gBattleAnimSpriteSheet_242, 0x200, 10242 }, + { (u8 *) &gBattleAnimSpriteSheet_243, 0x20, 10243 }, + { (u8 *) &gBattleAnimSpriteSheet_244, 0x400, 10244 }, + { (u8 *) &gBattleAnimSpriteSheet_245, 0x600, 10245 }, + { (u8 *) &gBattleAnimSpriteSheet_246, 0x1000, 10246 }, + { (u8 *) &gBattleAnimSpriteSheet_247, 0x400, 10247 }, + { (u8 *) &gBattleAnimSpriteSheet_248, 0x20, 10248 }, + { (u8 *) &gBattleAnimSpriteSheet_249, 0x80, 10249 }, + { (u8 *) &gBattleAnimSpriteSheet_250, 0x800, 10250 }, + { (u8 *) &gBattleAnimSpriteSheet_251, 0x80, 10251 }, + { (u8 *) &gBattleAnimSpriteSheet_252, 0x200, 10252 }, + { (u8 *) &gBattleAnimSpriteSheet_253, 0x400, 10253 }, + { (u8 *) &gBattleAnimSpriteSheet_254, 0x200, 10254 }, + { (u8 *) &gBattleAnimSpriteSheet_255, 0x200, 10255 }, + { (u8 *) &gBattleAnimSpriteSheet_256, 0x800, 10256 }, + { (u8 *) &gBattleAnimSpriteSheet_257, 0x280, 10257 }, + { (u8 *) &gBattleAnimSpriteSheet_258, 0x200, 10258 }, + { (u8 *) &gBattleAnimSpriteSheet_149, 0x200, 10259 }, + { (u8 *) &gBattleAnimSpriteSheet_260, 0x400, 10260 }, + { (u8 *) &gBattleAnimSpriteSheet_261, 0x200, 10261 }, + { (u8 *) &gBattleAnimSpriteSheet_262, 0x200, 10262 }, + { (u8 *) &gBattleAnimSpriteSheet_263, 0x80, 10263 }, + { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10264 }, + { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10265 }, + { (u8 *) &gBattleAnimSpriteSheet_266, 0x80, 10266 }, + { (u8 *) &gBattleAnimSpriteSheet_212, 0x800, 10267 }, + { (u8 *) &gBattleAnimSpriteSheet_264, 0x20, 10268 }, + { (u8 *) &gBattleAnimSpriteSheet_269, 0x80, 10269 }, + { (u8 *) &gBattleAnimSpriteSheet_270, 0x400, 10270 }, + { (u8 *) &gBattleAnimSpriteSheet_271, 0x80, 10271 }, + { (u8 *) &gBattleAnimSpriteSheet_272, 0x800, 10272 }, + { (u8 *) &gBattleAnimSpriteSheet_273, 0x20, 10273 }, + { (u8 *) &gBattleAnimSpriteSheet_274, 0x800, 10274 }, + { (u8 *) &gBattleAnimSpriteSheet_275, 0x800, 10275 }, + { (u8 *) &gBattleAnimSpriteSheet_276, 0x800, 10276 }, + { (u8 *) &gBattleAnimSpriteSheet_277, 0x1000, 10277 }, + { (u8 *) &gBattleAnimSpriteSheet_278, 0x800, 10278 }, + { (u8 *) &gBattleAnimSpriteSheet_279, 0xA0, 10279 }, + { (u8 *) &gBattleAnimSpriteSheet_280, 0x800, 10280 }, + { (u8 *) &gBattleAnimSpriteSheet_281, 0x200, 10281 }, + { (u8 *) &gBattleAnimSpriteSheet_282, 0x600, 10282 }, + { (u8 *) &gBattleAnimSpriteSheet_283, 0x200, 10283 }, + { (u8 *) &gBattleAnimSpriteSheet_284, 0x800, 10284 }, + { (u8 *) &gBattleAnimSpriteSheet_285, 0x200, 10285 }, + { (u8 *) &gBattleAnimSpriteSheet_183, 0x800, 10286 }, + { (u8 *) &gBattleAnimSpriteSheet_056, 0x1000, 10287 }, + { (u8 *) &gBattleAnimSpriteSheet_163, 0x100, 10288 }, +}; + +const struct CompressedSpritePalette gBattleAnimPaletteTable[] = +{ + { (u8 *) &gBattleAnimSpritePalette_000, 10000 }, + { (u8 *) &gBattleAnimSpritePalette_001, 10001 }, + { (u8 *) &gBattleAnimSpritePalette_002, 10002 }, + { (u8 *) &gBattleAnimSpritePalette_003, 10003 }, + { (u8 *) &gBattleAnimSpritePalette_004, 10004 }, + { (u8 *) &gBattleAnimSpritePalette_005, 10005 }, + { (u8 *) &gBattleAnimSpritePalette_006, 10006 }, + { (u8 *) &gBattleAnimSpritePalette_007, 10007 }, + { (u8 *) &gBattleAnimSpritePalette_008, 10008 }, + { (u8 *) &gBattleAnimSpritePalette_009, 10009 }, + { (u8 *) &gBattleAnimSpritePalette_010, 10010 }, + { (u8 *) &gBattleAnimSpritePalette_011, 10011 }, + { (u8 *) &gBattleAnimSpritePalette_012, 10012 }, + { (u8 *) &gBattleAnimSpritePalette_013, 10013 }, + { (u8 *) &gBattleAnimSpritePalette_014, 10014 }, + { (u8 *) &gBattleAnimSpritePalette_015, 10015 }, + { (u8 *) &gBattleAnimSpritePalette_016, 10016 }, + { (u8 *) &gBattleAnimSpritePalette_016, 10017 }, + { (u8 *) &gBattleAnimSpritePalette_018, 10018 }, + { (u8 *) &gBattleAnimSpritePalette_019, 10019 }, + { (u8 *) &gBattleAnimSpritePalette_020, 10020 }, + { (u8 *) &gBattleAnimSpritePalette_021, 10021 }, + { (u8 *) &gBattleAnimSpritePalette_022, 10022 }, + { (u8 *) &gBattleAnimSpritePalette_023, 10023 }, + { (u8 *) &gBattleAnimSpritePalette_024, 10024 }, + { (u8 *) &gBattleAnimSpritePalette_025, 10025 }, + { (u8 *) &gBattleAnimSpritePalette_026, 10026 }, + { (u8 *) &gBattleAnimSpritePalette_027, 10027 }, + { (u8 *) &gBattleAnimSpritePalette_028, 10028 }, + { (u8 *) &gBattleAnimSpritePalette_029, 10029 }, + { (u8 *) &gBattleAnimSpritePalette_030, 10030 }, + { (u8 *) &gBattleAnimSpritePalette_031, 10031 }, + { (u8 *) &gBattleAnimSpritePalette_032, 10032 }, + { (u8 *) &gBattleAnimSpritePalette_033, 10033 }, + { (u8 *) &gBattleAnimSpritePalette_033, 10034 }, + { (u8 *) &gBattleAnimSpritePalette_033, 10035 }, + { (u8 *) &gBattleAnimSpritePalette_036, 10036 }, + { (u8 *) &gBattleAnimSpritePalette_036, 10037 }, + { (u8 *) &gBattleAnimSpritePalette_038, 10038 }, + { (u8 *) &gBattleAnimSpritePalette_039, 10039 }, + { (u8 *) &gBattleAnimSpritePalette_038, 10040 }, + { (u8 *) &gBattleAnimSpritePalette_038, 10041 }, + { (u8 *) &gBattleAnimSpritePalette_042, 10042 }, + { (u8 *) &gBattleAnimSpritePalette_043, 10043 }, + { (u8 *) &gBattleAnimSpritePalette_044, 10044 }, + { (u8 *) &gBattleAnimSpritePalette_045, 10045 }, + { (u8 *) &gBattleAnimSpritePalette_046, 10046 }, + { (u8 *) &gBattleAnimSpritePalette_047, 10046 }, + { (u8 *) &gBattleAnimSpritePalette_048, 10048 }, + { (u8 *) &gBattleAnimSpritePalette_049, 10049 }, + { (u8 *) &gBattleAnimSpritePalette_050, 10050 }, + { (u8 *) &gBattleAnimSpritePalette_050, 10051 }, + { (u8 *) &gBattleAnimSpritePalette_050, 10052 }, + { (u8 *) &gBattleAnimSpritePalette_026, 10053 }, + { (u8 *) &gBattleAnimSpritePalette_054, 10054 }, + { (u8 *) &gBattleAnimSpritePalette_050, 10055 }, + { (u8 *) &gBattleAnimSpritePalette_056, 10056 }, + { (u8 *) &gBattleAnimSpritePalette_057, 10057 }, + { (u8 *) &gBattleAnimSpritePalette_058, 10058 }, + { (u8 *) &gBattleAnimSpritePalette_059, 10059 }, + { (u8 *) &gBattleAnimSpritePalette_060, 10060 }, + { (u8 *) &gBattleAnimSpritePalette_061, 10061 }, + { (u8 *) &gBattleAnimSpritePalette_062, 10062 }, + { (u8 *) &gBattleAnimSpritePalette_063, 10063 }, + { (u8 *) &gBattleAnimSpritePalette_064, 10064 }, + { (u8 *) &gBattleAnimSpritePalette_065, 10065 }, + { (u8 *) &gBattleAnimSpritePalette_066, 10066 }, + { (u8 *) &gBattleAnimSpritePalette_067, 10067 }, + { (u8 *) &gBattleAnimSpritePalette_068, 10068 }, + { (u8 *) &gBattleAnimSpritePalette_065, 10069 }, + { (u8 *) &gBattleAnimSpritePalette_070, 10070 }, + { (u8 *) &gBattleAnimSpritePalette_070, 10071 }, + { (u8 *) &gBattleAnimSpritePalette_072, 10072 }, + { (u8 *) &gBattleAnimSpritePalette_073, 10073 }, + { (u8 *) &gBattleAnimSpritePalette_074, 10074 }, + { (u8 *) &gBattleAnimSpritePalette_075, 10075 }, + { (u8 *) &gBattleAnimSpritePalette_076, 10076 }, + { (u8 *) &gBattleAnimSpritePalette_076, 10077 }, + { (u8 *) &gBattleAnimSpritePalette_078, 10078 }, + { (u8 *) &gBattleAnimSpritePalette_078, 10079 }, + { (u8 *) &gBattleAnimSpritePalette_080, 10080 }, + { (u8 *) &gBattleAnimSpritePalette_081, 10081 }, + { (u8 *) &gBattleAnimSpritePalette_082, 10082 }, + { (u8 *) &gBattleAnimSpritePalette_083, 10083 }, + { (u8 *) &gBattleAnimSpritePalette_084, 10084 }, + { (u8 *) &gBattleAnimSpritePalette_085, 10085 }, + { (u8 *) &gBattleAnimSpritePalette_086, 10086 }, + { (u8 *) &gBattleAnimSpritePalette_087, 10087 }, + { (u8 *) &gBattleAnimSpritePalette_088, 10088 }, + { (u8 *) &gBattleAnimSpritePalette_089, 10089 }, + { (u8 *) &gBattleAnimSpritePalette_090, 10090 }, + { (u8 *) &gBattleAnimSpritePalette_091, 10091 }, + { (u8 *) &gBattleAnimSpritePalette_092, 10092 }, + { (u8 *) &gBattleAnimSpritePalette_093, 10093 }, + { (u8 *) &gBattleAnimSpritePalette_094, 10094 }, + { (u8 *) &gBattleAnimSpritePalette_095, 10095 }, + { (u8 *) &gBattleAnimSpritePalette_096, 10096 }, + { (u8 *) &gBattleAnimSpritePalette_097, 10097 }, + { (u8 *) &gBattleAnimSpritePalette_094, 10098 }, + { (u8 *) &gBattleAnimSpritePalette_099, 10099 }, + { (u8 *) &gBattleAnimSpritePalette_100, 10100 }, + { (u8 *) &gBattleAnimSpritePalette_101, 10101 }, + { (u8 *) &gBattleAnimSpritePalette_101, 10102 }, + { (u8 *) &gBattleAnimSpritePalette_103, 10103 }, + { (u8 *) &gBattleAnimSpritePalette_104, 10104 }, + { (u8 *) &gBattleAnimSpritePalette_105, 10105 }, + { (u8 *) &gBattleAnimSpritePalette_105, 10106 }, + { (u8 *) &gBattleAnimSpritePalette_107, 10107 }, + { (u8 *) &gBattleAnimSpritePalette_107, 10108 }, + { (u8 *) &gBattleAnimSpritePalette_109, 10109 }, + { (u8 *) &gBattleAnimSpritePalette_109, 10110 }, + { (u8 *) &gBattleAnimSpritePalette_111, 10111 }, + { (u8 *) &gBattleAnimSpritePalette_112, 10112 }, + { (u8 *) &gBattleAnimSpritePalette_113, 10113 }, + { (u8 *) &gBattleAnimSpritePalette_114, 10114 }, + { (u8 *) &gBattleAnimSpritePalette_115, 10115 }, + { (u8 *) &gBattleAnimSpritePalette_116, 10116 }, + { (u8 *) &gBattleAnimSpritePalette_117, 10117 }, + { (u8 *) &gBattleAnimSpritePalette_118, 10118 }, + { (u8 *) &gBattleAnimSpritePalette_119, 10119 }, + { (u8 *) &gBattleAnimSpritePalette_120, 10120 }, + { (u8 *) &gBattleAnimSpritePalette_121, 10121 }, + { (u8 *) &gBattleAnimSpritePalette_122, 10122 }, + { (u8 *) &gBattleAnimSpritePalette_122, 10123 }, + { (u8 *) &gBattleAnimSpritePalette_124, 10124 }, + { (u8 *) &gBattleAnimSpritePalette_125, 10125 }, + { (u8 *) &gBattleAnimSpritePalette_126, 10126 }, + { (u8 *) &gBattleAnimSpritePalette_127, 10127 }, + { (u8 *) &gBattleAnimSpritePalette_128, 10128 }, + { (u8 *) &gBattleAnimSpritePalette_128, 10129 }, + { (u8 *) &gBattleAnimSpritePalette_130, 10130 }, + { (u8 *) &gBattleAnimSpritePalette_130, 10131 }, + { (u8 *) &gBattleAnimSpritePalette_132, 10132 }, + { (u8 *) &gBattleAnimSpritePalette_133, 10133 }, + { (u8 *) &gBattleAnimSpritePalette_133, 10134 }, + { (u8 *) &gBattleAnimSpritePalette_135, 10135 }, + { (u8 *) &gBattleAnimSpritePalette_136, 10136 }, + { (u8 *) &gBattleAnimSpritePalette_135, 10137 }, + { (u8 *) &gBattleAnimSpritePalette_135, 10138 }, + { (u8 *) &gBattleAnimSpritePalette_139, 10139 }, + { (u8 *) &gBattleAnimSpritePalette_140, 10140 }, + { (u8 *) &gBattleAnimSpritePalette_141, 10141 }, + { (u8 *) &gBattleAnimSpritePalette_141, 10142 }, + { (u8 *) &gBattleAnimSpritePalette_143, 10143 }, + { (u8 *) &gBattleAnimSpritePalette_144, 10144 }, + { (u8 *) &gBattleAnimSpritePalette_139, 10145 }, + { (u8 *) &gBattleAnimSpritePalette_115, 10146 }, + { (u8 *) &gBattleAnimSpritePalette_147, 10147 }, + { (u8 *) &gBattleAnimSpritePalette_148, 10148 }, + { (u8 *) &gBattleAnimSpritePalette_148, 10149 }, + { (u8 *) &gBattleAnimSpritePalette_150, 10150 }, + { (u8 *) &gBattleAnimSpritePalette_150, 10151 }, + { (u8 *) &gBattleAnimSpritePalette_152, 10152 }, + { (u8 *) &gBattleAnimSpritePalette_153, 10153 }, + { (u8 *) &gBattleAnimSpritePalette_154, 10154 }, + { (u8 *) &gBattleAnimSpritePalette_155, 10155 }, + { (u8 *) &gBattleAnimSpritePalette_156, 10156 }, + { (u8 *) &gBattleAnimSpritePalette_157, 10157 }, + { (u8 *) &gBattleAnimSpritePalette_158, 10158 }, + { (u8 *) &gBattleAnimSpritePalette_159, 10159 }, + { (u8 *) &gBattleAnimSpritePalette_160, 10160 }, + { (u8 *) &gBattleAnimSpritePalette_161, 10161 }, + { (u8 *) &gBattleAnimSpritePalette_162, 10162 }, + { (u8 *) &gBattleAnimSpritePalette_163, 10163 }, + { (u8 *) &gBattleAnimSpritePalette_164, 10164 }, + { (u8 *) &gBattleAnimSpritePalette_165, 10165 }, + { (u8 *) &gBattleAnimSpritePalette_166, 10166 }, + { (u8 *) &gBattleAnimSpritePalette_167, 10167 }, + { (u8 *) &gBattleAnimSpritePalette_168, 10168 }, + { (u8 *) &gBattleAnimSpritePalette_169, 10169 }, + { (u8 *) &gBattleAnimSpritePalette_170, 10170 }, + { (u8 *) &gBattleAnimSpritePalette_171, 10171 }, + { (u8 *) &gBattleAnimSpritePalette_172, 10172 }, + { (u8 *) &gBattleAnimSpritePalette_001, 10173 }, + { (u8 *) &gBattleAnimSpritePalette_174, 10174 }, + { (u8 *) &gBattleAnimSpritePalette_175, 10175 }, + { (u8 *) &gBattleAnimSpritePalette_176, 10176 }, + { (u8 *) &gBattleAnimSpritePalette_177, 10177 }, + { (u8 *) &gBattleAnimSpritePalette_178, 10178 }, + { (u8 *) &gBattleAnimSpritePalette_179, 10179 }, + { (u8 *) &gBattleAnimSpritePalette_179, 10180 }, + { (u8 *) &gBattleAnimSpritePalette_179, 10181 }, + { (u8 *) &gBattleAnimSpritePalette_182, 10182 }, + { (u8 *) &gBattleAnimSpritePalette_183, 10183 }, + { (u8 *) &gBattleAnimSpritePalette_184, 10184 }, + { (u8 *) &gBattleAnimSpritePalette_185, 10185 }, + { (u8 *) &gBattleAnimSpritePalette_186, 10186 }, + { (u8 *) &gBattleAnimSpritePalette_187, 10187 }, + { (u8 *) &gBattleAnimSpritePalette_188, 10188 }, + { (u8 *) &gBattleAnimSpritePalette_189, 10189 }, + { (u8 *) &gBattleAnimSpritePalette_190, 10190 }, + { (u8 *) &gBattleAnimSpritePalette_191, 10191 }, + { (u8 *) &gBattleAnimSpritePalette_192, 10192 }, + { (u8 *) &gBattleAnimSpritePalette_193, 10193 }, + { (u8 *) &gBattleAnimSpritePalette_194, 10194 }, + { (u8 *) &gBattleAnimSpritePalette_195, 10195 }, + { (u8 *) &gBattleAnimSpritePalette_196, 10196 }, + { (u8 *) &gBattleAnimSpritePalette_197, 10197 }, + { (u8 *) &gBattleAnimSpritePalette_198, 10198 }, + { (u8 *) &gBattleAnimSpritePalette_199, 10199 }, + { (u8 *) &gBattleAnimSpritePalette_200, 10200 }, + { (u8 *) &gBattleAnimSpritePalette_201, 10201 }, + { (u8 *) &gBattleAnimSpritePalette_202, 10202 }, + { (u8 *) &gBattleAnimSpritePalette_203, 10203 }, + { (u8 *) &gBattleAnimSpritePalette_204, 10204 }, + { (u8 *) &gBattleAnimSpritePalette_205, 10205 }, + { (u8 *) &gBattleAnimSpritePalette_206, 10206 }, + { (u8 *) &gBattleAnimSpritePalette_207, 10207 }, + { (u8 *) &gBattleAnimSpritePalette_167, 10208 }, + { (u8 *) &gBattleAnimSpritePalette_209, 10209 }, + { (u8 *) &gBattleAnimSpritePalette_210, 10210 }, + { (u8 *) &gBattleAnimSpritePalette_211, 10211 }, + { (u8 *) &gBattleAnimSpritePalette_211, 10212 }, + { (u8 *) &gBattleAnimSpritePalette_211, 10213 }, + { (u8 *) &gBattleAnimSpritePalette_064, 10214 }, + { (u8 *) &gBattleAnimSpritePalette_215, 10215 }, + { (u8 *) &gBattleAnimSpritePalette_216, 10216 }, + { (u8 *) &gBattleAnimSpritePalette_217, 10217 }, + { (u8 *) &gBattleAnimSpritePalette_218, 10218 }, + { (u8 *) &gBattleAnimSpritePalette_219, 10219 }, + { (u8 *) &gBattleAnimSpritePalette_220, 10220 }, + { (u8 *) &gBattleAnimSpritePalette_221, 10221 }, + { (u8 *) &gBattleAnimSpritePalette_222, 10222 }, + { (u8 *) &gBattleAnimSpritePalette_223, 10223 }, + { (u8 *) &gBattleAnimSpritePalette_224, 10224 }, + { (u8 *) &gBattleAnimSpritePalette_225, 10225 }, + { (u8 *) &gBattleAnimSpritePalette_226, 10226 }, + { (u8 *) &gBattleAnimSpritePalette_226, 10227 }, + { (u8 *) &gBattleAnimSpritePalette_228, 10228 }, + { (u8 *) &gBattleAnimSpritePalette_229, 10229 }, + { (u8 *) &gBattleAnimSpritePalette_230, 10230 }, + { (u8 *) &gBattleAnimSpritePalette_231, 10231 }, + { (u8 *) &gBattleAnimSpritePalette_231, 10232 }, + { (u8 *) &gBattleAnimSpritePalette_233, 10233 }, + { (u8 *) &gBattleAnimSpritePalette_234, 10234 }, + { (u8 *) &gBattleAnimSpritePalette_235, 10235 }, + { (u8 *) &gBattleAnimSpritePalette_236, 10236 }, + { (u8 *) &gBattleAnimSpritePalette_237, 10237 }, + { (u8 *) &gBattleAnimSpritePalette_238, 10238 }, + { (u8 *) &gBattleAnimSpritePalette_239, 10239 }, + { (u8 *) &gBattleAnimSpritePalette_240, 10240 }, + { (u8 *) &gBattleAnimSpritePalette_241, 10241 }, + { (u8 *) &gBattleAnimSpritePalette_242, 10242 }, + { (u8 *) &gBattleAnimSpritePalette_243, 10243 }, + { (u8 *) &gBattleAnimSpritePalette_244, 10244 }, + { (u8 *) &gBattleAnimSpritePalette_245, 10245 }, + { (u8 *) &gBattleAnimSpritePalette_245, 10246 }, + { (u8 *) &gBattleAnimSpritePalette_064, 10247 }, + { (u8 *) &gBattleAnimSpritePalette_248, 10248 }, + { (u8 *) &gBattleAnimSpritePalette_249, 10249 }, + { (u8 *) &gBattleAnimSpritePalette_249, 10250 }, + { (u8 *) &gBattleAnimSpritePalette_251, 10251 }, + { (u8 *) &gBattleAnimSpritePalette_252, 10252 }, + { (u8 *) &gBattleAnimSpritePalette_253, 10253 }, + { (u8 *) &gBattleAnimSpritePalette_254, 10254 }, + { (u8 *) &gBattleAnimSpritePalette_255, 10255 }, + { (u8 *) &gBattleAnimSpritePalette_256, 10256 }, + { (u8 *) &gBattleAnimSpritePalette_257, 10257 }, + { (u8 *) &gBattleAnimSpritePalette_258, 10258 }, + { (u8 *) &gBattleAnimSpritePalette_259, 10259 }, + { (u8 *) &gBattleAnimSpritePalette_260, 10260 }, + { (u8 *) &gBattleAnimSpritePalette_261, 10261 }, + { (u8 *) &gBattleAnimSpritePalette_262, 10262 }, + { (u8 *) &gBattleAnimSpritePalette_263, 10263 }, + { (u8 *) &gBattleAnimSpritePalette_264, 10264 }, + { (u8 *) &gBattleAnimSpritePalette_265, 10265 }, + { (u8 *) &gBattleAnimSpritePalette_266, 10266 }, + { (u8 *) &gBattleAnimSpritePalette_267, 10267 }, + { (u8 *) &gBattleAnimSpritePalette_268, 10268 }, + { (u8 *) &gBattleAnimSpritePalette_269, 10269 }, + { (u8 *) &gBattleAnimSpritePalette_270, 10270 }, + { (u8 *) &gBattleAnimSpritePalette_271, 10271 }, + { (u8 *) &gBattleAnimSpritePalette_272, 10272 }, + { (u8 *) &gBattleAnimSpritePalette_272, 10273 }, + { (u8 *) &gBattleAnimSpritePalette_274, 10274 }, + { (u8 *) &gBattleAnimSpritePalette_274, 10275 }, + { (u8 *) &gBattleAnimSpritePalette_274, 10276 }, + { (u8 *) &gBattleAnimSpritePalette_277, 10277 }, + { (u8 *) &gBattleAnimSpritePalette_278, 10278 }, + { (u8 *) &gBattleAnimSpritePalette_279, 10279 }, + { (u8 *) &gBattleAnimSpritePalette_280, 10280 }, + { (u8 *) &gBattleAnimSpritePalette_281, 10281 }, + { (u8 *) &gBattleAnimSpritePalette_282, 10282 }, + { (u8 *) &gBattleAnimSpritePalette_283, 10283 }, + { (u8 *) &gBattleAnimSpritePalette_284, 10284 }, + { (u8 *) &gBattleAnimSpritePalette_285, 10285 }, + { (u8 *) &gBattleAnimSpritePalette_286, 10286 }, + { (u8 *) &gBattleAnimSpritePalette_287, 10287 }, + { (u8 *) &gBattleAnimSpritePalette_288, 10288 }, +}; + +const struct BattleAnimBackground gBattleAnimBackgroundTable[] = +{ + &gBattleAnimBackgroundImage_00, &gBattleAnimBackgroundPalette_00, &gBattleAnimBackgroundTilemap_00, + &gBattleAnimBackgroundImage_00, &gBattleAnimBackgroundPalette_00, &gBattleAnimBackgroundTilemap_00, + &gBattleAnimBackgroundImage_02, &gBattleAnimBackgroundPalette_02, &gBattleAnimBackgroundTilemap_02, + &gBattleAnimBackgroundImage_03, &gBattleAnimBackgroundPalette_03, &gBattleAnimBackgroundTilemap_03, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_04, &gBattleAnimBackgroundTilemap_04, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_04, &gBattleAnimBackgroundTilemap_05, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_04, &gBattleAnimBackgroundTilemap_06, + &gBattleAnimBackgroundImage_07, &gBattleAnimBackgroundPalette_07, &gBattleAnimBackgroundTilemap_07, + &gBattleAnimBackgroundImage_07, &gBattleAnimBackgroundPalette_07, &gBattleAnimBackgroundTilemap_08, + &gBattleAnimBackgroundImage_09, &gBattleAnimBackgroundPalette_09, &gBattleAnimBackgroundTilemap_09, + &gBattleAnimBackgroundImage_09, &gBattleAnimBackgroundPalette_09, &gBattleAnimBackgroundTilemap_10, + &gBattleAnimBackgroundImage_11, &gBattleAnimBackgroundPalette_11, &gBattleAnimBackgroundTilemap_11, + &gBattleAnimBackgroundImage_12, &gBattleAnimBackgroundPalette_12, &gBattleAnimBackgroundTilemap_12, + &gBattleAnimBackgroundImage_12, &gBattleAnimBackgroundPalette_12, &gBattleAnimBackgroundTilemap_13, + &gBattleAnimBackgroundImage_12, &gBattleAnimBackgroundPalette_12, &gBattleAnimBackgroundTilemap_14, + &gBattleAnimBackgroundImage_15, &gBattleAnimBackgroundPalette_15, &gBattleAnimBackgroundTilemap_15, + &gBattleAnimBackgroundImage_16, &gBattleAnimBackgroundPalette_16, &gBattleAnimBackgroundTilemap_16, + &gBattleAnimBackgroundImage_17, &gBattleAnimBackgroundPalette_17, &gBattleAnimBackgroundTilemap_17, + &gBattleAnimBackgroundImage_07, &gBattleAnimBackgroundPalette_18, &gBattleAnimBackgroundTilemap_07, + &gBattleAnimBackgroundImage_07, &gBattleAnimBackgroundPalette_18, &gBattleAnimBackgroundTilemap_08, + &gBattleAnimBackgroundImage_20, &gBattleAnimBackgroundPalette_20, &gBattleAnimBackgroundTilemap_20, + &gBattleAnimBackgroundImage_21, &gBattleAnimBackgroundPalette_21, &gBattleAnimBackgroundTilemap_21, + &gBattleAnimBackgroundImage_09, &gBattleAnimBackgroundPalette_22, &gBattleAnimBackgroundTilemap_09, + &gBattleAnimBackgroundImage_09, &gBattleAnimBackgroundPalette_22, &gBattleAnimBackgroundTilemap_10, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_24, &gBattleAnimBackgroundTilemap_04, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_24, &gBattleAnimBackgroundTilemap_05, + &gBattleAnimBackgroundImage_04, &gBattleAnimBackgroundPalette_24, &gBattleAnimBackgroundTilemap_06, +}; + extern u16 gBattlePartyID[4]; extern u8 gObjectBankIDs[]; extern u8 gBankAttacker; @@ -64,8 +1905,6 @@ extern struct MusicPlayerInfo gMPlay_SE2; extern const u16 gUnknown_081C7160[]; extern const u8 *const gBattleAnims_Moves[]; -extern const struct CompressedSpriteSheet gBattleAnimPicTable[]; -// extern const struct CompressedSpritePalette gBattleAnimPaletteTable[]; static void RunAnimScriptCommand(void); static void ScriptCmd_loadspritegfx(void); -- cgit v1.2.3 From 72c90d9dd35b2e0cc8597cd1e10c6a767fea0f0e Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sun, 14 Jan 2018 14:13:59 +0100 Subject: Decompiled data/battle_anim_80A7E7C.s --- src/battle/battle_anim_80A7E7C.c | 78 +++++++++++++++++++++++++++++++++++----- 1 file changed, 69 insertions(+), 9 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_anim_80A7E7C.c b/src/battle/battle_anim_80A7E7C.c index c35434df0..f109333e3 100644 --- a/src/battle/battle_anim_80A7E7C.c +++ b/src/battle/battle_anim_80A7E7C.c @@ -20,17 +20,77 @@ static void sub_80A808C(u8 taskId); static void sub_80A81D8(u8 taskId); static void sub_80A8374(u8 taskId); static void sub_80A8488(u8 taskId); +static void sub_80A8530(struct Sprite *sprite); static void sub_80A85A4(struct Sprite *sprite); -void sub_80A8614(struct Sprite* sprite); +static void sub_80A85C8(struct Sprite *sprite); +static void sub_80A8614(struct Sprite* sprite); +static void sub_80A8638(struct Sprite *sprite); static void sub_80A86F4(struct Sprite *sprite); +static void sub_80A8764(struct Sprite *sprite); +static void sub_80A8818(struct Sprite *sprite); static void sub_80A88F0(struct Sprite *sprite); static void sub_80A89B4(u8 taskId); static void sub_80A8A18(u8 taskId); static void sub_80A8C0C(u8 taskId); static void sub_80A8D8C(u8 taskId); -void sub_80A8FD8(u8 taskId); +static void sub_80A8FD8(u8 taskId); static void sub_80A913C(u8 taskId); +const struct SpriteTemplate gBattleAnimSpriteTemplate_83C1FB0 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8530, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83C1FC8 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A85C8, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83C1FE0 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8638, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83C1FF8 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8764, +}; + +const struct SpriteTemplate gBattleAnimSpriteTemplate_83C2010 = +{ + .tileTag = 0, + .paletteTag = 0, + .oam = &gDummyOamData, + .anims = gDummySpriteAnimTable, + .images = NULL, + .affineAnims = gDummySpriteAffineAnimTable, + .callback = sub_80A8818, +}; + void sub_80A7E7C(u8 taskId) { u8 sprite; @@ -335,7 +395,7 @@ void sub_80A8500(u8 taskId) sub_80A8408(taskId); } -void sub_80A8530(struct Sprite *sprite) +static void sub_80A8530(struct Sprite *sprite) { sprite->invisible = TRUE; if (GetBankSide(gAnimBankAttacker)) @@ -362,7 +422,7 @@ static void sub_80A85A4(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -void sub_80A85C8(struct Sprite *sprite) +static void sub_80A85C8(struct Sprite *sprite) { u8 spriteId; sprite->invisible = TRUE; @@ -376,7 +436,7 @@ void sub_80A85C8(struct Sprite *sprite) sprite->callback = sub_8078458; } -void sub_80A8614(struct Sprite *sprite) +static void sub_80A8614(struct Sprite *sprite) { sprite->data[0] = sprite->data[4]; sprite->data[2] = -sprite->data[2]; @@ -384,7 +444,7 @@ void sub_80A8614(struct Sprite *sprite) StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } -void sub_80A8638(struct Sprite *sprite) +static void sub_80A8638(struct Sprite *sprite) { int something; int spriteId; @@ -451,7 +511,7 @@ static void sub_80A86F4(struct Sprite *sprite) } } -void sub_80A8764(struct Sprite *sprite) +static void sub_80A8764(struct Sprite *sprite) { u8 v1; u8 spriteId; @@ -486,7 +546,7 @@ void sub_80A8764(struct Sprite *sprite) sprite->callback = sub_80784A8; } -void sub_80A8818(struct Sprite *sprite) +static void sub_80A8818(struct Sprite *sprite) { u8 spriteId; u8 v1; @@ -833,7 +893,7 @@ void sub_80A8EFC(u8 taskId) TASK.func = sub_80A8FD8; } -void sub_80A8FD8(u8 taskId) +static void sub_80A8FD8(u8 taskId) { TASK.data[3] += TASK.data[4]; obj_id_set_rotscale(TASK.data[5], 0x100, 0x100, TASK.data[3]); -- cgit v1.2.3 From 101f16355a222b0b58029a9ff77cf5e4f9287ca8 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 14 Jan 2018 10:36:07 -0600 Subject: format and arrange some Pokemon data --- src/battle/calculate_base_damage.c | 60 +++++++++++++++++++++++++++++++++----- 1 file changed, 53 insertions(+), 7 deletions(-) (limited to 'src/battle') diff --git a/src/battle/calculate_base_damage.c b/src/battle/calculate_base_damage.c index 5c91b3657..217ab28a3 100644 --- a/src/battle/calculate_base_damage.c +++ b/src/battle/calculate_base_damage.c @@ -1,16 +1,16 @@ #include "global.h" #include "constants/abilities.h" +#include "constants/battle_move_effects.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/species.h" #include "battle.h" #include "berry.h" #include "data2.h" #include "event_data.h" -#include "constants/hold_effects.h" #include "item.h" -#include "constants/items.h" #include "pokemon.h" -#include "constants/species.h" -#include "constants/moves.h" -#include "constants/battle_move_effects.h" #include "ewram.h" extern u16 gBattleTypeFlags; @@ -22,8 +22,54 @@ extern struct BattleEnigmaBerry gEnigmaBerries[]; extern u16 gBattleMovePower; extern u16 gTrainerBattleOpponent; -extern const u8 gHoldEffectToType[][2]; -extern const u8 gStatStageRatios[][2]; +// Masks for getting PP Up count, also PP Max values +const u8 gUnknown_08208238[] = {0x03, 0x0c, 0x30, 0xc0}; + +// Masks for setting PP Up count +const u8 gUnknown_0820823C[] = {0xFC, 0xF3, 0xCF, 0x3F}; + +// Values added to PP Up count +const u8 gUnknown_08208240[] = {0x01, 0x04, 0x10, 0x40}; + +const u8 gStatStageRatios[][2] = +{ + {10, 40}, // -6 + {10, 35}, // -5 + {10, 30}, // -4 + {10, 25}, // -3 + {10, 20}, // -2 + {10, 15}, // -1 + {10, 10}, // 0 + {15, 10}, // 1 + {20, 10}, // 2 + {25, 10}, // 3 + {30, 10}, // 4 + {35, 10}, // 5 + {40, 10} // 6 +}; + +const u8 unknownGameFreakAbbrev_820825E[] = _("ゲーフリ"); + +const u8 gHoldEffectToType[][2] = +{ + {HOLD_EFFECT_BUG_POWER, TYPE_BUG}, + {HOLD_EFFECT_STEEL_POWER, TYPE_STEEL}, + {HOLD_EFFECT_GROUND_POWER, TYPE_GROUND}, + {HOLD_EFFECT_ROCK_POWER, TYPE_ROCK}, + {HOLD_EFFECT_GRASS_POWER, TYPE_GRASS}, + {HOLD_EFFECT_DARK_POWER, TYPE_DARK}, + {HOLD_EFFECT_FIGHTING_POWER, TYPE_FIGHTING}, + {HOLD_EFFECT_ELECTRIC_POWER, TYPE_ELECTRIC}, + {HOLD_EFFECT_WATER_POWER, TYPE_WATER}, + {HOLD_EFFECT_FLYING_POWER, TYPE_FLYING}, + {HOLD_EFFECT_POISON_POWER, TYPE_POISON}, + {HOLD_EFFECT_ICE_POWER, TYPE_ICE}, + {HOLD_EFFECT_GHOST_POWER, TYPE_GHOST}, + {HOLD_EFFECT_PSYCHIC_POWER, TYPE_PSYCHIC}, + {HOLD_EFFECT_FIRE_POWER, TYPE_FIRE}, + {HOLD_EFFECT_DRAGON_POWER, TYPE_DRAGON}, + {HOLD_EFFECT_NORMAL_POWER, TYPE_NORMAL} +}; u8 GetBankSide(u8 bank); -- cgit v1.2.3 From c8ac9802a9e59d877a34321793387c188b3c2586 Mon Sep 17 00:00:00 2001 From: "Marco Willems (M17.1)" Date: Sun, 14 Jan 2018 18:19:05 +0100 Subject: truncated some data --- src/battle/battle_anim.c | 576 ----------------------------------------------- 1 file changed, 576 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 5239e239d..4549d1fcb 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -23,1226 +23,650 @@ const struct OamData gOamData_837DF24 = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF2C = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF34 = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF3C = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF44 = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF4C = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF54 = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF5C = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF64 = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF6C = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF74 = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF7C = { - .y = 0, .affineMode = 0, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF84 = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF8C = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF94 = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DF9C = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFA4 = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFAC = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFB4 = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFBC = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFC4 = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFCC = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFD4 = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFDC = { - .y = 0, .affineMode = 1, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFE4 = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFEC = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFF4 = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837DFFC = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837D004 = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837D00C = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E014 = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E01C = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E024 = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E02C = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E034 = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E03C = { - .y = 0, .affineMode = 3, .objMode = 0, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E044 = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E04C = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E054 = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E05C = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E064 = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E06C = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E074 = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E07C = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E084 = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E08C = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E094 = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E09C = { - .y = 0, .affineMode = 0, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0A4 = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0AC = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0B4 = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0BC = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0C4 = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0CC = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0D4 = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0DC = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0E4 = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0EC = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0F4 = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E0FC = { - .y = 0, .affineMode = 1, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E104 = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E10C = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E114 = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E11C = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 0, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E124 = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E12C = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E134 = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E13C = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 1, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E144 = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 0, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E14C = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 1, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E154 = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 2, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct OamData gOamData_837E15C = { - .y = 0, .affineMode = 3, .objMode = 1, - .mosaic = 0, - .bpp = 0, .shape = 2, - .x = 0, - .matrixNum = 0, .size = 3, - .tileNum = 0, .priority = 2, - .paletteNum = 0, - .affineParam = 0, }; const struct CompressedSpriteSheet gBattleAnimPicTable[] = -- cgit v1.2.3 From d7d947c6913d1a2a7a6401b8aac2041d536ad978 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Sun, 14 Jan 2018 13:59:12 -0500 Subject: formatting and clean up --- src/battle/battle_ai.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 977e91f5c..80848d2fd 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -355,7 +355,7 @@ u8 BattleAI_GetAIActionToUse(void) { if (AI_THINKING_STRUCT->aiFlags & 1) { - AI_THINKING_STRUCT->aiState = AIState_SettingUp; + AI_THINKING_STRUCT->aiState = BATTLEAI_SETTING_UP; BattleAI_DoAIProcessing(); } AI_THINKING_STRUCT->aiFlags >>= 1; @@ -393,13 +393,13 @@ u8 BattleAI_GetAIActionToUse(void) void BattleAI_DoAIProcessing(void) { - while (AI_THINKING_STRUCT->aiState != AIState_FinishedProcessing) + while (AI_THINKING_STRUCT->aiState != BATTLEAI_FINISHED) { switch (AI_THINKING_STRUCT->aiState) { - case AIState_DoNotProcess: //Needed to match. + case BATTLEAI_DO_NOT_PROCESS: //Needed to match. break; - case AIState_SettingUp: + case BATTLEAI_SETTING_UP: gAIScriptPtr = BattleAIs[AI_THINKING_STRUCT->aiLogicId]; // set the AI ptr. if (gBattleMons[gBankAttacker].pp[AI_THINKING_STRUCT->movesetIndex] == 0) { @@ -411,7 +411,7 @@ void BattleAI_DoAIProcessing(void) } AI_THINKING_STRUCT->aiState++; break; - case AIState_Processing: + case BATTLEAI_PROCESSING: if (AI_THINKING_STRUCT->moveConsidered != MOVE_NONE) sBattleAICmdTable[*gAIScriptPtr](); // run AI command. else @@ -423,7 +423,7 @@ void BattleAI_DoAIProcessing(void) { AI_THINKING_STRUCT->movesetIndex++; if (AI_THINKING_STRUCT->movesetIndex < MAX_MON_MOVES && (AI_THINKING_STRUCT->aiAction & AI_ACTION_DO_NOT_ATTACK) == 0) - AI_THINKING_STRUCT->aiState = AIState_SettingUp; // as long as their are more moves to process, keep setting this to setup state. + AI_THINKING_STRUCT->aiState = BATTLEAI_SETTING_UP; // as long as their are more moves to process, keep setting this to setup state. else AI_THINKING_STRUCT->aiState++; // done processing. AI_THINKING_STRUCT->aiAction &= (AI_ACTION_FLEE | AI_ACTION_WATCH | AI_ACTION_DO_NOT_ATTACK | -- cgit v1.2.3 From e79b3ce9ff39fa48928e8adf84dab542e78c5d64 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Sun, 14 Jan 2018 17:24:28 -0500 Subject: Fix file modes --- src/battle/anim/alert.c | 0 src/battle/anim/angel.c | 0 src/battle/anim/angel_kiss.c | 0 src/battle/anim/anger.c | 0 src/battle/anim/blow_kiss.c | 0 src/battle/anim/bottle.c | 0 src/battle/anim/brace.c | 0 src/battle/anim/breath.c | 0 src/battle/anim/bullet.c | 0 src/battle/anim/copy_orb.c | 0 src/battle/anim/cube.c | 0 src/battle/anim/curtain.c | 0 src/battle/anim/cutter.c | 0 src/battle/anim/cyclone.c | 0 src/battle/anim/dark.c | 0 src/battle/anim/dragon.c | 0 src/battle/anim/draw.c | 0 src/battle/anim/drum.c | 0 src/battle/anim/egg.c | 0 src/battle/anim/espeed.c | 0 src/battle/anim/evasion.c | 0 src/battle/anim/fang.c | 0 src/battle/anim/flash.c | 0 src/battle/anim/flying_hearts.c | 0 src/battle/anim/flying_path.c | 0 src/battle/anim/flying_petals.c | 0 src/battle/anim/glitter.c | 0 src/battle/anim/glow.c | 0 src/battle/anim/grip.c | 0 src/battle/anim/grow.c | 0 src/battle/anim/guillotine.c | 0 src/battle/anim/heal.c | 0 src/battle/anim/heart_1.c | 0 src/battle/anim/homing.c | 0 src/battle/anim/hop.c | 0 src/battle/anim/hop_2.c | 0 src/battle/anim/kiss_fountain.c | 0 src/battle/anim/leaf.c | 0 src/battle/anim/love_bg.c | 0 src/battle/anim/lunge_1.c | 0 src/battle/anim/lunge_2.c | 0 src/battle/anim/money.c | 0 src/battle/anim/moon.c | 0 src/battle/anim/note_rain.c | 0 src/battle/anim/note_scatter.c | 0 src/battle/anim/note_scatter_2.c | 0 src/battle/anim/note_wave.c | 0 src/battle/anim/orbit.c | 0 src/battle/anim/orbit_fast.c | 0 src/battle/anim/orbit_scatter.c | 0 src/battle/anim/orbs.c | 0 src/battle/anim/osmose.c | 0 src/battle/anim/perceive.c | 0 src/battle/anim/powder.c | 0 src/battle/anim/ring.c | 0 src/battle/anim/roots.c | 0 src/battle/anim/scan.c | 0 src/battle/anim/scary_face.c | 0 src/battle/anim/seed.c | 0 src/battle/anim/shadow_enlarge.c | 0 src/battle/anim/shadow_minimize.c | 0 src/battle/anim/shield.c | 0 src/battle/anim/shimmer.c | 0 src/battle/anim/silhouette.c | 0 src/battle/anim/slash.c | 0 src/battle/anim/sleep.c | 0 src/battle/anim/slice.c | 0 src/battle/anim/smoke.c | 0 src/battle/anim/sonic.c | 0 src/battle/anim/sonic_task.c | 0 src/battle/anim/spin_finger.c | 0 src/battle/anim/spit.c | 0 src/battle/anim/splash.c | 0 src/battle/anim/startle.c | 0 src/battle/anim/strike.c | 0 src/battle/anim/switch.c | 0 src/battle/anim/sword.c | 0 src/battle/anim/taunt_finger.c | 0 src/battle/anim/tendrils.c | 0 src/battle/anim/thought.c | 0 src/battle/anim/thrashing.c | 0 src/battle/anim/tile_in.c | 0 src/battle/anim/tile_out.c | 0 src/battle/anim/twinkle.c | 0 src/battle/anim/unused_1.c | 0 src/battle/anim/unused_2.c | 0 src/battle/anim/unused_3.c | 0 src/battle/anim/unused_4.c | 0 src/battle/anim/unused_5.c | 0 src/battle/anim/unused_6.c | 0 src/battle/anim/unused_7.c | 0 src/battle/anim/unused_8.c | 0 src/battle/anim/unused_9.c | 0 src/battle/anim/wave_finger.c | 0 src/battle/anim/whip.c | 0 src/battle/anim/withdraw.c | 0 96 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 src/battle/anim/alert.c mode change 100755 => 100644 src/battle/anim/angel.c mode change 100755 => 100644 src/battle/anim/angel_kiss.c mode change 100755 => 100644 src/battle/anim/anger.c mode change 100755 => 100644 src/battle/anim/blow_kiss.c mode change 100755 => 100644 src/battle/anim/bottle.c mode change 100755 => 100644 src/battle/anim/brace.c mode change 100755 => 100644 src/battle/anim/breath.c mode change 100755 => 100644 src/battle/anim/bullet.c mode change 100755 => 100644 src/battle/anim/copy_orb.c mode change 100755 => 100644 src/battle/anim/cube.c mode change 100755 => 100644 src/battle/anim/curtain.c mode change 100755 => 100644 src/battle/anim/cutter.c mode change 100755 => 100644 src/battle/anim/cyclone.c mode change 100755 => 100644 src/battle/anim/dark.c mode change 100755 => 100644 src/battle/anim/dragon.c mode change 100755 => 100644 src/battle/anim/draw.c mode change 100755 => 100644 src/battle/anim/drum.c mode change 100755 => 100644 src/battle/anim/egg.c mode change 100755 => 100644 src/battle/anim/espeed.c mode change 100755 => 100644 src/battle/anim/evasion.c mode change 100755 => 100644 src/battle/anim/fang.c mode change 100755 => 100644 src/battle/anim/flash.c mode change 100755 => 100644 src/battle/anim/flying_hearts.c mode change 100755 => 100644 src/battle/anim/flying_path.c mode change 100755 => 100644 src/battle/anim/flying_petals.c mode change 100755 => 100644 src/battle/anim/glitter.c mode change 100755 => 100644 src/battle/anim/glow.c mode change 100755 => 100644 src/battle/anim/grip.c mode change 100755 => 100644 src/battle/anim/grow.c mode change 100755 => 100644 src/battle/anim/guillotine.c mode change 100755 => 100644 src/battle/anim/heal.c mode change 100755 => 100644 src/battle/anim/heart_1.c mode change 100755 => 100644 src/battle/anim/homing.c mode change 100755 => 100644 src/battle/anim/hop.c mode change 100755 => 100644 src/battle/anim/hop_2.c mode change 100755 => 100644 src/battle/anim/kiss_fountain.c mode change 100755 => 100644 src/battle/anim/leaf.c mode change 100755 => 100644 src/battle/anim/love_bg.c mode change 100755 => 100644 src/battle/anim/lunge_1.c mode change 100755 => 100644 src/battle/anim/lunge_2.c mode change 100755 => 100644 src/battle/anim/money.c mode change 100755 => 100644 src/battle/anim/moon.c mode change 100755 => 100644 src/battle/anim/note_rain.c mode change 100755 => 100644 src/battle/anim/note_scatter.c mode change 100755 => 100644 src/battle/anim/note_scatter_2.c mode change 100755 => 100644 src/battle/anim/note_wave.c mode change 100755 => 100644 src/battle/anim/orbit.c mode change 100755 => 100644 src/battle/anim/orbit_fast.c mode change 100755 => 100644 src/battle/anim/orbit_scatter.c mode change 100755 => 100644 src/battle/anim/orbs.c mode change 100755 => 100644 src/battle/anim/osmose.c mode change 100755 => 100644 src/battle/anim/perceive.c mode change 100755 => 100644 src/battle/anim/powder.c mode change 100755 => 100644 src/battle/anim/ring.c mode change 100755 => 100644 src/battle/anim/roots.c mode change 100755 => 100644 src/battle/anim/scan.c mode change 100755 => 100644 src/battle/anim/scary_face.c mode change 100755 => 100644 src/battle/anim/seed.c mode change 100755 => 100644 src/battle/anim/shadow_enlarge.c mode change 100755 => 100644 src/battle/anim/shadow_minimize.c mode change 100755 => 100644 src/battle/anim/shield.c mode change 100755 => 100644 src/battle/anim/shimmer.c mode change 100755 => 100644 src/battle/anim/silhouette.c mode change 100755 => 100644 src/battle/anim/slash.c mode change 100755 => 100644 src/battle/anim/sleep.c mode change 100755 => 100644 src/battle/anim/slice.c mode change 100755 => 100644 src/battle/anim/smoke.c mode change 100755 => 100644 src/battle/anim/sonic.c mode change 100755 => 100644 src/battle/anim/sonic_task.c mode change 100755 => 100644 src/battle/anim/spin_finger.c mode change 100755 => 100644 src/battle/anim/spit.c mode change 100755 => 100644 src/battle/anim/splash.c mode change 100755 => 100644 src/battle/anim/startle.c mode change 100755 => 100644 src/battle/anim/strike.c mode change 100755 => 100644 src/battle/anim/switch.c mode change 100755 => 100644 src/battle/anim/sword.c mode change 100755 => 100644 src/battle/anim/taunt_finger.c mode change 100755 => 100644 src/battle/anim/tendrils.c mode change 100755 => 100644 src/battle/anim/thought.c mode change 100755 => 100644 src/battle/anim/thrashing.c mode change 100755 => 100644 src/battle/anim/tile_in.c mode change 100755 => 100644 src/battle/anim/tile_out.c mode change 100755 => 100644 src/battle/anim/twinkle.c mode change 100755 => 100644 src/battle/anim/unused_1.c mode change 100755 => 100644 src/battle/anim/unused_2.c mode change 100755 => 100644 src/battle/anim/unused_3.c mode change 100755 => 100644 src/battle/anim/unused_4.c mode change 100755 => 100644 src/battle/anim/unused_5.c mode change 100755 => 100644 src/battle/anim/unused_6.c mode change 100755 => 100644 src/battle/anim/unused_7.c mode change 100755 => 100644 src/battle/anim/unused_8.c mode change 100755 => 100644 src/battle/anim/unused_9.c mode change 100755 => 100644 src/battle/anim/wave_finger.c mode change 100755 => 100644 src/battle/anim/whip.c mode change 100755 => 100644 src/battle/anim/withdraw.c (limited to 'src/battle') diff --git a/src/battle/anim/alert.c b/src/battle/anim/alert.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/angel.c b/src/battle/anim/angel.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/angel_kiss.c b/src/battle/anim/angel_kiss.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/anger.c b/src/battle/anim/anger.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/blow_kiss.c b/src/battle/anim/blow_kiss.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/bottle.c b/src/battle/anim/bottle.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/brace.c b/src/battle/anim/brace.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/breath.c b/src/battle/anim/breath.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/bullet.c b/src/battle/anim/bullet.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/copy_orb.c b/src/battle/anim/copy_orb.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/cube.c b/src/battle/anim/cube.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/curtain.c b/src/battle/anim/curtain.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/cutter.c b/src/battle/anim/cutter.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/cyclone.c b/src/battle/anim/cyclone.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/dragon.c b/src/battle/anim/dragon.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/draw.c b/src/battle/anim/draw.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/drum.c b/src/battle/anim/drum.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/egg.c b/src/battle/anim/egg.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/espeed.c b/src/battle/anim/espeed.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/evasion.c b/src/battle/anim/evasion.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/fang.c b/src/battle/anim/fang.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/flash.c b/src/battle/anim/flash.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/flying_hearts.c b/src/battle/anim/flying_hearts.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/flying_path.c b/src/battle/anim/flying_path.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/flying_petals.c b/src/battle/anim/flying_petals.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/glitter.c b/src/battle/anim/glitter.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/glow.c b/src/battle/anim/glow.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/grip.c b/src/battle/anim/grip.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/grow.c b/src/battle/anim/grow.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/guillotine.c b/src/battle/anim/guillotine.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/heal.c b/src/battle/anim/heal.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/heart_1.c b/src/battle/anim/heart_1.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/homing.c b/src/battle/anim/homing.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/hop.c b/src/battle/anim/hop.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/hop_2.c b/src/battle/anim/hop_2.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/kiss_fountain.c b/src/battle/anim/kiss_fountain.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/leaf.c b/src/battle/anim/leaf.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/love_bg.c b/src/battle/anim/love_bg.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/lunge_1.c b/src/battle/anim/lunge_1.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/lunge_2.c b/src/battle/anim/lunge_2.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/money.c b/src/battle/anim/money.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/moon.c b/src/battle/anim/moon.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/note_rain.c b/src/battle/anim/note_rain.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/note_scatter.c b/src/battle/anim/note_scatter.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/note_scatter_2.c b/src/battle/anim/note_scatter_2.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/note_wave.c b/src/battle/anim/note_wave.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/orbit.c b/src/battle/anim/orbit.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/orbit_fast.c b/src/battle/anim/orbit_fast.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/orbit_scatter.c b/src/battle/anim/orbit_scatter.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/orbs.c b/src/battle/anim/orbs.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/osmose.c b/src/battle/anim/osmose.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/perceive.c b/src/battle/anim/perceive.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/powder.c b/src/battle/anim/powder.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/ring.c b/src/battle/anim/ring.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/roots.c b/src/battle/anim/roots.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/scan.c b/src/battle/anim/scan.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/scary_face.c b/src/battle/anim/scary_face.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/seed.c b/src/battle/anim/seed.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/shadow_enlarge.c b/src/battle/anim/shadow_enlarge.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/shadow_minimize.c b/src/battle/anim/shadow_minimize.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/shield.c b/src/battle/anim/shield.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/shimmer.c b/src/battle/anim/shimmer.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/silhouette.c b/src/battle/anim/silhouette.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/slash.c b/src/battle/anim/slash.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/sleep.c b/src/battle/anim/sleep.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/slice.c b/src/battle/anim/slice.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/smoke.c b/src/battle/anim/smoke.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/sonic.c b/src/battle/anim/sonic.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/sonic_task.c b/src/battle/anim/sonic_task.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/spin_finger.c b/src/battle/anim/spin_finger.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/spit.c b/src/battle/anim/spit.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/splash.c b/src/battle/anim/splash.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/startle.c b/src/battle/anim/startle.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/strike.c b/src/battle/anim/strike.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/switch.c b/src/battle/anim/switch.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/sword.c b/src/battle/anim/sword.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/taunt_finger.c b/src/battle/anim/taunt_finger.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/tendrils.c b/src/battle/anim/tendrils.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/thought.c b/src/battle/anim/thought.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/thrashing.c b/src/battle/anim/thrashing.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/tile_in.c b/src/battle/anim/tile_in.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/tile_out.c b/src/battle/anim/tile_out.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/twinkle.c b/src/battle/anim/twinkle.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/unused_1.c b/src/battle/anim/unused_1.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/unused_2.c b/src/battle/anim/unused_2.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/unused_3.c b/src/battle/anim/unused_3.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/unused_4.c b/src/battle/anim/unused_4.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/unused_5.c b/src/battle/anim/unused_5.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/unused_6.c b/src/battle/anim/unused_6.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/unused_7.c b/src/battle/anim/unused_7.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/unused_8.c b/src/battle/anim/unused_8.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/unused_9.c b/src/battle/anim/unused_9.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/wave_finger.c b/src/battle/anim/wave_finger.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/whip.c b/src/battle/anim/whip.c old mode 100755 new mode 100644 diff --git a/src/battle/anim/withdraw.c b/src/battle/anim/withdraw.c old mode 100755 new mode 100644 -- cgit v1.2.3 From 3295ffbd5bcd75d586e3f6dde7469cad1fce2c85 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 15 Jan 2018 17:36:16 -0600 Subject: clean up pokemon_item_effect.c --- src/battle/battle_4.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index ae8f94130..6b048f0ab 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -147,7 +147,7 @@ void ReshowBattleScreenAfterMenu(void); void BattleMainCB2(void); void AddMoney(u32* moneySaveblock, u32 to_give); u8 CountAliveMons(u8 caseID); -void sub_803E1B0(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); +void PokemonUseItemEffects(struct Pokemon*, u16 item, u8 partyID, u8 r3, u8 sp); u8 CanRunFromBattle(void); u8 GetMoveTarget(u16 move, u8 targetbyte); //get target of move u8 CastformDataTypeChange(u8 bank); @@ -11996,7 +11996,7 @@ static void atk74_hpthresholds2(void) static void atk75_useitemonopponent(void) { gBankInMenu = gBankAttacker; - sub_803E1B0(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1); + PokemonUseItemEffects(&gEnemyParty[gBattlePartyID[gBankAttacker]], gLastUsedItem, gBattlePartyID[gBankAttacker], 0, 1); gBattlescriptCurrInstr += 1; } -- cgit v1.2.3 From 5d923c4d5f3d0786715663b3ad83bc9f3e778164 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 15 Jan 2018 20:41:55 -0600 Subject: import some battle_4.c code from emerald and get atk23_getexp matching --- src/battle/battle_2.c | 44 +- src/battle/battle_4.c | 2383 ++++++++-------------------- src/battle/battle_7.c | 8 +- src/battle/battle_ai.c | 18 +- src/battle/battle_controller_linkpartner.c | 10 +- src/battle/battle_controller_player.c | 16 +- src/battle/battle_controller_wally.c | 6 +- src/battle/battle_message.c | 40 +- src/battle/battle_util.c | 362 ++--- 9 files changed, 920 insertions(+), 1967 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 990535b4e..2368f58df 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -87,8 +87,8 @@ extern u8 gMultiHitCounter; extern u8 gActionForBanks[]; extern u16 gUnknown_02024C2C[]; extern u16 gLastUsedMove[]; -extern u16 gMoveHitWith[]; -extern u16 gUnknown_02024C44[]; +extern u16 gLastLandedMoves[]; +extern u16 gLastHitByType[]; extern u16 gUnknown_02024C4C[]; extern u16 gLockedMoves[]; extern u8 gUnknown_02024C5C[]; @@ -301,8 +301,8 @@ void sub_800E9EC(void) if (species != SPECIES_EGG && hp == 0) r6 |= 3 << i * 2; } - BATTLE_STRUCT->unk2 = r6; - BATTLE_STRUCT->unk3 = r6 >> 8; + gBattleStruct->unk2 = r6; + gBattleStruct->unk3 = r6 >> 8; } void sub_800EAAC(void) @@ -398,11 +398,11 @@ void sub_800EC9C(void) { if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) { - BATTLE_STRUCT->unk0 = 1; - BATTLE_STRUCT->unk1 = 1; + gBattleStruct->unk0 = 1; + gBattleStruct->unk1 = 1; sub_800E9EC(); sub_800EAAC(); - SendBlock(bitmask_all_link_players_but_self(), BATTLE_STRUCT, 32); + SendBlock(bitmask_all_link_players_but_self(), gBattleStruct, 32); gBattleCommunication[0] = 1; } } @@ -458,7 +458,7 @@ void sub_800EC9C(void) gTasks[taskId].data[1] = 0x10E; gTasks[taskId].data[2] = 0x5A; gTasks[taskId].data[5] = 0; - gTasks[taskId].data[3] = BATTLE_STRUCT->unk2 | (BATTLE_STRUCT->unk3 << 8); + gTasks[taskId].data[3] = gBattleStruct->unk2 | (gBattleStruct->unk3 << 8); gTasks[taskId].data[4] = gBlockRecvBuffer[enemyId][1]; gBattleCommunication[0]++; } @@ -641,8 +641,8 @@ void sub_800F298(void) case 0: if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) { - BATTLE_STRUCT->unk0 = 1; - BATTLE_STRUCT->unk1 = 1; + gBattleStruct->unk0 = 1; + gBattleStruct->unk1 = 1; sub_800E9EC(); sub_800EAAC(); SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20); @@ -1579,8 +1579,8 @@ void sub_8010874(void) gDisableStructs[i].isFirstTurn= 2; gUnknown_02024C70[i] = 0; gLastUsedMove[i] = 0; - gMoveHitWith[i] = 0; - gUnknown_02024C44[i] = 0; + gLastLandedMoves[i] = 0; + gLastHitByType[i] = 0; gUnknown_02024C4C[i] = 0; gUnknown_02024C5C[i] = 0xFF; gLockedMoves[i] = 0; @@ -1732,8 +1732,8 @@ void SwitchInClearStructs(void) gDisableStructs[gActiveBank].isFirstTurn= 2; gLastUsedMove[gActiveBank] = 0; - gMoveHitWith[gActiveBank] = 0; - gUnknown_02024C44[gActiveBank] = 0; + gLastLandedMoves[gActiveBank] = 0; + gLastHitByType[gActiveBank] = 0; gUnknown_02024C4C[gActiveBank] = 0; gUnknown_02024C2C[gActiveBank] = 0; gUnknown_02024C5C[gActiveBank] = 0xFF; @@ -1796,8 +1796,8 @@ void UndoEffectsAfterFainting(void) gDisableStructs[gActiveBank].isFirstTurn= 2; gLastUsedMove[gActiveBank] = 0; - gMoveHitWith[gActiveBank] = 0; - gUnknown_02024C44[gActiveBank] = 0; + gLastLandedMoves[gActiveBank] = 0; + gLastHitByType[gActiveBank] = 0; gUnknown_02024C4C[gActiveBank] = 0; gUnknown_02024C2C[gActiveBank] = 0; gUnknown_02024C5C[gActiveBank] = 0xFF; @@ -4222,7 +4222,7 @@ void CheckFocusPunch_ClearVarsBeforeTurnStarts(void) } gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; + gBattleStruct->dynamicMoveType = 0; gBattleMainFunc = RunTurnActionsFunctions; gBattleCommunication[3] = 0; gBattleCommunication[4] = 0; @@ -4235,7 +4235,7 @@ static void RunTurnActionsFunctions(void) if (gBattleOutcome != 0) gCurrentActionFuncId = 12; - BATTLE_STRUCT->unk16057 = gCurrentTurnActionNumber; + gBattleStruct->unk16057 = gCurrentTurnActionNumber; gUnknown_081FA640[gCurrentActionFuncId](); if (gCurrentTurnActionNumber >= gNoOfAllBanks) // everyone did their actions, turn finished @@ -4245,7 +4245,7 @@ static void RunTurnActionsFunctions(void) } else { - if (BATTLE_STRUCT->unk16057 != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank + if (gBattleStruct->unk16057 != gCurrentTurnActionNumber) // action turn has been done, clear hitmarker bits for another bank { gHitMarker &= ~(HITMARKER_NO_ATTACKSTRING); gHitMarker &= ~(HITMARKER_UNABLE_TO_USE_MOVE); @@ -4270,7 +4270,7 @@ void HandleEndTurn_BattleWon(void) } else if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && !(gBattleTypeFlags & BATTLE_TYPE_LINK)) { - BattleMusicStop(); + BattleStopLowHpSound(); gBattlescriptCurrInstr = BattleScript_LocalTrainerBattleWon; switch (gTrainers[gTrainerBattleOpponent].trainerClass) @@ -5378,8 +5378,8 @@ void HandleAction_ActionFinished(void) gBattleMoveDamage = 0; ewram16002 = 0; ewram160A1 = 0; - gMoveHitWith[gBankAttacker] = 0; - gUnknown_02024C44[gBankAttacker] = 0; + gLastLandedMoves[gBankAttacker] = 0; + gLastHitByType[gBankAttacker] = 0; eDynamicMoveType = 0; gDynamicBasePower = 0; ewram1600C = 0; diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 6b048f0ab..0c5f5927e 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -1,5 +1,7 @@ #include "global.h" #include "battle.h" +#include "battle_message.h" +#include "battle_string_ids.h" #include "battle_util.h" #include "constants/battle_move_effects.h" #include "constants/moves.h" @@ -22,22 +24,89 @@ #include "pokemon_summary_screen.h" #include "naming_screen.h" #include "ewram.h" +#include "util.h" + +// TODO: put this into battle_controllers.h + +#define RET_VALUE_LEVELLED_UP 11 + +enum +{ + CONTROLLER_GETMONDATA, + CONTROLLER_GETRAWMONDATA, + CONTROLLER_SETMONDATA, + CONTROLLER_SETRAWMONDATA, + CONTROLLER_LOADMONSPRITE, + CONTROLLER_SWITCHINANIM, + CONTROLLER_RETURNMONTOBALL, + CONTROLLER_DRAWTRAINERPIC, + CONTROLLER_TRAINERSLIDE, + CONTROLLER_TRAINERSLIDEBACK, + CONTROLLER_FAINTANIMATION, + CONTROLLER_PALETTEFADE, + CONTROLLER_SUCCESSBALLTHROWANIM, + CONTROLLER_BALLTHROWANIM, + CONTROLLER_PAUSE, + CONTROLLER_MOVEANIMATION, + CONTROLLER_PRINTSTRING, + CONTROLLER_PRINTSTRINGPLAYERONLY, + CONTROLLER_CHOOSEACTION, + CONTROLLER_UNKNOWNYESNOBOX, + CONTROLLER_CHOOSEMOVE, + CONTROLLER_OPENBAG, + CONTROLLER_CHOOSEPOKEMON, + CONTROLLER_23, + CONTROLLER_HEALTHBARUPDATE, + CONTROLLER_EXPUPDATE, + CONTROLLER_STATUSICONUPDATE, + CONTROLLER_STATUSANIMATION, + CONTROLLER_STATUSXOR, + CONTROLLER_DATATRANSFER, + CONTROLLER_DMA3TRANSFER, + CONTROLLER_31, + CONTROLLER_32, + CONTROLLER_TWORETURNVALUES, + CONTROLLER_CHOSENMONRETURNVALUE, + CONTROLLER_ONERETURNVALUE, + CONTROLLER_ONERETURNVALUE_DUPLICATE, + CONTROLLER_37, + CONTROLLER_38, + CONTROLLER_39, + CONTROLLER_40, + CONTROLLER_HITANIMATION, + CONTROLLER_42, + CONTROLLER_EFFECTIVENESSSOUND, + CONTROLLER_PLAYFANFAREORBGM, + CONTROLLER_FAINTINGCRY, + CONTROLLER_INTROSLIDE, + CONTROLLER_INTROTRAINERBALLTHROW, + CONTROLLER_DRAWPARTYSTATUSSUMMARY, + CONTROLLER_49, + CONTROLLER_50, + CONTROLLER_SPRITEINVISIBILITY, + CONTROLLER_BATTLEANIMATION, + CONTROLLER_LINKSTANDBYMSG, + CONTROLLER_RESETACTIONMOVESELECTION, + CONTROLLER_55, + /*new controllers should go here*/ + CONTROLLER_TERMINATOR_NOP, + CONTROLLER_CMDS_COUNT +}; //extern needed variables extern u8 gCritMultiplier; extern s32 gBattleMoveDamage; -extern u32 gStatuses3[4]; +extern u32 gStatuses3[BATTLE_BANKS_COUNT]; extern u16 gBattleTypeFlags; -extern const u32 gBitTable[]; extern const struct BaseStats gBaseStats[]; -extern struct BattleEnigmaBerry gEnigmaBerries[4]; -extern struct BattlePokemon gBattleMons[4]; +extern struct BattleEnigmaBerry gEnigmaBerries[BATTLE_BANKS_COUNT]; +extern struct BattlePokemon gBattleMons[BATTLE_BANKS_COUNT]; extern u8 gActiveBank; extern u32 gBattleExecBuffer; extern u8 gNoOfAllBanks; -extern u16 gBattlePartyID[4]; -extern u8 gBanksByTurnOrder[4]; -extern u8 gActionsByTurnOrder[4]; +extern u16 gBattlePartyID[BATTLE_BANKS_COUNT]; +extern u8 gBanksByTurnOrder[BATTLE_BANKS_COUNT]; +extern u8 gActionsByTurnOrder[BATTLE_BANKS_COUNT]; extern u16 gCurrentMove; extern u8 gLastUsedAbility; extern u16 gBattleWeather; @@ -57,23 +126,23 @@ extern u8 gBattleTerrain; extern u16 gTrainerBattleOpponent; extern u8 gBankAttacker; extern u8 gBankTarget; -extern u8* gBattlescriptCurrInstr; +extern const u8* gBattlescriptCurrInstr; extern u8 gCurrMovePos; extern u8 gCurrentActionFuncId; extern u32 gHitMarker; extern u8 gBattleMoveFlags; extern u8 gBattleCommunication[]; -extern u16 gMoveHitWith[4]; -extern u16 gUnknown_02024C44[4]; +extern u16 gLastLandedMoves[4]; +extern u16 gLastHitByType[4]; extern u8 gStringBank; extern u16 gDynamicBasePower; extern const u8 gTypeEffectiveness[]; extern u16 gLastUsedItem; extern u16 gBattleMovePower; -extern s32 gHP_dealt; -extern s32 gTakenDmg[4]; -extern u8 gTakenDmgBanks[4]; -extern const u16 gMissStrings[]; +extern s32 gHpDealt; +extern s32 gTakenDmg[BATTLE_BANKS_COUNT]; +extern u8 gTakenDmgBanks[BATTLE_BANKS_COUNT]; +extern const u16 gMissStringIds[]; extern u8 gSentPokesToOpponent[2]; extern u8 gBank1; extern u16 gExpShareExp; @@ -98,28 +167,40 @@ extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one extern u8 gCurrentTurnActionNumber; extern u16 gTrappingMoves[]; +extern u8 BattleScript_MoveEffectSleep[]; +extern u8 BattleScript_MoveEffectPoison[]; +extern u8 BattleScript_MoveEffectBurn[]; +extern u8 BattleScript_MoveEffectFreeze[]; +extern u8 BattleScript_MoveEffectParalysis[]; +extern u8 BattleScript_MoveEffectToxic[]; +extern u8 BattleScript_MoveEffectConfusion[]; +extern u8 BattleScript_MoveEffectUproar[]; +extern u8 BattleScript_MoveEffectWrap[]; +extern u8 BattleScript_MoveEffectPayDay[]; +extern u8 BattleScript_MoveEffectRecoil33[]; + //extern functions u8 AtkCanceller_UnableToUseMove(void); void PressurePPLose(u8 bank_atk, u8 bank_def, u16 move); void CancelMultiTurnMoves(u8 bank); -void BattleScriptPush(u8* BS_ptr); +void BattleScriptPush(const u8* BS_ptr); void BattleScriptPushCursor(void); void RecordAbilityBattle(u8 bank, u8 ability); void RecordItemBattle(u8 bank, u8 holdEffect); static bool8 IsTwoTurnsMove(u16 move); -static void DestinyBondFlagUpdate(void); -static void b_wonderguard_and_levitate(void); +static void TrySetDestinyBondToHappen(void); +static void CheckWonderGuardAndLevitate(void); u8 GetBankIdentity(u8 bank); u8 GetBankSide(u8 bank); u8 GetBattleBank(u8 bankValue); s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 bank_atk, u8 bank_def); static u8 AttacksThisTurn(u8 bank, u16 move); //Note: returns 1 if it's a charging turn, otherwise 2 void UndoEffectsAfterFainting(void); -void BattleMusicStop(void); +void BattleStopLowHpSound(void); void PlayBGM(u16 songID); void MonGainEVs(struct Pokemon*, u16 defeatedSpecies); extern u8 gBattleBufferB[4][0x200]; -void sub_80324F8(struct Pokemon*, u8 bank); +void HandleLowHpMusicChange(struct Pokemon*, u8 bank); void AdjustFriendship(struct Pokemon*, u8 value); bool8 IsTradedMon(struct Pokemon*); void BattleScriptPop(void); @@ -225,7 +306,7 @@ extern u8 BattleScript_SelectingImprisionedMoveInPalace[]; #define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8)) #define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr)) -#define TargetProtectAffected ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) +#define TARGET_PROTECT_AFFECTED ((gProtectStructs[gBankTarget].protected && gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED)) //array entries for battle communication #define MOVE_EFFECT_BYTE 0x3 @@ -306,7 +387,7 @@ static void atk1F_jumpifsideaffecting(void); static void atk20_jumpifstat(void); static void atk21_jumpifstatus3condition(void); static void atk22_jumpiftype(void); -static void atk23_getexp(void); +void atk23_getexp(void); static void atk24(void); static void atk25_movevaluescleanup(void); static void atk26_setmultihit(void); @@ -521,7 +602,7 @@ static void atkF5_removeattackerstatus1(void); static void atkF6_finishaction(void); static void atkF7_finishturn(void); -const BattleCmdFunc gBattleScriptingCommandsTable[] = +void (* const gBattleScriptingCommandsTable[])(void) = { atk00_attackcanceler, atk01_accuracycheck, @@ -773,13 +854,13 @@ const BattleCmdFunc gBattleScriptingCommandsTable[] = atkF7_finishturn, }; -struct statFractions +struct StatFractions { u8 dividend; u8 divisor; }; -static const struct statFractions gAccuracyStageRatios[] = +static const struct StatFractions gAccuracyStageRatios[] = { { 33, 100}, // -6 { 36, 100}, // -5 @@ -796,25 +877,25 @@ static const struct statFractions gAccuracyStageRatios[] = { 3, 1}, // +6 }; -//The chance is 1/N for each stage. -static const u16 gCriticalHitChance[] = {16, 8, 4, 3, 2}; +// The chance is 1/N for each stage. +static const u16 sCriticalHitChance[] = {16, 8, 4, 3, 2}; -static const u32 gStatusFlagsForMoveEffects[] = +static const u32 sStatusFlagsForMoveEffects[] = { 0x00000000, - 0x00000007, - 0x00000008, - 0x00000010, - 0x00000020, - 0x00000040, - 0x00000080, - 0x00000007, - 0x00000008, + STATUS_SLEEP, + STATUS_POISON, + STATUS_BURN, + STATUS_FREEZE, + STATUS_PARALYSIS, + STATUS_TOXIC_POISON, + STATUS2_CONFUSION, + STATUS2_FLINCHED, 0x00000000, - 0x00000070, + STATUS2_UPROAR, 0x00000000, - 0x00001000, - 0x0000E000, + STATUS2_MULTIPLETURNS, + STATUS2_WRAPPED, 0x00000000, 0x00000000, 0x00000000, @@ -830,11 +911,11 @@ static const u32 gStatusFlagsForMoveEffects[] = 0x00000000, 0x00000000, 0x00000000, - 0x00400000, + STATUS2_RECHARGE, 0x00000000, 0x00000000, - 0x04000000, - 0x08000000, + STATUS2_ESCAPE_PREVENTION, + STATUS2_NIGHTMARE, 0x00000000, 0x00000000, 0x00000000, @@ -854,7 +935,7 @@ static const u32 gStatusFlagsForMoveEffects[] = 0x00000000, 0x00000000, 0x00000000, - 0x00000C00, + STATUS2_LOCK_CONFUSE, 0x00000000, 0x00000000, 0x00000000, @@ -863,18 +944,6 @@ static const u32 gStatusFlagsForMoveEffects[] = 0x00000000 }; -extern u8 BattleScript_MoveEffectSleep[]; -extern u8 BattleScript_MoveEffectPoison[]; -extern u8 BattleScript_MoveEffectBurn[]; -extern u8 BattleScript_MoveEffectFreeze[]; -extern u8 BattleScript_MoveEffectParalysis[]; -extern u8 BattleScript_MoveEffectToxic[]; -extern u8 BattleScript_MoveEffectConfusion[]; -extern u8 BattleScript_MoveEffectUproar[]; -extern u8 BattleScript_MoveEffectWrap[]; -extern u8 BattleScript_MoveEffectPayDay[]; -extern u8 BattleScript_MoveEffectRecoil33[]; - u8* const gMoveEffectBS_Ptrs[] = { BattleScript_MoveEffectSleep, @@ -920,17 +989,25 @@ u8* const gMoveEffectBS_Ptrs[] = const u8 sUnreferencedBitMask1[] = {0, 1, 3, 7, 0xF, 0x1F, 0x3F}; -const u8 gLevelUpStatBoxStats[] = {MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED}; +const u8 gLevelUpStatBoxStats[] = +{ + MON_DATA_MAX_HP, MON_DATA_SPATK, MON_DATA_ATK, + MON_DATA_SPDEF, MON_DATA_DEF, MON_DATA_SPEED +}; static const u16 sProtectSuccessRates[] = {0xFFFF, 0x7FFF, 0x3FFF, 0x1FFF}; -static const u16 sUnknown_081FACFE[] = //banned moves to copy +#define MIMIC_FORBIDDEN_END 0xFFFE +#define METRONOME_FORBIDDEN_END 0xFFFF +#define ASSIST_FORBIDDEN_END 0xFFFF + +static const u16 sMovesForbiddenToCopy[] = { MOVE_METRONOME, MOVE_STRUGGLE, MOVE_SKETCH, MOVE_MIMIC, - 0xFFFE, + MIMIC_FORBIDDEN_END, MOVE_COUNTER, MOVE_MIRROR_COAT, MOVE_PROTECT, @@ -945,10 +1022,10 @@ static const u16 sUnknown_081FACFE[] = //banned moves to copy MOVE_COVET, MOVE_TRICK, MOVE_FOCUS_PUNCH, - 0xFFFF + METRONOME_FORBIDDEN_END }; -static const u8 sUnknown_081FAD26[] = //reversal+flail HP thresholds to power +static const u8 sFlailHpScaleToPowerTable[] = //reversal+flail HP thresholds to power { 1, 200, 4, 150, @@ -972,16 +1049,16 @@ static const u16 sNaturePowerMoves[] = MOVE_SWIFT }; -//weight-based damage table for Low Kick -//format: min. weight (hectograms), base power -static const u16 sWeightDamage[] = +// weight-based damage table for Low Kick +// format: min. weight (hectograms), base power +static const u16 sWeightToDamageTable[] = { 100, 20, 250, 40, 500, 60, 1000, 80, 2000, 100, - -1, -1 + 0xFFFF, 0xFFFF }; static const u16 sPickupItems[] = @@ -1006,23 +1083,24 @@ static const u8 sTerrainToType[] = TYPE_WATER, // underwater TYPE_WATER, // water TYPE_WATER, // pond water - TYPE_ROCK , // rock - TYPE_ROCK , // cave + TYPE_ROCK, // rock + TYPE_ROCK, // cave TYPE_NORMAL, // building TYPE_NORMAL, // plain }; static const u8 sBallCatchBonuses[] = { - 20, 15, 10, 15 //Ultra, Great, Poke, Safari + 20, 15, 10, 15 // Ultra, Great, Poke, Safari }; static void atk00_attackcanceler(void) { - int i; - if (gBattleOutcome) + s32 i; + + if (gBattleOutcome != 0) { - gCurrentActionFuncId = 0xC; + gCurrentActionFuncId = ACTION_FINISHED; return; } if (gBattleMons[gBankAttacker].hp == 0 && !(gHitMarker & HITMARKER_NO_ATTACKSTRING)) @@ -1033,7 +1111,7 @@ static void atk00_attackcanceler(void) } if (AtkCanceller_UnableToUseMove()) return; - if (AbilityBattleEffects(2, gBankTarget, 0, 0, 0)) + if (AbilityBattleEffects(ABILITYEFFECT_MOVES_BLOCK, gBankTarget, 0, 0, 0)) return; if (!gBattleMons[gBankAttacker].pp[gCurrMovePos] && gCurrentMove != MOVE_STRUGGLE && !(gHitMarker & 0x800200) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) @@ -1042,22 +1120,27 @@ static void atk00_attackcanceler(void) gBattleMoveFlags |= MOVESTATUS_MISSED; return; } + gHitMarker &= ~(HITMARKER_x800000); + if (!(gHitMarker & HITMARKER_OBEYS) && !(gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)) { - u8 disobedient = IsMonDisobedient(); - asm("":::"r0"); //It's impossible to match - asm("":::"r1"); - if ((disobedient)) + i = IsMonDisobedient(); // why use the 'i' variable...? + switch (i) { - if (disobedient == 2) - gHitMarker |= HITMARKER_OBEYS; - else - gBattleMoveFlags |= MOVESTATUS_MISSED; + case 0: + break; + case 2: + gHitMarker |= HITMARKER_OBEYS; + return; + default: + gBattleMoveFlags |= MOVESTATUS_MISSED; return; } } + gHitMarker |= HITMARKER_OBEYS; + if (gProtectStructs[gBankTarget].bounceMove && gBattleMoves[gCurrentMove].flags & FLAG_MAGICCOAT_AFFECTED) { PressurePPLose(gBankAttacker, gBankTarget, MOVE_MAGIC_COAT); @@ -1066,18 +1149,20 @@ static void atk00_attackcanceler(void) gBattlescriptCurrInstr = BattleScript_MagicCoatBounce; return; } + for (i = 0; i < gNoOfAllBanks; i++) { if ((gProtectStructs[gBanksByTurnOrder[i]].stealMove) && gBattleMoves[gCurrentMove].flags & FLAG_SNATCH_AFFECTED) { PressurePPLose(gBankAttacker, gBanksByTurnOrder[i], MOVE_SNATCH); gProtectStructs[gBanksByTurnOrder[i]].stealMove = 0; - BATTLE_STRUCT->scriptingActive = gBanksByTurnOrder[i]; + gBattleStruct->scriptingActive = gBanksByTurnOrder[i]; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SnatchedMove; return; } } + if (gSpecialStatuses[gBankTarget].lightningRodRedirected) { gSpecialStatuses[gBankTarget].lightningRodRedirected = 0; @@ -1086,14 +1171,14 @@ static void atk00_attackcanceler(void) gBattlescriptCurrInstr = BattleScript_TookAttack; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } - else if (TargetProtectAffected + else if (TARGET_PROTECT_AFFECTED && (gCurrentMove != MOVE_CURSE || (gBattleMons[gBankAttacker].type1 == TYPE_GHOST || gBattleMons[gBankAttacker].type2 == TYPE_GHOST)) && ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBankAttacker].status2 & STATUS2_MULTIPLETURNS)))) { CancelMultiTurnMoves(gBankAttacker); gBattleMoveFlags |= MOVESTATUS_MISSED; - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; + gLastLandedMoves[gBankTarget] = 0; + gLastHitByType[gBankTarget] = 0; gBattleCommunication[6] = 1; gBattlescriptCurrInstr++; } @@ -1105,25 +1190,25 @@ static void atk00_attackcanceler(void) static void JumpIfMoveFailed(u8 adder, u16 move) { - void* to_store = gBattlescriptCurrInstr + adder; + const u8 *BS_ptr = gBattlescriptCurrInstr + adder; if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) { - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; - to_store = T1_READ_PTR(gBattlescriptCurrInstr + 1); + gLastLandedMoves[gBankTarget] = 0; + gLastHitByType[gBankTarget] = 0; + BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } else { - DestinyBondFlagUpdate(); - if (AbilityBattleEffects(3, gBankTarget, 0, 0, move)) + TrySetDestinyBondToHappen(); + if (AbilityBattleEffects(ABILITYEFFECT_ABSORBING, gBankTarget, 0, 0, move)) return; } - gBattlescriptCurrInstr = to_store; + gBattlescriptCurrInstr = BS_ptr; } static void atk40_jumpifaffectedbyprotect(void) { - if (TargetProtectAffected) + if (TARGET_PROTECT_AFFECTED) { gBattleMoveFlags |= MOVESTATUS_MISSED; JumpIfMoveFailed(5, 0); @@ -1137,13 +1222,13 @@ static void atk40_jumpifaffectedbyprotect(void) static bool8 JumpIfMoveAffectedByProtect(u16 move) { - bool8 affected = 0; - if (TargetProtectAffected) + bool8 affected = FALSE; + if (TARGET_PROTECT_AFFECTED) { gBattleMoveFlags |= MOVESTATUS_MISSED; JumpIfMoveFailed(7, move); gBattleCommunication[6] = 1; - affected = 1; + affected = TRUE; } return affected; } @@ -1162,6 +1247,7 @@ static bool8 AccuracyCalcHelper(u16 move) JumpIfMoveFailed(7, move); return TRUE; } + gHitMarker &= ~HITMARKER_IGNORE_ON_AIR; if (!(gHitMarker & HITMARKER_IGNORE_UNDERGROUND) && gStatuses3[gBankTarget] & STATUS3_UNDERGROUND) @@ -1170,6 +1256,7 @@ static bool8 AccuracyCalcHelper(u16 move) JumpIfMoveFailed(7, move); return TRUE; } + gHitMarker &= ~HITMARKER_IGNORE_UNDERGROUND; if (!(gHitMarker & HITMARKER_IGNORE_UNDERWATER) && gStatuses3[gBankTarget] & STATUS3_UNDERWATER) @@ -1178,6 +1265,7 @@ static bool8 AccuracyCalcHelper(u16 move) JumpIfMoveFailed(7, move); return TRUE; } + gHitMarker &= ~HITMARKER_IGNORE_UNDERWATER; if ((WEATHER_HAS_EFFECT && (gBattleWeather & WEATHER_RAIN_ANY) && gBattleMoves[move].effect == EFFECT_THUNDER) @@ -1186,12 +1274,14 @@ static bool8 AccuracyCalcHelper(u16 move) JumpIfMoveFailed(7, move); return TRUE; } + return FALSE; } static void atk01_accuracycheck(void) { u16 move = T2_READ_16(gBattlescriptCurrInstr + 5); + if (move == 0xFFFE || move == 0xFFFF) { if (gStatuses3[gBankTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBankTarget].bankWithSureHit == gBankAttacker) @@ -1203,13 +1293,14 @@ static void atk01_accuracycheck(void) } else { - u8 type; s8 buff; u8 MoveAcc; u16 calc; u8 hold_effect; u8 quality; - if (move == 0) {move = gCurrentMove;} + u8 type, moveAcc, holdEffect, quality; + s8 buff; + u16 calc; - if (BATTLE_STRUCT->dynamicMoveType) - type = BATTLE_STRUCT->dynamicMoveType & 0x3F; - else - type = gBattleMoves[move].type; + if (move == 0) + move = gCurrentMove; + + GET_MOVE_TYPE(move, type); if (JumpIfMoveAffectedByProtect(move)) return; @@ -1227,47 +1318,52 @@ static void atk01_accuracycheck(void) buff = acc + 6 - gBattleMons[gBankTarget].statStages[STAT_STAGE_EVASION]; } - if (buff < 0) {buff = 0;} - if (buff > 0xC) {buff = 0xC;} + if (buff < 0) + buff = 0; + if (buff > 0xC) + buff = 0xC; - MoveAcc = gBattleMoves[move].accuracy; - //check Thunder on sunny weather + moveAcc = gBattleMoves[move].accuracy; + // check Thunder on sunny weather if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY && gBattleMoves[move].effect == EFFECT_THUNDER) - MoveAcc = 50; + moveAcc = 50; - calc = gAccuracyStageRatios[buff].dividend * MoveAcc; + calc = gAccuracyStageRatios[buff].dividend * moveAcc; calc /= gAccuracyStageRatios[buff].divisor; if (gBattleMons[gBankAttacker].ability == ABILITY_COMPOUND_EYES) - calc = (calc * 130) / 100; //1.3 compound eyes boost + calc = (calc * 130) / 100; // 1.3 compound eyes boost if (WEATHER_HAS_EFFECT && gBattleMons[gBankTarget].ability == ABILITY_SAND_VEIL && gBattleWeather & WEATHER_SANDSTORM_ANY) - calc = (calc * 80) / 100; //1.2 sand veil loss; + calc = (calc * 80) / 100; // 1.2 sand veil loss; if (gBattleMons[gBankAttacker].ability == ABILITY_HUSTLE && type < 9) - calc = (calc * 80) / 100; //1.2 hustle loss; + calc = (calc * 80) / 100; // 1.2 hustle loss; if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY) - hold_effect = gEnigmaBerries[gBankTarget].holdEffect, quality = gEnigmaBerries[gBankTarget].holdEffectParam; + { + holdEffect = gEnigmaBerries[gBankTarget].holdEffect; + quality = gEnigmaBerries[gBankTarget].holdEffectParam; + } else { - hold_effect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); + holdEffect = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); quality = ItemId_GetHoldEffectParam(gBattleMons[gBankTarget].item); } gStringBank = gBankTarget; - if (hold_effect == HOLD_EFFECT_EVASION_UP) + if (holdEffect == HOLD_EFFECT_EVASION_UP) calc = (calc * (100 - quality)) / 100; - //final calculation + // final calculation if ((Random() % 100 + 1) > calc) { gBattleMoveFlags |= MOVESTATUS_MISSED; - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20)) + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && + (gBattleMoves[move].target == 0x8 || gBattleMoves[move].target == 0x20)) gBattleCommunication[6] = 2; else gBattleCommunication[6] = 0; - b_wonderguard_and_levitate(); - + CheckWonderGuardAndLevitate(); } JumpIfMoveFailed(7, move); } @@ -1288,31 +1384,35 @@ static void atk02_attackstring(void) static void atk03_ppreduce(void) { - int to_deduct = 1; + s32 ppToDeduct = 1; + if (gBattleExecBuffer) return; + if (!gSpecialStatuses[gBankAttacker].flag20) { switch (gBattleMoves[gCurrentMove].target) { case TARGET_FOES_AND_ALLY: - to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0); + ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_ON_FIELD, gBankAttacker, ABILITY_PRESSURE, 0, 0); break; case TARGET_BOTH: case TARGET_OPPONENTS_FIELD: - to_deduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_PRESSURE, 0, 0); + ppToDeduct += AbilityBattleEffects(ABILITYEFFECT_COUNT_OTHER_SIZE, gBankAttacker, ABILITY_PRESSURE, 0, 0); break; default: if (gBankAttacker != gBankTarget && gBattleMons[gBankTarget].ability == ABILITY_PRESSURE) - to_deduct++; + ppToDeduct++; break; } } + if (!(gHitMarker & (HITMARKER_NO_PPDEDUCT | HITMARKER_NO_ATTACKSTRING)) && gBattleMons[gBankAttacker].pp[gCurrMovePos]) { gProtectStructs[gBankAttacker].notFirstStrike = 1; - if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > to_deduct) - gBattleMons[gBankAttacker].pp[gCurrMovePos] -= to_deduct; + + if (gBattleMons[gBankAttacker].pp[gCurrMovePos] > ppToDeduct) + gBattleMons[gBankAttacker].pp[gCurrMovePos] -= ppToDeduct; else gBattleMons[gBankAttacker].pp[gCurrMovePos] = 0; @@ -1324,56 +1424,45 @@ static void atk03_ppreduce(void) MarkBufferBankForExecution(gBankAttacker); } } + gHitMarker &= ~(HITMARKER_NO_PPDEDUCT); gBattlescriptCurrInstr++; } static void atk04_critcalc(void) { - u8 hold_effect; u16 item; u16 crit_chance; int adderv3, adderv5, adderv6, adderv7, adderv8, adderv9, adderv10, adderv11; u16 adderv12; + u8 holdEffect; + u16 item, critChance; + item = gBattleMons[gBankAttacker].item; + if (item == ITEM_ENIGMA_BERRY) - hold_effect = gEnigmaBerries[gBankAttacker].holdEffect; + holdEffect = gEnigmaBerries[gBankAttacker].holdEffect; else - hold_effect = ItemId_GetHoldEffect(item); + holdEffect = ItemId_GetHoldEffect(item); gStringBank = gBankAttacker; - if (gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) - adderv3 = 2; - else - adderv3 = 0; - - if (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) {adderv3++;} - adderv5 = adderv3; - if (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) {adderv5 = adderv3 + 1;} - - if (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) {adderv5++;} - adderv6 = adderv5; - if (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) {adderv6 = adderv5 + 1;} - - adderv7 = 0; - if (hold_effect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY) {adderv7 = 1;} - adderv8 = 2 * adderv7; - adderv9 = 0; - if (hold_effect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD) {adderv9 = 1;} - adderv11 = 2 * adderv9; - if (hold_effect == HOLD_EFFECT_SCOPE_LENS) - {adderv10 = 1 + adderv6 + adderv8; adderv12 = adderv10 + adderv11;} - else - {adderv10 = adderv6 + adderv8; adderv12 = adderv10 + adderv11;} - - crit_chance = adderv12; + critChance = 2 * ((gBattleMons[gBankAttacker].status2 & STATUS2_FOCUS_ENERGY) != 0) + + (gBattleMoves[gCurrentMove].effect == EFFECT_HIGH_CRITICAL) + + (gBattleMoves[gCurrentMove].effect == EFFECT_SKY_ATTACK) + + (gBattleMoves[gCurrentMove].effect == EFFECT_BLAZE_KICK) + + (gBattleMoves[gCurrentMove].effect == EFFECT_POISON_TAIL) + + (holdEffect == HOLD_EFFECT_SCOPE_LENS) + + 2 * (holdEffect == HOLD_EFFECT_LUCKY_PUNCH && gBattleMons[gBankAttacker].species == SPECIES_CHANSEY) + + 2 * (holdEffect == HOLD_EFFECT_STICK && gBattleMons[gBankAttacker].species == SPECIES_FARFETCHD); - if (crit_chance > 4) {crit_chance = 4;} + if (critChance > 4) + critChance = 4; if ((gBattleMons[gBankTarget].ability != ABILITY_BATTLE_ARMOR && gBattleMons[gBankTarget].ability != ABILITY_SHELL_ARMOR) && !(gStatuses3[gBankAttacker] & STATUS3_CANT_SCORE_A_CRIT) && !(gBattleTypeFlags & (BATTLE_TYPE_WALLY_TUTORIAL | BATTLE_TYPE_FIRST_BATTLE)) - && !(Random() % gCriticalHitChance[crit_chance])) + && !(Random() % sCriticalHitChance[critChance])) gCritMultiplier = 2; else gCritMultiplier = 1; + gBattlescriptCurrInstr++; } @@ -1382,8 +1471,8 @@ static void atk05_damagecalc(void) u16 side_hword = gSideAffecting[GetBankIdentity(gBankTarget) & 1]; gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBankAttacker], &gBattleMons[gBankTarget], gCurrentMove, side_hword, gDynamicBasePower, - BATTLE_STRUCT->dynamicMoveType, gBankAttacker, gBankTarget); - gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier; + gBattleStruct->dynamicMoveType, gBankAttacker, gBankTarget); + gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleStruct->dmgMultiplier; if (gStatuses3[gBankAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) gBattleMoveDamage *= 2; @@ -1398,9 +1487,9 @@ void AI_CalcDmg(u8 BankAtk, u8 BankDef) u16 side_hword = gSideAffecting[GetBankIdentity(BankDef) & 1]; gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[BankAtk], &gBattleMons[BankDef], gCurrentMove, side_hword, gDynamicBasePower, - BATTLE_STRUCT->dynamicMoveType, BankAtk, BankDef); + gBattleStruct->dynamicMoveType, BankAtk, BankDef); gDynamicBasePower = 0; - gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * BATTLE_STRUCT->dmgMultiplier; + gBattleMoveDamage = gBattleMoveDamage * gCritMultiplier * gBattleStruct->dmgMultiplier; if (gStatuses3[BankAtk] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC) gBattleMoveDamage *= 2; @@ -1448,8 +1537,8 @@ static void atk06_typecalc(void) u8 move_type; if (gCurrentMove != MOVE_STRUGGLE) { - if (BATTLE_STRUCT->dynamicMoveType) - move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + if (gBattleStruct->dynamicMoveType) + move_type = gBattleStruct->dynamicMoveType & 0x3F; else move_type = gBattleMoves[gCurrentMove].type; @@ -1464,8 +1553,8 @@ static void atk06_typecalc(void) { gLastUsedAbility = gBattleMons[gBankTarget].ability; gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED); - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; + gLastLandedMoves[gBankTarget] = 0; + gLastHitByType[gBankTarget] = 0; gBattleCommunication[6] = move_type; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } @@ -1501,8 +1590,8 @@ static void atk06_typecalc(void) { gLastUsedAbility = ABILITY_WONDER_GUARD; gBattleMoveFlags |= MOVESTATUS_MISSED; - gMoveHitWith[gBankTarget] = 0; - gUnknown_02024C44[gBankTarget] = 0; + gLastLandedMoves[gBankTarget] = 0; + gLastHitByType[gBankTarget] = 0; gBattleCommunication[6] = 3; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } @@ -1511,7 +1600,7 @@ static void atk06_typecalc(void) } gBattlescriptCurrInstr++; } -static void b_wonderguard_and_levitate(void) +static void CheckWonderGuardAndLevitate(void) { u8 flags = 0; int i = 0; @@ -1520,8 +1609,8 @@ static void b_wonderguard_and_levitate(void) if (gCurrentMove == MOVE_STRUGGLE || !gBattleMoves[gCurrentMove].power) return; - if (BATTLE_STRUCT->dynamicMoveType) - move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + if (gBattleStruct->dynamicMoveType) + move_type = gBattleStruct->dynamicMoveType & 0x3F; else move_type = gBattleMoves[gCurrentMove].type; @@ -1841,12 +1930,12 @@ static void atk09_attackanimation(void) { BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_Pausex20; - BATTLE_STRUCT->animTurn += 1; - BATTLE_STRUCT->animTargetsHit += 1; + gBattleStruct->animTurn += 1; + gBattleStruct->animTargetsHit += 1; } else { - if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && BATTLE_STRUCT->animTargetsHit) + if ((gBattleMoves[gCurrentMove].target & TARGET_BOTH || gBattleMoves[gCurrentMove].target & TARGET_FOES_AND_ALLY || gBattleMoves[gCurrentMove].target & TARGET_DEPENDS) && gBattleStruct->animTargetsHit) { gBattlescriptCurrInstr++; return; @@ -1855,9 +1944,9 @@ static void atk09_attackanimation(void) { gActiveBank = gBankAttacker; - EmitMoveAnimation(0, gCurrentMove, BATTLE_STRUCT->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]); - BATTLE_STRUCT->animTurn += 1; - BATTLE_STRUCT->animTargetsHit += 1; + EmitMoveAnimation(0, gCurrentMove, gBattleStruct->animTurn, gBattleMovePower, gBattleMoveDamage, gBattleMons[gBankAttacker].friendship, &gDisableStructs[gBankAttacker]); + gBattleStruct->animTurn += 1; + gBattleStruct->animTargetsHit += 1; MarkBufferBankForExecution(gBankAttacker); gBattlescriptCurrInstr++; } @@ -1879,49 +1968,60 @@ static void atk0B_healthbarupdate(void) { if (gBattleExecBuffer) return; - if (gBattleMoveFlags & MOVESTATUS_NOEFFECT) - goto END; - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); - - if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) { - PrepareStringBattle(0x80, gActiveBank); - goto END; - } + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); - EmitHealthBarUpdate(0, gBattleMoveDamage); - MarkBufferBankForExecution(gActiveBank); + if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) + { + PrepareStringBattle(0x80, gActiveBank); + } + else + { + // Emerald + /* + s16 healthValue; - if (!GetBankSide(gActiveBank) && gBattleMoveDamage > 0) - gBattleResults.unk5_0 = 1; + s32 currDmg = gBattleMoveDamage; + s32 maxPossibleDmgValue = 10000; // not present in R/S, ensures that huge damage values don't change sign - END: - gBattlescriptCurrInstr += 2; + if (currDmg <= maxPossibleDmgValue) + healthValue = currDmg; + else + healthValue = maxPossibleDmgValue; + + EmitHealthBarUpdate(0, healthValue); + */ + + EmitHealthBarUpdate(0, gBattleMoveDamage); + MarkBufferBankForExecution(gActiveBank); + + if (GetBankSide(gActiveBank) == SIDE_PLAYER && gBattleMoveDamage > 0) + gBattleResults.unk5_0 = 1; + } + } + + gBattlescriptCurrInstr += 2; } static void atk0C_datahpupdate(void) { - register u32 move_type asm("r6"); //no idea how to match it otherwise - u8 dynamic_move_type; + u32 moveType; if (gBattleExecBuffer) return; - dynamic_move_type = BATTLE_STRUCT->dynamicMoveType; - if (dynamic_move_type && !(dynamic_move_type & 0x40)) - { - move_type = 0x3F; - move_type &= dynamic_move_type; - } + if (gBattleStruct->dynamicMoveType == 0) + moveType = gBattleMoves[gCurrentMove].type; + else if (!(gBattleStruct->dynamicMoveType & 0x40)) + moveType = gBattleStruct->dynamicMoveType & 0x3F; else - { - move_type = gBattleMoves[gCurrentMove].type; - } + moveType = gBattleMoves[gCurrentMove].type; if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT)) { - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE && gDisableStructs[gActiveBank].substituteHP && !(gHitMarker & HITMARKER_IGNORE_SUBSTITUTE)) { if (gDisableStructs[gActiveBank].substituteHP >= gBattleMoveDamage) @@ -1929,16 +2029,16 @@ static void atk0C_datahpupdate(void) if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) gSpecialStatuses[gActiveBank].moveturnLostHP = gBattleMoveDamage; gDisableStructs[gActiveBank].substituteHP -= gBattleMoveDamage; - gHP_dealt = gBattleMoveDamage; + gHpDealt = gBattleMoveDamage; } else { if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) gSpecialStatuses[gActiveBank].moveturnLostHP = gDisableStructs[gActiveBank].substituteHP; - gHP_dealt = gDisableStructs[gActiveBank].substituteHP; + gHpDealt = gDisableStructs[gActiveBank].substituteHP; gDisableStructs[gActiveBank].substituteHP = 0; } - //check substitute fading + // check substitute fading if (gDisableStructs[gActiveBank].substituteHP == 0) { gBattlescriptCurrInstr += 2; @@ -1950,14 +2050,14 @@ static void atk0C_datahpupdate(void) else { gHitMarker &= ~(HITMARKER_IGNORE_SUBSTITUTE); - if (gBattleMoveDamage < 0) //hp goes up + if (gBattleMoveDamage < 0) // hp goes up { gBattleMons[gActiveBank].hp -= gBattleMoveDamage; if (gBattleMons[gActiveBank].hp > gBattleMons[gActiveBank].maxHP) gBattleMons[gActiveBank].hp = gBattleMons[gActiveBank].maxHP; } - else //hp goes down + else // hp goes down { if (gHitMarker & HITMARKER_x20) { @@ -1966,7 +2066,7 @@ static void atk0C_datahpupdate(void) else { gTakenDmg[gActiveBank] += gBattleMoveDamage; - if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) + if (gBattlescriptCurrInstr[1] == BS_GET_TARGET) gTakenDmgBanks[gActiveBank] = gBankAttacker; else gTakenDmgBanks[gActiveBank] = gBankTarget; @@ -1975,22 +2075,22 @@ static void atk0C_datahpupdate(void) if (gBattleMons[gActiveBank].hp > gBattleMoveDamage) { gBattleMons[gActiveBank].hp -= gBattleMoveDamage; - gHP_dealt = gBattleMoveDamage; + gHpDealt = gBattleMoveDamage; } else { - gHP_dealt = gBattleMons[gActiveBank].hp; + gHpDealt = gBattleMons[gActiveBank].hp; gBattleMons[gActiveBank].hp = 0; } if (!gSpecialStatuses[gActiveBank].moveturnLostHP && !(gHitMarker & HITMARKER_x100000)) - gSpecialStatuses[gActiveBank].moveturnLostHP = gHP_dealt; + gSpecialStatuses[gActiveBank].moveturnLostHP = gHpDealt; - if (move_type <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT) + if (moveType <= 8 && !(gHitMarker & HITMARKER_x100000) && gCurrentMove != MOVE_PAIN_SPLIT) { - gProtectStructs[gActiveBank].physicalDmg = gHP_dealt; - gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHP_dealt; - if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) + gProtectStructs[gActiveBank].physicalDmg = gHpDealt; + gSpecialStatuses[gActiveBank].moveturnLostHP_physical = gHpDealt; + if (gBattlescriptCurrInstr[1] == BS_GET_TARGET) { gProtectStructs[gActiveBank].physicalBank = gBankAttacker; gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankAttacker; @@ -2001,11 +2101,11 @@ static void atk0C_datahpupdate(void) gSpecialStatuses[gActiveBank].moveturnPhysicalBank = gBankTarget; } } - else if (move_type > 8 && !(gHitMarker & HITMARKER_x100000)) + else if (moveType > 8 && !(gHitMarker & HITMARKER_x100000)) { - gProtectStructs[gActiveBank].specialDmg = gHP_dealt; - gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHP_dealt; - if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) + gProtectStructs[gActiveBank].specialDmg = gHpDealt; + gSpecialStatuses[gActiveBank].moveturnLostHP_special = gHpDealt; + if (gBattlescriptCurrInstr[1] == BS_GET_TARGET) { gProtectStructs[gActiveBank].specialBank = gBankAttacker; gSpecialStatuses[gActiveBank].moveturnSpecialBank = gBankAttacker; @@ -2024,7 +2124,7 @@ static void atk0C_datahpupdate(void) } else { - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); if (gSpecialStatuses[gActiveBank].moveturnLostHP == 0) gSpecialStatuses[gActiveBank].moveturnLostHP = 0xFFFF; } @@ -2048,6 +2148,7 @@ static void atk0E_effectivenesssound(void) { if (gBattleExecBuffer) return; + gActiveBank = gBankTarget; if (!(gBattleMoveFlags & MOVESTATUS_MISSED)) { @@ -2092,37 +2193,39 @@ static void atk0E_effectivenesssound(void) static void atk0F_resultmessage(void) { - u16 stringID = 0; + u32 stringId = 0; if (gBattleExecBuffer) return; if (gBattleMoveFlags & MOVESTATUS_MISSED && (!(gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) || gBattleCommunication[6] > 2)) { - stringID = gMissStrings[gBattleCommunication[6]]; + stringId = gMissStringIds[gBattleCommunication[6]]; gBattleCommunication[MSG_DISPLAY] = 1; } else { gBattleCommunication[MSG_DISPLAY] = 1; - switch (gBattleMoveFlags & 0xFE) + switch (gBattleMoveFlags & (u8)(~(MOVESTATUS_MISSED))) { case MOVESTATUS_SUPEREFFECTIVE: - stringID = 0xDE; + stringId = STRINGID_SUPEREFFECTIVE; break; case MOVESTATUS_NOTVERYEFFECTIVE: - stringID = 0xDD; + stringId = STRINGID_NOTVERYEFFECTIVE; break; case MOVESTATUS_ONEHITKO: - stringID = 0xDA; + stringId = STRINGID_ONEHITKO; break; case MOVESTATUS_ENDURED: - stringID = 0x99; + stringId = STRINGID_PKMNENDUREDHIT; break; case MOVESTATUS_FAILED: - goto FAILED; + stringId = STRINGID_BUTITFAILED; + break; case MOVESTATUS_NOTAFFECTED: - goto NOTAFFECTED; + stringId = STRINGID_ITDOESNTAFFECT; + break; case MOVESTATUS_HUNGON: gLastUsedItem = gBattleMons[gBankTarget].item; gStringBank = gBankTarget; @@ -2132,8 +2235,9 @@ static void atk0F_resultmessage(void) return; default: if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED) - NOTAFFECTED: - stringID = 0x1B; + { + stringId = STRINGID_ITDOESNTAFFECT; + } else if (gBattleMoveFlags & MOVESTATUS_ONEHITKO) { gBattleMoveFlags &= ~(MOVESTATUS_ONEHITKO); @@ -2160,18 +2264,19 @@ static void atk0F_resultmessage(void) return; } else if (gBattleMoveFlags & MOVESTATUS_FAILED) - FAILED: - stringID = 0xE5; + { + stringId = STRINGID_BUTITFAILED; + } else + { gBattleCommunication[MSG_DISPLAY] = 0; + } } } - if (stringID) - { - register u16 dummy asm("r0") = stringID; //Can't match it otherwise - PrepareStringBattle(dummy, gBankAttacker); - } + if (stringId) + PrepareStringBattle(stringId, gBankAttacker); + gBattlescriptCurrInstr++; } @@ -2268,12 +2373,12 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gEffectBank = gBankAttacker; //bank that effects get applied on gBattleCommunication[MOVE_EFFECT_BYTE] &= ~(EffectAffectsUser); AffectsUser = EffectAffectsUser; - BATTLE_STRUCT->scriptingActive = gBankTarget; //theoretically the attacker + gBattleStruct->scriptingActive = gBankTarget; //theoretically the attacker } else { gEffectBank = gBankTarget; - BATTLE_STRUCT->scriptingActive = gBankAttacker; + gBattleStruct->scriptingActive = gBankAttacker; } if (gBattleMons[gEffectBank].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && @@ -2293,7 +2398,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) //status change { - switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) { case STATUS_SLEEP: //check active uproar @@ -2342,7 +2447,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleMons[gEffectBank].type2 == TYPE_STEEL) {break;} if (gBattleMons[gEffectBank].status1) {break;} if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY) {break;} - + StatusChanged = 1; break; case STATUS_BURN: @@ -2454,10 +2559,10 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (StatusChanged == 1) { BattleScriptPush(gBattlescriptCurrInstr + 1); - if (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP) + if (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]] == STATUS_SLEEP) gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2); else - gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattleMons[gEffectBank].status1 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; gActiveBank = gEffectBank; EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1); @@ -2471,7 +2576,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattleCommunication[MULTISTRING_CHOOSER] = 0; if (gBattleCommunication[MOVE_EFFECT_BYTE] == 2 || gBattleCommunication[MOVE_EFFECT_BYTE] == 6 || gBattleCommunication[MOVE_EFFECT_BYTE] == 5 || gBattleCommunication[MOVE_EFFECT_BYTE] == 3) { - BATTLE_STRUCT->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE]; + gBattleStruct->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE]; gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT; } return; @@ -2481,12 +2586,12 @@ void SetMoveEffect(bool8 primary, u8 certainArg) } else { - if (gBattleMons[gEffectBank].status2 & gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + if (gBattleMons[gEffectBank].status2 & sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) { gBattlescriptCurrInstr++; return; } - switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) + switch (sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]) { case 7: //confusion if (gBattleMons[gEffectBank].ability == ABILITY_OWN_TEMPO) @@ -2513,7 +2618,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) else { if (BankGetTurnOrder(gEffectBank) > gCurrentTurnActionNumber) - gBattleMons[gEffectBank].status2 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; + gBattleMons[gEffectBank].status2 |= sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattlescriptCurrInstr++; return; } break; @@ -2553,9 +2658,9 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (gBattleMons[gEffectBank].status2 & STATUS2_WRAPPED) {gBattlescriptCurrInstr++; return;} gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 0xD; - BATTLE_STRUCT->wrappedMove[gEffectBank*2] = (u8)gCurrentMove; - (1 + BATTLE_STRUCT->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask. - BATTLE_STRUCT->wrappedBy[gEffectBank] = gBankAttacker; + gBattleStruct->wrappedMove[gEffectBank*2] = (u8)gCurrentMove; + (1 + gBattleStruct->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask. + gBattleStruct->wrappedBy[gEffectBank] = gBankAttacker; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]]; gBattleCommunication[MULTISTRING_CHOOSER] = 0; @@ -2564,7 +2669,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattleCommunication[MULTISTRING_CHOOSER]++; break; case 14: //25% recoil - gBattleMoveDamage = (gHP_dealt) / 4; + gBattleMoveDamage = (gHpDealt) / 4; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptPush(gBattlescriptCurrInstr + 1); @@ -2574,8 +2679,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (ChangeStatBuffs(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;} else { - BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one + gBattleStruct->animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatUp; } @@ -2584,8 +2689,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (ChangeStatBuffs(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly else { - BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; + gBattleStruct->animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatDown; } @@ -2594,8 +2699,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (ChangeStatBuffs(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;} else { - BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; + gBattleStruct->animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatUp; } @@ -2604,8 +2709,8 @@ void SetMoveEffect(bool8 primary, u8 certainArg) if (ChangeStatBuffs(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;} else { - BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; + gBattleStruct->animArg2 = 0; BattleScriptPush(gBattlescriptCurrInstr + 1); gBattlescriptCurrInstr = BattleScript_StatDown; } @@ -2695,7 +2800,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg) gBattlescriptCurrInstr = BattleScript_AtkDefDown; return; case 38: //33% recoil - gBattleMoveDamage = gHP_dealt / 3; + gBattleMoveDamage = gHpDealt / 3; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; BattleScriptPush(gBattlescriptCurrInstr + 1); @@ -2894,7 +2999,7 @@ _0801E50C:\n\ bls _0801E518\n\ b _0801EB4A\n\ _0801E518:\n\ - ldr r1, _0801E55C @ =gStatusFlagsForMoveEffects\n\ + ldr r1, _0801E55C @ =sStatusFlagsForMoveEffects\n\ ldrb r0, [r7, 0x3]\n\ lsls r0, 2\n\ adds r0, r1\n\ @@ -2922,7 +3027,7 @@ _0801E54C: .4byte gBattleMons\n\ _0801E550: .4byte gHitMarker\n\ _0801E554: .4byte gSideAffecting\n\ _0801E558: .4byte gBattleCommunication\n\ -_0801E55C: .4byte gStatusFlagsForMoveEffects\n\ +_0801E55C: .4byte sStatusFlagsForMoveEffects\n\ _0801E560:\n\ cmp r0, 0x40\n\ bne _0801E566\n\ @@ -3552,7 +3657,7 @@ _0801EA1C:\n\ ldr r0, [r0]\n\ adds r0, 0x1\n\ bl BattleScriptPush\n\ - ldr r1, _0801EA60 @ =gStatusFlagsForMoveEffects\n\ + ldr r1, _0801EA60 @ =sStatusFlagsForMoveEffects\n\ ldr r0, _0801EA64 @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ lsls r0, 2\n\ @@ -3578,7 +3683,7 @@ _0801EA1C:\n\ .align 2, 0\n\ _0801EA58: .4byte gBattleMoveFlags\n\ _0801EA5C: .4byte gBattlescriptCurrInstr\n\ -_0801EA60: .4byte gStatusFlagsForMoveEffects\n\ +_0801EA60: .4byte sStatusFlagsForMoveEffects\n\ _0801EA64: .4byte gBattleCommunication\n\ _0801EA68: .4byte gBattleMons\n\ _0801EA6C: .4byte gEffectBank\n\ @@ -3688,7 +3793,7 @@ _0801EB4A:\n\ mov r0, r9\n\ adds r0, 0x50\n\ adds r1, r0\n\ - ldr r2, _0801EB84 @ =gStatusFlagsForMoveEffects\n\ + ldr r2, _0801EB84 @ =sStatusFlagsForMoveEffects\n\ ldrb r3, [r7, 0x3]\n\ lsls r0, r3, 2\n\ adds r0, r2\n\ @@ -3710,7 +3815,7 @@ _0801EB78:\n\ ldr r0, [r0]\n\ mov pc, r0\n\ .align 2, 0\n\ -_0801EB84: .4byte gStatusFlagsForMoveEffects\n\ +_0801EB84: .4byte sStatusFlagsForMoveEffects\n\ _0801EB88: .4byte _0801EB8C\n\ .align 2, 0\n\ _0801EB8C:\n\ @@ -3870,7 +3975,7 @@ _0801ED2E:\n\ mov r0, r9\n\ adds r0, 0x50\n\ adds r2, r0\n\ - ldr r1, _0801ED58 @ =gStatusFlagsForMoveEffects\n\ + ldr r1, _0801ED58 @ =sStatusFlagsForMoveEffects\n\ ldr r0, _0801ED5C @ =gBattleCommunication\n\ ldrb r0, [r0, 0x3]\n\ lsls r0, 2\n\ @@ -3882,7 +3987,7 @@ _0801ED2E:\n\ bl _0801F5DC\n\ .align 2, 0\n\ _0801ED54: .4byte gCurrentTurnActionNumber\n\ -_0801ED58: .4byte gStatusFlagsForMoveEffects\n\ +_0801ED58: .4byte sStatusFlagsForMoveEffects\n\ _0801ED5C: .4byte gBattleCommunication\n\ _0801ED60:\n\ mov r3, r8\n\ @@ -4156,7 +4261,7 @@ _0801EFA0: .4byte gBattleCommunication\n\ _0801EFA4: .4byte gTrappingMoves\n\ _0801EFA8:\n\ ldr r1, _0801EFD8 @ =gBattleMoveDamage\n\ - ldr r0, _0801EFDC @ =gHP_dealt\n\ + ldr r0, _0801EFDC @ =gHpDealt\n\ ldr r0, [r0]\n\ cmp r0, 0\n\ bge _0801EFB4\n\ @@ -4182,7 +4287,7 @@ _0801EFC0:\n\ b _0801F5F8\n\ .align 2, 0\n\ _0801EFD8: .4byte gBattleMoveDamage\n\ -_0801EFDC: .4byte gHP_dealt\n\ +_0801EFDC: .4byte gHpDealt\n\ _0801EFE0: .4byte gBattlescriptCurrInstr\n\ _0801EFE4: .4byte gMoveEffectBS_Ptrs\n\ _0801EFE8: .4byte gBattleCommunication\n\ @@ -4711,7 +4816,7 @@ _0801F45C: .4byte gBattlescriptCurrInstr\n\ _0801F460: .4byte BattleScript_AtkDefDown\n\ _0801F464:\n\ ldr r4, _0801F494 @ =gBattleMoveDamage\n\ - ldr r0, _0801F498 @ =gHP_dealt\n\ + ldr r0, _0801F498 @ =gHpDealt\n\ ldr r0, [r0]\n\ movs r1, 0x3\n\ bl __divsi3\n\ @@ -4734,7 +4839,7 @@ _0801F47A:\n\ b _0801F5F8\n\ .align 2, 0\n\ _0801F494: .4byte gBattleMoveDamage\n\ -_0801F498: .4byte gHP_dealt\n\ +_0801F498: .4byte gHpDealt\n\ _0801F49C: .4byte gBattlescriptCurrInstr\n\ _0801F4A0: .4byte gMoveEffectBS_Ptrs\n\ _0801F4A4: .4byte gBattleCommunication\n\ @@ -4935,7 +5040,7 @@ static void atk15_seteffectwithchance(void) else gBattlescriptCurrInstr++; gBattleCommunication[MOVE_EFFECT_BYTE] = 0; - BATTLE_STRUCT->unk16112 = 0; + gBattleStruct->unk16112 = 0; } static void atk16_seteffectprimary(void) @@ -4952,13 +5057,13 @@ static void atk18_clearstatusfromeffect(void) { gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); if (gBattleCommunication[MOVE_EFFECT_BYTE] <= 6) - gBattleMons[gActiveBank].status1 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); + gBattleMons[gActiveBank].status1 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); else - gBattleMons[gActiveBank].status2 &= (~gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); + gBattleMons[gActiveBank].status2 &= (~sStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]]); gBattleCommunication[MOVE_EFFECT_BYTE] = 0; gBattlescriptCurrInstr += 2; - BATTLE_STRUCT->unk16112 = 0; + gBattleStruct->unk16112 = 0; } static void atk19_tryfaintmon(void) @@ -5250,282 +5355,262 @@ static void atk22_jumpiftype(void) //u8 bank, u8 type, *ptr gBattlescriptCurrInstr += 7; } -//here we go again... -#ifdef NONMATCHING -static void atk23_getexp(void) -{ - u8 hold_effect; - int via_expshare = 0, sent_in; - u16* exp = &BATTLE_STRUCT->exp; - gBank1 = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); - sent_in = gSentPokesToOpponent[(gBank1 & 2) >> 1]; - switch (BATTLE_STRUCT->getexpStateTracker) - { - case 0: //check if should receive exp at all - if (GetBankSide(gBank1) != 1 || (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_SAFARI | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER))) - BATTLE_STRUCT->getexpStateTracker = 6; //goto last case +void atk23_getexp(void) +{ + u16 item; + s32 i; // also used as stringId + u8 holdEffect; + s32 sentIn; + + s32 viaExpShare = 0; + u16* exp = &gBattleStruct->exp; + + gBank1 = GetBattleBank(gBattlescriptCurrInstr[1]); + sentIn = gSentPokesToOpponent[(gBank1 & 2) >> 1]; + + switch (gBattleStruct->getexpStateTracker) + { + case 0: // check if should receive exp at all + if (GetBankSide(gBank1) != SIDE_OPPONENT || (gBattleTypeFlags & + (BATTLE_TYPE_LINK + | BATTLE_TYPE_SAFARI + | BATTLE_TYPE_BATTLE_TOWER + | BATTLE_TYPE_EREADER_TRAINER))) + { + gBattleStruct->getexpStateTracker = 6; // goto last case + } else { - BATTLE_STRUCT->getexpStateTracker++; - ((u8*)ewram)[0x16113] |= gBitTable[gBattlePartyID[gBank1]]; + gBattleStruct->getexpStateTracker++; + gBattleStruct->unk16113 |= gBitTable[gBattlePartyID[gBank1]]; } break; - case 1: //calculate experience points to redistribute + case 1: // calculate experience points to redistribute { - int via_sent_in = 0; u16 calculatedExp; - int i; - for (i = 0; i < 6; i++) + s32 viaSentIn; + + for (viaSentIn = 0, i = 0; i < 6; i++) { - u16 item; - if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == 0 || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) == SPECIES_NONE || GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0) continue; - if (gBitTable[i] & sent_in) - via_sent_in++; + if (gBitTable[i] & sentIn) + viaSentIn++; item = GetMonData(&gPlayerParty[i], MON_DATA_HELD_ITEM); + if (item == ITEM_ENIGMA_BERRY) - hold_effect = gSaveBlock1.enigmaBerry.holdEffect; + holdEffect = gSaveBlock1.enigmaBerry.holdEffect; else - hold_effect = ItemId_GetHoldEffect(item); + holdEffect = ItemId_GetHoldEffect(item); - if (hold_effect == HOLD_EFFECT_EXP_SHARE) - via_expshare++; + if (holdEffect == HOLD_EFFECT_EXP_SHARE) + viaExpShare++; } + calculatedExp = gBaseStats[gBattleMons[gBank1].species].expYield * gBattleMons[gBank1].level / 7; - if (via_expshare) //at least one poke is getting exp via exp share + + if (viaExpShare) // at least one mon is getting exp via exp share { - calculatedExp /= 2; - *exp = calculatedExp / via_sent_in; + *exp = calculatedExp / 2 / viaSentIn; if (*exp == 0) *exp = 1; - gExpShareExp = calculatedExp / via_expshare; + gExpShareExp = calculatedExp / 2 / viaExpShare; if (gExpShareExp == 0) gExpShareExp = 1; } else { - *exp = calculatedExp / via_sent_in; + *exp = calculatedExp / viaSentIn; if (*exp == 0) *exp = 1; gExpShareExp = 0; } - BATTLE_STRUCT->getexpStateTracker++; - BATTLE_STRUCT->expGetterID = 0; - BATTLE_STRUCT->sentInPokes = sent_in; - } //no break statement - case 2: //loop; set exp value to the poke in expgetter_id and print message + + gBattleStruct->getexpStateTracker++; + gBattleStruct->expGetterID = 0; + gBattleStruct->sentInPokes = sentIn; + } + // fall through + case 2: // set exp value to the poke in expgetter_id and print message if (gBattleExecBuffer == 0) { - u16 item = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HELD_ITEM); - u8* tracker; u32 zero; + item = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HELD_ITEM); + if (item == ITEM_ENIGMA_BERRY) - hold_effect = gSaveBlock1.enigmaBerry.holdEffect; + holdEffect = gSaveBlock1.enigmaBerry.holdEffect; else - hold_effect = ItemId_GetHoldEffect(item); + holdEffect = ItemId_GetHoldEffect(item); - if ((hold_effect != HOLD_EFFECT_EXP_SHARE && !(BATTLE_STRUCT->sentInPokes & 1))) + if (holdEffect != HOLD_EFFECT_EXP_SHARE && !(gBattleStruct->sentInPokes & 1)) { - BATTLE_STRUCT->sentInPokes >>= 1; - tracker = &BATTLE_STRUCT->getexpStateTracker; - zero = 0; - *tracker = 5; //increment looper - gBattleMoveDamage = zero; //used for exp + gBattleStruct->sentInPokes >>= 1; + gBattleStruct->getexpStateTracker = 5; + gBattleMoveDamage = 0; // used for exp } - else if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) == 100) + else if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL) == 100) { - BATTLE_STRUCT->sentInPokes >>= 1; - tracker = &BATTLE_STRUCT->getexpStateTracker; - zero = 0; - *tracker = 5; //increment looper - gBattleMoveDamage = zero; //used for exp + gBattleStruct->sentInPokes >>= 1; + gBattleStruct->getexpStateTracker = 5; + gBattleMoveDamage = 0; // used for exp } else { - //music change in wild battle after fainting a poke - if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !BATTLE_STRUCT->wildVictorySong) + // music change in wild battle after fainting a poke + if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !gBattleStruct->wildVictorySong) { - BattleMusicStop(); + BattleStopLowHpSound(); PlayBGM(0x161); - BATTLE_STRUCT->wildVictorySong++; + gBattleStruct->wildVictorySong++; } - if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP)) + if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP)) { - s16 stringID; - if (BATTLE_STRUCT->sentInPokes & 1) + if (gBattleStruct->sentInPokes & 1) gBattleMoveDamage = *exp; else gBattleMoveDamage = 0; - if (hold_effect == HOLD_EFFECT_EXP_SHARE) + if (holdEffect == HOLD_EFFECT_EXP_SHARE) gBattleMoveDamage += gExpShareExp; - if (hold_effect == HOLD_EFFECT_LUCKY_EGG) + if (holdEffect == HOLD_EFFECT_LUCKY_EGG) gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; - if (IsTradedMon(&gPlayerParty[BATTLE_STRUCT->expGetterID])) + if (IsTradedMon(&gPlayerParty[gBattleStruct->expGetterID])) { gBattleMoveDamage = (gBattleMoveDamage * 150) / 100; - stringID = 0x14A; + i = 0x14A; } else { - stringID = 0x149; - } + i = 0x149; + } - //get exp getter bank + // get exp getter bank if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) { - if (!(gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) && !(gAbsentBankFlags & gBitTable[2])) - BATTLE_STRUCT->expGetterBank = 2; + if (!(gBattlePartyID[2] != gBattleStruct->expGetterID) && !(gAbsentBankFlags & gBitTable[2])) + gBattleStruct->expGetterBank = 2; else { if (!(gAbsentBankFlags & gBitTable[0])) - BATTLE_STRUCT->expGetterBank = 0; + gBattleStruct->expGetterBank = 0; else - BATTLE_STRUCT->expGetterBank = 2; + gBattleStruct->expGetterBank = 2; } } else - BATTLE_STRUCT->expGetterBank = 0; + gBattleStruct->expGetterBank = 0; - //buffer poke name - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = BATTLE_STRUCT->expGetterBank; - gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; - gBattleTextBuff1[4] = 0xFF; - - //buffer 'gained' or 'gained a boosted' - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = stringID; - stringID = (stringID >> 8) & (0xFF); //this does not want to cooperate - gBattleTextBuff2[3] = stringID; - gBattleTextBuff2[4] = 0xFF; - - //buffer exp number - gBattleTextBuff3[0] = 0xFD; - gBattleTextBuff3[1] = 1; - gBattleTextBuff3[2] = 4; //word - gBattleTextBuff3[3] = 5; //max digits - gBattleTextBuff3[4] = gBattleMoveDamage; - gBattleTextBuff3[5] = sBYTE1_32(gBattleMoveDamage); - gBattleTextBuff3[6] = sBYTE2_32(gBattleMoveDamage); - gBattleTextBuff3[7] = sBYTE3_32(gBattleMoveDamage); - gBattleTextBuff3[8] = 0xFF; - - PrepareStringBattle(0xD, BATTLE_STRUCT->expGetterBank); - MonGainEVs(&gPlayerParty[BATTLE_STRUCT->expGetterID], gBattleMons[gBank1].species); + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gBattleStruct->expGetterBank, gBattleStruct->expGetterID) + + // buffer 'gained' or 'gained a boosted' + PREPARE_STRING_BUFFER(gBattleTextBuff2, i) + + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff3, 5, gBattleMoveDamage) + + PrepareStringBattle(STRINGID_PKMNGAINEDEXP, gBattleStruct->expGetterBank); + MonGainEVs(&gPlayerParty[gBattleStruct->expGetterID], gBattleMons[gBank1].species); } - BATTLE_STRUCT->sentInPokes >>= 1; - BATTLE_STRUCT->getexpStateTracker++; + gBattleStruct->sentInPokes >>= 1; + gBattleStruct->getexpStateTracker++; } } break; - case 3: //Set Stats and give exp + case 3: // Set stats and give exp if (gBattleExecBuffer == 0) { - gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0; - if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100) + gBattleBufferB[gBattleStruct->expGetterBank][0] = 0; + if (GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL) != 100) { - // Doesn't match. - BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); - BATTLE_STRUCT->beforeLvlUp[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); - BATTLE_STRUCT->beforeLvlUp[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED); - BATTLE_STRUCT->beforeLvlUp[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); - BATTLE_STRUCT->beforeLvlUp[5] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); - - gActiveBank = BATTLE_STRUCT->expGetterBank; - EmitExpBarUpdate(0, BATTLE_STRUCT->expGetterID, gBattleMoveDamage); + gBattleResources_statsBeforeLvlUp->hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP); + gBattleResources_statsBeforeLvlUp->atk = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK); + gBattleResources_statsBeforeLvlUp->def = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF); + gBattleResources_statsBeforeLvlUp->spd = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); + gBattleResources_statsBeforeLvlUp->spAtk = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK); + gBattleResources_statsBeforeLvlUp->spDef = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPDEF); + + gActiveBank = gBattleStruct->expGetterBank; + EmitExpBarUpdate(0, gBattleStruct->expGetterID, gBattleMoveDamage); MarkBufferBankForExecution(gActiveBank); } - BATTLE_STRUCT->getexpStateTracker++; + gBattleStruct->getexpStateTracker++; } break; - case 4: //lvl up if necessary + case 4: // lvl up if necessary if (gBattleExecBuffer == 0) { - gActiveBank = BATTLE_STRUCT->expGetterBank; - if (gBattleBufferB[gActiveBank][0] == 0x21 && gBattleBufferB[gActiveBank][1] == 0xB) + gActiveBank = gBattleStruct->expGetterBank; + if (gBattleBufferB[gActiveBank][0] == CONTROLLER_TWORETURNVALUES + && gBattleBufferB[gActiveBank][1] == RET_VALUE_LEVELLED_UP) { - if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID) - sub_80324F8(&gPlayerParty[gActiveBank], gActiveBank); + if (gBattleTypeFlags & BATTLE_TYPE_TRAINER && gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID) + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); - //buff poke name - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 4; - gBattleTextBuff1[2] = gActiveBank; - gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID; - gBattleTextBuff1[4] = 0xFF; - - //buff level - gBattleTextBuff2[0] = 0xFD; - gBattleTextBuff2[1] = 1; - gBattleTextBuff2[2] = 1; - gBattleTextBuff2[3] = 3; - gBattleTextBuff2[4] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); - gBattleTextBuff2[5] = 0xFF; + PREPARE_MON_NICK_WITH_PREFIX_BUFFER(gBattleTextBuff1, gActiveBank, gBattleStruct->expGetterID) + + PREPARE_BYTE_NUMBER_BUFFER(gBattleTextBuff2, 3, GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL)) BattleScriptPushCursor(); - gLeveledUpInBattle |= gBitTable[BATTLE_STRUCT->expGetterID]; + gLeveledUpInBattle |= gBitTable[gBattleStruct->expGetterID]; gBattlescriptCurrInstr = BattleScript_LevelUp; gBattleMoveDamage = (gBattleBufferB[gActiveBank][2] | (gBattleBufferB[gActiveBank][3] << 8)); - AdjustFriendship(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); + AdjustFriendship(&gPlayerParty[gBattleStruct->expGetterID], 0); - //update battle mon structure after level up - if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && gBattleMons[0].hp) + // update battle mon structure after level up + if (gBattlePartyID[0] == gBattleStruct->expGetterID && gBattleMons[0].hp) { - gBattleMons[0].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); - gBattleMons[0].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP); - gBattleMons[0].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); - gBattleMons[0].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); - gBattleMons[0].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - gBattleMons[0].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED); - gBattleMons[0].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); - gBattleMons[0].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPDEF); + gBattleMons[0].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL); + gBattleMons[0].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP); + gBattleMons[0].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP); + gBattleMons[0].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK); + gBattleMons[0].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF); + // Why is this duplicated? + gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); + gBattleMons[0].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); + gBattleMons[0].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK); + gBattleMons[0].spDefense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPDEF); } - //What is else if? Guess it's too advanced for GameFreak - if (gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) + // What is else if? + if (gBattlePartyID[2] == gBattleStruct->expGetterID && gBattleMons[2].hp && (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)) { - gBattleMons[2].level = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL); - gBattleMons[2].hp = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP); - gBattleMons[2].maxHP = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); - gBattleMons[2].attack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK); - gBattleMons[2].defense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF); - //There are no words...GF can't even copy&paste code properly - gBattleMons[2].speed = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED); - gBattleMons[2].spAttack = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPEED /*RIP*/); - gBattleMons[2].spDefense = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPATK); + gBattleMons[2].level = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_LEVEL); + gBattleMons[2].hp = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_HP); + gBattleMons[2].maxHP = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MAX_HP); + gBattleMons[2].attack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_ATK); + gBattleMons[2].defense = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_DEF); + // Duplicated again, but this time there's no Sp Defense + gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); + gBattleMons[2].speed = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPEED); + gBattleMons[2].spAttack = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_SPATK); } - BATTLE_STRUCT->getexpStateTracker = 5; } else { gBattleMoveDamage = 0; - BATTLE_STRUCT->getexpStateTracker = 5; } + gBattleStruct->getexpStateTracker = 5; } break; - case 5: //looper increment - if (gBattleMoveDamage) //there is exp to give, goto case 3 that gives exp - BATTLE_STRUCT->getexpStateTracker = 3; + case 5: // looper increment + if (gBattleMoveDamage) // there is exp to give, goto case 3 that gives exp + gBattleStruct->getexpStateTracker = 3; else { - if (++BATTLE_STRUCT->expGetterID <= 5) - BATTLE_STRUCT->getexpStateTracker = 2; //loop again + gBattleStruct->expGetterID++; + if (gBattleStruct->expGetterID <= 5) + gBattleStruct->getexpStateTracker = 2; // loop again else - BATTLE_STRUCT->getexpStateTracker = 6; //we're done + gBattleStruct->getexpStateTracker = 6; // we're done } break; - case 6: //increment instruction + case 6: // increment instruction if (gBattleExecBuffer == 0) { - //not even sure why gamefreak clears that data in this place + // not sure why gf clears the item and ability here gBattleMons[gBank1].item = 0; gBattleMons[gBank1].ability = 0; gBattlescriptCurrInstr += 2; @@ -5533,1138 +5618,6 @@ static void atk23_getexp(void) break; } } -#else -__attribute__((naked)) -static void atk23_getexp(void) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - movs r6, 0\n\ - ldr r0, _0802004C @ =gSharedMem + 0x1605C\n\ - mov r10, r0\n\ - ldr r0, _08020050 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r0]\n\ - ldrb r0, [r0, 0x1]\n\ - bl GetBattleBank\n\ - ldr r1, _08020054 @ =gBank1\n\ - strb r0, [r1]\n\ - ldr r2, _08020058 @ =gSentPokesToOpponent\n\ - movs r1, 0x2\n\ - ands r1, r0\n\ - lsls r1, 24\n\ - lsrs r1, 25\n\ - adds r1, r2\n\ - ldrb r1, [r1]\n\ - mov r8, r1\n\ - mov r0, r10\n\ - subs r0, 0x4D\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x6\n\ - bls _08020040\n\ - bl _08020996\n\ -_08020040:\n\ - lsls r0, 2\n\ - ldr r1, _0802005C @ =_08020060\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ - .align 2, 0\n\ -_0802004C: .4byte gSharedMem + 0x1605C\n\ -_08020050: .4byte gBattlescriptCurrInstr\n\ -_08020054: .4byte gBank1\n\ -_08020058: .4byte gSentPokesToOpponent\n\ -_0802005C: .4byte _08020060\n\ - .align 2, 0\n\ -_08020060:\n\ - .4byte _0802007C\n\ - .4byte _080200FC\n\ - .4byte _08020216\n\ - .4byte _0802055C\n\ - .4byte _08020648\n\ - .4byte _08020910\n\ - .4byte _0802096C\n\ -_0802007C:\n\ - ldr r4, _080200A8 @ =gBank1\n\ - ldrb r0, [r4]\n\ - bl GetBankSide\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x1\n\ - bne _08020098\n\ - ldr r0, _080200AC @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - ldr r0, _080200B0 @ =0x00000982\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080200BC\n\ -_08020098:\n\ - ldr r0, _080200B4 @ =gSharedMem\n\ - ldr r1, _080200B8 @ =0x0001600f\n\ - adds r0, r1\n\ - movs r1, 0x6\n\ - strb r1, [r0]\n\ - bl _08020996\n\ - .align 2, 0\n\ -_080200A8: .4byte gBank1\n\ -_080200AC: .4byte gBattleTypeFlags\n\ -_080200B0: .4byte 0x00000982\n\ -_080200B4: .4byte gSharedMem\n\ -_080200B8: .4byte 0x0001600f\n\ -_080200BC:\n\ - ldr r2, _080200E8 @ =gSharedMem\n\ - ldr r3, _080200EC @ =0x0001600f\n\ - adds r1, r2, r3\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - ldr r0, _080200F0 @ =0x00016113\n\ - adds r2, r0\n\ - ldr r3, _080200F4 @ =gBitTable\n\ - ldr r1, _080200F8 @ =gBattlePartyID\n\ - ldrb r0, [r4]\n\ - lsls r0, 1\n\ - adds r0, r1\n\ - ldrh r0, [r0]\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - bl _08020996\n\ - .align 2, 0\n\ -_080200E8: .4byte gSharedMem\n\ -_080200EC: .4byte 0x0001600f\n\ -_080200F0: .4byte 0x00016113\n\ -_080200F4: .4byte gBitTable\n\ -_080200F8: .4byte gBattlePartyID\n\ -_080200FC:\n\ - movs r5, 0\n\ - movs r7, 0\n\ - ldr r1, _08020150 @ =gSaveBlock1 + 0x3688\n\ - mov r9, r1\n\ -_08020104:\n\ - movs r0, 0x64\n\ - adds r1, r7, 0\n\ - muls r1, r0\n\ - ldr r0, _08020154 @ =gPlayerParty\n\ - adds r4, r1, r0\n\ - adds r0, r4, 0\n\ - movs r1, 0xB\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0802016A\n\ - adds r0, r4, 0\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _0802016A\n\ - ldr r0, _08020158 @ =gBitTable\n\ - lsls r1, r7, 2\n\ - adds r1, r0\n\ - ldr r0, [r1]\n\ - mov r2, r8\n\ - ands r0, r2\n\ - cmp r0, 0\n\ - beq _08020138\n\ - adds r5, 0x1\n\ -_08020138:\n\ - adds r0, r4, 0\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xAF\n\ - bne _0802015C\n\ - mov r3, r9\n\ - ldrb r4, [r3]\n\ - b _08020164\n\ - .align 2, 0\n\ -_08020150: .4byte gSaveBlock1 + 0x3688\n\ -_08020154: .4byte gPlayerParty\n\ -_08020158: .4byte gBitTable\n\ -_0802015C:\n\ - bl ItemId_GetHoldEffect\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ -_08020164:\n\ - cmp r4, 0x19\n\ - bne _0802016A\n\ - adds r6, 0x1\n\ -_0802016A:\n\ - adds r7, 0x1\n\ - cmp r7, 0x5\n\ - ble _08020104\n\ - ldr r3, _080201D0 @ =gBaseStats\n\ - ldr r2, _080201D4 @ =gBattleMons\n\ - ldr r0, _080201D8 @ =gBank1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r1, r0\n\ - adds r1, r2\n\ - ldrh r2, [r1]\n\ - lsls r0, r2, 3\n\ - subs r0, r2\n\ - lsls r0, 2\n\ - adds r0, r3\n\ - ldrb r2, [r0, 0x9]\n\ - adds r1, 0x2A\n\ - ldrb r0, [r1]\n\ - muls r0, r2\n\ - movs r1, 0x7\n\ - bl __divsi3\n\ - lsls r0, 16\n\ - lsrs r1, r0, 16\n\ - cmp r6, 0\n\ - beq _080201E0\n\ - lsrs r4, r0, 17\n\ - adds r0, r4, 0\n\ - adds r1, r5, 0\n\ - bl __divsi3\n\ - mov r1, r10\n\ - strh r0, [r1]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bne _080201B6\n\ - movs r0, 0x1\n\ - strh r0, [r1]\n\ -_080201B6:\n\ - ldr r5, _080201DC @ =gExpShareExp\n\ - adds r0, r4, 0\n\ - adds r1, r6, 0\n\ - bl __divsi3\n\ - strh r0, [r5]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bne _080201FA\n\ - movs r0, 0x1\n\ - strh r0, [r5]\n\ - b _080201FA\n\ - .align 2, 0\n\ -_080201D0: .4byte gBaseStats\n\ -_080201D4: .4byte gBattleMons\n\ -_080201D8: .4byte gBank1\n\ -_080201DC: .4byte gExpShareExp\n\ -_080201E0:\n\ - adds r0, r1, 0\n\ - adds r1, r5, 0\n\ - bl __divsi3\n\ - mov r2, r10\n\ - strh r0, [r2]\n\ - lsls r0, 16\n\ - cmp r0, 0\n\ - bne _080201F6\n\ - movs r0, 0x1\n\ - strh r0, [r2]\n\ -_080201F6:\n\ - ldr r0, _08020248 @ =gExpShareExp\n\ - strh r6, [r0]\n\ -_080201FA:\n\ - ldr r1, _0802024C @ =gSharedMem\n\ - ldr r3, _08020250 @ =0x0001600f\n\ - adds r2, r1, r3\n\ - ldrb r0, [r2]\n\ - adds r0, 0x1\n\ - movs r3, 0\n\ - strb r0, [r2]\n\ - ldr r2, _08020254 @ =0x00016018\n\ - adds r0, r1, r2\n\ - strb r3, [r0]\n\ - ldr r3, _08020258 @ =0x0001605f\n\ - adds r1, r3\n\ - mov r0, r8\n\ - strb r0, [r1]\n\ -_08020216:\n\ - ldr r0, _0802025C @ =gBattleExecBuffer\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _08020220\n\ - b _08020996\n\ -_08020220:\n\ - ldr r0, _0802024C @ =gSharedMem\n\ - ldr r1, _08020254 @ =0x00016018\n\ - adds r0, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020260 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0xC\n\ - bl GetMonData\n\ - lsls r0, 16\n\ - lsrs r0, 16\n\ - cmp r0, 0xAF\n\ - bne _0802026C\n\ - ldr r0, _08020264 @ =gSaveBlock1\n\ - ldr r2, _08020268 @ =0x00003688\n\ - adds r0, r2\n\ - ldrb r4, [r0]\n\ - b _08020274\n\ - .align 2, 0\n\ -_08020248: .4byte gExpShareExp\n\ -_0802024C: .4byte gSharedMem\n\ -_08020250: .4byte 0x0001600f\n\ -_08020254: .4byte 0x00016018\n\ -_08020258: .4byte 0x0001605f\n\ -_0802025C: .4byte gBattleExecBuffer\n\ -_08020260: .4byte gPlayerParty\n\ -_08020264: .4byte gSaveBlock1\n\ -_08020268: .4byte 0x00003688\n\ -_0802026C:\n\ - bl ItemId_GetHoldEffect\n\ - lsls r0, 24\n\ - lsrs r4, r0, 24\n\ -_08020274:\n\ - ldr r5, _08020294 @ =gSharedMem\n\ - cmp r4, 0x19\n\ - beq _080202A0\n\ - ldr r3, _08020298 @ =0x0001605f\n\ - adds r1, r5, r3\n\ - ldrb r0, [r1]\n\ - movs r2, 0x1\n\ - ands r2, r0\n\ - cmp r2, 0\n\ - bne _080202A0\n\ - lsrs r0, 1\n\ - strb r0, [r1]\n\ - ldr r0, _0802029C @ =0x0001600f\n\ - adds r1, r5, r0\n\ - b _080202C8\n\ - .align 2, 0\n\ -_08020294: .4byte gSharedMem\n\ -_08020298: .4byte 0x0001605f\n\ -_0802029C: .4byte 0x0001600f\n\ -_080202A0:\n\ - ldr r1, _080202D4 @ =0x00016018\n\ - adds r0, r5, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _080202D8 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - cmp r0, 0x64\n\ - bne _080202E8\n\ - ldr r2, _080202DC @ =0x0001605f\n\ - adds r1, r5, r2\n\ - ldrb r0, [r1]\n\ - lsrs r0, 1\n\ - movs r2, 0\n\ - strb r0, [r1]\n\ - ldr r3, _080202E0 @ =0x0001600f\n\ - adds r1, r5, r3\n\ -_080202C8:\n\ - movs r0, 0x5\n\ - strb r0, [r1]\n\ - ldr r0, _080202E4 @ =gBattleMoveDamage\n\ - str r2, [r0]\n\ - b _08020996\n\ - .align 2, 0\n\ -_080202D4: .4byte 0x00016018\n\ -_080202D8: .4byte gPlayerParty\n\ -_080202DC: .4byte 0x0001605f\n\ -_080202E0: .4byte 0x0001600f\n\ -_080202E4: .4byte gBattleMoveDamage\n\ -_080202E8:\n\ - ldr r0, _0802034C @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - bne _08020316\n\ - ldr r0, _08020350 @ =gBattleMons\n\ - ldrh r0, [r0, 0x28]\n\ - cmp r0, 0\n\ - beq _08020316\n\ - ldr r0, _08020354 @ =0x0001601b\n\ - adds r5, r0\n\ - ldrb r0, [r5]\n\ - cmp r0, 0\n\ - bne _08020316\n\ - bl BattleMusicStop\n\ - ldr r0, _08020358 @ =0x00000161\n\ - bl PlayBGM\n\ - ldrb r0, [r5]\n\ - adds r0, 0x1\n\ - strb r0, [r5]\n\ -_08020316:\n\ - ldr r5, _0802035C @ =gSharedMem\n\ - ldr r1, _08020360 @ =0x00016018\n\ - adds r0, r5, r1\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020364 @ =gPlayerParty\n\ - adds r0, r1\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - bne _08020332\n\ - b _0802051E\n\ -_08020332:\n\ - ldr r2, _08020368 @ =0x0001605f\n\ - adds r0, r5, r2\n\ - ldrb r0, [r0]\n\ - movs r3, 0x1\n\ - ands r3, r0\n\ - cmp r3, 0\n\ - beq _08020370\n\ - ldr r1, _0802036C @ =gBattleMoveDamage\n\ - mov r3, r10\n\ - ldrh r0, [r3]\n\ - str r0, [r1]\n\ - mov r8, r1\n\ - b _08020376\n\ - .align 2, 0\n\ -_0802034C: .4byte gBattleTypeFlags\n\ -_08020350: .4byte gBattleMons\n\ -_08020354: .4byte 0x0001601b\n\ -_08020358: .4byte 0x00000161\n\ -_0802035C: .4byte gSharedMem\n\ -_08020360: .4byte 0x00016018\n\ -_08020364: .4byte gPlayerParty\n\ -_08020368: .4byte 0x0001605f\n\ -_0802036C: .4byte gBattleMoveDamage\n\ -_08020370:\n\ - ldr r0, _080203EC @ =gBattleMoveDamage\n\ - str r3, [r0]\n\ - mov r8, r0\n\ -_08020376:\n\ - cmp r4, 0x19\n\ - bne _08020386\n\ - ldr r0, _080203F0 @ =gExpShareExp\n\ - ldrh r1, [r0]\n\ - mov r2, r8\n\ - ldr r0, [r2]\n\ - adds r0, r1\n\ - str r0, [r2]\n\ -_08020386:\n\ - cmp r4, 0x28\n\ - bne _0802039C\n\ - mov r3, r8\n\ - ldr r1, [r3]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - mov r1, r8\n\ - str r0, [r1]\n\ -_0802039C:\n\ - ldr r0, _080203F4 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080203B8\n\ - ldr r4, _080203EC @ =gBattleMoveDamage\n\ - ldr r1, [r4]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - str r0, [r4]\n\ -_080203B8:\n\ - ldr r0, _080203F8 @ =gSharedMem\n\ - ldr r2, _080203FC @ =0x00016018\n\ - adds r0, r2\n\ - ldrb r1, [r0]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020400 @ =gPlayerParty\n\ - adds r0, r1\n\ - bl IsTradedMon\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08020404\n\ - ldr r4, _080203EC @ =gBattleMoveDamage\n\ - ldr r1, [r4]\n\ - movs r0, 0x96\n\ - muls r0, r1\n\ - movs r1, 0x64\n\ - bl __divsi3\n\ - str r0, [r4]\n\ - movs r7, 0xA5\n\ - lsls r7, 1\n\ - mov r8, r4\n\ - b _0802040A\n\ - .align 2, 0\n\ -_080203EC: .4byte gBattleMoveDamage\n\ -_080203F0: .4byte gExpShareExp\n\ -_080203F4: .4byte gBattleTypeFlags\n\ -_080203F8: .4byte gSharedMem\n\ -_080203FC: .4byte 0x00016018\n\ -_08020400: .4byte gPlayerParty\n\ -_08020404:\n\ - ldr r7, _0802043C @ =0x00000149\n\ - ldr r3, _08020440 @ =gBattleMoveDamage\n\ - mov r8, r3\n\ -_0802040A:\n\ - ldr r0, _08020444 @ =gBattleTypeFlags\n\ - ldrh r0, [r0]\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - beq _08020488\n\ - ldr r1, _08020448 @ =gBattlePartyID\n\ - ldr r0, _0802044C @ =gSharedMem\n\ - ldr r3, _08020450 @ =0x00016018\n\ - adds r2, r0, r3\n\ - ldrh r1, [r1, 0x4]\n\ - adds r5, r0, 0\n\ - ldr r4, _08020454 @ =gBitTable\n\ - ldr r3, _08020458 @ =gAbsentBankFlags\n\ - ldrb r2, [r2]\n\ - cmp r1, r2\n\ - bne _08020460\n\ - ldrb r1, [r3]\n\ - ldr r0, [r4, 0x8]\n\ - ands r1, r0\n\ - cmp r1, 0\n\ - bne _08020460\n\ - ldr r0, _0802045C @ =0x000160a2\n\ - adds r1, r5, r0\n\ - b _0802047C\n\ - .align 2, 0\n\ -_0802043C: .4byte 0x00000149\n\ -_08020440: .4byte gBattleMoveDamage\n\ -_08020444: .4byte gBattleTypeFlags\n\ -_08020448: .4byte gBattlePartyID\n\ -_0802044C: .4byte gSharedMem\n\ -_08020450: .4byte 0x00016018\n\ -_08020454: .4byte gBitTable\n\ -_08020458: .4byte gAbsentBankFlags\n\ -_0802045C: .4byte 0x000160a2\n\ -_08020460:\n\ - ldrb r2, [r3]\n\ - ldr r0, [r4]\n\ - ands r2, r0\n\ - cmp r2, 0\n\ - bne _08020478\n\ - ldr r1, _08020474 @ =0x000160a2\n\ - adds r0, r5, r1\n\ - strb r2, [r0]\n\ - b _08020490\n\ - .align 2, 0\n\ -_08020474: .4byte 0x000160a2\n\ -_08020478:\n\ - ldr r2, _08020484 @ =0x000160a2\n\ - adds r1, r5, r2\n\ -_0802047C:\n\ - movs r0, 0x2\n\ - strb r0, [r1]\n\ - b _08020490\n\ - .align 2, 0\n\ -_08020484: .4byte 0x000160a2\n\ -_08020488:\n\ - ldr r0, _08020530 @ =gSharedMem\n\ - ldr r3, _08020534 @ =0x000160a2\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ -_08020490:\n\ - ldr r1, _08020538 @ =gBattleTextBuff1\n\ - movs r3, 0\n\ - movs r2, 0xFD\n\ - strb r2, [r1]\n\ - movs r5, 0x4\n\ - strb r5, [r1, 0x1]\n\ - ldr r4, _08020530 @ =gSharedMem\n\ - ldr r0, _08020534 @ =0x000160a2\n\ - adds r6, r4, r0\n\ - ldrb r0, [r6]\n\ - strb r0, [r1, 0x2]\n\ - ldr r0, _0802053C @ =0x00016018\n\ - adds r4, r0\n\ - ldrb r0, [r4]\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - ldr r1, _08020540 @ =gBattleTextBuff2\n\ - strb r2, [r1]\n\ - strb r3, [r1, 0x1]\n\ - strb r7, [r1, 0x2]\n\ - movs r3, 0xFF\n\ - lsls r3, 8\n\ - ands r7, r3\n\ - asrs r0, r7, 8\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r1, 0x4]\n\ - ldr r1, _08020544 @ =gBattleTextBuff3\n\ - strb r2, [r1]\n\ - movs r0, 0x1\n\ - strb r0, [r1, 0x1]\n\ - strb r5, [r1, 0x2]\n\ - movs r0, 0x5\n\ - strb r0, [r1, 0x3]\n\ - mov r0, r8\n\ - ldr r2, [r0]\n\ - strb r2, [r1, 0x4]\n\ - adds r0, r2, 0\n\ - ands r0, r3\n\ - asrs r0, 8\n\ - strb r0, [r1, 0x5]\n\ - movs r0, 0xFF\n\ - lsls r0, 16\n\ - ands r0, r2\n\ - asrs r0, 16\n\ - strb r0, [r1, 0x6]\n\ - lsrs r2, 24\n\ - strb r2, [r1, 0x7]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r1, 0x8]\n\ - ldrb r1, [r6]\n\ - movs r0, 0xD\n\ - bl PrepareStringBattle\n\ - ldrb r1, [r4]\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _08020548 @ =gPlayerParty\n\ - adds r0, r1\n\ - ldr r3, _0802054C @ =gBattleMons\n\ - ldr r1, _08020550 @ =gBank1\n\ - ldrb r2, [r1]\n\ - movs r1, 0x58\n\ - muls r1, r2\n\ - adds r1, r3\n\ - ldrh r1, [r1]\n\ - bl MonGainEVs\n\ -_0802051E:\n\ - ldr r1, _08020530 @ =gSharedMem\n\ - ldr r3, _08020554 @ =0x0001605f\n\ - adds r2, r1, r3\n\ - ldrb r0, [r2]\n\ - lsrs r0, 1\n\ - strb r0, [r2]\n\ - ldr r0, _08020558 @ =0x0001600f\n\ - adds r1, r0\n\ - b _08020618\n\ - .align 2, 0\n\ -_08020530: .4byte gSharedMem\n\ -_08020534: .4byte 0x000160a2\n\ -_08020538: .4byte gBattleTextBuff1\n\ -_0802053C: .4byte 0x00016018\n\ -_08020540: .4byte gBattleTextBuff2\n\ -_08020544: .4byte gBattleTextBuff3\n\ -_08020548: .4byte gPlayerParty\n\ -_0802054C: .4byte gBattleMons\n\ -_08020550: .4byte gBank1\n\ -_08020554: .4byte 0x0001605f\n\ -_08020558: .4byte 0x0001600f\n\ -_0802055C:\n\ - ldr r0, _08020620 @ =gBattleExecBuffer\n\ - ldr r2, [r0]\n\ - cmp r2, 0\n\ - beq _08020566\n\ - b _08020996\n\ -_08020566:\n\ - ldr r1, _08020624 @ =gBattleBufferB\n\ - ldr r4, _08020628 @ =gSharedMem\n\ - ldr r3, _0802062C @ =0x000160a2\n\ - adds r3, r4\n\ - mov r8, r3\n\ - ldrb r0, [r3]\n\ - lsls r0, 9\n\ - adds r0, r1\n\ - strb r2, [r0]\n\ - ldr r0, _08020630 @ =0x00016018\n\ - adds r7, r4, r0\n\ - ldrb r0, [r7]\n\ - movs r6, 0x64\n\ - muls r0, r6\n\ - ldr r5, _08020634 @ =gPlayerParty\n\ - adds r0, r5\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - cmp r0, 0\n\ - beq _08020612\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - cmp r0, 0x64\n\ - beq _08020612\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3A\n\ - bl GetMonData\n\ - ldr r1, _08020638 @ =0x00017180\n\ - adds r4, r1\n\ - strh r0, [r4]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3B\n\ - bl GetMonData\n\ - strh r0, [r4, 0x2]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3C\n\ - bl GetMonData\n\ - strh r0, [r4, 0x4]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - strh r0, [r4, 0x6]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3E\n\ - bl GetMonData\n\ - strh r0, [r4, 0x8]\n\ - ldrb r0, [r7]\n\ - muls r0, r6\n\ - adds r0, r5\n\ - movs r1, 0x3F\n\ - bl GetMonData\n\ - strh r0, [r4, 0xA]\n\ - ldr r4, _0802063C @ =gActiveBank\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - strb r0, [r4]\n\ - ldrb r1, [r7]\n\ - ldr r0, _08020640 @ =gBattleMoveDamage\n\ - ldrh r2, [r0]\n\ - movs r0, 0\n\ - bl EmitExpBarUpdate\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ -_08020612:\n\ - ldr r1, _08020628 @ =gSharedMem\n\ - ldr r3, _08020644 @ =0x0001600f\n\ - adds r1, r3\n\ -_08020618:\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020620: .4byte gBattleExecBuffer\n\ -_08020624: .4byte gBattleBufferB\n\ -_08020628: .4byte gSharedMem\n\ -_0802062C: .4byte 0x000160a2\n\ -_08020630: .4byte 0x00016018\n\ -_08020634: .4byte gPlayerParty\n\ -_08020638: .4byte 0x00017180\n\ -_0802063C: .4byte gActiveBank\n\ -_08020640: .4byte gBattleMoveDamage\n\ -_08020644: .4byte 0x0001600f\n\ -_08020648:\n\ - ldr r0, _080208AC @ =gBattleExecBuffer\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _08020652\n\ - b _08020996\n\ -_08020652:\n\ - ldr r1, _080208B0 @ =gActiveBank\n\ - ldr r4, _080208B4 @ =gSharedMem\n\ - ldr r2, _080208B8 @ =0x000160a2\n\ - adds r0, r4, r2\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldr r2, _080208BC @ =gBattleBufferB\n\ - ldrb r3, [r1]\n\ - lsls r1, r3, 9\n\ - adds r0, r1, r2\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x21\n\ - beq _0802066E\n\ - b _080208F0\n\ -_0802066E:\n\ - adds r0, r2, 0x1\n\ - adds r0, r1, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, 0xB\n\ - beq _0802067A\n\ - b _080208F0\n\ -_0802067A:\n\ - ldr r0, _080208C0 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x8\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080206A8\n\ - ldr r1, _080208C4 @ =gBattlePartyID\n\ - lsls r0, r3, 1\n\ - adds r2, r0, r1\n\ - ldr r0, _080208C8 @ =0x00016018\n\ - adds r1, r4, r0\n\ - ldrh r0, [r2]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bne _080206A8\n\ - adds r1, r0, 0\n\ - movs r0, 0x64\n\ - muls r0, r1\n\ - ldr r1, _080208CC @ =gPlayerParty\n\ - adds r0, r1\n\ - adds r1, r3, 0\n\ - bl sub_80324F8\n\ -_080206A8:\n\ - ldr r1, _080208D0 @ =gBattleTextBuff1\n\ - movs r2, 0xFD\n\ - strb r2, [r1]\n\ - movs r0, 0x4\n\ - strb r0, [r1, 0x1]\n\ - ldr r5, _080208B0 @ =gActiveBank\n\ - ldrb r0, [r5]\n\ - strb r0, [r1, 0x2]\n\ - ldr r0, _080208B4 @ =gSharedMem\n\ - ldr r3, _080208C8 @ =0x00016018\n\ - adds r6, r0, r3\n\ - ldrb r0, [r6]\n\ - strb r0, [r1, 0x3]\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x4]\n\ - ldr r4, _080208D4 @ =gBattleTextBuff2\n\ - strb r2, [r4]\n\ - movs r0, 0x1\n\ - strb r0, [r4, 0x1]\n\ - strb r0, [r4, 0x2]\n\ - movs r0, 0x3\n\ - strb r0, [r4, 0x3]\n\ - ldrb r0, [r6]\n\ - movs r1, 0x64\n\ - mov r8, r1\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - ldr r7, _080208CC @ =gPlayerParty\n\ - adds r0, r7\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - strb r0, [r4, 0x4]\n\ - movs r0, 0x1\n\ - negs r0, r0\n\ - strb r0, [r4, 0x5]\n\ - bl BattleScriptPushCursor\n\ - ldr r2, _080208D8 @ =gLeveledUpInBattle\n\ - ldr r1, _080208DC @ =gBitTable\n\ - ldrb r0, [r6]\n\ - lsls r0, 2\n\ - adds r0, r1\n\ - ldr r0, [r0]\n\ - ldrb r1, [r2]\n\ - orrs r0, r1\n\ - strb r0, [r2]\n\ - ldr r1, _080208E0 @ =gBattlescriptCurrInstr\n\ - ldr r0, _080208E4 @ =BattleScript_LevelUp\n\ - str r0, [r1]\n\ - ldr r4, _080208E8 @ =gBattleMoveDamage\n\ - ldr r2, _080208BC @ =gBattleBufferB\n\ - ldrb r1, [r5]\n\ - lsls r1, 9\n\ - adds r0, r2, 0x2\n\ - adds r0, r1, r0\n\ - ldrb r3, [r0]\n\ - adds r2, 0x3\n\ - adds r1, r2\n\ - ldrb r0, [r1]\n\ - lsls r0, 8\n\ - orrs r3, r0\n\ - str r3, [r4]\n\ - ldrb r0, [r6]\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r0, r7\n\ - movs r1, 0\n\ - bl AdjustFriendship\n\ - ldr r0, _080208C4 @ =gBattlePartyID\n\ - ldrb r1, [r6]\n\ - ldrh r0, [r0]\n\ - cmp r0, r1\n\ - bne _080207EC\n\ - ldr r4, _080208EC @ =gBattleMons\n\ - ldrh r0, [r4, 0x28]\n\ - cmp r0, 0\n\ - beq _080207EC\n\ - mov r0, r8\n\ - muls r0, r1\n\ - adds r0, r7\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - adds r1, r4, 0\n\ - adds r1, 0x2A\n\ - strb r0, [r1]\n\ - ldrb r0, [r6]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r7\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - strh r0, [r4, 0x28]\n\ - ldrb r0, [r6]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r7\n\ - movs r1, 0x3A\n\ - bl GetMonData\n\ - strh r0, [r4, 0x2C]\n\ - ldrb r0, [r6]\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r0, r7\n\ - movs r1, 0x3B\n\ - bl GetMonData\n\ - strh r0, [r4, 0x2]\n\ - ldrb r0, [r6]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r7\n\ - movs r1, 0x3C\n\ - bl GetMonData\n\ - strh r0, [r4, 0x4]\n\ - ldrb r0, [r6]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r7\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - strh r0, [r4, 0x6]\n\ - ldrb r0, [r6]\n\ - mov r3, r8\n\ - muls r3, r0\n\ - adds r0, r3, 0\n\ - adds r0, r7\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - strh r0, [r4, 0x6]\n\ - ldrb r0, [r6]\n\ - mov r1, r8\n\ - muls r1, r0\n\ - adds r0, r1, 0\n\ - adds r0, r7\n\ - movs r1, 0x3E\n\ - bl GetMonData\n\ - strh r0, [r4, 0x8]\n\ - ldrb r0, [r6]\n\ - mov r2, r8\n\ - muls r2, r0\n\ - adds r0, r2, 0\n\ - adds r0, r7\n\ - movs r1, 0x3F\n\ - bl GetMonData\n\ - strh r0, [r4, 0xA]\n\ -_080207EC:\n\ - ldr r0, _080208C4 @ =gBattlePartyID\n\ - ldr r1, _080208B4 @ =gSharedMem\n\ - ldr r3, _080208C8 @ =0x00016018\n\ - adds r7, r1, r3\n\ - ldrb r2, [r7]\n\ - ldrh r0, [r0, 0x4]\n\ - cmp r0, r2\n\ - bne _080208F6\n\ - ldr r6, _080208EC @ =gBattleMons\n\ - movs r0, 0xD8\n\ - adds r0, r6\n\ - mov r8, r0\n\ - ldrh r0, [r0]\n\ - cmp r0, 0\n\ - beq _080208F6\n\ - ldr r0, _080208C0 @ =gBattleTypeFlags\n\ - ldrh r1, [r0]\n\ - movs r0, 0x1\n\ - ands r0, r1\n\ - cmp r0, 0\n\ - beq _080208F6\n\ - movs r5, 0x64\n\ - adds r0, r2, 0\n\ - muls r0, r5\n\ - ldr r4, _080208CC @ =gPlayerParty\n\ - adds r0, r4\n\ - movs r1, 0x38\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xDA\n\ - strb r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x39\n\ - bl GetMonData\n\ - mov r1, r8\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3A\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xDC\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3B\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xB2\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3C\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xB4\n\ - strh r0, [r1]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - movs r2, 0xB6\n\ - adds r2, r6\n\ - mov r8, r2\n\ - strh r0, [r2]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3D\n\ - bl GetMonData\n\ - mov r3, r8\n\ - strh r0, [r3]\n\ - ldrb r0, [r7]\n\ - muls r0, r5\n\ - adds r0, r4\n\ - movs r1, 0x3E\n\ - bl GetMonData\n\ - adds r1, r6, 0\n\ - adds r1, 0xB8\n\ - strh r0, [r1]\n\ - b _080208F6\n\ - .align 2, 0\n\ -_080208AC: .4byte gBattleExecBuffer\n\ -_080208B0: .4byte gActiveBank\n\ -_080208B4: .4byte gSharedMem\n\ -_080208B8: .4byte 0x000160a2\n\ -_080208BC: .4byte gBattleBufferB\n\ -_080208C0: .4byte gBattleTypeFlags\n\ -_080208C4: .4byte gBattlePartyID\n\ -_080208C8: .4byte 0x00016018\n\ -_080208CC: .4byte gPlayerParty\n\ -_080208D0: .4byte gBattleTextBuff1\n\ -_080208D4: .4byte gBattleTextBuff2\n\ -_080208D8: .4byte gLeveledUpInBattle\n\ -_080208DC: .4byte gBitTable\n\ -_080208E0: .4byte gBattlescriptCurrInstr\n\ -_080208E4: .4byte BattleScript_LevelUp\n\ -_080208E8: .4byte gBattleMoveDamage\n\ -_080208EC: .4byte gBattleMons\n\ -_080208F0:\n\ - ldr r1, _08020904 @ =gBattleMoveDamage\n\ - movs r0, 0\n\ - str r0, [r1]\n\ -_080208F6:\n\ - ldr r0, _08020908 @ =gSharedMem\n\ - ldr r1, _0802090C @ =0x0001600f\n\ - adds r0, r1\n\ - movs r1, 0x5\n\ - strb r1, [r0]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020904: .4byte gBattleMoveDamage\n\ -_08020908: .4byte gSharedMem\n\ -_0802090C: .4byte 0x0001600f\n\ -_08020910:\n\ - ldr r0, _08020924 @ =gBattleMoveDamage\n\ - ldr r0, [r0]\n\ - cmp r0, 0\n\ - beq _08020930\n\ - ldr r0, _08020928 @ =gSharedMem\n\ - ldr r2, _0802092C @ =0x0001600f\n\ - adds r0, r2\n\ - movs r1, 0x3\n\ - strb r1, [r0]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020924: .4byte gBattleMoveDamage\n\ -_08020928: .4byte gSharedMem\n\ -_0802092C: .4byte 0x0001600f\n\ -_08020930:\n\ - ldr r2, _08020950 @ =gSharedMem\n\ - ldr r3, _08020954 @ =0x00016018\n\ - adds r1, r2, r3\n\ - ldrb r0, [r1]\n\ - adds r0, 0x1\n\ - strb r0, [r1]\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - cmp r0, 0x5\n\ - bhi _0802095C\n\ - ldr r0, _08020958 @ =0x0001600f\n\ - adds r1, r2, r0\n\ - movs r0, 0x2\n\ - strb r0, [r1]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020950: .4byte gSharedMem\n\ -_08020954: .4byte 0x00016018\n\ -_08020958: .4byte 0x0001600f\n\ -_0802095C:\n\ - ldr r3, _08020968 @ =0x0001600f\n\ - adds r1, r2, r3\n\ - movs r0, 0x6\n\ - strb r0, [r1]\n\ - b _08020996\n\ - .align 2, 0\n\ -_08020968: .4byte 0x0001600f\n\ -_0802096C:\n\ - ldr r0, _080209A4 @ =gBattleExecBuffer\n\ - ldr r5, [r0]\n\ - cmp r5, 0\n\ - bne _08020996\n\ - ldr r4, _080209A8 @ =gBattleMons\n\ - ldr r2, _080209AC @ =gBank1\n\ - ldrb r0, [r2]\n\ - movs r1, 0x58\n\ - muls r0, r1\n\ - adds r0, r4\n\ - movs r3, 0\n\ - strh r5, [r0, 0x2E]\n\ - ldrb r0, [r2]\n\ - muls r0, r1\n\ - adds r0, r4\n\ - adds r0, 0x20\n\ - strb r3, [r0]\n\ - ldr r1, _080209B0 @ =gBattlescriptCurrInstr\n\ - ldr r0, [r1]\n\ - adds r0, 0x2\n\ - str r0, [r1]\n\ -_08020996:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r0}\n\ - bx r0\n\ - .align 2, 0\n\ -_080209A4: .4byte gBattleExecBuffer\n\ -_080209A8: .4byte gBattleMons\n\ -_080209AC: .4byte gBank1\n\ -_080209B0: .4byte gBattlescriptCurrInstr\n\ - .syntax divided\n"); -} - -#endif // NONMATCHING #ifdef NONMATCHING static void atk24(void) @@ -6952,7 +5905,7 @@ _08020B50: .4byte gBattlescriptCurrInstr\n\ static void MoveValuesCleanUp(void) { gBattleMoveFlags = 0; - BATTLE_STRUCT->dmgMultiplier = 1; + gBattleStruct->dmgMultiplier = 1; gCritMultiplier = 1; gBattleCommunication[MOVE_EFFECT_BYTE] = 0; gBattleCommunication[6] = 0; @@ -7417,7 +6370,7 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po static void atk47_setgraphicalstatchangevalues(void) { u8 to_add = 0; - switch (BATTLE_STRUCT->statChanger & 0xF0) + switch (gBattleStruct->statChanger & 0xF0) { case 0x10: //+1 to_add = 0xF; @@ -7432,8 +6385,8 @@ static void atk47_setgraphicalstatchangevalues(void) to_add = 0x2E; break; } - BATTLE_STRUCT->animArg1 = (BATTLE_STRUCT->statChanger & 0xF) + to_add - 1; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = (gBattleStruct->statChanger & 0xF) + to_add - 1; + gBattleStruct->animArg2 = 0; gBattlescriptCurrInstr++; } @@ -7507,14 +6460,14 @@ static void atk48_playstatchangeanimation(void) stat_animID = 0x38; } if ((T2_READ_8(gBattlescriptCurrInstr + 3) & 2 && changeable_stats <= 1) - || changeable_stats == 0 || BATTLE_STRUCT->filler2[0] != 0) + || changeable_stats == 0 || gBattleStruct->filler2[0] != 0) gBattlescriptCurrInstr += 4; else { EmitBattleAnimation(0, 1, stat_animID); MarkBufferBankForExecution(gActiveBank); if ((T2_READ_8(gBattlescriptCurrInstr + 3) & 4) && changeable_stats > 1) - BATTLE_STRUCT->filler2[0] = 1; + gBattleStruct->filler2[0] = 1; gBattlescriptCurrInstr += 4; } } @@ -7807,14 +6760,14 @@ static void atk49_moveend(void) hold_effect_atk = ItemId_GetHoldEffect(gBattleMons[gBankTarget].item); choiced_move_atk = (u16*)(gBankAttacker * (ewram_addr + 0x160E8)); - if (BATTLE_STRUCT->dynamicMoveType) - move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F; + if (gBattleStruct->dynamicMoveType) + move_type = gBattleStruct->dynamicMoveType & 0x3F; else move_type = gBattleMoves[gCurrentMove].type; do { - switch (BATTLE_STRUCT->cmd49StateTracker) + switch (gBattleStruct->cmd49StateTracker) { case 0: //rage check if (gBattleMons[gBankTarget].status2 & STATUS2_RAGE @@ -7828,7 +6781,7 @@ static void atk49_moveend(void) gBattlescriptCurrInstr = BattleScript_RageIsBuilding; effect = 1; } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 1: //defrosting check if (gBattleMons[gBankTarget].status1 & STATUS_FREEZE @@ -7844,28 +6797,28 @@ static void atk49_moveend(void) gBattlescriptCurrInstr = BattleScript_DefrostedViaFireMove; effect = 1; } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 2: //target synchronize if (AbilityBattleEffects(ABILITYEFFECT_SYNCHRONIZE, gBankTarget, 0, 0, 0)) effect = 1; - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 3: //contact abilities if (AbilityBattleEffects(ABILITYEFFECT_CONTACT, gBankTarget, 0, 0, 0)) effect = 1; - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 4: //status immunities if (AbilityBattleEffects(ABILITYEFFECT_IMMUNITY, 0, 0, 0, 0)) effect = 1; //it loops through 4 banks, so we increment after its done with all banks else - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 5: //attacker synchronize if (AbilityBattleEffects(ABILITYEFFECT_ATK_SYNCHRONIZE, gBankAttacker, 0, 0, 0)) effect = 1; - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 6: //update choice band move if (gHitMarker & HITMARKER_OBEYS && hold_effect_atk == HOLD_EFFECT_CHOICE_BAND @@ -7877,7 +6830,7 @@ static void atk49_moveend(void) if (i == 4) *choiced_move_atk = 0; } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 7: //changed held items for (i = 0; i < gNoOfAllBanks; i++) @@ -7886,7 +6839,7 @@ static void atk49_moveend(void) if (CHANGED_ITEM(i)) gBattleMons[i].item = CHANGED_ITEM(i); } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 8: //make sprite invisible if (gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER) @@ -7896,7 +6849,7 @@ static void atk49_moveend(void) EmitSpriteInvisibility(0, 1); MarkBufferBankForExecution(gActiveBank); } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 9: //semi-invlurneable attacker make visible if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankAttacker] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) @@ -7908,7 +6861,7 @@ static void atk49_moveend(void) gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER); gSpecialStatuses[gBankAttacker].restored_bank_sprite = 1; } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 10: //semi-invlurneable target make visible if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) || !(gStatuses3[gBankTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER)) @@ -7920,7 +6873,7 @@ static void atk49_moveend(void) gStatuses3 &= ~(STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER); gSpecialStatuses[gBankTarget].restored_bank_sprite = 1; } - BATTLE_STRUCT->cmd49StateTracker++; + gBattleStruct->cmd49StateTracker++; break; case 11: // } @@ -8865,7 +7818,7 @@ _08021FA0:\n\ ldr r0, _08021FD4 @ =0x0000ffff\n\ cmp r2, r0\n\ bne _08021FEC\n\ - ldr r1, _08021FE8 @ =gMoveHitWith\n\ + ldr r1, _08021FE8 @ =gLastLandedMoves\n\ ldr r4, _08021FDC @ =gBankTarget\n\ ldrb r0, [r4]\n\ lsls r0, 1\n\ @@ -8879,9 +7832,9 @@ _08021FD8: .4byte gUnknown_02024C4C\n\ _08021FDC: .4byte gBankTarget\n\ _08021FE0: .4byte gUnknown_02024C5C\n\ _08021FE4: .4byte gBattleMoveFlags\n\ -_08021FE8: .4byte gMoveHitWith\n\ +_08021FE8: .4byte gLastLandedMoves\n\ _08021FEC:\n\ - ldr r0, _08022014 @ =gMoveHitWith\n\ + ldr r0, _08022014 @ =gLastLandedMoves\n\ ldr r5, _08022018 @ =gBankTarget\n\ ldrb r1, [r5]\n\ lsls r1, 1\n\ @@ -8894,7 +7847,7 @@ _08021FEC:\n\ ldrb r3, [r0]\n\ cmp r3, 0\n\ beq _08022028\n\ - ldr r0, _08022024 @ =gUnknown_02024C44\n\ + ldr r0, _08022024 @ =gLastHitByType\n\ ldrb r1, [r5]\n\ lsls r1, 1\n\ adds r1, r0\n\ @@ -8902,13 +7855,13 @@ _08021FEC:\n\ ands r0, r3\n\ b _08021C22\n\ .align 2, 0\n\ -_08022014: .4byte gMoveHitWith\n\ +_08022014: .4byte gLastLandedMoves\n\ _08022018: .4byte gBankTarget\n\ _0802201C: .4byte gCurrentMove\n\ _08022020: .4byte 0x0001601c\n\ -_08022024: .4byte gUnknown_02024C44\n\ +_08022024: .4byte gLastHitByType\n\ _08022028:\n\ - ldr r0, _08022044 @ =gUnknown_02024C44\n\ + ldr r0, _08022044 @ =gLastHitByType\n\ ldr r1, _08022048 @ =gBankTarget\n\ ldrb r2, [r1]\n\ lsls r2, 1\n\ @@ -8922,10 +7875,10 @@ _08022028:\n\ strh r0, [r2]\n\ b _08022244\n\ .align 2, 0\n\ -_08022044: .4byte gUnknown_02024C44\n\ +_08022044: .4byte gLastHitByType\n\ _08022048: .4byte gBankTarget\n\ _0802204C:\n\ - ldr r0, _0802205C @ =gMoveHitWith\n\ + ldr r0, _0802205C @ =gLastLandedMoves\n\ ldr r2, _08022060 @ =gBankTarget\n\ ldrb r1, [r2]\n\ lsls r1, 1\n\ @@ -8933,7 +7886,7 @@ _0802204C:\n\ ldr r0, _08022064 @ =0x0000ffff\n\ b _08021C22\n\ .align 2, 0\n\ -_0802205C: .4byte gMoveHitWith\n\ +_0802205C: .4byte gLastLandedMoves\n\ _08022060: .4byte gBankTarget\n\ _08022064: .4byte 0x0000ffff\n\ _08022068:\n\ @@ -9250,7 +8203,7 @@ static void atk4A_typecalc2(void) { gLastUsedAbility = gBattleMons[gBankTarget].ability; gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED); - gMoveHitWith[gBankTarget] = 0; + gLastLandedMoves[gBankTarget] = 0; gBattleCommunication[6] = move_type; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } @@ -9305,7 +8258,7 @@ static void atk4A_typecalc2(void) { gLastUsedAbility = ABILITY_WONDER_GUARD; gBattleMoveFlags |= MOVESTATUS_MISSED; - gMoveHitWith[gBankTarget] = 0; + gLastLandedMoves[gBankTarget] = 0; gBattleCommunication[6] = 3; RecordAbilityBattle(gBankTarget, gLastUsedAbility); } @@ -9384,7 +8337,7 @@ static void atk4D_switchindataupdate(void) gBattleMons[gActiveBank].status2 = OldData.status2; } SwitchInClearStructs(); - BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleStruct->scriptingActive = gActiveBank; gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 7; gBattleTextBuff1[2] = gActiveBank; @@ -9484,7 +8437,7 @@ static void atk4F_jumpifcantswitch(void) void sub_8022A3C(u8 unkown) { BATTLE_PARTY_ID(gActiveBank) = gBattlePartyID[gActiveBank]; - EmitChoosePokemon(0, 1, unkown, 0, BATTLE_STRUCT->unk1606C[gActiveBank]); + EmitChoosePokemon(0, 1, unkown, 0, gBattleStruct->unk1606C[gActiveBank]); MarkBufferBankForExecution(gActiveBank); } @@ -10630,7 +9583,7 @@ static void atk52_switchineffects(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleStruct->scriptingActive = gActiveBank; BattleScriptPushCursor(); if (T2_READ_8(gBattlescriptCurrInstr + 1) == 0) @@ -10737,9 +9690,9 @@ void atk59_handlelearnnewmove(void) u8* loc1 = T1_READ_PTR(gBattlescriptCurrInstr + 1); u8* loc2 = T1_READ_PTR(gBattlescriptCurrInstr + 5); - u16 ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], T2_READ_8(gBattlescriptCurrInstr + 9)); + u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterID], T2_READ_8(gBattlescriptCurrInstr + 9)); while (ret == 0xFFFE) - ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0); + ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterID], 0); if (ret == 0) { @@ -10752,12 +9705,12 @@ void atk59_handlelearnnewmove(void) else { gActiveBank = GetBankByIdentity(0); - if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) + if (gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) //what is else if { gActiveBank = GetBankByIdentity(2); - if (gBattlePartyID[gActiveBank] == BATTLE_STRUCT->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) + if (gBattlePartyID[gActiveBank] == gBattleStruct->expGetterID && !(gBattleMons[gActiveBank].status2 & STATUS2_TRANSFORMED)) GiveMoveToBattleMon(&gBattleMons[gActiveBank], ret); } gBattlescriptCurrInstr = loc1; @@ -10781,11 +9734,11 @@ void sub_8023AD8(void) static void atk5A_yesnoboxlearnmove(void) { gActiveBank = 0; - switch (BATTLE_STRUCT->atk5A_StateTracker) + switch (gBattleStruct->atk5A_StateTracker) { case 0: sub_8023A80(); - BATTLE_STRUCT->atk5A_StateTracker++; + gBattleStruct->atk5A_StateTracker++; gBattleCommunication[1] = 0; sub_802BC6C(); break; @@ -10811,7 +9764,7 @@ static void atk5A_yesnoboxlearnmove(void) { sub_8023AD8(); BeginNormalPaletteFade(-1, 0, 0, 0x10, 0); - BATTLE_STRUCT->atk5A_StateTracker++; + gBattleStruct->atk5A_StateTracker++; return; } goto state_tracker_4; @@ -10820,14 +9773,14 @@ static void atk5A_yesnoboxlearnmove(void) { PlaySE(SE_SELECT); state_tracker_4: - BATTLE_STRUCT->atk5A_StateTracker = 4; + gBattleStruct->atk5A_StateTracker = 4; } break; case 2: if (!gPaletteFade.active) { - ShowSelectMovePokemonSummaryScreen(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); - BATTLE_STRUCT->atk5A_StateTracker++; + ShowSelectMovePokemonSummaryScreen(gPlayerParty, gBattleStruct->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn); + gBattleStruct->atk5A_StateTracker++; } break; case 3: @@ -10836,15 +9789,15 @@ static void atk5A_yesnoboxlearnmove(void) u8 move_pos = sub_809FA30(); if (move_pos == 4) { - BATTLE_STRUCT->atk5A_StateTracker = 4; + gBattleStruct->atk5A_StateTracker = 4; } else { - u16 move = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MOVE1 + move_pos); + u16 move = GetMonData(&gPlayerParty[gBattleStruct->expGetterID], MON_DATA_MOVE1 + move_pos); if (IsHMMove2(move)) { PrepareStringBattle(0x13F, gActiveBank); - BATTLE_STRUCT->atk5A_StateTracker = 5; + gBattleStruct->atk5A_StateTracker = 5; } else { @@ -10860,15 +9813,15 @@ static void atk5A_yesnoboxlearnmove(void) ptr += 4; } ptr[0] = 0xFF; - RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos); - SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], gMoveToLearn, move_pos); - if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED) + RemoveMonPPBonus(&gPlayerParty[gBattleStruct->expGetterID], move_pos); + SetMonMoveSlot(&gPlayerParty[gBattleStruct->expGetterID], gMoveToLearn, move_pos); + if (gBattlePartyID[0] == gBattleStruct->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[0].unk18_b & gBitTable[move_pos])) { RemoveBattleMonPPBonus(&gBattleMons[0], move_pos); SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, move_pos); } - if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED) + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == gBattleStruct->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED) && !(gDisableStructs[2].unk18_b & gBitTable[move_pos])) { RemoveBattleMonPPBonus(&gBattleMons[2], move_pos); @@ -10885,7 +9838,7 @@ static void atk5A_yesnoboxlearnmove(void) case 5: if (gBattleExecBuffer == 0) { - BATTLE_STRUCT->atk5A_StateTracker = 2; + gBattleStruct->atk5A_StateTracker = 2; } break; } @@ -10893,11 +9846,11 @@ static void atk5A_yesnoboxlearnmove(void) static void atk5B_yesnoboxstoplearningmove(void) { - switch (BATTLE_STRUCT->atk5A_StateTracker) + switch (gBattleStruct->atk5A_StateTracker) { case 0: sub_8023A80(); - BATTLE_STRUCT->atk5A_StateTracker++; + gBattleStruct->atk5A_StateTracker++; gBattleCommunication[1] = 0; sub_802BC6C(); break; @@ -10959,7 +9912,7 @@ static void atk5D_getmoneyreward(void) u32 money_to_give; if (gTrainerBattleOpponent == 0x400) { - money_to_give = 2 * BATTLE_STRUCT->moneyMultiplier * MONEY_UNKNOWN; + money_to_give = 2 * gBattleStruct->moneyMultiplier * MONEY_UNKNOWN; } else { @@ -10987,7 +9940,7 @@ static void atk5D_getmoneyreward(void) } for (; gTrainerMoney[i * 4] != 0xFF && gTrainerMoney[i * 4 + 1] != gTrainers[gTrainerBattleOpponent].trainerClass ; i++) {} - money_to_give = (r5 << 2) * BATTLE_STRUCT->moneyMultiplier; + money_to_give = (r5 << 2) * gBattleStruct->moneyMultiplier; if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) money_to_give = 2 * gTrainerMoney[i * 4 + 1] * money_to_give; else @@ -11471,7 +10424,7 @@ static void atk6C_drawlvlupbox(void) { u8 r1 = 0; u8 r7 = 0; - switch (BATTLE_STRUCT->atk6C_statetracker) + switch (gBattleStruct->atk6C_statetracker) { case 0: sub_802BBD4(0xB, 0, 0x1D, 0x7, r1); @@ -11956,13 +10909,13 @@ static void atk73_hpthresholds(void) result = 1; if (result > 69 || !gBattleMons[opposing_bank].hp) - BATTLE_STRUCT->hpScale = 0; + gBattleStruct->hpScale = 0; else if (result > 39) - BATTLE_STRUCT->hpScale = 1; + gBattleStruct->hpScale = 1; else if (result > 9) - BATTLE_STRUCT->hpScale = 2; + gBattleStruct->hpScale = 2; else - BATTLE_STRUCT->hpScale = 3; + gBattleStruct->hpScale = 3; } gBattlescriptCurrInstr += 2; @@ -11977,17 +10930,17 @@ static void atk74_hpthresholds2(void) { gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); opposing_bank = gActiveBank ^ 1; - hp_switchout = ewram160BCarr(GetBankSide(opposing_bank)); //BATTLE_STRUCT->HP_OnSwitchout[GetBankSide(opposing_bank)]; + hp_switchout = ewram160BCarr(GetBankSide(opposing_bank)); //gBattleStruct->HP_OnSwitchout[GetBankSide(opposing_bank)]; result = (hp_switchout - gBattleMons[opposing_bank].hp) * 100 / hp_switchout; if (gBattleMons[opposing_bank].hp >= hp_switchout) - BATTLE_STRUCT->hpScale = 0; + gBattleStruct->hpScale = 0; else if (result <= 29) - BATTLE_STRUCT->hpScale = 1; + gBattleStruct->hpScale = 1; else if (result <= 69) - BATTLE_STRUCT->hpScale = 2; + gBattleStruct->hpScale = 2; else - BATTLE_STRUCT->hpScale = 3; + gBattleStruct->hpScale = 3; } gBattlescriptCurrInstr += 2; @@ -12039,9 +10992,9 @@ static void atk76_various(void) { int i; u16* choiced_move; - if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID) + if (gBattlePartyID[0] == gBattleStruct->expGetterID) goto ACTIVE_0; - if (gBattlePartyID[2] != BATTLE_STRUCT->expGetterID) + if (gBattlePartyID[2] != gBattleStruct->expGetterID) break; if (gBattlePartyID[0] == gBattlePartyID[2]) { @@ -12355,7 +11308,7 @@ bool8 UproarWakeUpCheck(u8 bank) { if (!(gBattleMons[i].status2 & STATUS2_UPROAR) || gBattleMons[bank].ability == ABILITY_SOUNDPROOF) //wtf gamefreak, you should check this only once, not every time in a loop... continue; - BATTLE_STRUCT->scriptingActive = i; + gBattleStruct->scriptingActive = i; if (gBankTarget == 0xFF) gBankTarget = i; else if (gBankTarget == i) @@ -12424,7 +11377,7 @@ static void atk86_stockpiletobasedamage(void) gSideAffecting[GetBankIdentity(gBankTarget) & 1], 0, 0, gBankAttacker, gBankTarget) * gDisableStructs[gBankAttacker].stockpileCounter; - BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; + gBattleStruct->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; if (gProtectStructs[gBankAttacker].helpingHand) gBattleMoveDamage = gBattleMoveDamage * 15 / 10; @@ -12455,7 +11408,7 @@ static void atk87_stockpiletohpheal(void) if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; gBattleMoveDamage *= -1; - BATTLE_STRUCT->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; + gBattleStruct->animTurn = gDisableStructs[gBankAttacker].stockpileCounter; gDisableStructs[gBankAttacker].stockpileCounter = 0; gBattlescriptCurrInstr += 5; gBankTarget = gBankAttacker; @@ -12464,7 +11417,7 @@ static void atk87_stockpiletohpheal(void) static void atk88_negativedamage(void) { - gBattleMoveDamage = -(gHP_dealt / 2); + gBattleMoveDamage = -(gHpDealt / 2); if (gBattleMoveDamage == 0) gBattleMoveDamage = -1; gBattlescriptCurrInstr++; @@ -12504,7 +11457,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) else { BattleScriptPush(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_MistProtected; gSpecialStatuses[gActiveBank].statloweringflag = 1; } @@ -12525,7 +11478,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) else { BattleScriptPush(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; RecordAbilityBattle(gActiveBank, gLastUsedAbility); @@ -12539,7 +11492,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) if (flags == 1) { BattleScriptPush(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; RecordAbilityBattle(gActiveBank, gLastUsedAbility); @@ -12551,7 +11504,7 @@ u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) if (flags == 1) { BattleScriptPush(bs_ptr); - BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; RecordAbilityBattle(gActiveBank, gLastUsedAbility); @@ -13224,7 +12177,7 @@ _080262C0: .4byte gBattleMoveFlags\n\ static void atk89_statbuffchange(void) { u8* jump_loc = T1_READ_PTR(gBattlescriptCurrInstr + 2); - if (ChangeStatBuffs(BATTLE_STRUCT->statChanger & 0xF0, BATTLE_STRUCT->statChanger & 0xF, T2_READ_8(gBattlescriptCurrInstr + 1), jump_loc) == 0) + if (ChangeStatBuffs(gBattleStruct->statChanger & 0xF0, gBattleStruct->statChanger & 0xF, T2_READ_8(gBattlescriptCurrInstr + 1), jump_loc) == 0) gBattlescriptCurrInstr += 6; } @@ -13456,7 +12409,7 @@ static void atk91_givepaydaymoney(void) { if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney) { - AddMoney(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier); + AddMoney(&gSaveBlock1.money, gPaydayMoney * gBattleStruct->moneyMultiplier); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 1; gBattleTextBuff1[2] = 2; @@ -14142,8 +13095,8 @@ static void atk9C_setsubstitute(void) static bool8 IsMoveUncopyable(u16 move) { int i; - for (i = 0; sUnknown_081FACFE[i] != 0xFFFE && sUnknown_081FACFE[i] != move; i++) {} - return (sUnknown_081FACFE[i] != 0xFFFE); + for (i = 0; sMovesForbiddenToCopy[i] != 0xFFFE && sMovesForbiddenToCopy[i] != move; i++) {} + return (sMovesForbiddenToCopy[i] != 0xFFFE); } static void atk9D_mimicattackcopy(void) @@ -14187,13 +13140,13 @@ static void atk9D_mimicattackcopy(void) #ifdef NONMATCHING static void atk9E_metronome(void) { - // sUnknown_081FACFE + // sMovesForbiddenToCopy int i; do { while ((gCurrentMove = (Random() & 0x1FF) + 1) > 0x162); - for (i = 0; sUnknown_081FACFE[i] != gCurrentMove && sUnknown_081FACFE[i] != 0xFFFF; i++); - } while (sUnknown_081FACFE[i] != 0xFFFF); + for (i = 0; sMovesForbiddenToCopy[i] != gCurrentMove && sMovesForbiddenToCopy[i] != 0xFFFF; i++); + } while (sMovesForbiddenToCopy[i] != 0xFFFF); gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); gBattlescriptCurrInstr = gBattleScriptsForMoveEffects[gBattleMoves[gCurrentMove].effect]; @@ -14211,7 +13164,7 @@ static void atk9E_metronome(void) ldr r7, _08027938 @ =gCurrentMove\n\ movs r6, 0xB1\n\ lsls r6, 1\n\ - ldr r5, _0802793C @ =sUnknown_081FACFE\n\ + ldr r5, _0802793C @ =sMovesForbiddenToCopy\n\ ldr r0, _08027940 @ =gBattlescriptCurrInstr\n\ mov r8, r0\n\ _080278CA:\n\ @@ -14273,7 +13226,7 @@ _080278F8:\n\ bx r0\n\ .align 2, 0\n\ _08027938: .4byte gCurrentMove\n\ -_0802793C: .4byte sUnknown_081FACFE\n\ +_0802793C: .4byte sMovesForbiddenToCopy\n\ _08027940: .4byte gBattlescriptCurrInstr\n\ _08027944: .4byte 0x000001ff\n\ _08027948: .4byte 0x0000ffff\n\ @@ -14398,10 +13351,10 @@ static void atkA5_painsplitdmgcalc(void) { s32 hp_diff = (gBattleMons[gBankAttacker].hp + gBattleMons[gBankTarget].hp) / 2; s32 to_store = gBattleMoveDamage = gBattleMons[gBankTarget].hp - hp_diff; - BATTLE_STRUCT->unk16014 = sBYTE0_32(to_store); - BATTLE_STRUCT->unk16015 = sBYTE1_32(to_store); - BATTLE_STRUCT->unk16016 = sBYTE2_32(to_store); - BATTLE_STRUCT->unk16017 = sBYTE3_32(to_store); + gBattleStruct->unk16014 = sBYTE0_32(to_store); + gBattleStruct->unk16015 = sBYTE1_32(to_store); + gBattleStruct->unk16016 = sBYTE2_32(to_store); + gBattleStruct->unk16017 = sBYTE3_32(to_store); gBattleMoveDamage = gBattleMons[gBankAttacker].hp - hp_diff; gSpecialStatuses[gBankTarget].moveturnLostHP = 0xFFFF; @@ -14415,7 +13368,7 @@ static void atkA5_painsplitdmgcalc(void) #ifdef NONMATCHING static void atkA6_settypetorandomresistance(void) { - if (gMoveHitWith[gBankAttacker] == 0 || gMoveHitWith[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gMoveHitWith[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg)) + if (gLastLandedMoves[gBankAttacker] == 0 || gLastLandedMoves[gBankAttacker] == 0xFFFF || (IsTwoTurnsMove(gLastLandedMoves[gBankAttacker]) && !gProtectStructs[gBankAttacker].physicalDmg && !gProtectStructs[gBankAttacker].specialDmg)) gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); else { @@ -14424,7 +13377,7 @@ static void atkA6_settypetorandomresistance(void) { while (((type = (Random() & 0x7F)) > 0x70)); type *= 3; - if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) + if (gTypeEffectiveness[type] == gLastHitByType[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) { gBattleMons[gBankAttacker].type1 = type; gBattleMons[gBankAttacker].type2 = type; @@ -14443,7 +13396,7 @@ static void atkA6_settypetorandomresistance(void) { if (gTypeEffectiveness[type] == 0xFE || gTypeEffectiveness[type] != 0xFF) { - if (gTypeEffectiveness[type] == gUnknown_02024C44[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) + if (gTypeEffectiveness[type] == gLastHitByType[gBankAttacker] && gTypeEffectiveness[type + 2] <= 5 && gBattleMons[gBankAttacker].type1 != gTypeEffectiveness[type + 1] && gBattleMons[gBankAttacker].type2 != gTypeEffectiveness[type + 1]) { gBattleMons[gBankAttacker].type1 = gTypeEffectiveness[rands + 1]; gBattleMons[gBankAttacker].type2 = gTypeEffectiveness[rands + 1]; @@ -14472,7 +13425,7 @@ static void atkA6_settypetorandomresistance(void) mov r6, r9\n\ mov r5, r8\n\ push {r5-r7}\n\ - ldr r1, _08027FA8 @ =gMoveHitWith\n\ + ldr r1, _08027FA8 @ =gLastLandedMoves\n\ ldr r4, _08027FAC @ =gBankAttacker\n\ ldrb r0, [r4]\n\ lsls r0, 1\n\ @@ -14518,7 +13471,7 @@ _08027F8C:\n\ str r1, [r3]\n\ b _08028110\n\ .align 2, 0\n\ -_08027FA8: .4byte gMoveHitWith\n\ +_08027FA8: .4byte gLastLandedMoves\n\ _08027FAC: .4byte gBankAttacker\n\ _08027FB0: .4byte 0x0000ffff\n\ _08027FB4: .4byte gProtectStructs\n\ @@ -14590,7 +13543,7 @@ _0802802C:\n\ adds r4, r0, r4\n\ ldr r6, _08028120 @ =gTypeEffectiveness\n\ adds r3, r4, r6\n\ - ldr r1, _08028124 @ =gUnknown_02024C44\n\ + ldr r1, _08028124 @ =gLastHitByType\n\ ldr r2, _08028128 @ =gBankAttacker\n\ ldrb r5, [r2]\n\ lsls r0, r5, 1\n\ @@ -14651,7 +13604,7 @@ _080280AE:\n\ mov r4, r10\n\ ldrb r2, [r4]\n\ lsls r0, r2, 1\n\ - ldr r7, _08028124 @ =gUnknown_02024C44\n\ + ldr r7, _08028124 @ =gLastHitByType\n\ adds r0, r7\n\ ldrh r0, [r0]\n\ cmp r1, r0\n\ @@ -14708,7 +13661,7 @@ _08028110:\n\ bx r0\n\ .align 2, 0\n\ _08028120: .4byte gTypeEffectiveness\n\ -_08028124: .4byte gUnknown_02024C44\n\ +_08028124: .4byte gLastHitByType\n\ _08028128: .4byte gBankAttacker\n\ _0802812C: .4byte gBattleMons\n\ _08028130: .4byte 0x000003e7\n\ @@ -14842,7 +13795,7 @@ static void atkAA_setdestinybond(void) gBattlescriptCurrInstr++; } -static void DestinyBondFlagUpdate(void) +static void TrySetDestinyBondToHappen(void) { u8 atk_side = GetBankSide(gBankAttacker); u8 def_side = GetBankSide(gBankTarget); @@ -14852,7 +13805,7 @@ static void DestinyBondFlagUpdate(void) static void atkAB_trysetdestinybondtohappen(void) { - DestinyBondFlagUpdate(); + TrySetDestinyBondToHappen(); gBattlescriptCurrInstr++; } @@ -14862,10 +13815,10 @@ static void atkAC_remaininghptopower(void) int i; for (i = 0; i < 12; i += 2) { - if (hp_fraction <= sUnknown_081FAD26[i]) + if (hp_fraction <= sFlailHpScaleToPowerTable[i]) break; } - gDynamicBasePower = sUnknown_081FAD26[i + 1]; + gDynamicBasePower = sFlailHpScaleToPowerTable[i + 1]; gBattlescriptCurrInstr++; } @@ -14941,7 +13894,7 @@ static void atkAE_healpartystatus(void) gBattleCommunication[MULTISTRING_CHOOSER] |= 1; } - gActiveBank = BATTLE_STRUCT->scriptingActive = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); + gActiveBank = gBattleStruct->scriptingActive = GetBankByIdentity(GetBankIdentity(gBankAttacker) ^ 2); if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && !(gAbsentBankFlags & gBitTable[gActiveBank])) { if (gBattleMons[gActiveBank].ability != ABILITY_SOUNDPROOF) @@ -15250,7 +14203,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void) } gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; - BATTLE_STRUCT->animTurn = 1; + gBattleStruct->animTurn = 1; gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); } else @@ -16400,7 +15353,7 @@ static void atkD6_doubledamagedealtifdamaged(void) { if ((gProtectStructs[gBankAttacker].physicalDmg && gProtectStructs[gBankAttacker].physicalBank == gBankTarget) || (gProtectStructs[gBankAttacker].specialDmg && gProtectStructs[gBankAttacker].specialBank == gBankTarget)) - BATTLE_STRUCT->dmgMultiplier = 2; + gBattleStruct->dmgMultiplier = 2; gBattlescriptCurrInstr++; } @@ -16509,13 +15462,13 @@ static void atkDC_trysetgrudge(void) static void atkDD_weightdamagecalculation(void) { int i; - for (i = 0; sWeightDamage[i] != 0xFFFF; i += 2) + for (i = 0; sWeightToDamageTable[i] != 0xFFFF; i += 2) { - if (sWeightDamage[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) + if (sWeightToDamageTable[i] > GetPokedexHeightWeight(SpeciesToNationalPokedexNum(gBattleMons[gBankTarget].species), 1)) break; } - if (sWeightDamage[i] != 0xFFFF) - gDynamicBasePower = sWeightDamage[i + 1]; + if (sWeightToDamageTable[i] != 0xFFFF) + gDynamicBasePower = sWeightToDamageTable[i + 1]; else gDynamicBasePower = 120; gBattlescriptCurrInstr++; @@ -16539,17 +15492,17 @@ static void atkDE_asistattackselect(void) break; if (!GetMonData(&party[i], MON_DATA_SPECIES2) || GetMonData(&party[i], MON_DATA_SPECIES2) == SPECIES_EGG) break; - chooseable_moves = &BATTLE_STRUCT->assistMove[chooseable_moves_no]; + chooseable_moves = &gBattleStruct->assistMove[chooseable_moves_no]; for (j = 0; j < 4; j++) { int k; u16 move = GetMonData(&party[i], MON_DATA_MOVE1 + i); if (IsMoveUnchoosable(move)) break; - //sUnknown_081FACFE[k] + //sMovesForbiddenToCopy[k] for (k = 0; ;k++) { - if (sUnknown_081FACFE[k] == 0xFFFF) + if (sMovesForbiddenToCopy[k] == 0xFFFF) { if (move) { @@ -16559,7 +15512,7 @@ static void atkDE_asistattackselect(void) } break; } - if (sUnknown_081FACFE[k] == move) + if (sMovesForbiddenToCopy[k] == move) break; } } @@ -16567,7 +15520,7 @@ static void atkDE_asistattackselect(void) if (chooseable_moves_no) { gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED); - gRandomMove = BATTLE_STRUCT->assistMove[Random() % chooseable_moves_no]; + gRandomMove = gBattleStruct->assistMove[Random() % chooseable_moves_no]; gBankTarget = GetMoveTarget(gRandomMove, 0); gBattlescriptCurrInstr += 5; } @@ -16652,7 +15605,7 @@ _0802AAF8:\n\ adds r1, r5, 0x1\n\ cmp r0, 0\n\ bne _0802AB4E\n\ - ldr r0, _0802ABB4 @ =sUnknown_081FACFE\n\ + ldr r0, _0802ABB4 @ =sMovesForbiddenToCopy\n\ ldrh r2, [r0]\n\ adds r3, r0, 0\n\ cmp r2, r8\n\ @@ -16727,7 +15680,7 @@ _0802ABA4: .4byte gEnemyParty\n\ _0802ABA8: .4byte gBattlePartyID\n\ _0802ABAC: .4byte 0x0000ffff\n\ _0802ABB0: .4byte gSharedMem + 0x16024\n\ -_0802ABB4: .4byte sUnknown_081FACFE\n\ +_0802ABB4: .4byte sMovesForbiddenToCopy\n\ _0802ABB8: .4byte gHitMarker\n\ _0802ABBC: .4byte 0xfffffbff\n\ _0802ABC0: .4byte gRandomMove\n\ @@ -16792,11 +15745,11 @@ static void atkE1_trygetintimidatetarget(void) { u8 side; - BATTLE_STRUCT->scriptingActive = ewram160DD; - side = GetBankSide(BATTLE_STRUCT->scriptingActive); + gBattleStruct->scriptingActive = ewram160DD; + side = GetBankSide(gBattleStruct->scriptingActive); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 9; - gBattleTextBuff1[2] = gBattleMons[BATTLE_STRUCT->scriptingActive].ability; + gBattleTextBuff1[2] = gBattleMons[gBattleStruct->scriptingActive].ability; gBattleTextBuff1[3] = 0xFF; for (;gBankTarget < gNoOfAllBanks; gBankTarget++) @@ -16901,10 +15854,10 @@ static void atkE5_pickup(void) static void atkE6_docastformchangeanimation(void) { - gActiveBank = BATTLE_STRUCT->scriptingActive; + gActiveBank = gBattleStruct->scriptingActive; if (gBattleMons[gActiveBank].status2 & STATUS2_SUBSTITUTE) - BATTLE_STRUCT->castformToChangeInto |= 0x80; - EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, BATTLE_STRUCT->castformToChangeInto); + gBattleStruct->castformToChangeInto |= 0x80; + EmitBattleAnimation(0, B_ANIM_CASTFORM_CHANGE, gBattleStruct->castformToChangeInto); MarkBufferBankForExecution(gActiveBank); gBattlescriptCurrInstr++; } @@ -16913,11 +15866,11 @@ static void atkE7_trycastformdatachange(void) { u8 form; gBattlescriptCurrInstr++; - form = CastformDataTypeChange(BATTLE_STRUCT->scriptingActive); + form = CastformDataTypeChange(gBattleStruct->scriptingActive); if (form) { BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - BATTLE_STRUCT->castformToChangeInto = form - 1; + gBattleStruct->castformToChangeInto = form - 1; } } @@ -16953,17 +15906,17 @@ static void atkE9_setweatherballtype(void) if (WEATHER_HAS_EFFECT) { if ((u8)(gBattleWeather)) - BATTLE_STRUCT->dmgMultiplier = 2; + gBattleStruct->dmgMultiplier = 2; if (gBattleWeather & WEATHER_RAIN_ANY) - BATTLE_STRUCT->dynamicMoveType = TYPE_WATER | 0x80; + gBattleStruct->dynamicMoveType = TYPE_WATER | 0x80; else if (gBattleWeather & WEATHER_SANDSTORM_ANY) - BATTLE_STRUCT->dynamicMoveType = TYPE_ROCK | 0x80; + gBattleStruct->dynamicMoveType = TYPE_ROCK | 0x80; else if (gBattleWeather & WEATHER_SUN_ANY) - BATTLE_STRUCT->dynamicMoveType = TYPE_FIRE | 0x80; + gBattleStruct->dynamicMoveType = TYPE_FIRE | 0x80; else if (gBattleWeather & WEATHER_HAIL) - BATTLE_STRUCT->dynamicMoveType = TYPE_ICE | 0x80; + gBattleStruct->dynamicMoveType = TYPE_ICE | 0x80; else - BATTLE_STRUCT->dynamicMoveType = TYPE_NORMAL | 0x80; + gBattleStruct->dynamicMoveType = TYPE_NORMAL | 0x80; } gBattlescriptCurrInstr++; } @@ -17010,8 +15963,8 @@ static void atkEC_pursuitrelated(void) gActionsByTurnOrder[gActiveBank] = 11; gCurrentMove = MOVE_PURSUIT; gBattlescriptCurrInstr += 5; - BATTLE_STRUCT->animTurn = 1; - BATTLE_STRUCT->unk160A7 = gBankAttacker; + gBattleStruct->animTurn = 1; + gBattleStruct->unk160A7 = gBankAttacker; gBankAttacker = gActiveBank; } else @@ -17022,10 +15975,10 @@ static void atkED_snatchsetbanks(void) { gEffectBank = gBankAttacker; if (gBankAttacker == gBankTarget) - gBankAttacker = gBankTarget = BATTLE_STRUCT->scriptingActive; + gBankAttacker = gBankTarget = gBattleStruct->scriptingActive; else - gBankTarget = BATTLE_STRUCT->scriptingActive; - BATTLE_STRUCT->scriptingActive = gEffectBank; + gBankTarget = gBattleStruct->scriptingActive; + gBattleStruct->scriptingActive = gEffectBank; gBattlescriptCurrInstr++; } @@ -17038,13 +15991,13 @@ static void atkEE_removelightscreenreflect(void) //brick break gSideAffecting[side] &= ~(SIDE_STATUS_LIGHTSCREEN); gSideTimers[side].reflectTimer = 0; gSideTimers[side].lightscreenTimer = 0; - BATTLE_STRUCT->animTurn = 1; - BATTLE_STRUCT->animTargetsHit = 1; + gBattleStruct->animTurn = 1; + gBattleStruct->animTargetsHit = 1; } else { - BATTLE_STRUCT->animTurn = 0; - BATTLE_STRUCT->animTargetsHit = 0; + gBattleStruct->animTurn = 0; + gBattleStruct->animTargetsHit = 0; } gBattlescriptCurrInstr++; } @@ -17074,7 +16027,7 @@ void atkEF_handleballthrow(void) u32 odds; u8 catch_rate; if (gLastUsedItem == ITEM_SAFARI_BALL) - catch_rate = BATTLE_STRUCT->unk16089 * 1275 / 100; //correct the name to safariFleeRate + catch_rate = gBattleStruct->unk16089 * 1275 / 100; //correct the name to safariFleeRate else catch_rate = gBaseStats[gBattleMons[gBankTarget].species].catchRate; if (gLastUsedItem > 5) @@ -17386,15 +16339,15 @@ static void atkF3_trygivecaughtmonnick(void) case 2: if (!gPaletteFade.active) { - GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); - DoNamingScreen(2, BATTLE_STRUCT->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2); + GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleStruct->caughtNick); + DoNamingScreen(2, gBattleStruct->caughtNick, GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_SPECIES), GetMonGender(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]]), GetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_PERSONALITY, 0), BattleMainCB2); gBattleCommunication[0]++; } break; case 3: if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active ) { - SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, BATTLE_STRUCT->caughtNick); + SetMonData(&gEnemyParty[gBattlePartyID[gBankAttacker ^ 1]], MON_DATA_NICKNAME, gBattleStruct->caughtNick); gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1); } break; diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 1c79d7ebf..00216ce05 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -763,7 +763,7 @@ void sub_80324E0(u8 a) ewram17800[a].substituteSprite = 0; } -void sub_80324F8(struct Pokemon *pkmn, u8 b) +void HandleLowHpMusicChange(struct Pokemon *pkmn, u8 b) { u16 hp = GetMonData(pkmn, MON_DATA_HP); u16 maxHP = GetMonData(pkmn, MON_DATA_MAX_HP); @@ -793,7 +793,7 @@ void sub_80324F8(struct Pokemon *pkmn, u8 b) } } -void BattleMusicStop(void) +void BattleStopLowHpSound(void) { u8 r4 = GetBankByIdentity(0); @@ -821,11 +821,11 @@ void sub_8032638(void) u8 r5 = pokemon_order_func(gBattlePartyID[r9]); if (GetMonData(&gPlayerParty[r4], MON_DATA_HP) != 0) - sub_80324F8(&gPlayerParty[r4], r8); + HandleLowHpMusicChange(&gPlayerParty[r4], r8); if (IsDoubleBattle()) { if (GetMonData(&gPlayerParty[r5], MON_DATA_HP) != 0) - sub_80324F8(&gPlayerParty[r5], r9); + HandleLowHpMusicChange(&gPlayerParty[r5], r9); } } } diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 80848d2fd..2ac9df2b9 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -1422,8 +1422,8 @@ static void BattleAICmd_get_highest_possible_damage(void) s32 i; gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; AI_THINKING_STRUCT->funcResult = 0; @@ -1462,8 +1462,8 @@ static void BattleAICmd_if_damage_bonus(void) u8 damageVar; gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; @@ -1669,8 +1669,8 @@ static void BattleAICmd_if_can_faint(void) } gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; gCurrentMove = AI_THINKING_STRUCT->moveConsidered; @@ -1698,8 +1698,8 @@ static void BattleAICmd_if_cant_faint(void) } gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; - BATTLE_STRUCT->dmgMultiplier = 1; + gBattleStruct->dynamicMoveType = 0; + gBattleStruct->dmgMultiplier = 1; gBattleMoveFlags = 0; gCritMultiplier = 1; gCurrentMove = AI_THINKING_STRUCT->moveConsidered; @@ -1907,7 +1907,7 @@ static void BattleAICmd_flee(void) static void BattleAICmd_if_random_100(void) { - u8 safariFleeRate = BATTLE_STRUCT->safariFleeRate * 5; // safari flee rate, from 0-20 + u8 safariFleeRate = gBattleStruct->safariFleeRate * 5; // safari flee rate, from 0-20 if ((u8)(Random() % 100) < safariFleeRate) gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1); diff --git a/src/battle/battle_controller_linkpartner.c b/src/battle/battle_controller_linkpartner.c index e39d98997..3a16e12e6 100644 --- a/src/battle/battle_controller_linkpartner.c +++ b/src/battle/battle_controller_linkpartner.c @@ -94,7 +94,7 @@ extern void sub_804777C(); extern void sub_8043DFC(); //extern s16 sub_8045C78(); extern void sub_80440EC(); -extern void sub_80324F8(); +extern void HandleLowHpMusicChange(); extern void nullsub_9(u16); extern void sub_8043DB0(); extern void move_anim_start_t4(); @@ -355,7 +355,7 @@ void bx_t3_healthbar_update(void) } else { - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); LinkPartnerBufferExecCompleted(); } } @@ -434,7 +434,7 @@ void sub_811E0CC(void) FreeSpriteTilesByTag(0x27F9); FreeSpritePaletteByTag(0x27F9); CreateTask(c3_0802FDF4, 10); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0); sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0); sub_804777C(gActiveBank); @@ -1084,7 +1084,7 @@ void sub_811EC68(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); break; } - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); } void LinkPartnerHandlecmd3(void) @@ -1243,7 +1243,7 @@ void LinkPartnerHandlecmd10(void) else if (!ewram17810[gActiveBank].unk0_6) { ewram17810[gActiveBank].unk4 = 0; - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); PlaySE12WithPanning(SE_POKE_DEAD, -64); gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; gSprites[gObjectBankIDs[gActiveBank]].data[2] = 5; diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 2bdf448db..0d05b7aed 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -87,7 +87,7 @@ extern void sub_802E220(); extern void sub_802E2D4(); extern void sub_802E004(void); extern void sub_802DF30(void); -extern void BattleMusicStop(void); +extern void BattleStopLowHpSound(void); extern void PlayerBufferExecCompleted(void); extern void bx_t1_healthbar_update(void); extern void nullsub_91(void); @@ -1019,9 +1019,9 @@ void sub_802D31C(void) m4aMPlayContinue(&gMPlay_BGM); else m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); if (IsDoubleBattle()) - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2); ewram17810[gActiveBank].unk9 = 3; gBattleBankFunc[gActiveBank] = sub_802D2E0; } @@ -1077,7 +1077,7 @@ void sub_802D730(void) if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs()) { m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); PlayerBufferExecCompleted(); } } @@ -1118,7 +1118,7 @@ void bx_t1_healthbar_update(void) } else { - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); PlayerBufferExecCompleted(); } } @@ -2278,7 +2278,7 @@ void dp01_setattr_by_ch1_for_player_pokemon(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); break; } - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); } void PlayerHandlecmd3(void) @@ -2438,7 +2438,7 @@ void PlayerHandlecmd10(void) if (ewram17810[gActiveBank].unk0_6 == 0) { ewram17810[gActiveBank].unk4 = 0; - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); PlaySE12WithPanning(SE_POKE_DEAD, -64); gSprites[gObjectBankIDs[gActiveBank]].data[1] = 0; gSprites[gObjectBankIDs[gActiveBank]].data[2] = 5; @@ -2655,7 +2655,7 @@ void PlayerHandlecmd22(void) void PlayerHandlecmd23(void) { - BattleMusicStop(); + BattleStopLowHpSound(); BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0); PlayerBufferExecCompleted(); } diff --git a/src/battle/battle_controller_wally.c b/src/battle/battle_controller_wally.c index 4c0adab5e..49f530129 100644 --- a/src/battle/battle_controller_wally.c +++ b/src/battle/battle_controller_wally.c @@ -412,7 +412,7 @@ void sub_81376B8(void) FreeSpriteTilesByTag(0x27F9); FreeSpritePaletteByTag(0x27F9); CreateTask(c3_0802FDF4, 10); - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); WallyBufferExecCompleted(); } } @@ -429,7 +429,7 @@ void sub_81377B0(void) } else { - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); WallyBufferExecCompleted(); } } @@ -1066,7 +1066,7 @@ void sub_8138294(u8 a) SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]); break; } - sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); + HandleLowHpMusicChange(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank); } void WallyHandlecmd3(void) diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index d8efc09c5..18e07acf6 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -214,11 +214,11 @@ void BufferStringBattle(u16 stringID) gStringInfo = (struct StringInfoBattle*)(&gBattleBufferA[gActiveBank][4]); gLastUsedItem = gStringInfo->lastItem; gLastUsedAbility = gStringInfo->lastAbility; - BATTLE_STRUCT->scriptingActive = gStringInfo->scrActive; - BATTLE_STRUCT->unk1605E = gStringInfo->unk1605E; - BATTLE_STRUCT->hpScale = gStringInfo->hpScale; + gBattleStruct->scriptingActive = gStringInfo->scrActive; + gBattleStruct->unk1605E = gStringInfo->unk1605E; + gBattleStruct->hpScale = gStringInfo->hpScale; gStringBank = gStringInfo->StringBank; - BATTLE_STRUCT->stringMoveType = gStringInfo->moveType; + gBattleStruct->stringMoveType = gStringInfo->moveType; for (i = 0; i < 4; i++) { gAbilitiesPerBank[i] = gStringInfo->abilities[i]; @@ -304,11 +304,11 @@ void BufferStringBattle(u16 stringID) case 2: // sending poke to ball msg if (GetBankSide(gActiveBank) == 0) { - if (BATTLE_STRUCT->hpScale == 0) + if (gBattleStruct->hpScale == 0) stringPtr = BattleText_ComeBackSingle1; - else if (BATTLE_STRUCT->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + else if (gBattleStruct->hpScale == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) stringPtr = BattleText_ComeBackSingle2; - else if (BATTLE_STRUCT->hpScale == 2) + else if (gBattleStruct->hpScale == 2) stringPtr = BattleText_ComeBackSingle3; else stringPtr = BattleText_ComeBackSingle4; @@ -332,13 +332,13 @@ void BufferStringBattle(u16 stringID) } break; case 3: // switch-in msg - if (GetBankSide(BATTLE_STRUCT->scriptingActive) == 0) + if (GetBankSide(gBattleStruct->scriptingActive) == 0) { - if (BATTLE_STRUCT->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + if (gBattleStruct->hpScale == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE) stringPtr = BattleText_SentOutSingle7; - else if (BATTLE_STRUCT->hpScale == 1) + else if (gBattleStruct->hpScale == 1) stringPtr = BattleText_SentOutSingle8; - else if (BATTLE_STRUCT->hpScale == 2) + else if (gBattleStruct->hpScale == 2) stringPtr = BattleText_SentOutSingle9; else stringPtr = BattleText_SentOutSingle10; @@ -364,7 +364,7 @@ void BufferStringBattle(u16 stringID) case 4: // pokemon used a move msg sub_8121D1C(gBattleTextBuff1); if (gStringInfo->currentMove > 0x162) - StringCopy(gBattleTextBuff2, gUnknown_08401674[BATTLE_STRUCT->stringMoveType]); + StringCopy(gBattleTextBuff2, gUnknown_08401674[gBattleStruct->stringMoveType]); else StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]); sub_8121D74(gBattleTextBuff2); @@ -636,17 +636,17 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) HANDLE_NICKNAME_STRING_CASE(gActiveBank, gBattlePartyID[gActiveBank]) break; case 16: // scripting active bank name with prefix - HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, gBattlePartyID[BATTLE_STRUCT->scriptingActive]) + HANDLE_NICKNAME_STRING_CASE(gBattleStruct->scriptingActive, gBattlePartyID[gBattleStruct->scriptingActive]) break; case 17: // current move name if (gStringInfo->currentMove > 0x162) - toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType]; + toCpy = (void*) &gUnknown_08401674[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gStringInfo->currentMove]; break; case 18: // last used move name if (gStringInfo->lastMove > 0x162) - toCpy = (void*) &gUnknown_08401674[BATTLE_STRUCT->stringMoveType]; + toCpy = (void*) &gUnknown_08401674[gBattleStruct->stringMoveType]; else toCpy = gMoveNames[gStringInfo->lastMove]; break; @@ -655,7 +655,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) { if (gLastUsedItem == ITEM_ENIGMA_BERRY) { - if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank) + if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 == gStringBank) { StringCopy(text, gEnigmaBerries[gStringBank].name); #ifdef ENGLISH @@ -690,7 +690,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = gAbilityNames[gAbilitiesPerBank[gBankTarget]]; break; case 23: // scripting active ability - toCpy = gAbilityNames[gAbilitiesPerBank[BATTLE_STRUCT->scriptingActive]]; + toCpy = gAbilityNames[gAbilitiesPerBank[gBattleStruct->scriptingActive]]; break; case 24: // effect bank ability toCpy = gAbilityNames[gAbilitiesPerBank[gEffectBank]]; @@ -750,7 +750,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = gLinkPlayers[sub_803FC34(3 ^ gLinkPlayers[multiplayerID].lp_field_18)].name; break; case 31: // link scripting active name - toCpy = gLinkPlayers[sub_803FC34(BATTLE_STRUCT->scriptingActive)].name; + toCpy = gLinkPlayers[sub_803FC34(gBattleStruct->scriptingActive)].name; break; case 32: // player name toCpy = gSaveBlock2.playerName; @@ -759,7 +759,7 @@ u32 StrCpyDecodeBattle(const u8* src, u8* dst) toCpy = GetTrainerLoseText(); break; case 34: // ? - HANDLE_NICKNAME_STRING_CASE(BATTLE_STRUCT->scriptingActive, BATTLE_STRUCT->unk1605E) + HANDLE_NICKNAME_STRING_CASE(gBattleStruct->scriptingActive, gBattleStruct->unk1605E) break; case 35: // lanette pc if (FlagGet(FLAG_SYS_PC_LANETTE)) @@ -946,7 +946,7 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) { if (hword == ITEM_ENIGMA_BERRY) { - if (gLinkPlayers[BATTLE_STRUCT->linkPlayerIndex].lp_field_18 == gStringBank) + if (gLinkPlayers[gBattleStruct->linkPlayerIndex].lp_field_18 == gStringBank) { StringCopy(dst, gEnigmaBerries[gStringBank].name); #ifdef ENGLISH diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c index 9dc030a1a..f93664593 100644 --- a/src/battle/battle_util.c +++ b/src/battle/battle_util.c @@ -21,7 +21,7 @@ #include "constants/species.h" #include "constants/weather.h" -extern u8* gBattlescriptCurrInstr; +extern const u8* gBattlescriptCurrInstr; extern u8 gActiveBank; extern u8 gBattleBufferB[4][0x200]; extern u8* gUnknown_02024C1C[4]; //battlescript location when you try to choose a move you're not allowed to @@ -454,7 +454,7 @@ void sub_80157C4(u8 bank) } } -void BattleScriptPush(u8* BS_ptr) +void BattleScriptPush(const u8* BS_ptr) { B_BATTLESCRIPTS_STACK->ptr[B_BATTLESCRIPTS_STACK->size++] = BS_ptr; } @@ -477,7 +477,7 @@ u8 TrySetCantSelectMoveBattleScript(void) //msg can't select a move u16* choicedMove = CHOICED_MOVE(gActiveBank); if (gDisableStructs[gActiveBank].disabledMove == move && move) { - BATTLE_STRUCT->scriptingActive = gActiveBank; + gBattleStruct->scriptingActive = gActiveBank; gCurrentMove = move; gUnknown_02024C1C[gActiveBank] = BattleScript_MoveSelectionDisabledMove; limitations++; @@ -615,7 +615,7 @@ u8 UpdateTurnCounters(void) { u8 sideBank; - switch (BATTLE_STRUCT->turncountersTracker) + switch (gBattleStruct->turncountersTracker) { case 0: for (i = 0; i < gNoOfAllBanks; i++) @@ -631,12 +631,12 @@ u8 UpdateTurnCounters(void) SwapTurnOrder(i, j); } } - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; + gBattleStruct->turncountersTracker++; + gBattleStruct->turnSideTracker = 0; case 1: - while (BATTLE_STRUCT->turnSideTracker < 2) + while (gBattleStruct->turnSideTracker < 2) { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker; if (gSideAffecting[sideBank] & SIDE_STATUS_REFLECT) { @@ -653,20 +653,20 @@ u8 UpdateTurnCounters(void) effect++; } } - BATTLE_STRUCT->turnSideTracker++; + gBattleStruct->turnSideTracker++; if (effect) break; } if (!effect) { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; + gBattleStruct->turncountersTracker++; + gBattleStruct->turnSideTracker = 0; } break; case 2: - while (BATTLE_STRUCT->turnSideTracker < 2) + while (gBattleStruct->turnSideTracker < 2) { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker; if (gSideAffecting[sideBank] & SIDE_STATUS_LIGHTSCREEN) { if (--gSideTimers[sideBank].lightscreenTimer == 0) @@ -682,20 +682,20 @@ u8 UpdateTurnCounters(void) effect++; } } - BATTLE_STRUCT->turnSideTracker++; + gBattleStruct->turnSideTracker++; if (effect) break; } if (!effect) { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; + gBattleStruct->turncountersTracker++; + gBattleStruct->turnSideTracker = 0; } break; case 3: - while (BATTLE_STRUCT->turnSideTracker < 2) + while (gBattleStruct->turnSideTracker < 2) { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker; if (gSideTimers[sideBank].mistTimer && --gSideTimers[sideBank].mistTimer == 0) { gSideAffecting[sideBank] &= ~SIDE_STATUS_MIST; @@ -708,20 +708,20 @@ u8 UpdateTurnCounters(void) gBattleTextBuff1[4] = EOS; effect++; } - BATTLE_STRUCT->turnSideTracker++; + gBattleStruct->turnSideTracker++; if (effect) break; } if (!effect) { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; + gBattleStruct->turncountersTracker++; + gBattleStruct->turnSideTracker = 0; } break; case 4: - while (BATTLE_STRUCT->turnSideTracker < 2) + while (gBattleStruct->turnSideTracker < 2) { - gActiveBank = gBankAttacker = sideBank = BATTLE_STRUCT->turnSideTracker; + gActiveBank = gBankAttacker = sideBank = gBattleStruct->turnSideTracker; if (gSideAffecting[sideBank] & SIDE_STATUS_SAFEGUARD) { if (--gSideTimers[sideBank].safeguardTimer == 0) @@ -731,33 +731,33 @@ u8 UpdateTurnCounters(void) effect++; } } - BATTLE_STRUCT->turnSideTracker++; + gBattleStruct->turnSideTracker++; if (effect) break; } if (!effect) { - BATTLE_STRUCT->turncountersTracker++; - BATTLE_STRUCT->turnSideTracker = 0; + gBattleStruct->turncountersTracker++; + gBattleStruct->turnSideTracker = 0; } break; case 5: - while (BATTLE_STRUCT->turnSideTracker < gNoOfAllBanks) + while (gBattleStruct->turnSideTracker < gNoOfAllBanks) { - gActiveBank = gBanksByTurnOrder[BATTLE_STRUCT->turnSideTracker]; + gActiveBank = gBanksByTurnOrder[gBattleStruct->turnSideTracker]; if (gWishFutureKnock.wishCounter[gActiveBank] && --gWishFutureKnock.wishCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) { gBankTarget = gActiveBank; BattleScriptExecute(BattleScript_WishComesTrue); effect++; } - BATTLE_STRUCT->turnSideTracker++; + gBattleStruct->turnSideTracker++; if (effect) break; } if (!effect) { - BATTLE_STRUCT->turncountersTracker++; + gBattleStruct->turncountersTracker++; } break; case 6: @@ -783,7 +783,7 @@ u8 UpdateTurnCounters(void) BattleScriptExecute(BattleScript_RainContinuesOrEnds); effect++; } - BATTLE_STRUCT->turncountersTracker++; + gBattleStruct->turncountersTracker++; break; case 7: if (gBattleWeather & WEATHER_SANDSTORM_ANY) @@ -796,12 +796,12 @@ u8 UpdateTurnCounters(void) else gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; - BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; + gBattleStruct->animArg1 = B_ANIM_SANDSTORM_CONTINUES; gBattleCommunication[MULTISTRING_CHOOSER] = 0; BattleScriptExecute(gBattlescriptCurrInstr); effect++; } - BATTLE_STRUCT->turncountersTracker++; + gBattleStruct->turncountersTracker++; break; case 8: if (gBattleWeather & WEATHER_SUN_ANY) @@ -817,7 +817,7 @@ u8 UpdateTurnCounters(void) BattleScriptExecute(gBattlescriptCurrInstr); effect++; } - BATTLE_STRUCT->turncountersTracker++; + gBattleStruct->turncountersTracker++; break; case 9: if (gBattleWeather & WEATHER_HAIL) @@ -830,12 +830,12 @@ u8 UpdateTurnCounters(void) else gBattlescriptCurrInstr = BattleScript_DamagingWeatherContinues; - BATTLE_STRUCT->animArg1 = B_ANIM_HAIL_CONTINUES; + gBattleStruct->animArg1 = B_ANIM_HAIL_CONTINUES; gBattleCommunication[MULTISTRING_CHOOSER] = 1; BattleScriptExecute(gBattlescriptCurrInstr); effect++; } - BATTLE_STRUCT->turncountersTracker++; + gBattleStruct->turncountersTracker++; break; case 10: effect++; @@ -852,16 +852,16 @@ u8 TurnBasedEffects(void) u8 effect = 0; gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); - while (BATTLE_STRUCT->turnEffectsBank < gNoOfAllBanks && BATTLE_STRUCT->turnEffectsTracker <= TURNBASED_MAX_CASE) + while (gBattleStruct->turnEffectsBank < gNoOfAllBanks && gBattleStruct->turnEffectsTracker <= TURNBASED_MAX_CASE) { - gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->turnEffectsBank]; + gActiveBank = gBankAttacker = gBanksByTurnOrder[gBattleStruct->turnEffectsBank]; if (gAbsentBankFlags & gBitTable[gActiveBank]) { - BATTLE_STRUCT->turnEffectsBank++; + gBattleStruct->turnEffectsBank++; } else { - switch (BATTLE_STRUCT->turnEffectsTracker) + switch (gBattleStruct->turnEffectsTracker) { case 0: // ingrain if ((gStatuses3[gActiveBank] & STATUS3_ROOTED) @@ -875,22 +875,22 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_IngrainTurnHeal); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 1: // end turn abilities if (AbilityBattleEffects(ABILITYEFFECT_ENDTURN, gActiveBank, 0, 0, 0)) effect++; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 2: // item effects if (ItemBattleEffects(1, gActiveBank, 0)) effect++; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 18: // item effects again if (ItemBattleEffects(1, gActiveBank, 1)) effect++; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 3: // leech seed if (gStatuses3[gActiveBank] & STATUS3_LEECHSEED && gBattleMons[gStatuses3[gActiveBank] & STATUS3_LEECHSEED_BANK].hp != 0 && gBattleMons[gActiveBank].hp != 0) @@ -899,12 +899,12 @@ u8 TurnBasedEffects(void) gBattleMoveDamage = gBattleMons[gActiveBank].maxHP / 8; if (gBattleMoveDamage == 0) gBattleMoveDamage = 1; - BATTLE_STRUCT->animArg1 = gBankTarget; - BATTLE_STRUCT->animArg2 = gBankAttacker; + gBattleStruct->animArg1 = gBankTarget; + gBattleStruct->animArg2 = gBankAttacker; BattleScriptExecute(BattleScript_LeechSeedTurnDrain); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 4: // poison if ((gBattleMons[gActiveBank].status1 & STATUS_POISON) && gBattleMons[gActiveBank].hp != 0) @@ -915,7 +915,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_PoisonTurnDmg); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 5: // toxic poison if ((gBattleMons[gActiveBank].status1 & STATUS_TOXIC_POISON) && gBattleMons[gActiveBank].hp != 0) @@ -929,7 +929,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_PoisonTurnDmg); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 6: // burn if ((gBattleMons[gActiveBank].status1 & STATUS_BURN) && gBattleMons[gActiveBank].hp != 0) @@ -940,7 +940,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_BurnTurnDmg); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 7: // spooky nightmares if ((gBattleMons[gActiveBank].status2 & STATUS2_NIGHTMARE) && gBattleMons[gActiveBank].hp != 0) @@ -952,7 +952,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_NightmareTurnDmg); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 8: // curse if ((gBattleMons[gActiveBank].status2 & STATUS2_CURSED) && gBattleMons[gActiveBank].hp != 0) @@ -963,7 +963,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(BattleScript_CurseTurnDmg); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 9: // wrap if ((gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) && gBattleMons[gActiveBank].hp != 0) @@ -971,8 +971,8 @@ u8 TurnBasedEffects(void) gBattleMons[gActiveBank].status2 -= 0x2000; if (gBattleMons[gActiveBank].status2 & STATUS2_WRAPPED) // damaged by wrap { - BATTLE_STRUCT->animArg1 = ewram16004arr(0, gActiveBank); - BATTLE_STRUCT->animArg2 = ewram16004arr(1, gActiveBank); + gBattleStruct->animArg1 = ewram16004arr(0, gActiveBank); + gBattleStruct->animArg2 = ewram16004arr(1, gActiveBank); gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 2; gBattleTextBuff1[2] = ewram16004arr(0, gActiveBank); @@ -995,7 +995,7 @@ u8 TurnBasedEffects(void) BattleScriptExecute(gBattlescriptCurrInstr); effect++; } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 10: // uproar if (gBattleMons[gActiveBank].status2 & STATUS2_UPROAR) @@ -1044,7 +1044,7 @@ u8 TurnBasedEffects(void) } } if (effect != 2) - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 11: // thrash if (gBattleMons[gActiveBank].status2 & STATUS2_LOCK_CONFUSE) @@ -1066,7 +1066,7 @@ u8 TurnBasedEffects(void) } } } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 12: // disable if (gDisableStructs[gActiveBank].disableTimer1 != 0) @@ -1089,7 +1089,7 @@ u8 TurnBasedEffects(void) effect++; } } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 13: // encore if (gDisableStructs[gActiveBank].encoreTimer1 != 0) @@ -1108,22 +1108,22 @@ u8 TurnBasedEffects(void) effect++; } } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 14: // lock-on decrement if (gStatuses3[gActiveBank] & STATUS3_ALWAYS_HITS) gStatuses3[gActiveBank] -= 0x8; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 15: // charge if (gDisableStructs[gActiveBank].chargeTimer1 && --gDisableStructs[gActiveBank].chargeTimer1 == 0) gStatuses3[gActiveBank] &= ~STATUS3_CHARGED_UP; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 16: // taunt if (gDisableStructs[gActiveBank].tauntTimer1) gDisableStructs[gActiveBank].tauntTimer1--; - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 17: // yawn if (gStatuses3[gActiveBank] & STATUS3_YAWN) @@ -1142,11 +1142,11 @@ u8 TurnBasedEffects(void) effect++; } } - BATTLE_STRUCT->turnEffectsTracker++; + gBattleStruct->turnEffectsTracker++; break; case 19: // done - BATTLE_STRUCT->turnEffectsTracker = 0; - BATTLE_STRUCT->turnEffectsBank++; + gBattleStruct->turnEffectsTracker = 0; + gBattleStruct->turnEffectsBank++; break; } if (effect != 0) @@ -1160,17 +1160,17 @@ u8 TurnBasedEffects(void) bool8 HandleWishPerishSongOnTurnEnd(void) { gHitMarker |= (HITMARKER_GRUDGE | HITMARKER_x20); - switch (BATTLE_STRUCT->sub80170DC_Tracker) + switch (gBattleStruct->sub80170DC_Tracker) { case 0: // future sight - while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) + while (gBattleStruct->sub80170DC_Bank < gNoOfAllBanks) { - gActiveBank = BATTLE_STRUCT->sub80170DC_Bank; + gActiveBank = gBattleStruct->sub80170DC_Bank; if (gAbsentBankFlags & gBitTable[gActiveBank]) - BATTLE_STRUCT->sub80170DC_Bank++; + gBattleStruct->sub80170DC_Bank++; else { - BATTLE_STRUCT->sub80170DC_Bank++; + gBattleStruct->sub80170DC_Bank++; if (gWishFutureKnock.futureSightCounter[gActiveBank] && --gWishFutureKnock.futureSightCounter[gActiveBank] == 0 && gBattleMons[gActiveBank].hp) { if (gWishFutureKnock.futureSightMove[gActiveBank] == MOVE_FUTURE_SIGHT) @@ -1191,17 +1191,17 @@ bool8 HandleWishPerishSongOnTurnEnd(void) } } } - BATTLE_STRUCT->sub80170DC_Tracker = 1; - BATTLE_STRUCT->sub80170DC_Bank = 0; + gBattleStruct->sub80170DC_Tracker = 1; + gBattleStruct->sub80170DC_Bank = 0; case 1: // perish song - while (BATTLE_STRUCT->sub80170DC_Bank < gNoOfAllBanks) + while (gBattleStruct->sub80170DC_Bank < gNoOfAllBanks) { - gActiveBank = gBankAttacker = gBanksByTurnOrder[BATTLE_STRUCT->sub80170DC_Bank]; + gActiveBank = gBankAttacker = gBanksByTurnOrder[gBattleStruct->sub80170DC_Bank]; if (gAbsentBankFlags & gBitTable[gActiveBank]) - BATTLE_STRUCT->sub80170DC_Bank++; + gBattleStruct->sub80170DC_Bank++; else { - BATTLE_STRUCT->sub80170DC_Bank++; + gBattleStruct->sub80170DC_Bank++; if (gStatuses3[gActiveBank] & STATUS3_PERISH_SONG) { gBattleTextBuff1[0] = 0xFD; @@ -1241,11 +1241,11 @@ bool8 HandleFaintedMonActions(void) do { int i; - switch (BATTLE_STRUCT->sub80173A4_Tracker) + switch (gBattleStruct->sub80173A4_Tracker) { case 0: - BATTLE_STRUCT->unk1605A = 0; - BATTLE_STRUCT->sub80173A4_Tracker++; + gBattleStruct->unk1605A = 0; + gBattleStruct->sub80173A4_Tracker++; for (i = 0; i < gNoOfAllBanks; i++) { if (gAbsentBankFlags & gBitTable[i] && !sub_8018018(i, 6, 6)) @@ -1254,54 +1254,54 @@ bool8 HandleFaintedMonActions(void) case 1: do { - gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; - if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(BATTLE_STRUCT->unk16113 & gBitTable[gBattlePartyID[BATTLE_STRUCT->unk1605A]]) && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A])) + gBank1 = gBankTarget = gBattleStruct->unk1605A; + if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gBattleStruct->unk16113 & gBitTable[gBattlePartyID[gBattleStruct->unk1605A]]) && !(gAbsentBankFlags & gBitTable[gBattleStruct->unk1605A])) { BattleScriptExecute(BattleScript_GiveExp); - BATTLE_STRUCT->sub80173A4_Tracker = 2; + gBattleStruct->sub80173A4_Tracker = 2; return 1; } - } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks); - BATTLE_STRUCT->sub80173A4_Tracker = 3; + } while (++gBattleStruct->unk1605A != gNoOfAllBanks); + gBattleStruct->sub80173A4_Tracker = 3; break; case 2: sub_8015740(gBank1); - if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks) - BATTLE_STRUCT->sub80173A4_Tracker = 3; + if (++gBattleStruct->unk1605A == gNoOfAllBanks) + gBattleStruct->sub80173A4_Tracker = 3; else - BATTLE_STRUCT->sub80173A4_Tracker = 1; + gBattleStruct->sub80173A4_Tracker = 1; break; case 3: - BATTLE_STRUCT->unk1605A = 0; - BATTLE_STRUCT->sub80173A4_Tracker++; + gBattleStruct->unk1605A = 0; + gBattleStruct->sub80173A4_Tracker++; case 4: do { - gBank1 = gBankTarget = BATTLE_STRUCT->unk1605A; //or should banks be switched? - if (gBattleMons[BATTLE_STRUCT->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[BATTLE_STRUCT->unk1605A])) + gBank1 = gBankTarget = gBattleStruct->unk1605A; //or should banks be switched? + if (gBattleMons[gBattleStruct->unk1605A].hp == 0 && !(gAbsentBankFlags & gBitTable[gBattleStruct->unk1605A])) { BattleScriptExecute(BattleScript_HandleFaintedMon); - BATTLE_STRUCT->sub80173A4_Tracker = 5; + gBattleStruct->sub80173A4_Tracker = 5; return 1; } - } while (++BATTLE_STRUCT->unk1605A != gNoOfAllBanks); - BATTLE_STRUCT->sub80173A4_Tracker = 6; + } while (++gBattleStruct->unk1605A != gNoOfAllBanks); + gBattleStruct->sub80173A4_Tracker = 6; break; case 5: - if (++BATTLE_STRUCT->unk1605A == gNoOfAllBanks) - BATTLE_STRUCT->sub80173A4_Tracker = 6; + if (++gBattleStruct->unk1605A == gNoOfAllBanks) + gBattleStruct->sub80173A4_Tracker = 6; else - BATTLE_STRUCT->sub80173A4_Tracker = 4; + gBattleStruct->sub80173A4_Tracker = 4; break; case 6: if (AbilityBattleEffects(9, 0, 0, 0, 0) || AbilityBattleEffects(0xB, 0, 0, 0, 0) || ItemBattleEffects(1, 0, 1) || AbilityBattleEffects(6, 0, 0, 0, 0)) return 1; - BATTLE_STRUCT->sub80173A4_Tracker++; + gBattleStruct->sub80173A4_Tracker++; break; case 7: break; } - } while (BATTLE_STRUCT->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE); + } while (gBattleStruct->sub80173A4_Tracker != HandleFaintedMonActions_MAX_CASE); return 0; } @@ -1320,15 +1320,15 @@ void TryClearRageStatuses(void) u8 AtkCanceller_UnableToUseMove(void) { u8 effect = 0; - s32* bideDmg = &BATTLE_STRUCT->bideDmg; + s32* bideDmg = &gBattleStruct->bideDmg; do { - switch (BATTLE_STRUCT->atkCancellerTracker) + switch (gBattleStruct->atkCancellerTracker) { case 0: // flags clear gBattleMons[gBankAttacker].status2 &= ~(STATUS2_DESTINY_BOND); gStatuses3[gBankAttacker] &= ~(STATUS3_GRUDGE); - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 1: // check being asleep if (gBattleMons[gBankAttacker].status1 & STATUS_SLEEP) @@ -1372,7 +1372,7 @@ u8 AtkCanceller_UnableToUseMove(void) } } } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 2: // check being frozen if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE) @@ -1386,7 +1386,7 @@ u8 AtkCanceller_UnableToUseMove(void) } else { - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; } } @@ -1399,7 +1399,7 @@ u8 AtkCanceller_UnableToUseMove(void) } effect = 2; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 3: // truant if (gBattleMons[gBankAttacker].ability == ABILITY_TRUANT && gDisableStructs[gBankAttacker].truantCounter) @@ -1411,7 +1411,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattleMoveFlags |= MOVESTATUS_MISSED; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 4: // recharge if (gBattleMons[gBankAttacker].status2 & STATUS2_RECHARGE) @@ -1423,7 +1423,7 @@ u8 AtkCanceller_UnableToUseMove(void) gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 5: // flinch if (gBattleMons[gBankAttacker].status2 & STATUS2_FLINCHED) @@ -1435,19 +1435,19 @@ u8 AtkCanceller_UnableToUseMove(void) gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 6: // disabled move if (gDisableStructs[gBankAttacker].disabledMove == gCurrentMove && gDisableStructs[gBankAttacker].disabledMove != 0) { gProtectStructs[gBankAttacker].usedDisabledMove = 1; - BATTLE_STRUCT->scriptingActive = gBankAttacker; + gBattleStruct->scriptingActive = gBankAttacker; CancelMultiTurnMoves(gBankAttacker); gBattlescriptCurrInstr = BattleScript_MoveUsedIsDisabled; gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 7: // taunt if (gDisableStructs[gBankAttacker].tauntTimer1 && gBattleMoves[gCurrentMove].power == 0) @@ -1458,7 +1458,7 @@ u8 AtkCanceller_UnableToUseMove(void) gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 8: // imprisoned if (IsImprisoned(gBankAttacker, gCurrentMove)) @@ -1469,7 +1469,7 @@ u8 AtkCanceller_UnableToUseMove(void) gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 9: // confusion if (gBattleMons[gBankAttacker].status2 & STATUS2_CONFUSION) @@ -1499,7 +1499,7 @@ u8 AtkCanceller_UnableToUseMove(void) } effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 10: // paralysis if (gBattleMons[gBankAttacker].status1 & STATUS_PARALYSIS && (Random() % 4) == 0) @@ -1510,12 +1510,12 @@ u8 AtkCanceller_UnableToUseMove(void) gHitMarker |= HITMARKER_UNABLE_TO_USE_MOVE; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 11: // infatuation if (gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) { - BATTLE_STRUCT->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10); + gBattleStruct->scriptingActive = CountTrailingZeroBits((gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) >> 0x10); if (Random() & 1) BattleScriptPushCursor(); else @@ -1528,7 +1528,7 @@ u8 AtkCanceller_UnableToUseMove(void) gBattlescriptCurrInstr = BattleScript_MoveUsedIsInLove; effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 12: // bide if (gBattleMons[gBankAttacker].status2 & STATUS2_BIDE) @@ -1553,7 +1553,7 @@ u8 AtkCanceller_UnableToUseMove(void) } effect = 1; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 13: // move thawing if (gBattleMons[gBankAttacker].status1 & STATUS_FREEZE) @@ -1567,13 +1567,13 @@ u8 AtkCanceller_UnableToUseMove(void) } effect = 2; } - BATTLE_STRUCT->atkCancellerTracker++; + gBattleStruct->atkCancellerTracker++; break; case 14: // last case break; } - } while (BATTLE_STRUCT->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0); + } while (gBattleStruct->atkCancellerTracker != ATKCANCELLER_MAX_CASE && effect == 0); if (effect == 2) { @@ -1731,8 +1731,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) else move = gCurrentMove; - if (BATTLE_STRUCT->dynamicMoveType) - moveType = BATTLE_STRUCT->dynamicMoveType & 0x3F; + if (gBattleStruct->dynamicMoveType) + moveType = gBattleStruct->dynamicMoveType & 0x3F; else moveType = gBattleMoves[move].type; @@ -1755,8 +1755,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_RAIN_ANY)) { gBattleWeather = (WEATHER_RAIN_TEMPORARY | WEATHER_RAIN_PERMANENT); - BATTLE_STRUCT->animArg1 = B_ANIM_RAIN_CONTINUES; - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->animArg1 = B_ANIM_RAIN_CONTINUES; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1764,8 +1764,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_SANDSTORM_ANY)) { gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); - BATTLE_STRUCT->animArg1 = B_ANIM_SANDSTORM_CONTINUES; - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->animArg1 = B_ANIM_SANDSTORM_CONTINUES; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1773,8 +1773,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (!(gBattleWeather & WEATHER_SUN_ANY)) { gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); - BATTLE_STRUCT->animArg1 = B_ANIM_SUN_CONTINUES; - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->animArg1 = B_ANIM_SUN_CONTINUES; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1791,7 +1791,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY); BattleScriptPushCursorAndCallback(BattleScript_DrizzleActivates); - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1801,7 +1801,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); BattleScriptPushCursorAndCallback(BattleScript_SandstreamActivates); - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1811,7 +1811,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); BattleScriptPushCursorAndCallback(BattleScript_DroughtActivates); - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -1829,8 +1829,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (effect != 0) { BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = bank; - BATTLE_STRUCT->castformToChangeInto = effect - 1; + gBattleStruct->scriptingActive = bank; + gBattleStruct->castformToChangeInto = effect - 1; } break; case ABILITY_TRACE: @@ -1852,8 +1852,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (effect != 0) { BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = target1; - BATTLE_STRUCT->castformToChangeInto = effect - 1; + gBattleStruct->scriptingActive = target1; + gBattleStruct->castformToChangeInto = effect - 1; break; } } @@ -1897,7 +1897,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) gBattleMons[bank].status1 = 0; // BUG: The nightmare status does not get cleared here. This was fixed in Emerald. //gBattleMons[bank].status2 &= ~(STATUS2_NIGHTMARE); - BATTLE_STRUCT->scriptingActive = gActiveBank = bank; + gBattleStruct->scriptingActive = gActiveBank = bank; BattleScriptPushCursorAndCallback(BattleScript_ShedSkinActivates); EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[bank].status1); MarkBufferBankForExecution(gActiveBank); @@ -1908,10 +1908,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gBattleMons[bank].statStages[STAT_STAGE_SPEED] < 0xC && gDisableStructs[bank].isFirstTurn != 2) { gBattleMons[bank].statStages[STAT_STAGE_SPEED]++; - BATTLE_STRUCT->animArg1 = 0x11; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->animArg1 = 0x11; + gBattleStruct->animArg2 = 0; BattleScriptPushCursorAndCallback(BattleScript_SpeedBoostActivates); - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; effect++; } break; @@ -2218,7 +2218,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_AbilityCuredStatus; - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gActiveBank = bank; EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); MarkBufferBankForExecution(gActiveBank); @@ -2238,8 +2238,8 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (effect) { BattleScriptPushCursorAndCallback(BattleScript_CastformChange); - BATTLE_STRUCT->scriptingActive = bank; - BATTLE_STRUCT->castformToChangeInto = effect - 1; + gBattleStruct->scriptingActive = bank; + gBattleStruct->castformToChangeInto = effect - 1; return effect; } } @@ -2251,11 +2251,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) { gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); - BATTLE_STRUCT->synchroniseEffect &= 0x3F; - if (BATTLE_STRUCT->synchroniseEffect == 6) - BATTLE_STRUCT->synchroniseEffect = 2; - gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect + 0x40; - BATTLE_STRUCT->scriptingActive = gBankTarget; + gBattleStruct->synchroniseEffect &= 0x3F; + if (gBattleStruct->synchroniseEffect == 6) + gBattleStruct->synchroniseEffect = 2; + gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchroniseEffect + 0x40; + gBattleStruct->scriptingActive = gBankTarget; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; @@ -2267,11 +2267,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) { gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); - BATTLE_STRUCT->synchroniseEffect &= 0x3F; - if (BATTLE_STRUCT->synchroniseEffect == 6) - BATTLE_STRUCT->synchroniseEffect = 2; - gBattleCommunication[MOVE_EFFECT_BYTE] = BATTLE_STRUCT->synchroniseEffect; - BATTLE_STRUCT->scriptingActive = gBankAttacker; + gBattleStruct->synchroniseEffect &= 0x3F; + if (gBattleStruct->synchroniseEffect == 6) + gBattleStruct->synchroniseEffect = 2; + gBattleCommunication[MOVE_EFFECT_BYTE] = gBattleStruct->synchroniseEffect; + gBattleStruct->scriptingActive = gBankAttacker; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_SynchronizeActivates; gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; @@ -2287,7 +2287,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) gLastUsedAbility = ABILITY_INTIMIDATE; gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); BattleScriptPushCursorAndCallback(gUnknown_081D978C); - BATTLE_STRUCT->intimidateBank = i; + gBattleStruct->intimidateBank = i; effect++; break; } @@ -2346,7 +2346,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { BattleScriptPushCursorAndCallback(BattleScript_TraceActivates); gStatuses3[i] &= ~(STATUS3_TRACE); - BATTLE_STRUCT->scriptingActive = i; + gBattleStruct->scriptingActive = i; gBattleTextBuff1[0] = 0xFD; gBattleTextBuff1[1] = 4; @@ -2373,7 +2373,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) gStatuses3[i] &= ~(STATUS3_INTIMIDATE_POKES); BattleScriptPushCursor(); gBattlescriptCurrInstr = gUnknown_081D9795; - BATTLE_STRUCT->intimidateBank = i; + gBattleStruct->intimidateBank = i; effect++; break; } @@ -2499,7 +2499,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) return effect; } -void BattleScriptExecute(u8* BS_ptr) +void BattleScriptExecute(const u8* BS_ptr) { gBattlescriptCurrInstr = BS_ptr; B_FUNCTION_STACK->ptr[B_FUNCTION_STACK->size++] = gBattleMainFunc; @@ -2586,7 +2586,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) switch (bankHoldEffect) { case HOLD_EFFECT_DOUBLE_PRIZE: - BATTLE_STRUCT->moneyMultiplier = 2; + gBattleStruct->moneyMultiplier = 2; break; case HOLD_EFFECT_RESTORE_STATS: for (i = 0; i < 8; i++) @@ -2599,7 +2599,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } if (effect) { - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gStringBank = bank; gActiveBank = gBankAttacker = bank; BattleScriptExecute(BattleScript_WhiteHerbEnd2); @@ -2672,7 +2672,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } if (effect) { - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gStringBank = bank; gActiveBank = gBankAttacker = bank; BattleScriptExecute(BattleScript_WhiteHerbEnd2); @@ -2809,9 +2809,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff2[4] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_ATK; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_ATK; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x10 + STAT_STAGE_ATK; + gBattleStruct->animArg1 = 0xE + STAT_STAGE_ATK; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -2825,9 +2825,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff1[3] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_DEF; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_DEF; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x10 + STAT_STAGE_DEF; + gBattleStruct->animArg1 = 0xE + STAT_STAGE_DEF; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -2841,9 +2841,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff1[3] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPEED; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPEED; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPEED; + gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPEED; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -2857,9 +2857,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff1[3] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPATK; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPATK; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPATK; + gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPATK; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -2873,9 +2873,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff1[3] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x10 + STAT_STAGE_SPDEF; - BATTLE_STRUCT->animArg1 = 0xE + STAT_STAGE_SPDEF; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x10 + STAT_STAGE_SPDEF; + gBattleStruct->animArg1 = 0xE + STAT_STAGE_SPDEF; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -2918,9 +2918,9 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) gBattleTextBuff2[7] = EOS; gEffectBank = bank; - BATTLE_STRUCT->statChanger = 0x21 + i; - BATTLE_STRUCT->animArg1 = 0x21 + i + 6; - BATTLE_STRUCT->animArg2 = 0; + gBattleStruct->statChanger = 0x21 + i; + gBattleStruct->animArg1 = 0x21 + i + 6; + gBattleStruct->animArg2 = 0; BattleScriptExecute(BattleScript_BerryStatRaiseEnd2); effect = ITEM_STATS_CHANGE; } @@ -3033,7 +3033,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } if (effect) { - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gStringBank = bank; gActiveBank = gBankAttacker = bank; switch (effect) @@ -3181,7 +3181,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } if (effect) { - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gStringBank = bank; BattleScriptPushCursor(); gBattlescriptCurrInstr = BattleScript_WhiteHerbRet; @@ -3191,7 +3191,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) } if (effect) { - BATTLE_STRUCT->scriptingActive = bank; + gBattleStruct->scriptingActive = bank; gStringBank = bank; gActiveBank = bank; EmitSetMonData(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gActiveBank].status1); @@ -3228,7 +3228,7 @@ u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn) { gLastUsedItem = atkItem; gStringBank = gBankAttacker; - BATTLE_STRUCT->scriptingActive = gBankAttacker; + gBattleStruct->scriptingActive = gBankAttacker; gBattleMoveDamage = (gSpecialStatuses[gBankTarget].moveturnLostHP / atkQuality) * -1; if (gBattleMoveDamage == 0) gBattleMoveDamage = -1; @@ -3433,7 +3433,7 @@ u8 IsMonDisobedient(void) gRandomMove = gBattleMons[gBankAttacker].moves[gCurrMovePos]; gBattleCommunication[3] = 0; gDynamicBasePower = 0; - BATTLE_STRUCT->dynamicMoveType = 0; + gBattleStruct->dynamicMoveType = 0; gBattlescriptCurrInstr = BattleScript_IgnoresAndUsesRandomMove; gBankTarget = GetMoveTarget(gRandomMove, 0); gHitMarker |= HITMARKER_x200000; -- cgit v1.2.3 From 15cffaecf34d93c99aa635586ad24fa9978a70a0 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Mon, 15 Jan 2018 21:29:14 -0600 Subject: match ChangeStatBuffs --- src/battle/battle_2.c | 2 +- src/battle/battle_4.c | 893 +++++++++++--------------------------------------- 2 files changed, 189 insertions(+), 706 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 2368f58df..b00c35312 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1664,7 +1664,7 @@ void sub_8010874(void) } } -void SwitchInClearStructs(void) +void SwitchInClearSetData(void) { struct DisableStruct sp0 = gDisableStructs[gActiveBank]; s32 i; diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 0c5f5927e..3763fc309 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -2,6 +2,7 @@ #include "battle.h" #include "battle_message.h" #include "battle_string_ids.h" +#include "battle_script_commands.h" #include "battle_util.h" #include "constants/battle_move_effects.h" #include "constants/moves.h" @@ -204,7 +205,7 @@ void HandleLowHpMusicChange(struct Pokemon*, u8 bank); void AdjustFriendship(struct Pokemon*, u8 value); bool8 IsTradedMon(struct Pokemon*); void BattleScriptPop(void); -void SwitchInClearStructs(void); +void SwitchInClearSetData(void); u8* ConvertIntToDecimalStringN(u8*, s32, u8, u8); u8 GetSetPokedexFlag(u16 nationalNum, u8 caseID); u16 SpeciesToNationalPokedexNum(u16 species); @@ -348,7 +349,7 @@ extern u8 BattleScript_SelectingImprisionedMoveInPalace[]; #define RecordAbilitySetField6(ability, fieldValue) \ (gLastUsedAbility = ability, gBattleCommunication[6] = fieldValue, RecordAbilityBattle(gBankTarget, ability)) -#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_physical.moveturnLostHP_special))) +#define TARGET_TURN_DAMAGED (((gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special))) #define HP_ON_SWITCHOUT (((u16*)(ewram_addr + 0x160BC))) @@ -387,7 +388,7 @@ static void atk1F_jumpifsideaffecting(void); static void atk20_jumpifstat(void); static void atk21_jumpifstatus3condition(void); static void atk22_jumpiftype(void); -void atk23_getexp(void); +static void atk23_getexp(void); static void atk24(void); static void atk25_movevaluescleanup(void); static void atk26_setmultihit(void); @@ -425,7 +426,7 @@ static void atk45_playanimation(void); static void atk46_playanimation2(void); static void atk47_setgraphicalstatchangevalues(void); static void atk48_playstatchangeanimation(void); -static void atk49_moveend(void); +void atk49_moveend(void); static void atk4A_typecalc2(void); static void atk4B_returnatktoball(void); static void atk4C_getswitchedmondata(void); @@ -489,7 +490,7 @@ static void atk85_stockpile(void); static void atk86_stockpiletobasedamage(void); static void atk87_stockpiletohpheal(void); static void atk88_negativedamage(void); -static u8 ChangeStatBuffs(s8, u8, u8, u8*); +static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr); static void atk89_statbuffchange(void); static void atk8A_normalisebuffs(void); static void atk8B_setbide(void); @@ -5355,7 +5356,7 @@ static void atk22_jumpiftype(void) //u8 bank, u8 type, *ptr gBattlescriptCurrInstr += 7; } -void atk23_getexp(void) +static void atk23_getexp(void) { u16 item; s32 i; // also used as stringId @@ -6882,7 +6883,7 @@ static void atk49_moveend(void) } #else __attribute__((naked)) -static void atk49_moveend(void) +void atk49_moveend(void) { asm(".syntax unified\n\ push {r4-r7,lr}\n\ @@ -8293,27 +8294,19 @@ static void atk4C_getswitchedmondata(void) gBattlescriptCurrInstr += 2; } -static inline u8 get_knocked_off_byte(u8 bank) -{ - register u32 side asm("r2") = GetBankSide(bank); - register struct WishFutureKnock* dummy = &gWishFutureKnock; - register u8* aa = ((u8*)((u8*)(dummy))); - register u8* bb = aa + 0x29; - register u8* cc asm("r0") = side + bb; - return *cc; -} - static void atk4D_switchindataupdate(void) { - struct BattlePokemon OldData; - int i; + struct BattlePokemon oldData; + s32 i; u8 *monData; + if (gBattleExecBuffer) return; - gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); - OldData = gBattleMons[gActiveBank]; + gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]); + oldData = gBattleMons[gActiveBank]; monData = (u8*)(&gBattleMons[gActiveBank]); + for (i = 0; i < sizeof(struct BattlePokemon); i++) { monData[i] = gBattleBufferB[gActiveBank][4 + i]; @@ -8322,8 +8315,10 @@ static void atk4D_switchindataupdate(void) gBattleMons[gActiveBank].type1 = gBaseStats[gBattleMons[gActiveBank].species].type1; gBattleMons[gActiveBank].type2 = gBaseStats[gBattleMons[gActiveBank].species].type2; gBattleMons[gActiveBank].ability = GetAbilityBySpecies(gBattleMons[gActiveBank].species, gBattleMons[gActiveBank].altAbility); - //check knocked off item - if (get_knocked_off_byte(gActiveBank) & gBitTable[gBattlePartyID[gActiveBank]]) + + // check knocked off item + i = GetBankSide(gActiveBank); + if (gWishFutureKnock.knockedOffPokes[i] & gBitTable[gBattlePartyID[gActiveBank]]) { gBattleMons[gActiveBank].item = 0; } @@ -8332,17 +8327,16 @@ static void atk4D_switchindataupdate(void) { for (i = 0; i < 8; i++) { - gBattleMons[gActiveBank].statStages[i] = OldData.statStages[i]; + gBattleMons[gActiveBank].statStages[i] = oldData.statStages[i]; } - gBattleMons[gActiveBank].status2 = OldData.status2; + gBattleMons[gActiveBank].status2 = oldData.status2; } - SwitchInClearStructs(); + + SwitchInClearSetData(); + gBattleStruct->scriptingActive = gActiveBank; - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 7; - gBattleTextBuff1[2] = gActiveBank; - gBattleTextBuff1[3] = gBattlePartyID[gActiveBank]; - gBattleTextBuff1[4] = EOS; + + PREPARE_MON_NICK_BUFFER(gBattleTextBuff1, gActiveBank, gBattlePartyID[gActiveBank]); gBattlescriptCurrInstr += 2; } @@ -10160,6 +10154,76 @@ _08024190: .4byte gBattlescriptCurrInstr\n\ } #endif //NONMATCHING +/* +static u32 GetTrainerMoneyToGive(u16 trainerId) +{ + u32 i = 0; + u32 lastMonLevel = 0; + u32 moneyReward = 0; + + if (trainerId == SECRET_BASE_OPPONENT) + { + moneyReward = 20 * eSecretBaseRecord->partyLevels[0] * gBattleStruct->moneyMultiplier; + } + else + { + switch (gTrainers[trainerId].partyFlags) + { + case 0: + { + const struct TrainerMonNoItemDefaultMoves *party = gTrainers[trainerId].party.NoItemDefaultMoves; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; + } + break; + case F_TRAINER_PARTY_CUSTOM_MOVESET: + { + const struct TrainerMonNoItemCustomMoves *party = gTrainers[trainerId].party.NoItemCustomMoves; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; + } + break; + case F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemDefaultMoves *party = gTrainers[trainerId].party.ItemDefaultMoves; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; + } + break; + case F_TRAINER_PARTY_CUSTOM_MOVESET | F_TRAINER_PARTY_HELD_ITEM: + { + const struct TrainerMonItemCustomMoves *party = gTrainers[trainerId].party.ItemCustomMoves; + lastMonLevel = party[gTrainers[trainerId].partySize - 1].lvl; + } + break; + } + + for (; gTrainerMoneyTable[i].classId != 0xFF; i++) + { + if (gTrainerMoneyTable[i].classId == gTrainers[trainerId].trainerClass) + break; + } + + if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) + moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * 2 * gTrainerMoneyTable[i].value; + else + moneyReward = 4 * lastMonLevel * gBattleStruct->moneyMultiplier * gTrainerMoneyTable[i].value; + } + + return moneyReward; +} + +static void atk5D_getmoneyreward(void) +{ + u32 moneyReward = GetTrainerMoneyToGive(gTrainerBattleOpponent_A); + if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS) + moneyReward += GetTrainerMoneyToGive(gTrainerBattleOpponent_B); + + AddMoney(&gSaveBlock1Ptr->money, moneyReward); + + PREPARE_WORD_NUMBER_BUFFER(gBattleTextBuff1, 5, moneyReward) + + gBattlescriptCurrInstr++; +} +*/ + static void atk5E_8025A70(void) { gActiveBank = GetBattleBank(T2_READ_8(gBattlescriptCurrInstr + 1)); @@ -11423,756 +11487,175 @@ static void atk88_negativedamage(void) gBattlescriptCurrInstr++; } -#ifdef NONMATCHING -u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) +static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr) { - u8 r9 = 0; - u8 r10 = 0; - u8 index; - if (flags & 0x40) + bool8 certain = FALSE; + bool8 notProtectAffected = FALSE; + u32 index; + + if (flags & MOVE_EFFECT_AFFECTS_USER) gActiveBank = gBankAttacker; else gActiveBank = gBankTarget; - flags &= ~(0x40); - if (flags & 0x80) - r9++; - flags &= ~(0x80); - if (flags & 0x20) - r10++; - flags &= ~(0x20); - gBattleTextBuff1[0] = 0xFD; - gBattleTextBuff1[1] = 5; - gBattleTextBuff1[2] = stat; - gBattleTextBuff1[3] = 0xFF; + flags &= ~(MOVE_EFFECT_AFFECTS_USER); + + if (flags & MOVE_EFFECT_CERTAIN) + certain++; + flags &= ~(MOVE_EFFECT_CERTAIN); - if ((statchanger << 0x18) < 0) //stat decrease + if (flags & STAT_CHANGE_NOT_PROTECT_AFFECTED) + notProtectAffected++; + flags &= ~(STAT_CHANGE_NOT_PROTECT_AFFECTED); + + PREPARE_STAT_BUFFER(gBattleTextBuff1, statId) + + if ((statValue << 0x18) < 0) // stat decrease { - if (gSideTimers[GetBankIdentity(gActiveBank) & 1].mistTimer && !r9 && gCurrentMove != MOVE_CURSE) + if (gSideTimers[GET_BANK_SIDE(gActiveBank)].mistTimer + && !certain && gCurrentMove != MOVE_CURSE) { - if (flags == 1) + if (flags == STAT_CHANGE_BS_PTR) { - if (gSpecialStatuses[gActiveBank].statloweringflag) - gBattlescriptCurrInstr = bs_ptr; + if (gSpecialStatuses[gActiveBank].statLowered) + { + gBattlescriptCurrInstr = BS_ptr; + } else { - BattleScriptPush(bs_ptr); + BattleScriptPush(BS_ptr); gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_MistProtected; - gSpecialStatuses[gActiveBank].statloweringflag = 1; + gSpecialStatuses[gActiveBank].statLowered = 1; } } - return 1; + return STAT_CHANGE_DIDNT_WORK; } - else if (gCurrentMove != MOVE_CURSE && r10 != 1 && JumpIfMoveAffectedByProtect(0)) + else if (gCurrentMove != MOVE_CURSE + && notProtectAffected != TRUE && JumpIfMoveAffectedByProtect(0)) { gBattlescriptCurrInstr = BattleScript_ButItFailed; - return 1; + return STAT_CHANGE_DIDNT_WORK; } - else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE) && !r9 && gCurrentMove != MOVE_CURSE) + else if ((gBattleMons[gActiveBank].ability == ABILITY_CLEAR_BODY + || gBattleMons[gActiveBank].ability == ABILITY_WHITE_SMOKE) + && !certain && gCurrentMove != MOVE_CURSE) { - if (flags == 1) + if (flags == STAT_CHANGE_BS_PTR) { - if (gSpecialStatuses[gActiveBank].statloweringflag) - gBattlescriptCurrInstr = bs_ptr; + if (gSpecialStatuses[gActiveBank].statLowered) + { + gBattlescriptCurrInstr = BS_ptr; + } else { - BattleScriptPush(bs_ptr); + BattleScriptPush(BS_ptr); gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; RecordAbilityBattle(gActiveBank, gLastUsedAbility); - gSpecialStatuses[gActiveBank].statloweringflag = 1; + gSpecialStatuses[gActiveBank].statLowered = 1; } } - return 1; + return STAT_CHANGE_DIDNT_WORK; } - else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE && !r9 && stat == STAT_STAGE_ACC) + else if (gBattleMons[gActiveBank].ability == ABILITY_KEEN_EYE + && !certain && statId == STAT_STAGE_ACC) { - if (flags == 1) + if (flags == STAT_CHANGE_BS_PTR) { - BattleScriptPush(bs_ptr); + BattleScriptPush(BS_ptr); gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; RecordAbilityBattle(gActiveBank, gLastUsedAbility); } - return 1; + return STAT_CHANGE_DIDNT_WORK; } - else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER && !r9 && stat == STAT_STAGE_ATK) + else if (gBattleMons[gActiveBank].ability == ABILITY_HYPER_CUTTER + && !certain && statId == STAT_STAGE_ATK) { - if (flags == 1) + if (flags == STAT_CHANGE_BS_PTR) { - BattleScriptPush(bs_ptr); + BattleScriptPush(BS_ptr); gBattleStruct->scriptingActive = gActiveBank; gBattlescriptCurrInstr = BattleScript_AbilityNoSpecificStatLoss; gLastUsedAbility = gBattleMons[gActiveBank].ability; RecordAbilityBattle(gActiveBank, gLastUsedAbility); } - return 1; + return STAT_CHANGE_DIDNT_WORK; } else if (gBattleMons[gActiveBank].ability == ABILITY_SHIELD_DUST && flags == 0) - return 1; - else //decrease { - statchanger = -((statchanger >> 4) & (7)); - gBattleTextBuff2[0] = 0xFD; + return STAT_CHANGE_DIDNT_WORK; + } + else // try to decrease + { + statValue = -GET_STAT_BUFF_VALUE(statValue); + gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; index = 1; - if (statchanger == -2) + if (statValue == -2) { - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = 0xD3; //harshly - gBattleTextBuff2[3] = 0x0; + gBattleTextBuff2[1] = B_BUFF_STRING; + gBattleTextBuff2[2] = STRINGID_STATHARSHLY; + gBattleTextBuff2[3] = STRINGID_STATHARSHLY >> 8; index = 4; } - gBattleTextBuff2[index] = 0; + gBattleTextBuff2[index] = B_BUFF_STRING; index++; - gBattleTextBuff2[index] = 0xD4; //fell + gBattleTextBuff2[index] = STRINGID_STATFELL; index++; - gBattleTextBuff2[index] = 0; + gBattleTextBuff2[index] = STRINGID_STATFELL >> 8; index++; - gBattleTextBuff2[index] = 0xFF; + gBattleTextBuff2[index] = B_BUFF_EOS; - if (gBattleMons[gActiveBank].statStages[stat] == 0) - { + if (gBattleMons[gActiveBank].statStages[statId] == 0) gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } else - { - u8 stringID = 0; - if (gBankTarget == gActiveBank) - stringID = 1; - gBattleCommunication[MULTISTRING_CHOOSER] = stringID; - } + gBattleCommunication[MULTISTRING_CHOOSER] = (gBankTarget == gActiveBank); + } } - else //stat increase + else // stat increase { - statchanger = (statchanger >> 4) & (7); - gBattleTextBuff2[0] = 0xFD; + statValue = GET_STAT_BUFF_VALUE(statValue); + gBattleTextBuff2[0] = B_BUFF_PLACEHOLDER_BEGIN; index = 1; - if (statchanger == 2) + if (statValue == 2) { - gBattleTextBuff2[1] = 0; - gBattleTextBuff2[2] = 0xD1; //sharply - gBattleTextBuff2[3] = 0x0; + gBattleTextBuff2[1] = B_BUFF_STRING; + gBattleTextBuff2[2] = STRINGID_STATSHARPLY; + gBattleTextBuff2[3] = STRINGID_STATSHARPLY >> 8; index = 4; } - gBattleTextBuff2[index] = 0; + gBattleTextBuff2[index] = B_BUFF_STRING; index++; - gBattleTextBuff2[index] = 0xD2; //rose + gBattleTextBuff2[index] = STRINGID_STATROSE; index++; - gBattleTextBuff2[index] = 0; + gBattleTextBuff2[index] = STRINGID_STATROSE >> 8; index++; - gBattleTextBuff2[index] = 0xFF; + gBattleTextBuff2[index] = B_BUFF_EOS; - if (gBattleMons[gActiveBank].statStages[stat] == 0xC) - { + if (gBattleMons[gActiveBank].statStages[statId] == 0xC) gBattleCommunication[MULTISTRING_CHOOSER] = 2; - } else - { - u8 stringID = 0; - if (gBankTarget == gActiveBank) - stringID = 1; - gBattleCommunication[MULTISTRING_CHOOSER] = stringID; - } + gBattleCommunication[MULTISTRING_CHOOSER] = (gBankTarget == gActiveBank); } - gBattleMons[gActiveBank].statStages[stat] += statchanger; - if (gBattleMons[gActiveBank].statStages[stat] < 0) - gBattleMons[gActiveBank].statStages[stat] = 0; - if (gBattleMons[gActiveBank].statStages[stat] > 0xC) - gBattleMons[gActiveBank].statStages[stat] = 0xC; + gBattleMons[gActiveBank].statStages[statId] += statValue; + if (gBattleMons[gActiveBank].statStages[statId] < 0) + gBattleMons[gActiveBank].statStages[statId] = 0; + if (gBattleMons[gActiveBank].statStages[statId] > 0xC) + gBattleMons[gActiveBank].statStages[statId] = 0xC; - if (gBattleCommunication[MULTISTRING_CHOOSER] == 2) - { - if (flags & 1) - gBattleMoveFlags |= MOVESTATUS_MISSED; - if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & 1)) //what the actual fuck gamefreak... - return 1; - } - return 0; -} + if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && flags & STAT_CHANGE_BS_PTR) + gBattleMoveFlags |= MOVESTATUS_MISSED; -#else -__attribute__((naked)) -u8 ChangeStatBuffs(s8 statchanger, u8 stat, u8 flags, u8* bs_ptr) -{ - asm(".syntax unified\n\ - push {r4-r7,lr}\n\ - mov r7, r10\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5-r7}\n\ - mov r8, r3\n\ - lsls r0, 24\n\ - lsrs r6, r0, 24\n\ - lsls r1, 24\n\ - lsrs r7, r1, 24\n\ - lsls r2, 24\n\ - lsrs r5, r2, 24\n\ - movs r0, 0\n\ - mov r9, r0\n\ - mov r10, r0\n\ - movs r0, 0x40\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08025E54\n\ - ldr r0, _08025E4C @ =gActiveBank\n\ - ldr r1, _08025E50 @ =gBankAttacker\n\ - b _08025E58\n\ - .align 2, 0\n\ -_08025E4C: .4byte gActiveBank\n\ -_08025E50: .4byte gBankAttacker\n\ -_08025E54:\n\ - ldr r0, _08025EF8 @ =gActiveBank\n\ - ldr r1, _08025EFC @ =gBankTarget\n\ -_08025E58:\n\ - ldrb r1, [r1]\n\ - strb r1, [r0]\n\ - movs r0, 0xBF\n\ - ands r5, r0\n\ - movs r0, 0x80\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08025E72\n\ - mov r0, r9\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r9, r0\n\ -_08025E72:\n\ - movs r0, 0x7F\n\ - ands r5, r0\n\ - movs r0, 0x20\n\ - ands r0, r5\n\ - cmp r0, 0\n\ - beq _08025E88\n\ - mov r0, r10\n\ - adds r0, 0x1\n\ - lsls r0, 24\n\ - lsrs r0, 24\n\ - mov r10, r0\n\ -_08025E88:\n\ - movs r0, 0xDF\n\ - ands r5, r0\n\ - ldr r1, _08025F00 @ =gBattleTextBuff1\n\ - movs r4, 0\n\ - movs r2, 0xFD\n\ - strb r2, [r1]\n\ - movs r0, 0x5\n\ - strb r0, [r1, 0x1]\n\ - strb r7, [r1, 0x2]\n\ - movs r3, 0x1\n\ - negs r3, r3\n\ - mov r12, r3\n\ - movs r0, 0xFF\n\ - strb r0, [r1, 0x3]\n\ - lsls r0, r6, 24\n\ - cmp r0, 0\n\ - blt _08025EAC\n\ - b _080261B0\n\ -_08025EAC:\n\ - ldr r4, _08025F04 @ =gSideTimers\n\ - ldr r1, _08025EF8 @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - bl GetBankIdentity\n\ - movs r1, 0x1\n\ - ands r1, r0\n\ - lsls r0, r1, 1\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r0, [r0, 0x2]\n\ - cmp r0, 0\n\ - beq _08025F54\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _08025F54\n\ - ldr r0, _08025F08 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xAE\n\ - beq _08025F84\n\ - cmp r5, 0x1\n\ - bne _08025F74\n\ - ldr r4, _08025F0C @ =gSpecialStatuses\n\ - ldr r3, _08025EF8 @ =gActiveBank\n\ - ldrb r0, [r3]\n\ - lsls r1, r0, 2\n\ - adds r1, r0\n\ - lsls r1, 2\n\ - adds r1, r4\n\ - ldrb r0, [r1]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08025F14\n\ - ldr r0, _08025F10 @ =gBattlescriptCurrInstr\n\ - mov r4, r8\n\ - str r4, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08025EF8: .4byte gActiveBank\n\ -_08025EFC: .4byte gBankTarget\n\ -_08025F00: .4byte gBattleTextBuff1\n\ -_08025F04: .4byte gSideTimers\n\ -_08025F08: .4byte gCurrentMove\n\ -_08025F0C: .4byte gSpecialStatuses\n\ -_08025F10: .4byte gBattlescriptCurrInstr\n\ -_08025F14:\n\ - mov r0, r8\n\ - bl BattleScriptPush\n\ - ldr r0, _08025F40 @ =gSharedMem\n\ - ldr r6, _08025F44 @ =gActiveBank\n\ - ldrb r1, [r6]\n\ - ldr r2, _08025F48 @ =0x00016003\n\ - adds r0, r2\n\ - strb r1, [r0]\n\ - ldr r1, _08025F4C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08025F50 @ =BattleScript_MistProtected\n\ - str r0, [r1]\n\ - ldrb r1, [r6]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08025F40: .4byte gSharedMem\n\ -_08025F44: .4byte gActiveBank\n\ -_08025F48: .4byte 0x00016003\n\ -_08025F4C: .4byte gBattlescriptCurrInstr\n\ -_08025F50: .4byte BattleScript_MistProtected\n\ -_08025F54:\n\ - ldr r0, _08025F78 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xAE\n\ - beq _08025F84\n\ - mov r3, r10\n\ - cmp r3, 0x1\n\ - beq _08025F84\n\ - movs r0, 0\n\ - bl JumpIfMoveAffectedByProtect\n\ - lsls r0, 24\n\ - cmp r0, 0\n\ - beq _08025F84\n\ - ldr r1, _08025F7C @ =gBattlescriptCurrInstr\n\ - ldr r0, _08025F80 @ =BattleScript_ButItFailed\n\ - str r0, [r1]\n\ -_08025F74:\n\ - movs r0, 0x1\n\ - b _080262A4\n\ - .align 2, 0\n\ -_08025F78: .4byte gCurrentMove\n\ -_08025F7C: .4byte gBattlescriptCurrInstr\n\ -_08025F80: .4byte BattleScript_ButItFailed\n\ -_08025F84:\n\ - ldr r2, _08025FCC @ =gBattleMons\n\ - ldr r1, _08025FD0 @ =gActiveBank\n\ - ldrb r3, [r1]\n\ - movs r4, 0x58\n\ - adds r0, r3, 0\n\ - muls r0, r4\n\ - adds r0, r2\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - mov r10, r2\n\ - cmp r0, 0x1D\n\ - beq _08025FA0\n\ - cmp r0, 0x49\n\ - bne _08026040\n\ -_08025FA0:\n\ - mov r0, r9\n\ - cmp r0, 0\n\ - bne _08026040\n\ - ldr r0, _08025FD4 @ =gCurrentMove\n\ - ldrh r0, [r0]\n\ - cmp r0, 0xAE\n\ - beq _08026040\n\ - cmp r5, 0x1\n\ - bne _08025F74\n\ - ldr r4, _08025FD8 @ =gSpecialStatuses\n\ - lsls r0, r3, 2\n\ - adds r0, r3\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r0, [r0]\n\ - lsls r0, 31\n\ - cmp r0, 0\n\ - beq _08025FE0\n\ - ldr r0, _08025FDC @ =gBattlescriptCurrInstr\n\ - mov r1, r8\n\ - str r1, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08025FCC: .4byte gBattleMons\n\ -_08025FD0: .4byte gActiveBank\n\ -_08025FD4: .4byte gCurrentMove\n\ -_08025FD8: .4byte gSpecialStatuses\n\ -_08025FDC: .4byte gBattlescriptCurrInstr\n\ -_08025FE0:\n\ - mov r0, r8\n\ - bl BattleScriptPush\n\ - ldr r0, _08026028 @ =gSharedMem\n\ - ldr r2, _0802602C @ =gActiveBank\n\ - ldrb r1, [r2]\n\ - ldr r3, _08026030 @ =0x00016003\n\ - adds r0, r3\n\ - strb r1, [r0]\n\ - ldr r1, _08026034 @ =gBattlescriptCurrInstr\n\ - ldr r0, _08026038 @ =BattleScript_AbilityNoStatLoss\n\ - str r0, [r1]\n\ - ldr r1, _0802603C @ =gLastUsedAbility\n\ - ldrb r0, [r2]\n\ - movs r6, 0x58\n\ - muls r0, r6\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r2]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - ldr r0, _0802602C @ =gActiveBank\n\ - ldrb r1, [r0]\n\ - lsls r0, r1, 2\n\ - adds r0, r1\n\ - lsls r0, 2\n\ - adds r0, r4\n\ - ldrb r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08026028: .4byte gSharedMem\n\ -_0802602C: .4byte gActiveBank\n\ -_08026030: .4byte 0x00016003\n\ -_08026034: .4byte gBattlescriptCurrInstr\n\ -_08026038: .4byte BattleScript_AbilityNoStatLoss\n\ -_0802603C: .4byte gLastUsedAbility\n\ -_08026040:\n\ - ldr r1, _08026090 @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - movs r4, 0x58\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x33\n\ - bne _080260A8\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _080260A8\n\ - cmp r7, 0x6\n\ - bne _080260A8\n\ - cmp r5, 0x1\n\ - bne _08025F74\n\ - mov r0, r8\n\ - bl BattleScriptPush\n\ - ldr r0, _08026094 @ =gSharedMem\n\ - ldr r3, _08026090 @ =gActiveBank\n\ - ldrb r1, [r3]\n\ - ldr r6, _08026098 @ =0x00016003\n\ - adds r0, r6\n\ - strb r1, [r0]\n\ - ldr r1, _0802609C @ =gBattlescriptCurrInstr\n\ - ldr r0, _080260A0 @ =BattleScript_AbilityNoSpecificStatLoss\n\ - str r0, [r1]\n\ - ldr r1, _080260A4 @ =gLastUsedAbility\n\ - ldrb r0, [r3]\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - b _08025F74\n\ - .align 2, 0\n\ -_08026090: .4byte gActiveBank\n\ -_08026094: .4byte gSharedMem\n\ -_08026098: .4byte 0x00016003\n\ -_0802609C: .4byte gBattlescriptCurrInstr\n\ -_080260A0: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ -_080260A4: .4byte gLastUsedAbility\n\ -_080260A8:\n\ - ldr r1, _080260FC @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - movs r4, 0x58\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x34\n\ - bne _08026114\n\ - mov r2, r9\n\ - cmp r2, 0\n\ - bne _08026114\n\ - cmp r7, 0x1\n\ - bne _08026114\n\ - cmp r5, 0x1\n\ - beq _080260CA\n\ - b _08025F74\n\ -_080260CA:\n\ - mov r0, r8\n\ - bl BattleScriptPush\n\ - ldr r0, _08026100 @ =gSharedMem\n\ - ldr r3, _080260FC @ =gActiveBank\n\ - ldrb r1, [r3]\n\ - ldr r6, _08026104 @ =0x00016003\n\ - adds r0, r6\n\ - strb r1, [r0]\n\ - ldr r1, _08026108 @ =gBattlescriptCurrInstr\n\ - ldr r0, _0802610C @ =BattleScript_AbilityNoSpecificStatLoss\n\ - str r0, [r1]\n\ - ldr r1, _08026110 @ =gLastUsedAbility\n\ - ldrb r0, [r3]\n\ - muls r0, r4\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r1]\n\ - ldrb r0, [r3]\n\ - ldrb r1, [r1]\n\ - bl RecordAbilityBattle\n\ - b _08025F74\n\ - .align 2, 0\n\ -_080260FC: .4byte gActiveBank\n\ -_08026100: .4byte gSharedMem\n\ -_08026104: .4byte 0x00016003\n\ -_08026108: .4byte gBattlescriptCurrInstr\n\ -_0802610C: .4byte BattleScript_AbilityNoSpecificStatLoss\n\ -_08026110: .4byte gLastUsedAbility\n\ -_08026114:\n\ - ldr r0, _080261A0 @ =gActiveBank\n\ - ldrb r1, [r0]\n\ - movs r0, 0x58\n\ - muls r0, r1\n\ - add r0, r10\n\ - adds r0, 0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, 0x13\n\ - bne _0802612C\n\ - cmp r5, 0\n\ - bne _0802612C\n\ - b _08025F74\n\ -_0802612C:\n\ - lsls r0, r6, 24\n\ - asrs r0, 28\n\ - movs r1, 0x7\n\ - ands r0, r1\n\ - negs r0, r0\n\ - lsls r0, 24\n\ - ldr r3, _080261A4 @ =gBattleTextBuff2\n\ - movs r4, 0\n\ - movs r1, 0xFD\n\ - strb r1, [r3]\n\ - movs r2, 0x1\n\ - lsrs r6, r0, 24\n\ - asrs r0, 24\n\ - subs r1, 0xFF\n\ - cmp r0, r1\n\ - bne _08026156\n\ - strb r4, [r3, 0x1]\n\ - movs r0, 0xD3\n\ - strb r0, [r3, 0x2]\n\ - strb r4, [r3, 0x3]\n\ - movs r2, 0x4\n\ -_08026156:\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - movs r0, 0xD4\n\ - strb r0, [r1]\n\ - adds r2, 0x1\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - movs r0, 0xFF\n\ - strb r0, [r1]\n\ - ldr r1, _080261A0 @ =gActiveBank\n\ - ldrb r2, [r1]\n\ - movs r0, 0x58\n\ - muls r0, r2\n\ - adds r0, r7, r0\n\ - mov r1, r10\n\ - adds r1, 0x18\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - cmp r0, 0\n\ - beq _08026206\n\ - movs r1, 0\n\ - ldr r0, _080261A8 @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - ldr r3, _080261AC @ =gBattleCommunication\n\ - mov r8, r3\n\ - cmp r0, r2\n\ - bne _0802619A\n\ - movs r1, 0x1\n\ -_0802619A:\n\ - mov r4, r8\n\ - strb r1, [r4, 0x5]\n\ - b _08026234\n\ - .align 2, 0\n\ -_080261A0: .4byte gActiveBank\n\ -_080261A4: .4byte gBattleTextBuff2\n\ -_080261A8: .4byte gBankTarget\n\ -_080261AC: .4byte gBattleCommunication\n\ -_080261B0:\n\ - asrs r6, r0, 28\n\ - movs r0, 0x7\n\ - ands r6, r0\n\ - ldr r3, _08026210 @ =gBattleTextBuff2\n\ - strb r2, [r3]\n\ - movs r2, 0x1\n\ - cmp r6, 0x2\n\ - bne _080261CA\n\ - strb r4, [r3, 0x1]\n\ - movs r0, 0xD1\n\ - strb r0, [r3, 0x2]\n\ - strb r4, [r3, 0x3]\n\ - movs r2, 0x4\n\ -_080261CA:\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - movs r0, 0xD2\n\ - strb r0, [r1]\n\ - adds r2, 0x1\n\ - adds r0, r2, r3\n\ - strb r4, [r0]\n\ - adds r2, 0x1\n\ - adds r1, r2, r3\n\ - ldrb r0, [r1]\n\ - mov r2, r12\n\ - orrs r0, r2\n\ - strb r0, [r1]\n\ - ldr r2, _08026214 @ =gBattleMons\n\ - ldr r4, _08026218 @ =gActiveBank\n\ - ldrb r3, [r4]\n\ - movs r0, 0x58\n\ - muls r0, r3\n\ - adds r0, r7, r0\n\ - adds r1, r2, 0\n\ - adds r1, 0x18\n\ - adds r0, r1\n\ - ldrb r0, [r0]\n\ - lsls r0, 24\n\ - asrs r0, 24\n\ - mov r10, r2\n\ - cmp r0, 0xC\n\ - bne _08026220\n\ -_08026206:\n\ - ldr r1, _0802621C @ =gBattleCommunication\n\ - movs r0, 0x2\n\ - strb r0, [r1, 0x5]\n\ - mov r8, r1\n\ - b _08026234\n\ - .align 2, 0\n\ -_08026210: .4byte gBattleTextBuff2\n\ -_08026214: .4byte gBattleMons\n\ -_08026218: .4byte gActiveBank\n\ -_0802621C: .4byte gBattleCommunication\n\ -_08026220:\n\ - movs r1, 0\n\ - ldr r0, _080262B4 @ =gBankTarget\n\ - ldrb r0, [r0]\n\ - ldr r2, _080262B8 @ =gBattleCommunication\n\ - mov r8, r2\n\ - cmp r0, r3\n\ - bne _08026230\n\ - movs r1, 0x1\n\ -_08026230:\n\ - mov r3, r8\n\ - strb r1, [r3, 0x5]\n\ -_08026234:\n\ - ldr r2, _080262BC @ =gActiveBank\n\ - ldrb r0, [r2]\n\ - movs r4, 0x58\n\ - adds r1, r0, 0\n\ - muls r1, r4\n\ - adds r1, r7, r1\n\ - mov r3, r10\n\ - adds r3, 0x18\n\ - adds r1, r3\n\ - lsls r0, r6, 24\n\ - asrs r0, 24\n\ - ldrb r6, [r1]\n\ - adds r0, r6\n\ - strb r0, [r1]\n\ - ldrb r0, [r2]\n\ - muls r0, r4\n\ - adds r0, r7, r0\n\ - adds r1, r0, r3\n\ - movs r0, 0\n\ - ldrsb r0, [r1, r0]\n\ - cmp r0, 0\n\ - bge _08026264\n\ - movs r0, 0\n\ - strb r0, [r1]\n\ -_08026264:\n\ - ldr r1, _080262BC @ =gActiveBank\n\ - ldrb r0, [r1]\n\ - muls r0, r4\n\ - adds r0, r7, r0\n\ - adds r1, r0, r3\n\ - movs r0, 0\n\ - ldrsb r0, [r1, r0]\n\ - cmp r0, 0xC\n\ - ble _0802627A\n\ - movs r0, 0xC\n\ - strb r0, [r1]\n\ -_0802627A:\n\ - mov r2, r8\n\ - ldrb r0, [r2, 0x5]\n\ - cmp r0, 0x2\n\ - bne _080262A2\n\ - movs r3, 0x1\n\ - ands r3, r5\n\ - cmp r3, 0\n\ - beq _08026294\n\ - ldr r0, _080262C0 @ =gBattleMoveFlags\n\ - ldrb r1, [r0]\n\ - movs r2, 0x1\n\ - orrs r1, r2\n\ - strb r1, [r0]\n\ -_08026294:\n\ - mov r4, r8\n\ - ldrb r0, [r4, 0x5]\n\ - cmp r0, 0x2\n\ - bne _080262A2\n\ - cmp r3, 0\n\ - bne _080262A2\n\ - b _08025F74\n\ -_080262A2:\n\ - movs r0, 0\n\ -_080262A4:\n\ - pop {r3-r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov r10, r5\n\ - pop {r4-r7}\n\ - pop {r1}\n\ - bx r1\n\ - .align 2, 0\n\ -_080262B4: .4byte gBankTarget\n\ -_080262B8: .4byte gBattleCommunication\n\ -_080262BC: .4byte gActiveBank\n\ -_080262C0: .4byte gBattleMoveFlags\n\ - .syntax divided"); + if (gBattleCommunication[MULTISTRING_CHOOSER] == 2 && !(flags & STAT_CHANGE_BS_PTR)) + return STAT_CHANGE_DIDNT_WORK; + + return STAT_CHANGE_WORKED; } -#endif // NONMATCHING static void atk89_statbuffchange(void) { -- cgit v1.2.3 From 58dd1c92ac6270d229c6762ca640118e4dd5e3cf Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 16 Jan 2018 18:10:40 -0600 Subject: remove some symbols from sym_ewram.txt --- src/battle/battle_message.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/battle') diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index 18e07acf6..e9334ef61 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -158,7 +158,6 @@ extern u8 gBankAttacker; extern u8 gBankTarget; extern u8 gStringBank; extern u8 gEffectBank; -extern u8 gAbilitiesPerBank[4]; extern u8 gBattleTextBuff1[]; extern u8 gBattleTextBuff2[]; extern u8 gBattleTextBuff3[]; @@ -175,6 +174,8 @@ extern u16 gBattlePartyID[4]; extern struct BattleEnigmaBerry gEnigmaBerries[4]; extern u8 gBattleBufferA[4][0x200]; +EWRAM_DATA u8 gAbilitiesPerBank[4] = {0}; + extern const u8* const gUnknown_08401674[]; // table of pointers to 'a -TYPE' strings extern const u8* const gUnknown_08400F58[]; // table of pointers to stat strings extern const u8* const gUnknown_08400F78[]; // table of pointers to flavour strings -- cgit v1.2.3 From 31a322fdc589c381af6ec4b4c4781d28cb394cc1 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Tue, 16 Jan 2018 19:14:14 -0500 Subject: use game stat defines --- src/battle/battle_setup.c | 36 ++++++++++++++++++------------------ src/battle/post_battle_event_funcs.c | 6 +++--- 2 files changed, 21 insertions(+), 21 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index b4ff407fc..892be1029 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -520,8 +520,8 @@ static void DoStandardWildBattle(void) gMain.savedCallback = CB2_EndWildBattle; gBattleTypeFlags = 0; CreateBattleStartTask(GetWildBattleTransition(), 0); - IncrementGameStat(7); - IncrementGameStat(8); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); } void BattleSetup_StartRoamerBattle(void) @@ -532,8 +532,8 @@ void BattleSetup_StartRoamerBattle(void) gMain.savedCallback = CB2_EndWildBattle; gBattleTypeFlags = BATTLE_TYPE_ROAMER; CreateBattleStartTask(GetWildBattleTransition(), 0); - IncrementGameStat(7); - IncrementGameStat(8); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); } static void DoSafariBattle(void) @@ -549,8 +549,8 @@ static void DoSafariBattle(void) static void StartTheBattle(void) { CreateBattleStartTask(GetTrainerBattleTransition(), 0); - IncrementGameStat(7); - IncrementGameStat(9); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_TRAINER_BATTLES); } //Initiates battle where Wally catches Ralts @@ -569,8 +569,8 @@ void BattleSetup_StartScriptedWildBattle(void) gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = 0; CreateBattleStartTask(GetWildBattleTransition(), 0); - IncrementGameStat(7); - IncrementGameStat(8); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); } void ScrSpecial_StartSouthernIslandBattle(void) @@ -579,8 +579,8 @@ void ScrSpecial_StartSouthernIslandBattle(void) gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; CreateBattleStartTask(GetWildBattleTransition(), 0); - IncrementGameStat(7); - IncrementGameStat(8); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); } void ScrSpecial_StartRayquazaBattle(void) @@ -589,8 +589,8 @@ void ScrSpecial_StartRayquazaBattle(void) gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY; CreateBattleStartTask(B_TRANSITION_BLUR, BGM_BATTLE34); - IncrementGameStat(7); - IncrementGameStat(8); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); } void ScrSpecial_StartGroudonKyogreBattle(void) @@ -602,8 +602,8 @@ void ScrSpecial_StartGroudonKyogreBattle(void) CreateBattleStartTask(B_TRANSITION_SHARDS, BGM_BATTLE34); // GROUDON else CreateBattleStartTask(B_TRANSITION_RIPPLE, BGM_BATTLE34); // KYOGRE - IncrementGameStat(7); - IncrementGameStat(8); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); } void ScrSpecial_StartRegiBattle(void) @@ -612,8 +612,8 @@ void ScrSpecial_StartRegiBattle(void) gMain.savedCallback = CB2_EndScriptedWildBattle; gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI; CreateBattleStartTask(B_TRANSITION_GRID_SQUARES, BGM_BATTLE36); - IncrementGameStat(7); - IncrementGameStat(8); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); } static void CB2_EndWildBattle(void) @@ -879,8 +879,8 @@ static void CB2_StartFirstBattle(void) SetMainCallback2(sub_800E7C4); prev_quest_postbuffer_cursor_backup_reset(); overworld_poison_timer_set(); - IncrementGameStat(7); - IncrementGameStat(8); + IncrementGameStat(GAME_STAT_TOTAL_BATTLES); + IncrementGameStat(GAME_STAT_WILD_BATTLES); } } diff --git a/src/battle/post_battle_event_funcs.c b/src/battle/post_battle_event_funcs.c index 0617763f6..a44cf028b 100644 --- a/src/battle/post_battle_event_funcs.c +++ b/src/battle/post_battle_event_funcs.c @@ -26,8 +26,8 @@ int GameClear(void) FlagSet(FLAG_SYS_GAME_CLEAR); } - if (!GetGameStat(1)) - SetGameStat(1, (gSaveBlock2.playTimeHours << 16) | (gSaveBlock2.playTimeMinutes << 8) | gSaveBlock2.playTimeSeconds); + if (!GetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME)) + SetGameStat(GAME_STAT_FIRST_HOF_PLAY_TIME, (gSaveBlock2.playTimeHours << 16) | (gSaveBlock2.playTimeMinutes << 8) | gSaveBlock2.playTimeSeconds); SetSecretBase2Field_9(); @@ -54,7 +54,7 @@ int GameClear(void) if (ribbonGet == TRUE) { - IncrementGameStat(42); + IncrementGameStat(GAME_STAT_RECEIVED_RIBBONS); FlagSet(FLAG_SYS_RIBBON_GET); } -- cgit v1.2.3 From 91cfb6a564f73f02eb57792f8a0f4aa82e1867d1 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Tue, 16 Jan 2018 22:25:35 -0600 Subject: add debug ifdefs --- src/battle/battle_2.c | 7964 +++++++++++++++++++++++++++++++++++++++++ src/battle/battle_ai.c | 209 ++ src/battle/battle_interface.c | 669 +++- src/battle/battle_records.c | 29 +- 4 files changed, 8862 insertions(+), 9 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 990535b4e..5212f5bdc 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -203,6 +203,231 @@ void sub_800E7C4(void) } } +#if DEBUG +__attribute__((naked)) +void InitBattle(void) +{ + asm( + " push {r4, r5, lr}\n" + " add sp, sp, #0xfffffffc\n" + " mov r0, #0x0\n" + " bl SetHBlankCallback\n" + " mov r0, #0x0\n" + " bl SetVBlankCallback\n" + " mov r4, #0x0\n" + " str r4, [sp]\n" + " mov r1, #0xc0\n" + " lsl r1, r1, #0x13\n" + " ldr r2, ._10\n" + " mov r0, sp\n" + " bl gScriptFuncs_End+0x3cb4\n" + " ldr r0, ._10 + 4\n" + " strh r4, [r0]\n" + " sub r0, r0, #0xc\n" + " mov r2, #0xf0\n" + " strh r2, [r0]\n" + " add r0, r0, #0x4\n" + " ldr r3, ._10 + 8\n" + " add r1, r3, #0\n" + " strh r1, [r0]\n" + " add r0, r0, #0x4\n" + " strh r4, [r0]\n" + " add r0, r0, #0x2\n" + " strh r4, [r0]\n" + " ldr r0, ._10 + 12\n" + " strh r2, [r0]\n" + " ldr r0, ._10 + 16\n" + " strh r1, [r0]\n" + " bl dp12_8087EA4\n" + " ldr r0, ._10 + 20\n" + " mov r3, #0xf0\n" + " mov r5, #0xf0\n" + " lsl r5, r5, #0x3\n" + " add r2, r0, r5\n" + " mov r1, #0x4f\n" + "._5:\n" + " strh r3, [r0]\n" + " strh r3, [r2]\n" + " add r2, r2, #0x2\n" + " add r0, r0, #0x2\n" + " sub r1, r1, #0x1\n" + " cmp r1, #0\n" + " bge ._5 @cond_branch\n" + " mov r1, #0x50\n" + " ldr r4, ._10 + 24\n" + " ldr r0, ._10 + 20\n" + " ldr r3, ._10 + 28\n" + " mov r5, #0x82\n" + " lsl r5, r5, #0x4\n" + " add r2, r0, r5\n" + " add r0, r0, #0xa0\n" + "._6:\n" + " strh r3, [r0]\n" + " strh r3, [r2]\n" + " add r2, r2, #0x2\n" + " add r0, r0, #0x2\n" + " add r1, r1, #0x1\n" + " cmp r1, #0x9f\n" + " ble ._6 @cond_branch\n" + " ldr r0, [r4]\n" + " ldr r1, [r4, #0x4]\n" + " ldr r2, [r4, #0x8]\n" + " bl sub_80895F8\n" + " ldr r4, ._10 + 32\n" + " add r0, r4, #0\n" + " bl SetUpWindowConfig\n" + " bl ResetPaletteFade\n" + " ldr r0, ._10 + 36\n" + " mov r1, #0x0\n" + " strh r1, [r0]\n" + " ldr r0, ._10 + 40\n" + " strh r1, [r0]\n" + " ldr r0, ._10 + 44\n" + " strh r1, [r0]\n" + " ldr r0, ._10 + 48\n" + " strh r1, [r0]\n" + " ldr r0, ._10 + 52\n" + " strh r1, [r0]\n" + " ldr r0, ._10 + 56\n" + " strh r1, [r0]\n" + " ldr r0, ._10 + 60\n" + " strh r1, [r0]\n" + " ldr r0, ._10 + 64\n" + " strh r1, [r0]\n" + " ldr r0, ._10 + 68\n" + " ldrb r1, [r0]\n" + " mov r0, #0x8\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._7 @cond_branch\n" + " bl GetBattleTerrain\n" + " ldr r1, ._10 + 72\n" + " strb r0, [r1]\n" + "._7:\n" + " ldr r0, ._10 + 76\n" + " add r1, r4, #0\n" + " bl InitWindowFromConfig\n" + " ldr r0, ._10 + 80\n" + " ldr r1, ._10 + 84\n" + " bl InitWindowFromConfig\n" + " ldr r0, ._10 + 88\n" + " ldr r1, ._10 + 92\n" + " bl InitWindowFromConfig\n" + " bl sub_800D6D4\n" + " bl sub_800DAB8\n" + " bl ResetSpriteData\n" + " bl ResetTasks\n" + " bl sub_800E23C\n" + " bl FreeAllSpritePalettes\n" + " ldr r1, ._10 + 96\n" + " mov r0, #0x4\n" + " strb r0, [r1]\n" + " ldr r0, ._10 + 100\n" + " bl SetVBlankCallback\n" + " bl setup_poochyena_battle\n" + " ldr r0, ._10 + 104\n" + " ldrh r1, [r0]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._8 @cond_branch\n" + " ldr r0, ._10 + 108\n" + " bl SetMainCallback2\n" + " b ._9\n" + "._11:\n" + " .align 2, 0\n" + "._10:\n" + " .word 0x5006000\n" + " .word 0x400004c\n" + " .word 0x5051\n" + " .word gUnknown_030042C4\n" + " .word gUnknown_03004240\n" + " .word gUnknown_03004DE0\n" + " .word gUnknown_081F9674\n" + " .word 0xff10\n" + " .word gWindowConfig_81E6C58\n" + " .word gUnknown_030042A4\n" + " .word gUnknown_030042A0\n" + " .word gUnknown_030042C0\n" + " .word gUnknown_030041B4\n" + " .word gUnknown_03004288\n" + " .word gUnknown_03004280\n" + " .word gUnknown_030041B0\n" + " .word gUnknown_030041B8\n" + " .word gUnknown_02023A14+0x50\n" + " .word gBattleTerrain\n" + " .word gUnknown_03004210\n" + " .word gUnknown_030041D0\n" + " .word gWindowConfig_81E71D0\n" + " .word gUnknown_03004250\n" + " .word gWindowConfig_81E71EC\n" + " .word gReservedSpritePaletteCount\n" + " .word sub_800FCFC+1\n" + " .word gBattleTypeFlags\n" + " .word sub_800F298+1\n" + "._8:\n" + " ldr r0, ._15\n" + " bl SetMainCallback2\n" + "._9:\n" + " ldr r0, ._15 + 4\n" + " ldrh r1, [r0]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._13 @cond_branch\n" + " ldr r0, ._15 + 8\n" + " ldrb r1, [r0]\n" + " mov r0, #0x8\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._13 @cond_branch\n" + " ldr r0, ._15 + 12\n" + " ldr r1, ._15 + 16\n" + " ldrh r1, [r1]\n" + " bl CreateNPCTrainerParty\n" + " bl SetWildMonHeldItem\n" + "._13:\n" + " ldr r0, ._15 + 20\n" + " ldr r1, ._15 + 24\n" + " add r0, r0, r1\n" + " ldrb r1, [r0]\n" + " mov r2, #0x2\n" + " orr r1, r1, r2\n" + " strb r1, [r0]\n" + " ldr r4, ._15 + 28\n" + " mov r3, #0xfa\n" + " lsl r3, r3, #0x1\n" + " add r5, r4, r3\n" + "._14:\n" + " add r0, r4, #0\n" + " mov r1, #0x3\n" + " bl AdjustFriendship\n" + " add r4, r4, #0x64\n" + " cmp r4, r5\n" + " ble ._14 @cond_branch\n" + " mov r1, #0x0\n" + " ldr r0, ._15 + 32\n" + " strb r1, [r0]\n" + " add sp, sp, #0x4\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._16:\n" + " .align 2, 0\n" + "._15:\n" + " .word sub_800EC9C+1\n" + " .word gBattleTypeFlags\n" + " .word gUnknown_02023A14+0x50\n" + " .word gEnemyParty\n" + " .word gTrainerBattleOpponent\n" + " .word gMain\n" + " .word 0x43d\n" + " .word gPlayerParty\n" + " .word gBattleCommunication\n" + "\n" + ); +} +#else void InitBattle(void) { s32 i; @@ -271,6 +496,7 @@ void InitBattle(void) AdjustFriendship(&gPlayerParty[i], 3); gBattleCommunication[0] = 0; } +#endif void sub_800E9EC(void) { @@ -379,6 +605,476 @@ void shedinja_something(struct Pokemon *pkmn) } } +#if DEBUG +__attribute__((naked)) +void sub_800EC9C() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " bl RunTasks\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " bl GetMultiplayerId\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " ldr r0, ._55\n" + " ldr r1, ._55 + 4\n" + " add r0, r0, r1\n" + " strb r4, [r0]\n" + " mov r0, #0x1\n" + " add r5, r4, #0\n" + " eor r5, r5, r0\n" + " ldr r0, ._55 + 8\n" + " ldrb r0, [r0]\n" + " cmp r0, #0x9\n" + " bls ._53 @cond_branch\n" + " b ._140\n" + "._53:\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._55 + 12\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._56:\n" + " .align 2, 0\n" + "._55:\n" + " .word +0x2000000\n" + " .word 0x160cb\n" + " .word gBattleCommunication\n" + " .word ._57\n" + "._57:\n" + " .word ._58\n" + " .word ._59\n" + " .word ._60\n" + " .word ._61\n" + " .word ._62\n" + " .word ._63\n" + " .word ._64\n" + " .word ._65\n" + " .word ._66\n" + " .word ._67\n" + "._58:\n" + " ldr r2, ._76\n" + " ldrh r1, [r2]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._68 @cond_branch\n" + " ldr r0, ._76 + 4\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " bne ._69 @cond_branch\n" + " b ._140\n" + "._69:\n" + " bl sub_8007ECC\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._71 @cond_branch\n" + " b ._140\n" + "._71:\n" + " ldr r1, ._76 + 8\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " strb r0, [r1, #0x1]\n" + " bl sub_800E9EC\n" + " bl sub_800EAAC\n" + " ldr r0, ._76 + 12\n" + " ldrb r1, [r0]\n" + " mov r0, #0x8\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._73 @cond_branch\n" + " mov r3, #0x0\n" + " ldr r1, ._76 + 16\n" + " ldr r0, ._76 + 20\n" + "._74:\n" + " strh r3, [r0, #0x18]\n" + " str r1, [r0, #0x14]\n" + " add r0, r0, #0x1c\n" + " add r3, r3, #0x1\n" + " cmp r3, #0x1\n" + " ble ._74 @cond_branch\n" + "._73:\n" + " bl bitmask_all_link_players_but_self\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r1, ._76 + 8\n" + " mov r2, #0x20\n" + " bl SendBlock\n" + " ldr r1, ._76 + 24\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " b ._140\n" + "._77:\n" + " .align 2, 0\n" + "._76:\n" + " .word gBattleTypeFlags\n" + " .word gReceivedRemoteLinkPlayers\n" + " .word +0x2000000\n" + " .word gUnknown_02023A14+0x50\n" + " .word 0x2211\n" + " .word gLinkPlayers\n" + " .word gBattleCommunication\n" + "._68:\n" + " mov r0, #0x4\n" + " orr r0, r0, r1\n" + " strh r0, [r2]\n" + " ldr r1, ._79\n" + " mov r0, #0x8\n" + " strb r0, [r1]\n" + " bl sub_800EB08\n" + " b ._140\n" + "._80:\n" + " .align 2, 0\n" + "._79:\n" + " .word gBattleCommunication\n" + "._59:\n" + " bl GetBlockReceivedStatus\n" + " mov r1, #0x3\n" + " and r1, r1, r0\n" + " cmp r1, #0x3\n" + " beq ._81 @cond_branch\n" + " b ._140\n" + "._81:\n" + " bl ResetBlockReceivedFlags\n" + " mov r3, #0x0\n" + " ldr r0, ._86\n" + " ldrh r1, [r0]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " cmp r1, r0\n" + " bne ._83 @cond_branch\n" + " cmp r4, #0\n" + " bne ._84 @cond_branch\n" + " ldr r0, ._86 + 4\n" + " ldrh r1, [r0]\n" + " mov r2, #0xc\n" + " b ._85\n" + "._87:\n" + " .align 2, 0\n" + "._86:\n" + " .word gBlockRecvBuffer\n" + " .word gBattleTypeFlags\n" + "._84:\n" + " ldr r0, ._92\n" + " ldrh r1, [r0]\n" + " mov r2, #0x8\n" + "._85:\n" + " orr r1, r1, r2\n" + " strh r1, [r0]\n" + " add r3, r3, #0x1\n" + "._83:\n" + " lsl r7, r5, #0x8\n" + " cmp r3, #0\n" + " bne ._94 @cond_branch\n" + " ldr r0, ._92 + 4\n" + " mov r1, #0x80\n" + " lsl r1, r1, #0x1\n" + " add r2, r0, r1\n" + " ldrh r1, [r0]\n" + " add r6, r0, #0\n" + " ldrh r2, [r2]\n" + " cmp r1, r2\n" + " bne ._89 @cond_branch\n" + " cmp r4, #0\n" + " bne ._90 @cond_branch\n" + " ldr r0, ._92\n" + " ldrh r1, [r0]\n" + " mov r2, #0xc\n" + " b ._91\n" + "._93:\n" + " .align 2, 0\n" + "._92:\n" + " .word gBattleTypeFlags\n" + " .word gBlockRecvBuffer\n" + "._90:\n" + " ldr r0, ._96\n" + " ldrh r1, [r0]\n" + " mov r2, #0x8\n" + "._91:\n" + " orr r1, r1, r2\n" + " strh r1, [r0]\n" + " add r3, r3, #0x1\n" + "._89:\n" + " lsl r7, r5, #0x8\n" + " cmp r3, #0\n" + " bne ._94 @cond_branch\n" + " ldrh r1, [r6]\n" + " ldr r0, ._96 + 4\n" + " ldr r2, ._96\n" + " b ._95\n" + "._97:\n" + " .align 2, 0\n" + "._96:\n" + " .word gBattleTypeFlags\n" + " .word 0x101\n" + "._100:\n" + " add r3, r3, #0x1\n" + " cmp r3, #0x1\n" + " bgt ._98 @cond_branch\n" + " lsl r0, r3, #0x8\n" + " add r0, r0, r6\n" + " ldrh r1, [r0]\n" + " ldr r0, ._103\n" + "._95:\n" + " cmp r1, r0\n" + " bls ._100 @cond_branch\n" + " cmp r3, r4\n" + " beq ._100 @cond_branch\n" + "._98:\n" + " cmp r3, #0x2\n" + " bne ._101 @cond_branch\n" + " ldrh r0, [r2]\n" + " mov r1, #0xc\n" + " b ._102\n" + "._104:\n" + " .align 2, 0\n" + "._103:\n" + " .word 0x101\n" + "._101:\n" + " ldrh r0, [r2]\n" + " mov r1, #0x8\n" + "._102:\n" + " orr r0, r0, r1\n" + " strh r0, [r2]\n" + "._94:\n" + " bl sub_800EB08\n" + " ldr r0, ._106\n" + " mov r1, #0x0\n" + " bl CreateTask\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r1, ._106 + 4\n" + " lsl r2, r0, #0x2\n" + " add r2, r2, r0\n" + " lsl r2, r2, #0x3\n" + " add r2, r2, r1\n" + " mov r1, #0x0\n" + " mov r0, #0x87\n" + " lsl r0, r0, #0x1\n" + " strh r0, [r2, #0xa]\n" + " mov r0, #0x5a\n" + " strh r0, [r2, #0xc]\n" + " strh r1, [r2, #0x12]\n" + " ldr r0, ._106 + 8\n" + " ldrb r1, [r0, #0x2]\n" + " ldrb r0, [r0, #0x3]\n" + " lsl r0, r0, #0x8\n" + " orr r1, r1, r0\n" + " strh r1, [r2, #0xe]\n" + " ldr r0, ._106 + 12\n" + " add r0, r0, #0x2\n" + " add r0, r7, r0\n" + " ldrh r0, [r0]\n" + " strh r0, [r2, #0x10]\n" + " b ._129\n" + "._107:\n" + " .align 2, 0\n" + "._106:\n" + " .word sub_800DE30+1\n" + " .word gTasks\n" + " .word +0x2000000\n" + " .word gBlockRecvBuffer\n" + "._60:\n" + " bl sub_8007ECC\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._108 @cond_branch\n" + " b ._140\n" + "._108:\n" + " bl bitmask_all_link_players_but_self\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r1, ._111\n" + " mov r2, #0xc8\n" + " bl SendBlock\n" + " b ._129\n" + "._112:\n" + " .align 2, 0\n" + "._111:\n" + " .word gPlayerParty\n" + "._61:\n" + " bl GetBlockReceivedStatus\n" + " mov r1, #0x3\n" + " and r1, r1, r0\n" + " cmp r1, #0x3\n" + " beq ._113 @cond_branch\n" + " b ._140\n" + "._113:\n" + " bl ResetBlockReceivedFlags\n" + " ldr r0, ._116\n" + " lsl r1, r5, #0x8\n" + " ldr r2, ._116 + 4\n" + " add r1, r1, r2\n" + " mov r2, #0xc8\n" + " bl gScriptFuncs_End+0x5bc4\n" + " b ._129\n" + "._117:\n" + " .align 2, 0\n" + "._116:\n" + " .word gEnemyParty\n" + " .word gBlockRecvBuffer\n" + "._62:\n" + " bl sub_8007ECC\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._118 @cond_branch\n" + " b ._140\n" + "._118:\n" + " bl bitmask_all_link_players_but_self\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r1, ._121\n" + " mov r2, #0xc8\n" + " bl SendBlock\n" + " b ._129\n" + "._122:\n" + " .align 2, 0\n" + "._121:\n" + " .word gPlayerParty+0xc8\n" + "._63:\n" + " bl GetBlockReceivedStatus\n" + " mov r1, #0x3\n" + " and r1, r1, r0\n" + " cmp r1, #0x3\n" + " beq ._123 @cond_branch\n" + " b ._140\n" + "._123:\n" + " bl ResetBlockReceivedFlags\n" + " ldr r0, ._126\n" + " lsl r1, r5, #0x8\n" + " ldr r2, ._126 + 4\n" + " add r1, r1, r2\n" + " mov r2, #0xc8\n" + " bl gScriptFuncs_End+0x5bc4\n" + " b ._129\n" + "._127:\n" + " .align 2, 0\n" + "._126:\n" + " .word gEnemyParty+0xc8\n" + " .word gBlockRecvBuffer\n" + "._64:\n" + " bl sub_8007ECC\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " beq ._140 @cond_branch\n" + " bl bitmask_all_link_players_but_self\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r1, ._130\n" + " mov r2, #0xc8\n" + " bl SendBlock\n" + " b ._129\n" + "._131:\n" + " .align 2, 0\n" + "._130:\n" + " .word gPlayerParty+0x190\n" + "._65:\n" + " bl GetBlockReceivedStatus\n" + " mov r1, #0x3\n" + " and r1, r1, r0\n" + " cmp r1, #0x3\n" + " bne ._140 @cond_branch\n" + " bl ResetBlockReceivedFlags\n" + " ldr r4, ._134\n" + " lsl r1, r5, #0x8\n" + " ldr r0, ._134 + 4\n" + " add r1, r1, r0\n" + " add r0, r4, #0\n" + " mov r2, #0xc8\n" + " bl gScriptFuncs_End+0x5bc4\n" + " ldr r1, ._134 + 8\n" + " add r0, r4, r1\n" + " bl shedinja_something\n" + " ldr r1, ._134 + 12\n" + " add r0, r4, r1\n" + " bl shedinja_something\n" + " add r0, r4, #0\n" + " sub r0, r0, #0xc8\n" + " bl shedinja_something\n" + " add r0, r4, #0\n" + " sub r0, r0, #0x64\n" + " bl shedinja_something\n" + " add r0, r4, #0\n" + " bl shedinja_something\n" + " add r0, r4, #0\n" + " add r0, r0, #0x64\n" + " bl shedinja_something\n" + "._129:\n" + " ldr r1, ._134 + 16\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " b ._140\n" + "._135:\n" + " .align 2, 0\n" + "._134:\n" + " .word gEnemyParty+0x190\n" + " .word gBlockRecvBuffer\n" + " .word 0xfffffe70\n" + " .word 0xfffffed4\n" + " .word gBattleCommunication\n" + "._66:\n" + " bl sub_800B950\n" + " ldr r0, ._137\n" + " ldrb r1, [r0]\n" + " add r1, r1, #0x1\n" + " mov r2, #0x0\n" + " strb r1, [r0]\n" + " strb r2, [r0, #0x1]\n" + " strb r2, [r0, #0x2]\n" + " b ._140\n" + "._138:\n" + " .align 2, 0\n" + "._137:\n" + " .word gBattleCommunication\n" + "._67:\n" + " ldr r0, ._141\n" + " add r1, r0, #1\n" + " bl battle_load_something\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " beq ._140 @cond_branch\n" + " ldr r2, ._141 + 4\n" + " ldr r1, ._141 + 8\n" + " ldr r0, [r1]\n" + " str r0, [r2]\n" + " ldr r0, ._141 + 12\n" + " str r0, [r1]\n" + " ldr r0, ._141 + 16\n" + " bl SetMainCallback2\n" + " ldr r3, ._141 + 20\n" + " ldrh r2, [r3]\n" + " mov r0, #0x2\n" + " and r0, r0, r2\n" + " cmp r0, #0\n" + " beq ._140 @cond_branch\n" + " ldr r1, ._141 + 24\n" + " mov r4, #0x80\n" + " lsl r4, r4, #0x4\n" + " add r0, r4, #0\n" + " strh r0, [r1]\n" + " mov r0, #0x20\n" + " orr r0, r0, r2\n" + " strh r0, [r3]\n" + "._140:\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._142:\n" + " .align 2, 0\n" + "._141:\n" + " .word gUnknown_02024D1F\n" + " .word gPreBattleCallback1\n" + " .word gMain\n" + " .word debug_sub_80139E4+1\n" + " .word sub_800F808+1\n" + " .word gBattleTypeFlags\n" + " .word gTrainerBattleOpponent\n" + "\n" + ); +} +#else void sub_800EC9C(void) { u8 playerId; @@ -535,6 +1231,7 @@ void sub_800EC9C(void) break; } } +#endif void sub_800F02C(void) { @@ -561,6 +1258,236 @@ void sub_800F02C(void) memcpy(gSharedMem, gUnknown_02023A00, 0x60); } +#ifdef DEBUG +__attribute__((naked)) +void sub_800F104() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r9\n" + " mov r6, r8\n" + " push {r6, r7}\n" + " bl GetMultiplayerId\n" + " lsl r0, r0, #0x18\n" + " lsr r6, r0, #0x18\n" + " ldr r0, ._151\n" + " ldr r2, ._151 + 4\n" + " add r1, r0, r2\n" + " strb r6, [r1]\n" + " ldr r1, ._151 + 8\n" + " add r1, r1, r0\n" + " mov r9, r1\n" + " sub r2, r2, #0x9\n" + " add r2, r2, r0\n" + " mov r8, r2\n" + " bl RunTasks\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " ldr r2, ._151 + 12\n" + " ldrb r0, [r2]\n" + " cmp r0, #0x1\n" + " beq ._147 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._148 @cond_branch\n" + " cmp r0, #0\n" + " beq ._149 @cond_branch\n" + " b ._183\n" + "._152:\n" + " .align 2, 0\n" + "._151:\n" + " .word +0x2000000\n" + " .word 0x160cb\n" + " .word 0x160c4\n" + " .word gBattleCommunication\n" + "._148:\n" + " cmp r0, #0x2\n" + " bne ._153 @cond_branch\n" + " b ._154\n" + "._153:\n" + " cmp r0, #0x3\n" + " bne ._155 @cond_branch\n" + " b ._156\n" + "._155:\n" + " b ._183\n" + "._149:\n" + " ldr r0, ._165\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " bne ._158 @cond_branch\n" + " b ._183\n" + "._158:\n" + " ldr r0, ._165 + 4\n" + " ldrb r1, [r0]\n" + " mov r0, #0x8\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._160 @cond_branch\n" + " mov r4, #0x0\n" + " ldr r1, ._165 + 8\n" + " ldr r0, ._165 + 12\n" + "._161:\n" + " strh r4, [r0, #0x18]\n" + " str r1, [r0, #0x14]\n" + " add r0, r0, #0x1c\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x3\n" + " ble ._161 @cond_branch\n" + "._160:\n" + " bl sub_8007ECC\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._162 @cond_branch\n" + " b ._183\n" + "._162:\n" + " bl sub_800F02C\n" + " bl bitmask_all_link_players_but_self\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r1, ._165 + 16\n" + " mov r2, #0x60\n" + " bl SendBlock\n" + " ldr r1, ._165 + 20\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " b ._183\n" + "._166:\n" + " .align 2, 0\n" + "._165:\n" + " .word gReceivedRemoteLinkPlayers\n" + " .word gUnknown_02023A14+0x50\n" + " .word 0x2211\n" + " .word gLinkPlayers\n" + " .word +0x2000000\n" + " .word gBattleCommunication\n" + "._147:\n" + " bl GetBlockReceivedStatus\n" + " mov r1, #0xf\n" + " and r1, r1, r0\n" + " cmp r1, #0xf\n" + " bne ._183 @cond_branch\n" + " bl ResetBlockReceivedFlags\n" + " mov r4, #0x0\n" + " lsl r0, r6, #0x3\n" + " sub r0, r0, r6\n" + " lsl r5, r0, #0x2\n" + " mov r7, #0x0\n" + "._175:\n" + " cmp r4, r6\n" + " beq ._174 @cond_branch\n" + " ldr r2, ._172\n" + " add r0, r7, r2\n" + " ldrh r1, [r0, #0x18]\n" + " mov r3, #0x1\n" + " add r0, r3, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._169 @cond_branch\n" + " add r0, r5, r2\n" + " ldrh r1, [r0, #0x18]\n" + " add r0, r3, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._170 @cond_branch\n" + " b ._174\n" + "._173:\n" + " .align 2, 0\n" + "._172:\n" + " .word gLinkPlayers\n" + "._169:\n" + " add r0, r5, r2\n" + " ldrh r1, [r0, #0x18]\n" + " add r0, r3, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._174 @cond_branch\n" + "._170:\n" + " lsl r1, r4, #0x8\n" + " ldr r0, ._177\n" + " add r1, r1, r0\n" + " ldr r0, ._177 + 4\n" + " mov r2, #0x60\n" + " bl gScriptFuncs_End+0x5bc4\n" + "._174:\n" + " add r7, r7, #0x1c\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x3\n" + " ble ._175 @cond_branch\n" + " ldr r1, ._177 + 8\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " ldr r1, ._177 + 12\n" + " ldr r0, [r1, #0x8]\n" + " mov r2, r9\n" + " str r0, [r2]\n" + " ldr r0, ._177 + 16\n" + " ldrh r0, [r0]\n" + " mov r2, r8\n" + " strh r0, [r2]\n" + " ldr r0, ._177 + 20\n" + " str r0, [r1, #0x8]\n" + " mov r0, #0x5\n" + " mov r1, #0x0\n" + " bl OpenPartyMenu\n" + " b ._183\n" + "._178:\n" + " .align 2, 0\n" + "._177:\n" + " .word gBlockRecvBuffer\n" + " .word gUnknown_02023A00\n" + " .word gBattleCommunication\n" + " .word gMain\n" + " .word gBattleTypeFlags\n" + " .word sub_800F104+1\n" + "._154:\n" + " ldr r0, ._181\n" + " ldrb r1, [r0, #0x7]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._183 @cond_branch\n" + " mov r0, #0x3\n" + " strb r0, [r2]\n" + " bl sub_800832C\n" + " b ._183\n" + "._182:\n" + " .align 2, 0\n" + "._181:\n" + " .word gPaletteFade\n" + "._156:\n" + " ldr r0, ._184\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " bne ._183 @cond_branch\n" + " ldr r1, ._184 + 4\n" + " mov r2, r8\n" + " ldrh r0, [r2]\n" + " strh r0, [r1]\n" + " ldr r1, ._184 + 8\n" + " mov r2, r9\n" + " ldr r0, [r2]\n" + " str r0, [r1, #0x8]\n" + " ldr r0, ._184 + 12\n" + " bl SetMainCallback2\n" + "._183:\n" + " pop {r3, r4}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._185:\n" + " .align 2, 0\n" + "._184:\n" + " .word gReceivedRemoteLinkPlayers\n" + " .word gBattleTypeFlags\n" + " .word gMain\n" + " .word InitBattle+1\n" + "\n" + ); +} +#else void sub_800F104(void) { u8 playerId; @@ -625,7 +1552,774 @@ void sub_800F104(void) break; } } +#endif +#ifdef DEBUG +__attribute__((naked)) +void sub_800F298() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r8\n" + " push {r7}\n" + " bl GetMultiplayerId\n" + " lsl r0, r0, #0x18\n" + " lsr r6, r0, #0x18\n" + " ldr r0, ._188\n" + " ldr r1, ._188 + 4\n" + " add r0, r0, r1\n" + " strb r6, [r0]\n" + " bl RunTasks\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " ldr r0, ._188 + 8\n" + " ldrb r0, [r0]\n" + " cmp r0, #0x7\n" + " bls ._186 @cond_branch\n" + " b ._352\n" + "._186:\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._188 + 12\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._189:\n" + " .align 2, 0\n" + "._188:\n" + " .word +0x2000000\n" + " .word 0x160cb\n" + " .word gBattleCommunication\n" + " .word ._190\n" + "._190:\n" + " .word ._191\n" + " .word ._192\n" + " .word ._193\n" + " .word ._194\n" + " .word ._195\n" + " .word ._196\n" + " .word ._197\n" + " .word ._198\n" + "._191:\n" + " ldr r0, ._206\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " bne ._199 @cond_branch\n" + " b ._352\n" + "._199:\n" + " ldr r0, ._206 + 4\n" + " ldrb r1, [r0]\n" + " mov r0, #0x8\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._201 @cond_branch\n" + " mov r4, #0x0\n" + " ldr r1, ._206 + 8\n" + " ldr r0, ._206 + 12\n" + "._202:\n" + " strh r4, [r0, #0x18]\n" + " str r1, [r0, #0x14]\n" + " add r0, r0, #0x1c\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x3\n" + " ble ._202 @cond_branch\n" + "._201:\n" + " bl sub_8007ECC\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._203 @cond_branch\n" + " b ._352\n" + "._203:\n" + " ldr r4, ._206 + 16\n" + " mov r0, #0x1\n" + " strb r0, [r4]\n" + " strb r0, [r4, #0x1]\n" + " bl sub_800E9EC\n" + " bl sub_800EAAC\n" + " bl bitmask_all_link_players_but_self\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " add r1, r4, #0\n" + " mov r2, #0x20\n" + " bl SendBlock\n" + " b ._300\n" + "._207:\n" + " .align 2, 0\n" + "._206:\n" + " .word gReceivedRemoteLinkPlayers\n" + " .word gUnknown_02023A14+0x50\n" + " .word 0x2211\n" + " .word gLinkPlayers\n" + " .word +0x2000000\n" + "._192:\n" + " bl GetBlockReceivedStatus\n" + " mov r1, #0xf\n" + " and r1, r1, r0\n" + " cmp r1, #0xf\n" + " beq ._208 @cond_branch\n" + " b ._352\n" + "._208:\n" + " bl ResetBlockReceivedFlags\n" + " mov r4, #0x0\n" + " ldr r0, ._213\n" + " ldrh r1, [r0]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " cmp r1, r0\n" + " bne ._210 @cond_branch\n" + " cmp r6, #0\n" + " bne ._211 @cond_branch\n" + " ldr r0, ._213 + 4\n" + " ldrh r1, [r0]\n" + " mov r2, #0xc\n" + " b ._212\n" + "._214:\n" + " .align 2, 0\n" + "._213:\n" + " .word gBlockRecvBuffer\n" + " .word gBattleTypeFlags\n" + "._211:\n" + " ldr r0, ._221\n" + " ldrh r1, [r0]\n" + " mov r2, #0x8\n" + "._212:\n" + " orr r1, r1, r2\n" + " strh r1, [r0]\n" + " add r4, r4, #0x1\n" + "._210:\n" + " cmp r4, #0\n" + " bne ._223 @cond_branch\n" + " mov r2, #0x0\n" + " ldr r1, ._221 + 4\n" + " add r5, r1, #0\n" + " mov r3, #0x80\n" + " lsl r3, r3, #0x1\n" + "._217:\n" + " add r1, r1, r3\n" + " add r2, r2, #0x1\n" + " cmp r2, #0x3\n" + " bgt ._216 @cond_branch\n" + " ldrh r0, [r5]\n" + " ldrh r7, [r1]\n" + " cmp r0, r7\n" + " beq ._217 @cond_branch\n" + "._216:\n" + " cmp r2, #0x4\n" + " bne ._218 @cond_branch\n" + " cmp r6, #0\n" + " bne ._219 @cond_branch\n" + " ldr r0, ._221\n" + " ldrh r1, [r0]\n" + " mov r2, #0xc\n" + " b ._220\n" + "._222:\n" + " .align 2, 0\n" + "._221:\n" + " .word gBattleTypeFlags\n" + " .word gBlockRecvBuffer\n" + "._219:\n" + " ldr r0, ._233\n" + " ldrh r1, [r0]\n" + " mov r2, #0x8\n" + "._220:\n" + " orr r1, r1, r2\n" + " strh r1, [r0]\n" + " add r4, r4, #0x1\n" + "._218:\n" + " cmp r4, #0\n" + " bne ._223 @cond_branch\n" + " ldr r0, ._233 + 4\n" + " ldrh r2, [r0]\n" + " ldr r1, ._233 + 8\n" + " add r3, r0, #0\n" + " ldr r5, ._233\n" + " cmp r2, r1\n" + " beq ._224 @cond_branch\n" + "._230:\n" + " lsl r0, r4, #0x8\n" + " add r0, r0, r3\n" + " ldrh r0, [r0]\n" + " ldr r1, ._233 + 8\n" + " cmp r0, r1\n" + " bls ._225 @cond_branch\n" + " cmp r4, r6\n" + " bne ._227 @cond_branch\n" + "._225:\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x3\n" + " bgt ._227 @cond_branch\n" + " lsl r0, r4, #0x8\n" + " add r0, r0, r3\n" + " ldrh r0, [r0]\n" + " cmp r0, r1\n" + " bne ._230 @cond_branch\n" + "._224:\n" + " cmp r4, r6\n" + " beq ._230 @cond_branch\n" + " cmp r4, r6\n" + " bge ._230 @cond_branch\n" + "._227:\n" + " cmp r4, #0x4\n" + " bne ._231 @cond_branch\n" + " ldrh r0, [r5]\n" + " mov r1, #0xc\n" + " b ._232\n" + "._234:\n" + " .align 2, 0\n" + "._233:\n" + " .word gBattleTypeFlags\n" + " .word gBlockRecvBuffer\n" + " .word 0x101\n" + "._231:\n" + " ldrh r0, [r5]\n" + " mov r1, #0x8\n" + "._232:\n" + " orr r0, r0, r1\n" + " strh r0, [r5]\n" + "._223:\n" + " bl sub_800EB08\n" + " ldr r0, ._239\n" + " ldr r1, ._239 + 4\n" + " mov r2, #0x96\n" + " lsl r2, r2, #0x1\n" + " bl gScriptFuncs_End+0x5bc4\n" + " ldr r0, ._239 + 8\n" + " mov r1, #0x0\n" + " bl CreateTask\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r2, ._239 + 12\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r2\n" + " mov r2, #0x0\n" + " mov r0, #0x87\n" + " lsl r0, r0, #0x1\n" + " strh r0, [r1, #0xa]\n" + " mov r0, #0x5a\n" + " strh r0, [r1, #0xc]\n" + " strh r2, [r1, #0x12]\n" + " strh r2, [r1, #0xe]\n" + " strh r2, [r1, #0x10]\n" + " add r2, r1, #0\n" + " ldr r0, ._239 + 16\n" + " add r3, r0, #2\n" + " ldr r6, ._239 + 20\n" + " mov r5, #0x3f\n" + " mov r7, #0x80\n" + " lsl r7, r7, #0x1\n" + " mov r4, #0x3\n" + "._247:\n" + " ldrh r0, [r6, #0x18]\n" + " cmp r0, #0x1\n" + " beq ._235 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._236 @cond_branch\n" + " cmp r0, #0\n" + " beq ._237 @cond_branch\n" + " b ._246\n" + "._240:\n" + " .align 2, 0\n" + "._239:\n" + " .word +0x201d000\n" + " .word gPlayerParty\n" + " .word sub_800DE30+1\n" + " .word gTasks\n" + " .word gBlockRecvBuffer\n" + " .word gLinkPlayers\n" + "._236:\n" + " cmp r0, #0x2\n" + " beq ._241 @cond_branch\n" + " cmp r0, #0x3\n" + " beq ._242 @cond_branch\n" + " b ._246\n" + "._237:\n" + " ldrh r0, [r3]\n" + " add r1, r5, #0\n" + " and r1, r1, r0\n" + " b ._244\n" + "._235:\n" + " ldrh r0, [r3]\n" + " add r1, r5, #0\n" + " and r1, r1, r0\n" + " b ._245\n" + "._241:\n" + " ldrh r0, [r3]\n" + " add r1, r5, #0\n" + " and r1, r1, r0\n" + " lsl r1, r1, #0x6\n" + "._244:\n" + " ldrh r0, [r2, #0xe]\n" + " orr r1, r1, r0\n" + " strh r1, [r2, #0xe]\n" + " b ._246\n" + "._242:\n" + " ldrh r0, [r3]\n" + " add r1, r5, #0\n" + " and r1, r1, r0\n" + " lsl r1, r1, #0x6\n" + "._245:\n" + " ldrh r0, [r2, #0x10]\n" + " orr r1, r1, r0\n" + " strh r1, [r2, #0x10]\n" + "._246:\n" + " add r3, r3, r7\n" + " add r6, r6, #0x1c\n" + " sub r4, r4, #0x1\n" + " cmp r4, #0\n" + " bge ._247 @cond_branch\n" + " bl ZeroPlayerPartyMons\n" + " bl ZeroEnemyPartyMons\n" + " ldr r1, ._251\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + "._193:\n" + " bl sub_8007ECC\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._248 @cond_branch\n" + " b ._352\n" + "._248:\n" + " bl bitmask_all_link_players_but_self\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r1, ._251 + 4\n" + " mov r2, #0xc8\n" + " bl SendBlock\n" + " b ._300\n" + "._252:\n" + " .align 2, 0\n" + "._251:\n" + " .word gBattleCommunication\n" + " .word +0x201d000\n" + "._194:\n" + " bl GetBlockReceivedStatus\n" + " mov r1, #0xf\n" + " and r1, r1, r0\n" + " cmp r1, #0xf\n" + " beq ._253 @cond_branch\n" + " b ._352\n" + "._253:\n" + " bl ResetBlockReceivedFlags\n" + " mov r4, #0x0\n" + " lsl r0, r6, #0x3\n" + " sub r0, r0, r6\n" + " lsl r0, r0, #0x2\n" + " mov r8, r0\n" + " ldr r5, ._260\n" + " mov r7, #0x0\n" + "._294:\n" + " cmp r4, r6\n" + " bne ._255 @cond_branch\n" + " ldr r0, ._260 + 4\n" + " add r0, r7, r0\n" + " ldrh r0, [r0, #0x18]\n" + " cmp r0, #0x2\n" + " bgt ._256 @cond_branch\n" + " cmp r0, #0x1\n" + " bge ._257 @cond_branch\n" + " cmp r0, #0\n" + " beq ._258 @cond_branch\n" + " b ._291\n" + "._261:\n" + " .align 2, 0\n" + "._260:\n" + " .word gBlockRecvBuffer\n" + " .word gLinkPlayers\n" + "._256:\n" + " cmp r0, #0x3\n" + " bne ._291 @cond_branch\n" + "._258:\n" + " ldr r0, ._264\n" + " b ._283\n" + "._265:\n" + " .align 2, 0\n" + "._264:\n" + " .word gPlayerParty\n" + "._257:\n" + " ldr r0, ._267\n" + " b ._283\n" + "._268:\n" + " .align 2, 0\n" + "._267:\n" + " .word gPlayerParty+0x12c\n" + "._255:\n" + " ldr r2, ._272\n" + " add r0, r7, r2\n" + " ldrh r1, [r0, #0x18]\n" + " mov r3, #0x1\n" + " add r0, r3, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._269 @cond_branch\n" + " mov r1, r8\n" + " add r0, r1, r2\n" + " ldrh r1, [r0, #0x18]\n" + " add r0, r3, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._270 @cond_branch\n" + " b ._274\n" + "._273:\n" + " .align 2, 0\n" + "._272:\n" + " .word gLinkPlayers\n" + "._269:\n" + " mov r1, r8\n" + " add r0, r1, r2\n" + " ldrh r1, [r0, #0x18]\n" + " add r0, r3, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._274 @cond_branch\n" + "._270:\n" + " add r0, r7, r2\n" + " ldrh r2, [r0, #0x18]\n" + " cmp r2, #0x2\n" + " bgt ._275 @cond_branch\n" + " cmp r2, #0x1\n" + " bge ._276 @cond_branch\n" + " cmp r2, #0\n" + " beq ._277 @cond_branch\n" + " b ._291\n" + "._275:\n" + " cmp r2, #0x3\n" + " bne ._291 @cond_branch\n" + "._277:\n" + " ldr r0, ._281\n" + " b ._283\n" + "._282:\n" + " .align 2, 0\n" + "._281:\n" + " .word gPlayerParty\n" + "._276:\n" + " ldr r0, ._284\n" + " b ._283\n" + "._285:\n" + " .align 2, 0\n" + "._284:\n" + " .word gPlayerParty+0x12c\n" + "._274:\n" + " add r0, r7, r2\n" + " ldrh r2, [r0, #0x18]\n" + " cmp r2, #0x2\n" + " bgt ._286 @cond_branch\n" + " cmp r2, #0x1\n" + " bge ._287 @cond_branch\n" + " cmp r2, #0\n" + " beq ._288 @cond_branch\n" + " b ._291\n" + "._286:\n" + " cmp r2, #0x3\n" + " bne ._291 @cond_branch\n" + "._288:\n" + " ldr r0, ._292\n" + "._283:\n" + " add r1, r5, #0\n" + " mov r2, #0xc8\n" + " bl gScriptFuncs_End+0x5bc4\n" + " b ._291\n" + "._293:\n" + " .align 2, 0\n" + "._292:\n" + " .word gEnemyParty\n" + "._287:\n" + " ldr r0, ._296\n" + " add r1, r5, #0\n" + " mov r2, #0xc8\n" + " bl gScriptFuncs_End+0x5bc4\n" + "._291:\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " add r5, r5, r0\n" + " add r7, r7, #0x1c\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x3\n" + " ble ._294 @cond_branch\n" + " b ._300\n" + "._297:\n" + " .align 2, 0\n" + "._296:\n" + " .word gEnemyParty+0x12c\n" + "._195:\n" + " bl sub_8007ECC\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._298 @cond_branch\n" + " b ._352\n" + "._298:\n" + " bl bitmask_all_link_players_but_self\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r1, ._301\n" + " mov r2, #0x64\n" + " bl SendBlock\n" + " b ._300\n" + "._302:\n" + " .align 2, 0\n" + "._301:\n" + " .word +0x201d0c8\n" + "._196:\n" + " bl GetBlockReceivedStatus\n" + " mov r1, #0xf\n" + " and r1, r1, r0\n" + " cmp r1, #0xf\n" + " beq ._303 @cond_branch\n" + " b ._352\n" + "._303:\n" + " bl ResetBlockReceivedFlags\n" + " mov r4, #0x0\n" + " lsl r0, r6, #0x3\n" + " sub r0, r0, r6\n" + " lsl r0, r0, #0x2\n" + " mov r8, r0\n" + " ldr r5, ._310\n" + " mov r7, #0x0\n" + "._344:\n" + " cmp r4, r6\n" + " bne ._305 @cond_branch\n" + " ldr r0, ._310 + 4\n" + " add r0, r7, r0\n" + " ldrh r0, [r0, #0x18]\n" + " cmp r0, #0x2\n" + " bgt ._306 @cond_branch\n" + " cmp r0, #0x1\n" + " bge ._307 @cond_branch\n" + " cmp r0, #0\n" + " beq ._308 @cond_branch\n" + " b ._341\n" + "._311:\n" + " .align 2, 0\n" + "._310:\n" + " .word gBlockRecvBuffer\n" + " .word gLinkPlayers\n" + "._306:\n" + " cmp r0, #0x3\n" + " bne ._341 @cond_branch\n" + "._308:\n" + " ldr r0, ._314\n" + " b ._333\n" + "._315:\n" + " .align 2, 0\n" + "._314:\n" + " .word gPlayerParty+0xc8\n" + "._307:\n" + " ldr r0, ._317\n" + " b ._333\n" + "._318:\n" + " .align 2, 0\n" + "._317:\n" + " .word gPlayerParty+0x1f4\n" + "._305:\n" + " ldr r2, ._322\n" + " add r0, r7, r2\n" + " ldrh r1, [r0, #0x18]\n" + " mov r3, #0x1\n" + " add r0, r3, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._319 @cond_branch\n" + " mov r1, r8\n" + " add r0, r1, r2\n" + " ldrh r1, [r0, #0x18]\n" + " add r0, r3, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._320 @cond_branch\n" + " b ._324\n" + "._323:\n" + " .align 2, 0\n" + "._322:\n" + " .word gLinkPlayers\n" + "._319:\n" + " mov r1, r8\n" + " add r0, r1, r2\n" + " ldrh r1, [r0, #0x18]\n" + " add r0, r3, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._324 @cond_branch\n" + "._320:\n" + " add r0, r7, r2\n" + " ldrh r2, [r0, #0x18]\n" + " cmp r2, #0x2\n" + " bgt ._325 @cond_branch\n" + " cmp r2, #0x1\n" + " bge ._326 @cond_branch\n" + " cmp r2, #0\n" + " beq ._327 @cond_branch\n" + " b ._341\n" + "._325:\n" + " cmp r2, #0x3\n" + " bne ._341 @cond_branch\n" + "._327:\n" + " ldr r0, ._331\n" + " b ._333\n" + "._332:\n" + " .align 2, 0\n" + "._331:\n" + " .word gPlayerParty+0xc8\n" + "._326:\n" + " ldr r0, ._334\n" + " b ._333\n" + "._335:\n" + " .align 2, 0\n" + "._334:\n" + " .word gPlayerParty+0x1f4\n" + "._324:\n" + " add r0, r7, r2\n" + " ldrh r2, [r0, #0x18]\n" + " cmp r2, #0x2\n" + " bgt ._336 @cond_branch\n" + " cmp r2, #0x1\n" + " bge ._337 @cond_branch\n" + " cmp r2, #0\n" + " beq ._338 @cond_branch\n" + " b ._341\n" + "._336:\n" + " cmp r2, #0x3\n" + " bne ._341 @cond_branch\n" + "._338:\n" + " ldr r0, ._342\n" + "._333:\n" + " add r1, r5, #0\n" + " mov r2, #0x64\n" + " bl gScriptFuncs_End+0x5bc4\n" + " b ._341\n" + "._343:\n" + " .align 2, 0\n" + "._342:\n" + " .word gEnemyParty+0xc8\n" + "._337:\n" + " ldr r0, ._346\n" + " add r1, r5, #0\n" + " mov r2, #0x64\n" + " bl gScriptFuncs_End+0x5bc4\n" + "._341:\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " add r5, r5, r0\n" + " add r7, r7, #0x1c\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x3\n" + " ble ._344 @cond_branch\n" + " ldr r4, ._346 + 4\n" + " add r0, r4, #0\n" + " bl shedinja_something\n" + " add r0, r4, #0\n" + " add r0, r0, #0x64\n" + " bl shedinja_something\n" + " add r0, r4, #0\n" + " add r0, r0, #0xc8\n" + " bl shedinja_something\n" + " mov r1, #0x96\n" + " lsl r1, r1, #0x1\n" + " add r0, r4, r1\n" + " bl shedinja_something\n" + " mov r7, #0xc8\n" + " lsl r7, r7, #0x1\n" + " add r0, r4, r7\n" + " bl shedinja_something\n" + " mov r1, #0xfa\n" + " lsl r1, r1, #0x1\n" + " add r0, r4, r1\n" + " bl shedinja_something\n" + " ldr r4, ._346 + 8\n" + " add r0, r4, #0\n" + " bl shedinja_something\n" + " add r0, r4, #0\n" + " add r0, r0, #0x64\n" + " bl shedinja_something\n" + " add r0, r4, #0\n" + " add r0, r0, #0xc8\n" + " bl shedinja_something\n" + " sub r7, r7, #0x64\n" + " add r0, r4, r7\n" + " bl shedinja_something\n" + " mov r1, #0xc8\n" + " lsl r1, r1, #0x1\n" + " add r0, r4, r1\n" + " bl shedinja_something\n" + " add r7, r7, #0xc8\n" + " add r0, r4, r7\n" + " bl shedinja_something\n" + "._300:\n" + " ldr r1, ._346 + 12\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " b ._352\n" + "._347:\n" + " .align 2, 0\n" + "._346:\n" + " .word gEnemyParty+0x1f4\n" + " .word gPlayerParty\n" + " .word gEnemyParty\n" + " .word gBattleCommunication\n" + "._197:\n" + " bl sub_800B950\n" + " ldr r0, ._349\n" + " ldrb r1, [r0]\n" + " add r1, r1, #0x1\n" + " mov r2, #0x0\n" + " strb r1, [r0]\n" + " strb r2, [r0, #0x1]\n" + " strb r2, [r0, #0x2]\n" + " b ._352\n" + "._350:\n" + " .align 2, 0\n" + "._349:\n" + " .word gBattleCommunication\n" + "._198:\n" + " ldr r0, ._353\n" + " add r1, r0, #1\n" + " bl battle_load_something\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " beq ._352 @cond_branch\n" + " ldr r2, ._353 + 4\n" + " ldr r1, ._353 + 8\n" + " ldr r0, [r1]\n" + " str r0, [r2]\n" + " ldr r0, ._353 + 12\n" + " str r0, [r1]\n" + " ldr r0, ._353 + 16\n" + " bl SetMainCallback2\n" + " ldr r3, ._353 + 20\n" + " ldrh r2, [r3]\n" + " mov r0, #0x2\n" + " and r0, r0, r2\n" + " cmp r0, #0\n" + " beq ._352 @cond_branch\n" + " ldr r1, ._353 + 24\n" + " mov r4, #0x80\n" + " lsl r4, r4, #0x4\n" + " add r0, r4, #0\n" + " strh r0, [r1]\n" + " mov r0, #0x20\n" + " orr r0, r0, r2\n" + " strh r0, [r3]\n" + "._352:\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._354:\n" + " .align 2, 0\n" + "._353:\n" + " .word gUnknown_02024D1F\n" + " .word gPreBattleCallback1\n" + " .word gMain\n" + " .word debug_sub_80139E4+1\n" + " .word sub_800F808+1\n" + " .word gBattleTypeFlags\n" + " .word gTrainerBattleOpponent\n" + "\n" + ); +} +#else void sub_800F298(void) { u8 playerId; @@ -893,7 +2587,119 @@ void sub_800F298(void) break; } } +#endif +#if DEBUG +__attribute__((naked)) +void BattleMainCB2(void) +{ + asm( + " push {r4, r5, lr}\n" + " add sp, sp, #0xfffffffc\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " ldr r4, ._358\n" + " ldrh r2, [r4, #0x2c]\n" + " mov r1, #0x82\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, #0\n" + " and r0, r0, r2\n" + " cmp r0, r1\n" + " bne ._357 @cond_branch\n" + " ldr r2, ._358 + 4\n" + " ldr r1, ._358 + 8\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " mov r0, #0x1\n" + " strh r0, [r2]\n" + " ldr r0, ._358 + 12\n" + " add r2, r4, r0\n" + " ldrb r1, [r2]\n" + " mov r0, #0x3\n" + " neg r0, r0\n" + " and r0, r0, r1\n" + " strb r0, [r2]\n" + " ldr r1, ._358 + 16\n" + " mov r0, #0x3\n" + " strb r0, [r1, #0x15]\n" + " ldr r0, ._358 + 20\n" + " ldr r0, [r0]\n" + " str r0, [r4]\n" + " bl ZeroEnemyPartyMons\n" + " mov r0, #0x5a\n" + " bl gScriptFuncs_End+0x148c\n" + " ldr r0, ._358 + 24\n" + " ldrh r1, [r0]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._356 @cond_branch\n" + " ldr r0, ._358 + 28\n" + " bl SetMainCallback2\n" + " b ._357\n" + "._359:\n" + " .align 2, 0\n" + "._358:\n" + " .word gMain\n" + " .word gScriptResult\n" + " .word gBattleOutcome\n" + " .word 0x43d\n" + " .word gUnknown_03004DC0\n" + " .word gPreBattleCallback1\n" + " .word gBattleTypeFlags\n" + " .word sub_805465C+1\n" + "._356:\n" + " ldr r0, [r4, #0x8]\n" + " bl SetMainCallback2\n" + "._357:\n" + " ldr r5, ._361\n" + " ldrh r1, [r5]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._360 @cond_branch\n" + " lsr r0, r1, #0x2\n" + " mov r4, #0x1\n" + " and r0, r0, r4\n" + " str r4, [sp]\n" + " mov r1, #0x1\n" + " mov r2, #0x1\n" + " mov r3, #0x1\n" + " bl debug_sub_8008264\n" + " ldrh r0, [r5]\n" + " lsr r0, r0, #0x2\n" + " and r0, r0, r4\n" + " str r4, [sp]\n" + " mov r1, #0x1\n" + " mov r2, #0x15\n" + " mov r3, #0x1\n" + " bl debug_sub_8008264\n" + " ldrh r0, [r5]\n" + " lsr r0, r0, #0x2\n" + " and r0, r0, r4\n" + " str r4, [sp]\n" + " mov r1, #0x1\n" + " mov r2, #0x29\n" + " mov r3, #0x1\n" + " bl debug_sub_8008264\n" + "._360:\n" + " ldr r0, ._361 + 4\n" + " bl sub_800374C\n" + " bl UpdatePaletteFade\n" + " bl RunTasks\n" + " add sp, sp, #0x4\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._362:\n" + " .align 2, 0\n" + "._361:\n" + " .word gBattleTypeFlags\n" + " .word gUnknown_03004210\n" + "\n" + ); +} +#else void BattleMainCB2(void) { AnimateSprites(); @@ -902,6 +2708,7 @@ void BattleMainCB2(void) UpdatePaletteFade(); RunTasks(); } +#endif void sub_800F828(struct Sprite *sprite) { @@ -1275,6 +3082,5525 @@ void c2_081284E0(void) } } +// A LOT of debug code! +#if DEBUG +__attribute__((naked)) +void debug_sub_8010800() +{ + asm( + " push {lr}\n" + " bl debug_sub_8010818\n" + " bl debug_sub_80108B8\n" + " ldr r1, ._496\n" + " mov r0, #0x0\n" + " str r0, [r1]\n" + " pop {r0}\n" + " bx r0\n" + "._497:\n" + " .align 2, 0\n" + "._496:\n" + " .word gBattleBuffersTransferData+0x100\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8010818() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " ldr r1, ._501\n" + " ldr r0, ._501 + 4\n" + " strh r0, [r1]\n" + " add r2, r1, #0\n" + " add r2, r2, #0x46\n" + " strh r0, [r2]\n" + " ldr r0, ._501 + 8\n" + " add r4, r1, #0\n" + " add r4, r4, #0x48\n" + " add r3, r0, #0\n" + " add r3, r3, #0x12\n" + " add r2, r1, #2\n" + " mov r1, #0x1d\n" + "._498:\n" + " ldrh r0, [r3]\n" + " strh r0, [r2]\n" + " strh r0, [r4]\n" + " add r4, r4, #0x2\n" + " add r3, r3, #0xa\n" + " add r2, r2, #0x2\n" + " sub r1, r1, #0x1\n" + " cmp r1, #0\n" + " bge ._498 @cond_branch\n" + " mov r1, #0x0\n" + " ldr r4, ._501 + 12\n" + " ldr r7, ._501 + 16\n" + " ldr r6, ._501 + 20\n" + " mov r0, #0x30\n" + " add r0, r0, r7\n" + " mov ip, r0\n" + "._500:\n" + " mov r0, #0x0\n" + " strb r0, [r4]\n" + " add r5, r1, #1\n" + " lsl r3, r1, #0x3\n" + "._499:\n" + " ldrb r2, [r4]\n" + " lsl r1, r2, #0x1\n" + " add r1, r1, r3\n" + " add r1, r1, r7\n" + " lsl r0, r2, #0x2\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r6\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " ldrb r2, [r4]\n" + " lsl r1, r2, #0x1\n" + " add r1, r1, r3\n" + " add r1, r1, ip\n" + " lsl r0, r2, #0x2\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r6\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " ldrb r0, [r4]\n" + " add r0, r0, #0x1\n" + " strb r0, [r4]\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x3\n" + " bls ._499 @cond_branch\n" + " add r1, r5, #0\n" + " cmp r1, #0x5\n" + " ble ._500 @cond_branch\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._502:\n" + " .align 2, 0\n" + "._501:\n" + " .word gUnknown_02023A14+0x52\n" + " .word 0x115\n" + " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_02023A14+0xde\n" + " .word UnkDebug0+0x1b4\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80108B8() +{ + asm( + " push {r4, r5, lr}\n" + " add sp, sp, #0xfffffffc\n" + " bl gScriptFuncs_End+0x19f4\n" + " mov r0, #0x0\n" + " bl SetHBlankCallback\n" + " mov r0, #0x0\n" + " bl SetVBlankCallback\n" + " mov r3, #0x0\n" + " str r3, [sp]\n" + " ldr r2, ._507\n" + " mov r0, sp\n" + " str r0, [r2]\n" + " mov r1, #0xc0\n" + " lsl r1, r1, #0x13\n" + " str r1, [r2, #0x4]\n" + " ldr r0, ._507 + 4\n" + " str r0, [r2, #0x8]\n" + " ldr r0, [r2, #0x8]\n" + " ldr r2, ._507 + 8\n" + " mov r0, #0x1\n" + " strh r0, [r2]\n" + " mov r2, #0x80\n" + " lsl r2, r2, #0x13\n" + " mov r4, #0x9a\n" + " lsl r4, r4, #0x5\n" + " add r0, r4, #0\n" + " strh r0, [r2]\n" + " ldr r0, ._507 + 12\n" + " mov r5, #0x0\n" + " strh r3, [r0]\n" + " ldr r0, ._507 + 16\n" + " strh r3, [r0]\n" + " ldr r0, ._507 + 20\n" + " strh r3, [r0]\n" + " ldr r0, ._507 + 24\n" + " strh r3, [r0]\n" + " ldr r0, ._507 + 28\n" + " strh r3, [r0]\n" + " ldr r0, ._507 + 32\n" + " strh r3, [r0]\n" + " ldr r0, ._507 + 36\n" + " strh r3, [r0]\n" + " ldr r0, ._507 + 40\n" + " strh r3, [r0]\n" + " add r2, r2, #0x8\n" + " ldr r4, ._507 + 44\n" + " add r0, r4, #0\n" + " strh r0, [r2]\n" + " add r2, r2, #0x2\n" + " ldr r4, ._507 + 48\n" + " add r0, r4, #0\n" + " strh r0, [r2]\n" + " ldr r0, ._507 + 52\n" + " strh r3, [r0]\n" + " add r0, r0, #0x4\n" + " strh r3, [r0]\n" + " ldr r0, ._507 + 56\n" + " bl LZDecompressVram\n" + " ldr r0, ._507 + 60\n" + " ldr r1, ._507 + 64\n" + " bl sub_800D238\n" + " ldr r4, ._507 + 68\n" + " mov r1, #0xa0\n" + " lsl r1, r1, #0x13\n" + " add r0, r4, #0\n" + " bl LZDecompressVram\n" + " ldr r1, ._507 + 72\n" + " add r0, r4, #0\n" + " bl LZDecompressVram\n" + " bl gScriptFuncs_End+0x1a70\n" + " ldr r0, ._507 + 76\n" + " bl SetVBlankCallback\n" + " ldr r0, ._507 + 80\n" + " bl SetMainCallback2\n" + " bl ResetTasks\n" + " bl ResetSpriteData\n" + " bl remove_some_task\n" + " ldr r4, ._507 + 84\n" + " add r0, r4, #0\n" + " bl SetUpWindowConfig\n" + " ldr r0, ._507 + 88\n" + " add r1, r4, #0\n" + " bl InitWindowFromConfig\n" + " ldr r0, ._507 + 92\n" + " strb r5, [r0]\n" + " ldr r0, ._507 + 96\n" + " strb r5, [r0]\n" + " ldr r0, ._507 + 100\n" + " strb r5, [r0]\n" + " mov r4, #0x0\n" + "._503:\n" + " lsl r0, r4, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x1e\n" + " ble ._503 @cond_branch\n" + " ldr r1, ._507 + 104\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + " add r4, r1, #0\n" + "._504:\n" + " bl debug_sub_8012294\n" + " ldrb r0, [r4]\n" + " add r0, r0, #0x1\n" + " strb r0, [r4]\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x3\n" + " bls ._504 @cond_branch\n" + " ldr r0, ._507 + 100\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + " bl debug_sub_8012540\n" + " bl debug_nullsub_3\n" + " ldr r1, ._507 + 104\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + " bl debug_sub_80125A0\n" + " ldr r0, ._507 + 108\n" + " add r0, r0, #0x44\n" + " mov r1, #0x0\n" + " ldsh r0, [r0, r1]\n" + " cmp r0, #0x8\n" + " bne ._505 @cond_branch\n" + " bl debug_sub_801174C\n" + " b ._506\n" + "._508:\n" + " .align 2, 0\n" + "._507:\n" + " .word 0x40000d4\n" + " .word 0x85006000\n" + " .word 0x4000200\n" + " .word gUnknown_030042A4\n" + " .word gUnknown_030042A0\n" + " .word gUnknown_030042C0\n" + " .word gUnknown_030041B4\n" + " .word gUnknown_03004288\n" + " .word gUnknown_03004280\n" + " .word gUnknown_030041B0\n" + " .word gUnknown_030041B8\n" + " .word 0x1f09\n" + " .word 0x4801\n" + " .word 0x4000050\n" + " .word gMonShinyPalette_CircledQuestionMark+0x18\n" + " .word gMonShinyPalette_CircledQuestionMark+0x834\n" + " .word +0x2000000\n" + " .word gMonShinyPalette_CircledQuestionMark+0xa8c\n" + " .word 0x50001e0\n" + " .word debug_sub_8011D40+1\n" + " .word debug_sub_8010CAC+1\n" + " .word gWindowConfig_81E6C3C\n" + " .word gUnknown_Debug_03004370\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_02023A14+0x52\n" + "._505:\n" + " ldr r0, ._510\n" + " mov r1, #0x0\n" + " mov r4, #0x7\n" + " ldr r2, ._510 + 4\n" + " add r0, r0, r2\n" + "._509:\n" + " strb r1, [r0]\n" + " sub r0, r0, #0x1\n" + " sub r4, r4, #0x1\n" + " cmp r4, #0\n" + " bge ._509 @cond_branch\n" + "._506:\n" + " add sp, sp, #0x4\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._511:\n" + " .align 2, 0\n" + "._510:\n" + " .word +0x2000000\n" + " .word 0x160bb\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8010A7C() +{ + asm( + " push {r4, r5, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " lsl r1, r1, #0x18\n" + " lsr r2, r1, #0x18\n" + " mov r1, #0x0\n" + " ldr r5, ._514\n" + " cmp r1, r2\n" + " bge ._512 @cond_branch\n" + " add r3, r5, #0\n" + "._513:\n" + " add r0, r1, r3\n" + " strb r4, [r0]\n" + " add r1, r1, #0x1\n" + " cmp r1, r2\n" + " blt ._513 @cond_branch\n" + "._512:\n" + " add r1, r1, r5\n" + " mov r0, #0xff\n" + " strb r0, [r1]\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._515:\n" + " .align 2, 0\n" + "._514:\n" + " .word gBattleTextBuff1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8010AAC() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov ip, r0\n" + " ldr r6, ._520\n" + " ldr r4, ._520 + 4\n" + " ldr r5, ._520 + 8\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x2\n" + " add r7, r0, r1\n" + " lsl r1, r7, #0x1\n" + " ldr r3, ._520 + 12\n" + " ldrb r2, [r3]\n" + " mov r0, #0x46\n" + " mul r2, r2, r0\n" + " add r1, r1, r2\n" + " add r1, r1, r4\n" + " mov r0, #0x0\n" + " ldsh r1, [r1, r0]\n" + " lsl r0, r1, #0x3\n" + " sub r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r6\n" + " ldrb r0, [r0, #0x10]\n" + " add r6, r3, #0\n" + " cmp r0, #0xfe\n" + " beq ._516 @cond_branch\n" + " cmp r0, #0xfe\n" + " bgt ._517 @cond_branch\n" + " cmp r0, #0\n" + " beq ._518 @cond_branch\n" + " b ._523\n" + "._521:\n" + " .align 2, 0\n" + "._520:\n" + " .word gBaseStats\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + "._517:\n" + " cmp r0, #0xff\n" + " beq ._522 @cond_branch\n" + " b ._523\n" + "._518:\n" + " add r0, r7, #4\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r2\n" + " add r0, r0, r4\n" + " mov r1, #0x2\n" + " b ._528\n" + "._516:\n" + " add r0, r7, #4\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r2\n" + " add r0, r0, r4\n" + " mov r1, #0x3\n" + " b ._528\n" + "._522:\n" + " add r0, r7, #4\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r2\n" + " add r0, r0, r4\n" + " mov r1, #0x4\n" + " b ._528\n" + "._523:\n" + " ldrb r0, [r5]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " add r1, r1, #0x4\n" + " lsl r1, r1, #0x1\n" + " ldrb r0, [r6]\n" + " mov r3, #0x46\n" + " mul r0, r0, r3\n" + " add r1, r1, r0\n" + " add r1, r1, r4\n" + " ldrh r2, [r1]\n" + " mov r0, #0x1\n" + " and r0, r0, r2\n" + " strh r0, [r1]\n" + " mov r1, ip\n" + " cmp r1, #0\n" + " beq ._527 @cond_branch\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x1\n" + " ldrb r1, [r6]\n" + " mul r1, r1, r3\n" + " add r0, r0, r1\n" + " add r0, r0, r4\n" + " ldrh r1, [r0]\n" + " mov r2, #0x1\n" + " eor r1, r1, r2\n" + " b ._528\n" + "._527:\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x1\n" + " ldrb r1, [r6]\n" + " mul r1, r1, r3\n" + " add r0, r0, r1\n" + " add r0, r0, r4\n" + " mov r1, ip\n" + "._528:\n" + " strh r1, [r0]\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8010B80() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r9\n" + " mov r6, r8\n" + " push {r6, r7}\n" + " lsl r0, r0, #0x18\n" + " lsr r6, r0, #0x18\n" + " mov r0, #0x0\n" + " mov ip, r0\n" + " ldr r4, ._534\n" + " ldr r1, ._534 + 4\n" + " mov r8, r1\n" + " ldr r5, ._534 + 8\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " mov r2, r8\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x1\n" + " ldr r3, ._534 + 12\n" + " ldrb r2, [r3]\n" + " mov r1, #0x46\n" + " mul r1, r1, r2\n" + " add r0, r0, r1\n" + " add r0, r0, r4\n" + " ldrb r7, [r0]\n" + " lsl r1, r7, #0x18\n" + " asr r0, r1, #0x18\n" + " mov r9, r4\n" + " add r2, r5, #0\n" + " add r4, r3, #0\n" + " cmp r0, #0x9\n" + " ble ._529 @cond_branch\n" + "._530:\n" + " mov r3, #0xf6\n" + " lsl r3, r3, #0x18\n" + " add r0, r1, r3\n" + " lsr r7, r0, #0x18\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " mov r3, #0x80\n" + " lsl r3, r3, #0x11\n" + " add r0, r0, r3\n" + " lsr r0, r0, #0x18\n" + " mov ip, r0\n" + " lsl r1, r7, #0x18\n" + " asr r0, r1, #0x18\n" + " cmp r0, #0x9\n" + " bgt ._530 @cond_branch\n" + "._529:\n" + " mov r0, #0x2\n" + " and r0, r0, r6\n" + " cmp r0, #0\n" + " beq ._531 @cond_branch\n" + " mov r0, #0x1\n" + " and r0, r0, r6\n" + " cmp r0, #0\n" + " beq ._532 @cond_branch\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " mov r3, #0x80\n" + " lsl r3, r3, #0x11\n" + " b ._533\n" + "._535:\n" + " .align 2, 0\n" + "._534:\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + "._532:\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " mov r3, #0xff\n" + " lsl r3, r3, #0x18\n" + "._533:\n" + " add r0, r0, r3\n" + " lsr r0, r0, #0x18\n" + " mov ip, r0\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " cmp r0, #0\n" + " bge ._536 @cond_branch\n" + " mov r3, #0x9\n" + " mov ip, r3\n" + "._536:\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " asr r0, r0, #0x18\n" + " cmp r0, #0x9\n" + " ble ._542 @cond_branch\n" + " mov r3, #0x0\n" + " mov ip, r3\n" + " b ._542\n" + "._531:\n" + " mov r0, #0x1\n" + " and r0, r0, r6\n" + " cmp r0, #0\n" + " beq ._539 @cond_branch\n" + " lsl r0, r7, #0x18\n" + " mov r1, #0x80\n" + " lsl r1, r1, #0x11\n" + " add r0, r0, r1\n" + " b ._540\n" + "._539:\n" + " lsl r0, r7, #0x18\n" + " mov r3, #0xff\n" + " lsl r3, r3, #0x18\n" + " add r0, r0, r3\n" + "._540:\n" + " lsr r7, r0, #0x18\n" + " lsl r0, r7, #0x18\n" + " cmp r0, #0\n" + " bgt ._541 @cond_branch\n" + " mov r7, #0x9\n" + "._541:\n" + " lsl r0, r7, #0x18\n" + " asr r0, r0, #0x18\n" + " cmp r0, #0x9\n" + " ble ._542 @cond_branch\n" + " mov r7, #0x1\n" + "._542:\n" + " ldrb r0, [r2]\n" + " lsl r2, r0, #0x2\n" + " add r2, r2, r0\n" + " mov r0, r8\n" + " ldrb r0, [r0]\n" + " add r2, r2, r0\n" + " lsl r2, r2, #0x1\n" + " ldrb r1, [r4]\n" + " mov r0, #0x1\n" + " eor r0, r0, r1\n" + " mov r1, #0x46\n" + " add r3, r0, #0\n" + " mul r3, r3, r1\n" + " add r3, r2, r3\n" + " add r3, r3, r9\n" + " ldrb r0, [r4]\n" + " mul r0, r0, r1\n" + " add r2, r2, r0\n" + " add r2, r2, r9\n" + " mov r1, ip\n" + " lsl r0, r1, #0x18\n" + " asr r0, r0, #0x18\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x1\n" + " lsl r0, r7, #0x18\n" + " asr r0, r0, #0x18\n" + " add r0, r0, r1\n" + " strh r0, [r2]\n" + " strh r0, [r3]\n" + " pop {r3, r4}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8010CAC() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r8\n" + " push {r7}\n" + " add sp, sp, #0xfffffff0\n" + " ldr r4, ._553\n" + " ldrh r1, [r4, #0x28]\n" + " mov r0, #0x81\n" + " lsl r0, r0, #0x2\n" + " cmp r1, r0\n" + " bne ._543 @cond_branch\n" + " bl DoSoftReset\n" + "._543:\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x4\n" + " beq ._544 @cond_branch\n" + " b ._559\n" + "._544:\n" + " ldr r0, ._553 + 4\n" + " ldrb r1, [r0]\n" + " mov r8, r0\n" + " cmp r1, #0x5\n" + " bhi ._546 @cond_branch\n" + " ldr r0, ._553 + 8\n" + " mov r1, #0x0\n" + " strb r1, [r0]\n" + " bl debug_sub_8012628\n" + " ldr r0, ._553 + 12\n" + " bl SetMainCallback2\n" + "._546:\n" + " ldr r0, ._553 + 16\n" + " ldrb r3, [r0]\n" + " cmp r3, #0\n" + " bne ._555 @cond_branch\n" + " mov r1, r8\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x6\n" + " bne ._555 @cond_branch\n" + " ldr r0, ._553 + 20\n" + " str r0, [r4, #0x8]\n" + " ldr r4, ._553 + 24\n" + " ldr r0, ._553 + 28\n" + " ldrh r1, [r0]\n" + " ldrb r2, [r0, #0x2]\n" + " str r3, [sp]\n" + " str r3, [sp, #0x4]\n" + " str r3, [sp, #0x8]\n" + " str r3, [sp, #0xc]\n" + " add r0, r4, #0\n" + " mov r3, #0x20\n" + " bl CreateMon\n" + " mov r5, #0x0\n" + " add r6, r4, #0\n" + "._549:\n" + " add r1, r5, #0\n" + " add r1, r1, #0xd\n" + " lsl r4, r5, #0x1\n" + " ldr r0, ._553 + 32\n" + " add r4, r4, r0\n" + " add r0, r6, #0\n" + " add r2, r4, #0\n" + " bl SetMonData\n" + " add r1, r5, #0\n" + " add r1, r1, #0x11\n" + " mov r2, #0x0\n" + " ldsh r0, [r4, r2]\n" + " lsl r2, r0, #0x1\n" + " add r2, r2, r0\n" + " lsl r2, r2, #0x2\n" + " ldr r0, ._553 + 36\n" + " add r2, r2, r0\n" + " add r0, r6, #0\n" + " bl SetMonData\n" + " add r5, r5, #0x1\n" + " cmp r5, #0x3\n" + " ble ._549 @cond_branch\n" + " ldr r2, ._553 + 28\n" + " mov r4, #0x3c\n" + " ldsh r0, [r2, r4]\n" + " cmp r0, #0x1\n" + " beq ._550 @cond_branch\n" + " cmp r0, #0x2\n" + " beq ._551 @cond_branch\n" + " b ._555\n" + "._554:\n" + " .align 2, 0\n" + "._553:\n" + " .word gMain\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_030043A8\n" + " .word debug_sub_8011498+1\n" + " .word gUnknown_Debug_030043A0\n" + " .word debug_sub_80108B8+1\n" + " .word gPlayerParty\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_02023A14+0xde\n" + " .word gBattleMoves+0x4\n" + "._550:\n" + " ldr r1, ._556\n" + " ldr r0, ._556 + 4\n" + " str r0, [r1]\n" + " ldr r0, ._556 + 8\n" + " ldrh r1, [r2, #0xa]\n" + " mov r2, #0x1\n" + " mov r3, #0x0\n" + " bl EvolutionScene\n" + " b ._555\n" + "._557:\n" + " .align 2, 0\n" + "._556:\n" + " .word gUnknown_03005E94\n" + " .word debug_sub_80108B8+1\n" + " .word gPlayerParty\n" + "._551:\n" + " bl debug_sub_8012688\n" + "._555:\n" + " ldr r0, ._565\n" + " ldrb r0, [r0]\n" + " cmp r0, #0x1\n" + " bne ._559 @cond_branch\n" + " ldr r0, ._565 + 4\n" + " ldrb r0, [r0]\n" + " cmp r0, #0x6\n" + " bne ._559 @cond_branch\n" + " ldr r3, ._565 + 8\n" + " ldrb r2, [r3, #0x15]\n" + " lsl r0, r2, #0x1d\n" + " lsr r5, r0, #0x1f\n" + " lsl r0, r2, #0x1f\n" + " lsr r0, r0, #0x1f\n" + " lsl r0, r0, #0x1\n" + " orr r5, r5, r0\n" + " add r5, r5, #0x1\n" + " cmp r5, #0x4\n" + " bne ._560 @cond_branch\n" + " mov r5, #0x0\n" + "._560:\n" + " mov r0, #0x1\n" + " add r1, r5, #0\n" + " and r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " mov r0, #0x5\n" + " neg r0, r0\n" + " and r0, r0, r2\n" + " orr r0, r0, r1\n" + " mov r1, #0x2\n" + " and r5, r5, r1\n" + " lsr r2, r5, #0x1\n" + " sub r1, r1, #0x4\n" + " and r0, r0, r1\n" + " orr r0, r0, r2\n" + " strb r0, [r3, #0x15]\n" + " lsl r0, r0, #0x1f\n" + " lsr r0, r0, #0x1f\n" + " bl gScriptFuncs_End+0x2aa0\n" + " bl debug_nullsub_3\n" + "._559:\n" + " ldr r4, ._565 + 12\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x8\n" + " bne ._561 @cond_branch\n" + " bl debug_sub_801174C\n" + "._561:\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x40\n" + " bne ._562 @cond_branch\n" + " bl debug_sub_80125E4\n" + " ldr r1, ._565 + 4\n" + " ldrb r0, [r1]\n" + " cmp r0, #0\n" + " beq ._563 @cond_branch\n" + " sub r0, r0, #0x1\n" + " b ._564\n" + "._566:\n" + " .align 2, 0\n" + "._565:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gSaveBlock2\n" + " .word gMain\n" + "._563:\n" + " mov r0, #0x6\n" + "._564:\n" + " strb r0, [r1]\n" + " bl debug_sub_8011E74\n" + " ldr r0, ._570\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + " bl debug_sub_80125A0\n" + "._562:\n" + " ldr r0, ._570 + 4\n" + " ldrh r0, [r0, #0x2a]\n" + " cmp r0, #0x80\n" + " bne ._567 @cond_branch\n" + " bl debug_sub_80125E4\n" + " ldr r1, ._570\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x6\n" + " bne ._568 @cond_branch\n" + " mov r0, #0x0\n" + " b ._569\n" + "._571:\n" + " .align 2, 0\n" + "._570:\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + "._568:\n" + " add r0, r0, #0x1\n" + "._569:\n" + " strb r0, [r1]\n" + " bl debug_sub_8011E74\n" + " ldr r0, ._575\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + " bl debug_sub_80125A0\n" + "._567:\n" + " ldr r0, ._575 + 4\n" + " ldrh r0, [r0, #0x2a]\n" + " cmp r0, #0x20\n" + " bne ._572 @cond_branch\n" + " bl debug_sub_80125E4\n" + " ldr r2, ._575 + 8\n" + " ldrb r0, [r2]\n" + " add r1, r0, #0\n" + " cmp r1, #0\n" + " beq ._573 @cond_branch\n" + " sub r0, r0, #0x1\n" + " strb r0, [r2]\n" + " b ._577\n" + "._576:\n" + " .align 2, 0\n" + "._575:\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + " .word gUnknown_Debug_030043A0\n" + "._573:\n" + " ldr r3, ._581\n" + " ldrb r0, [r3]\n" + " cmp r0, #0\n" + " beq ._577 @cond_branch\n" + " strb r1, [r3]\n" + " mov r0, #0x4\n" + " strb r0, [r2]\n" + " ldr r0, ._581 + 4\n" + " strh r1, [r0]\n" + " bl debug_sub_8011E5C\n" + " bl debug_sub_8011E74\n" + " ldr r0, ._581 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._577:\n" + " bl debug_sub_80125A0\n" + "._572:\n" + " ldr r0, ._581 + 12\n" + " ldrh r0, [r0, #0x2a]\n" + " cmp r0, #0x10\n" + " bne ._578 @cond_branch\n" + " bl debug_sub_80125E4\n" + " ldr r2, ._581 + 16\n" + " ldrb r0, [r2]\n" + " cmp r0, #0x4\n" + " beq ._579 @cond_branch\n" + " add r0, r0, #0x1\n" + " strb r0, [r2]\n" + " b ._583\n" + "._582:\n" + " .align 2, 0\n" + "._581:\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_030042C0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + " .word gUnknown_Debug_030043A0\n" + "._579:\n" + " ldr r3, ._587\n" + " ldrb r1, [r3]\n" + " cmp r1, #0\n" + " bne ._583 @cond_branch\n" + " mov r0, #0x1\n" + " strb r0, [r3]\n" + " strb r1, [r2]\n" + " ldr r1, ._587 + 4\n" + " mov r2, #0x80\n" + " lsl r2, r2, #0x1\n" + " add r0, r2, #0\n" + " strh r0, [r1]\n" + " bl debug_sub_8011E5C\n" + " bl debug_sub_8011E74\n" + " ldr r0, ._587 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._583:\n" + " bl debug_sub_80125A0\n" + "._578:\n" + " ldr r0, ._587 + 12\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._584 @cond_branch\n" + " b ._607\n" + "._584:\n" + " ldr r0, ._587 + 16\n" + " ldrb r2, [r0]\n" + " ldr r0, ._587 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r2, r0\n" + " sub r0, r0, #0x1e\n" + " cmp r0, #0x4\n" + " bhi ._586 @cond_branch\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._587 + 20\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._588:\n" + " .align 2, 0\n" + "._587:\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_030042C0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + " .word gUnknown_Debug_030043A0\n" + " .word ._589\n" + "._589:\n" + " .word ._590\n" + " .word ._591\n" + " .word ._592\n" + " .word ._593\n" + " .word ._594\n" + "._591:\n" + " bl debug_sub_8010818\n" + " b ._595\n" + "._592:\n" + " ldr r1, ._597\n" + " mov r0, #0x1f\n" + " mov r2, #0xec\n" + " bl debug_sub_80132C8\n" + "._595:\n" + " bl debug_sub_8011E5C\n" + " bl debug_sub_8011E74\n" + " bl debug_sub_8012540\n" + " bl debug_nullsub_3\n" + " ldr r0, ._597 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + " b ._607\n" + "._598:\n" + " .align 2, 0\n" + "._597:\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_030043A4\n" + "._593:\n" + " ldr r1, ._600\n" + " mov r0, #0x1f\n" + " mov r2, #0xec\n" + " bl debug_sub_8013294\n" + " b ._607\n" + "._601:\n" + " .align 2, 0\n" + "._600:\n" + " .word gUnknown_02023A14+0x52\n" + "._594:\n" + " ldr r3, ._604\n" + " add r2, r3, #0\n" + " add r2, r2, #0x44\n" + " ldrh r1, [r2]\n" + " mov r4, #0x0\n" + " ldsh r0, [r2, r4]\n" + " cmp r0, #0\n" + " beq ._602 @cond_branch\n" + " sub r0, r1, #1\n" + " strh r0, [r2]\n" + " add r1, r3, #0\n" + " add r1, r1, #0x8a\n" + " ldrh r0, [r1]\n" + " sub r0, r0, #0x1\n" + " strh r0, [r1]\n" + " b ._603\n" + "._605:\n" + " .align 2, 0\n" + "._604:\n" + " .word gUnknown_02023A14+0x52\n" + "._602:\n" + " mov r1, #0x8\n" + " strh r1, [r2]\n" + " add r0, r3, #0\n" + " add r0, r0, #0x8a\n" + " strh r1, [r0]\n" + "._603:\n" + " bl debug_sub_8012540\n" + " b ._607\n" + "._590:\n" + " mov r0, #0x0\n" + " bl debug_sub_8010B80\n" + " ldr r2, ._608\n" + " ldr r0, ._608 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " b ._607\n" + "._609:\n" + " .align 2, 0\n" + "._608:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + "._586:\n" + " cmp r2, #0x4\n" + " bne ._611 @cond_branch\n" + " cmp r1, #0x5\n" + " bhi ._611 @cond_branch\n" + " mov r0, #0x1\n" + " bl debug_sub_8010AAC\n" + " b ._613\n" + "._611:\n" + " ldr r6, ._618\n" + " ldr r5, ._618 + 4\n" + " ldr r4, ._618 + 8\n" + " ldrb r0, [r4]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r0, [r5]\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x1\n" + " ldr r2, ._618 + 12\n" + " ldrb r0, [r2]\n" + " mov r3, #0x46\n" + " mul r0, r0, r3\n" + " add r1, r1, r0\n" + " add r1, r1, r6\n" + " ldrh r0, [r1]\n" + " sub r0, r0, #0x1\n" + " strh r0, [r1]\n" + " ldrb r0, [r4]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r5, [r5]\n" + " add r1, r1, r5\n" + " lsl r0, r1, #0x1\n" + " ldrb r2, [r2]\n" + " mul r2, r2, r3\n" + " add r0, r0, r2\n" + " add r3, r0, r6\n" + " mov r4, #0x0\n" + " ldsh r2, [r3, r4]\n" + " ldr r4, ._618 + 16\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r1, r0, #0x1\n" + " add r0, r4, #0\n" + " add r0, r0, #0x8\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " cmp r2, r0\n" + " bge ._613 @cond_branch\n" + " add r0, r4, #6\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " strh r0, [r3]\n" + "._613:\n" + " ldr r5, ._618 + 4\n" + " ldrb r0, [r5]\n" + " cmp r0, #0\n" + " bne ._614 @cond_branch\n" + " mov r0, #0x0\n" + " bl debug_sub_8010AAC\n" + " ldr r0, ._618 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + "._614:\n" + " ldr r4, ._618 + 8\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r5, [r5]\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._607:\n" + " ldr r0, ._618 + 20\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._615 @cond_branch\n" + " b ._638\n" + "._615:\n" + " ldr r0, ._618 + 4\n" + " ldrb r2, [r0]\n" + " ldr r0, ._618 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r2, r0\n" + " sub r0, r0, #0x1e\n" + " cmp r0, #0x4\n" + " bhi ._617 @cond_branch\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._618 + 24\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._619:\n" + " .align 2, 0\n" + "._618:\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + " .word UnkDebug0+0x6c\n" + " .word gMain\n" + " .word ._620\n" + "._620:\n" + " .word ._621\n" + " .word ._622\n" + " .word ._623\n" + " .word ._624\n" + " .word ._625\n" + "._622:\n" + " bl debug_sub_8010818\n" + " b ._626\n" + "._623:\n" + " ldr r1, ._628\n" + " mov r0, #0x1f\n" + " mov r2, #0xec\n" + " bl debug_sub_80132C8\n" + "._626:\n" + " bl debug_sub_8011E5C\n" + " bl debug_sub_8011E74\n" + " bl debug_sub_8012540\n" + " bl debug_nullsub_3\n" + " ldr r0, ._628 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + " b ._638\n" + "._629:\n" + " .align 2, 0\n" + "._628:\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_030043A4\n" + "._624:\n" + " ldr r1, ._631\n" + " mov r0, #0x1f\n" + " mov r2, #0xec\n" + " bl debug_sub_8013294\n" + " b ._638\n" + "._632:\n" + " .align 2, 0\n" + "._631:\n" + " .word gUnknown_02023A14+0x52\n" + "._625:\n" + " ldr r3, ._635\n" + " add r2, r3, #0\n" + " add r2, r2, #0x44\n" + " ldrh r1, [r2]\n" + " mov r4, #0x0\n" + " ldsh r0, [r2, r4]\n" + " cmp r0, #0x7\n" + " bgt ._633 @cond_branch\n" + " add r0, r1, #1\n" + " strh r0, [r2]\n" + " add r1, r3, #0\n" + " add r1, r1, #0x8a\n" + " ldrh r0, [r1]\n" + " add r0, r0, #0x1\n" + " strh r0, [r1]\n" + " b ._634\n" + "._636:\n" + " .align 2, 0\n" + "._635:\n" + " .word gUnknown_02023A14+0x52\n" + "._633:\n" + " mov r1, #0x0\n" + " strh r1, [r2]\n" + " add r0, r3, #0\n" + " add r0, r0, #0x8a\n" + " strh r1, [r0]\n" + "._634:\n" + " bl debug_sub_8012540\n" + " b ._638\n" + "._621:\n" + " mov r0, #0x1\n" + " bl debug_sub_8010B80\n" + " ldr r2, ._639\n" + " ldr r0, ._639 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " b ._638\n" + "._640:\n" + " .align 2, 0\n" + "._639:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + "._617:\n" + " cmp r2, #0x4\n" + " bne ._642 @cond_branch\n" + " cmp r1, #0x5\n" + " bhi ._642 @cond_branch\n" + " mov r0, #0x1\n" + " bl debug_sub_8010AAC\n" + " b ._644\n" + "._642:\n" + " ldr r6, ._650\n" + " ldr r5, ._650 + 4\n" + " ldr r4, ._650 + 8\n" + " ldrb r0, [r4]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r0, [r5]\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x1\n" + " ldr r2, ._650 + 12\n" + " ldrb r0, [r2]\n" + " mov r3, #0x46\n" + " mul r0, r0, r3\n" + " add r1, r1, r0\n" + " add r1, r1, r6\n" + " ldrh r0, [r1]\n" + " add r0, r0, #0x1\n" + " strh r0, [r1]\n" + " ldrb r0, [r4]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r5, [r5]\n" + " add r1, r1, r5\n" + " lsl r0, r1, #0x1\n" + " ldrb r2, [r2]\n" + " mul r2, r2, r3\n" + " add r0, r0, r2\n" + " add r3, r0, r6\n" + " mov r4, #0x0\n" + " ldsh r2, [r3, r4]\n" + " ldr r4, ._650 + 16\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r1, r0, #0x1\n" + " add r0, r4, #6\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " cmp r2, r0\n" + " ble ._644 @cond_branch\n" + " add r0, r4, #0\n" + " add r0, r0, #0x8\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " strh r0, [r3]\n" + "._644:\n" + " ldr r5, ._650 + 4\n" + " ldrb r0, [r5]\n" + " cmp r0, #0\n" + " bne ._645 @cond_branch\n" + " mov r0, #0x0\n" + " bl debug_sub_8010AAC\n" + " ldr r0, ._650 + 8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + "._645:\n" + " ldr r4, ._650 + 8\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r5, [r5]\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._638:\n" + " ldr r0, ._650 + 20\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._646 @cond_branch\n" + " ldr r0, ._650 + 4\n" + " ldrb r1, [r0]\n" + " ldr r2, ._650 + 8\n" + " mov r8, r2\n" + " add r7, r0, #0\n" + " cmp r1, #0x4\n" + " bne ._648 @cond_branch\n" + " ldrb r0, [r2]\n" + " cmp r0, #0x5\n" + " bhi ._648 @cond_branch\n" + " mov r0, #0x1\n" + " bl debug_sub_8010AAC\n" + " b ._653\n" + "._651:\n" + " .align 2, 0\n" + "._650:\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + " .word UnkDebug0+0x6c\n" + " .word gMain\n" + "._648:\n" + " mov r4, r8\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r1, [r7]\n" + " add r0, r0, r1\n" + " cmp r0, #0x1e\n" + " bne ._652 @cond_branch\n" + " mov r0, #0x2\n" + " bl debug_sub_8010B80\n" + " b ._653\n" + "._652:\n" + " ldr r4, ._655\n" + " lsl r1, r0, #0x1\n" + " ldr r3, ._655 + 4\n" + " ldrb r2, [r3]\n" + " mov r0, #0x46\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r4\n" + " ldrh r0, [r1]\n" + " sub r0, r0, #0xa\n" + " strh r0, [r1]\n" + " add r6, r3, #0\n" + " ldr r5, ._655 + 8\n" + " b ._654\n" + "._656:\n" + " .align 2, 0\n" + "._655:\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_03004360\n" + " .word UnkDebug0+0x6c\n" + "._657:\n" + " add r0, r5, #6\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " ldrh r2, [r3]\n" + " add r0, r0, r2\n" + " strh r0, [r3]\n" + "._654:\n" + " mov r1, r8\n" + " ldrb r0, [r1]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r2, [r7]\n" + " add r1, r1, r2\n" + " lsl r2, r1, #0x1\n" + " ldrb r3, [r6]\n" + " mov r0, #0x46\n" + " mul r0, r0, r3\n" + " add r2, r2, r0\n" + " add r3, r2, r4\n" + " mov r0, #0x0\n" + " ldsh r2, [r3, r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r1, r0, #0x1\n" + " add r0, r5, #0\n" + " add r0, r0, #0x8\n" + " add r0, r1, r0\n" + " ldrh r0, [r0]\n" + " cmp r2, r0\n" + " blt ._657 @cond_branch\n" + "._653:\n" + " ldr r5, ._663\n" + " ldrb r0, [r5]\n" + " cmp r0, #0\n" + " bne ._658 @cond_branch\n" + " mov r0, #0x0\n" + " bl debug_sub_8010AAC\n" + " ldr r0, ._663 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + "._658:\n" + " ldr r4, ._663 + 4\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r5, [r5]\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._646:\n" + " ldr r0, ._663 + 8\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._659 @cond_branch\n" + " ldr r0, ._663\n" + " ldrb r1, [r0]\n" + " ldr r2, ._663 + 4\n" + " mov r8, r2\n" + " add r7, r0, #0\n" + " cmp r1, #0x4\n" + " bne ._661 @cond_branch\n" + " ldrb r0, [r2]\n" + " cmp r0, #0x5\n" + " bhi ._661 @cond_branch\n" + " mov r0, #0x1\n" + " bl debug_sub_8010AAC\n" + " b ._666\n" + "._664:\n" + " .align 2, 0\n" + "._663:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + "._661:\n" + " mov r4, r8\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r1, [r7]\n" + " add r0, r0, r1\n" + " cmp r0, #0x1e\n" + " bne ._665 @cond_branch\n" + " mov r0, #0x3\n" + " bl debug_sub_8010B80\n" + " b ._666\n" + "._665:\n" + " ldr r4, ._668\n" + " lsl r1, r0, #0x1\n" + " ldr r3, ._668 + 4\n" + " ldrb r2, [r3]\n" + " mov r0, #0x46\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r4\n" + " ldrh r0, [r1]\n" + " add r0, r0, #0xa\n" + " strh r0, [r1]\n" + " add r6, r3, #0\n" + " ldr r5, ._668 + 8\n" + " b ._667\n" + "._669:\n" + " .align 2, 0\n" + "._668:\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_03004360\n" + " .word UnkDebug0+0x6c\n" + "._670:\n" + " ldrh r0, [r3]\n" + " sub r0, r0, r1\n" + " strh r0, [r3]\n" + "._667:\n" + " mov r2, r8\n" + " ldrb r0, [r2]\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " ldrb r0, [r7]\n" + " add r1, r1, r0\n" + " lsl r2, r1, #0x1\n" + " ldrb r3, [r6]\n" + " mov r0, #0x46\n" + " mul r0, r0, r3\n" + " add r2, r2, r0\n" + " add r3, r2, r4\n" + " mov r0, #0x0\n" + " ldsh r2, [r3, r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x1\n" + " add r1, r5, #6\n" + " add r0, r0, r1\n" + " ldrh r1, [r0]\n" + " cmp r2, r1\n" + " bgt ._670 @cond_branch\n" + "._666:\n" + " ldr r5, ._672\n" + " ldrb r0, [r5]\n" + " cmp r0, #0\n" + " bne ._671 @cond_branch\n" + " mov r0, #0x0\n" + " bl debug_sub_8010AAC\n" + " ldr r0, ._672 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " add r0, r0, #0x4\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + "._671:\n" + " ldr r4, ._672 + 4\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r5, [r5]\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " ldrb r1, [r4]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_80123D8\n" + "._659:\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " add sp, sp, #0x10\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._673:\n" + " .align 2, 0\n" + "._672:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8011498() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " ldr r2, ._687\n" + " ldr r0, ._687 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r9, r0\n" + " ldr r4, ._687 + 8\n" + " ldrh r1, [r4, #0x28]\n" + " mov r0, #0x81\n" + " lsl r0, r0, #0x2\n" + " cmp r1, r0\n" + " bne ._674 @cond_branch\n" + " bl DoSoftReset\n" + "._674:\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x4\n" + " bne ._675 @cond_branch\n" + " bl debug_sub_8012658\n" + " ldr r0, ._687 + 12\n" + " bl SetMainCallback2\n" + "._675:\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x8\n" + " bne ._676 @cond_branch\n" + " bl debug_sub_801174C\n" + "._676:\n" + " ldrh r0, [r4, #0x2a]\n" + " cmp r0, #0x40\n" + " beq ._677 @cond_branch\n" + " cmp r0, #0x80\n" + " bne ._678 @cond_branch\n" + "._677:\n" + " bl debug_sub_8012658\n" + " ldr r0, ._687 + 16\n" + " ldrb r1, [r0]\n" + " mov r2, #0x2\n" + " eor r1, r1, r2\n" + " strb r1, [r0]\n" + " bl debug_sub_8012628\n" + "._678:\n" + " ldr r0, ._687 + 8\n" + " ldrh r0, [r0, #0x2a]\n" + " cmp r0, #0x20\n" + " beq ._679 @cond_branch\n" + " cmp r0, #0x10\n" + " bne ._680 @cond_branch\n" + "._679:\n" + " bl debug_sub_8012658\n" + " ldr r0, ._687 + 16\n" + " ldrb r1, [r0]\n" + " mov r2, #0x1\n" + " eor r1, r1, r2\n" + " strb r1, [r0]\n" + " bl debug_sub_8012628\n" + "._680:\n" + " ldr r0, ._687 + 8\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._681 @cond_branch\n" + " ldr r0, ._687 + 20\n" + " mov r8, r0\n" + " ldr r6, ._687 + 16\n" + " ldrb r4, [r6]\n" + " lsl r4, r4, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x4358\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldr r5, ._687 + 24\n" + " ldrb r2, [r5]\n" + " lsl r1, r2, #0x1\n" + " add r1, r1, r2\n" + " lsl r1, r1, #0x4\n" + " add r4, r4, r1\n" + " add r4, r4, r8\n" + " ldrh r1, [r4]\n" + " sub r1, r1, #0x1\n" + " strh r1, [r4]\n" + " ldrb r3, [r6]\n" + " lsl r1, r3, #0x1\n" + " add r1, r1, r0\n" + " ldrb r2, [r5]\n" + " lsl r0, r2, #0x1\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x4\n" + " add r1, r1, r0\n" + " mov r0, r8\n" + " add r4, r1, r0\n" + " mov r0, #0x0\n" + " ldsh r1, [r4, r0]\n" + " ldr r5, ._687 + 28\n" + " lsl r0, r3, #0x2\n" + " add r0, r0, r3\n" + " lsl r2, r0, #0x1\n" + " add r0, r5, #0\n" + " add r0, r0, #0x8\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " cmp r1, r0\n" + " bge ._682 @cond_branch\n" + " add r0, r5, #6\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " strh r0, [r4]\n" + "._682:\n" + " bl debug_sub_8012294\n" + "._681:\n" + " ldr r0, ._687 + 8\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._683 @cond_branch\n" + " ldr r1, ._687 + 20\n" + " mov r8, r1\n" + " ldr r6, ._687 + 16\n" + " ldrb r4, [r6]\n" + " lsl r4, r4, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x4358\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldr r5, ._687 + 24\n" + " ldrb r2, [r5]\n" + " lsl r1, r2, #0x1\n" + " add r1, r1, r2\n" + " lsl r1, r1, #0x4\n" + " add r4, r4, r1\n" + " add r4, r4, r8\n" + " ldrh r1, [r4]\n" + " add r1, r1, #0x1\n" + " strh r1, [r4]\n" + " ldrb r3, [r6]\n" + " lsl r1, r3, #0x1\n" + " add r1, r1, r0\n" + " ldrb r2, [r5]\n" + " lsl r0, r2, #0x1\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x4\n" + " add r1, r1, r0\n" + " mov r0, r8\n" + " add r4, r1, r0\n" + " mov r0, #0x0\n" + " ldsh r1, [r4, r0]\n" + " ldr r5, ._687 + 28\n" + " lsl r0, r3, #0x2\n" + " add r0, r0, r3\n" + " lsl r2, r0, #0x1\n" + " add r0, r5, #6\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " cmp r1, r0\n" + " ble ._684 @cond_branch\n" + " add r0, r5, #0\n" + " add r0, r0, #0x8\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " strh r0, [r4]\n" + "._684:\n" + " bl debug_sub_8012294\n" + "._683:\n" + " ldr r0, ._687 + 8\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._685 @cond_branch\n" + " ldr r6, ._687 + 20\n" + " ldr r5, ._687 + 16\n" + " ldrb r4, [r5]\n" + " lsl r4, r4, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x4358\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldr r2, ._687 + 24\n" + " ldrb r1, [r2]\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x4\n" + " add r4, r4, r0\n" + " add r4, r4, r6\n" + " ldrh r0, [r4]\n" + " sub r0, r0, #0xa\n" + " strh r0, [r4]\n" + " mov sl, r5\n" + " mov r8, r6\n" + " add r7, r2, #0\n" + " ldr r6, ._687 + 28\n" + " b ._686\n" + "._688:\n" + " .align 2, 0\n" + "._687:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gMain\n" + " .word debug_sub_8010CAC+1\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_02023A14+0xde\n" + " .word gUnknown_Debug_03004360\n" + " .word UnkDebug0+0x1ac\n" + "._689:\n" + " add r0, r6, #6\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " ldrh r1, [r4]\n" + " add r0, r0, r1\n" + " strh r0, [r4]\n" + "._686:\n" + " mov r0, sl\n" + " ldrb r5, [r0]\n" + " lsl r4, r5, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x4358\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldrb r1, [r7]\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x4\n" + " add r4, r4, r0\n" + " add r4, r4, r8\n" + " mov r0, #0x0\n" + " ldsh r1, [r4, r0]\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r2, r0, #0x1\n" + " add r0, r6, #0\n" + " add r0, r0, #0x8\n" + " add r0, r2, r0\n" + " ldrh r0, [r0]\n" + " cmp r1, r0\n" + " blt ._689 @cond_branch\n" + " bl debug_sub_8012294\n" + "._685:\n" + " ldr r0, ._692\n" + " ldrh r1, [r0, #0x30]\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._690 @cond_branch\n" + " ldr r6, ._692 + 4\n" + " ldr r5, ._692 + 8\n" + " ldrb r4, [r5]\n" + " lsl r4, r4, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x4358\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldr r2, ._692 + 12\n" + " ldrb r1, [r2]\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x4\n" + " add r4, r4, r0\n" + " add r4, r4, r6\n" + " ldrh r0, [r4]\n" + " add r0, r0, #0xa\n" + " strh r0, [r4]\n" + " mov sl, r5\n" + " mov r8, r6\n" + " add r7, r2, #0\n" + " ldr r6, ._692 + 16\n" + " b ._691\n" + "._693:\n" + " .align 2, 0\n" + "._692:\n" + " .word gMain\n" + " .word gUnknown_02023A14+0xde\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_Debug_03004360\n" + " .word UnkDebug0+0x1ac\n" + "._694:\n" + " ldrh r0, [r4]\n" + " sub r0, r0, r1\n" + " strh r0, [r4]\n" + "._691:\n" + " mov r1, sl\n" + " ldrb r5, [r1]\n" + " lsl r4, r5, #0x1\n" + " mov r0, r9\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x4358\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x15\n" + " add r4, r4, r0\n" + " ldrb r1, [r7]\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x4\n" + " add r4, r4, r0\n" + " add r4, r4, r8\n" + " mov r0, #0x0\n" + " ldsh r2, [r4, r0]\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x1\n" + " add r1, r6, #6\n" + " add r0, r0, r1\n" + " ldrh r1, [r0]\n" + " cmp r2, r1\n" + " bgt ._694 @cond_branch\n" + " bl debug_sub_8012294\n" + "._690:\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_801174C() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xffffffe8\n" + " mov r0, #0x0\n" + " mov r9, r0\n" + " ldr r1, ._704\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " bl Random\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x10\n" + " lsr r4, r4, #0x10\n" + " mov r0, #0x3\n" + " and r4, r4, r0\n" + " lsl r4, r4, #0x18\n" + " lsr r6, r4, #0x18\n" + " ldr r5, ._704 + 4\n" + " lsl r1, r6, #0x1\n" + " add r1, r1, r6\n" + " lsl r1, r1, #0x1\n" + " ldr r0, ._704 + 8\n" + " add r1, r1, r0\n" + " add r0, r5, #0\n" + " bl StringCopy\n" + " lsr r4, r4, #0x19\n" + " strb r4, [r5, #0x8]\n" + " bl ZeroPlayerPartyMons\n" + " bl ZeroEnemyPartyMons\n" + " ldr r0, ._704 + 12\n" + " mov r1, #0x3c\n" + " ldsh r7, [r0, r1]\n" + " mov r2, r9\n" + " str r2, [sp, #0xc]\n" + " cmp r7, #0x9\n" + " ble ._695 @cond_branch\n" + " mov r0, #0x0\n" + "._696:\n" + " sub r7, r7, #0xa\n" + " add r0, r0, #0x1\n" + " cmp r7, #0x9\n" + " bgt ._696 @cond_branch\n" + " str r0, [sp, #0xc]\n" + "._695:\n" + " ldr r2, ._704 + 16\n" + " ldr r1, ._704 + 20\n" + " sub r0, r7, #1\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r1\n" + " ldrh r3, [r0]\n" + " strh r3, [r2]\n" + " ldr r1, ._704 + 24\n" + " mov r0, #0x8\n" + " strb r0, [r1]\n" + " ldr r1, ._704 + 28\n" + " add r0, sp, #0xc\n" + " ldrb r0, [r0]\n" + " strb r0, [r1]\n" + " mov r0, #0x80\n" + " and r0, r0, r3\n" + " cmp r0, #0\n" + " beq ._697 @cond_branch\n" + " bl EnterSafariMode\n" + "._697:\n" + " ldr r5, ._704 + 12\n" + " ldrh r0, [r5, #0x3c]\n" + " sub r0, r0, #0x2\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " cmp r0, #0x2\n" + " bhi ._698 @cond_branch\n" + " ldr r4, ._704 + 32\n" + " bl Random\n" + " mov r1, #0x7\n" + " and r1, r1, r0\n" + " add r1, r1, #0x1\n" + " strh r1, [r4]\n" + "._698:\n" + " ldr r1, ._704 + 36\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + " mov r7, #0x0\n" + "._745:\n" + " lsl r0, r7, #0x1\n" + " ldr r3, ._704 + 12\n" + " add r1, r0, r3\n" + " mov r2, #0x0\n" + " ldsh r1, [r1, r2]\n" + " add r2, r3, #0\n" + " mov r8, r0\n" + " add r3, r7, #5\n" + " mov sl, r3\n" + " cmp r1, #0\n" + " beq ._699 @cond_branch\n" + " add r0, r7, #4\n" + " lsl r0, r0, #0x1\n" + " add r1, r2, #0\n" + " add r0, r0, r1\n" + " mov r3, #0x0\n" + " ldsh r0, [r0, r3]\n" + " cmp r0, #0x1\n" + " beq ._707 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._701 @cond_branch\n" + " cmp r0, #0\n" + " beq ._706 @cond_branch\n" + " b ._708\n" + "._705:\n" + " .align 2, 0\n" + "._704:\n" + " .word gUnknown_020297ED\n" + " .word gSaveBlock2\n" + " .word UnkDebug0+0x279\n" + " .word gUnknown_02023A14+0x52\n" + " .word gBattleTypeFlags\n" + " .word UnkDebug0+0x1e0\n" + " .word gUnknown_02023A14+0x50\n" + " .word gBattleTerrain\n" + " .word gTrainerBattleOpponent\n" + " .word gPlayerPartyCount\n" + "._701:\n" + " cmp r0, #0x2\n" + " beq ._706 @cond_branch\n" + " cmp r0, #0x3\n" + " beq ._707 @cond_branch\n" + " b ._708\n" + "._706:\n" + " mov r6, #0x0\n" + " b ._710\n" + "._707:\n" + " mov r6, #0xfe\n" + " b ._710\n" + "._708:\n" + " mov r6, #0xff\n" + "._710:\n" + " mov r1, r8\n" + " add r0, r1, r2\n" + " mov r3, #0x0\n" + " ldsh r0, [r0, r3]\n" + " add r1, r7, #5\n" + " mov sl, r1\n" + " cmp r0, #0xc9\n" + " bne ._712 @cond_branch\n" + " cmp r1, #0x1d\n" + " bgt ._712 @cond_branch\n" + " add r0, r7, #7\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r2\n" + " ldrb r0, [r0]\n" + " mov r9, r0\n" + " b ._713\n" + "._712:\n" + " mov r2, #0x0\n" + " mov r9, r2\n" + "._713:\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x3d30\n" + " mov r3, #0x64\n" + " mul r0, r0, r3\n" + " ldr r1, ._719\n" + " add r0, r0, r1\n" + " ldr r1, ._719 + 4\n" + " add r1, r1, r8\n" + " ldrh r1, [r1]\n" + " add r2, r7, #1\n" + " lsl r2, r2, #0x1\n" + " ldr r3, ._719 + 4\n" + " add r2, r2, r3\n" + " ldrb r2, [r2]\n" + " str r6, [sp]\n" + " mov r3, #0x0\n" + " str r3, [sp, #0x4]\n" + " mov r3, r9\n" + " str r3, [sp, #0x8]\n" + " mov r3, #0x0\n" + " bl CreateMonWithGenderNatureLetter\n" + "._699:\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x3d30\n" + " mov r2, #0x64\n" + " add r1, r0, #0\n" + " mul r1, r1, r2\n" + " ldr r0, ._719\n" + " add r5, r1, r0\n" + " ldr r4, ._719 + 8\n" + " mov r3, r8\n" + " add r6, r3, r4\n" + " add r0, r5, #0\n" + " mov r1, #0xc\n" + " add r2, r6, #0\n" + " bl SetMonData\n" + " sub r4, r4, #0x4\n" + " add r1, r7, #2\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r4\n" + " ldrh r0, [r0]\n" + " sub r0, r0, #0x1\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " str r1, [sp, #0x10]\n" + " cmp r0, #0xb\n" + " bhi ._714 @cond_branch\n" + " add r0, r5, #0\n" + " mov r1, #0x26\n" + " add r2, r6, #0\n" + " bl SetMonData\n" + "._714:\n" + " add r1, r7, #3\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r4\n" + " mov r3, #0x0\n" + " ldsh r2, [r0, r3]\n" + " str r1, [sp, #0x14]\n" + " cmp r2, #0\n" + " beq ._716 @cond_branch\n" + " cmp r2, #0x3\n" + " beq ._716 @cond_branch\n" + " cmp r2, #0x2\n" + " bgt ._717 @cond_branch\n" + " mov r1, #0x0\n" + " ldsh r0, [r0, r1]\n" + " sub r0, r0, #0x1\n" + " b ._718\n" + "._720:\n" + " .align 2, 0\n" + "._719:\n" + " .word gEnemyParty\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_02023A14+0x56\n" + "._717:\n" + " mov r2, #0x0\n" + " ldsh r0, [r0, r2]\n" + " sub r0, r0, #0x4\n" + "._718:\n" + " str r0, [sp, #0xc]\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x3d30\n" + " mov r3, #0x64\n" + " mul r0, r0, r3\n" + " ldr r1, ._726\n" + " add r0, r0, r1\n" + " mov r1, #0x2e\n" + " add r2, sp, #0xc\n" + " bl SetMonData\n" + "._716:\n" + " ldr r1, ._726 + 4\n" + " add r1, r1, #0x46\n" + " mov r2, r8\n" + " add r0, r2, r1\n" + " mov r3, #0x0\n" + " ldsh r0, [r0, r3]\n" + " ldr r2, ._726 + 4\n" + " cmp r0, #0\n" + " beq ._721 @cond_branch\n" + " add r0, r7, #4\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r1\n" + " mov r1, #0x0\n" + " ldsh r0, [r0, r1]\n" + " cmp r0, #0x1\n" + " beq ._729 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._723 @cond_branch\n" + " cmp r0, #0\n" + " beq ._728 @cond_branch\n" + " b ._730\n" + "._727:\n" + " .align 2, 0\n" + "._726:\n" + " .word gEnemyParty\n" + " .word gUnknown_02023A14+0x52\n" + "._723:\n" + " cmp r0, #0x2\n" + " beq ._728 @cond_branch\n" + " cmp r0, #0x3\n" + " beq ._729 @cond_branch\n" + " b ._730\n" + "._728:\n" + " mov r6, #0x0\n" + " b ._732\n" + "._729:\n" + " mov r6, #0xfe\n" + " b ._732\n" + "._730:\n" + " mov r6, #0xff\n" + "._732:\n" + " add r1, r2, #0\n" + " add r1, r1, #0x46\n" + " mov r2, r8\n" + " add r0, r2, r1\n" + " mov r3, #0x0\n" + " ldsh r0, [r0, r3]\n" + " cmp r0, #0xc9\n" + " bne ._734 @cond_branch\n" + " mov r0, sl\n" + " cmp r0, #0x1d\n" + " bgt ._734 @cond_branch\n" + " add r0, r7, #7\n" + " lsl r0, r0, #0x1\n" + " add r0, r0, r1\n" + " ldrb r0, [r0]\n" + " mov r9, r0\n" + " b ._735\n" + "._734:\n" + " mov r1, #0x0\n" + " mov r9, r1\n" + "._735:\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x3d30\n" + " mov r2, #0x64\n" + " mul r0, r0, r2\n" + " ldr r1, ._741\n" + " add r0, r0, r1\n" + " ldr r1, ._741 + 4\n" + " add r1, r1, r8\n" + " ldrh r1, [r1]\n" + " add r2, r7, #1\n" + " lsl r2, r2, #0x1\n" + " ldr r3, ._741 + 4\n" + " add r2, r2, r3\n" + " ldrb r2, [r2]\n" + " str r6, [sp]\n" + " mov r3, #0x0\n" + " str r3, [sp, #0x4]\n" + " mov r3, r9\n" + " str r3, [sp, #0x8]\n" + " mov r3, #0x0\n" + " bl CreateMonWithGenderNatureLetter\n" + " ldr r1, ._741 + 8\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + "._721:\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x3d30\n" + " mov r2, #0x64\n" + " add r1, r0, #0\n" + " mul r1, r1, r2\n" + " ldr r0, ._741\n" + " add r4, r1, r0\n" + " ldr r0, ._741 + 12\n" + " mov r3, r8\n" + " add r5, r3, r0\n" + " add r0, r4, #0\n" + " mov r1, #0xc\n" + " add r2, r5, #0\n" + " bl SetMonData\n" + " ldr r1, [sp, #0x10]\n" + " lsl r0, r1, #0x1\n" + " ldr r2, ._741 + 16\n" + " add r0, r0, r2\n" + " ldrh r0, [r0]\n" + " sub r0, r0, #0x1\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " cmp r0, #0xb\n" + " bhi ._736 @cond_branch\n" + " add r0, r4, #0\n" + " mov r1, #0x26\n" + " add r2, r5, #0\n" + " bl SetMonData\n" + "._736:\n" + " ldr r3, [sp, #0x14]\n" + " lsl r0, r3, #0x1\n" + " ldr r1, ._741 + 4\n" + " add r0, r0, r1\n" + " mov r2, #0x0\n" + " ldsh r1, [r0, r2]\n" + " cmp r1, #0\n" + " beq ._738 @cond_branch\n" + " cmp r1, #0x3\n" + " beq ._738 @cond_branch\n" + " cmp r1, #0x2\n" + " bgt ._739 @cond_branch\n" + " add r0, r1, #0\n" + " sub r0, r0, #0x1\n" + " b ._740\n" + "._742:\n" + " .align 2, 0\n" + "._741:\n" + " .word gPlayerParty\n" + " .word gUnknown_02023A14+0x98\n" + " .word gPlayerPartyCount\n" + " .word gUnknown_02023A14+0x9c\n" + " .word gUnknown_02023A14+0x52\n" + "._739:\n" + " mov r1, #0x0\n" + " ldsh r0, [r0, r1]\n" + " sub r0, r0, #0x4\n" + "._740:\n" + " str r0, [sp, #0xc]\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x3d30\n" + " mov r2, #0x64\n" + " mul r0, r0, r2\n" + " ldr r1, ._750\n" + " add r0, r0, r1\n" + " mov r1, #0x2e\n" + " add r2, sp, #0xc\n" + " bl SetMonData\n" + "._738:\n" + " ldr r3, [sp, #0x14]\n" + " lsl r0, r3, #0x1\n" + " ldr r1, ._750 + 4\n" + " add r0, r0, r1\n" + " mov r2, #0x0\n" + " ldsh r0, [r0, r2]\n" + " cmp r0, #0x2\n" + " ble ._743 @cond_branch\n" + " add r0, r7, #0\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x3d30\n" + " mov r3, #0x64\n" + " mul r0, r0, r3\n" + " ldr r1, ._750\n" + " add r0, r0, r1\n" + " mov r1, #0x7\n" + " ldr r2, ._750 + 8\n" + " bl SetMonData\n" + " ldr r2, ._750 + 12\n" + " ldrb r0, [r2]\n" + " mov r1, #0x40\n" + " orr r0, r0, r1\n" + " strb r0, [r2]\n" + "._743:\n" + " mov r7, sl\n" + " cmp r7, #0x1d\n" + " bgt ._744 @cond_branch\n" + " b ._745\n" + "._744:\n" + " mov r0, #0x0\n" + " str r0, [sp, #0xc]\n" + " mov r0, #0x64\n" + " mov r8, r0\n" + " ldr r1, ._750 + 16\n" + " mov r9, r1\n" + " ldr r2, ._750\n" + " mov sl, r2\n" + "._747:\n" + " mov r7, #0x0\n" + "._746:\n" + " ldr r2, [sp, #0xc]\n" + " mov r0, r8\n" + " mul r0, r0, r2\n" + " ldr r3, ._750 + 20\n" + " add r0, r0, r3\n" + " add r5, r7, #0\n" + " add r5, r5, #0xd\n" + " lsl r2, r2, #0x3\n" + " lsl r4, r7, #0x1\n" + " mov r3, r9\n" + " add r1, r4, r3\n" + " add r2, r2, r1\n" + " add r1, r5, #0\n" + " bl SetMonData\n" + " ldr r1, [sp, #0xc]\n" + " mov r0, r8\n" + " mul r0, r0, r1\n" + " ldr r2, ._750 + 20\n" + " add r0, r0, r2\n" + " add r6, r7, #0\n" + " add r6, r6, #0x11\n" + " lsl r1, r1, #0x3\n" + " add r1, r4, r1\n" + " add r1, r1, r9\n" + " mov r3, #0x0\n" + " ldsh r1, [r1, r3]\n" + " lsl r2, r1, #0x1\n" + " add r2, r2, r1\n" + " lsl r2, r2, #0x2\n" + " ldr r1, ._750 + 24\n" + " add r2, r2, r1\n" + " add r1, r6, #0\n" + " bl SetMonData\n" + " ldr r2, [sp, #0xc]\n" + " mov r0, r8\n" + " mul r0, r0, r2\n" + " add r0, r0, sl\n" + " lsl r2, r2, #0x3\n" + " ldr r3, ._750 + 28\n" + " add r1, r4, r3\n" + " add r2, r2, r1\n" + " add r1, r5, #0\n" + " bl SetMonData\n" + " ldr r1, [sp, #0xc]\n" + " mov r0, r8\n" + " mul r0, r0, r1\n" + " add r0, r0, sl\n" + " lsl r1, r1, #0x3\n" + " add r4, r4, r1\n" + " ldr r1, ._750 + 28\n" + " add r4, r4, r1\n" + " mov r2, #0x0\n" + " ldsh r1, [r4, r2]\n" + " lsl r2, r1, #0x1\n" + " add r2, r2, r1\n" + " lsl r2, r2, #0x2\n" + " ldr r3, ._750 + 24\n" + " add r2, r2, r3\n" + " add r1, r6, #0\n" + " bl SetMonData\n" + " add r7, r7, #0x1\n" + " cmp r7, #0x3\n" + " ble ._746 @cond_branch\n" + " ldr r0, [sp, #0xc]\n" + " add r0, r0, #0x1\n" + " str r0, [sp, #0xc]\n" + " cmp r0, #0x5\n" + " ble ._747 @cond_branch\n" + " ldr r3, ._750 + 32\n" + " add r4, r3, #0\n" + " add r4, r4, #0x44\n" + " ldrh r1, [r4]\n" + " mov r2, #0x0\n" + " ldsh r0, [r4, r2]\n" + " cmp r0, #0x8\n" + " bne ._748 @cond_branch\n" + " ldr r0, ._750 + 12\n" + " ldrb r1, [r0]\n" + " mov r2, #0x80\n" + " b ._753\n" + "._751:\n" + " .align 2, 0\n" + "._750:\n" + " .word gPlayerParty\n" + " .word gUnknown_02023A14+0x98\n" + " .word UnkDebug0+0x291\n" + " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_02023A14+0xde\n" + " .word gEnemyParty\n" + " .word gBattleMoves+0x4\n" + " .word gUnknown_02023A14+0x10e\n" + " .word gUnknown_02023A14+0x52\n" + "._748:\n" + " cmp r0, #0x7\n" + " bne ._752 @cond_branch\n" + " ldr r0, ._754\n" + " ldrb r1, [r0]\n" + " mov r2, #0x20\n" + " b ._753\n" + "._755:\n" + " .align 2, 0\n" + "._754:\n" + " .word gUnknown_02023A14+0x50\n" + "._752:\n" + " cmp r0, #0x6\n" + " bne ._756 @cond_branch\n" + " ldr r2, ._759\n" + " ldrb r0, [r2]\n" + " mov r1, #0x10\n" + " orr r0, r0, r1\n" + " strb r0, [r2]\n" + " ldrh r1, [r3, #0x4]\n" + " mov r2, #0x4\n" + " ldsh r0, [r3, r2]\n" + " cmp r0, #0x5\n" + " ble ._757 @cond_branch\n" + " ldr r0, ._759 + 4\n" + " sub r1, r1, #0x2\n" + " ldr r3, ._759 + 8\n" + " add r0, r0, r3\n" + " b ._761\n" + "._760:\n" + " .align 2, 0\n" + "._759:\n" + " .word gUnknown_02023A14+0x50\n" + " .word +0x2000000\n" + " .word 0x160a3\n" + "._757:\n" + " ldr r0, ._762\n" + " ldr r2, ._762 + 4\n" + " add r0, r0, r2\n" + " b ._761\n" + "._763:\n" + " .align 2, 0\n" + "._762:\n" + " .word +0x2000000\n" + " .word 0x160a3\n" + "._756:\n" + " cmp r0, #0x5\n" + " bne ._764 @cond_branch\n" + " ldr r0, ._766\n" + " ldrb r1, [r0]\n" + " mov r2, #0x21\n" + "._753:\n" + " orr r1, r1, r2\n" + "._761:\n" + " strb r1, [r0]\n" + " bl sub_80408BC\n" + " b ._770\n" + "._767:\n" + " .align 2, 0\n" + "._766:\n" + " .word gUnknown_02023A14+0x50\n" + "._764:\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._768 @cond_branch\n" + " bl sub_80408BC\n" + "._768:\n" + " ldrh r3, [r4]\n" + " mov r0, #0x2\n" + " and r0, r0, r3\n" + " cmp r0, #0\n" + " beq ._769 @cond_branch\n" + " ldr r0, ._772\n" + " ldrb r1, [r0]\n" + " mov r2, #0x4\n" + " orr r1, r1, r2\n" + " strb r1, [r0]\n" + "._769:\n" + " mov r0, #0x4\n" + " and r0, r0, r3\n" + " cmp r0, #0\n" + " beq ._770 @cond_branch\n" + " ldr r0, ._772\n" + " ldrb r1, [r0]\n" + " mov r2, #0x6\n" + " orr r1, r1, r2\n" + " strb r1, [r0]\n" + "._770:\n" + " ldr r0, ._772 + 4\n" + " ldr r1, ._772 + 8\n" + " str r1, [r0, #0x8]\n" + " ldr r0, ._772 + 12\n" + " bl SetMainCallback2\n" + " bl ClearBag\n" + " mov r0, #0x1\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x2\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x3\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x4\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x5\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x6\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x7\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x8\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x9\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0xa\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0xb\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0xc\n" + " mov r1, #0xa\n" + " bl AddBagItem\n" + " mov r0, #0x13\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x14\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x19\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x22\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x23\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x25\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x49\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x4a\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x4b\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x4c\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x4d\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x4e\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " mov r0, #0x50\n" + " mov r1, #0x63\n" + " bl AddBagItem\n" + " ldr r4, ._772 + 16\n" + " mov r7, #0xe\n" + "._771:\n" + " add r0, r4, #0\n" + " bl sub_810CA34\n" + " add r4, r4, #0x8\n" + " sub r7, r7, #0x1\n" + " cmp r7, #0\n" + " bge ._771 @cond_branch\n" + " add sp, sp, #0x18\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._773:\n" + " .align 2, 0\n" + "._772:\n" + " .word gUnknown_02023A14+0x50\n" + " .word gMain\n" + " .word debug_sub_80108B8+1\n" + " .word unref_sub_800D684+1\n" + " .word UnkDebug0+0x1f4\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8011D40() +{ + asm( + " push {lr}\n" + " ldr r1, ._774\n" + " ldr r0, ._774 + 4\n" + " str r0, [r1]\n" + " ldr r0, ._774 + 8\n" + " str r0, [r1, #0x4]\n" + " ldr r0, ._774 + 12\n" + " str r0, [r1, #0x8]\n" + " ldr r0, [r1, #0x8]\n" + " sub r1, r1, #0xc4\n" + " ldr r0, ._774 + 16\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._774 + 20\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._774 + 24\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._774 + 28\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._774 + 32\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._774 + 36\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._774 + 40\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._774 + 44\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " bl LoadOam\n" + " bl ProcessSpriteCopyRequests\n" + " pop {r0}\n" + " bx r0\n" + "._775:\n" + " .align 2, 0\n" + "._774:\n" + " .word 0x40000d4\n" + " .word +0x2000000\n" + " .word 0x6004000\n" + " .word 0x80000800\n" + " .word gUnknown_030042A4\n" + " .word gUnknown_030042A0\n" + " .word gUnknown_030042C0\n" + " .word gUnknown_030041B4\n" + " .word gUnknown_03004288\n" + " .word gUnknown_03004280\n" + " .word gUnknown_030041B0\n" + " .word gUnknown_030041B8\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_nullsub_45() +{ + asm( + " bx lr\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8011DD4() +{ + asm( + " push {lr}\n" + " ldr r1, ._776\n" + " ldr r2, ._776 + 4\n" + " add r0, r2, #0\n" + " strh r0, [r1]\n" + " add r1, r1, #0x8\n" + " ldr r0, ._776 + 8\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._776 + 12\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._776 + 16\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._776 + 20\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._776 + 24\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._776 + 28\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._776 + 32\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " add r1, r1, #0x2\n" + " ldr r0, ._776 + 36\n" + " ldrh r0, [r0]\n" + " strh r0, [r1]\n" + " bl LoadOam\n" + " bl ProcessSpriteCopyRequests\n" + " bl TransferPlttBuffer\n" + " bl sub_8089668\n" + " pop {r0}\n" + " bx r0\n" + "._777:\n" + " .align 2, 0\n" + "._776:\n" + " .word 0x4000008\n" + " .word 0x9803\n" + " .word gUnknown_030042A4\n" + " .word gUnknown_030042A0\n" + " .word gUnknown_030042C0\n" + " .word gUnknown_030041B4\n" + " .word gUnknown_03004288\n" + " .word gUnknown_03004280\n" + " .word gUnknown_030041B0\n" + " .word gUnknown_030041B8\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8011E5C() +{ + asm( + " push {r4, lr}\n" + " mov r4, #0x0\n" + "._778:\n" + " lsl r0, r4, #0x18\n" + " lsr r0, r0, #0x18\n" + " bl debug_sub_8011EA0\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x1e\n" + " ble ._778 @cond_branch\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8011E74() +{ + asm( + " push {r4, r5, lr}\n" + " ldr r0, ._780\n" + " ldrb r5, [r0]\n" + " mov r1, #0x0\n" + " strb r1, [r0]\n" + " add r4, r0, #0\n" + "._779:\n" + " bl debug_sub_8012294\n" + " ldrb r0, [r4]\n" + " add r0, r0, #0x1\n" + " strb r0, [r4]\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x3\n" + " bls ._779 @cond_branch\n" + " ldr r0, ._780\n" + " strb r5, [r0]\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._781:\n" + " .align 2, 0\n" + "._780:\n" + " .word gUnknown_Debug_030043A8\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8011EA0() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xfffffff4\n" + " lsl r0, r0, #0x18\n" + " lsr r7, r0, #0x18\n" + " cmp r7, #0x22\n" + " bls ._782 @cond_branch\n" + " b ._815\n" + "._782:\n" + " lsl r0, r7, #0x2\n" + " ldr r1, ._785\n" + " add r1, r0, r1\n" + " ldr r1, [r1]\n" + " str r0, [sp, #0x8]\n" + " mov pc, r1\n" + "._786:\n" + " .align 2, 0\n" + "._785:\n" + " .word ._784\n" + "._784:\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._812\n" + " .word ._817\n" + " .word ._814\n" + " .word ._815\n" + " .word ._816\n" + " .word ._817\n" + " .word ._848\n" + " .word ._848\n" + " .word ._848\n" + " .word ._848\n" + "._812:\n" + " mov r0, #0x0\n" + " mov r1, #0x14\n" + " bl debug_sub_8010A7C\n" + " ldr r6, ._823\n" + " ldr r2, ._823 + 4\n" + " ldr r0, [sp, #0x8]\n" + " add r1, r0, r7\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, r2\n" + " ldrh r0, [r0]\n" + " str r0, [sp, #0x4]\n" + " add r0, r2, #2\n" + " add r0, r1, r0\n" + " ldrb r0, [r0]\n" + " mov r8, r0\n" + " add r2, r2, #0x4\n" + " add r1, r1, r2\n" + " ldrb r1, [r1]\n" + " mov r9, r1\n" + " str r1, [sp]\n" + " ldr r0, ._823 + 8\n" + " add r1, r6, #0\n" + " ldr r2, [sp, #0x4]\n" + " mov r3, r8\n" + " bl InitWindow\n" + " ldr r0, ._823 + 8\n" + " bl sub_8002F44\n" + " ldr r1, ._823 + 12\n" + " mov sl, r1\n" + " lsl r4, r7, #0x1\n" + " ldr r5, ._823 + 16\n" + " ldrb r0, [r5]\n" + " mov r7, #0x46\n" + " mul r0, r0, r7\n" + " add r0, r4, r0\n" + " add r0, r0, sl\n" + " mov r2, #0x0\n" + " ldsh r1, [r0, r2]\n" + " add r0, r6, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r2, #0xd3\n" + " lsl r2, r2, #0x1\n" + " ldrb r3, [r5]\n" + " lsl r3, r3, #0x5\n" + " add r3, r3, #0x19\n" + " lsl r3, r3, #0x18\n" + " lsr r3, r3, #0x18\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " ldr r0, ._823 + 8\n" + " add r1, r6, #0\n" + " bl InitWindow\n" + " ldr r0, ._823 + 8\n" + " bl sub_8002F44\n" + " mov r0, #0xff\n" + " strb r0, [r6]\n" + " ldrb r0, [r5]\n" + " mul r0, r0, r7\n" + " add r4, r4, r0\n" + " add r4, r4, sl\n" + " mov r0, #0x0\n" + " ldsh r1, [r4, r0]\n" + " mov r0, #0xb\n" + " mul r1, r1, r0\n" + " ldr r0, ._823 + 20\n" + " add r1, r1, r0\n" + " add r0, r6, #0\n" + " bl StringAppend\n" + " mov r1, r9\n" + " str r1, [sp]\n" + " ldr r0, ._823 + 8\n" + " add r1, r6, #0\n" + " ldr r2, [sp, #0x4]\n" + " mov r3, r8\n" + " bl InitWindow\n" + " ldr r0, ._823 + 8\n" + " bl sub_8002F44\n" + " b ._848\n" + "._824:\n" + " .align 2, 0\n" + "._823:\n" + " .word gBattleTextBuff1\n" + " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_03004370\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_03004360\n" + " .word gSpeciesNames\n" + "._817:\n" + " ldr r6, ._826\n" + " ldr r3, ._826 + 4\n" + " lsl r1, r7, #0x1\n" + " ldr r0, ._826 + 8\n" + " ldrb r2, [r0]\n" + " mov r0, #0x46\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r3\n" + " mov r2, #0x0\n" + " ldsh r1, [r1, r2]\n" + " add r0, r6, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " b ._825\n" + "._827:\n" + " .align 2, 0\n" + "._826:\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_03004360\n" + "._814:\n" + " mov r0, #0x0\n" + " mov r1, #0x18\n" + " bl debug_sub_8010A7C\n" + " ldr r6, ._830\n" + " ldr r1, ._830 + 4\n" + " mov sl, r1\n" + " ldr r4, ._830 + 8\n" + " ldr r2, [sp, #0x8]\n" + " add r1, r2, r7\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, r4\n" + " ldrh r2, [r0]\n" + " add r0, r4, #2\n" + " add r0, r1, r0\n" + " ldrb r3, [r0]\n" + " add r4, r4, #0x4\n" + " add r1, r1, r4\n" + " ldrb r0, [r1]\n" + " str r0, [sp]\n" + " add r0, r6, #0\n" + " mov r1, sl\n" + " bl InitWindow\n" + " add r0, r6, #0\n" + " bl sub_8002F44\n" + " lsl r4, r7, #0x1\n" + " ldr r5, ._830 + 12\n" + " ldrb r0, [r5]\n" + " mov r1, #0x46\n" + " mul r0, r0, r1\n" + " add r0, r4, r0\n" + " ldr r2, ._830 + 16\n" + " add r0, r0, r2\n" + " mov r2, #0x0\n" + " ldsh r1, [r0, r2]\n" + " mov r0, sl\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r2, #0xd3\n" + " lsl r2, r2, #0x1\n" + " ldrb r3, [r5]\n" + " lsl r3, r3, #0x5\n" + " add r3, r3, #0x19\n" + " lsl r3, r3, #0x18\n" + " lsr r3, r3, #0x18\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " add r0, r6, #0\n" + " mov r1, sl\n" + " bl InitWindow\n" + " add r0, r6, #0\n" + " bl sub_8002F44\n" + " mov r0, #0xff\n" + " mov r1, sl\n" + " strb r0, [r1]\n" + " ldrb r0, [r5]\n" + " mov r2, #0x46\n" + " mul r0, r0, r2\n" + " add r4, r4, r0\n" + " ldr r0, ._830 + 16\n" + " add r4, r4, r0\n" + " mov r1, #0x0\n" + " ldsh r0, [r4, r1]\n" + " cmp r0, #0\n" + " beq ._828 @cond_branch\n" + " ldrh r0, [r4]\n" + " bl ItemId_GetItem\n" + " add r1, r0, #0\n" + " mov r0, sl\n" + " bl StringAppend\n" + " b ._829\n" + "._831:\n" + " .align 2, 0\n" + "._830:\n" + " .word gUnknown_Debug_03004370\n" + " .word gBattleTextBuff1\n" + " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_02023A14+0x52\n" + "._828:\n" + " ldr r1, ._833\n" + " mov r0, sl\n" + " bl StringAppend\n" + "._829:\n" + " ldr r6, ._833 + 4\n" + " ldr r1, ._833 + 8\n" + " ldr r5, ._833 + 12\n" + " ldr r2, [sp, #0x8]\n" + " add r4, r2, r7\n" + " lsl r4, r4, #0x1\n" + " add r0, r4, r5\n" + " ldrh r2, [r0]\n" + " add r0, r5, #2\n" + " add r0, r4, r0\n" + " ldrb r3, [r0]\n" + " add r5, r5, #0x4\n" + " add r4, r4, r5\n" + " ldrb r0, [r4]\n" + " str r0, [sp]\n" + " add r0, r6, #0\n" + " bl InitWindow\n" + " add r0, r6, #0\n" + " bl sub_8002F44\n" + " b ._848\n" + "._834:\n" + " .align 2, 0\n" + "._833:\n" + " .word UnkDebug0+0x26c\n" + " .word gUnknown_Debug_03004370\n" + " .word gBattleTextBuff1\n" + " .word UnkDebug0+0x6c\n" + "._816:\n" + " mov r0, #0x0\n" + " mov r1, #0x4\n" + " bl debug_sub_8010A7C\n" + " ldr r5, ._839\n" + " ldr r6, ._839 + 4\n" + " ldr r4, ._839 + 8\n" + " ldr r0, [sp, #0x8]\n" + " add r1, r0, r7\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, r4\n" + " ldrh r2, [r0]\n" + " add r0, r4, #2\n" + " add r0, r1, r0\n" + " ldrb r3, [r0]\n" + " add r4, r4, #0x4\n" + " add r1, r1, r4\n" + " ldrb r0, [r1]\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl InitWindow\n" + " add r0, r5, #0\n" + " bl sub_8002F44\n" + " mov r4, #0x0\n" + " ldr r3, ._839 + 12\n" + " lsl r1, r7, #0x1\n" + " ldr r0, ._839 + 16\n" + " ldrb r2, [r0]\n" + " mov r0, #0x46\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r3\n" + " mov r2, #0x0\n" + " ldsh r0, [r1, r2]\n" + " cmp r0, #0x1\n" + " beq ._835 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._836 @cond_branch\n" + " cmp r0, #0\n" + " beq ._837 @cond_branch\n" + " b ._843\n" + "._840:\n" + " .align 2, 0\n" + "._839:\n" + " .word gUnknown_Debug_03004370\n" + " .word gBattleTextBuff1\n" + " .word UnkDebug0+0x6c\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_03004360\n" + "._836:\n" + " cmp r0, #0x2\n" + " beq ._841 @cond_branch\n" + " cmp r0, #0x3\n" + " beq ._842 @cond_branch\n" + " b ._843\n" + "._837:\n" + " mov r0, #0xb5\n" + " b ._844\n" + "._835:\n" + " mov r0, #0xb6\n" + "._844:\n" + " strb r0, [r6]\n" + " mov r4, #0x1\n" + " b ._847\n" + "._841:\n" + " mov r0, #0xb5\n" + " b ._846\n" + "._842:\n" + " mov r0, #0xb6\n" + "._846:\n" + " strb r0, [r6]\n" + " strb r0, [r6, #0x1]\n" + " mov r4, #0x2\n" + " b ._847\n" + "._843:\n" + " ldr r2, ._849\n" + " add r1, r4, r2\n" + " mov r0, #0xac\n" + " strb r0, [r1]\n" + " add r4, r4, #0x1\n" + " add r6, r2, #0\n" + "._847:\n" + " add r1, r4, r6\n" + " mov r0, #0xff\n" + " strb r0, [r1]\n" + "._825:\n" + " ldr r5, ._849 + 4\n" + " ldr r4, ._849 + 8\n" + " ldr r0, [sp, #0x8]\n" + " add r1, r0, r7\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, r4\n" + " ldrh r2, [r0]\n" + " add r0, r4, #2\n" + " add r0, r1, r0\n" + " ldrb r3, [r0]\n" + " add r4, r4, #0x4\n" + " add r1, r1, r4\n" + " ldrb r0, [r1]\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl InitWindow\n" + " add r0, r5, #0\n" + " bl sub_8002F44\n" + " b ._848\n" + "._850:\n" + " .align 2, 0\n" + "._849:\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_Debug_03004370\n" + " .word UnkDebug0+0x6c\n" + "._815:\n" + " ldr r6, ._851\n" + " ldr r3, ._851 + 4\n" + " lsl r1, r7, #0x1\n" + " ldr r0, ._851 + 8\n" + " ldrb r2, [r0]\n" + " mov r0, #0x46\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r3\n" + " mov r2, #0x0\n" + " ldsh r1, [r1, r2]\n" + " add r0, r6, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x1\n" + " bl ConvertIntToDecimalStringN\n" + " ldr r5, ._851 + 12\n" + " ldr r4, ._851 + 16\n" + " lsl r1, r7, #0x2\n" + " add r1, r1, r7\n" + " lsl r1, r1, #0x1\n" + " add r0, r1, r4\n" + " ldrh r2, [r0]\n" + " add r0, r4, #2\n" + " add r0, r1, r0\n" + " ldrb r3, [r0]\n" + " add r4, r4, #0x4\n" + " add r1, r1, r4\n" + " ldrb r0, [r1]\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl InitWindow\n" + " add r0, r5, #0\n" + " bl sub_8002F44\n" + "._848:\n" + " add sp, sp, #0xc\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._852:\n" + " .align 2, 0\n" + "._851:\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_Debug_03004370\n" + " .word UnkDebug0+0x6c\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012294() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xfffffffc\n" + " ldr r2, ._854\n" + " ldr r0, ._854 + 4\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " cmp r5, #0x1d\n" + " bhi ._853 @cond_branch\n" + " mov r0, #0x0\n" + " mov r1, #0x18\n" + " bl debug_sub_8010A7C\n" + " ldr r0, ._854 + 8\n" + " mov sl, r0\n" + " ldr r1, ._854 + 12\n" + " mov r9, r1\n" + " ldr r2, ._854 + 16\n" + " mov r8, r2\n" + " ldr r7, ._854 + 20\n" + " ldrb r1, [r7]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x1\n" + " add r1, r0, r2\n" + " ldrh r2, [r1]\n" + " ldr r3, ._854 + 24\n" + " add r1, r0, r3\n" + " ldrb r3, [r1]\n" + " ldr r1, ._854 + 28\n" + " add r0, r0, r1\n" + " ldrb r0, [r0]\n" + " str r0, [sp]\n" + " mov r0, sl\n" + " mov r1, r9\n" + " bl InitWindow\n" + " mov r0, sl\n" + " bl sub_8002F44\n" + " ldrb r4, [r7]\n" + " lsl r4, r4, #0x1\n" + " add r0, r5, #0\n" + " mov r1, #0x5\n" + " bl gScriptFuncs_End+0x4358\n" + " add r5, r0, #0\n" + " lsl r5, r5, #0x18\n" + " lsr r5, r5, #0x15\n" + " add r4, r4, r5\n" + " ldr r6, ._854 + 32\n" + " ldrb r1, [r6]\n" + " lsl r0, r1, #0x1\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x4\n" + " add r4, r4, r0\n" + " ldr r2, ._854 + 36\n" + " add r4, r4, r2\n" + " mov r3, #0x0\n" + " ldsh r1, [r4, r3]\n" + " mov r0, r9\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r2, #0xd3\n" + " lsl r2, r2, #0x1\n" + " ldrb r3, [r6]\n" + " lsl r3, r3, #0x5\n" + " add r3, r3, #0x19\n" + " lsl r3, r3, #0x18\n" + " lsr r3, r3, #0x18\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " mov r0, sl\n" + " mov r1, r9\n" + " bl InitWindow\n" + " mov r0, sl\n" + " bl sub_8002F44\n" + " mov r0, #0xff\n" + " mov r1, r9\n" + " strb r0, [r1]\n" + " ldrb r1, [r7]\n" + " lsl r1, r1, #0x1\n" + " add r1, r1, r5\n" + " ldrb r2, [r6]\n" + " lsl r0, r2, #0x1\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x4\n" + " add r1, r1, r0\n" + " ldr r2, ._854 + 36\n" + " add r1, r1, r2\n" + " mov r3, #0x0\n" + " ldsh r1, [r1, r3]\n" + " mov r0, #0xd\n" + " mul r1, r1, r0\n" + " ldr r0, ._854 + 40\n" + " add r1, r1, r0\n" + " mov r0, r9\n" + " bl StringAppend\n" + " ldrb r1, [r7]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x1\n" + " add r8, r8, r0\n" + " mov r1, r8\n" + " ldrh r2, [r1]\n" + " ldr r3, ._854 + 24\n" + " add r1, r0, r3\n" + " ldrb r3, [r1]\n" + " ldr r1, ._854 + 28\n" + " add r0, r0, r1\n" + " ldrb r0, [r0]\n" + " str r0, [sp]\n" + " mov r0, sl\n" + " mov r1, r9\n" + " bl InitWindow\n" + " mov r0, sl\n" + " bl sub_8002F44\n" + "._853:\n" + " add sp, sp, #0x4\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._855:\n" + " .align 2, 0\n" + "._854:\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004370\n" + " .word gBattleTextBuff1\n" + " .word UnkDebug0+0x1ac\n" + " .word gUnknown_Debug_030043A8\n" + " .word UnkDebug0+0x1ae\n" + " .word UnkDebug0+0x1b0\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_02023A14+0xde\n" + " .word gMoveNames\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80123D8() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xfffffffc\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " cmp r5, #0x1d\n" + " bhi ._856 @cond_branch\n" + " mov r0, #0x0\n" + " mov r1, #0x12\n" + " bl debug_sub_8010A7C\n" + " ldr r4, ._858\n" + " ldr r0, ._858 + 4\n" + " mov r8, r0\n" + " ldr r6, ._858 + 8\n" + " ldrh r1, [r6]\n" + " mov sl, r1\n" + " ldrb r7, [r6, #0x2]\n" + " ldrb r2, [r6, #0x4]\n" + " mov r9, r2\n" + " str r2, [sp]\n" + " add r0, r4, #0\n" + " mov r1, r8\n" + " mov r2, sl\n" + " add r3, r7, #0\n" + " bl InitWindow\n" + " add r0, r4, #0\n" + " bl sub_8002F44\n" + " lsl r5, r5, #0x1\n" + " ldr r1, ._858 + 12\n" + " ldrb r0, [r1]\n" + " mov r2, #0x46\n" + " mul r0, r0, r2\n" + " add r0, r5, r0\n" + " ldr r1, ._858 + 16\n" + " add r0, r0, r1\n" + " mov r2, #0x0\n" + " ldsh r1, [r0, r2]\n" + " lsl r0, r1, #0x3\n" + " sub r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._858 + 20\n" + " add r0, r0, r1\n" + " ldrb r0, [r0, #0x16]\n" + " mov r2, #0xd\n" + " add r1, r0, #0\n" + " mul r1, r1, r2\n" + " ldr r0, ._858 + 24\n" + " add r1, r1, r0\n" + " mov r0, r8\n" + " bl StringCopy\n" + " mov r1, r9\n" + " str r1, [sp]\n" + " add r0, r4, #0\n" + " mov r1, r8\n" + " mov r2, sl\n" + " add r3, r7, #0\n" + " bl InitWindow\n" + " add r0, r4, #0\n" + " bl sub_8002F44\n" + " mov r0, #0x0\n" + " mov r1, #0x12\n" + " bl debug_sub_8010A7C\n" + " ldrh r2, [r6, #0x6]\n" + " mov r9, r2\n" + " ldrb r0, [r6, #0x8]\n" + " mov sl, r0\n" + " ldrb r6, [r6, #0xa]\n" + " str r6, [sp]\n" + " add r0, r4, #0\n" + " mov r1, r8\n" + " mov r3, sl\n" + " bl InitWindow\n" + " add r0, r4, #0\n" + " bl sub_8002F44\n" + " ldr r1, ._858 + 12\n" + " ldrb r0, [r1]\n" + " mov r2, #0x46\n" + " mul r0, r0, r2\n" + " add r5, r5, r0\n" + " ldr r0, ._858 + 16\n" + " add r5, r5, r0\n" + " mov r2, #0x0\n" + " ldsh r1, [r5, r2]\n" + " lsl r0, r1, #0x3\n" + " sub r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._858 + 20\n" + " add r0, r0, r1\n" + " ldrb r0, [r0, #0x17]\n" + " mov r2, #0xd\n" + " add r1, r0, #0\n" + " mul r1, r1, r2\n" + " ldr r0, ._858 + 24\n" + " add r1, r1, r0\n" + " mov r0, r8\n" + " bl StringCopy\n" + " str r6, [sp]\n" + " add r0, r4, #0\n" + " mov r1, r8\n" + " mov r2, r9\n" + " mov r3, sl\n" + " bl InitWindow\n" + " add r0, r4, #0\n" + " bl sub_8002F44\n" + " b ._857\n" + "._859:\n" + " .align 2, 0\n" + "._858:\n" + " .word gUnknown_Debug_03004370\n" + " .word gBattleTextBuff1\n" + " .word UnkDebug0+0x1d4\n" + " .word gUnknown_Debug_03004360\n" + " .word gUnknown_02023A14+0x52\n" + " .word gBaseStats\n" + " .word gAbilityNames\n" + "._856:\n" + " ldr r6, ._860\n" + " ldr r1, ._860 + 4\n" + " add r0, r6, #0\n" + " bl StringCopy\n" + " ldr r5, ._860 + 8\n" + " ldr r4, ._860 + 12\n" + " ldrh r2, [r4]\n" + " ldrb r3, [r4, #0x2]\n" + " ldrb r0, [r4, #0x4]\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl InitWindow\n" + " add r0, r5, #0\n" + " bl sub_8002F44\n" + " ldrh r2, [r4, #0x6]\n" + " ldrb r3, [r4, #0x8]\n" + " ldrb r0, [r4, #0xa]\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r6, #0\n" + " bl InitWindow\n" + " add r0, r5, #0\n" + " bl sub_8002F44\n" + "._857:\n" + " add sp, sp, #0x4\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._861:\n" + " .align 2, 0\n" + "._860:\n" + " .word gBattleTextBuff1\n" + " .word gAbilityNames\n" + " .word gUnknown_Debug_03004370\n" + " .word UnkDebug0+0x1d4\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012540() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add sp, sp, #0xfffffffc\n" + " ldr r5, ._862\n" + " ldr r0, ._862 + 4\n" + " add r0, r0, #0x44\n" + " mov r2, #0x0\n" + " ldsh r1, [r0, r2]\n" + " add r0, r5, #0\n" + " mov r2, #0x0\n" + " mov r3, #0x1\n" + " bl ConvertIntToDecimalStringN\n" + " ldr r4, ._862 + 8\n" + " ldr r1, ._862 + 12\n" + " mov r3, #0x9b\n" + " lsl r3, r3, #0x1\n" + " add r0, r1, r3\n" + " ldrh r2, [r0]\n" + " mov r6, #0x9c\n" + " lsl r6, r6, #0x1\n" + " add r0, r1, r6\n" + " ldrb r3, [r0]\n" + " add r6, r6, #0x2\n" + " add r0, r1, r6\n" + " ldrb r0, [r0]\n" + " str r0, [sp]\n" + " add r0, r4, #0\n" + " add r1, r5, #0\n" + " bl InitWindow\n" + " add r0, r4, #0\n" + " bl sub_8002F44\n" + " add sp, sp, #0x4\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._863:\n" + " .align 2, 0\n" + "._862:\n" + " .word gBattleTextBuff1\n" + " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_03004370\n" + " .word UnkDebug0+0x6c\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_nullsub_3() +{ + asm( + " bx lr\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80125A0() +{ + asm( + " push {r4, lr}\n" + " ldr r4, ._864\n" + " ldr r3, ._864 + 4\n" + " ldr r2, ._864 + 8\n" + " ldr r0, ._864 + 12\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._864 + 16\n" + " ldrb r2, [r1]\n" + " mov r1, #0x8c\n" + " mul r1, r1, r2\n" + " add r0, r0, r1\n" + " add r0, r0, r3\n" + " ldr r0, [r0]\n" + " add r0, r0, r4\n" + " mov r1, #0x6d\n" + " strb r1, [r0]\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._865:\n" + " .align 2, 0\n" + "._864:\n" + " .word +0x2000000\n" + " .word UnkDebug0+0x2c8\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80125E4() +{ + asm( + " push {r4, lr}\n" + " ldr r4, ._866\n" + " ldr r3, ._866 + 4\n" + " ldr r2, ._866 + 8\n" + " ldr r0, ._866 + 12\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " ldrb r2, [r2]\n" + " add r0, r0, r2\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._866 + 16\n" + " ldrb r2, [r1]\n" + " mov r1, #0x8c\n" + " mul r1, r1, r2\n" + " add r0, r0, r1\n" + " add r0, r0, r3\n" + " ldr r0, [r0]\n" + " add r0, r0, r4\n" + " mov r1, #0x81\n" + " strb r1, [r0]\n" + " pop {r4}\n" + " pop {r0}\n" + " bx r0\n" + "._867:\n" + " .align 2, 0\n" + "._866:\n" + " .word +0x2000000\n" + " .word UnkDebug0+0x2c8\n" + " .word gUnknown_Debug_030043A0\n" + " .word gUnknown_Debug_030043A4\n" + " .word gUnknown_Debug_03004360\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012628() +{ + asm( + " ldr r3, ._868\n" + " ldr r2, ._868 + 4\n" + " ldr r0, ._868 + 8\n" + " ldrb r1, [r0]\n" + " lsl r1, r1, #0x2\n" + " ldr r0, ._868 + 12\n" + " ldrb r0, [r0]\n" + " lsl r0, r0, #0x4\n" + " add r1, r1, r0\n" + " add r1, r1, r2\n" + " ldr r0, [r1]\n" + " add r0, r0, r3\n" + " mov r1, #0x6d\n" + " strb r1, [r0]\n" + " bx lr\n" + "._869:\n" + " .align 2, 0\n" + "._868:\n" + " .word +0x2000000\n" + " .word UnkDebug0+0x3e0\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_Debug_03004360\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012658() +{ + asm( + " ldr r3, ._870\n" + " ldr r2, ._870 + 4\n" + " ldr r0, ._870 + 8\n" + " ldrb r1, [r0]\n" + " lsl r1, r1, #0x2\n" + " ldr r0, ._870 + 12\n" + " ldrb r0, [r0]\n" + " lsl r0, r0, #0x4\n" + " add r1, r1, r0\n" + " add r1, r1, r2\n" + " ldr r0, [r1]\n" + " add r0, r0, r3\n" + " mov r1, #0x81\n" + " strb r1, [r0]\n" + " bx lr\n" + "._871:\n" + " .align 2, 0\n" + "._870:\n" + " .word +0x2000000\n" + " .word UnkDebug0+0x3e0\n" + " .word gUnknown_Debug_030043A8\n" + " .word gUnknown_Debug_03004360\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012688() +{ + asm( + " push {r4, r5, r6, lr}\n" + " mov r6, r8\n" + " push {r6}\n" + " add sp, sp, #0xfffffff4\n" + " mov r1, #0x0\n" + " mov r4, #0xcd\n" + " lsl r4, r4, #0x1\n" + " ldr r3, ._873\n" + " mov r2, #0x0\n" + "._872:\n" + " add r0, r1, r3\n" + " strb r2, [r0]\n" + " add r1, r1, #0x1\n" + " cmp r1, r4\n" + " ble ._872 @cond_branch\n" + " mov r0, #0x0\n" + " bl SetHBlankCallback\n" + " mov r0, #0x0\n" + " bl SetVBlankCallback\n" + " mov r5, #0x0\n" + " str r5, [sp, #0x8]\n" + " ldr r1, ._873 + 4\n" + " add r0, sp, #0x8\n" + " str r0, [r1]\n" + " mov r0, #0xc0\n" + " lsl r0, r0, #0x13\n" + " str r0, [r1, #0x4]\n" + " ldr r0, ._873 + 8\n" + " str r0, [r1, #0x8]\n" + " ldr r0, [r1, #0x8]\n" + " ldr r0, ._873 + 12\n" + " strh r5, [r0]\n" + " sub r0, r0, #0xc\n" + " strh r5, [r0]\n" + " add r0, r0, #0x4\n" + " strh r5, [r0]\n" + " sub r0, r0, #0x2\n" + " strh r5, [r0]\n" + " add r0, r0, #0x4\n" + " strh r5, [r0]\n" + " add r0, r0, #0x2\n" + " strh r5, [r0]\n" + " add r0, r0, #0x2\n" + " strh r5, [r0]\n" + " ldr r4, ._873 + 16\n" + " add r0, r4, #0\n" + " bl SetUpWindowConfig\n" + " bl ResetPaletteFade\n" + " ldr r0, ._873 + 20\n" + " strh r5, [r0]\n" + " ldr r1, ._873 + 24\n" + " mov r0, #0xa0\n" + " strh r0, [r1]\n" + " ldr r0, ._873 + 28\n" + " strh r5, [r0]\n" + " ldr r0, ._873 + 32\n" + " strh r5, [r0]\n" + " ldr r0, ._873 + 36\n" + " strh r5, [r0]\n" + " ldr r0, ._873 + 40\n" + " strh r5, [r0]\n" + " ldr r0, ._873 + 44\n" + " strh r5, [r0]\n" + " ldr r0, ._873 + 48\n" + " strh r5, [r0]\n" + " ldr r1, ._873 + 52\n" + " mov r0, #0x9\n" + " strb r0, [r1]\n" + " bl sub_800D6D4\n" + " bl sub_800DAB8\n" + " bl ResetSpriteData\n" + " bl ResetTasks\n" + " bl FreeAllSpritePalettes\n" + " ldr r1, ._873 + 56\n" + " mov r0, #0x4\n" + " strb r0, [r1]\n" + " ldr r6, ._873 + 60\n" + " mov r0, #0x1\n" + " strh r0, [r6]\n" + " ldr r0, ._873 + 64\n" + " add r1, r4, #0\n" + " bl InitWindowFromConfig\n" + " ldrh r2, [r6]\n" + " lsl r0, r2, #0x3\n" + " ldr r1, ._873 + 68\n" + " add r0, r0, r1\n" + " ldr r1, ._873 + 72\n" + " mov r8, r1\n" + " lsl r2, r2, #0x2\n" + " add r2, r2, r8\n" + " ldrb r1, [r2]\n" + " ldrb r2, [r2, #0x1]\n" + " mov r3, #0x80\n" + " lsl r3, r3, #0x12\n" + " ldr r4, ._873 + 76\n" + " ldr r4, [r4, #0x4]\n" + " str r4, [sp]\n" + " ldrh r4, [r6]\n" + " str r4, [sp, #0x4]\n" + " bl DecompressPicFromTable_2\n" + " ldr r1, ._873 + 80\n" + " ldrh r0, [r6]\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov r1, #0x88\n" + " lsl r1, r1, #0x1\n" + " mov r2, #0x20\n" + " bl LoadCompressedPalette\n" + " ldrh r0, [r6]\n" + " mov r1, #0x1\n" + " bl GetMonSpriteTemplate_803C56C\n" + " ldr r0, ._873 + 84\n" + " ldrh r1, [r6]\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r8\n" + " ldrb r2, [r1, #0x1]\n" + " add r2, r2, #0x28\n" + " mov r1, #0xb0\n" + " mov r3, #0x28\n" + " bl CreateSprite\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " ldr r3, ._873 + 88\n" + " lsl r1, r4, #0x4\n" + " add r1, r1, r4\n" + " lsl r1, r1, #0x2\n" + " add r0, r3, #0\n" + " add r0, r0, #0x1c\n" + " add r0, r1, r0\n" + " ldr r2, ._873 + 92\n" + " str r2, [r0]\n" + " add r1, r1, r3\n" + " ldrb r2, [r1, #0x5]\n" + " mov r0, #0xf\n" + " and r0, r0, r2\n" + " mov r2, #0x10\n" + " orr r0, r0, r2\n" + " strb r0, [r1, #0x5]\n" + " mov r1, #0x80\n" + " lsl r1, r1, #0x13\n" + " mov r2, #0xfa\n" + " lsl r2, r2, #0x5\n" + " add r0, r2, #0\n" + " strh r0, [r1]\n" + " ldr r0, ._873 + 96\n" + " bl SetHBlankCallback\n" + " ldr r0, ._873 + 100\n" + " bl SetVBlankCallback\n" + " bl gScriptFuncs_End+0x14f4\n" + " ldr r0, ._873 + 104\n" + " mov r1, #0x0\n" + " bl CreateTask\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldr r2, ._873 + 108\n" + " lsl r1, r0, #0x2\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r2\n" + " strh r5, [r1, #0x8]\n" + " strh r4, [r1, #0xa]\n" + " ldr r0, ._873 + 112\n" + " bl SetMainCallback2\n" + " add sp, sp, #0xc\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._874:\n" + " .align 2, 0\n" + "._873:\n" + " .word gUnknown_02023A14+0x13e\n" + " .word 0x40000d4\n" + " .word 0x85006000\n" + " .word 0x400004c\n" + " .word gWindowConfig_81E6C58\n" + " .word gUnknown_030042A4\n" + " .word gUnknown_030042A0\n" + " .word gUnknown_030042C0\n" + " .word gUnknown_030041B4\n" + " .word gUnknown_03004288\n" + " .word gUnknown_03004280\n" + " .word gUnknown_030041B0\n" + " .word gUnknown_030041B8\n" + " .word gBattleTerrain\n" + " .word gReservedSpritePaletteCount\n" + " .word gCurrentMove\n" + " .word gUnknown_03004210\n" + " .word gMonFrontPicTable\n" + " .word gMonFrontPicCoords\n" + " .word gUnknown_081FAF4C\n" + " .word gMonPaletteTable\n" + " .word gUnknown_02024E8C\n" + " .word gSprites\n" + " .word nullsub_37+1\n" + " .word debug_nullsub_45+1\n" + " .word debug_sub_8011DD4+1\n" + " .word debug_sub_8012D10+1\n" + " .word gTasks\n" + " .word debug_sub_8012878+1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012878() +{ + asm( + " push {lr}\n" + " bl AnimateSprites\n" + " bl BuildOamBuffer\n" + " ldr r0, ._876\n" + " bl sub_800374C\n" + " bl UpdatePaletteFade\n" + " bl RunTasks\n" + " ldr r0, ._876 + 4\n" + " ldrh r1, [r0, #0x2c]\n" + " mov r0, #0x82\n" + " lsl r0, r0, #0x1\n" + " cmp r1, r0\n" + " bne ._875 @cond_branch\n" + " ldr r0, ._876 + 8\n" + " bl SetMainCallback2\n" + "._875:\n" + " pop {r0}\n" + " bx r0\n" + "._877:\n" + " .align 2, 0\n" + "._876:\n" + " .word gUnknown_03004210\n" + " .word gMain\n" + " .word debug_sub_80108B8+1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80128B4() +{ + asm( + " push {r4, r5, r6, lr}\n" + " mov r6, r8\n" + " push {r6}\n" + " add sp, sp, #0xfffffffc\n" + " mov r0, #0x0\n" + " mov r1, #0x9\n" + " bl debug_sub_8010A7C\n" + " ldr r5, ._878\n" + " ldr r4, ._878 + 4\n" + " mov r0, #0x23\n" + " mov r8, r0\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r4, #0\n" + " mov r2, #0x90\n" + " mov r3, #0x2\n" + " bl InitWindow\n" + " add r0, r5, #0\n" + " bl sub_8002F44\n" + " ldr r6, ._878 + 8\n" + " ldrh r1, [r6]\n" + " add r0, r4, #0\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, #0x0\n" + " strb r0, [r4, #0x3]\n" + " mov r0, #0xff\n" + " strb r0, [r4, #0x4]\n" + " ldrh r1, [r6]\n" + " mov r0, #0xb\n" + " mul r1, r1, r0\n" + " ldr r0, ._878 + 12\n" + " add r1, r1, r0\n" + " add r0, r4, #0\n" + " bl StringAppend\n" + " mov r0, r8\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " add r1, r4, #0\n" + " mov r2, #0x90\n" + " mov r3, #0x2\n" + " bl InitWindow\n" + " add r0, r5, #0\n" + " bl sub_8002F44\n" + " add sp, sp, #0x4\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._879:\n" + " .align 2, 0\n" + "._878:\n" + " .word gUnknown_03004210\n" + " .word gBattleTextBuff1\n" + " .word gCurrentMove\n" + " .word gSpeciesNames\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012938() +{ + asm( + " push {r4, r5, r6, lr}\n" + " mov r6, sl\n" + " mov r5, r9\n" + " mov r4, r8\n" + " push {r4, r5, r6}\n" + " add sp, sp, #0xfffffffc\n" + " add r5, r0, #0\n" + " lsl r5, r5, #0x18\n" + " lsr r5, r5, #0x18\n" + " mov r0, #0x0\n" + " mov r1, #0x7\n" + " bl debug_sub_8010A7C\n" + " ldr r6, ._880\n" + " ldr r4, ._880 + 4\n" + " mov r0, #0x25\n" + " mov r8, r0\n" + " str r0, [sp]\n" + " add r0, r6, #0\n" + " add r1, r4, #0\n" + " mov r2, #0xa2\n" + " mov r3, #0x2\n" + " bl InitWindow\n" + " add r0, r6, #0\n" + " bl sub_8002F44\n" + " ldr r1, ._880 + 8\n" + " add r0, r4, #0\n" + " bl StringCopy\n" + " add r0, r4, #4\n" + " ldr r1, ._880 + 12\n" + " mov sl, r1\n" + " ldr r2, ._880 + 16\n" + " mov r9, r2\n" + " ldrh r1, [r2]\n" + " sub r1, r1, #0x1\n" + " add r1, r1, sl\n" + " ldrb r1, [r1]\n" + " mov r2, #0x2\n" + " mov r3, #0x3\n" + " bl ConvertIntToDecimalStringN\n" + " mov r0, r8\n" + " str r0, [sp]\n" + " add r0, r6, #0\n" + " add r1, r4, #0\n" + " mov r2, #0xa2\n" + " mov r3, #0x2\n" + " bl InitWindow\n" + " add r0, r6, #0\n" + " bl sub_8002F44\n" + " ldr r2, ._880 + 20\n" + " ldr r1, ._880 + 24\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0xa\n" + " ldsh r0, [r0, r1]\n" + " lsl r1, r0, #0x4\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r2\n" + " mov r2, r9\n" + " ldrh r0, [r2]\n" + " sub r0, r0, #0x1\n" + " add r0, r0, sl\n" + " ldrb r0, [r0]\n" + " neg r0, r0\n" + " strh r0, [r1, #0x26]\n" + " add sp, sp, #0x4\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._881:\n" + " .align 2, 0\n" + "._880:\n" + " .word gUnknown_03004210\n" + " .word gBattleTextBuff1\n" + " .word UnkDebug0+0x400\n" + " .word gUnknown_02023A14+0x13e\n" + " .word gCurrentMove\n" + " .word gSprites\n" + " .word gTasks\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80129F8() +{ + asm( + " push {r4, r5, r6, lr}\n" + " mov r6, r8\n" + " push {r6}\n" + " add sp, sp, #0xfffffff8\n" + " add r5, r0, #0\n" + " lsl r5, r5, #0x18\n" + " lsr r5, r5, #0x18\n" + " ldr r6, ._882\n" + " ldrh r2, [r6]\n" + " lsl r0, r2, #0x3\n" + " ldr r1, ._882 + 4\n" + " add r0, r0, r1\n" + " ldr r1, ._882 + 8\n" + " mov r8, r1\n" + " lsl r2, r2, #0x2\n" + " add r2, r2, r8\n" + " ldrb r1, [r2]\n" + " ldrb r2, [r2, #0x1]\n" + " mov r3, #0x80\n" + " lsl r3, r3, #0x12\n" + " ldr r4, ._882 + 12\n" + " ldr r4, [r4, #0x4]\n" + " str r4, [sp]\n" + " ldrh r4, [r6]\n" + " str r4, [sp, #0x4]\n" + " bl DecompressPicFromTable_2\n" + " ldr r1, ._882 + 16\n" + " ldrh r0, [r6]\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov r1, #0x88\n" + " lsl r1, r1, #0x1\n" + " mov r2, #0x20\n" + " bl LoadCompressedPalette\n" + " ldr r4, ._882 + 20\n" + " ldr r0, ._882 + 24\n" + " lsl r2, r5, #0x2\n" + " add r2, r2, r5\n" + " lsl r2, r2, #0x3\n" + " add r2, r2, r0\n" + " mov r1, #0xa\n" + " ldsh r0, [r2, r1]\n" + " lsl r1, r0, #0x4\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r4\n" + " ldrh r0, [r6]\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r8\n" + " ldrb r0, [r0, #0x1]\n" + " add r0, r0, #0x28\n" + " strh r0, [r1, #0x22]\n" + " mov r1, #0xa\n" + " ldsh r0, [r2, r1]\n" + " lsl r1, r0, #0x4\n" + " add r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r4\n" + " ldr r3, ._882 + 28\n" + " ldrh r0, [r6]\n" + " sub r0, r0, #0x1\n" + " add r0, r0, r3\n" + " ldrb r0, [r0]\n" + " neg r0, r0\n" + " strh r0, [r1, #0x26]\n" + " mov r0, #0xa\n" + " ldsh r1, [r2, r0]\n" + " lsl r0, r1, #0x4\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r4\n" + " mov r1, #0x0\n" + " bl StartSpriteAnim\n" + " add sp, sp, #0x8\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._883:\n" + " .align 2, 0\n" + "._882:\n" + " .word gCurrentMove\n" + " .word gMonFrontPicTable\n" + " .word gMonFrontPicCoords\n" + " .word gUnknown_081FAF4C\n" + " .word gMonPaletteTable\n" + " .word gSprites\n" + " .word gTasks\n" + " .word gUnknown_02023A14+0x13e\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012AC0() +{ + asm( + " push {r4, r5, r6, lr}\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " lsl r1, r1, #0x18\n" + " lsr r6, r1, #0x18\n" + " ldr r3, ._885\n" + " ldr r4, ._885 + 4\n" + " b ._884\n" + "._886:\n" + " .align 2, 0\n" + "._885:\n" + " .word gCurrentMove\n" + " .word gBaseStats\n" + "._890:\n" + " ldrb r0, [r1, #0x7]\n" + " cmp r0, #0x2\n" + " beq ._887 @cond_branch\n" + "._884:\n" + " add r2, r3, #0\n" + " lsl r0, r5, #0x18\n" + " asr r0, r0, #0x18\n" + " ldrh r1, [r2]\n" + " add r0, r0, r1\n" + " strh r0, [r2]\n" + " lsl r0, r0, #0x10\n" + " cmp r0, #0\n" + " bne ._888 @cond_branch\n" + " ldr r1, ._891\n" + " add r0, r1, #0\n" + " strh r0, [r2]\n" + "._888:\n" + " ldrh r1, [r2]\n" + " ldr r0, ._891\n" + " cmp r1, r0\n" + " bne ._889 @cond_branch\n" + " mov r0, #0x1\n" + " strh r0, [r2]\n" + "._889:\n" + " ldrh r0, [r3]\n" + " lsl r1, r0, #0x3\n" + " sub r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r4\n" + " ldrb r0, [r1, #0x6]\n" + " cmp r0, #0x2\n" + " bne ._890 @cond_branch\n" + "._887:\n" + " bl debug_sub_80128B4\n" + " add r0, r6, #0\n" + " bl debug_sub_8012938\n" + " add r0, r6, #0\n" + " bl debug_sub_80129F8\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._892:\n" + " .align 2, 0\n" + "._891:\n" + " .word 0x19b\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012B2C() +{ + asm( + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x11\n" + " ldr r1, ._893\n" + " add r2, r0, r1\n" + " mov r1, #0x1\n" + " strh r1, [r2]\n" + " ldr r1, ._893 + 4\n" + " add r0, r0, r1\n" + " mov r1, #0x2\n" + " strh r1, [r0]\n" + " bx lr\n" + "._894:\n" + " .align 2, 0\n" + "._893:\n" + " .word 0x600c772\n" + " .word 0x600c7b2\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012B4C() +{ + asm( + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x11\n" + " ldr r2, ._895\n" + " add r1, r0, r2\n" + " ldr r3, ._895 + 4\n" + " add r2, r3, #0\n" + " strh r2, [r1]\n" + " ldr r1, ._895 + 8\n" + " add r0, r0, r1\n" + " strh r2, [r0]\n" + " bx lr\n" + "._896:\n" + " .align 2, 0\n" + "._895:\n" + " .word 0x600c772\n" + " .word 0x1016\n" + " .word 0x600c7b2\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012B70() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add sp, sp, #0xfffffffc\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " lsl r1, r1, #0x18\n" + " lsr r6, r1, #0x18\n" + " cmp r6, #0\n" + " beq ._897 @cond_branch\n" + " mov r4, #0x1\n" + " str r4, [sp]\n" + " mov r0, #0x18\n" + " mov r1, #0x1c\n" + " mov r2, #0x1d\n" + " mov r3, #0x21\n" + " bl sub_802BBD4\n" + " bl debug_sub_80128B4\n" + " add r0, r5, #0\n" + " bl debug_sub_8012938\n" + " add r0, r5, #0\n" + " bl debug_sub_80129F8\n" + " ldr r1, ._899\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " strh r4, [r0, #0x8]\n" + " b ._898\n" + "._900:\n" + " .align 2, 0\n" + "._899:\n" + " .word gTasks\n" + "._897:\n" + " str r6, [sp]\n" + " mov r0, #0x18\n" + " mov r1, #0x1c\n" + " mov r2, #0x1d\n" + " mov r3, #0x21\n" + " bl sub_802BBD4\n" + " ldr r0, ._901\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " mov r0, #0x2\n" + " strh r0, [r4, #0x8]\n" + " ldr r5, ._901 + 4\n" + " ldr r1, ._901 + 8\n" + " mov r2, #0xa4\n" + " lsl r2, r2, #0x2\n" + " mov r0, #0x1d\n" + " str r0, [sp]\n" + " add r0, r5, #0\n" + " mov r3, #0x1a\n" + " bl InitWindow\n" + " add r0, r5, #0\n" + " bl sub_8002F44\n" + " strh r6, [r4, #0xe]\n" + " mov r0, #0x0\n" + " bl debug_sub_8012B2C\n" + "._898:\n" + " add sp, sp, #0x4\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "._902:\n" + " .align 2, 0\n" + "._901:\n" + " .word gTasks\n" + " .word gUnknown_03004210\n" + " .word UnkDebug0+0x422\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012C08() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, r8\n" + " push {r7}\n" + " add sp, sp, #0xfffffffc\n" + " add r4, r1, #0\n" + " lsl r0, r0, #0x18\n" + " lsr r6, r0, #0x18\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " mov r0, #0x0\n" + " mov r1, #0x9\n" + " bl debug_sub_8010A7C\n" + " ldr r7, ._905\n" + " ldr r5, ._905 + 4\n" + " mov r0, #0x23\n" + " mov r8, r0\n" + " str r0, [sp]\n" + " add r0, r7, #0\n" + " add r1, r5, #0\n" + " mov r2, #0x90\n" + " mov r3, #0x2\n" + " bl InitWindow\n" + " add r0, r7, #0\n" + " bl sub_8002F44\n" + " mov r0, #0x0\n" + " mov r1, #0x7\n" + " bl debug_sub_8010A7C\n" + " mov r0, #0x25\n" + " str r0, [sp]\n" + " add r0, r7, #0\n" + " add r1, r5, #0\n" + " mov r2, #0xa2\n" + " mov r3, #0x2\n" + " bl InitWindow\n" + " add r0, r7, #0\n" + " bl sub_8002F44\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " mov r0, #0x18\n" + " mov r1, #0x1c\n" + " mov r2, #0x1d\n" + " mov r3, #0x21\n" + " bl sub_802BBD4\n" + " cmp r4, #0\n" + " beq ._903 @cond_branch\n" + " ldr r1, ._905 + 8\n" + " lsl r4, r6, #0x2\n" + " add r0, r4, r6\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0x4\n" + " strh r1, [r0, #0x8]\n" + " ldr r1, ._905 + 12\n" + " mov r0, r8\n" + " str r0, [sp]\n" + " add r0, r7, #0\n" + " mov r2, #0x90\n" + " mov r3, #0x2\n" + " bl InitWindow\n" + " b ._904\n" + "._906:\n" + " .align 2, 0\n" + "._905:\n" + " .word gUnknown_03004210\n" + " .word gBattleTextBuff1\n" + " .word gTasks\n" + " .word gUnknown_Debug_821F7F3\n" + "._903:\n" + " ldr r1, ._907\n" + " lsl r4, r6, #0x2\n" + " add r0, r4, r6\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0x3\n" + " strh r1, [r0, #0x8]\n" + " ldr r1, ._907 + 4\n" + " mov r0, r8\n" + " str r0, [sp]\n" + " add r0, r7, #0\n" + " mov r2, #0x90\n" + " mov r3, #0x2\n" + " bl InitWindow\n" + "._904:\n" + " add r5, r4, #0\n" + " ldr r4, ._907 + 8\n" + " add r0, r4, #0\n" + " bl sub_8002F44\n" + " ldr r1, ._907 + 12\n" + " mov r2, #0xa4\n" + " lsl r2, r2, #0x2\n" + " mov r0, #0x1d\n" + " str r0, [sp]\n" + " add r0, r4, #0\n" + " mov r3, #0x1a\n" + " bl InitWindow\n" + " add r0, r4, #0\n" + " bl sub_8002F44\n" + " ldr r1, ._907\n" + " add r0, r5, r6\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0x1\n" + " strh r1, [r0, #0xe]\n" + " mov r0, #0x1\n" + " bl debug_sub_8012B2C\n" + " add sp, sp, #0x4\n" + " pop {r3}\n" + " mov r8, r3\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._908:\n" + " .align 2, 0\n" + "._907:\n" + " .word gTasks\n" + " .word UnkDebug0+0x432\n" + " .word gUnknown_03004210\n" + " .word gUnknown_08400D7A\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8012D10() +{ + asm( + " push {r4, r5, lr}\n" + " add sp, sp, #0xfffffffc\n" + " lsl r0, r0, #0x18\n" + " lsr r5, r0, #0x18\n" + " ldr r1, ._911\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0x8\n" + " ldsh r0, [r0, r1]\n" + " cmp r0, #0x4\n" + " bls ._909 @cond_branch\n" + " b ._1067\n" + "._909:\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._911 + 4\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._912:\n" + " .align 2, 0\n" + "._911:\n" + " .word gTasks\n" + " .word ._913\n" + "._913:\n" + " .word ._914\n" + " .word ._915\n" + " .word ._916\n" + " .word ._917\n" + " .word ._918\n" + "._914:\n" + " bl debug_sub_80128B4\n" + " add r0, r5, #0\n" + " bl debug_sub_8012938\n" + " ldr r4, ._920\n" + " ldr r1, ._920 + 4\n" + " mov r2, #0xc8\n" + " lsl r2, r2, #0x1\n" + " mov r0, #0x23\n" + " str r0, [sp]\n" + " add r0, r4, #0\n" + " mov r3, #0x13\n" + " bl InitWindow\n" + " add r0, r4, #0\n" + " bl sub_8002F44\n" + " ldr r1, ._920 + 8\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " ldrh r1, [r0, #0x8]\n" + " add r1, r1, #0x1\n" + " strh r1, [r0, #0x8]\n" + " ldrb r0, [r0, #0xc]\n" + " b ._919\n" + "._921:\n" + " .align 2, 0\n" + "._920:\n" + " .word gUnknown_03004210\n" + " .word UnkDebug0+0x405\n" + " .word gTasks\n" + "._915:\n" + " ldr r2, ._924\n" + " ldrh r1, [r2, #0x2e]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._922 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._924 + 4\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xc]\n" + " bl nullsub_8\n" + " ldrh r1, [r4, #0xc]\n" + " mov r0, #0x3\n" + " neg r0, r0\n" + " and r0, r0, r1\n" + " b ._931\n" + "._925:\n" + " .align 2, 0\n" + "._924:\n" + " .word gMain\n" + " .word gTasks\n" + "._922:\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._926 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._928\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xc]\n" + " bl nullsub_8\n" + " ldrh r1, [r4, #0xc]\n" + " mov r0, #0x2\n" + " b ._927\n" + "._929:\n" + " .align 2, 0\n" + "._928:\n" + " .word gTasks\n" + "._926:\n" + " mov r0, #0x20\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._930 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._932\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xc]\n" + " bl nullsub_8\n" + " ldrh r1, [r4, #0xc]\n" + " mov r0, #0x2\n" + " neg r0, r0\n" + " and r0, r0, r1\n" + " b ._931\n" + "._933:\n" + " .align 2, 0\n" + "._932:\n" + " .word gTasks\n" + "._930:\n" + " mov r0, #0x10\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._934 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._936\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xc]\n" + " bl nullsub_8\n" + " ldrh r1, [r4, #0xc]\n" + " mov r0, #0x1\n" + "._927:\n" + " orr r0, r0, r1\n" + "._931:\n" + " strh r0, [r4, #0xc]\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + "._919:\n" + " mov r1, #0x0\n" + " bl sub_802E3E4\n" + " b ._1067\n" + "._937:\n" + " .align 2, 0\n" + "._936:\n" + " .word gTasks\n" + "._934:\n" + " ldrh r1, [r2, #0x30]\n" + " mov r4, #0x1\n" + " add r0, r4, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._938 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._943\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r2, #0xc\n" + " ldsh r0, [r0, r2]\n" + " cmp r0, #0x1\n" + " beq ._939 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._940 @cond_branch\n" + " cmp r0, #0\n" + " beq ._941 @cond_branch\n" + " b ._1067\n" + "._944:\n" + " .align 2, 0\n" + "._943:\n" + " .word gTasks\n" + "._940:\n" + " cmp r0, #0x2\n" + " beq ._945 @cond_branch\n" + "._990:\n" + " cmp r0, #0x3\n" + " bne ._946 @cond_branch\n" + " b ._1014\n" + "._946:\n" + " b ._1067\n" + "._941:\n" + " ldr r1, ._952\n" + " ldr r0, ._952 + 4\n" + " ldrh r0, [r0]\n" + " sub r0, r0, #0x1\n" + " add r1, r0, r1\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x3f\n" + " bls ._949 @cond_branch\n" + " b ._1067\n" + "._949:\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " b ._1019\n" + "._953:\n" + " .align 2, 0\n" + "._952:\n" + " .word gUnknown_02023A14+0x13e\n" + " .word gCurrentMove\n" + "._939:\n" + " mov r0, #0x1\n" + " b ._997\n" + "._945:\n" + " ldr r1, ._957\n" + " ldrh r2, [r1]\n" + " mov r0, #0xcd\n" + " lsl r0, r0, #0x1\n" + " cmp r2, r0\n" + " bhi ._955 @cond_branch\n" + " add r0, r2, #1\n" + "._979:\n" + " strh r0, [r1]\n" + " b ._1025\n" + "._958:\n" + " .align 2, 0\n" + "._957:\n" + " .word gCurrentMove\n" + "._955:\n" + " strh r4, [r1]\n" + " b ._1025\n" + "._938:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._960 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._966\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0xc\n" + " ldsh r0, [r0, r1]\n" + " cmp r0, #0x1\n" + " bne ._961 @cond_branch\n" + " b ._1007\n" + "._961:\n" + " cmp r0, #0x1\n" + " bgt ._963 @cond_branch\n" + " cmp r0, #0\n" + " beq ._964 @cond_branch\n" + " b ._1067\n" + "._967:\n" + " .align 2, 0\n" + "._966:\n" + " .word gTasks\n" + "._963:\n" + " cmp r0, #0x2\n" + " beq ._968 @cond_branch\n" + " b ._990\n" + "._964:\n" + " ldr r1, ._973\n" + " ldr r0, ._973 + 4\n" + " ldrh r0, [r0]\n" + " sub r0, r0, #0x1\n" + " add r1, r0, r1\n" + " ldrb r0, [r1]\n" + " cmp r0, #0\n" + " bne ._970 @cond_branch\n" + " b ._1067\n" + "._970:\n" + " sub r0, r0, #0x1\n" + " strb r0, [r1]\n" + " b ._1019\n" + "._974:\n" + " .align 2, 0\n" + "._973:\n" + " .word gUnknown_02023A14+0x13e\n" + " .word gCurrentMove\n" + "._968:\n" + " ldr r1, ._977\n" + " ldrh r0, [r1]\n" + " cmp r0, #0x1\n" + " bls ._975 @cond_branch\n" + " sub r0, r0, #0x1\n" + " b ._979\n" + "._978:\n" + " .align 2, 0\n" + "._977:\n" + " .word gCurrentMove\n" + "._975:\n" + " ldr r2, ._980\n" + " add r0, r2, #0\n" + " b ._979\n" + "._981:\n" + " .align 2, 0\n" + "._980:\n" + " .word 0x19b\n" + "._960:\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._982 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._987\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r1, #0xc\n" + " ldsh r0, [r0, r1]\n" + " cmp r0, #0x1\n" + " beq ._983 @cond_branch\n" + " cmp r0, #0x1\n" + " bgt ._984 @cond_branch\n" + " cmp r0, #0\n" + " beq ._985 @cond_branch\n" + " b ._1067\n" + "._988:\n" + " .align 2, 0\n" + "._987:\n" + " .word gTasks\n" + "._984:\n" + " cmp r0, #0x2\n" + " beq ._989 @cond_branch\n" + " b ._990\n" + "._985:\n" + " ldr r3, ._995\n" + " ldr r2, ._995 + 4\n" + " ldrh r0, [r2]\n" + " sub r0, r0, #0x1\n" + " add r1, r0, r3\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x3f\n" + " bls ._991 @cond_branch\n" + " b ._1067\n" + "._991:\n" + " add r0, r0, #0x8\n" + " strb r0, [r1]\n" + " ldrh r0, [r2]\n" + " sub r0, r0, #0x1\n" + " add r1, r0, r3\n" + " ldrb r0, [r1]\n" + " cmp r0, #0x40\n" + " bls ._1019 @cond_branch\n" + " mov r0, #0x40\n" + " strb r0, [r1]\n" + " b ._1019\n" + "._996:\n" + " .align 2, 0\n" + "._995:\n" + " .word gUnknown_02023A14+0x13e\n" + " .word gCurrentMove\n" + "._983:\n" + " mov r0, #0x1\n" + " b ._997\n" + "._989:\n" + " ldr r3, ._1000\n" + " ldrh r2, [r3]\n" + " add r1, r2, #0\n" + " add r1, r1, #0xa\n" + " ldr r0, ._1000 + 4\n" + " cmp r1, r0\n" + " bgt ._998 @cond_branch\n" + " strh r1, [r3]\n" + " b ._1025\n" + "._1001:\n" + " .align 2, 0\n" + "._1000:\n" + " .word gCurrentMove\n" + " .word 0x19b\n" + "._998:\n" + " ldr r1, ._1003\n" + " add r0, r2, r1\n" + " strh r0, [r3]\n" + " b ._1025\n" + "._1004:\n" + " .align 2, 0\n" + "._1003:\n" + " .word 0xfffffe70\n" + "._982:\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._1005 @cond_branch\n" + " b ._1067\n" + "._1005:\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r1, ._1011\n" + " lsl r0, r5, #0x2\n" + " add r0, r0, r5\n" + " lsl r0, r0, #0x3\n" + " add r0, r0, r1\n" + " mov r2, #0xc\n" + " ldsh r3, [r0, r2]\n" + " cmp r3, #0x1\n" + " beq ._1007 @cond_branch\n" + " cmp r3, #0x1\n" + " bgt ._1008 @cond_branch\n" + " cmp r3, #0\n" + " beq ._1009 @cond_branch\n" + " b ._1067\n" + "._1012:\n" + " .align 2, 0\n" + "._1011:\n" + " .word gTasks\n" + "._1008:\n" + " cmp r3, #0x2\n" + " beq ._1013 @cond_branch\n" + " cmp r3, #0x3\n" + " beq ._1014 @cond_branch\n" + " b ._1067\n" + "._1009:\n" + " ldr r1, ._1020\n" + " ldr r0, ._1020 + 4\n" + " ldrh r0, [r0]\n" + " sub r0, r0, #0x1\n" + " add r2, r0, r1\n" + " ldrb r0, [r2]\n" + " add r1, r0, #0\n" + " cmp r1, #0\n" + " bne ._1016 @cond_branch\n" + " b ._1067\n" + "._1016:\n" + " cmp r1, #0x8\n" + " bls ._1018 @cond_branch\n" + " sub r0, r0, #0x8\n" + " strb r0, [r2]\n" + " b ._1019\n" + "._1021:\n" + " .align 2, 0\n" + "._1020:\n" + " .word gUnknown_02023A14+0x13e\n" + " .word gCurrentMove\n" + "._1018:\n" + " strb r3, [r2]\n" + "._1019:\n" + " add r0, r5, #0\n" + " bl debug_sub_8012938\n" + " b ._1067\n" + "._1007:\n" + " mov r0, #0x1\n" + " neg r0, r0\n" + "._997:\n" + " add r1, r5, #0\n" + " bl debug_sub_8012AC0\n" + " b ._1067\n" + "._1013:\n" + " ldr r2, ._1026\n" + " ldrh r0, [r2]\n" + " add r1, r0, #0\n" + " sub r1, r1, #0xa\n" + " cmp r1, #0x1\n" + " ble ._1024 @cond_branch\n" + " strh r1, [r2]\n" + " b ._1025\n" + "._1027:\n" + " .align 2, 0\n" + "._1026:\n" + " .word gCurrentMove\n" + "._1024:\n" + " mov r1, #0xc8\n" + " lsl r1, r1, #0x1\n" + " add r0, r0, r1\n" + " strh r0, [r2]\n" + "._1025:\n" + " bl debug_sub_80128B4\n" + " add r0, r5, #0\n" + " bl debug_sub_8012938\n" + " add r0, r5, #0\n" + " bl debug_sub_80129F8\n" + " b ._1067\n" + "._1014:\n" + " add r0, r5, #0\n" + " mov r1, #0x0\n" + " bl debug_sub_8012B70\n" + " b ._1067\n" + "._916:\n" + " ldr r0, ._1032\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1030 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1032 + 4\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xe]\n" + " bl debug_sub_8012B4C\n" + " mov r0, #0x0\n" + " b ._1055\n" + "._1033:\n" + " .align 2, 0\n" + "._1032:\n" + " .word gMain\n" + " .word gTasks\n" + "._1030:\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._1046 @cond_branch\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1035 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1037\n" + " lsl r1, r5, #0x2\n" + " add r1, r1, r5\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r0\n" + " ldrb r1, [r1, #0xe]\n" + " add r0, r5, #0\n" + " bl debug_sub_8012C08\n" + " b ._1067\n" + "._1038:\n" + " .align 2, 0\n" + "._1037:\n" + " .word gTasks\n" + "._1035:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._1039 @cond_branch\n" + " b ._1067\n" + "._1039:\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " b ._1063\n" + "._917:\n" + " ldr r0, ._1044\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1042 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1044 + 4\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xe]\n" + " bl debug_sub_8012B4C\n" + " mov r0, #0x0\n" + " b ._1055\n" + "._1045:\n" + " .align 2, 0\n" + "._1044:\n" + " .word gMain\n" + " .word gTasks\n" + "._1042:\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._1046 @cond_branch\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1047 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1050\n" + " lsl r1, r5, #0x2\n" + " add r1, r1, r5\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r0\n" + " mov r2, #0xe\n" + " ldsh r0, [r1, r2]\n" + " cmp r0, #0\n" + " bne ._1063 @cond_branch\n" + " ldr r1, ._1050 + 4\n" + " ldr r2, ._1050 + 8\n" + " mov r0, #0x1f\n" + " bl debug_sub_80132C8\n" + " b ._1063\n" + "._1051:\n" + " .align 2, 0\n" + "._1050:\n" + " .word gTasks\n" + " .word gUnknown_02023A14+0x13e\n" + " .word 0x19b\n" + "._1047:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1067 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " b ._1063\n" + "._918:\n" + " ldr r0, ._1056\n" + " ldrh r1, [r0, #0x2e]\n" + " mov r0, #0x40\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1054 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1056 + 4\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xe]\n" + " bl debug_sub_8012B4C\n" + " mov r0, #0x0\n" + " b ._1055\n" + "._1057:\n" + " .align 2, 0\n" + "._1056:\n" + " .word gMain\n" + " .word gTasks\n" + "._1054:\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1058 @cond_branch\n" + "._1046:\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1060\n" + " lsl r4, r5, #0x2\n" + " add r4, r4, r5\n" + " lsl r4, r4, #0x3\n" + " add r4, r4, r0\n" + " ldrb r0, [r4, #0xe]\n" + " bl debug_sub_8012B4C\n" + " mov r0, #0x1\n" + "._1055:\n" + " strh r0, [r4, #0xe]\n" + " bl debug_sub_8012B2C\n" + " b ._1067\n" + "._1061:\n" + " .align 2, 0\n" + "._1060:\n" + " .word gTasks\n" + "._1058:\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1062 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " ldr r0, ._1065\n" + " lsl r1, r5, #0x2\n" + " add r1, r1, r5\n" + " lsl r1, r1, #0x3\n" + " add r1, r1, r0\n" + " mov r2, #0xe\n" + " ldsh r0, [r1, r2]\n" + " cmp r0, #0\n" + " bne ._1063 @cond_branch\n" + " ldr r1, ._1065 + 4\n" + " ldr r2, ._1065 + 8\n" + " mov r0, #0x1f\n" + " bl debug_sub_8013294\n" + "._1063:\n" + " add r0, r5, #0\n" + " mov r1, #0x1\n" + " bl debug_sub_8012B70\n" + " b ._1067\n" + "._1066:\n" + " .align 2, 0\n" + "._1065:\n" + " .word gTasks\n" + " .word gUnknown_02023A14+0x13e\n" + " .word 0x19b\n" + "._1062:\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1067 @cond_branch\n" + " mov r0, #0x5\n" + " bl PlaySE\n" + " add r0, r5, #0\n" + " mov r1, #0x1\n" + " bl debug_sub_8012B70\n" + "._1067:\n" + " add sp, sp, #0x4\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8013240() +{ + asm( + " push {lr}\n" + " bl gScriptFuncs_End+0x2fec\n" + " lsl r0, r0, #0x10\n" + " cmp r0, #0\n" + " beq ._1068 @cond_branch\n" + " mov r0, #0x1\n" + " b ._1069\n" + "._1068:\n" + " mov r0, #0x0\n" + "._1069:\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8013258() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add r6, r1, #0\n" + " add r5, r2, #0\n" + " b ._1070\n" + "._1072:\n" + " ldr r0, ._1074\n" + " add r5, r5, r0\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x5\n" + " add r6, r6, r0\n" + " add r0, r4, #1\n" + "._1070:\n" + " lsl r0, r0, #0x10\n" + " lsr r4, r0, #0x10\n" + " add r0, r4, #0\n" + " add r1, r6, #0\n" + " bl gScriptFuncs_End+0x2f60\n" + " cmp r0, #0\n" + " bne ._1071 @cond_branch\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x5\n" + " cmp r5, r0\n" + " bhi ._1072 @cond_branch\n" + " mov r0, #0x1\n" + " b ._1073\n" + "._1075:\n" + " .align 2, 0\n" + "._1074:\n" + " .word 0xfffff000\n" + "._1071:\n" + " mov r0, #0x0\n" + "._1073:\n" + " pop {r4, r5, r6}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_8013294() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add r5, r1, #0\n" + " add r6, r2, #0\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " bl debug_sub_8013240\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._1076 @cond_branch\n" + " bl gScriptFuncs_End+0x19f4\n" + " add r0, r4, #0\n" + " add r1, r5, #0\n" + " add r2, r6, #0\n" + " bl debug_sub_8013258\n" + " add r4, r0, #0\n" + " bl gScriptFuncs_End+0x1a70\n" + " add r0, r4, #0\n" + " b ._1077\n" + "._1076:\n" + " mov r0, #0x0\n" + "._1077:\n" + " pop {r4, r5, r6}\n" + " pop {r1}\n" + " bx r1\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80132C8() +{ + asm( + " push {r4, r5, r6, lr}\n" + " add r5, r1, #0\n" + " add r6, r2, #0\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " bl debug_sub_8013240\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._1078 @cond_branch\n" + " add r0, r4, #0\n" + " mov r1, #0x0\n" + " add r2, r5, #0\n" + " add r3, r6, #0\n" + " bl gScriptFuncs_End+0x2d64\n" + "._1078:\n" + " pop {r4, r5, r6}\n" + " pop {r0}\n" + " bx r0\n" + "\n" + ); +} +#endif + void oac_poke_opponent(struct Sprite *sprite) { sprite->callback = sub_8010278; @@ -1554,6 +8880,269 @@ void sub_8010800(void) gBattleMainFunc = bc_8012FAC; } +#if DEBUG +__attribute__((naked)) +void debug_sub_80138CC() +{ + asm( + " push {lr}\n" + " ldr r0, ._1167\n" + " ldrb r0, [r0]\n" + " bl GetBankSide\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " beq ._1163 @cond_branch\n" + " b ._1186\n" + "._1163:\n" + " ldr r1, ._1167 + 4\n" + " ldr r2, ._1167 + 8\n" + " add r0, r1, r2\n" + " ldrb r0, [r0]\n" + " add r2, r1, #0\n" + " cmp r0, #0x4\n" + " bls ._1165 @cond_branch\n" + " b ._1186\n" + "._1165:\n" + " lsl r0, r0, #0x2\n" + " ldr r1, ._1167 + 12\n" + " add r0, r0, r1\n" + " ldr r0, [r0]\n" + " mov pc, r0\n" + "._1168:\n" + " .align 2, 0\n" + "._1167:\n" + " .word gActiveBank\n" + " .word +0x2000000\n" + " .word 0x160fd\n" + " .word ._1169\n" + "._1169:\n" + " .word ._1170\n" + " .word ._1171\n" + " .word ._1172\n" + " .word ._1173\n" + " .word ._1174\n" + "._1170:\n" + " ldr r1, ._1177\n" + " ldr r0, ._1177 + 4\n" + " ldrb r0, [r0]\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r1\n" + " ldr r1, [r0]\n" + " ldr r0, ._1177 + 8\n" + " cmp r1, r0\n" + " bne ._1186 @cond_branch\n" + " ldr r0, ._1177 + 12\n" + " add r1, r2, r0\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " b ._1187\n" + "._1178:\n" + " .align 2, 0\n" + "._1177:\n" + " .word gBattleBankFunc\n" + " .word gActiveBank\n" + " .word sub_802C098+1\n" + " .word 0x160fd\n" + "._1171:\n" + " ldr r1, ._1180\n" + " mov r0, #0x1\n" + " strh r0, [r1, #0x2c]\n" + " strh r0, [r1, #0x2e]\n" + " ldr r0, ._1180 + 4\n" + " add r1, r2, r0\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " ldr r0, ._1180 + 8\n" + " add r1, r2, r0\n" + " mov r0, #0x80\n" + " b ._1187\n" + "._1181:\n" + " .align 2, 0\n" + "._1180:\n" + " .word gMain\n" + " .word 0x160fd\n" + " .word 0x160fe\n" + "._1172:\n" + " ldr r0, ._1184\n" + " add r3, r2, r0\n" + " ldrb r0, [r3]\n" + " sub r0, r0, #0x1\n" + " strb r0, [r3]\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._1186 @cond_branch\n" + " ldr r1, ._1184 + 4\n" + " mov r0, #0x1\n" + " strh r0, [r1, #0x2c]\n" + " strh r0, [r1, #0x2e]\n" + " ldr r0, ._1184 + 8\n" + " add r1, r2, r0\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " strb r0, [r1]\n" + " mov r0, #0x80\n" + " strb r0, [r3]\n" + " b ._1186\n" + "._1185:\n" + " .align 2, 0\n" + "._1184:\n" + " .word 0x160fe\n" + " .word gMain\n" + " .word 0x160fd\n" + "._1173:\n" + " ldr r0, ._1188\n" + " add r1, r2, r0\n" + " ldrb r0, [r1]\n" + " sub r0, r0, #0x1\n" + " strb r0, [r1]\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._1186 @cond_branch\n" + " ldr r1, ._1188 + 4\n" + " mov r0, #0x1\n" + " strh r0, [r1, #0x2c]\n" + " strh r0, [r1, #0x2e]\n" + " ldr r0, ._1188 + 8\n" + " add r1, r2, r0\n" + " ldrb r0, [r1]\n" + " add r0, r0, #0x1\n" + " b ._1187\n" + "._1189:\n" + " .align 2, 0\n" + "._1188:\n" + " .word 0x160fe\n" + " .word gMain\n" + " .word 0x160fd\n" + "._1174:\n" + " ldr r0, ._1190\n" + " add r1, r2, r0\n" + " mov r0, #0x0\n" + "._1187:\n" + " strb r0, [r1]\n" + "._1186:\n" + " pop {r0}\n" + " bx r0\n" + "._1191:\n" + " .align 2, 0\n" + "._1190:\n" + " .word 0x160fd\n" + "\n" + ); +} + +__attribute__((naked)) +void debug_sub_80139E4() +{ + asm( + " push {r4, r5, lr}\n" + " ldr r0, ._1198\n" + " ldrb r1, [r0]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r4, r0, #0x18\n" + " cmp r4, #0\n" + " beq ._1192 @cond_branch\n" + " ldr r2, ._1198 + 4\n" + " mov r0, #0x0\n" + " strb r0, [r2]\n" + " ldr r1, ._1198 + 8\n" + " ldrb r0, [r1]\n" + " cmp r0, #0\n" + " beq ._1193 @cond_branch\n" + " add r4, r2, #0\n" + " add r5, r1, #0\n" + "._1194:\n" + " bl debug_sub_80138CC\n" + " ldrb r0, [r4]\n" + " add r0, r0, #0x1\n" + " strb r0, [r4]\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldrb r1, [r5]\n" + " cmp r0, r1\n" + " bcc ._1194 @cond_branch\n" + "._1193:\n" + " ldr r0, ._1198 + 12\n" + " ldr r0, [r0]\n" + " bl gScriptFuncs_End+0x3cf4\n" + " ldr r1, ._1198 + 4\n" + " mov r0, #0x0\n" + " strb r0, [r1]\n" + " ldr r0, ._1198 + 8\n" + " ldrb r0, [r0]\n" + " cmp r0, #0\n" + " beq ._1200 @cond_branch\n" + " ldr r5, ._1198 + 16\n" + " add r4, r1, #0\n" + "._1196:\n" + " ldrb r0, [r4]\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r5\n" + " ldr r0, [r0]\n" + " bl gScriptFuncs_End+0x3cf4\n" + " ldrb r0, [r4]\n" + " add r0, r0, #0x1\n" + " strb r0, [r4]\n" + " ldr r1, ._1198 + 8\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldrb r1, [r1]\n" + " cmp r0, r1\n" + " bcc ._1196 @cond_branch\n" + " b ._1200\n" + "._1199:\n" + " .align 2, 0\n" + "._1198:\n" + " .word gUnknown_02023A14+0x50\n" + " .word gActiveBank\n" + " .word gNoOfAllBanks\n" + " .word gBattleMainFunc\n" + " .word gBattleBankFunc\n" + "._1192:\n" + " ldr r0, ._1202\n" + " ldr r0, [r0]\n" + " bl gScriptFuncs_End+0x3cf4\n" + " ldr r1, ._1202 + 4\n" + " strb r4, [r1]\n" + " ldr r0, ._1202 + 8\n" + " ldrb r0, [r0]\n" + " cmp r4, r0\n" + " bcs ._1200 @cond_branch\n" + " ldr r5, ._1202 + 12\n" + " add r4, r1, #0\n" + "._1201:\n" + " ldrb r0, [r4]\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r5\n" + " ldr r0, [r0]\n" + " bl gScriptFuncs_End+0x3cf4\n" + " ldrb r0, [r4]\n" + " add r0, r0, #0x1\n" + " strb r0, [r4]\n" + " ldr r1, ._1202 + 8\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " ldrb r1, [r1]\n" + " cmp r0, r1\n" + " bcc ._1201 @cond_branch\n" + "._1200:\n" + " pop {r4, r5}\n" + " pop {r0}\n" + " bx r0\n" + "._1203:\n" + " .align 2, 0\n" + "._1202:\n" + " .word gBattleMainFunc\n" + " .word gActiveBank\n" + " .word gNoOfAllBanks\n" + " .word gBattleBankFunc\n" + "\n" + ); +} +#endif + void sub_8010824(void) { gBattleMainFunc(); @@ -1562,6 +9151,380 @@ void sub_8010824(void) gBattleBankFunc[gActiveBank](); } +#if DEBUG +__attribute__((naked)) +void sub_8010874() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " mov r0, #0x0\n" + " bl TurnValuesCleanUp\n" + " bl SpecialStatusesClear\n" + " mov r2, #0x0\n" + " mov r3, #0x0\n" + " ldr r0, ._1215\n" + " mov sl, r0\n" + " ldr r1, ._1215 + 4\n" + " mov r9, r1\n" + " ldr r4, ._1215 + 8\n" + " mov r8, r4\n" + " ldr r0, ._1215 + 12\n" + " mov ip, r0\n" + " ldr r4, ._1215 + 16\n" + " mov r5, #0x0\n" + " ldr r7, ._1215 + 20\n" + " ldr r6, ._1215 + 24\n" + "._1205:\n" + " ldr r0, ._1215 + 28\n" + " add r0, r5, r0\n" + " str r3, [r0]\n" + " mov r1, #0x0\n" + "._1204:\n" + " add r0, r4, r1\n" + " strb r3, [r0]\n" + " add r1, r1, #0x1\n" + " cmp r1, #0x1b\n" + " bls ._1204 @cond_branch\n" + " mov r0, #0x2\n" + " strb r0, [r4, #0x16]\n" + " ldr r1, ._1215 + 32\n" + " add r0, r2, r1\n" + " strb r3, [r0]\n" + " mov r0, ip\n" + " strh r3, [r0]\n" + " mov r1, r8\n" + " strh r3, [r1]\n" + " mov r0, r9\n" + " strh r3, [r0]\n" + " mov r1, sl\n" + " strh r3, [r1]\n" + " ldr r0, ._1215 + 36\n" + " add r1, r2, r0\n" + " mov r0, #0xff\n" + " strb r0, [r1]\n" + " strh r3, [r6]\n" + " strh r3, [r7]\n" + " ldr r1, ._1215 + 40\n" + " add r0, r5, r1\n" + " str r3, [r0]\n" + " mov r0, #0x2\n" + " add sl, sl, r0\n" + " add r9, r9, r0\n" + " add r8, r8, r0\n" + " add ip, ip, r0\n" + " add r4, r4, #0x1c\n" + " add r5, r5, #0x4\n" + " add r7, r7, #0x2\n" + " add r6, r6, #0x2\n" + " add r2, r2, #0x1\n" + " cmp r2, #0x3\n" + " ble ._1205 @cond_branch\n" + " mov r5, #0x0\n" + " ldr r3, ._1215 + 44\n" + " ldr r4, ._1215 + 48\n" + " mov r2, #0x1\n" + "._1207:\n" + " strh r5, [r4]\n" + " mov r1, #0x0\n" + "._1206:\n" + " add r0, r3, r1\n" + " strb r5, [r0]\n" + " add r1, r1, #0x1\n" + " cmp r1, #0xb\n" + " bls ._1206 @cond_branch\n" + " add r3, r3, #0xc\n" + " add r4, r4, #0x2\n" + " sub r2, r2, #0x1\n" + " cmp r2, #0\n" + " bge ._1207 @cond_branch\n" + " mov r1, #0x0\n" + " ldr r2, ._1215 + 52\n" + " strb r1, [r2]\n" + " ldr r3, ._1215 + 56\n" + " strb r1, [r3]\n" + " ldr r4, ._1215 + 60\n" + " strh r1, [r4]\n" + " ldr r1, ._1215 + 64\n" + " mov r2, #0x0\n" + " mov r3, #0x0\n" + "._1208:\n" + " add r0, r1, r2\n" + " strb r3, [r0]\n" + " add r2, r2, #0x1\n" + " cmp r2, #0x2b\n" + " bls ._1208 @cond_branch\n" + " mov r0, #0x0\n" + " ldr r1, ._1215 + 68\n" + " str r0, [r1]\n" + " ldr r2, ._1215 + 72\n" + " ldrh r1, [r2]\n" + " mov r0, #0x2\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._1210 @cond_branch\n" + " ldr r3, ._1215 + 76\n" + " ldrb r1, [r3, #0x15]\n" + " mov r0, #0x4\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._1210 @cond_branch\n" + " mov r0, #0x80\n" + " ldr r4, ._1215 + 68\n" + " str r0, [r4]\n" + "._1210:\n" + " ldr r1, ._1215 + 76\n" + " ldrb r0, [r1, #0x15]\n" + " lsl r0, r0, #0x1e\n" + " lsr r0, r0, #0x1f\n" + " ldr r3, ._1215 + 80\n" + " ldr r4, ._1215 + 84\n" + " add r2, r3, r4\n" + " mov r1, #0x0\n" + " strb r0, [r2]\n" + " ldr r0, ._1215 + 88\n" + " strb r1, [r0]\n" + " ldr r2, ._1215 + 92\n" + " strb r1, [r2]\n" + " ldr r3, ._1215 + 96\n" + " str r1, [r3]\n" + " mov r2, #0x0\n" + " ldr r4, ._1215 + 100\n" + " strh r1, [r4]\n" + " ldr r1, ._1215 + 80\n" + " ldr r3, ._1215 + 104\n" + " add r0, r1, r3\n" + " strb r2, [r0]\n" + " ldr r4, ._1215 + 108\n" + " add r0, r1, r4\n" + " strb r2, [r0]\n" + " ldr r1, ._1215 + 112\n" + " mov r2, #0x0\n" + " add r0, r1, #7\n" + "._1211:\n" + " strb r2, [r0]\n" + " sub r0, r0, #0x1\n" + " cmp r0, r1\n" + " bge ._1211 @cond_branch\n" + " mov r5, #0x0\n" + " ldr r0, ._1215 + 116\n" + " strh r5, [r0]\n" + " mov r0, #0x0\n" + " ldr r1, ._1215 + 120\n" + " str r0, [r1]\n" + " ldr r2, ._1215 + 124\n" + " strh r0, [r2]\n" + " ldr r4, ._1215 + 80\n" + " ldr r3, ._1215 + 128\n" + " add r0, r4, r3\n" + " strb r5, [r0]\n" + " ldr r1, ._1215 + 132\n" + " add r0, r4, r1\n" + " strb r5, [r0]\n" + " ldr r2, ._1215 + 136\n" + " strb r5, [r2]\n" + " ldr r3, ._1215 + 140\n" + " strb r5, [r3]\n" + " sub r1, r1, #0x29\n" + " add r0, r4, r1\n" + " strb r5, [r0]\n" + " ldr r2, ._1215 + 144\n" + " add r0, r4, r2\n" + " strb r5, [r0]\n" + " ldr r3, ._1215 + 148\n" + " add r0, r4, r3\n" + " strb r5, [r0]\n" + " ldr r0, ._1215 + 152\n" + " mov r1, #0xb\n" + " bl GetMonData\n" + " ldr r2, ._1215 + 156\n" + " lsl r1, r0, #0x3\n" + " sub r1, r1, r0\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r2\n" + " ldrb r1, [r1, #0x8]\n" + " mov r0, #0x64\n" + " mul r0, r0, r1\n" + " ldr r1, ._1215 + 160\n" + " bl gScriptFuncs_End+0x3d30\n" + " ldr r2, ._1215 + 164\n" + " add r1, r4, r2\n" + " strb r0, [r1]\n" + " ldr r3, ._1215 + 168\n" + " add r1, r4, r3\n" + " mov r0, #0x3\n" + " strb r0, [r1]\n" + " ldr r1, ._1215 + 172\n" + " add r0, r4, r1\n" + " strb r5, [r0]\n" + " sub r2, r2, #0x33\n" + " add r1, r4, r2\n" + " mov r0, #0x1\n" + " strb r0, [r1]\n" + " mov r2, #0x0\n" + " mov r1, #0x0\n" + "._1212:\n" + " ldr r3, ._1215 + 176\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r3, r3, #0x20\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r3, r3, #0x1c\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r3, r3, #0x8\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r3, r3, #0x10\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r3, r3, #0x8\n" + " add r0, r2, r3\n" + " add r0, r0, r4\n" + " strb r1, [r0]\n" + " add r2, r2, #0x1\n" + " cmp r2, #0x7\n" + " ble ._1212 @cond_branch\n" + " ldr r4, ._1215 + 80\n" + " ldr r1, ._1215 + 180\n" + " add r0, r4, r1\n" + " mov r2, #0x0\n" + " mov r1, #0x6\n" + " strb r1, [r0]\n" + " sub r3, r3, #0x3f\n" + " add r0, r4, r3\n" + " strb r1, [r0]\n" + " ldr r1, ._1215 + 184\n" + " add r0, r4, r1\n" + " strb r2, [r0]\n" + " ldr r3, ._1215 + 188\n" + " mov r1, #0x0\n" + " mov r2, #0xa\n" + " add r0, r3, #0\n" + " add r0, r0, #0x40\n" + "._1213:\n" + " strb r1, [r0]\n" + " sub r0, r0, #0x1\n" + " sub r2, r2, #0x1\n" + " cmp r2, #0\n" + " bge ._1213 @cond_branch\n" + " mov r1, #0x0\n" + " strb r1, [r3, #0x13]\n" + " strb r1, [r3]\n" + " strb r1, [r3, #0x1]\n" + " strb r1, [r3, #0x2]\n" + " strb r1, [r3, #0x3]\n" + " strb r1, [r3, #0x4]\n" + " ldrb r2, [r3, #0x5]\n" + " mov r0, #0x2\n" + " neg r0, r0\n" + " and r0, r0, r2\n" + " mov r2, #0x3\n" + " neg r2, r2\n" + " and r0, r0, r2\n" + " strb r0, [r3, #0x5]\n" + " strh r1, [r3, #0x20]\n" + " strh r1, [r3, #0x22]\n" + " strh r1, [r3, #0x24]\n" + " strh r1, [r3, #0x6]\n" + " strh r1, [r3, #0x26]\n" + " strh r1, [r3, #0x28]\n" + " mov r2, #0x0\n" + " add r5, r3, #0\n" + " add r5, r5, #0x8\n" + " mov r4, #0x0\n" + " add r1, r3, #0\n" + " add r1, r1, #0x14\n" + "._1214:\n" + " add r0, r2, r5\n" + " strb r4, [r0]\n" + " strb r4, [r1]\n" + " strb r4, [r1, #0x16]\n" + " add r1, r1, #0x1\n" + " add r2, r2, #0x1\n" + " cmp r2, #0x9\n" + " ble ._1214 @cond_branch\n" + " ldr r2, ._1215 + 80\n" + " ldr r3, ._1215 + 192\n" + " add r0, r2, r3\n" + " mov r1, #0x0\n" + " strb r1, [r0]\n" + " ldr r4, ._1215 + 196\n" + " add r0, r2, r4\n" + " strb r1, [r0]\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._1216:\n" + " .align 2, 0\n" + "._1215:\n" + " .word gUnknown_02024C4C\n" + " .word gUnknown_02024C44\n" + " .word gMoveHitWith\n" + " .word gLastUsedMove\n" + " .word gDisableStructs\n" + " .word gUnknown_02024C2C\n" + " .word gLockedMove\n" + " .word gStatuses3\n" + " .word gUnknown_02024C70\n" + " .word gUnknown_02024C5C\n" + " .word +0x2017100\n" + " .word gSideTimer\n" + " .word gSideAffecting\n" + " .word gBankAttacker\n" + " .word gBankTarget\n" + " .word gBattleWeather\n" + " .word gWishFutureKnock\n" + " .word gHitMarker\n" + " .word gBattleTypeFlags\n" + " .word gSaveBlock2\n" + " .word +0x2000000\n" + " .word 0x16084\n" + " .word gMultiHitCounter\n" + " .word gBattleOutcome\n" + " .word gBattleExecBuffer\n" + " .word gPaydayMoney\n" + " .word 0x17130\n" + " .word 0x17160\n" + " .word gBattleCommunication\n" + " .word gPauseCounterBattle\n" + " .word gBattleMoveDamage\n" + " .word gUnknown_02024DE8\n" + " .word 0x16002\n" + " .word 0x160a1\n" + " .word gLeveledUpInBattle\n" + " .word gAbsentBankFlags\n" + " .word 0x16086\n" + " .word 0x16087\n" + " .word gEnemyParty\n" + " .word gBaseStats\n" + " .word 0x4fb\n" + " .word 0x16089\n" + " .word 0x16088\n" + " .word 0x1601b\n" + " .word 0x160ac\n" + " .word 0x160c8\n" + " .word 0x16113\n" + " .word gBattleResults\n" + " .word 0x1609e\n" + " .word 0x1609f\n" + "\n" + ); +} +#else void sub_8010874(void) { s32 i; @@ -1663,6 +9626,7 @@ void sub_8010874(void) gBattleResults.caughtNick[i] = 0; } } +#endif void SwitchInClearStructs(void) { diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 977e91f5c..613f2ebe0 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -289,6 +289,214 @@ void BattleAI_HandleItemUseBeforeAISetup(void) BattleAI_SetupAIData(); } +#if DEBUG +__attribute__((naked)) +void BattleAI_SetupAIData() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " ldr r2, ._16\n" + " mov r4, #0x0\n" + " ldr r3, ._16 + 4\n" + " mov r1, #0x0\n" + "._9:\n" + " add r0, r2, r4\n" + " strb r1, [r0]\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x1b\n" + " bls ._9 @cond_branch\n" + " ldr r0, ._16\n" + " mov r1, #0x64\n" + " mov r4, #0x3\n" + " add r0, r0, #0x7\n" + "._10:\n" + " strb r1, [r0]\n" + " sub r0, r0, #0x1\n" + " sub r4, r4, #0x1\n" + " cmp r4, #0\n" + " bge ._10 @cond_branch\n" + " ldrb r0, [r3]\n" + " mov r1, #0x0\n" + " mov r2, #0xff\n" + " bl sub_8015A98\n" + " lsl r0, r0, #0x18\n" + " lsr r7, r0, #0x18\n" + " mov r4, #0x0\n" + " ldr r0, ._16\n" + " add r5, r0, #4\n" + " ldr r6, ._16 + 8\n" + "._12:\n" + " ldr r0, [r6]\n" + " and r0, r0, r7\n" + " cmp r0, #0\n" + " beq ._11 @cond_branch\n" + " mov r0, #0x0\n" + " strb r0, [r5]\n" + "._11:\n" + " bl Random\n" + " lsl r0, r0, #0x10\n" + " lsr r0, r0, #0x10\n" + " mov r1, #0xf\n" + " and r0, r0, r1\n" + " mov r1, #0x64\n" + " sub r1, r1, r0\n" + " strb r1, [r5, #0x14]\n" + " add r5, r5, #0x1\n" + " add r6, r6, #0x4\n" + " add r4, r4, #0x1\n" + " cmp r4, #0x3\n" + " ble ._12 @cond_branch\n" + " ldr r0, ._16 + 12\n" + " add r0, r0, #0x20\n" + " mov r1, #0x0\n" + " strb r1, [r0]\n" + " ldr r1, ._16 + 16\n" + " ldr r0, ._16 + 4\n" + " ldrb r2, [r0]\n" + " strb r2, [r1]\n" + " ldr r0, ._16 + 20\n" + " ldrh r1, [r0]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._13 @cond_branch\n" + " ldr r4, ._16 + 24\n" + " bl Random\n" + " mov r5, #0x2\n" + " and r0, r0, r5\n" + " strb r0, [r4]\n" + " ldr r0, ._16 + 28\n" + " ldrb r1, [r0]\n" + " ldr r2, ._16 + 8\n" + " ldrb r3, [r4]\n" + " lsl r0, r3, #0x2\n" + " add r0, r0, r2\n" + " ldr r0, [r0]\n" + " and r1, r1, r0\n" + " cmp r1, #0\n" + " beq ._15 @cond_branch\n" + " eor r3, r3, r5\n" + " strb r3, [r4]\n" + " b ._15\n" + "._17:\n" + " .align 2, 0\n" + "._16:\n" + " .word +0x2016800\n" + " .word gActiveBank\n" + " .word gBitTable\n" + " .word +0x2016c00\n" + " .word gBankAttacker\n" + " .word gBattleTypeFlags\n" + " .word gBankTarget\n" + " .word gAbsentBankFlags\n" + "._13:\n" + " ldr r0, ._20\n" + " mov r1, #0x1\n" + " eor r1, r1, r2\n" + " strb r1, [r0]\n" + "._15:\n" + " ldr r0, ._20 + 4\n" + " ldrh r1, [r0]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._18 @cond_branch\n" + " ldr r1, ._20 + 8\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x17\n" + " b ._27\n" + "._21:\n" + " .align 2, 0\n" + "._20:\n" + " .word gBankTarget\n" + " .word gBattleTypeFlags\n" + " .word +0x2016800\n" + "._18:\n" + " mov r2, #0x80\n" + " lsl r2, r2, #0x3\n" + " add r0, r2, #0\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._22 @cond_branch\n" + " ldr r1, ._24\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x16\n" + " b ._27\n" + "._25:\n" + " .align 2, 0\n" + "._24:\n" + " .word +0x2016800\n" + "._22:\n" + " mov r0, #0x10\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._26 @cond_branch\n" + " ldr r1, ._28\n" + " mov r0, #0x80\n" + " lsl r0, r0, #0x18\n" + " b ._27\n" + "._29:\n" + " .align 2, 0\n" + "._28:\n" + " .word +0x2016800\n" + "._26:\n" + " mov r0, #0x90\n" + " lsl r0, r0, #0x4\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " bne ._30 @cond_branch\n" + " ldr r1, ._33\n" + " ldrh r0, [r1]\n" + " cmp r0, r2\n" + " bne ._31 @cond_branch\n" + "._30:\n" + " ldr r1, ._33 + 4\n" + " mov r0, #0x7\n" + "._27:\n" + " str r0, [r1, #0xc]\n" + " add r3, r1, #0\n" + " b ._32\n" + "._34:\n" + " .align 2, 0\n" + "._33:\n" + " .word gTrainerBattleOpponent\n" + " .word +0x2016800\n" + "._31:\n" + " ldr r3, ._36\n" + " ldr r2, ._36 + 4\n" + " ldrh r1, [r1]\n" + " lsl r0, r1, #0x2\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x3\n" + " add r2, r2, #0x1c\n" + " add r0, r0, r2\n" + " ldr r0, [r0]\n" + " str r0, [r3, #0xc]\n" + "._32:\n" + " ldr r0, ._36 + 8\n" + " ldrb r1, [r0]\n" + " mov r0, #0x1\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._35 @cond_branch\n" + " ldr r0, ._36 + 12\n" + " ldr r0, [r0]\n" + " str r0, [r3, #0xc]\n" + "._35:\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._37:\n" + " .align 2, 0\n" + "._36:\n" + " .word +0x2016800\n" + " .word gTrainers\n" + " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_02023A14+0x4c\n" + "\n" + ); +} +#else void BattleAI_SetupAIData(void) { s32 i; @@ -342,6 +550,7 @@ void BattleAI_SetupAIData(void) else // otherwise, just set aiFlags to whatever flags the trainer has set in their data. AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent].aiFlags; } +#endif u8 BattleAI_GetAIActionToUse(void) { diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index 97568d254..f7734301c 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -79,8 +79,8 @@ extern const u16 gBattleInterfaceStatusIcons_DynPal[]; static void sub_8043D5C(struct Sprite *); static const void *sub_8043CDC(u8); -static void sub_8044210(u8, s16, u8); -static void draw_status_ailment_maybe(u8); +/*static*/ void sub_8044210(u8, s16, u8); +/*static*/ void draw_status_ailment_maybe(u8); extern void sub_8045180(struct Sprite *); static void sub_8045110(struct Sprite *); static void sub_8045048(struct Sprite *); @@ -651,7 +651,7 @@ void sub_8043F44(u8 a) #define CHAR_LV_SEPARATOR CHAR_PERIOD #endif -static void sub_8043FC0(u8 a, u8 b) +/*static*/ void sub_8043FC0(u8 a, u8 b) { u8 str[30]; void *const *r7; @@ -905,7 +905,7 @@ _0804420C: .4byte 0x04000008\n\ } #endif -static void sub_8044210(u8 a, s16 b, u8 c) +/*static*/ void sub_8044210(u8 a, s16 b, u8 c) { u8 str[0x14]; u8 *ptr; @@ -1277,6 +1277,353 @@ _08044548: .4byte 0x04000008\n\ } #endif +#if DEBUG +__attribute__((naked)) +void sub_804454C() +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xfffffffc\n" + " mov r0, #0x0\n" + " mov r8, r0\n" + " ldr r0, ._150\n" + " ldrb r0, [r0]\n" + " cmp r8, r0\n" + " blt ._133 @cond_branch\n" + " b ._164\n" + "._133:\n" + " ldr r1, ._150 + 4\n" + " mov r9, r1\n" + " mov r2, #0x64\n" + " mov sl, r2\n" + " ldr r7, ._150 + 8\n" + "._165:\n" + " ldr r0, ._150 + 12\n" + " mov r6, r8\n" + " add r5, r6, r0\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x4\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " mov r1, r9\n" + " add r1, r1, #0x1c\n" + " add r0, r0, r1\n" + " ldr r1, [r0]\n" + " ldr r0, ._150 + 16\n" + " cmp r1, r0\n" + " beq ._135 @cond_branch\n" + " b ._147\n" + "._135:\n" + " ldr r0, ._150 + 20\n" + " ldrb r0, [r0]\n" + " lsl r4, r6, #0x18\n" + " cmp r0, #0\n" + " bne ._138 @cond_branch\n" + " lsr r0, r4, #0x18\n" + " bl GetBankSide\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x1\n" + " bne ._138 @cond_branch\n" + " b ._147\n" + "._138:\n" + " bl IsDoubleBattle\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._141 @cond_branch\n" + " lsr r0, r4, #0x18\n" + " bl GetBankSide\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._141 @cond_branch\n" + " b ._147\n" + "._141:\n" + " mov r0, r8\n" + " lsl r3, r0, #0x2\n" + " ldr r0, ._150 + 24\n" + " add r3, r3, r0\n" + " ldr r0, [r3]\n" + " lsl r0, r0, #0x1b\n" + " lsr r0, r0, #0x1f\n" + " mov r2, #0x1\n" + " eor r2, r2, r0\n" + " lsl r2, r2, #0x4\n" + " ldrb r0, [r3]\n" + " mov r6, #0x11\n" + " neg r6, r6\n" + " add r1, r6, #0\n" + " and r0, r0, r1\n" + " orr r0, r0, r2\n" + " strb r0, [r3]\n" + " ldr r0, [r3]\n" + " lsl r0, r0, #0x1b\n" + " lsr r6, r0, #0x1f\n" + " lsr r0, r4, #0x18\n" + " bl GetBankSide\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._143 @cond_branch\n" + " bl IsDoubleBattle\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " bne ._144 @cond_branch\n" + " b ._147\n" + "._144:\n" + " ldr r0, ._150 + 28\n" + " ldrh r1, [r0]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " lsl r0, r0, #0x10\n" + " lsr r2, r0, #0x10\n" + " cmp r2, #0\n" + " beq ._146 @cond_branch\n" + " b ._147\n" + "._146:\n" + " cmp r6, #0x1\n" + " bne ._148 @cond_branch\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x4\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r9\n" + " ldrh r0, [r0, #0x38]\n" + " lsl r0, r0, #0x18\n" + " lsr r1, r0, #0x18\n" + " str r2, [sp]\n" + " lsl r0, r1, #0x4\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r9\n" + " ldrh r1, [r0, #0x4]\n" + " lsl r1, r1, #0x16\n" + " lsr r1, r1, #0x11\n" + " ldr r0, ._150 + 32\n" + " add r1, r1, r0\n" + " mov r0, sp\n" + " ldr r2, ._150 + 36\n" + " bl gScriptFuncs_End+0x3cb4\n" + " ldrb r4, [r5]\n" + " ldrh r0, [r7]\n" + " mov r1, sl\n" + " mul r1, r1, r0\n" + " add r0, r1, #0\n" + " ldr r2, ._150 + 40\n" + " add r0, r0, r2\n" + " mov r1, #0x39\n" + " bl GetMonData\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x10\n" + " asr r1, r1, #0x10\n" + " add r0, r4, #0\n" + " mov r2, #0x0\n" + " bl sub_8044210\n" + " ldrb r4, [r5]\n" + " ldrh r0, [r7]\n" + " mov r6, sl\n" + " mul r6, r6, r0\n" + " add r0, r6, #0\n" + " ldr r1, ._150 + 40\n" + " b ._149\n" + "._151:\n" + " .align 2, 0\n" + "._150:\n" + " .word gNoOfAllBanks\n" + " .word gSprites\n" + " .word gBattlePartyID\n" + " .word gHealthboxIDs\n" + " .word SpriteCallbackDummy+1\n" + " .word gUnknown_020297ED\n" + " .word +0x2017800\n" + " .word gBattleTypeFlags\n" + " .word 0x6010000\n" + " .word 0x5000040\n" + " .word gPlayerParty\n" + "._148:\n" + " ldrb r0, [r5]\n" + " bl draw_status_ailment_maybe\n" + " ldrb r0, [r5]\n" + " ldrh r1, [r7]\n" + " mov r2, sl\n" + " mul r2, r2, r1\n" + " add r1, r2, #0\n" + " ldr r6, ._153\n" + " add r1, r1, r6\n" + " mov r2, #0x5\n" + " bl sub_8045A5C\n" + " mov r0, #0x75\n" + " bl sub_8043CDC\n" + " ldrb r2, [r5]\n" + " lsl r1, r2, #0x4\n" + " add r1, r1, r2\n" + " lsl r1, r1, #0x2\n" + " add r1, r1, r9\n" + " ldrh r1, [r1, #0x4]\n" + " lsl r1, r1, #0x16\n" + " lsr r1, r1, #0x11\n" + " ldr r2, ._153 + 4\n" + " add r1, r1, r2\n" + " ldr r2, ._153 + 8\n" + " bl gScriptFuncs_End+0x3cb4\n" + " b ._163\n" + "._154:\n" + " .align 2, 0\n" + "._153:\n" + " .word gPlayerParty\n" + " .word 0x6010680\n" + " .word 0x4000008\n" + "._143:\n" + " cmp r6, #0x1\n" + " bne ._155 @cond_branch\n" + " ldr r0, ._158\n" + " ldrh r1, [r0]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " lsl r0, r0, #0x10\n" + " lsr r2, r0, #0x10\n" + " cmp r2, #0\n" + " beq ._156 @cond_branch\n" + " ldrb r0, [r5]\n" + " ldrh r1, [r7]\n" + " mov r6, sl\n" + " mul r6, r6, r1\n" + " add r1, r6, #0\n" + " ldr r2, ._158 + 4\n" + " add r1, r1, r2\n" + " bl sub_8044338\n" + " b ._163\n" + "._159:\n" + " .align 2, 0\n" + "._158:\n" + " .word gBattleTypeFlags\n" + " .word gEnemyParty\n" + "._156:\n" + " ldrb r1, [r5]\n" + " lsl r0, r1, #0x4\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r9\n" + " ldrh r0, [r0, #0x38]\n" + " lsl r0, r0, #0x18\n" + " lsr r1, r0, #0x18\n" + " str r2, [sp]\n" + " lsl r0, r1, #0x4\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r9\n" + " ldrh r1, [r0, #0x4]\n" + " lsl r1, r1, #0x16\n" + " lsr r1, r1, #0x11\n" + " ldr r6, ._161\n" + " add r1, r1, r6\n" + " mov r0, sp\n" + " ldr r2, ._161 + 4\n" + " bl gScriptFuncs_End+0x3cb4\n" + " ldrb r4, [r5]\n" + " ldrh r0, [r7]\n" + " mov r1, sl\n" + " mul r1, r1, r0\n" + " add r0, r1, #0\n" + " ldr r2, ._161 + 8\n" + " add r0, r0, r2\n" + " mov r1, #0x39\n" + " bl GetMonData\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x10\n" + " asr r1, r1, #0x10\n" + " add r0, r4, #0\n" + " mov r2, #0x0\n" + " bl sub_8044210\n" + " ldrb r4, [r5]\n" + " ldrh r0, [r7]\n" + " mov r6, sl\n" + " mul r6, r6, r0\n" + " add r0, r6, #0\n" + " ldr r1, ._161 + 8\n" + "._149:\n" + " add r0, r0, r1\n" + " mov r1, #0x3a\n" + " bl GetMonData\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x10\n" + " asr r1, r1, #0x10\n" + " add r0, r4, #0\n" + " mov r2, #0x1\n" + " bl sub_8044210\n" + " b ._163\n" + "._162:\n" + " .align 2, 0\n" + "._161:\n" + " .word 0x6010000\n" + " .word 0x5000040\n" + " .word gEnemyParty\n" + "._155:\n" + " ldrb r0, [r5]\n" + " bl draw_status_ailment_maybe\n" + " ldrb r0, [r5]\n" + " ldrh r1, [r7]\n" + " mov r6, #0x64\n" + " mul r1, r1, r6\n" + " ldr r4, ._166\n" + " add r1, r1, r4\n" + " mov r2, #0x5\n" + " bl sub_8045A5C\n" + " ldr r0, ._166 + 4\n" + " ldrh r1, [r0]\n" + " mov r0, #0x80\n" + " and r0, r0, r1\n" + " cmp r0, #0\n" + " beq ._163 @cond_branch\n" + " ldrb r0, [r5]\n" + " ldrh r1, [r7]\n" + " mul r1, r1, r6\n" + " add r1, r1, r4\n" + " mov r2, #0x4\n" + " bl sub_8045A5C\n" + "._163:\n" + " ldr r0, ._166 + 8\n" + " add r0, r0, r8\n" + " ldrb r1, [r0]\n" + " lsl r0, r1, #0x4\n" + " add r0, r0, r1\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r9\n" + " ldrh r1, [r0, #0x3c]\n" + " mov r2, #0x1\n" + " eor r1, r1, r2\n" + " strh r1, [r0, #0x3c]\n" + "._147:\n" + " add r7, r7, #0x2\n" + " mov r2, #0x1\n" + " add r8, r8, r2\n" + " ldr r0, ._166 + 12\n" + " ldrb r0, [r0]\n" + " cmp r8, r0\n" + " bge ._164 @cond_branch\n" + " b ._165\n" + "._164:\n" + " add sp, sp, #0x4\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._167:\n" + " .align 2, 0\n" + "._166:\n" + " .word gEnemyParty\n" + " .word gBattleTypeFlags\n" + " .word gHealthboxIDs\n" + " .word gNoOfAllBanks\n" + "\n" + ); +} +#else void sub_804454C(void) { s32 i; @@ -1344,6 +1691,7 @@ void sub_804454C(void) } } } +#endif // This function almost matches except for just two instructions around 0x08044B52 that are swapped. #ifdef NONMATCHING @@ -2359,7 +2707,7 @@ void sub_8045180(struct Sprite *sprite) sprite->pos2.y = gSprites[spriteId].pos2.y; } -static void sub_80451A0(u8 a, struct Pokemon *pkmn) +/*static*/ void sub_80451A0(u8 a, struct Pokemon *pkmn) { u8 nickname[POKEMON_NAME_LENGTH]; u8 gender; @@ -2507,7 +2855,7 @@ static void sub_8045458(u8 a, u8 b) } } -static void draw_status_ailment_maybe(u8 a) +/*static*/ void draw_status_ailment_maybe(u8 a) { s32 r4; s32 r4_2; @@ -2649,7 +2997,7 @@ static u8 sub_80457E8(u8 a, u8 b) return ret; } -static void sub_80458B0(u8 a) +/*static*/ void sub_80458B0(u8 a) { u8 *r6; u8 r8; @@ -2675,7 +3023,7 @@ static void sub_80458B0(u8 a) } -static void sub_8045998(u8 a) +/*static*/ void sub_8045998(u8 a) { u8 *r7; u8 status; @@ -2697,6 +3045,310 @@ static void sub_8045998(u8 a) } } +#ifdef DEBUG +__attribute__((naked)) +void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) +{ + asm( + " push {r4, r5, r6, r7, lr}\n" + " mov r7, sl\n" + " mov r6, r9\n" + " mov r5, r8\n" + " push {r5, r6, r7}\n" + " add sp, sp, #0xfffffff8\n" + " mov r9, r1\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov r8, r0\n" + " lsl r2, r2, #0x18\n" + " lsr r7, r2, #0x18\n" + " ldr r1, ._429\n" + " lsl r0, r0, #0x4\n" + " add r0, r0, r8\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r1\n" + " ldrh r0, [r0, #0x3a]\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " mov sl, r0\n" + " bl GetBankSide\n" + " lsl r0, r0, #0x18\n" + " cmp r0, #0\n" + " beq ._410 @cond_branch\n" + " b ._411\n" + "._410:\n" + " cmp r7, #0x3\n" + " beq ._412 @cond_branch\n" + " cmp r7, #0\n" + " bne ._413 @cond_branch\n" + "._412:\n" + " mov r0, r9\n" + " mov r1, #0x38\n" + " bl GetMonData\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x18\n" + " lsr r1, r1, #0x18\n" + " mov r0, r8\n" + " bl sub_8043FC0\n" + "._413:\n" + " cmp r7, #0x1\n" + " bhi ._414 @cond_branch\n" + " mov r0, r9\n" + " mov r1, #0x39\n" + " bl GetMonData\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x10\n" + " asr r1, r1, #0x10\n" + " mov r0, r8\n" + " mov r2, #0x0\n" + " bl sub_80440EC\n" + "._414:\n" + " cmp r7, #0x2\n" + " beq ._415 @cond_branch\n" + " cmp r7, #0\n" + " bne ._416 @cond_branch\n" + "._415:\n" + " mov r0, r9\n" + " mov r1, #0x3a\n" + " bl GetMonData\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x10\n" + " asr r1, r1, #0x10\n" + " mov r0, r8\n" + " mov r2, #0x1\n" + " bl sub_80440EC\n" + "._416:\n" + " cmp r7, #0x5\n" + " beq ._417 @cond_branch\n" + " cmp r7, #0\n" + " bne ._418 @cond_branch\n" + "._417:\n" + " mov r0, #0x0\n" + " bl load_gfxc_health_bar\n" + " mov r0, r9\n" + " mov r1, #0x3a\n" + " bl GetMonData\n" + " add r4, r0, #0\n" + " mov r0, r9\n" + " mov r1, #0x39\n" + " bl GetMonData\n" + " add r3, r0, #0\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " mov r0, sl\n" + " mov r1, r8\n" + " add r2, r4, #0\n" + " bl sub_8043D84\n" + " mov r0, sl\n" + " mov r1, r8\n" + " mov r2, #0x0\n" + " mov r3, #0x0\n" + " bl sub_8045C78\n" + "._418:\n" + " bl IsDoubleBattle\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " str r0, [sp, #0x4]\n" + " cmp r0, #0\n" + " bne ._421 @cond_branch\n" + " cmp r7, #0x6\n" + " beq ._420 @cond_branch\n" + " cmp r7, #0\n" + " bne ._421 @cond_branch\n" + "._420:\n" + " mov r0, #0x3\n" + " bl load_gfxc_health_bar\n" + " mov r0, r9\n" + " mov r1, #0xb\n" + " bl GetMonData\n" + " add r5, r0, #0\n" + " lsl r5, r5, #0x10\n" + " lsr r5, r5, #0x10\n" + " mov r0, r9\n" + " mov r1, #0x38\n" + " bl GetMonData\n" + " add r4, r0, #0\n" + " lsl r4, r4, #0x18\n" + " lsr r4, r4, #0x18\n" + " mov r0, r9\n" + " mov r1, #0x19\n" + " bl GetMonData\n" + " add r3, r0, #0\n" + " ldr r6, ._429 + 4\n" + " lsl r1, r4, #0x2\n" + " ldr r2, ._429 + 8\n" + " lsl r0, r5, #0x3\n" + " sub r0, r0, r5\n" + " lsl r0, r0, #0x2\n" + " add r0, r0, r2\n" + " ldrb r2, [r0, #0x13]\n" + " mov r0, #0xca\n" + " lsl r0, r0, #0x1\n" + " mul r0, r0, r2\n" + " add r1, r1, r0\n" + " add r1, r1, r6\n" + " ldr r1, [r1]\n" + " sub r3, r3, r1\n" + " add r4, r4, #0x1\n" + " lsl r4, r4, #0x2\n" + " add r4, r4, r0\n" + " add r4, r4, r6\n" + " ldr r2, [r4]\n" + " sub r2, r2, r1\n" + " ldr r0, [sp, #0x4]\n" + " str r0, [sp]\n" + " mov r0, sl\n" + " mov r1, r8\n" + " bl sub_8043D84\n" + " mov r0, sl\n" + " mov r1, r8\n" + " mov r2, #0x1\n" + " mov r3, #0x0\n" + " bl sub_8045C78\n" + "._421:\n" + " cmp r7, #0x4\n" + " beq ._422 @cond_branch\n" + " cmp r7, #0\n" + " bne ._423 @cond_branch\n" + "._422:\n" + " mov r0, r8\n" + " mov r1, r9\n" + " bl sub_80451A0\n" + "._423:\n" + " cmp r7, #0x9\n" + " beq ._424 @cond_branch\n" + " cmp r7, #0\n" + " bne ._425 @cond_branch\n" + "._424:\n" + " mov r0, r8\n" + " bl draw_status_ailment_maybe\n" + "._425:\n" + " cmp r7, #0xa\n" + " bne ._426 @cond_branch\n" + " mov r0, r8\n" + " bl sub_80458B0\n" + "._426:\n" + " add r0, r7, #0\n" + " sub r0, r0, #0xa\n" + " lsl r0, r0, #0x18\n" + " lsr r0, r0, #0x18\n" + " cmp r0, #0x1\n" + " bhi ._442 @cond_branch\n" + " mov r0, r8\n" + " bl sub_8045998\n" + " b ._442\n" + "._430:\n" + " .align 2, 0\n" + "._429:\n" + " .word gSprites\n" + " .word gExperienceTables\n" + " .word gBaseStats\n" + "._411:\n" + " cmp r7, #0x3\n" + " beq ._431 @cond_branch\n" + " cmp r7, #0\n" + " bne ._432 @cond_branch\n" + "._431:\n" + " mov r0, r9\n" + " mov r1, #0x38\n" + " bl GetMonData\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x18\n" + " lsr r1, r1, #0x18\n" + " mov r0, r8\n" + " bl sub_8043FC0\n" + "._432:\n" + " ldr r0, ._443\n" + " ldrb r0, [r0]\n" + " cmp r0, #0x1\n" + " bne ._436 @cond_branch\n" + " cmp r7, #0x1\n" + " bhi ._434 @cond_branch\n" + " mov r0, r9\n" + " mov r1, #0x39\n" + " bl GetMonData\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x10\n" + " asr r1, r1, #0x10\n" + " mov r0, r8\n" + " mov r2, #0x0\n" + " bl sub_80440EC\n" + "._434:\n" + " cmp r7, #0x2\n" + " beq ._435 @cond_branch\n" + " cmp r7, #0\n" + " bne ._436 @cond_branch\n" + "._435:\n" + " mov r0, r9\n" + " mov r1, #0x3a\n" + " bl GetMonData\n" + " add r1, r0, #0\n" + " lsl r1, r1, #0x10\n" + " asr r1, r1, #0x10\n" + " mov r0, r8\n" + " mov r2, #0x1\n" + " bl sub_80440EC\n" + "._436:\n" + " cmp r7, #0x5\n" + " beq ._437 @cond_branch\n" + " cmp r7, #0\n" + " bne ._438 @cond_branch\n" + "._437:\n" + " mov r0, #0x0\n" + " bl load_gfxc_health_bar\n" + " mov r0, r9\n" + " mov r1, #0x3a\n" + " bl GetMonData\n" + " add r4, r0, #0\n" + " mov r0, r9\n" + " mov r1, #0x39\n" + " bl GetMonData\n" + " add r3, r0, #0\n" + " mov r0, #0x0\n" + " str r0, [sp]\n" + " mov r0, sl\n" + " mov r1, r8\n" + " add r2, r4, #0\n" + " bl sub_8043D84\n" + " mov r0, sl\n" + " mov r1, r8\n" + " mov r2, #0x0\n" + " mov r3, #0x0\n" + " bl sub_8045C78\n" + "._438:\n" + " cmp r7, #0x4\n" + " beq ._439 @cond_branch\n" + " cmp r7, #0\n" + " bne ._440 @cond_branch\n" + "._439:\n" + " mov r0, r8\n" + " mov r1, r9\n" + " bl sub_80451A0\n" + "._440:\n" + " cmp r7, #0x9\n" + " beq ._441 @cond_branch\n" + " cmp r7, #0\n" + " bne ._442 @cond_branch\n" + "._441:\n" + " mov r0, r8\n" + " bl draw_status_ailment_maybe\n" + "._442:\n" + " add sp, sp, #0x8\n" + " pop {r3, r4, r5}\n" + " mov r8, r3\n" + " mov r9, r4\n" + " mov sl, r5\n" + " pop {r4, r5, r6, r7}\n" + " pop {r0}\n" + " bx r0\n" + "._444:\n" + " .align 2, 0\n" + "._443:\n" + " .word gUnknown_020297ED\n" + "\n" + ); +} +#else void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) { u8 r10; @@ -2766,6 +3418,7 @@ void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) draw_status_ailment_maybe(a); } } +#endif s32 sub_8045C78(u8 a, u8 unused1, u8 c, u8 unused2) { diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index 4979760d7..a03a215fd 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -8,9 +8,35 @@ #include "strings2.h" #include "trainer_card.h" +struct DebugStruct1 +{ + u16 var0; + u8 var1[10]; +}; + extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4]; extern u8 gBattleOutcome; +#ifdef DEBUG +const struct DebugStruct1 gUnknown_Debug_4245CC[] = +{ + { 1, _("NUMBER1") }, + { 2, _("ナンバー2") }, + { 3, _("ナンバー3") }, + { 4, _("ナンバー4") }, + { 5, _("ナンバー5") }, + { 6, _("ナンバー6") }, + { 7, _("ナンバー7") }, +}; + +const u8 gUnknown_Debug_8424620[][4] = +{ + { 1, 1, 0, 0 }, + { 2, 1, 0, 0 }, + { 3, 1, 0, 0 }, +}; +#endif + static void InitLinkBattleRecord(struct LinkBattleRecord *record) { CpuFill16(0, record, sizeof(struct LinkBattleRecord)); @@ -240,7 +266,8 @@ static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y) } } -void ShowLinkBattleRecords(void) { +void ShowLinkBattleRecords(void) +{ s32 i; Menu_DrawStdWindowFrame(1, 0, 28, 18); sub_8072BD8(gOtherText_BattleResults, 0, 1, 240); -- cgit v1.2.3 From 3ab6bf09d8d6bb86e83033e8a7138d02e3917c55 Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 17 Jan 2018 00:29:25 -0500 Subject: split out crash.c --- src/battle/battle_party_menu.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_party_menu.c b/src/battle/battle_party_menu.c index 68a97c536..ed8cf4583 100644 --- a/src/battle/battle_party_menu.c +++ b/src/battle/battle_party_menu.c @@ -40,7 +40,7 @@ extern u8 gUnknown_0202E8F6; extern u8 gUnknown_02038470[3]; extern u8 gUnknown_02038473; extern u8 gUnknown_020384F0; -extern void (*gUnknown_03004AE4)(); //don't know types yet +extern void (*gPokemonItemUseCallback)(); //don't know types yet extern struct PokemonStorage gPokemonStorage; extern void nullsub_14(); @@ -466,7 +466,7 @@ void HandleBattlePartyMenu(u8 taskId) { if (gUnknown_02038473 == 3 && GetItemEffectType(gSpecialVar_ItemId) == 10) { - gUnknown_03004AE4(taskId, gSpecialVar_ItemId, Task_80952E4); + gPokemonItemUseCallback(taskId, gSpecialVar_ItemId, Task_80952E4); return; } @@ -480,7 +480,7 @@ void HandleBattlePartyMenu(u8 taskId) else { sub_806D5A4(); - gUnknown_03004AE4(taskId, gSpecialVar_ItemId, Task_80952E4); + gPokemonItemUseCallback(taskId, gSpecialVar_ItemId, Task_80952E4); } } else -- cgit v1.2.3 From c8e231256e15362047760d094f62db5ab52c660c Mon Sep 17 00:00:00 2001 From: Thomas Winwood Date: Wed, 17 Jan 2018 05:47:02 +0000 Subject: Document sub_8121D1C, sub_8121D74 and gUnknown_084016BC These are left over from the Japanese games, which provide more variation to the attack string than the English games. --- src/battle/battle_message.c | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_message.c b/src/battle/battle_message.c index e9334ef61..ed7ab3a35 100644 --- a/src/battle/battle_message.c +++ b/src/battle/battle_message.c @@ -25,6 +25,8 @@ #include "../data/battle_strings_en.h" #endif +// This is four lists of moves which use a different attack string in Japanese +// to the default. See the documentation for sub_8121D74 for more detail. const u16 gUnknown_084016BC[] = { MOVE_SWORDS_DANCE, @@ -69,7 +71,7 @@ const u16 gUnknown_084016BC[] = MOVE_MUDDY_WATER, MOVE_IRON_DEFENSE, MOVE_BOUNCE, - MOVE_NONE, + 0, MOVE_TELEPORT, MOVE_RECOVER, MOVE_BIDE, @@ -77,7 +79,7 @@ const u16 gUnknown_084016BC[] = MOVE_FLAIL, MOVE_TAUNT, MOVE_BULK_UP, - MOVE_NONE, + 0, MOVE_MEDITATE, MOVE_AGILITY, MOVE_MIMIC, @@ -96,7 +98,7 @@ const u16 gUnknown_084016BC[] = MOVE_FAKE_TEARS, MOVE_WATER_SPORT, MOVE_CALM_MIND, - MOVE_NONE, + 0, MOVE_POUND, MOVE_SCRATCH, MOVE_VICE_GRIP, @@ -144,7 +146,7 @@ const u16 gUnknown_084016BC[] = MOVE_ENDEAVOR, MOVE_TICKLE, MOVE_COVET, - MOVE_NONE, + 0, }; const u8 gUnknown_084017A8[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // empty flags @@ -971,6 +973,10 @@ void StrCpyDecodeBattleTextBuff(u8* src, u8* dst) } } +// Loads one of two text strings into the provided buffer. This is functionally +// unused, since the value loaded into the buffer is not read; it loaded one of +// two particles (either "は" or "の") which works in tandem with sub_8121D74 +// below to effect changes in the meaning of the line. void sub_8121D1C(u8* textBuff) { s32 counter = 0; @@ -993,6 +999,24 @@ void sub_8121D1C(u8* textBuff) } } +// Appends "!" to the text buffer `dst`. In the original Japanese this looked +// into the table of moves at gUnknown_084016BC and varied the line accordingly. +// +// BattleText_Exclamation was a plain "!", used for any attack not on the list. +// It resulted in the translation "'s !". +// +// BattleText_Exclamation2 was "を つかった!". This resulted in the translation +// " used !", which was used for all attacks in English. +// +// BattleText_Exclamation3 was "した!". This was used for those moves whose +// names were verbs, such as Recover, and resulted in translations like " +// recovered itself!". +// +// BattleText_Exclamation4 was "を した!" This resulted in a translation of +// " did an !". +// +// BattleText_Exclamation5 was " こうげき!" This resulted in a translation of +// "'s attack!". void sub_8121D74(u8* dst) { s32 counter = 0; -- cgit v1.2.3 From d79f440b8d4c5af26a98011719807b05745533e1 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 17 Jan 2018 12:10:41 -0600 Subject: use 'if DEBUG' instead of 'ifdef DEBUG' --- src/battle/battle_2.c | 4 ++-- src/battle/battle_interface.c | 2 +- src/battle/battle_records.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 12b18bb52..5700d1b7e 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1258,7 +1258,7 @@ void sub_800F02C(void) memcpy(gSharedMem, gUnknown_02023A00, 0x60); } -#ifdef DEBUG +#if DEBUG __attribute__((naked)) void sub_800F104() { @@ -1554,7 +1554,7 @@ void sub_800F104(void) } #endif -#ifdef DEBUG +#if DEBUG __attribute__((naked)) void sub_800F298() { diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index f7734301c..b19547d52 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -3045,7 +3045,7 @@ static u8 sub_80457E8(u8 a, u8 b) } } -#ifdef DEBUG +#if DEBUG __attribute__((naked)) void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) { diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index a03a215fd..17e2352ff 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -17,7 +17,7 @@ struct DebugStruct1 extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4]; extern u8 gBattleOutcome; -#ifdef DEBUG +#if DEBUG const struct DebugStruct1 gUnknown_Debug_4245CC[] = { { 1, _("NUMBER1") }, -- cgit v1.2.3 From 05d18468a4b817c0976b16017ef7b6044befed7f Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 17 Jan 2018 13:18:23 -0500 Subject: Dma macro cleanup and cleanup sub_8076034 and sub_8076464 --- src/battle/anim/love_bg.c | 16 +------ src/battle/anim/scary_face.c | 16 +------ src/battle/battle_anim.c | 106 ++++++++----------------------------------- 3 files changed, 22 insertions(+), 116 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/love_bg.c b/src/battle/anim/love_bg.c index bd3d22ca6..ef524e4be 100644 --- a/src/battle/anim/love_bg.c +++ b/src/battle/anim/love_bg.c @@ -90,21 +90,7 @@ void sub_80D21F0(u8 taskId) break; case 3: sub_8078914(&subStruct); - { - u8 *addr = subStruct.field_0; - u32 size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - } + DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); DmaClear32(3, subStruct.field_4, 0x800); if (!IsContest()) REG_BG1CNT_BITFIELD.charBaseBlock = 0; diff --git a/src/battle/anim/scary_face.c b/src/battle/anim/scary_face.c index 47776a3cb..65b9637c0 100644 --- a/src/battle/anim/scary_face.c +++ b/src/battle/anim/scary_face.c @@ -98,21 +98,7 @@ void sub_80D24E0(u8 taskId) break; case 3: sub_8078914(&subStruct); - { - u8 *addr = subStruct.field_0; - u32 size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - } + DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); DmaClear32(3, subStruct.field_4, 0x800); if (!IsContest()) REG_BG1CNT_BITFIELD.charBaseBlock = 0; diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 4549d1fcb..059b8df1f 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -1910,36 +1910,19 @@ bool8 IsAnimBankSpriteVisible(u8 bank) void sub_8076034(u8 a, u8 b) { - volatile u8 pointlessZero; - u16 *addr2; u8 spriteId; if (b == 0) { + volatile u8 pointlessZero; struct UnknownStruct2 s; - u8 *addr; - u32 size; u8 r2; - u16 *addr3; sub_8078914(&s); - addr = s.unk0; - size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - pointlessZero = 0; - pointlessZero = 0; - addr2 = (void *)s.unk4; - DmaFill16(3, 0xFF, addr2, 0x1000); + DmaFill32Large(3, 0, s.unk0, 0x2000, 0x1000); + pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in? + pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in? + DmaFill16Defvars(3, 0xFF, (void *)s.unk4, 0x1000); REG_BG1CNT_BITFIELD.priority = 2; REG_BG1CNT_BITFIELD.screenSize = 1; @@ -1956,8 +1939,7 @@ void sub_8076034(u8 a, u8 b) 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); + DmaCopy32Defvars(3, gPlttBufferUnfaded + 0x100 + a * 16, (u16 *)PLTT + s.unk8 * 16, 32); if (IsContest() != 0) r2 = 0; @@ -1969,27 +1951,12 @@ void sub_8076034(u8 a, u8 b) } else { - u8 *addr; - u32 size; - u16 *addr3; + volatile u8 pointlessZero; - addr = (void *)(VRAM + 0x6000); - size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - pointlessZero = 0; - pointlessZero = 0; - addr2 = (void *)(VRAM + 0xF000); - DmaFill32(3, 0, addr2, 0x800); + DmaFill32Large(3, 0, (void *)(VRAM + 0x6000), 0x2000, 0x1000); + pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in? + pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in? + DmaFill32Defvars(3, 0, (void *)(VRAM + 0xF000), 0x800); REG_BG2CNT_BITFIELD.priority = 2; REG_BG2CNT_BITFIELD.screenSize = 1; @@ -2004,8 +1971,7 @@ void sub_8076034(u8 a, u8 b) REG_BG2VOFS = gBattle_BG2_Y; LoadPalette(gPlttBufferUnfaded + 0x100 + a * 16, 0x90, 32); - addr3 = (void *)(PLTT + 0x120); - DmaCopy32(3, gPlttBufferUnfaded + 0x100 + a * 16, addr3, 32); + DmaCopy32Defvars(3, gPlttBufferUnfaded + 0x100 + a * 16, (void *)(PLTT + 0x120), 32); sub_80E4EF8(0, 0, GetBankIdentity(a), 9, 0x6000, 0x1E, REG_BG2CNT_BITFIELD.charBaseBlock); } @@ -2060,57 +2026,25 @@ void sub_80763FC(u16 a, u16 *b, u32 c, u8 d) void sub_8076464(u8 a) { - u8 *addr; - u32 size; volatile u8 pointlessZero; struct UnknownStruct2 s; sub_8078914(&s); if (a == 0 || IsContest() != 0) { - u16 *addr2; - - addr = s.unk0; - size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - pointlessZero = 0; - pointlessZero = 0; - addr2 = s.unk4; - DmaFill32(3, 0, addr2, 0x800); + DmaFill32Large(3, 0, s.unk0, 0x2000, 0x1000); + pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in? + pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in? + DmaFill32Defvars(3, 0, s.unk4, 0x800); gBattle_BG1_X = 0; gBattle_BG1_Y = 0; } else { - u16 *addr2; - - addr = (void *)(VRAM + 0x6000); - size = 0x2000; - while (1) - { - DmaFill32(3, 0, addr, 0x1000); - addr += 0x1000; - size -= 0x1000; - if (size <= 0x1000) - { - DmaFill32(3, 0, addr, size); - break; - } - } - pointlessZero = 0; - pointlessZero = 0; - addr2 = (void *)(VRAM + 0xF000); - DmaFill32(3, 0, addr2, 0x800); + DmaFill32Large(3, 0, (void *)(VRAM + 0x6000), 0x2000, 0x1000); + pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in? + pointlessZero = 0; // is there a stubbed out Dma macro here that left the 0 load in? + DmaFill32Defvars(3, 0, (void *)(VRAM + 0xF000), 0x800); gBattle_BG2_X = 0; gBattle_BG2_Y = 0; } -- cgit v1.2.3 From 6903b3626aed4e5521243b4517c43fed3c4d0ff5 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 17 Jan 2018 13:11:10 -0600 Subject: resolve some undefined references --- src/battle/battle_2.c | 90 +++++++++++++++++++++++++-------------------------- 1 file changed, 45 insertions(+), 45 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 5700d1b7e..78fc35ba5 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -275,7 +275,7 @@ void InitBattle(void) " bl sub_80895F8\n" " ldr r4, ._10 + 32\n" " add r0, r4, #0\n" - " bl SetUpWindowConfig\n" + " bl Text_LoadWindowTemplate\n" " bl ResetPaletteFade\n" " ldr r0, ._10 + 36\n" " mov r1, #0x0\n" @@ -306,13 +306,13 @@ void InitBattle(void) "._7:\n" " ldr r0, ._10 + 76\n" " add r1, r4, #0\n" - " bl InitWindowFromConfig\n" + " bl Text_InitWindowWithTemplate\n" " ldr r0, ._10 + 80\n" " ldr r1, ._10 + 84\n" - " bl InitWindowFromConfig\n" + " bl Text_InitWindowWithTemplate\n" " ldr r0, ._10 + 88\n" " ldr r1, ._10 + 92\n" - " bl InitWindowFromConfig\n" + " bl Text_InitWindowWithTemplate\n" " bl sub_800D6D4\n" " bl sub_800DAB8\n" " bl ResetSpriteData\n" @@ -348,7 +348,7 @@ void InitBattle(void) " .word gWindowConfig_81E6C58\n" " .word gUnknown_030042A4\n" " .word gUnknown_030042A0\n" - " .word gUnknown_030042C0\n" + " .word gBattle_BG1_X\n" " .word gUnknown_030041B4\n" " .word gUnknown_03004288\n" " .word gUnknown_03004280\n" @@ -3274,10 +3274,10 @@ void debug_sub_80108B8() " bl remove_some_task\n" " ldr r4, ._507 + 84\n" " add r0, r4, #0\n" - " bl SetUpWindowConfig\n" + " bl Text_LoadWindowTemplate\n" " ldr r0, ._507 + 88\n" " add r1, r4, #0\n" - " bl InitWindowFromConfig\n" + " bl Text_InitWindowWithTemplate\n" " ldr r0, ._507 + 92\n" " strb r5, [r0]\n" " ldr r0, ._507 + 96\n" @@ -3334,7 +3334,7 @@ void debug_sub_80108B8() " .word 0x4000200\n" " .word gUnknown_030042A4\n" " .word gUnknown_030042A0\n" - " .word gUnknown_030042C0\n" + " .word gBattle_BG1_X\n" " .word gUnknown_030041B4\n" " .word gUnknown_03004288\n" " .word gUnknown_03004280\n" @@ -3987,7 +3987,7 @@ void debug_sub_8010CAC() " .align 2, 0\n" "._581:\n" " .word gUnknown_Debug_03004360\n" - " .word gUnknown_030042C0\n" + " .word gBattle_BG1_X\n" " .word gUnknown_Debug_030043A4\n" " .word gMain\n" " .word gUnknown_Debug_030043A0\n" @@ -4043,7 +4043,7 @@ void debug_sub_8010CAC() " .align 2, 0\n" "._587:\n" " .word gUnknown_Debug_03004360\n" - " .word gUnknown_030042C0\n" + " .word gBattle_BG1_X\n" " .word gUnknown_Debug_030043A4\n" " .word gMain\n" " .word gUnknown_Debug_030043A0\n" @@ -5839,7 +5839,7 @@ void debug_sub_8011D40() " .word 0x80000800\n" " .word gUnknown_030042A4\n" " .word gUnknown_030042A0\n" - " .word gUnknown_030042C0\n" + " .word gBattle_BG1_X\n" " .word gUnknown_030041B4\n" " .word gUnknown_03004288\n" " .word gUnknown_03004280\n" @@ -5912,7 +5912,7 @@ void debug_sub_8011DD4() " .word 0x9803\n" " .word gUnknown_030042A4\n" " .word gUnknown_030042A0\n" - " .word gUnknown_030042C0\n" + " .word gBattle_BG1_X\n" " .word gUnknown_030041B4\n" " .word gUnknown_03004288\n" " .word gUnknown_03004280\n" @@ -6061,7 +6061,7 @@ void debug_sub_8011EA0() " add r1, r6, #0\n" " ldr r2, [sp, #0x4]\n" " mov r3, r8\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " ldr r0, ._823 + 8\n" " bl sub_8002F44\n" " ldr r1, ._823 + 12\n" @@ -6090,7 +6090,7 @@ void debug_sub_8011EA0() " str r0, [sp]\n" " ldr r0, ._823 + 8\n" " add r1, r6, #0\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " ldr r0, ._823 + 8\n" " bl sub_8002F44\n" " mov r0, #0xff\n" @@ -6113,7 +6113,7 @@ void debug_sub_8011EA0() " add r1, r6, #0\n" " ldr r2, [sp, #0x4]\n" " mov r3, r8\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " ldr r0, ._823 + 8\n" " bl sub_8002F44\n" " b ._848\n" @@ -6171,7 +6171,7 @@ void debug_sub_8011EA0() " str r0, [sp]\n" " add r0, r6, #0\n" " mov r1, sl\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r6, #0\n" " bl sub_8002F44\n" " lsl r4, r7, #0x1\n" @@ -6199,7 +6199,7 @@ void debug_sub_8011EA0() " str r0, [sp]\n" " add r0, r6, #0\n" " mov r1, sl\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r6, #0\n" " bl sub_8002F44\n" " mov r0, #0xff\n" @@ -6250,7 +6250,7 @@ void debug_sub_8011EA0() " ldrb r0, [r4]\n" " str r0, [sp]\n" " add r0, r6, #0\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r6, #0\n" " bl sub_8002F44\n" " b ._848\n" @@ -6282,7 +6282,7 @@ void debug_sub_8011EA0() " str r0, [sp]\n" " add r0, r5, #0\n" " add r1, r6, #0\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r5, #0\n" " bl sub_8002F44\n" " mov r4, #0x0\n" @@ -6364,7 +6364,7 @@ void debug_sub_8011EA0() " str r0, [sp]\n" " add r0, r5, #0\n" " add r1, r6, #0\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r5, #0\n" " bl sub_8002F44\n" " b ._848\n" @@ -6406,7 +6406,7 @@ void debug_sub_8011EA0() " str r0, [sp]\n" " add r0, r5, #0\n" " add r1, r6, #0\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r5, #0\n" " bl sub_8002F44\n" "._848:\n" @@ -6476,7 +6476,7 @@ void debug_sub_8012294() " str r0, [sp]\n" " mov r0, sl\n" " mov r1, r9\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " mov r0, sl\n" " bl sub_8002F44\n" " ldrb r4, [r7]\n" @@ -6513,7 +6513,7 @@ void debug_sub_8012294() " str r0, [sp]\n" " mov r0, sl\n" " mov r1, r9\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " mov r0, sl\n" " bl sub_8002F44\n" " mov r0, #0xff\n" @@ -6553,7 +6553,7 @@ void debug_sub_8012294() " str r0, [sp]\n" " mov r0, sl\n" " mov r1, r9\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " mov r0, sl\n" " bl sub_8002F44\n" "._853:\n" @@ -6614,7 +6614,7 @@ void debug_sub_80123D8() " mov r1, r8\n" " mov r2, sl\n" " add r3, r7, #0\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r4, #0\n" " bl sub_8002F44\n" " lsl r5, r5, #0x1\n" @@ -6646,7 +6646,7 @@ void debug_sub_80123D8() " mov r1, r8\n" " mov r2, sl\n" " add r3, r7, #0\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r4, #0\n" " bl sub_8002F44\n" " mov r0, #0x0\n" @@ -6661,7 +6661,7 @@ void debug_sub_80123D8() " add r0, r4, #0\n" " mov r1, r8\n" " mov r3, sl\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r4, #0\n" " bl sub_8002F44\n" " ldr r1, ._858 + 12\n" @@ -6691,7 +6691,7 @@ void debug_sub_80123D8() " mov r1, r8\n" " mov r2, r9\n" " mov r3, sl\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r4, #0\n" " bl sub_8002F44\n" " b ._857\n" @@ -6718,7 +6718,7 @@ void debug_sub_80123D8() " str r0, [sp]\n" " add r0, r5, #0\n" " add r1, r6, #0\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r5, #0\n" " bl sub_8002F44\n" " ldrh r2, [r4, #0x6]\n" @@ -6727,7 +6727,7 @@ void debug_sub_80123D8() " str r0, [sp]\n" " add r0, r5, #0\n" " add r1, r6, #0\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r5, #0\n" " bl sub_8002F44\n" "._857:\n" @@ -6781,7 +6781,7 @@ void debug_sub_8012540() " str r0, [sp]\n" " add r0, r4, #0\n" " add r1, r5, #0\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r4, #0\n" " bl sub_8002F44\n" " add sp, sp, #0x4\n" @@ -6998,7 +6998,7 @@ void debug_sub_8012688() " strh r5, [r0]\n" " ldr r4, ._873 + 16\n" " add r0, r4, #0\n" - " bl SetUpWindowConfig\n" + " bl Text_LoadWindowTemplate\n" " bl ResetPaletteFade\n" " ldr r0, ._873 + 20\n" " strh r5, [r0]\n" @@ -7033,7 +7033,7 @@ void debug_sub_8012688() " strh r0, [r6]\n" " ldr r0, ._873 + 64\n" " add r1, r4, #0\n" - " bl InitWindowFromConfig\n" + " bl Text_InitWindowWithTemplate\n" " ldrh r2, [r6]\n" " lsl r0, r2, #0x3\n" " ldr r1, ._873 + 68\n" @@ -7133,7 +7133,7 @@ void debug_sub_8012688() " .word gWindowConfig_81E6C58\n" " .word gUnknown_030042A4\n" " .word gUnknown_030042A0\n" - " .word gUnknown_030042C0\n" + " .word gBattle_BG1_X\n" " .word gUnknown_030041B4\n" " .word gUnknown_03004288\n" " .word gUnknown_03004280\n" @@ -7211,7 +7211,7 @@ void debug_sub_80128B4() " add r1, r4, #0\n" " mov r2, #0x90\n" " mov r3, #0x2\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r5, #0\n" " bl sub_8002F44\n" " ldr r6, ._878 + 8\n" @@ -7237,7 +7237,7 @@ void debug_sub_80128B4() " add r1, r4, #0\n" " mov r2, #0x90\n" " mov r3, #0x2\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r5, #0\n" " bl sub_8002F44\n" " add sp, sp, #0x4\n" @@ -7282,7 +7282,7 @@ void debug_sub_8012938() " add r1, r4, #0\n" " mov r2, #0xa2\n" " mov r3, #0x2\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r6, #0\n" " bl sub_8002F44\n" " ldr r1, ._880 + 8\n" @@ -7306,7 +7306,7 @@ void debug_sub_8012938() " add r1, r4, #0\n" " mov r2, #0xa2\n" " mov r3, #0x2\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r6, #0\n" " bl sub_8002F44\n" " ldr r2, ._880 + 20\n" @@ -7622,7 +7622,7 @@ void debug_sub_8012B70() " str r0, [sp]\n" " add r0, r5, #0\n" " mov r3, #0x1a\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r5, #0\n" " bl sub_8002F44\n" " strh r6, [r4, #0xe]\n" @@ -7668,7 +7668,7 @@ void debug_sub_8012C08() " add r1, r5, #0\n" " mov r2, #0x90\n" " mov r3, #0x2\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r7, #0\n" " bl sub_8002F44\n" " mov r0, #0x0\n" @@ -7680,7 +7680,7 @@ void debug_sub_8012C08() " add r1, r5, #0\n" " mov r2, #0xa2\n" " mov r3, #0x2\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r7, #0\n" " bl sub_8002F44\n" " mov r0, #0x0\n" @@ -7705,7 +7705,7 @@ void debug_sub_8012C08() " add r0, r7, #0\n" " mov r2, #0x90\n" " mov r3, #0x2\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " b ._904\n" "._906:\n" " .align 2, 0\n" @@ -7728,7 +7728,7 @@ void debug_sub_8012C08() " add r0, r7, #0\n" " mov r2, #0x90\n" " mov r3, #0x2\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" "._904:\n" " add r5, r4, #0\n" " ldr r4, ._907 + 8\n" @@ -7741,7 +7741,7 @@ void debug_sub_8012C08() " str r0, [sp]\n" " add r0, r4, #0\n" " mov r3, #0x1a\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r4, #0\n" " bl sub_8002F44\n" " ldr r1, ._907\n" @@ -7816,7 +7816,7 @@ void debug_sub_8012D10() " str r0, [sp]\n" " add r0, r4, #0\n" " mov r3, #0x13\n" - " bl InitWindow\n" + " bl Text_InitWindow\n" " add r0, r4, #0\n" " bl sub_8002F44\n" " ldr r1, ._920 + 8\n" -- cgit v1.2.3 From 6efb614f3f3bf1b1b381bdfe220391e152fc8ebe Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 17 Jan 2018 15:49:51 -0600 Subject: add more debug things --- src/battle/battle_2.c | 140 +++++++++++++++++++++--------------------- src/battle/battle_ai.c | 2 +- src/battle/battle_interface.c | 6 +- 3 files changed, 74 insertions(+), 74 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 78fc35ba5..454b47e08 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -220,7 +220,7 @@ void InitBattle(void) " lsl r1, r1, #0x13\n" " ldr r2, ._10\n" " mov r0, sp\n" - " bl gScriptFuncs_End+0x3cb4\n" + " bl gMysteryEventScriptCmdTableEnd+0x3cb4\n" " ldr r0, ._10 + 4\n" " strh r4, [r0]\n" " sub r0, r0, #0xc\n" @@ -347,13 +347,13 @@ void InitBattle(void) " .word 0xff10\n" " .word gWindowConfig_81E6C58\n" " .word gUnknown_030042A4\n" - " .word gUnknown_030042A0\n" + " .word gBattle_BG0_Y\n" " .word gBattle_BG1_X\n" - " .word gUnknown_030041B4\n" - " .word gUnknown_03004288\n" - " .word gUnknown_03004280\n" - " .word gUnknown_030041B0\n" - " .word gUnknown_030041B8\n" + " .word gBattle_BG1_Y\n" + " .word gBattle_BG2_X\n" + " .word gBattle_BG2_Y\n" + " .word gBattle_BG3_X\n" + " .word gBattle_BG3_Y\n" " .word gUnknown_02023A14+0x50\n" " .word gBattleTerrain\n" " .word gUnknown_03004210\n" @@ -907,7 +907,7 @@ void sub_800EC9C() " ldr r2, ._116 + 4\n" " add r1, r1, r2\n" " mov r2, #0xc8\n" - " bl gScriptFuncs_End+0x5bc4\n" + " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" " b ._129\n" "._117:\n" " .align 2, 0\n" @@ -946,7 +946,7 @@ void sub_800EC9C() " ldr r2, ._126 + 4\n" " add r1, r1, r2\n" " mov r2, #0xc8\n" - " bl gScriptFuncs_End+0x5bc4\n" + " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" " b ._129\n" "._127:\n" " .align 2, 0\n" @@ -982,7 +982,7 @@ void sub_800EC9C() " add r1, r1, r0\n" " add r0, r4, #0\n" " mov r2, #0xc8\n" - " bl gScriptFuncs_End+0x5bc4\n" + " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" " ldr r1, ._134 + 8\n" " add r0, r4, r1\n" " bl shedinja_something\n" @@ -1407,7 +1407,7 @@ void sub_800F104() " add r1, r1, r0\n" " ldr r0, ._177 + 4\n" " mov r2, #0x60\n" - " bl gScriptFuncs_End+0x5bc4\n" + " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" "._174:\n" " add r7, r7, #0x1c\n" " add r4, r4, #0x1\n" @@ -1781,7 +1781,7 @@ void sub_800F298() " ldr r1, ._239 + 4\n" " mov r2, #0x96\n" " lsl r2, r2, #0x1\n" - " bl gScriptFuncs_End+0x5bc4\n" + " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" " ldr r0, ._239 + 8\n" " mov r1, #0x0\n" " bl CreateTask\n" @@ -2018,7 +2018,7 @@ void sub_800F298() "._283:\n" " add r1, r5, #0\n" " mov r2, #0xc8\n" - " bl gScriptFuncs_End+0x5bc4\n" + " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" " b ._291\n" "._293:\n" " .align 2, 0\n" @@ -2028,7 +2028,7 @@ void sub_800F298() " ldr r0, ._296\n" " add r1, r5, #0\n" " mov r2, #0xc8\n" - " bl gScriptFuncs_End+0x5bc4\n" + " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" "._291:\n" " mov r0, #0x80\n" " lsl r0, r0, #0x1\n" @@ -2185,7 +2185,7 @@ void sub_800F298() "._333:\n" " add r1, r5, #0\n" " mov r2, #0x64\n" - " bl gScriptFuncs_End+0x5bc4\n" + " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" " b ._341\n" "._343:\n" " .align 2, 0\n" @@ -2195,7 +2195,7 @@ void sub_800F298() " ldr r0, ._346\n" " add r1, r5, #0\n" " mov r2, #0x64\n" - " bl gScriptFuncs_End+0x5bc4\n" + " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" "._341:\n" " mov r0, #0x80\n" " lsl r0, r0, #0x1\n" @@ -2627,7 +2627,7 @@ void BattleMainCB2(void) " str r0, [r4]\n" " bl ZeroEnemyPartyMons\n" " mov r0, #0x5a\n" - " bl gScriptFuncs_End+0x148c\n" + " bl gMysteryEventScriptCmdTableEnd+0x148c\n" " ldr r0, ._358 + 24\n" " ldrh r1, [r0]\n" " mov r0, #0x2\n" @@ -3197,7 +3197,7 @@ void debug_sub_80108B8() asm( " push {r4, r5, lr}\n" " add sp, sp, #0xfffffffc\n" - " bl gScriptFuncs_End+0x19f4\n" + " bl gMysteryEventScriptCmdTableEnd+0x19f4\n" " mov r0, #0x0\n" " bl SetHBlankCallback\n" " mov r0, #0x0\n" @@ -3264,7 +3264,7 @@ void debug_sub_80108B8() " ldr r1, ._507 + 72\n" " add r0, r4, #0\n" " bl LZDecompressVram\n" - " bl gScriptFuncs_End+0x1a70\n" + " bl gMysteryEventScriptCmdTableEnd+0x1a70\n" " ldr r0, ._507 + 76\n" " bl SetVBlankCallback\n" " ldr r0, ._507 + 80\n" @@ -3333,13 +3333,13 @@ void debug_sub_80108B8() " .word 0x85006000\n" " .word 0x4000200\n" " .word gUnknown_030042A4\n" - " .word gUnknown_030042A0\n" + " .word gBattle_BG0_Y\n" " .word gBattle_BG1_X\n" - " .word gUnknown_030041B4\n" - " .word gUnknown_03004288\n" - " .word gUnknown_03004280\n" - " .word gUnknown_030041B0\n" - " .word gUnknown_030041B8\n" + " .word gBattle_BG1_Y\n" + " .word gBattle_BG2_X\n" + " .word gBattle_BG2_Y\n" + " .word gBattle_BG3_X\n" + " .word gBattle_BG3_Y\n" " .word 0x1f09\n" " .word 0x4801\n" " .word 0x4000050\n" @@ -3860,7 +3860,7 @@ void debug_sub_8010CAC() " strb r0, [r3, #0x15]\n" " lsl r0, r0, #0x1f\n" " lsr r0, r0, #0x1f\n" - " bl gScriptFuncs_End+0x2aa0\n" + " bl gMysteryEventScriptCmdTableEnd+0x2aa0\n" " bl debug_nullsub_3\n" "._559:\n" " ldr r4, ._565 + 12\n" @@ -4774,7 +4774,7 @@ void debug_sub_8011498() " lsl r4, r4, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x4358\n" + " bl gMysteryEventScriptCmdTableEnd+0x4358\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -4830,7 +4830,7 @@ void debug_sub_8011498() " lsl r4, r4, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x4358\n" + " bl gMysteryEventScriptCmdTableEnd+0x4358\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -4886,7 +4886,7 @@ void debug_sub_8011498() " lsl r4, r4, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x4358\n" + " bl gMysteryEventScriptCmdTableEnd+0x4358\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -4929,7 +4929,7 @@ void debug_sub_8011498() " lsl r4, r5, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x4358\n" + " bl gMysteryEventScriptCmdTableEnd+0x4358\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -4965,7 +4965,7 @@ void debug_sub_8011498() " lsl r4, r4, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x4358\n" + " bl gMysteryEventScriptCmdTableEnd+0x4358\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -5002,7 +5002,7 @@ void debug_sub_8011498() " lsl r4, r5, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x4358\n" + " bl gMysteryEventScriptCmdTableEnd+0x4358\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -5200,7 +5200,7 @@ void debug_sub_801174C() "._713:\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x3d30\n" + " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" " mov r3, #0x64\n" " mul r0, r0, r3\n" " ldr r1, ._719\n" @@ -5223,7 +5223,7 @@ void debug_sub_801174C() "._699:\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x3d30\n" + " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" " mov r2, #0x64\n" " add r1, r0, #0\n" " mul r1, r1, r2\n" @@ -5282,7 +5282,7 @@ void debug_sub_801174C() " str r0, [sp, #0xc]\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x3d30\n" + " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" " mov r3, #0x64\n" " mul r0, r0, r3\n" " ldr r1, ._726\n" @@ -5355,7 +5355,7 @@ void debug_sub_801174C() "._735:\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x3d30\n" + " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" " mov r2, #0x64\n" " mul r0, r0, r2\n" " ldr r1, ._741\n" @@ -5382,7 +5382,7 @@ void debug_sub_801174C() "._721:\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x3d30\n" + " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" " mov r2, #0x64\n" " add r1, r0, #0\n" " mul r1, r1, r2\n" @@ -5441,7 +5441,7 @@ void debug_sub_801174C() " str r0, [sp, #0xc]\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x3d30\n" + " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" " mov r2, #0x64\n" " mul r0, r0, r2\n" " ldr r1, ._750\n" @@ -5460,7 +5460,7 @@ void debug_sub_801174C() " ble ._743 @cond_branch\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x3d30\n" + " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" " mov r3, #0x64\n" " mul r0, r0, r3\n" " ldr r1, ._750\n" @@ -5838,13 +5838,13 @@ void debug_sub_8011D40() " .word 0x6004000\n" " .word 0x80000800\n" " .word gUnknown_030042A4\n" - " .word gUnknown_030042A0\n" + " .word gBattle_BG0_Y\n" " .word gBattle_BG1_X\n" - " .word gUnknown_030041B4\n" - " .word gUnknown_03004288\n" - " .word gUnknown_03004280\n" - " .word gUnknown_030041B0\n" - " .word gUnknown_030041B8\n" + " .word gBattle_BG1_Y\n" + " .word gBattle_BG2_X\n" + " .word gBattle_BG2_Y\n" + " .word gBattle_BG3_X\n" + " .word gBattle_BG3_Y\n" "\n" ); } @@ -5911,13 +5911,13 @@ void debug_sub_8011DD4() " .word 0x4000008\n" " .word 0x9803\n" " .word gUnknown_030042A4\n" - " .word gUnknown_030042A0\n" + " .word gBattle_BG0_Y\n" " .word gBattle_BG1_X\n" - " .word gUnknown_030041B4\n" - " .word gUnknown_03004288\n" - " .word gUnknown_03004280\n" - " .word gUnknown_030041B0\n" - " .word gUnknown_030041B8\n" + " .word gBattle_BG1_Y\n" + " .word gBattle_BG2_X\n" + " .word gBattle_BG2_Y\n" + " .word gBattle_BG3_X\n" + " .word gBattle_BG3_Y\n" "\n" ); } @@ -6483,7 +6483,7 @@ void debug_sub_8012294() " lsl r4, r4, #0x1\n" " add r0, r5, #0\n" " mov r1, #0x5\n" - " bl gScriptFuncs_End+0x4358\n" + " bl gMysteryEventScriptCmdTableEnd+0x4358\n" " add r5, r0, #0\n" " lsl r5, r5, #0x18\n" " lsr r5, r5, #0x15\n" @@ -7102,7 +7102,7 @@ void debug_sub_8012688() " bl SetHBlankCallback\n" " ldr r0, ._873 + 100\n" " bl SetVBlankCallback\n" - " bl gScriptFuncs_End+0x14f4\n" + " bl gMysteryEventScriptCmdTableEnd+0x14f4\n" " ldr r0, ._873 + 104\n" " mov r1, #0x0\n" " bl CreateTask\n" @@ -7132,13 +7132,13 @@ void debug_sub_8012688() " .word 0x400004c\n" " .word gWindowConfig_81E6C58\n" " .word gUnknown_030042A4\n" - " .word gUnknown_030042A0\n" + " .word gBattle_BG0_Y\n" " .word gBattle_BG1_X\n" - " .word gUnknown_030041B4\n" - " .word gUnknown_03004288\n" - " .word gUnknown_03004280\n" - " .word gUnknown_030041B0\n" - " .word gUnknown_030041B8\n" + " .word gBattle_BG1_Y\n" + " .word gBattle_BG2_X\n" + " .word gBattle_BG2_Y\n" + " .word gBattle_BG3_X\n" + " .word gBattle_BG3_Y\n" " .word gBattleTerrain\n" " .word gReservedSpritePaletteCount\n" " .word gCurrentMove\n" @@ -7764,7 +7764,7 @@ void debug_sub_8012C08() " .word gTasks\n" " .word UnkDebug0+0x432\n" " .word gUnknown_03004210\n" - " .word gUnknown_08400D7A\n" + " .word BattleText_YesNo\n" "\n" ); } @@ -8484,7 +8484,7 @@ void debug_sub_8013240() { asm( " push {lr}\n" - " bl gScriptFuncs_End+0x2fec\n" + " bl gMysteryEventScriptCmdTableEnd+0x2fec\n" " lsl r0, r0, #0x10\n" " cmp r0, #0\n" " beq ._1068 @cond_branch\n" @@ -8519,7 +8519,7 @@ void debug_sub_8013258() " lsr r4, r0, #0x10\n" " add r0, r4, #0\n" " add r1, r6, #0\n" - " bl gScriptFuncs_End+0x2f60\n" + " bl gMysteryEventScriptCmdTableEnd+0x2f60\n" " cmp r0, #0\n" " bne ._1071 @cond_branch\n" " mov r0, #0x80\n" @@ -8555,13 +8555,13 @@ void debug_sub_8013294() " lsl r0, r0, #0x18\n" " cmp r0, #0\n" " bne ._1076 @cond_branch\n" - " bl gScriptFuncs_End+0x19f4\n" + " bl gMysteryEventScriptCmdTableEnd+0x19f4\n" " add r0, r4, #0\n" " add r1, r5, #0\n" " add r2, r6, #0\n" " bl debug_sub_8013258\n" " add r4, r0, #0\n" - " bl gScriptFuncs_End+0x1a70\n" + " bl gMysteryEventScriptCmdTableEnd+0x1a70\n" " add r0, r4, #0\n" " b ._1077\n" "._1076:\n" @@ -8591,7 +8591,7 @@ void debug_sub_80132C8() " mov r1, #0x0\n" " add r2, r5, #0\n" " add r3, r6, #0\n" - " bl gScriptFuncs_End+0x2d64\n" + " bl gMysteryEventScriptCmdTableEnd+0x2d64\n" "._1078:\n" " pop {r4, r5, r6}\n" " pop {r0}\n" @@ -9066,7 +9066,7 @@ void debug_sub_80139E4() "._1193:\n" " ldr r0, ._1198 + 12\n" " ldr r0, [r0]\n" - " bl gScriptFuncs_End+0x3cf4\n" + " bl gMysteryEventScriptCmdTableEnd+0x3cf4\n" " ldr r1, ._1198 + 4\n" " mov r0, #0x0\n" " strb r0, [r1]\n" @@ -9081,7 +9081,7 @@ void debug_sub_80139E4() " lsl r0, r0, #0x2\n" " add r0, r0, r5\n" " ldr r0, [r0]\n" - " bl gScriptFuncs_End+0x3cf4\n" + " bl gMysteryEventScriptCmdTableEnd+0x3cf4\n" " ldrb r0, [r4]\n" " add r0, r0, #0x1\n" " strb r0, [r4]\n" @@ -9103,7 +9103,7 @@ void debug_sub_80139E4() "._1192:\n" " ldr r0, ._1202\n" " ldr r0, [r0]\n" - " bl gScriptFuncs_End+0x3cf4\n" + " bl gMysteryEventScriptCmdTableEnd+0x3cf4\n" " ldr r1, ._1202 + 4\n" " strb r4, [r1]\n" " ldr r0, ._1202 + 8\n" @@ -9117,7 +9117,7 @@ void debug_sub_80139E4() " lsl r0, r0, #0x2\n" " add r0, r0, r5\n" " ldr r0, [r0]\n" - " bl gScriptFuncs_End+0x3cf4\n" + " bl gMysteryEventScriptCmdTableEnd+0x3cf4\n" " ldrb r0, [r4]\n" " add r0, r0, #0x1\n" " strb r0, [r4]\n" @@ -9349,7 +9349,7 @@ void sub_8010874() " mov r0, #0x64\n" " mul r0, r0, r1\n" " ldr r1, ._1215 + 160\n" - " bl gScriptFuncs_End+0x3d30\n" + " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" " ldr r2, ._1215 + 164\n" " add r1, r4, r2\n" " strb r0, [r1]\n" diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 938d0fde1..ffc9281e4 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -318,7 +318,7 @@ void BattleAI_SetupAIData() " ldrb r0, [r3]\n" " mov r1, #0x0\n" " mov r2, #0xff\n" - " bl sub_8015A98\n" + " bl CheckMoveLimitations\n" " lsl r0, r0, #0x18\n" " lsr r7, r0, #0x18\n" " mov r4, #0x0\n" diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index b19547d52..1b6240159 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -1405,7 +1405,7 @@ void sub_804454C() " add r1, r1, r0\n" " mov r0, sp\n" " ldr r2, ._150 + 36\n" - " bl gScriptFuncs_End+0x3cb4\n" + " bl gMysteryEventScriptCmdTableEnd+0x3cb4\n" " ldrb r4, [r5]\n" " ldrh r0, [r7]\n" " mov r1, sl\n" @@ -1467,7 +1467,7 @@ void sub_804454C() " ldr r2, ._153 + 4\n" " add r1, r1, r2\n" " ldr r2, ._153 + 8\n" - " bl gScriptFuncs_End+0x3cb4\n" + " bl gMysteryEventScriptCmdTableEnd+0x3cb4\n" " b ._163\n" "._154:\n" " .align 2, 0\n" @@ -1521,7 +1521,7 @@ void sub_804454C() " add r1, r1, r6\n" " mov r0, sp\n" " ldr r2, ._161 + 4\n" - " bl gScriptFuncs_End+0x3cb4\n" + " bl gMysteryEventScriptCmdTableEnd+0x3cb4\n" " ldrb r4, [r5]\n" " ldrh r0, [r7]\n" " mov r1, sl\n" -- cgit v1.2.3 From f07cdb4c9723bdbb1fcdbbe622d39936ae5b532f Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 17 Jan 2018 17:47:46 -0500 Subject: use Dma Large loops for every while(1) Dma loop --- src/battle/battle_controller_player.c | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 0d05b7aed..f036e841f 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -2749,22 +2749,7 @@ void PlayerHandleDMATransfer(void) | (gBattleBufferA[gActiveBank][4] << 24); u16 val2 = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8); - const u8 *src = &gBattleBufferA[gActiveBank][7]; - u8 *dst = (u8 *)val1; - u32 size = val2; - - while (1) - { - if (size <= 0x1000) - { - DmaCopy16(3, src, dst, size); - break; - } - DmaCopy16(3, src, dst, 0x1000); - src += 0x1000; - dst += 0x1000; - size -= 0x1000; - } + Dma3CopyLarge16_(&gBattleBufferA[gActiveBank][7], (u8 *)val1, val2); PlayerBufferExecCompleted(); } -- cgit v1.2.3 From 233654746815b884d303cc3416c3fe6c377b4a73 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 17 Jan 2018 17:30:45 -0600 Subject: resolve more undefined references --- src/battle/battle_2.c | 86 +++++++++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 43 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 454b47e08..7a819a8ef 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -340,13 +340,13 @@ void InitBattle(void) " .word 0x5006000\n" " .word 0x400004c\n" " .word 0x5051\n" - " .word gUnknown_030042C4\n" + " .word gBattle_WIN0H\n" " .word gUnknown_03004240\n" - " .word gUnknown_03004DE0\n" + " .word gScanlineEffectRegBuffers\n" " .word gUnknown_081F9674\n" " .word 0xff10\n" - " .word gWindowConfig_81E6C58\n" - " .word gUnknown_030042A4\n" + " .word gWindowTemplate_81E6C58\n" + " .word gBattle_BG0_X\n" " .word gBattle_BG0_Y\n" " .word gBattle_BG1_X\n" " .word gBattle_BG1_Y\n" @@ -358,9 +358,9 @@ void InitBattle(void) " .word gBattleTerrain\n" " .word gUnknown_03004210\n" " .word gUnknown_030041D0\n" - " .word gWindowConfig_81E71D0\n" + " .word gWindowTemplate_81E71D0\n" " .word gUnknown_03004250\n" - " .word gWindowConfig_81E71EC\n" + " .word gWindowTemplate_81E71EC\n" " .word gReservedSpritePaletteCount\n" " .word sub_800FCFC+1\n" " .word gBattleTypeFlags\n" @@ -1068,7 +1068,7 @@ void sub_800EC9C() " .word gPreBattleCallback1\n" " .word gMain\n" " .word debug_sub_80139E4+1\n" - " .word sub_800F808+1\n" + " .word BattleMainCB2+1\n" " .word gBattleTypeFlags\n" " .word gTrainerBattleOpponent\n" "\n" @@ -2313,7 +2313,7 @@ void sub_800F298() " .word gPreBattleCallback1\n" " .word gMain\n" " .word debug_sub_80139E4+1\n" - " .word sub_800F808+1\n" + " .word BattleMainCB2+1\n" " .word gBattleTypeFlags\n" " .word gTrainerBattleOpponent\n" "\n" @@ -3332,7 +3332,7 @@ void debug_sub_80108B8() " .word 0x40000d4\n" " .word 0x85006000\n" " .word 0x4000200\n" - " .word gUnknown_030042A4\n" + " .word gBattle_BG0_X\n" " .word gBattle_BG0_Y\n" " .word gBattle_BG1_X\n" " .word gBattle_BG1_Y\n" @@ -3350,7 +3350,7 @@ void debug_sub_80108B8() " .word 0x50001e0\n" " .word debug_sub_8011D40+1\n" " .word debug_sub_8010CAC+1\n" - " .word gWindowConfig_81E6C3C\n" + " .word gWindowTemplate_81E6C3C\n" " .word gUnknown_Debug_03004370\n" " .word gUnknown_Debug_03004360\n" " .word gUnknown_Debug_030043A0\n" @@ -5837,7 +5837,7 @@ void debug_sub_8011D40() " .word +0x2000000\n" " .word 0x6004000\n" " .word 0x80000800\n" - " .word gUnknown_030042A4\n" + " .word gBattle_BG0_X\n" " .word gBattle_BG0_Y\n" " .word gBattle_BG1_X\n" " .word gBattle_BG1_Y\n" @@ -5910,7 +5910,7 @@ void debug_sub_8011DD4() "._776:\n" " .word 0x4000008\n" " .word 0x9803\n" - " .word gUnknown_030042A4\n" + " .word gBattle_BG0_X\n" " .word gBattle_BG0_Y\n" " .word gBattle_BG1_X\n" " .word gBattle_BG1_Y\n" @@ -6063,7 +6063,7 @@ void debug_sub_8011EA0() " mov r3, r8\n" " bl Text_InitWindow\n" " ldr r0, ._823 + 8\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " ldr r1, ._823 + 12\n" " mov sl, r1\n" " lsl r4, r7, #0x1\n" @@ -6092,7 +6092,7 @@ void debug_sub_8011EA0() " add r1, r6, #0\n" " bl Text_InitWindow\n" " ldr r0, ._823 + 8\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " mov r0, #0xff\n" " strb r0, [r6]\n" " ldrb r0, [r5]\n" @@ -6115,7 +6115,7 @@ void debug_sub_8011EA0() " mov r3, r8\n" " bl Text_InitWindow\n" " ldr r0, ._823 + 8\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " b ._848\n" "._824:\n" " .align 2, 0\n" @@ -6173,7 +6173,7 @@ void debug_sub_8011EA0() " mov r1, sl\n" " bl Text_InitWindow\n" " add r0, r6, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " lsl r4, r7, #0x1\n" " ldr r5, ._830 + 12\n" " ldrb r0, [r5]\n" @@ -6201,7 +6201,7 @@ void debug_sub_8011EA0() " mov r1, sl\n" " bl Text_InitWindow\n" " add r0, r6, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " mov r0, #0xff\n" " mov r1, sl\n" " strb r0, [r1]\n" @@ -6252,7 +6252,7 @@ void debug_sub_8011EA0() " add r0, r6, #0\n" " bl Text_InitWindow\n" " add r0, r6, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " b ._848\n" "._834:\n" " .align 2, 0\n" @@ -6284,7 +6284,7 @@ void debug_sub_8011EA0() " add r1, r6, #0\n" " bl Text_InitWindow\n" " add r0, r5, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " mov r4, #0x0\n" " ldr r3, ._839 + 12\n" " lsl r1, r7, #0x1\n" @@ -6366,7 +6366,7 @@ void debug_sub_8011EA0() " add r1, r6, #0\n" " bl Text_InitWindow\n" " add r0, r5, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " b ._848\n" "._850:\n" " .align 2, 0\n" @@ -6408,7 +6408,7 @@ void debug_sub_8011EA0() " add r1, r6, #0\n" " bl Text_InitWindow\n" " add r0, r5, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" "._848:\n" " add sp, sp, #0xc\n" " pop {r3, r4, r5}\n" @@ -6478,7 +6478,7 @@ void debug_sub_8012294() " mov r1, r9\n" " bl Text_InitWindow\n" " mov r0, sl\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " ldrb r4, [r7]\n" " lsl r4, r4, #0x1\n" " add r0, r5, #0\n" @@ -6515,7 +6515,7 @@ void debug_sub_8012294() " mov r1, r9\n" " bl Text_InitWindow\n" " mov r0, sl\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " mov r0, #0xff\n" " mov r1, r9\n" " strb r0, [r1]\n" @@ -6555,7 +6555,7 @@ void debug_sub_8012294() " mov r1, r9\n" " bl Text_InitWindow\n" " mov r0, sl\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" "._853:\n" " add sp, sp, #0x4\n" " pop {r3, r4, r5}\n" @@ -6616,7 +6616,7 @@ void debug_sub_80123D8() " add r3, r7, #0\n" " bl Text_InitWindow\n" " add r0, r4, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " lsl r5, r5, #0x1\n" " ldr r1, ._858 + 12\n" " ldrb r0, [r1]\n" @@ -6648,7 +6648,7 @@ void debug_sub_80123D8() " add r3, r7, #0\n" " bl Text_InitWindow\n" " add r0, r4, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " mov r0, #0x0\n" " mov r1, #0x12\n" " bl debug_sub_8010A7C\n" @@ -6663,7 +6663,7 @@ void debug_sub_80123D8() " mov r3, sl\n" " bl Text_InitWindow\n" " add r0, r4, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " ldr r1, ._858 + 12\n" " ldrb r0, [r1]\n" " mov r2, #0x46\n" @@ -6693,7 +6693,7 @@ void debug_sub_80123D8() " mov r3, sl\n" " bl Text_InitWindow\n" " add r0, r4, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " b ._857\n" "._859:\n" " .align 2, 0\n" @@ -6720,7 +6720,7 @@ void debug_sub_80123D8() " add r1, r6, #0\n" " bl Text_InitWindow\n" " add r0, r5, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " ldrh r2, [r4, #0x6]\n" " ldrb r3, [r4, #0x8]\n" " ldrb r0, [r4, #0xa]\n" @@ -6729,7 +6729,7 @@ void debug_sub_80123D8() " add r1, r6, #0\n" " bl Text_InitWindow\n" " add r0, r5, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" "._857:\n" " add sp, sp, #0x4\n" " pop {r3, r4, r5}\n" @@ -6783,7 +6783,7 @@ void debug_sub_8012540() " add r1, r5, #0\n" " bl Text_InitWindow\n" " add r0, r4, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " add sp, sp, #0x4\n" " pop {r4, r5, r6}\n" " pop {r0}\n" @@ -7130,8 +7130,8 @@ void debug_sub_8012688() " .word 0x40000d4\n" " .word 0x85006000\n" " .word 0x400004c\n" - " .word gWindowConfig_81E6C58\n" - " .word gUnknown_030042A4\n" + " .word gWindowTemplate_81E6C58\n" + " .word gBattle_BG0_X\n" " .word gBattle_BG0_Y\n" " .word gBattle_BG1_X\n" " .word gBattle_BG1_Y\n" @@ -7213,7 +7213,7 @@ void debug_sub_80128B4() " mov r3, #0x2\n" " bl Text_InitWindow\n" " add r0, r5, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " ldr r6, ._878 + 8\n" " ldrh r1, [r6]\n" " add r0, r4, #0\n" @@ -7239,7 +7239,7 @@ void debug_sub_80128B4() " mov r3, #0x2\n" " bl Text_InitWindow\n" " add r0, r5, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " add sp, sp, #0x4\n" " pop {r3}\n" " mov r8, r3\n" @@ -7284,7 +7284,7 @@ void debug_sub_8012938() " mov r3, #0x2\n" " bl Text_InitWindow\n" " add r0, r6, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " ldr r1, ._880 + 8\n" " add r0, r4, #0\n" " bl StringCopy\n" @@ -7308,7 +7308,7 @@ void debug_sub_8012938() " mov r3, #0x2\n" " bl Text_InitWindow\n" " add r0, r6, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " ldr r2, ._880 + 20\n" " ldr r1, ._880 + 24\n" " lsl r0, r5, #0x2\n" @@ -7624,7 +7624,7 @@ void debug_sub_8012B70() " mov r3, #0x1a\n" " bl Text_InitWindow\n" " add r0, r5, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " strh r6, [r4, #0xe]\n" " mov r0, #0x0\n" " bl debug_sub_8012B2C\n" @@ -7670,7 +7670,7 @@ void debug_sub_8012C08() " mov r3, #0x2\n" " bl Text_InitWindow\n" " add r0, r7, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " mov r0, #0x0\n" " mov r1, #0x7\n" " bl debug_sub_8010A7C\n" @@ -7682,7 +7682,7 @@ void debug_sub_8012C08() " mov r3, #0x2\n" " bl Text_InitWindow\n" " add r0, r7, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " mov r0, #0x0\n" " str r0, [sp]\n" " mov r0, #0x18\n" @@ -7733,7 +7733,7 @@ void debug_sub_8012C08() " add r5, r4, #0\n" " ldr r4, ._907 + 8\n" " add r0, r4, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " ldr r1, ._907 + 12\n" " mov r2, #0xa4\n" " lsl r2, r2, #0x2\n" @@ -7743,7 +7743,7 @@ void debug_sub_8012C08() " mov r3, #0x1a\n" " bl Text_InitWindow\n" " add r0, r4, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " ldr r1, ._907\n" " add r0, r5, r6\n" " lsl r0, r0, #0x3\n" @@ -7818,7 +7818,7 @@ void debug_sub_8012D10() " mov r3, #0x13\n" " bl Text_InitWindow\n" " add r0, r4, #0\n" - " bl sub_8002F44\n" + " bl Text_PrintWindow8002F44\n" " ldr r1, ._920 + 8\n" " lsl r0, r5, #0x2\n" " add r0, r0, r5\n" -- cgit v1.2.3 From 73392181fe47fd0fe5ac3702978307926a442ef4 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 17 Jan 2018 18:08:02 -0600 Subject: resolve more undefined references --- src/battle/battle_2.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 7a819a8ef..bedcb0bb6 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -238,7 +238,7 @@ void InitBattle(void) " strh r2, [r0]\n" " ldr r0, ._10 + 16\n" " strh r1, [r0]\n" - " bl dp12_8087EA4\n" + " bl ScanlineEffect_Clear\n" " ldr r0, ._10 + 20\n" " mov r3, #0xf0\n" " mov r5, #0xf0\n" @@ -272,7 +272,7 @@ void InitBattle(void) " ldr r0, [r4]\n" " ldr r1, [r4, #0x4]\n" " ldr r2, [r4, #0x8]\n" - " bl sub_80895F8\n" + " bl ScanlineEffect_SetParams\n" " ldr r4, ._10 + 32\n" " add r0, r4, #0\n" " bl Text_LoadWindowTemplate\n" @@ -300,7 +300,7 @@ void InitBattle(void) " and r0, r0, r1\n" " cmp r0, #0\n" " bne ._7 @cond_branch\n" - " bl GetBattleTerrain\n" + " bl BattleSetup_GetTerrain\n" " ldr r1, ._10 + 72\n" " strb r0, [r1]\n" "._7:\n" @@ -341,7 +341,7 @@ void InitBattle(void) " .word 0x400004c\n" " .word 0x5051\n" " .word gBattle_WIN0H\n" - " .word gUnknown_03004240\n" + " .word gBattle_WIN0V\n" " .word gScanlineEffectRegBuffers\n" " .word gUnknown_081F9674\n" " .word 0xff10\n" @@ -2641,10 +2641,10 @@ void BattleMainCB2(void) " .align 2, 0\n" "._358:\n" " .word gMain\n" - " .word gScriptResult\n" + " .word gSpecialVar_Result\n" " .word gBattleOutcome\n" " .word 0x43d\n" - " .word gUnknown_03004DC0\n" + " .word gScanlineEffect\n" " .word gPreBattleCallback1\n" " .word gBattleTypeFlags\n" " .word sub_805465C+1\n" @@ -2684,7 +2684,7 @@ void BattleMainCB2(void) " bl debug_sub_8008264\n" "._360:\n" " ldr r0, ._361 + 4\n" - " bl sub_800374C\n" + " bl Text_UpdateWindowInBattle\n" " bl UpdatePaletteFade\n" " bl RunTasks\n" " add sp, sp, #0x4\n" @@ -3255,7 +3255,7 @@ void debug_sub_80108B8() " bl LZDecompressVram\n" " ldr r0, ._507 + 60\n" " ldr r1, ._507 + 64\n" - " bl sub_800D238\n" + " bl LZDecompressWram\n" " ldr r4, ._507 + 68\n" " mov r1, #0xa0\n" " lsl r1, r1, #0x13\n" @@ -3271,7 +3271,7 @@ void debug_sub_80108B8() " bl SetMainCallback2\n" " bl ResetTasks\n" " bl ResetSpriteData\n" - " bl remove_some_task\n" + " bl ScanlineEffect_Stop\n" " ldr r4, ._507 + 84\n" " add r0, r4, #0\n" " bl Text_LoadWindowTemplate\n" @@ -3816,7 +3816,7 @@ void debug_sub_8010CAC() "._557:\n" " .align 2, 0\n" "._556:\n" - " .word gUnknown_03005E94\n" + " .word gCB2_AfterEvolution\n" " .word debug_sub_80108B8+1\n" " .word gPlayerParty\n" "._551:\n" @@ -5902,7 +5902,7 @@ void debug_sub_8011DD4() " bl LoadOam\n" " bl ProcessSpriteCopyRequests\n" " bl TransferPlttBuffer\n" - " bl sub_8089668\n" + " bl ScanlineEffect_InitHBlankDmaTransfer\n" " pop {r0}\n" " bx r0\n" "._777:\n" @@ -7167,7 +7167,7 @@ void debug_sub_8012878() " bl AnimateSprites\n" " bl BuildOamBuffer\n" " ldr r0, ._876\n" - " bl sub_800374C\n" + " bl Text_UpdateWindowInBattle\n" " bl UpdatePaletteFade\n" " bl RunTasks\n" " ldr r0, ._876 + 4\n" @@ -9472,7 +9472,7 @@ void sub_8010874() " .align 2, 0\n" "._1215:\n" " .word gUnknown_02024C4C\n" - " .word gUnknown_02024C44\n" + " .word gLastHitByType\n" " .word gMoveHitWith\n" " .word gLastUsedMove\n" " .word gDisableStructs\n" -- cgit v1.2.3 From 8835353325d9c7eba7664bde5d5a2d4c40c4376d Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 17 Jan 2018 18:24:33 -0600 Subject: resolve more undefined references --- src/battle/battle_2.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index bedcb0bb6..6d2045604 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -9473,16 +9473,16 @@ void sub_8010874() "._1215:\n" " .word gUnknown_02024C4C\n" " .word gLastHitByType\n" - " .word gMoveHitWith\n" + " .word gLastLandedMoves\n" " .word gLastUsedMove\n" " .word gDisableStructs\n" " .word gUnknown_02024C2C\n" - " .word gLockedMove\n" + " .word gLockedMoves\n" " .word gStatuses3\n" " .word gUnknown_02024C70\n" " .word gUnknown_02024C5C\n" " .word +0x2017100\n" - " .word gSideTimer\n" + " .word gSideTimers\n" " .word gSideAffecting\n" " .word gBankAttacker\n" " .word gBankTarget\n" -- cgit v1.2.3 From 2869160d630f569110ca895ff924070d626fd54b Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Wed, 17 Jan 2018 19:31:23 -0500 Subject: use Defvars instead of some Dma macros and hopefully last while(1)s --- src/battle/anim/love_bg.c | 7 +++---- src/battle/anim/scary_face.c | 5 ++--- src/battle/battle_7.c | 7 +------ src/battle/battle_anim.c | 22 ++++------------------ 4 files changed, 10 insertions(+), 31 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/love_bg.c b/src/battle/anim/love_bg.c index ef524e4be..c3828c681 100644 --- a/src/battle/anim/love_bg.c +++ b/src/battle/anim/love_bg.c @@ -25,7 +25,7 @@ static void sub_80D21F0(u8 taskId); void sub_80D2100(u8 taskId) { struct Struct_sub_8078914 subStruct; - u8* tempvar; + REG_BLDCNT = 0x3F42; REG_BLDALPHA = 0x1000; REG_BG1CNT_BITFIELD.priority = 3; @@ -38,9 +38,8 @@ void sub_80D2100(u8 taskId) REG_BG1HOFS = 0; REG_BG1VOFS = 0; sub_8078914(&subStruct); - tempvar = subStruct.field_4; - DmaFill32(3, 0x0, tempvar, 0x1000); - LZDecompressVram(&gAttractTilemap, tempvar); + DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); + LZDecompressVram(&gAttractTilemap, subStruct.field_4); LZDecompressVram(&gAttractGfx, subStruct.field_0); LoadCompressedPalette(&gAttractPal, subStruct.field_8 << 4, 32); if (IsContest()) diff --git a/src/battle/anim/scary_face.c b/src/battle/anim/scary_face.c index 65b9637c0..8d51521ee 100644 --- a/src/battle/anim/scary_face.c +++ b/src/battle/anim/scary_face.c @@ -27,7 +27,7 @@ static void sub_80D24E0(u8 taskId); void sub_80D23B4(u8 taskId) { struct Struct_sub_8078914 subStruct; - u8* tempvar; + REG_BLDCNT = 0x3F42; REG_BLDALPHA = 0x1000; REG_BG1CNT_BITFIELD.priority = 1; @@ -40,8 +40,7 @@ void sub_80D23B4(u8 taskId) REG_BG1HOFS = 0; REG_BG1VOFS = 0; sub_8078914(&subStruct); - tempvar = subStruct.field_4; - DmaFill32(3, 0x0, tempvar, 0x1000); + DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); if (IsContest()) LZDecompressVram(&gBattleAnimBackgroundTilemap_ScaryFaceContest, subStruct.field_4); else if (GetBankSide(gAnimBankTarget) == 1) diff --git a/src/battle/battle_7.c b/src/battle/battle_7.c index 00216ce05..b4c71b9c2 100644 --- a/src/battle/battle_7.c +++ b/src/battle/battle_7.c @@ -624,9 +624,6 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) } else { - const void *src; - void *dst; - if (IsContest()) { r10 = 0; @@ -676,9 +673,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c) gTransformedPersonalities[a]); } } - src = gUnknown_081FAF4C[r10]; - dst = (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32); - DmaCopy32(3, src, dst, 0x800); + DmaCopy32Defvars(3, gUnknown_081FAF4C[r10], (void *)(VRAM + 0x10000 + gSprites[gObjectBankIDs[a]].oam.tileNum * 32), 0x800); paletteOffset = 0x100 + a * 16; lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue); LZDecompressWram(lzPaletteData, gSharedMem); diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index 059b8df1f..a4540868c 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -2064,25 +2064,15 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId) if (gTasks[taskId].data[5] == 0) { - u16 *src; - u16 *dst; - 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); + DmaCopy32Defvars(3, gPlttBufferFaded + 0x100 + palIndex * 16, gPlttBufferFaded + 0x100 + s.unk8 * 16 - 256, 32); } else { - u16 *src; - u16 *dst; - 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); + DmaCopy32Defvars(3, gPlttBufferFaded + 0x100 + palIndex * 16, gPlttBufferFaded + 0x100 - 112, 32); } } @@ -2426,14 +2416,10 @@ static void LoadMoveBg(u16 bgId) if (IsContest()) { void *tilemap = gBattleAnimBackgroundTable[bgId].tilemap; - void *dmaSrc; - void *dmaDest; - LZDecompressWram(tilemap, IsContest() ? 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); + DmaCopy32Defvars(3, IsContest() ? EWRAM_14800 : EWRAM_18000, (void *)(VRAM + 0xD000), 0x800); LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(VRAM + 0x2000)); LoadCompressedPalette(gBattleAnimBackgroundTable[bgId].palette, sub_80789BC() * 16, 32); } -- cgit v1.2.3 From 8a21a49a35d91ba9b07ac5027a0560ddf1f4ad25 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 17 Jan 2018 21:04:48 -0600 Subject: add some debug changes that I missed --- src/battle/battle_2.c | 19 +- src/battle/battle_util.c | 4473 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 4482 insertions(+), 10 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 6d2045604..696f1fde0 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -9141,17 +9141,7 @@ void debug_sub_80139E4() "\n" ); } -#endif - -void sub_8010824(void) -{ - gBattleMainFunc(); - for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) - gBattleBankFunc[gActiveBank](); -} - -#if DEBUG __attribute__((naked)) void sub_8010874() { @@ -9525,6 +9515,15 @@ void sub_8010874() ); } #else + +void sub_8010824(void) +{ + gBattleMainFunc(); + + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + gBattleBankFunc[gActiveBank](); +} + void sub_8010874(void) { s32 i; diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c index f93664593..3bb99f845 100644 --- a/src/battle/battle_util.c +++ b/src/battle/battle_util.c @@ -1683,6 +1683,4066 @@ u8 CastformDataTypeChange(u8 bank) return formChange; } +#if DEBUG +__attribute__((naked)) +u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, sl\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5, r6, r7}\n\ + add sp, sp, #0xffffffd8\n\ + ldr r4, [sp, #0x48]\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + str r0, [sp, #0x4]\n\ + lsl r1, r1, #0x18\n\ + lsr r1, r1, #0x18\n\ + mov sl, r1\n\ + lsl r2, r2, #0x18\n\ + lsr r6, r2, #0x18\n\ + lsl r3, r3, #0x18\n\ + lsr r3, r3, #0x18\n\ + mov r8, r3\n\ + lsl r4, r4, #0x10\n\ + lsr r4, r4, #0x10\n\ + mov r0, #0x0\n\ + mov r9, r0\n\ + ldr r5, ._718\n\ + ldr r1, ._718 + 4\n\ + ldrb r0, [r5]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc ._715 @cond_branch\n\ + mov r1, sl\n\ + strb r1, [r5]\n\ +._715:\n\ + ldrb r0, [r5]\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._716 @cond_branch\n\ + ldr r1, ._718 + 8\n\ + ldrb r0, [r5]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + mov r0, #0x64\n\ + mul r1, r1, r0\n\ + ldr r0, ._718 + 12\n\ + b ._717\n\ +._719:\n\ + .align 2, 0\n\ +._718:\n\ + .word gBankAttacker\n\ + .word gNoOfAllBanks\n\ + .word gBattlePartyID\n\ + .word gPlayerParty\n\ +._716:\n\ + ldr r1, ._723\n\ + ldrb r0, [r5]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + mov r0, #0x64\n\ + mul r1, r1, r0\n\ + ldr r0, ._723 + 4\n\ +._717:\n\ + add r7, r1, r0\n\ + ldr r5, ._723 + 8\n\ + ldr r1, ._723 + 12\n\ + ldrb r0, [r5]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc ._720 @cond_branch\n\ + mov r2, sl\n\ + strb r2, [r5]\n\ +._720:\n\ + ldrb r0, [r5]\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._721 @cond_branch\n\ + ldr r1, ._723\n\ + ldrb r0, [r5]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + mov r0, #0x64\n\ + mul r1, r1, r0\n\ + ldr r0, ._723 + 16\n\ + b ._722\n\ +._724:\n\ + .align 2, 0\n\ +._723:\n\ + .word gBattlePartyID\n\ + .word gEnemyParty\n\ + .word gBankTarget\n\ + .word gNoOfAllBanks\n\ + .word gPlayerParty\n\ +._721:\n\ + ldr r1, ._729\n\ + ldrb r0, [r5]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + mov r0, #0x64\n\ + mul r1, r1, r0\n\ + ldr r0, ._729 + 4\n\ +._722:\n\ + add r5, r1, r0\n\ + add r0, r7, #0\n\ + mov r1, #0xb\n\ + bl GetMonData\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + str r0, [sp, #0x8]\n\ + add r0, r7, #0\n\ + mov r1, #0x0\n\ + bl GetMonData\n\ + str r0, [sp, #0x10]\n\ + add r0, r5, #0\n\ + mov r1, #0xb\n\ + bl GetMonData\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + str r0, [sp, #0xc]\n\ + add r0, r5, #0\n\ + mov r1, #0x0\n\ + bl GetMonData\n\ + str r0, [sp, #0x14]\n\ + ldr r0, ._729 + 8\n\ + ldrh r1, [r0]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._725 @cond_branch\n\ + bl ._1540\n\ +._725:\n\ + mov r3, r8\n\ + cmp r3, #0\n\ + beq ._727 @cond_branch\n\ + ldr r0, ._729 + 12\n\ + strb r3, [r0]\n\ + mov r8, r0\n\ + b ._728\n\ +._730:\n\ + .align 2, 0\n\ +._729:\n\ + .word gBattlePartyID\n\ + .word gEnemyParty\n\ + .word gBattleTypeFlags\n\ + .word gLastUsedAbility\n\ +._727:\n\ + ldr r2, ._733\n\ + ldr r1, ._733 + 4\n\ + mov r0, #0x58\n\ + mov r5, sl\n\ + mul r5, r5, r0\n\ + add r0, r5, #0\n\ + add r0, r0, r1\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + strb r0, [r2]\n\ + mov r8, r2\n\ +._728:\n\ + cmp r4, #0\n\ + beq ._731 @cond_branch\n\ + add r3, r4, #0\n\ + b ._732\n\ +._734:\n\ + .align 2, 0\n\ +._733:\n\ + .word gLastUsedAbility\n\ + .word gBattleMons\n\ +._731:\n\ + ldr r0, ._737\n\ + ldrh r3, [r0]\n\ +._732:\n\ + ldr r1, ._737 + 4\n\ + ldr r2, ._737 + 8\n\ + add r0, r1, r2\n\ + ldrb r0, [r0]\n\ + add r7, r1, #0\n\ + cmp r0, #0\n\ + beq ._735 @cond_branch\n\ + mov r4, #0x3f\n\ + and r4, r4, r0\n\ + b ._736\n\ +._738:\n\ + .align 2, 0\n\ +._737:\n\ + .word gCurrentMove\n\ + .word +0x2000000\n\ + .word 0x1601c\n\ +._735:\n\ + ldr r1, ._741\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r4, [r0, #0x2]\n\ +._736:\n\ + ldr r5, [sp, #0x4]\n\ + cmp r5, #0x13\n\ + bls ._739 @cond_branch\n\ + bl ._1534\n\ +._739:\n\ + lsl r0, r5, #0x2\n\ + ldr r1, ._741 + 4\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._742:\n\ + .align 2, 0\n\ +._741:\n\ + .word gBattleMoves\n\ + .word ._743\n\ +._743:\n\ + .word ._744\n\ + .word ._745\n\ + .word ._746\n\ + .word ._747\n\ + .word ._748\n\ + .word ._749\n\ + .word ._750\n\ + .word ._751\n\ + .word ._752\n\ + .word ._753\n\ + .word ._754\n\ + .word ._755\n\ + .word ._756\n\ + .word ._757\n\ + .word ._758\n\ + .word ._759\n\ + .word ._760\n\ + .word ._761\n\ + .word ._762\n\ + .word ._763\n\ +._744:\n\ + ldr r2, ._774\n\ + ldr r0, ._774 + 4\n\ + ldrb r1, [r2]\n\ + add r5, r0, #0\n\ + ldrb r0, [r5]\n\ + cmp r1, r0\n\ + bcc ._764 @cond_branch\n\ + mov r1, sl\n\ + strb r1, [r2]\n\ +._764:\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + cmp r0, #0x2d\n\ + bne ._765 @cond_branch\n\ + b ._766\n\ +._765:\n\ + cmp r0, #0x2d\n\ + bgt ._767 @cond_branch\n\ + cmp r0, #0xd\n\ + bne ._768 @cond_branch\n\ + b ._788\n\ +._768:\n\ + cmp r0, #0xd\n\ + bgt ._770 @cond_branch\n\ + cmp r0, #0x2\n\ + bne ._771 @cond_branch\n\ + b ._772\n\ +._771:\n\ + bl ._1534\n\ +._775:\n\ + .align 2, 0\n\ +._774:\n\ + .word gBankAttacker\n\ + .word gNoOfAllBanks\n\ +._770:\n\ + cmp r0, #0x16\n\ + bne ._776 @cond_branch\n\ + b ._777\n\ +._776:\n\ + cmp r0, #0x24\n\ + bne ._778 @cond_branch\n\ + b ._779\n\ +._778:\n\ + bl ._1534\n\ +._767:\n\ + cmp r0, #0x46\n\ + bne ._781 @cond_branch\n\ + b ._782\n\ +._781:\n\ + cmp r0, #0x46\n\ + bgt ._783 @cond_branch\n\ + cmp r0, #0x3b\n\ + bne ._784 @cond_branch\n\ + b ._785\n\ +._784:\n\ + bl ._1534\n\ +._783:\n\ + cmp r0, #0x4d\n\ + bne ._787 @cond_branch\n\ + b ._788\n\ +._787:\n\ + cmp r0, #0xff\n\ + beq ._789 @cond_branch\n\ + bl ._1534\n\ +._789:\n\ + bl weather_get_current\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + sub r0, r0, #0x3\n\ + cmp r0, #0xa\n\ + bhi ._814 @cond_branch\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._793\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._794:\n\ + .align 2, 0\n\ +._793:\n\ + .word ._792\n\ +._792:\n\ + .word ._805\n\ + .word ._814\n\ + .word ._805\n\ + .word ._814\n\ + .word ._814\n\ + .word ._800\n\ + .word ._814\n\ + .word ._814\n\ + .word ._814\n\ + .word ._804\n\ + .word ._805\n\ +._805:\n\ + ldr r2, ._808\n\ + ldrh r1, [r2]\n\ + mov r0, #0x7\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._814 @cond_branch\n\ + mov r0, #0x5\n\ + strh r0, [r2]\n\ + ldr r0, ._808 + 4\n\ + ldr r3, ._808 + 8\n\ + add r2, r0, r3\n\ + mov r1, #0xa\n\ + b ._811\n\ +._809:\n\ + .align 2, 0\n\ +._808:\n\ + .word gBattleWeather\n\ + .word +0x2000000\n\ + .word 0x160a4\n\ +._800:\n\ + ldr r3, ._812\n\ + ldrh r1, [r3]\n\ + mov r2, #0x18\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._814 @cond_branch\n\ + strh r2, [r3]\n\ + ldr r0, ._812 + 4\n\ + ldr r3, ._812 + 8\n\ + add r2, r0, r3\n\ + mov r1, #0xc\n\ + b ._811\n\ +._813:\n\ + .align 2, 0\n\ +._812:\n\ + .word gBattleWeather\n\ + .word +0x2000000\n\ + .word 0x160a4\n\ +._804:\n\ + ldr r3, ._818\n\ + ldrh r1, [r3]\n\ + mov r2, #0x60\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._814 @cond_branch\n\ + strh r2, [r3]\n\ + ldr r0, ._818 + 4\n\ + ldr r3, ._818 + 8\n\ + add r2, r0, r3\n\ + mov r1, #0xb\n\ +._811:\n\ + strb r1, [r2]\n\ + ldr r5, ._818 + 12\n\ + add r0, r0, r5\n\ + mov r1, sl\n\ + strb r1, [r0]\n\ + mov r0, r9\n\ + add r0, r0, #0x1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._814:\n\ + mov r2, r9\n\ + cmp r2, #0\n\ + bne ._815 @cond_branch\n\ + bl ._1540\n\ +._815:\n\ + bl weather_get_current\n\ + ldr r1, ._818 + 16\n\ + strb r0, [r1, #0x5]\n\ + ldr r0, ._818 + 20\n\ + bl BattleScriptPushCursorAndCallback\n\ + bl ._1534\n\ +._819:\n\ + .align 2, 0\n\ +._818:\n\ + .word gBattleWeather\n\ + .word +0x2000000\n\ + .word 0x160a4\n\ + .word 0x16003\n\ + .word gBattleCommunication\n\ + .word BattleScript_OverworldWeatherStarts\n\ +._772:\n\ + ldr r2, ._823\n\ + ldrh r1, [r2]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._820 @cond_branch\n\ + bl ._1534\n\ +._820:\n\ + mov r0, #0x5\n\ + strh r0, [r2]\n\ + ldr r0, ._823 + 4\n\ + bl BattleScriptPushCursorAndCallback\n\ + ldr r0, ._823 + 8\n\ + ldr r3, ._823 + 12\n\ + add r0, r0, r3\n\ + mov r5, sl\n\ + strb r5, [r0]\n\ + bl ._1392\n\ +._824:\n\ + .align 2, 0\n\ +._823:\n\ + .word gBattleWeather\n\ + .word BattleScript_DrizzleActivates\n\ + .word +0x2000000\n\ + .word 0x16003\n\ +._766:\n\ + ldr r2, ._828\n\ + ldrh r1, [r2]\n\ + mov r0, #0x10\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._825 @cond_branch\n\ + bl ._1534\n\ +._825:\n\ + mov r0, #0x18\n\ + strh r0, [r2]\n\ + ldr r0, ._828 + 4\n\ + bl BattleScriptPushCursorAndCallback\n\ + ldr r0, ._828 + 8\n\ + ldr r1, ._828 + 12\n\ + add r0, r0, r1\n\ + mov r2, sl\n\ + strb r2, [r0]\n\ + bl ._1392\n\ +._829:\n\ + .align 2, 0\n\ +._828:\n\ + .word gBattleWeather\n\ + .word BattleScript_SandstreamActivates\n\ + .word +0x2000000\n\ + .word 0x16003\n\ +._782:\n\ + ldr r2, ._833\n\ + ldrh r1, [r2]\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._830 @cond_branch\n\ + bl ._1534\n\ +._830:\n\ + mov r0, #0x60\n\ + strh r0, [r2]\n\ + ldr r0, ._833 + 4\n\ + bl BattleScriptPushCursorAndCallback\n\ + ldr r0, ._833 + 8\n\ + ldr r3, ._833 + 12\n\ + add r0, r0, r3\n\ + mov r5, sl\n\ + strb r5, [r0]\n\ + bl ._1392\n\ +._834:\n\ + .align 2, 0\n\ +._833:\n\ + .word gBattleWeather\n\ + .word BattleScript_DroughtActivates\n\ + .word +0x2000000\n\ + .word 0x16003\n\ +._777:\n\ + ldr r0, ._838\n\ + mov r1, sl\n\ + lsl r2, r1, #0x2\n\ + add r1, r2, r1\n\ + lsl r1, r1, #0x2\n\ + add r3, r1, r0\n\ + ldrb r0, [r3]\n\ + lsl r0, r0, #0x1c\n\ + cmp r0, #0\n\ + bge ._835 @cond_branch\n\ + bl ._1534\n\ +._835:\n\ + ldr r1, ._838 + 4\n\ + add r1, r2, r1\n\ + ldr r0, [r1]\n\ + mov r2, #0x80\n\ + lsl r2, r2, #0xc\n\ + orr r0, r0, r2\n\ + str r0, [r1]\n\ + ldrb r0, [r3]\n\ + mov r1, #0x8\n\ + b ._837\n\ +._839:\n\ + .align 2, 0\n\ +._838:\n\ + .word gSpecialStatuses\n\ + .word gStatuses3\n\ +._785:\n\ + mov r0, sl\n\ + bl CastformDataTypeChange\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ + cmp r0, #0\n\ + bne ._840 @cond_branch\n\ + bl ._1540\n\ +._840:\n\ + ldr r0, ._843\n\ + bl BattleScriptPushCursorAndCallback\n\ + ldr r0, ._843 + 4\n\ + ldr r2, ._843 + 8\n\ + add r1, r0, r2\n\ + mov r3, sl\n\ + strb r3, [r1]\n\ + mov r1, r9\n\ + sub r1, r1, #0x1\n\ + ldr r5, ._843 + 12\n\ + add r0, r0, r5\n\ + strb r1, [r0]\n\ + bl ._1534\n\ +._844:\n\ + .align 2, 0\n\ +._843:\n\ + .word BattleScript_CastformChange\n\ + .word +0x2000000\n\ + .word 0x16003\n\ + .word 0x1609b\n\ +._779:\n\ + ldr r0, ._848\n\ + mov r1, sl\n\ + lsl r2, r1, #0x2\n\ + add r1, r2, r1\n\ + lsl r1, r1, #0x2\n\ + add r3, r1, r0\n\ + ldrb r0, [r3]\n\ + lsl r0, r0, #0x1b\n\ + cmp r0, #0\n\ + bge ._845 @cond_branch\n\ + bl ._1534\n\ +._845:\n\ + ldr r1, ._848 + 4\n\ + add r1, r2, r1\n\ + ldr r0, [r1]\n\ + mov r2, #0x80\n\ + lsl r2, r2, #0xd\n\ + orr r0, r0, r2\n\ + str r0, [r1]\n\ + ldrb r0, [r3]\n\ + mov r1, #0x10\n\ +._837:\n\ + orr r0, r0, r1\n\ + strb r0, [r3]\n\ + bl ._1534\n\ +._849:\n\ + .align 2, 0\n\ +._848:\n\ + .word gSpecialStatuses\n\ + .word gStatuses3\n\ +._788:\n\ + mov r6, #0x0\n\ + ldrb r5, [r5]\n\ + cmp r6, r5\n\ + bcc ._854 @cond_branch\n\ + bl ._1534\n\ +._854:\n\ + add r0, r6, #0\n\ + bl CastformDataTypeChange\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ + cmp r0, #0\n\ + beq ._852 @cond_branch\n\ + bl ._853\n\ +._852:\n\ + add r0, r6, #1\n\ + lsl r0, r0, #0x18\n\ + lsr r6, r0, #0x18\n\ + ldr r0, ._856\n\ + ldrb r0, [r0]\n\ + cmp r6, r0\n\ + bcc ._854 @cond_branch\n\ + bl ._1534\n\ +._857:\n\ + .align 2, 0\n\ +._856:\n\ + .word gNoOfAllBanks\n\ +._745:\n\ + ldr r2, ._865\n\ + mov r0, #0x58\n\ + mov r1, sl\n\ + mul r1, r1, r0\n\ + add r4, r1, r2\n\ + ldrh r0, [r4, #0x28]\n\ + cmp r0, #0\n\ + bne ._858 @cond_branch\n\ + bl ._1534\n\ +._858:\n\ + ldr r0, ._865 + 4\n\ + mov r3, sl\n\ + strb r3, [r0]\n\ + mov r3, r8\n\ + ldrb r5, [r3]\n\ + cmp r5, #0x2c\n\ + beq ._860 @cond_branch\n\ + cmp r5, #0x2c\n\ + bgt ._861 @cond_branch\n\ + cmp r5, #0x3\n\ + bne ._862 @cond_branch\n\ + b ._863\n\ +._862:\n\ + bl ._1534\n\ +._866:\n\ + .align 2, 0\n\ +._865:\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ +._861:\n\ + cmp r5, #0x36\n\ + bne ._867 @cond_branch\n\ + b ._868\n\ +._867:\n\ + cmp r5, #0x3d\n\ + beq ._869 @cond_branch\n\ + bl ._1534\n\ +._860:\n\ + mov r0, #0x0\n\ + str r0, [sp]\n\ + mov r0, #0x13\n\ + mov r1, #0x0\n\ + mov r2, #0xd\n\ + mov r3, #0x0\n\ + bl AbilityBattleEffects\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._871 @cond_branch\n\ + bl ._1534\n\ +._871:\n\ + str r0, [sp]\n\ + mov r0, #0x13\n\ + mov r1, #0x0\n\ + mov r2, #0x4d\n\ + mov r3, #0x0\n\ + bl AbilityBattleEffects\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._873 @cond_branch\n\ + bl ._1534\n\ +._873:\n\ + ldr r0, ._881\n\ + ldrh r1, [r0]\n\ + mov r0, #0x7\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._875 @cond_branch\n\ + bl ._1534\n\ +._875:\n\ + ldrh r0, [r4, #0x2c]\n\ + ldrh r1, [r4, #0x28]\n\ + cmp r0, r1\n\ + bhi ._877 @cond_branch\n\ + bl ._1534\n\ +._877:\n\ + mov r2, r8\n\ + strb r5, [r2]\n\ + ldr r0, ._881 + 4\n\ + bl BattleScriptPushCursorAndCallback\n\ + ldr r1, ._881 + 8\n\ + ldrh r0, [r4, #0x2c]\n\ + lsr r0, r0, #0x4\n\ + str r0, [r1]\n\ + cmp r0, #0\n\ + bne ._879 @cond_branch\n\ + mov r0, #0x1\n\ + str r0, [r1]\n\ +._879:\n\ + ldr r0, [r1]\n\ + neg r0, r0\n\ + str r0, [r1]\n\ + bl ._1392\n\ +._882:\n\ + .align 2, 0\n\ +._881:\n\ + .word gBattleWeather\n\ + .word BattleScript_RainDishActivates\n\ + .word gBattleMoveDamage\n\ +._869:\n\ + add r0, r2, #0\n\ + add r0, r0, #0x4c\n\ + add r5, r1, r0\n\ + ldrb r0, [r5]\n\ + cmp r0, #0\n\ + bne ._883 @cond_branch\n\ + bl ._1534\n\ +._883:\n\ + bl Random\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + mov r1, #0x3\n\ + bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + lsl r0, r0, #0x10\n\ + lsr r4, r0, #0x10\n\ + cmp r4, #0\n\ + beq ._885 @cond_branch\n\ + bl ._1534\n\ +._885:\n\ + ldr r0, [r5]\n\ + mov r1, #0x88\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._887 @cond_branch\n\ + ldr r0, ._893\n\ + ldr r1, ._893 + 4\n\ + bl StringCopy\n\ +._887:\n\ + ldr r0, [r5]\n\ + mov r1, #0x7\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._888 @cond_branch\n\ + ldr r0, ._893\n\ + ldr r1, ._893 + 8\n\ + bl StringCopy\n\ +._888:\n\ + ldr r0, [r5]\n\ + mov r1, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._889 @cond_branch\n\ + ldr r0, ._893\n\ + ldr r1, ._893 + 12\n\ + bl StringCopy\n\ +._889:\n\ + ldr r0, [r5]\n\ + mov r1, #0x10\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._890 @cond_branch\n\ + ldr r0, ._893\n\ + ldr r1, ._893 + 16\n\ + bl StringCopy\n\ +._890:\n\ + ldr r0, [r5]\n\ + mov r1, #0x20\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._891 @cond_branch\n\ + ldr r0, ._893\n\ + ldr r1, ._893 + 20\n\ + bl StringCopy\n\ +._891:\n\ + str r4, [r5]\n\ + ldr r0, ._893 + 24\n\ + ldr r4, ._893 + 28\n\ + mov r3, sl\n\ + strb r3, [r4]\n\ + ldr r1, ._893 + 32\n\ + add r0, r0, r1\n\ + strb r3, [r0]\n\ + ldr r0, ._893 + 36\n\ + bl BattleScriptPushCursorAndCallback\n\ + str r5, [sp]\n\ + mov r0, #0x0\n\ + mov r1, #0x28\n\ + mov r2, #0x0\n\ + mov r3, #0x4\n\ + bl EmitSetMonData\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + bl ._1392\n\ +._894:\n\ + .align 2, 0\n\ +._893:\n\ + .word gBattleTextBuff1\n\ + .word gStatusConditionString_PoisonJpn\n\ + .word gStatusConditionString_SleepJpn\n\ + .word gStatusConditionString_ParalysisJpn\n\ + .word gStatusConditionString_BurnJpn\n\ + .word gStatusConditionString_IceJpn\n\ + .word +0x2000000\n\ + .word gActiveBank\n\ + .word 0x16003\n\ + .word BattleScript_ShedSkinActivates\n\ +._863:\n\ + ldrb r2, [r4, #0x1b]\n\ + mov r0, #0x1b\n\ + ldsb r0, [r4, r0]\n\ + cmp r0, #0xb\n\ + ble ._895 @cond_branch\n\ + bl ._1534\n\ +._895:\n\ + ldr r0, ._900\n\ + mov r3, sl\n\ + lsl r1, r3, #0x3\n\ + sub r1, r1, r3\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x16]\n\ + cmp r0, #0x2\n\ + bne ._897 @cond_branch\n\ + bl ._1534\n\ +._897:\n\ + add r0, r2, #1\n\ + mov r2, #0x0\n\ + strb r0, [r4, #0x1b]\n\ + ldr r5, ._900 + 4\n\ + add r1, r7, r5\n\ + mov r0, #0x11\n\ + strb r0, [r1]\n\ + ldr r1, ._900 + 8\n\ + add r0, r7, r1\n\ + strb r2, [r0]\n\ + ldr r0, ._900 + 12\n\ + bl BattleScriptPushCursorAndCallback\n\ + ldr r2, ._900 + 16\n\ + add r0, r7, r2\n\ + mov r3, sl\n\ + strb r3, [r0]\n\ + bl ._1392\n\ +._901:\n\ + .align 2, 0\n\ +._900:\n\ + .word gDisableStructs\n\ + .word 0x160a4\n\ + .word 0x160a5\n\ + .word BattleScript_SpeedBoostActivates\n\ + .word 0x16003\n\ +._868:\n\ + ldr r2, ._903\n\ + ldrb r0, [r0]\n\ + lsl r1, r0, #0x3\n\ + sub r1, r1, r0\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r2\n\ + ldrb r3, [r1, #0x18]\n\ + lsl r0, r3, #0x1f\n\ + lsr r0, r0, #0x1f\n\ + mov r2, #0x1\n\ + eor r2, r2, r0\n\ + mov r0, #0x2\n\ + neg r0, r0\n\ + and r0, r0, r3\n\ + orr r0, r0, r2\n\ + strb r0, [r1, #0x18]\n\ + bl ._1534\n\ +._904:\n\ + .align 2, 0\n\ +._903:\n\ + .word gDisableStructs\n\ +._746:\n\ + mov r5, r8\n\ + ldrb r0, [r5]\n\ + cmp r0, #0x2b\n\ + beq ._905 @cond_branch\n\ + bl ._1534\n\ +._905:\n\ + mov r4, #0x0\n\ + ldr r0, ._917\n\ + ldrh r2, [r0]\n\ + ldr r5, ._917 + 4\n\ + add r1, r0, #0\n\ + cmp r2, r5\n\ + bne ._907 @cond_branch\n\ + bl ._1534\n\ +._907:\n\ + cmp r2, r3\n\ + beq ._909 @cond_branch\n\ + add r2, r1, #0\n\ +._912:\n\ + add r2, r2, #0x2\n\ + add r4, r4, #0x1\n\ + ldrh r0, [r2]\n\ + cmp r0, r5\n\ + bne ._910 @cond_branch\n\ + bl ._1534\n\ +._910:\n\ + cmp r0, r3\n\ + bne ._912 @cond_branch\n\ +._909:\n\ + lsl r0, r4, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + ldr r0, ._917 + 4\n\ + cmp r1, r0\n\ + bne ._913 @cond_branch\n\ + bl ._1534\n\ +._913:\n\ + ldr r1, ._917 + 8\n\ + ldr r0, ._917 + 12\n\ + ldrb r2, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r2\n\ + add r1, r1, #0x50\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x5\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._915 @cond_branch\n\ + ldr r0, ._917 + 16\n\ + ldr r1, [r0]\n\ + mov r2, #0x80\n\ + lsl r2, r2, #0x4\n\ + orr r1, r1, r2\n\ + str r1, [r0]\n\ +._915:\n\ + ldr r1, ._917 + 20\n\ + ldr r0, ._917 + 24\n\ + str r0, [r1]\n\ + mov r0, #0x1\n\ + mov r9, r0\n\ + bl ._916\n\ +._918:\n\ + .align 2, 0\n\ +._917:\n\ + .word gSoundMovesTable\n\ + .word 0xffff\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gHitMarker\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_SoundproofProtected\n\ +._747:\n\ + cmp r3, #0\n\ + bne ._919 @cond_branch\n\ + bl ._1534\n\ +._919:\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + cmp r0, #0xb\n\ + beq ._921 @cond_branch\n\ + cmp r0, #0xb\n\ + bgt ._922 @cond_branch\n\ + cmp r0, #0xa\n\ + beq ._923 @cond_branch\n\ + b ._956\n\ +._922:\n\ + cmp r0, #0x12\n\ + beq ._925 @cond_branch\n\ + b ._956\n\ +._923:\n\ + cmp r4, #0xd\n\ + beq ._927 @cond_branch\n\ + b ._956\n\ +._927:\n\ + ldr r0, ._933\n\ + lsl r1, r3, #0x1\n\ + add r1, r1, r3\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + cmp r0, #0\n\ + bne ._929 @cond_branch\n\ + b ._956\n\ +._929:\n\ + ldr r1, ._933 + 4\n\ + ldr r0, ._933 + 8\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x4\n\ + add r0, r0, r1\n\ + ldrb r0, [r0, #0x2]\n\ + lsl r0, r0, #0x1c\n\ + cmp r0, #0\n\ + bge ._931 @cond_branch\n\ + ldr r1, ._933 + 12\n\ + ldr r0, ._933 + 16\n\ + b ._932\n\ +._934:\n\ + .align 2, 0\n\ +._933:\n\ + .word gBattleMoves\n\ + .word gProtectStructs\n\ + .word gBankAttacker\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_MoveHPDrain\n\ +._931:\n\ + ldr r1, ._936\n\ + ldr r0, ._936 + 4\n\ +._932:\n\ + str r0, [r1]\n\ + mov r2, #0x1\n\ + b ._935\n\ +._937:\n\ + .align 2, 0\n\ +._936:\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_MoveHPDrain_PPLoss\n\ +._921:\n\ + cmp r4, #0xb\n\ + beq ._938 @cond_branch\n\ + b ._956\n\ +._938:\n\ + ldr r0, ._944\n\ + lsl r1, r3, #0x1\n\ + add r1, r1, r3\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + cmp r0, #0\n\ + bne ._940 @cond_branch\n\ + b ._956\n\ +._940:\n\ + ldr r1, ._944 + 4\n\ + ldr r0, ._944 + 8\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x4\n\ + add r0, r0, r1\n\ + ldrb r0, [r0, #0x2]\n\ + lsl r0, r0, #0x1c\n\ + cmp r0, #0\n\ + bge ._942 @cond_branch\n\ + ldr r1, ._944 + 12\n\ + ldr r0, ._944 + 16\n\ + b ._943\n\ +._945:\n\ + .align 2, 0\n\ +._944:\n\ + .word gBattleMoves\n\ + .word gProtectStructs\n\ + .word gBankAttacker\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_MoveHPDrain\n\ +._942:\n\ + ldr r1, ._947\n\ + ldr r0, ._947 + 4\n\ +._943:\n\ + str r0, [r1]\n\ + mov r3, #0x1\n\ + mov r9, r3\n\ + b ._956\n\ +._948:\n\ + .align 2, 0\n\ +._947:\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_MoveHPDrain_PPLoss\n\ +._925:\n\ + cmp r4, #0xa\n\ + bne ._956 @cond_branch\n\ + ldr r1, ._954\n\ + mov r0, #0x58\n\ + mov r5, sl\n\ + mul r5, r5, r0\n\ + add r0, r5, #0\n\ + add r1, r1, #0x4c\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x20\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._956 @cond_branch\n\ + ldr r2, ._954 + 4\n\ + mov r0, sl\n\ + lsl r1, r0, #0x2\n\ + add r0, r1, r2\n\ + ldr r3, [r0]\n\ + mov r4, #0x1\n\ + and r3, r3, r4\n\ + add r5, r1, #0\n\ + cmp r3, #0\n\ + bne ._951 @cond_branch\n\ + ldr r0, ._954 + 8\n\ + strb r3, [r0, #0x5]\n\ + ldr r1, ._954 + 12\n\ + ldr r0, ._954 + 16\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x4\n\ + add r0, r0, r1\n\ + ldrb r0, [r0, #0x2]\n\ + lsl r0, r0, #0x1c\n\ + cmp r0, #0\n\ + bge ._952 @cond_branch\n\ + ldr r1, ._954 + 20\n\ + ldr r0, ._954 + 24\n\ + b ._953\n\ +._955:\n\ + .align 2, 0\n\ +._954:\n\ + .word gBattleMons\n\ + .word +0x2017100\n\ + .word gBattleCommunication\n\ + .word gProtectStructs\n\ + .word gBankAttacker\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_FlashFireBoost\n\ +._952:\n\ + ldr r1, ._957\n\ + ldr r0, ._957 + 4\n\ +._953:\n\ + str r0, [r1]\n\ + add r0, r5, r2\n\ + ldr r1, [r0]\n\ + mov r2, #0x1\n\ + orr r1, r1, r2\n\ + str r1, [r0]\n\ + mov r1, #0x2\n\ + mov r9, r1\n\ + b ._956\n\ +._958:\n\ + .align 2, 0\n\ +._957:\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_FlashFireBoost_PPLoss\n\ +._951:\n\ + ldr r0, ._961\n\ + strb r4, [r0, #0x5]\n\ + ldr r1, ._961 + 4\n\ + ldr r0, ._961 + 8\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x4\n\ + add r0, r0, r1\n\ + ldrb r0, [r0, #0x2]\n\ + lsl r0, r0, #0x1c\n\ + cmp r0, #0\n\ + bge ._959 @cond_branch\n\ + ldr r1, ._961 + 12\n\ + ldr r0, ._961 + 16\n\ + b ._960\n\ +._962:\n\ + .align 2, 0\n\ +._961:\n\ + .word gBattleCommunication\n\ + .word gProtectStructs\n\ + .word gBankAttacker\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_FlashFireBoost\n\ +._959:\n\ + ldr r1, ._968\n\ + ldr r0, ._968 + 4\n\ +._960:\n\ + str r0, [r1]\n\ + mov r2, #0x2\n\ +._935:\n\ + mov r9, r2\n\ +._956:\n\ + mov r3, r9\n\ + cmp r3, #0x1\n\ + beq ._963 @cond_branch\n\ + bl ._1534\n\ +._963:\n\ + ldr r1, ._968 + 8\n\ + mov r0, #0x58\n\ + mov r5, sl\n\ + mul r5, r5, r0\n\ + add r0, r5, #0\n\ + add r1, r0, r1\n\ + ldrh r0, [r1, #0x2c]\n\ + ldrh r2, [r1, #0x28]\n\ + cmp r0, r2\n\ + bne ._965 @cond_branch\n\ + ldr r1, ._968 + 12\n\ + ldr r0, ._968 + 16\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x4\n\ + add r0, r0, r1\n\ + ldrb r0, [r0, #0x2]\n\ + lsl r0, r0, #0x1c\n\ + cmp r0, #0\n\ + bge ._966 @cond_branch\n\ + ldr r1, ._968\n\ + ldr r0, ._968 + 20\n\ + str r0, [r1]\n\ + bl ._1534\n\ +._969:\n\ + .align 2, 0\n\ +._968:\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_FlashFireBoost_PPLoss\n\ + .word gBattleMons\n\ + .word gProtectStructs\n\ + .word gBankAttacker\n\ + .word BattleScript_MoveHPDrain_FullHP\n\ +._966:\n\ + ldr r1, ._971\n\ + ldr r0, ._971 + 4\n\ + str r0, [r1]\n\ + bl ._1534\n\ +._972:\n\ + .align 2, 0\n\ +._971:\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_MoveHPDrain_FullHP_PPLoss\n\ +._965:\n\ + ldr r2, ._975\n\ + ldrh r0, [r1, #0x2c]\n\ + lsr r0, r0, #0x2\n\ + str r0, [r2]\n\ + cmp r0, #0\n\ + bne ._973 @cond_branch\n\ + mov r3, r9\n\ + str r3, [r2]\n\ +._973:\n\ + ldr r0, [r2]\n\ + neg r0, r0\n\ + str r0, [r2]\n\ + bl ._1534\n\ +._976:\n\ + .align 2, 0\n\ +._975:\n\ + .word gBattleMoveDamage\n\ +._748:\n\ + mov r5, r8\n\ + ldrb r0, [r5]\n\ + sub r0, r0, #0x9\n\ + cmp r0, #0x2f\n\ + bls ._977 @cond_branch\n\ + bl ._1534\n\ +._977:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._980\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._981:\n\ + .align 2, 0\n\ +._980:\n\ + .word ._979\n\ +._979:\n\ + .word ._982\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._989\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._997\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1000\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1011\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1022\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1534\n\ + .word ._1029\n\ +._989:\n\ + ldr r0, ._1046\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1030 @cond_branch\n\ + bl ._1534\n\ +._1030:\n\ + cmp r3, #0xa5\n\ + bne ._1032 @cond_branch\n\ + bl ._1534\n\ +._1032:\n\ + ldr r0, ._1046 + 4\n\ + lsl r1, r3, #0x1\n\ + add r1, r1, r3\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + cmp r0, #0\n\ + bne ._1034 @cond_branch\n\ + bl ._1534\n\ +._1034:\n\ + ldr r2, ._1046 + 8\n\ + ldr r0, ._1046 + 12\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r1, r0, #0x2\n\ + add r0, r2, #0\n\ + add r0, r0, #0x8\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1037 @cond_branch\n\ + add r0, r2, #0\n\ + add r0, r0, #0xc\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1037 @cond_branch\n\ + bl ._1534\n\ +._1037:\n\ + ldr r1, ._1046 + 16\n\ + mov r0, #0x58\n\ + mov r2, sl\n\ + mul r2, r2, r0\n\ + add r0, r2, #0\n\ + add r1, r0, r1\n\ + add r3, r1, #0\n\ + add r3, r3, #0x21\n\ + ldrb r0, [r3]\n\ + cmp r0, r4\n\ + bne ._1039 @cond_branch\n\ + bl ._1534\n\ +._1039:\n\ + add r2, r1, #0\n\ + add r2, r2, #0x22\n\ + ldrb r0, [r2]\n\ + cmp r0, r4\n\ + bne ._1041 @cond_branch\n\ + bl ._1534\n\ +._1041:\n\ + ldrh r0, [r1, #0x28]\n\ + cmp r0, #0\n\ + bne ._1043 @cond_branch\n\ + bl ._1534\n\ +._1043:\n\ + strb r4, [r3]\n\ + strb r4, [r2]\n\ + ldr r1, ._1046 + 20\n\ + mov r0, #0xfd\n\ + strb r0, [r1]\n\ + mov r0, #0x3\n\ + strb r0, [r1, #0x1]\n\ + strb r4, [r1, #0x2]\n\ + mov r0, #0xff\n\ + strb r0, [r1, #0x3]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1046 + 24\n\ + ldr r0, ._1046 + 28\n\ + str r0, [r1]\n\ + bl ._1392\n\ +._1047:\n\ + .align 2, 0\n\ +._1046:\n\ + .word gBattleMoveFlags\n\ + .word gBattleMoves\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBattleMons\n\ + .word gBattleTextBuff1\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_ColorChangeActivates\n\ +._997:\n\ + ldr r0, ._1061\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1048 @cond_branch\n\ + bl ._1534\n\ +._1048:\n\ + ldr r1, ._1061 + 4\n\ + ldr r0, ._1061 + 8\n\ + ldrb r2, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r2\n\ + add r4, r0, r1\n\ + ldrh r0, [r4, #0x28]\n\ + cmp r0, #0\n\ + bne ._1050 @cond_branch\n\ + bl ._1534\n\ +._1050:\n\ + ldr r0, ._1061 + 12\n\ + lsl r1, r2, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1052 @cond_branch\n\ + bl ._1534\n\ +._1052:\n\ + ldr r2, ._1061 + 16\n\ + ldr r0, ._1061 + 20\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r1, r0, #0x2\n\ + add r0, r2, #0\n\ + add r0, r0, #0x8\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1055 @cond_branch\n\ + add r0, r2, #0\n\ + add r0, r0, #0xc\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1055 @cond_branch\n\ + bl ._1534\n\ +._1055:\n\ + ldr r1, ._1061 + 24\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r2, #0x1\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1057 @cond_branch\n\ + bl ._1534\n\ +._1057:\n\ + ldr r1, ._1061 + 28\n\ + ldrh r0, [r4, #0x2c]\n\ + lsr r0, r0, #0x4\n\ + str r0, [r1]\n\ + cmp r0, #0\n\ + bne ._1059 @cond_branch\n\ + str r2, [r1]\n\ +._1059:\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1061 + 32\n\ + ldr r0, ._1061 + 36\n\ + str r0, [r1]\n\ + bl ._1392\n\ +._1062:\n\ + .align 2, 0\n\ +._1061:\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBattleMoves\n\ + .word gBattleMoveDamage\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_RoughSkinActivates\n\ +._1000:\n\ + ldr r0, ._1078\n\ + ldrb r1, [r0]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1063 @cond_branch\n\ + ldr r0, ._1078 + 4\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1064 @cond_branch\n\ + bl ._1534\n\ +._1064:\n\ + ldr r1, ._1078 + 8\n\ + ldr r0, ._1078 + 12\n\ + ldrb r2, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r2\n\ + add r0, r0, r1\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1066 @cond_branch\n\ + bl ._1534\n\ +._1066:\n\ + ldr r0, ._1078 + 16\n\ + lsl r1, r2, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1068 @cond_branch\n\ + bl ._1534\n\ +._1068:\n\ + ldr r2, ._1078 + 20\n\ + ldr r0, ._1078 + 24\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r1, r0, #0x2\n\ + add r0, r2, #0\n\ + add r0, r0, #0x8\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1071 @cond_branch\n\ + add r0, r2, #0\n\ + add r0, r0, #0xc\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1071 @cond_branch\n\ + bl ._1534\n\ +._1071:\n\ + ldr r1, ._1078 + 28\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1073 @cond_branch\n\ + bl ._1534\n\ +._1073:\n\ + ldr r5, ._1078 + 32\n\ + mov r4, #0x3\n\ +._1075:\n\ + bl Random\n\ + and r0, r0, r4\n\ + strb r0, [r5, #0x3]\n\ + cmp r0, #0\n\ + beq ._1075 @cond_branch\n\ + ldr r1, ._1078 + 32\n\ + ldrb r0, [r1, #0x3]\n\ + cmp r0, #0x3\n\ + bne ._1076 @cond_branch\n\ + add r0, r0, #0x2\n\ + strb r0, [r1, #0x3]\n\ +._1076:\n\ + ldrb r0, [r1, #0x3]\n\ + add r0, r0, #0x40\n\ + strb r0, [r1, #0x3]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1078 + 36\n\ + ldr r0, ._1078 + 40\n\ + str r0, [r1]\n\ + ldr r2, ._1078 + 44\n\ + ldr r0, [r2]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x6\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + bl ._1392\n\ +._1079:\n\ + .align 2, 0\n\ +._1078:\n\ + .word gUnknown_02023A14+0x50\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBattleMoves\n\ + .word gBattleCommunication\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_ApplySecondaryEffect\n\ + .word gHitMarker\n\ +._1063:\n\ + ldr r0, ._1096\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1080 @cond_branch\n\ + bl ._1534\n\ +._1080:\n\ + ldr r1, ._1096 + 4\n\ + ldr r0, ._1096 + 8\n\ + ldrb r2, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r2\n\ + add r0, r0, r1\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1082 @cond_branch\n\ + bl ._1534\n\ +._1082:\n\ + ldr r0, ._1096 + 12\n\ + lsl r1, r2, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1084 @cond_branch\n\ + bl ._1534\n\ +._1084:\n\ + ldr r2, ._1096 + 16\n\ + ldr r0, ._1096 + 20\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r1, r0, #0x2\n\ + add r0, r2, #0\n\ + add r0, r0, #0x8\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1087 @cond_branch\n\ + add r0, r2, #0\n\ + add r0, r0, #0xc\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1087 @cond_branch\n\ + bl ._1534\n\ +._1087:\n\ + ldr r1, ._1096 + 24\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1089 @cond_branch\n\ + bl ._1534\n\ +._1089:\n\ + bl Random\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + mov r1, #0xa\n\ + bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + beq ._1091 @cond_branch\n\ + bl ._1534\n\ +._1091:\n\ + ldr r5, ._1096 + 28\n\ + mov r4, #0x3\n\ +._1093:\n\ + bl Random\n\ + and r0, r0, r4\n\ + strb r0, [r5, #0x3]\n\ + cmp r0, #0\n\ + beq ._1093 @cond_branch\n\ + ldr r1, ._1096 + 28\n\ + ldrb r0, [r1, #0x3]\n\ + cmp r0, #0x3\n\ + bne ._1094 @cond_branch\n\ + add r0, r0, #0x2\n\ + strb r0, [r1, #0x3]\n\ +._1094:\n\ + ldrb r0, [r1, #0x3]\n\ + add r0, r0, #0x40\n\ + strb r0, [r1, #0x3]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1096 + 32\n\ + ldr r0, ._1096 + 36\n\ + str r0, [r1]\n\ + ldr r2, ._1096 + 40\n\ + ldr r0, [r2]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x6\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + bl ._1392\n\ +._1097:\n\ + .align 2, 0\n\ +._1096:\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBattleMoves\n\ + .word gBattleCommunication\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_ApplySecondaryEffect\n\ + .word gHitMarker\n\ +._1011:\n\ + ldr r0, ._1111\n\ + ldrb r1, [r0]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1098 @cond_branch\n\ + ldr r0, ._1111 + 4\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1099 @cond_branch\n\ + bl ._1534\n\ +._1099:\n\ + ldr r1, ._1111 + 8\n\ + ldr r0, ._1111 + 12\n\ + ldrb r2, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r2\n\ + add r0, r0, r1\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1101 @cond_branch\n\ + bl ._1534\n\ +._1101:\n\ + ldr r0, ._1111 + 16\n\ + lsl r1, r2, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1103 @cond_branch\n\ + bl ._1534\n\ +._1103:\n\ + ldr r2, ._1111 + 20\n\ + ldr r0, ._1111 + 24\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r1, r0, #0x2\n\ + add r0, r2, #0\n\ + add r0, r0, #0x8\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1106 @cond_branch\n\ + add r0, r2, #0\n\ + add r0, r0, #0xc\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1106 @cond_branch\n\ + bl ._1534\n\ +._1106:\n\ + ldr r1, ._1111 + 28\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1108 @cond_branch\n\ + bl ._1534\n\ +._1108:\n\ + ldr r1, ._1111 + 32\n\ + mov r0, #0x42\n\ + strb r0, [r1, #0x3]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1111 + 36\n\ + ldr r0, ._1111 + 40\n\ + str r0, [r1]\n\ + ldr r2, ._1111 + 44\n\ + ldr r0, [r2]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x6\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + bl ._1392\n\ +._1112:\n\ + .align 2, 0\n\ +._1111:\n\ + .word gUnknown_02023A14+0x50\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBattleMoves\n\ + .word gBattleCommunication\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_ApplySecondaryEffect\n\ + .word gHitMarker\n\ +._1098:\n\ + ldr r0, ._1127\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1113 @cond_branch\n\ + bl ._1534\n\ +._1113:\n\ + ldr r1, ._1127 + 4\n\ + ldr r0, ._1127 + 8\n\ + ldrb r2, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r2\n\ + add r0, r0, r1\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1115 @cond_branch\n\ + bl ._1534\n\ +._1115:\n\ + ldr r0, ._1127 + 12\n\ + lsl r1, r2, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1117 @cond_branch\n\ + bl ._1534\n\ +._1117:\n\ + ldr r2, ._1127 + 16\n\ + ldr r0, ._1127 + 20\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r1, r0, #0x2\n\ + add r0, r2, #0\n\ + add r0, r0, #0x8\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1120 @cond_branch\n\ + add r0, r2, #0\n\ + add r0, r0, #0xc\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1120 @cond_branch\n\ + bl ._1534\n\ +._1120:\n\ + ldr r1, ._1127 + 24\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1122 @cond_branch\n\ + bl ._1534\n\ +._1122:\n\ + bl Random\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + mov r1, #0x3\n\ + bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + beq ._1124 @cond_branch\n\ + bl ._1534\n\ +._1124:\n\ + ldr r1, ._1127 + 28\n\ + mov r0, #0x42\n\ + strb r0, [r1, #0x3]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1127 + 32\n\ + ldr r0, ._1127 + 36\n\ + str r0, [r1]\n\ + ldr r2, ._1127 + 40\n\ + ldr r0, [r2]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x6\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + bl ._1392\n\ +._1128:\n\ + .align 2, 0\n\ +._1127:\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBattleMoves\n\ + .word gBattleCommunication\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_ApplySecondaryEffect\n\ + .word gHitMarker\n\ +._982:\n\ + ldr r0, ._1142\n\ + ldrb r1, [r0]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1129 @cond_branch\n\ + ldr r0, ._1142 + 4\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1130 @cond_branch\n\ + bl ._1534\n\ +._1130:\n\ + ldr r1, ._1142 + 8\n\ + ldr r0, ._1142 + 12\n\ + ldrb r2, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r2\n\ + add r0, r0, r1\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1132 @cond_branch\n\ + bl ._1534\n\ +._1132:\n\ + ldr r0, ._1142 + 16\n\ + lsl r1, r2, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1134 @cond_branch\n\ + bl ._1534\n\ +._1134:\n\ + ldr r2, ._1142 + 20\n\ + ldr r0, ._1142 + 24\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r1, r0, #0x2\n\ + add r0, r2, #0\n\ + add r0, r0, #0x8\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1137 @cond_branch\n\ + add r0, r2, #0\n\ + add r0, r0, #0xc\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1137 @cond_branch\n\ + bl ._1534\n\ +._1137:\n\ + ldr r1, ._1142 + 28\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1139 @cond_branch\n\ + bl ._1534\n\ +._1139:\n\ + ldr r1, ._1142 + 32\n\ + mov r0, #0x45\n\ + strb r0, [r1, #0x3]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1142 + 36\n\ + ldr r0, ._1142 + 40\n\ + str r0, [r1]\n\ + ldr r2, ._1142 + 44\n\ + ldr r0, [r2]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x6\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + bl ._1392\n\ +._1143:\n\ + .align 2, 0\n\ +._1142:\n\ + .word gUnknown_02023A14+0x50\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBattleMoves\n\ + .word gBattleCommunication\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_ApplySecondaryEffect\n\ + .word gHitMarker\n\ +._1129:\n\ + ldr r0, ._1158\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1144 @cond_branch\n\ + bl ._1534\n\ +._1144:\n\ + ldr r1, ._1158 + 4\n\ + ldr r0, ._1158 + 8\n\ + ldrb r2, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r2\n\ + add r0, r0, r1\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1146 @cond_branch\n\ + bl ._1534\n\ +._1146:\n\ + ldr r0, ._1158 + 12\n\ + lsl r1, r2, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1148 @cond_branch\n\ + bl ._1534\n\ +._1148:\n\ + ldr r2, ._1158 + 16\n\ + ldr r0, ._1158 + 20\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r1, r0, #0x2\n\ + add r0, r2, #0\n\ + add r0, r0, #0x8\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1151 @cond_branch\n\ + add r0, r2, #0\n\ + add r0, r0, #0xc\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1151 @cond_branch\n\ + bl ._1534\n\ +._1151:\n\ + ldr r1, ._1158 + 24\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1153 @cond_branch\n\ + bl ._1534\n\ +._1153:\n\ + bl Random\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + mov r1, #0x3\n\ + bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + beq ._1155 @cond_branch\n\ + bl ._1534\n\ +._1155:\n\ + ldr r1, ._1158 + 28\n\ + mov r0, #0x45\n\ + strb r0, [r1, #0x3]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1158 + 32\n\ + ldr r0, ._1158 + 36\n\ + str r0, [r1]\n\ + ldr r2, ._1158 + 40\n\ + ldr r0, [r2]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x6\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + bl ._1392\n\ +._1159:\n\ + .align 2, 0\n\ +._1158:\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBattleMoves\n\ + .word gBattleCommunication\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_ApplySecondaryEffect\n\ + .word gHitMarker\n\ +._1022:\n\ + ldr r0, ._1173\n\ + ldrb r1, [r0]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1160 @cond_branch\n\ + ldr r0, ._1173 + 4\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1161 @cond_branch\n\ + bl ._1534\n\ +._1161:\n\ + ldr r1, ._1173 + 8\n\ + ldr r0, ._1173 + 12\n\ + ldrb r2, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r2\n\ + add r0, r0, r1\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1163 @cond_branch\n\ + bl ._1534\n\ +._1163:\n\ + ldr r0, ._1173 + 16\n\ + lsl r1, r2, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1165 @cond_branch\n\ + bl ._1534\n\ +._1165:\n\ + ldr r1, ._1173 + 20\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1167 @cond_branch\n\ + bl ._1534\n\ +._1167:\n\ + ldr r2, ._1173 + 24\n\ + ldr r0, ._1173 + 28\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r1, r0, #0x2\n\ + add r0, r2, #0\n\ + add r0, r0, #0x8\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1170 @cond_branch\n\ + add r0, r2, #0\n\ + add r0, r0, #0xc\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1170 @cond_branch\n\ + bl ._1534\n\ +._1170:\n\ + ldr r1, ._1173 + 32\n\ + mov r0, #0x43\n\ + strb r0, [r1, #0x3]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1173 + 36\n\ + ldr r0, ._1173 + 40\n\ + str r0, [r1]\n\ + ldr r2, ._1173 + 44\n\ + ldr r0, [r2]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x6\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + bl ._1392\n\ +._1174:\n\ + .align 2, 0\n\ +._1173:\n\ + .word gUnknown_02023A14+0x50\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gBattleMoves\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBattleCommunication\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_ApplySecondaryEffect\n\ + .word gHitMarker\n\ +._1160:\n\ + ldr r0, ._1189\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1175 @cond_branch\n\ + bl ._1534\n\ +._1175:\n\ + ldr r1, ._1189 + 4\n\ + ldr r0, ._1189 + 8\n\ + ldrb r2, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r2\n\ + add r0, r0, r1\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1177 @cond_branch\n\ + bl ._1534\n\ +._1177:\n\ + ldr r0, ._1189 + 12\n\ + lsl r1, r2, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1179 @cond_branch\n\ + bl ._1534\n\ +._1179:\n\ + ldr r1, ._1189 + 16\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1181 @cond_branch\n\ + bl ._1534\n\ +._1181:\n\ + ldr r2, ._1189 + 20\n\ + ldr r0, ._1189 + 24\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r1, r0, #0x2\n\ + add r0, r2, #0\n\ + add r0, r0, #0x8\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1184 @cond_branch\n\ + add r0, r2, #0\n\ + add r0, r0, #0xc\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1184 @cond_branch\n\ + bl ._1534\n\ +._1184:\n\ + bl Random\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + mov r1, #0x3\n\ + bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + beq ._1186 @cond_branch\n\ + bl ._1534\n\ +._1186:\n\ + ldr r1, ._1189 + 28\n\ + mov r0, #0x43\n\ + strb r0, [r1, #0x3]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1189 + 32\n\ + ldr r0, ._1189 + 36\n\ + str r0, [r1]\n\ + ldr r2, ._1189 + 40\n\ + ldr r0, [r2]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x6\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + bl ._1392\n\ +._1190:\n\ + .align 2, 0\n\ +._1189:\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gBattleMoves\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBattleCommunication\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_ApplySecondaryEffect\n\ + .word gHitMarker\n\ +._1029:\n\ + ldr r0, ._1217\n\ + ldrb r1, [r0]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1191 @cond_branch\n\ + b ._1192\n\ +._1191:\n\ + ldr r0, ._1217 + 4\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1193 @cond_branch\n\ + bl ._1534\n\ +._1193:\n\ + ldr r5, ._1217 + 8\n\ + ldr r7, ._1217 + 12\n\ + ldrb r1, [r7]\n\ + mov r6, #0x58\n\ + add r0, r1, #0\n\ + mul r0, r0, r6\n\ + add r4, r0, r5\n\ + ldrh r0, [r4, #0x28]\n\ + cmp r0, #0\n\ + bne ._1195 @cond_branch\n\ + bl ._1534\n\ +._1195:\n\ + ldr r0, ._1217 + 16\n\ + lsl r1, r1, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1197 @cond_branch\n\ + bl ._1534\n\ +._1197:\n\ + ldr r1, ._1217 + 20\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1199 @cond_branch\n\ + bl ._1534\n\ +._1199:\n\ + ldr r3, ._1217 + 24\n\ + ldr r0, ._1217 + 28\n\ + mov r8, r0\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r2, r0, #0x2\n\ + add r0, r3, #0\n\ + add r0, r0, #0x8\n\ + add r0, r2, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1202 @cond_branch\n\ + add r0, r3, #0\n\ + add r0, r0, #0xc\n\ + add r0, r2, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1202 @cond_branch\n\ + bl ._1534\n\ +._1202:\n\ + add r0, r1, #0\n\ + mul r0, r0, r6\n\ + add r0, r0, r5\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1204 @cond_branch\n\ + bl ._1534\n\ +._1204:\n\ + add r0, r4, #0\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0xc\n\ + bne ._1206 @cond_branch\n\ + bl ._1534\n\ +._1206:\n\ + ldr r0, [sp, #0x8]\n\ + ldr r1, [sp, #0x10]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + add r4, r0, #0\n\ + ldr r0, [sp, #0xc]\n\ + ldr r1, [sp, #0x14]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + lsl r4, r4, #0x18\n\ + lsl r0, r0, #0x18\n\ + cmp r4, r0\n\ + bne ._1208 @cond_branch\n\ + bl ._1534\n\ +._1208:\n\ + ldrb r0, [r7]\n\ + mul r0, r0, r6\n\ + add r4, r5, #0\n\ + add r4, r4, #0x50\n\ + add r0, r0, r4\n\ + ldr r0, [r0]\n\ + mov r1, #0xf0\n\ + lsl r1, r1, #0xc\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1210 @cond_branch\n\ + bl ._1534\n\ +._1210:\n\ + ldr r0, [sp, #0x8]\n\ + ldr r1, [sp, #0x10]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0xff\n\ + bne ._1212 @cond_branch\n\ + bl ._1534\n\ +._1212:\n\ + ldr r0, [sp, #0xc]\n\ + ldr r1, [sp, #0x14]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0xff\n\ + bne ._1214 @cond_branch\n\ + bl ._1534\n\ +._1214:\n\ + ldrb r0, [r7]\n\ + add r2, r0, #0\n\ + mul r2, r2, r6\n\ + add r2, r2, r4\n\ + ldr r1, ._1217 + 32\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, [r0]\n\ + lsl r1, r1, #0x10\n\ + ldr r0, [r2]\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1217 + 36\n\ + ldr r0, ._1217 + 40\n\ + str r0, [r1]\n\ + bl ._1392\n\ +._1218:\n\ + .align 2, 0\n\ +._1217:\n\ + .word gUnknown_02023A14+0x50\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gBattleMoves\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBitTable\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_CuteCharmActivates\n\ +._1192:\n\ + ldr r0, ._1245\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1219 @cond_branch\n\ + bl ._1534\n\ +._1219:\n\ + ldr r5, ._1245 + 4\n\ + ldr r7, ._1245 + 8\n\ + ldrb r1, [r7]\n\ + mov r6, #0x58\n\ + add r0, r1, #0\n\ + mul r0, r0, r6\n\ + add r0, r0, r5\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1221 @cond_branch\n\ + bl ._1534\n\ +._1221:\n\ + ldr r0, ._1245 + 12\n\ + lsl r1, r1, #0x4\n\ + add r1, r1, r0\n\ + ldrb r0, [r1, #0x1]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._1223 @cond_branch\n\ + bl ._1534\n\ +._1223:\n\ + ldr r1, ._1245 + 16\n\ + lsl r0, r3, #0x1\n\ + add r0, r0, r3\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x8]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1225 @cond_branch\n\ + bl ._1534\n\ +._1225:\n\ + ldr r3, ._1245 + 20\n\ + ldr r0, ._1245 + 24\n\ + mov r8, r0\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r2, r0, #0x2\n\ + add r0, r3, #0\n\ + add r0, r0, #0x8\n\ + add r0, r2, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1228 @cond_branch\n\ + add r0, r3, #0\n\ + add r0, r0, #0xc\n\ + add r0, r2, r0\n\ + ldr r0, [r0]\n\ + cmp r0, #0\n\ + bne ._1228 @cond_branch\n\ + bl ._1534\n\ +._1228:\n\ + add r0, r1, #0\n\ + mul r0, r0, r6\n\ + add r0, r0, r5\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + bne ._1230 @cond_branch\n\ + bl ._1534\n\ +._1230:\n\ + bl Random\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + mov r1, #0x3\n\ + bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + beq ._1232 @cond_branch\n\ + bl ._1534\n\ +._1232:\n\ + ldrb r0, [r7]\n\ + mul r0, r0, r6\n\ + add r0, r0, r5\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0xc\n\ + bne ._1234 @cond_branch\n\ + bl ._1534\n\ +._1234:\n\ + ldr r0, [sp, #0x8]\n\ + ldr r1, [sp, #0x10]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + add r4, r0, #0\n\ + ldr r0, [sp, #0xc]\n\ + ldr r1, [sp, #0x14]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + lsl r4, r4, #0x18\n\ + lsl r0, r0, #0x18\n\ + cmp r4, r0\n\ + bne ._1236 @cond_branch\n\ + bl ._1534\n\ +._1236:\n\ + ldrb r0, [r7]\n\ + mul r0, r0, r6\n\ + add r4, r5, #0\n\ + add r4, r4, #0x50\n\ + add r0, r0, r4\n\ + ldr r0, [r0]\n\ + mov r1, #0xf0\n\ + lsl r1, r1, #0xc\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1238 @cond_branch\n\ + bl ._1534\n\ +._1238:\n\ + ldr r0, [sp, #0x8]\n\ + ldr r1, [sp, #0x10]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0xff\n\ + bne ._1240 @cond_branch\n\ + bl ._1534\n\ +._1240:\n\ + ldr r0, [sp, #0xc]\n\ + ldr r1, [sp, #0x14]\n\ + bl GetGenderFromSpeciesAndPersonality\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0xff\n\ + bne ._1242 @cond_branch\n\ + bl ._1534\n\ +._1242:\n\ + ldrb r0, [r7]\n\ + add r2, r0, #0\n\ + mul r2, r2, r6\n\ + add r2, r2, r4\n\ + ldr r1, ._1245 + 28\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, [r0]\n\ + lsl r1, r1, #0x10\n\ + ldr r0, [r2]\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1245 + 32\n\ + ldr r0, ._1245 + 36\n\ + str r0, [r1]\n\ + bl ._1392\n\ +._1246:\n\ + .align 2, 0\n\ +._1245:\n\ + .word gBattleMoveFlags\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gProtectStructs\n\ + .word gBattleMoves\n\ + .word gSpecialStatuses\n\ + .word gBankTarget\n\ + .word gBitTable\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_CuteCharmActivates\n\ +._749:\n\ + mov r5, #0x0\n\ + mov sl, r5\n\ + ldr r0, ._1251\n\ + ldrb r0, [r0]\n\ + cmp sl, r0\n\ + bcc ._1366 @cond_branch\n\ + bl ._1534\n\ +._1366:\n\ + ldr r1, ._1251 + 4\n\ + mov r0, #0x58\n\ + mov r2, sl\n\ + mul r2, r2, r0\n\ + add r0, r2, #0\n\ + add r0, r0, r1\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + sub r0, r0, #0x7\n\ + add r2, r1, #0\n\ + cmp r0, #0x41\n\ + bls ._1249 @cond_branch\n\ + b ._1346\n\ +._1249:\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._1251 + 8\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov pc, r0\n\ +._1252:\n\ + .align 2, 0\n\ +._1251:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ + .word ._1253\n\ +._1253:\n\ + .word ._1254\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1259\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1319\n\ + .word ._1346\n\ + .word ._1264\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1267\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1287\n\ + .word ._1288\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1346\n\ + .word ._1319\n\ +._1264:\n\ + mov r0, #0x58\n\ + mov r3, sl\n\ + mul r3, r3, r0\n\ + add r0, r3, #0\n\ + add r1, r2, #0\n\ + add r1, r1, #0x4c\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + ldr r1, ._1323\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1320 @cond_branch\n\ + b ._1346\n\ +._1320:\n\ + ldr r0, ._1323 + 4\n\ + ldr r1, ._1323 + 8\n\ + b ._1331\n\ +._1324:\n\ + .align 2, 0\n\ +._1323:\n\ + .word 0xf88\n\ + .word gBattleTextBuff1\n\ + .word gStatusConditionString_PoisonJpn\n\ +._1267:\n\ + mov r0, #0x58\n\ + mov r1, sl\n\ + mul r1, r1, r0\n\ + add r0, r1, #0\n\ + add r1, r2, #0\n\ + add r1, r1, #0x50\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x7\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1325 @cond_branch\n\ + b ._1346\n\ +._1325:\n\ + ldr r0, ._1328\n\ + ldr r1, ._1328 + 4\n\ + bl StringCopy\n\ + mov r2, #0x2\n\ + mov r9, r2\n\ + b ._1343\n\ +._1329:\n\ + .align 2, 0\n\ +._1328:\n\ + .word gBattleTextBuff1\n\ + .word gStatusConditionString_ConfusionJpn\n\ +._1254:\n\ + mov r0, #0x58\n\ + mov r3, sl\n\ + mul r3, r3, r0\n\ + add r0, r3, #0\n\ + add r1, r2, #0\n\ + add r1, r1, #0x4c\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1346 @cond_branch\n\ + ldr r0, ._1332\n\ + ldr r1, ._1332 + 4\n\ + b ._1331\n\ +._1333:\n\ + .align 2, 0\n\ +._1332:\n\ + .word gBattleTextBuff1\n\ + .word gStatusConditionString_ParalysisJpn\n\ +._1319:\n\ + mov r0, #0x58\n\ + mov r3, sl\n\ + mul r3, r3, r0\n\ + add r0, r2, #0\n\ + add r0, r0, #0x4c\n\ + add r0, r3, r0\n\ + ldr r0, [r0]\n\ + mov r1, #0x7\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1346 @cond_branch\n\ + add r2, r2, #0x50\n\ + add r2, r3, r2\n\ + ldr r0, [r2]\n\ + ldr r1, ._1336\n\ + and r0, r0, r1\n\ + str r0, [r2]\n\ + ldr r0, ._1336 + 4\n\ + ldr r1, ._1336 + 8\n\ + bl StringCopy\n\ + mov r0, #0x1\n\ + mov r9, r0\n\ + b ._1343\n\ +._1337:\n\ + .align 2, 0\n\ +._1336:\n\ + .word 0xf7ffffff\n\ + .word gBattleTextBuff1\n\ + .word gStatusConditionString_SleepJpn\n\ +._1288:\n\ + mov r0, #0x58\n\ + mov r1, sl\n\ + mul r1, r1, r0\n\ + add r0, r1, #0\n\ + add r1, r2, #0\n\ + add r1, r1, #0x4c\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x10\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1346 @cond_branch\n\ + ldr r0, ._1340\n\ + ldr r1, ._1340 + 4\n\ + bl StringCopy\n\ + mov r2, #0x1\n\ + mov r9, r2\n\ + b ._1343\n\ +._1341:\n\ + .align 2, 0\n\ +._1340:\n\ + .word gBattleTextBuff1\n\ + .word gStatusConditionString_BurnJpn\n\ +._1287:\n\ + mov r0, #0x58\n\ + mov r3, sl\n\ + mul r3, r3, r0\n\ + add r0, r3, #0\n\ + add r1, r2, #0\n\ + add r1, r1, #0x4c\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x20\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1346 @cond_branch\n\ + ldr r0, ._1344\n\ + ldr r1, ._1344 + 4\n\ +._1331:\n\ + bl StringCopy\n\ + mov r5, #0x1\n\ + mov r9, r5\n\ + b ._1343\n\ +._1345:\n\ + .align 2, 0\n\ +._1344:\n\ + .word gBattleTextBuff1\n\ + .word gStatusConditionString_IceJpn\n\ +._1259:\n\ + mov r0, #0x58\n\ + mov r1, sl\n\ + mul r1, r1, r0\n\ + add r0, r1, #0\n\ + add r1, r2, #0\n\ + add r1, r1, #0x50\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0xf0\n\ + lsl r1, r1, #0xc\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1346 @cond_branch\n\ + ldr r0, ._1352\n\ + ldr r1, ._1352 + 4\n\ + bl StringCopy\n\ + mov r2, #0x3\n\ + mov r9, r2\n\ +._1346:\n\ + mov r3, r9\n\ + cmp r3, #0\n\ + beq ._1347 @cond_branch\n\ +._1343:\n\ + mov r5, r9\n\ + cmp r5, #0x2\n\ + beq ._1348 @cond_branch\n\ + cmp r5, #0x2\n\ + bgt ._1349 @cond_branch\n\ + cmp r5, #0x1\n\ + beq ._1350 @cond_branch\n\ + b ._1355\n\ +._1353:\n\ + .align 2, 0\n\ +._1352:\n\ + .word gBattleTextBuff1\n\ + .word gStatusConditionString_LoveJpn\n\ +._1349:\n\ + mov r0, r9\n\ + cmp r0, #0x3\n\ + beq ._1354 @cond_branch\n\ + b ._1355\n\ +._1350:\n\ + ldr r1, ._1357\n\ + mov r0, #0x58\n\ + mov r2, sl\n\ + mul r2, r2, r0\n\ + add r1, r1, #0x4c\n\ + add r2, r2, r1\n\ + mov r0, #0x0\n\ + b ._1356\n\ +._1358:\n\ + .align 2, 0\n\ +._1357:\n\ + .word gBattleMons\n\ +._1348:\n\ + ldr r1, ._1360\n\ + mov r0, #0x58\n\ + mov r2, sl\n\ + mul r2, r2, r0\n\ + add r1, r1, #0x50\n\ + add r2, r2, r1\n\ + ldr r0, [r2]\n\ + mov r1, #0x8\n\ + neg r1, r1\n\ + b ._1359\n\ +._1361:\n\ + .align 2, 0\n\ +._1360:\n\ + .word gBattleMons\n\ +._1354:\n\ + ldr r1, ._1363\n\ + mov r0, #0x58\n\ + mov r2, sl\n\ + mul r2, r2, r0\n\ + add r1, r1, #0x50\n\ + add r2, r2, r1\n\ + ldr r0, [r2]\n\ + ldr r1, ._1363 + 4\n\ +._1359:\n\ + and r0, r0, r1\n\ +._1356:\n\ + str r0, [r2]\n\ +._1355:\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1363 + 8\n\ + ldr r0, ._1363 + 12\n\ + str r0, [r1]\n\ + ldr r0, ._1363 + 16\n\ + ldr r1, ._1363 + 20\n\ + add r0, r0, r1\n\ + mov r2, sl\n\ + strb r2, [r0]\n\ + ldr r4, ._1363 + 24\n\ + strb r2, [r4]\n\ + ldrb r1, [r4]\n\ + mov r0, #0x58\n\ + mul r0, r0, r1\n\ + ldr r1, ._1363 + 28\n\ + add r0, r0, r1\n\ + str r0, [sp]\n\ + mov r0, #0x0\n\ + mov r1, #0x28\n\ + mov r2, #0x0\n\ + mov r3, #0x4\n\ + bl EmitSetMonData\n\ + ldrb r0, [r4]\n\ + bl MarkBufferBankForExecution\n\ + bl ._1540\n\ +._1364:\n\ + .align 2, 0\n\ +._1363:\n\ + .word gBattleMons\n\ + .word 0xfff0ffff\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_AbilityCuredStatus\n\ + .word +0x2000000\n\ + .word 0x16003\n\ + .word gActiveBank\n\ + .word gUnknown_02024ACC\n\ +._1347:\n\ + mov r0, sl\n\ + add r0, r0, #0x1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov sl, r0\n\ + ldr r0, ._1368\n\ + ldrb r0, [r0]\n\ + cmp sl, r0\n\ + bcs ._1365 @cond_branch\n\ + b ._1366\n\ +._1365:\n\ + bl ._1534\n\ +._1369:\n\ + .align 2, 0\n\ +._1368:\n\ + .word gNoOfAllBanks\n\ +._750:\n\ + mov r3, #0x0\n\ + mov sl, r3\n\ + ldr r0, ._1377\n\ + ldrb r0, [r0]\n\ + cmp sl, r0\n\ + bcc ._1370 @cond_branch\n\ + b ._1534\n\ +._1370:\n\ + ldr r4, ._1377 + 4\n\ +._1375:\n\ + mov r0, #0x58\n\ + mov r5, sl\n\ + mul r5, r5, r0\n\ + add r0, r5, #0\n\ + add r0, r0, r4\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x3b\n\ + bne ._1373 @cond_branch\n\ + mov r0, sl\n\ + bl CastformDataTypeChange\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ + cmp r0, #0\n\ + beq ._1373 @cond_branch\n\ + b ._1374\n\ +._1373:\n\ + mov r0, sl\n\ + add r0, r0, #0x1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov sl, r0\n\ + ldr r0, ._1377\n\ + ldrb r0, [r0]\n\ + cmp sl, r0\n\ + bcc ._1375 @cond_branch\n\ + b ._1534\n\ +._1378:\n\ + .align 2, 0\n\ +._1377:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ +._751:\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + cmp r0, #0x1c\n\ + beq ._1379 @cond_branch\n\ + b ._1534\n\ +._1379:\n\ + ldr r4, ._1385\n\ + ldr r1, [r4]\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x7\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1381 @cond_branch\n\ + b ._1534\n\ +._1381:\n\ + ldr r0, ._1385 + 4\n\ + and r1, r1, r0\n\ + str r1, [r4]\n\ + ldr r3, ._1385 + 8\n\ + add r2, r7, r3\n\ + ldrb r1, [r2]\n\ + mov r0, #0x3f\n\ + and r0, r0, r1\n\ + strb r0, [r2]\n\ + cmp r0, #0x6\n\ + bne ._1383 @cond_branch\n\ + mov r0, #0x2\n\ + strb r0, [r2]\n\ +._1383:\n\ + ldr r1, ._1385 + 12\n\ + ldrb r0, [r2]\n\ + add r0, r0, #0x40\n\ + strb r0, [r1, #0x3]\n\ + ldr r0, ._1385 + 16\n\ + ldrb r1, [r0]\n\ + ldr r5, ._1385 + 20\n\ + add r0, r7, r5\n\ + strb r1, [r0]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1385 + 24\n\ + ldr r0, ._1385 + 28\n\ + str r0, [r1]\n\ + ldr r0, [r4]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x6\n\ + orr r0, r0, r1\n\ + str r0, [r4]\n\ + b ._1392\n\ +._1386:\n\ + .align 2, 0\n\ +._1385:\n\ + .word gHitMarker\n\ + .word 0xffffbfff\n\ + .word 0x160ca\n\ + .word gBattleCommunication\n\ + .word gBankTarget\n\ + .word 0x16003\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_SynchronizeActivates\n\ +._752:\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + cmp r0, #0x1c\n\ + beq ._1387 @cond_branch\n\ + b ._1534\n\ +._1387:\n\ + ldr r4, ._1393\n\ + ldr r1, [r4]\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x7\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1389 @cond_branch\n\ + b ._1534\n\ +._1389:\n\ + ldr r0, ._1393 + 4\n\ + and r1, r1, r0\n\ + str r1, [r4]\n\ + ldr r3, ._1393 + 8\n\ + add r2, r7, r3\n\ + ldrb r1, [r2]\n\ + mov r0, #0x3f\n\ + and r0, r0, r1\n\ + strb r0, [r2]\n\ + cmp r0, #0x6\n\ + bne ._1391 @cond_branch\n\ + mov r0, #0x2\n\ + strb r0, [r2]\n\ +._1391:\n\ + ldr r1, ._1393 + 12\n\ + ldrb r0, [r2]\n\ + strb r0, [r1, #0x3]\n\ + ldr r0, ._1393 + 16\n\ + ldrb r1, [r0]\n\ + ldr r5, ._1393 + 20\n\ + add r0, r7, r5\n\ + strb r1, [r0]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1393 + 24\n\ + ldr r0, ._1393 + 28\n\ + str r0, [r1]\n\ + ldr r0, [r4]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x6\n\ + orr r0, r0, r1\n\ + str r0, [r4]\n\ + b ._1392\n\ +._1394:\n\ + .align 2, 0\n\ +._1393:\n\ + .word gHitMarker\n\ + .word 0xffffbfff\n\ + .word 0x160ca\n\ + .word gBattleCommunication\n\ + .word gBankAttacker\n\ + .word 0x16003\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_SynchronizeActivates\n\ +._753:\n\ + mov r4, #0x0\n\ + ldr r0, ._1402\n\ + ldrb r1, [r0]\n\ + cmp r4, r1\n\ + blt ._1395 @cond_branch\n\ + b ._1534\n\ +._1395:\n\ + ldr r0, ._1402 + 4\n\ + add r5, r1, #0\n\ + ldr r2, ._1402 + 8\n\ + add r3, r0, #0\n\ + add r3, r3, #0x20\n\ + mov r6, #0x80\n\ + lsl r6, r6, #0xc\n\ +._1400:\n\ + ldrb r1, [r3]\n\ + cmp r1, #0x16\n\ + bne ._1398 @cond_branch\n\ + ldr r0, [r2]\n\ + and r0, r0, r6\n\ + cmp r0, #0\n\ + beq ._1398 @cond_branch\n\ + b ._1399\n\ +._1398:\n\ + add r2, r2, #0x4\n\ + add r3, r3, #0x58\n\ + add r4, r4, #0x1\n\ + cmp r4, r5\n\ + blt ._1400 @cond_branch\n\ + b ._1534\n\ +._1403:\n\ + .align 2, 0\n\ +._1402:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ + .word gStatuses3\n\ +._755:\n\ + mov r4, #0x0\n\ + ldr r0, ._1417\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1404 @cond_branch\n\ + b ._1534\n\ +._1404:\n\ + ldr r0, ._1417 + 4\n\ + mov r8, r0\n\ + ldr r1, ._1417 + 8\n\ + add r1, r1, #0x20\n\ + str r1, [sp, #0x1c]\n\ + mov r2, #0x0\n\ + str r2, [sp, #0x20]\n\ +._1434:\n\ + ldr r3, [sp, #0x1c]\n\ + ldrb r0, [r3]\n\ + cmp r0, #0x24\n\ + beq ._1406 @cond_branch\n\ + b ._1431\n\ +._1406:\n\ + ldr r0, ._1417 + 12\n\ + ldr r5, [sp, #0x20]\n\ + add r0, r5, r0\n\ + ldr r1, [r0]\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0xd\n\ + and r1, r1, r0\n\ + str r5, [sp, #0x18]\n\ + cmp r1, #0\n\ + bne ._1408 @cond_branch\n\ + b ._1431\n\ +._1408:\n\ + lsl r0, r4, #0x18\n\ + lsr r0, r0, #0x18\n\ + bl GetBankIdentity\n\ + mov r1, #0x1\n\ + add r5, r0, #0\n\ + eor r5, r5, r1\n\ + and r5, r5, r1\n\ + add r0, r5, #0\n\ + bl GetBankByIdentity\n\ + lsl r0, r0, #0x18\n\ + lsr r6, r0, #0x18\n\ + add r0, r5, #2\n\ + bl GetBankByIdentity\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ + ldr r0, ._1417 + 16\n\ + ldrh r1, [r0]\n\ + mov r2, #0x1\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1410 @cond_branch\n\ + b ._1411\n\ +._1410:\n\ + mov r1, #0x58\n\ + add r0, r6, #0\n\ + mul r0, r0, r1\n\ + ldr r3, ._1417 + 8\n\ + add r1, r0, r3\n\ + add r0, r1, #0\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._1420 @cond_branch\n\ + ldrh r0, [r1, #0x28]\n\ + cmp r0, #0\n\ + beq ._1415 @cond_branch\n\ + mov r1, #0x58\n\ + add r0, r7, #0\n\ + mul r0, r0, r1\n\ + add r1, r0, r3\n\ + add r0, r1, #0\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._1415 @cond_branch\n\ + ldrh r0, [r1, #0x28]\n\ + cmp r0, #0\n\ + beq ._1415 @cond_branch\n\ + str r2, [sp, #0x24]\n\ + bl Random\n\ + ldr r2, [sp, #0x24]\n\ + add r1, r2, #0\n\ + and r1, r1, r0\n\ + lsl r1, r1, #0x1\n\ + orr r5, r5, r1\n\ + add r0, r5, #0\n\ + bl GetBankByIdentity\n\ + mov r2, r8\n\ + strb r0, [r2]\n\ + ldrb r0, [r2]\n\ + mov r3, #0x58\n\ + mul r0, r0, r3\n\ + ldr r5, ._1417 + 8\n\ + add r0, r0, r5\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + ldr r1, [sp, #0x1c]\n\ + strb r0, [r1]\n\ + ldrb r0, [r2]\n\ + mul r0, r0, r3\n\ + add r0, r0, r5\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + ldr r2, ._1417 + 20\n\ + strb r0, [r2]\n\ + b ._1416\n\ +._1418:\n\ + .align 2, 0\n\ +._1417:\n\ + .word gNoOfAllBanks\n\ + .word gActiveBank\n\ + .word gBattleMons\n\ + .word gStatuses3\n\ + .word gBattleTypeFlags\n\ + .word gLastUsedAbility\n\ +._1415:\n\ + ldr r3, ._1422\n\ + mov r2, #0x58\n\ + add r0, r6, #0\n\ + mul r0, r0, r2\n\ + add r1, r0, r3\n\ + add r0, r1, #0\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._1420 @cond_branch\n\ + ldrh r0, [r1, #0x28]\n\ + cmp r0, #0\n\ + beq ._1420 @cond_branch\n\ + mov r5, r8\n\ + strb r6, [r5]\n\ + add r1, r4, #0\n\ + mul r1, r1, r2\n\ + add r1, r1, r3\n\ + ldrb r0, [r5]\n\ + mul r0, r0, r2\n\ + add r0, r0, r3\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + add r1, r1, #0x20\n\ + strb r0, [r1]\n\ + ldrb r0, [r5]\n\ + mul r0, r0, r2\n\ + add r0, r0, r3\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + b ._1426\n\ +._1423:\n\ + .align 2, 0\n\ +._1422:\n\ + .word gBattleMons\n\ +._1420:\n\ + ldr r3, ._1427\n\ + mov r2, #0x58\n\ + add r0, r7, #0\n\ + mul r0, r0, r2\n\ + add r1, r0, r3\n\ + add r0, r1, #0\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._1430 @cond_branch\n\ + ldrh r0, [r1, #0x28]\n\ + cmp r0, #0\n\ + beq ._1430 @cond_branch\n\ + mov r5, r8\n\ + strb r7, [r5]\n\ + add r1, r4, #0\n\ + mul r1, r1, r2\n\ + add r1, r1, r3\n\ + ldrb r0, [r5]\n\ + mul r0, r0, r2\n\ + add r0, r0, r3\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + add r1, r1, #0x20\n\ + strb r0, [r1]\n\ + ldrb r0, [r5]\n\ + mul r0, r0, r2\n\ + add r0, r0, r3\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + b ._1426\n\ +._1428:\n\ + .align 2, 0\n\ +._1427:\n\ + .word gBattleMons\n\ +._1411:\n\ + mov r2, r8\n\ + strb r6, [r2]\n\ + mov r3, #0x58\n\ + add r0, r6, #0\n\ + mul r0, r0, r3\n\ + ldr r5, ._1436\n\ + add r0, r0, r5\n\ + add r2, r0, #0\n\ + add r2, r2, #0x20\n\ + ldrb r1, [r2]\n\ + cmp r1, #0\n\ + beq ._1430 @cond_branch\n\ + ldrh r0, [r0, #0x28]\n\ + cmp r0, #0\n\ + beq ._1430 @cond_branch\n\ + ldr r0, [sp, #0x1c]\n\ + strb r1, [r0]\n\ + ldrb r0, [r2]\n\ +._1426:\n\ + ldr r1, ._1436 + 4\n\ + strb r0, [r1]\n\ +._1416:\n\ + mov r0, r9\n\ + add r0, r0, #0x1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1430:\n\ + mov r2, r9\n\ + cmp r2, #0\n\ + beq ._1431 @cond_branch\n\ + b ._1432\n\ +._1431:\n\ + ldr r3, [sp, #0x1c]\n\ + add r3, r3, #0x58\n\ + str r3, [sp, #0x1c]\n\ + ldr r5, [sp, #0x20]\n\ + add r5, r5, #0x4\n\ + str r5, [sp, #0x20]\n\ + add r4, r4, #0x1\n\ + ldr r0, ._1436 + 8\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + bge ._1433 @cond_branch\n\ + b ._1434\n\ +._1433:\n\ + b ._1534\n\ +._1437:\n\ + .align 2, 0\n\ +._1436:\n\ + .word gBattleMons\n\ + .word gLastUsedAbility\n\ + .word gNoOfAllBanks\n\ +._754:\n\ + mov r4, #0x0\n\ + ldr r0, ._1445\n\ + ldrb r1, [r0]\n\ + cmp r4, r1\n\ + blt ._1438 @cond_branch\n\ + b ._1534\n\ +._1438:\n\ + ldr r0, ._1445 + 4\n\ + add r5, r1, #0\n\ + ldr r2, ._1445 + 8\n\ + add r3, r0, #0\n\ + add r3, r3, #0x20\n\ + mov r6, #0x80\n\ + lsl r6, r6, #0xc\n\ +._1443:\n\ + ldrb r1, [r3]\n\ + cmp r1, #0x16\n\ + bne ._1441 @cond_branch\n\ + ldr r0, [r2]\n\ + and r0, r0, r6\n\ + cmp r0, #0\n\ + beq ._1441 @cond_branch\n\ + b ._1442\n\ +._1441:\n\ + add r2, r2, #0x4\n\ + add r3, r3, #0x58\n\ + add r4, r4, #0x1\n\ + cmp r4, r5\n\ + blt ._1443 @cond_branch\n\ + b ._1534\n\ +._1446:\n\ + .align 2, 0\n\ +._1445:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ + .word gStatuses3\n\ +._756:\n\ + mov r0, sl\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + lsr r5, r0, #0x18\n\ + mov r4, #0x0\n\ + ldr r0, ._1453\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1447 @cond_branch\n\ + b ._1534\n\ +._1447:\n\ + ldr r7, ._1453 + 4\n\ +._1451:\n\ + lsl r0, r4, #0x18\n\ + lsr r0, r0, #0x18\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + add r3, r4, #1\n\ + cmp r0, r5\n\ + beq ._1450 @cond_branch\n\ + mov r0, #0x58\n\ + mul r0, r0, r4\n\ + add r0, r0, r7\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, r6\n\ + bne ._1450 @cond_branch\n\ + ldr r0, ._1453 + 8\n\ + strb r6, [r0]\n\ + lsl r0, r3, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1450:\n\ + add r4, r3, #0\n\ + ldr r0, ._1453\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1451 @cond_branch\n\ + b ._1534\n\ +._1454:\n\ + .align 2, 0\n\ +._1453:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ + .word gLastUsedAbility\n\ +._757:\n\ + mov r0, sl\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + lsr r5, r0, #0x18\n\ + mov r4, #0x0\n\ + ldr r0, ._1461\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1455 @cond_branch\n\ + b ._1534\n\ +._1455:\n\ + ldr r7, ._1461 + 4\n\ +._1459:\n\ + lsl r0, r4, #0x18\n\ + lsr r0, r0, #0x18\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + add r3, r4, #1\n\ + cmp r0, r5\n\ + bne ._1458 @cond_branch\n\ + mov r0, #0x58\n\ + mul r0, r0, r4\n\ + add r0, r0, r7\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, r6\n\ + bne ._1458 @cond_branch\n\ + ldr r0, ._1461 + 8\n\ + strb r6, [r0]\n\ + lsl r0, r3, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1458:\n\ + add r4, r3, #0\n\ + ldr r0, ._1461\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1459 @cond_branch\n\ + b ._1534\n\ +._1462:\n\ + .align 2, 0\n\ +._1461:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ + .word gLastUsedAbility\n\ +._758:\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + cmp r0, #0xfd\n\ + beq ._1463 @cond_branch\n\ + cmp r0, #0xfe\n\ + beq ._1464 @cond_branch\n\ + mov r4, #0x0\n\ + ldr r0, ._1468\n\ + add r5, r0, #0\n\ + ldrb r2, [r5]\n\ + cmp r4, r2\n\ + blt ._1465 @cond_branch\n\ + b ._1534\n\ +._1465:\n\ + ldr r2, ._1468 + 4\n\ + b ._1485\n\ +._1469:\n\ + .align 2, 0\n\ +._1468:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ +._1463:\n\ + mov r4, #0x0\n\ + ldr r0, ._1475\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1470 @cond_branch\n\ + b ._1534\n\ +._1470:\n\ + ldr r5, ._1475 + 4\n\ + mov r2, #0x80\n\ + lsl r2, r2, #0x9\n\ + add r1, r0, #0\n\ +._1473:\n\ + lsl r0, r4, #0x2\n\ + add r0, r0, r5\n\ + ldr r0, [r0]\n\ + and r0, r0, r2\n\ + add r3, r4, #1\n\ + cmp r0, #0\n\ + beq ._1472 @cond_branch\n\ + lsl r0, r3, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1472:\n\ + add r4, r3, #0\n\ + cmp r4, r1\n\ + blt ._1473 @cond_branch\n\ + b ._1534\n\ +._1476:\n\ + .align 2, 0\n\ +._1475:\n\ + .word gNoOfAllBanks\n\ + .word gStatuses3\n\ +._1464:\n\ + mov r4, #0x0\n\ + ldr r0, ._1482\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1477 @cond_branch\n\ + b ._1534\n\ +._1477:\n\ + ldr r5, ._1482 + 4\n\ + mov r2, #0x80\n\ + lsl r2, r2, #0xa\n\ + add r1, r0, #0\n\ +._1480:\n\ + lsl r0, r4, #0x2\n\ + add r0, r0, r5\n\ + ldr r0, [r0]\n\ + and r0, r0, r2\n\ + add r3, r4, #1\n\ + cmp r0, #0\n\ + beq ._1479 @cond_branch\n\ + lsl r0, r3, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1479:\n\ + add r4, r3, #0\n\ + cmp r4, r1\n\ + blt ._1480 @cond_branch\n\ + b ._1534\n\ +._1483:\n\ + .align 2, 0\n\ +._1482:\n\ + .word gNoOfAllBanks\n\ + .word gStatuses3\n\ +._1485:\n\ + mov r0, #0x58\n\ + mul r0, r0, r4\n\ + add r0, r0, r2\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + add r3, r4, #1\n\ + cmp r0, r6\n\ + bne ._1484 @cond_branch\n\ + mov r0, r8\n\ + strb r6, [r0]\n\ + lsl r0, r3, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1484:\n\ + add r4, r3, #0\n\ + ldrb r1, [r5]\n\ + cmp r4, r1\n\ + blt ._1485 @cond_branch\n\ + b ._1534\n\ +._763:\n\ + mov r4, #0x0\n\ + ldr r0, ._1493\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1487 @cond_branch\n\ + b ._1534\n\ +._1487:\n\ + ldr r7, ._1493 + 4\n\ + add r2, r0, #0\n\ + mov r5, #0x58\n\ +._1491:\n\ + add r0, r4, #0\n\ + mul r0, r0, r5\n\ + add r1, r0, r7\n\ + add r0, r1, #0\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + add r3, r4, #1\n\ + cmp r0, r6\n\ + bne ._1490 @cond_branch\n\ + ldrh r0, [r1, #0x28]\n\ + cmp r0, #0\n\ + beq ._1490 @cond_branch\n\ + mov r0, r8\n\ + strb r6, [r0]\n\ + lsl r0, r3, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1490:\n\ + add r4, r3, #0\n\ + cmp r4, r2\n\ + blt ._1491 @cond_branch\n\ + b ._1534\n\ +._1494:\n\ + .align 2, 0\n\ +._1493:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ +._759:\n\ + mov r4, #0x0\n\ + ldr r0, ._1501\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1495 @cond_branch\n\ + b ._1534\n\ +._1495:\n\ + ldr r7, ._1501 + 4\n\ + add r1, r0, #0\n\ + mov r5, #0x58\n\ + ldr r2, ._1501 + 8\n\ +._1499:\n\ + add r0, r4, #0\n\ + mul r0, r0, r5\n\ + add r0, r0, r7\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + add r3, r4, #1\n\ + cmp r0, r6\n\ + bne ._1498 @cond_branch\n\ + cmp r4, sl\n\ + beq ._1498 @cond_branch\n\ + strb r6, [r2]\n\ + lsl r0, r3, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1498:\n\ + add r4, r3, #0\n\ + cmp r4, r1\n\ + blt ._1499 @cond_branch\n\ + b ._1534\n\ +._1502:\n\ + .align 2, 0\n\ +._1501:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ + .word gLastUsedAbility\n\ +._760:\n\ + mov r0, sl\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + lsr r5, r0, #0x18\n\ + mov r4, #0x0\n\ + ldr r0, ._1509\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1503 @cond_branch\n\ + b ._1534\n\ +._1503:\n\ + ldr r7, ._1509 + 4\n\ +._1507:\n\ + lsl r0, r4, #0x18\n\ + lsr r0, r0, #0x18\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, r5\n\ + beq ._1506 @cond_branch\n\ + mov r0, #0x58\n\ + mul r0, r0, r4\n\ + add r0, r0, r7\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, r6\n\ + bne ._1506 @cond_branch\n\ + ldr r0, ._1509 + 8\n\ + strb r6, [r0]\n\ + mov r0, r9\n\ + add r0, r0, #0x1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1506:\n\ + add r4, r4, #0x1\n\ + ldr r0, ._1509\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1507 @cond_branch\n\ + b ._1534\n\ +._1510:\n\ + .align 2, 0\n\ +._1509:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ + .word gLastUsedAbility\n\ +._761:\n\ + mov r0, sl\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + lsr r5, r0, #0x18\n\ + mov r4, #0x0\n\ + ldr r0, ._1517\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1511 @cond_branch\n\ + b ._1534\n\ +._1511:\n\ + ldr r7, ._1517 + 4\n\ +._1515:\n\ + lsl r0, r4, #0x18\n\ + lsr r0, r0, #0x18\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, r5\n\ + bne ._1514 @cond_branch\n\ + mov r0, #0x58\n\ + mul r0, r0, r4\n\ + add r0, r0, r7\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, r6\n\ + bne ._1514 @cond_branch\n\ + ldr r0, ._1517 + 8\n\ + strb r6, [r0]\n\ + mov r0, r9\n\ + add r0, r0, #0x1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1514:\n\ + add r4, r4, #0x1\n\ + ldr r0, ._1517\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._1515 @cond_branch\n\ + b ._1534\n\ +._1518:\n\ + .align 2, 0\n\ +._1517:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ + .word gLastUsedAbility\n\ +._853:\n\ + ldr r0, ._1520\n\ + bl BattleScriptPushCursorAndCallback\n\ + ldr r0, ._1520 + 4\n\ + ldr r2, ._1520 + 8\n\ + add r1, r0, r2\n\ + strb r6, [r1]\n\ + mov r1, r9\n\ + sub r1, r1, #0x1\n\ + ldr r3, ._1520 + 12\n\ + add r0, r0, r3\n\ + strb r1, [r0]\n\ + b ._1534\n\ +._1521:\n\ + .align 2, 0\n\ +._1520:\n\ + .word BattleScript_CastformChange\n\ + .word +0x2000000\n\ + .word 0x16003\n\ + .word 0x1609b\n\ +._1374:\n\ + ldr r0, ._1523\n\ + bl BattleScriptPushCursorAndCallback\n\ + ldr r0, ._1523 + 4\n\ + ldr r5, ._1523 + 8\n\ + add r1, r0, r5\n\ + mov r2, sl\n\ + strb r2, [r1]\n\ + mov r1, r9\n\ + sub r1, r1, #0x1\n\ + ldr r3, ._1523 + 12\n\ + add r0, r0, r3\n\ + strb r1, [r0]\n\ + b ._1540\n\ +._1524:\n\ + .align 2, 0\n\ +._1523:\n\ + .word BattleScript_CastformChange\n\ + .word +0x2000000\n\ + .word 0x16003\n\ + .word 0x1609b\n\ +._1399:\n\ + mov r5, r8\n\ + strb r1, [r5]\n\ + ldr r0, [r2]\n\ + ldr r1, ._1526\n\ + and r0, r0, r1\n\ + str r0, [r2]\n\ + ldr r0, ._1526 + 4\n\ + bl BattleScriptPushCursorAndCallback\n\ + b ._1525\n\ +._1527:\n\ + .align 2, 0\n\ +._1526:\n\ + .word 0xfff7ffff\n\ + .word gUnknown_081D978C\n\ +._1432:\n\ + ldr r0, ._1529\n\ + bl BattleScriptPushCursorAndCallback\n\ + ldr r1, ._1529 + 4\n\ + ldr r2, [sp, #0x18]\n\ + add r1, r2, r1\n\ + ldr r0, [r1]\n\ + ldr r2, ._1529 + 8\n\ + and r0, r0, r2\n\ + str r0, [r1]\n\ + ldr r0, ._1529 + 12\n\ + ldr r3, ._1529 + 16\n\ + add r0, r0, r3\n\ + strb r4, [r0]\n\ + ldr r1, ._1529 + 20\n\ + mov r4, #0xfd\n\ + strb r4, [r1]\n\ + mov r0, #0x4\n\ + strb r0, [r1, #0x1]\n\ + ldr r2, ._1529 + 24\n\ + ldrb r0, [r2]\n\ + strb r0, [r1, #0x2]\n\ + ldr r3, ._1529 + 28\n\ + ldrb r0, [r2]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r3\n\ + ldrh r0, [r0]\n\ + strb r0, [r1, #0x3]\n\ + mov r0, #0xff\n\ + strb r0, [r1, #0x4]\n\ + ldr r1, ._1529 + 32\n\ + strb r4, [r1]\n\ + mov r0, #0x9\n\ + strb r0, [r1, #0x1]\n\ + ldr r0, ._1529 + 36\n\ + ldrb r0, [r0]\n\ + strb r0, [r1, #0x2]\n\ + mov r0, #0x1\n\ + neg r0, r0\n\ + strb r0, [r1, #0x3]\n\ + b ._1534\n\ +._1530:\n\ + .align 2, 0\n\ +._1529:\n\ + .word BattleScript_TraceActivates\n\ + .word gStatuses3\n\ + .word 0xffefffff\n\ + .word +0x2000000\n\ + .word 0x16003\n\ + .word gBattleTextBuff1\n\ + .word gActiveBank\n\ + .word gBattlePartyID\n\ + .word gBattleTextBuff2\n\ + .word gLastUsedAbility\n\ +._1442:\n\ + mov r5, r8\n\ + strb r1, [r5]\n\ + ldr r0, [r2]\n\ + ldr r1, ._1532\n\ + and r0, r0, r1\n\ + str r0, [r2]\n\ + bl BattleScriptPushCursor\n\ + ldr r1, ._1532 + 4\n\ + ldr r0, ._1532 + 8\n\ + str r0, [r1]\n\ +._1525:\n\ + ldr r0, ._1532 + 12\n\ + ldr r1, ._1532 + 16\n\ + add r0, r0, r1\n\ + strb r4, [r0]\n\ +._1392:\n\ + mov r0, r9\n\ + add r0, r0, #0x1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ + b ._1534\n\ +._1533:\n\ + .align 2, 0\n\ +._1532:\n\ + .word 0xfff7ffff\n\ + .word gBattlescriptCurrInstr\n\ + .word gUnknown_081D9795\n\ + .word +0x2000000\n\ + .word 0x160dd\n\ +._762:\n\ + mov r4, #0x0\n\ + ldr r0, ._1541\n\ + ldrb r1, [r0]\n\ + cmp r4, r1\n\ + bge ._1534 @cond_branch\n\ + ldr r0, ._1541 + 4\n\ + add r2, r1, #0\n\ + add r1, r0, #0\n\ + add r1, r1, #0x20\n\ + ldr r3, ._1541 + 8\n\ +._1537:\n\ + ldrb r0, [r1]\n\ + cmp r0, r6\n\ + bne ._1536 @cond_branch\n\ + cmp r4, sl\n\ + beq ._1536 @cond_branch\n\ + strb r6, [r3]\n\ + mov r0, r9\n\ + add r0, r0, #0x1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r9, r0\n\ +._1536:\n\ + add r1, r1, #0x58\n\ + add r4, r4, #0x1\n\ + cmp r4, r2\n\ + blt ._1537 @cond_branch\n\ +._1534:\n\ + mov r2, r9\n\ + cmp r2, #0\n\ + beq ._1540 @cond_branch\n\ +._916:\n\ + ldr r3, [sp, #0x4]\n\ + cmp r3, #0xb\n\ + bhi ._1540 @cond_branch\n\ + ldr r1, ._1541 + 8\n\ + ldrb r0, [r1]\n\ + cmp r0, #0xff\n\ + beq ._1540 @cond_branch\n\ + add r1, r0, #0\n\ + mov r0, sl\n\ + bl RecordAbilityBattle\n\ +._1540:\n\ + mov r0, r9\n\ + add sp, sp, #0x28\n\ + pop {r3, r4, r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov sl, r5\n\ + pop {r4, r5, r6, r7}\n\ + pop {r1}\n\ + bx r1\n\ +._1542:\n\ + .align 2, 0\n\ +._1541:\n\ + .word gNoOfAllBanks\n\ + .word gBattleMons\n\ + .word gLastUsedAbility"); +} +#else u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { u8 effect = 0; @@ -2498,6 +6558,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) return effect; } +#endif void BattleScriptExecute(const u8* BS_ptr) { @@ -3377,6 +7438,417 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target return targetBank; } +#if DEBUG +__attribute__((naked)) +u8 IsMonDisobedient(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, r9\n\ + mov r6, r8\n\ + push {r6, r7}\n\ + add sp, sp, #0xfffffff0\n\ + ldr r0, ._1785\n\ + ldrh r1, [r0]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1791 @cond_branch\n\ + ldr r4, ._1785 + 4\n\ + ldrb r0, [r4]\n\ + bl GetBankSide\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + beq ._1791 @cond_branch\n\ + ldr r2, ._1785 + 8\n\ + ldrb r1, [r4]\n\ + mov r0, #0x58\n\ + mul r1, r1, r0\n\ + add r0, r2, #0\n\ + add r0, r0, #0x54\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + add r2, r2, #0x3c\n\ + add r1, r1, r2\n\ + bl IsOtherTrainer\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._1791 @cond_branch\n\ + ldr r0, ._1785 + 12\n\ + ldrb r1, [r0]\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1783 @cond_branch\n\ + mov r0, #0xa\n\ + b ._1784\n\ +._1786:\n\ + .align 2, 0\n\ +._1785:\n\ + .word gBattleTypeFlags\n\ + .word gBankAttacker\n\ + .word gBattleMons\n\ + .word gUnknown_02023A14+0x50\n\ +._1783:\n\ + ldr r0, ._1794\n\ + bl FlagGet\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._1791 @cond_branch\n\ + mov r1, #0xa\n\ + mov r8, r1\n\ + ldr r0, ._1794 + 4\n\ + bl FlagGet\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._1788 @cond_branch\n\ + mov r2, #0x1e\n\ + mov r8, r2\n\ +._1788:\n\ + ldr r0, ._1794 + 8\n\ + bl FlagGet\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._1789 @cond_branch\n\ + mov r4, #0x32\n\ + mov r8, r4\n\ +._1789:\n\ + ldr r0, ._1794 + 12\n\ + bl FlagGet\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._1790 @cond_branch\n\ + mov r0, #0x46\n\ +._1784:\n\ + mov r8, r0\n\ +._1790:\n\ + ldr r5, ._1794 + 16\n\ + ldr r7, ._1794 + 20\n\ + ldrb r0, [r7]\n\ + mov r6, #0x58\n\ + mul r0, r0, r6\n\ + add r0, r0, r5\n\ + add r0, r0, #0x2a\n\ + ldrb r0, [r0]\n\ + cmp r0, r8\n\ + bls ._1791 @cond_branch\n\ + bl Random\n\ + mov r1, #0xff\n\ + and r1, r1, r0\n\ + ldrb r0, [r7]\n\ + add r2, r0, #0\n\ + mul r2, r2, r6\n\ + add r0, r2, r5\n\ + add r0, r0, #0x2a\n\ + ldrb r0, [r0]\n\ + add r0, r0, r8\n\ + mul r0, r0, r1\n\ + asr r4, r0, #0x8\n\ + cmp r4, r8\n\ + bge ._1792 @cond_branch\n\ +._1791:\n\ + mov r0, #0x0\n\ + b ._1823\n\ +._1795:\n\ + .align 2, 0\n\ +._1794:\n\ + .word 0x80e\n\ + .word 0x808\n\ + .word 0x80a\n\ + .word 0x80c\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ +._1792:\n\ + ldr r3, ._1801\n\ + ldrh r0, [r3]\n\ + cmp r0, #0x63\n\ + bne ._1796 @cond_branch\n\ + add r0, r5, #0\n\ + add r0, r0, #0x50\n\ + add r0, r2, r0\n\ + ldr r1, [r0]\n\ + ldr r2, ._1801 + 4\n\ + and r1, r1, r2\n\ + str r1, [r0]\n\ +._1796:\n\ + ldrb r0, [r7]\n\ + mul r0, r0, r6\n\ + add r1, r5, #0\n\ + add r1, r1, #0x4c\n\ + add r0, r0, r1\n\ + ldr r0, [r0]\n\ + mov r1, #0x7\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1799 @cond_branch\n\ + ldrh r0, [r3]\n\ + cmp r0, #0xad\n\ + beq ._1798 @cond_branch\n\ + cmp r0, #0xd6\n\ + bne ._1799 @cond_branch\n\ +._1798:\n\ + ldr r1, ._1801 + 8\n\ + ldr r0, ._1801 + 12\n\ + b ._1819\n\ +._1802:\n\ + .align 2, 0\n\ +._1801:\n\ + .word gCurrentMove\n\ + .word 0xff7fffff\n\ + .word gBattlescriptCurrInstr\n\ + .word gUnknown_081D995F\n\ +._1799:\n\ + bl Random\n\ + mov r5, #0xff\n\ + add r1, r5, #0\n\ + and r1, r1, r0\n\ + ldr r6, ._1808\n\ + ldr r2, ._1808 + 4\n\ + mov r9, r2\n\ + ldrb r3, [r2]\n\ + mov r7, #0x58\n\ + add r0, r3, #0\n\ + mul r0, r0, r7\n\ + add r0, r0, r6\n\ + add r0, r0, #0x2a\n\ + ldrb r2, [r0]\n\ + mov r4, r8\n\ + add r0, r2, r4\n\ + mul r0, r0, r1\n\ + asr r4, r0, #0x8\n\ + cmp r4, r8\n\ + bge ._1803 @cond_branch\n\ + ldr r7, ._1808 + 8\n\ + ldr r5, ._1808 + 12\n\ + ldrb r0, [r5]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r7\n\ + ldrb r1, [r0]\n\ + add r0, r3, #0\n\ + mov r2, #0xff\n\ + bl CheckMoveLimitations\n\ + lsl r0, r0, #0x18\n\ + lsr r4, r0, #0x18\n\ + cmp r4, #0xf\n\ + bne ._1804 @cond_branch\n\ + b ._1805\n\ +._1804:\n\ + add r6, r5, #0\n\ + ldr r0, ._1808 + 16\n\ + mov r9, r0\n\ + mov r1, #0x3\n\ + mov r8, r1\n\ +._1806:\n\ + bl Random\n\ + mov r2, r8\n\ + and r0, r0, r2\n\ + mov r1, r9\n\ + strb r0, [r1]\n\ + strb r0, [r6]\n\ + ldrb r0, [r6]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r7\n\ + ldr r5, [r0]\n\ + and r5, r5, r4\n\ + cmp r5, #0\n\ + bne ._1806 @cond_branch\n\ + ldr r4, ._1808 + 20\n\ + ldr r3, ._1808\n\ + ldr r0, ._1808 + 12\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x1\n\ + ldr r1, ._1808 + 4\n\ + ldrb r2, [r1]\n\ + mov r1, #0x58\n\ + mul r1, r1, r2\n\ + add r0, r0, r1\n\ + add r3, r3, #0xc\n\ + add r0, r0, r3\n\ + ldrh r0, [r0]\n\ + strh r0, [r4]\n\ + ldr r0, ._1808 + 24\n\ + strb r5, [r0, #0x3]\n\ + ldr r0, ._1808 + 28\n\ + mov r1, #0x0\n\ + strh r5, [r0]\n\ + ldr r0, ._1808 + 32\n\ + ldr r2, ._1808 + 36\n\ + add r0, r0, r2\n\ + strb r1, [r0]\n\ + ldr r1, ._1808 + 40\n\ + ldr r0, ._1808 + 44\n\ + str r0, [r1]\n\ + ldrh r0, [r4]\n\ + mov r1, #0x0\n\ + bl GetMoveTarget\n\ + ldr r1, ._1808 + 48\n\ + strb r0, [r1]\n\ + ldr r2, ._1808 + 52\n\ + ldr r0, [r2]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0xe\n\ + b ._1807\n\ +._1809:\n\ + .align 2, 0\n\ +._1808:\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gBitTable\n\ + .word gCurrMovePos\n\ + .word gUnknown_02024BE5\n\ + .word gRandomMove\n\ + .word gBattleCommunication\n\ + .word gDynamicBasePower\n\ + .word +0x2000000\n\ + .word 0x1601c\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_IgnoresAndUsesRandomMove\n\ + .word gBankTarget\n\ + .word gHitMarker\n\ +._1803:\n\ + mov r4, r8\n\ + sub r0, r2, r4\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + mov r8, r0\n\ + bl Random\n\ + add r4, r5, #0\n\ + and r4, r4, r0\n\ + cmp r4, r8\n\ + bge ._1818 @cond_branch\n\ + mov r1, r9\n\ + ldrb r0, [r1]\n\ + add r1, r0, #0\n\ + mul r1, r1, r7\n\ + add r0, r6, #0\n\ + add r0, r0, #0x4c\n\ + add r0, r1, r0\n\ + ldr r0, [r0]\n\ + and r0, r0, r5\n\ + cmp r0, #0\n\ + bne ._1818 @cond_branch\n\ + add r0, r1, r6\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x48\n\ + beq ._1818 @cond_branch\n\ + cmp r0, #0xf\n\ + beq ._1818 @cond_branch\n\ + mov r2, #0x0\n\ + ldr r0, ._1820\n\ + ldrb r3, [r0]\n\ + add r7, r0, #0\n\ + cmp r2, r3\n\ + bge ._1816 @cond_branch\n\ + ldr r0, [r6, #0x50]\n\ + mov r1, #0x70\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1816 @cond_branch\n\ + add r1, r6, #0\n\ + add r1, r1, #0x50\n\ + mov r5, #0x70\n\ +._1817:\n\ + add r1, r1, #0x58\n\ + add r2, r2, #0x1\n\ + cmp r2, r3\n\ + bge ._1816 @cond_branch\n\ + ldr r0, [r1]\n\ + and r0, r0, r5\n\ + cmp r0, #0\n\ + beq ._1817 @cond_branch\n\ +._1816:\n\ + ldrb r7, [r7]\n\ + cmp r2, r7\n\ + bne ._1818 @cond_branch\n\ + ldr r1, ._1820 + 4\n\ + ldr r0, ._1820 + 8\n\ + b ._1819\n\ +._1821:\n\ + .align 2, 0\n\ +._1820:\n\ + .word gNoOfAllBanks\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_IgnoresAndFallsAsleep\n\ +._1818:\n\ + mov r2, r8\n\ + sub r4, r4, r2\n\ + cmp r4, r8\n\ + blt ._1822 @cond_branch\n\ +._1805:\n\ + bl Random\n\ + ldr r2, ._1824\n\ + mov r1, #0x3\n\ + and r1, r1, r0\n\ + strb r1, [r2, #0x5]\n\ + ldr r1, ._1824 + 4\n\ + ldr r0, ._1824 + 8\n\ +._1819:\n\ + str r0, [r1]\n\ + mov r0, #0x1\n\ + b ._1823\n\ +._1825:\n\ + .align 2, 0\n\ +._1824:\n\ + .word gBattleCommunication\n\ + .word gBattlescriptCurrInstr\n\ + .word BattleScript_MoveUsedLoafingAround\n\ +._1822:\n\ + ldr r4, ._1826\n\ + ldrb r1, [r4]\n\ + mov r0, #0x58\n\ + mul r1, r1, r0\n\ + ldr r0, ._1826 + 4\n\ + add r1, r1, r0\n\ + mov r0, #0x28\n\ + str r0, [sp]\n\ + mov r0, #0x0\n\ + str r0, [sp, #0x4]\n\ + ldrb r0, [r4]\n\ + str r0, [sp, #0x8]\n\ + ldrb r0, [r4]\n\ + str r0, [sp, #0xc]\n\ + add r0, r1, #0\n\ + mov r2, #0x1\n\ + mov r3, #0x0\n\ + bl CalculateBaseDamage\n\ + ldr r1, ._1826 + 8\n\ + str r0, [r1]\n\ + ldr r1, ._1826 + 12\n\ + ldrb r0, [r4]\n\ + strb r0, [r1]\n\ + ldr r1, ._1826 + 16\n\ + ldr r0, ._1826 + 20\n\ + str r0, [r1]\n\ + ldr r2, ._1826 + 24\n\ + ldr r0, [r2]\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0xc\n\ +._1807:\n\ + orr r0, r0, r1\n\ + str r0, [r2]\n\ + mov r0, #0x2\n\ +._1823:\n\ + add sp, sp, #0x10\n\ + pop {r3, r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4, r5, r6, r7}\n\ + pop {r1}\n\ + bx r1\n\ +._1827:\n\ + .align 2, 0\n\ +._1826:\n\ + .word gBankAttacker\n\ + .word gBattleMons\n\ + .word gBattleMoveDamage\n\ + .word gBankTarget\n\ + .word gBattlescriptCurrInstr\n\ + .word gUnknown_081D99A0\n\ + .word gHitMarker"); +} +#else u8 IsMonDisobedient(void) { u8 obedienceLevel; @@ -3477,3 +7949,4 @@ u8 IsMonDisobedient(void) } } } +#endif -- cgit v1.2.3 From 6dea1a4af13d039c2bfe13170b3542cda535001b Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 17 Jan 2018 21:59:28 -0600 Subject: add debug code in battle_4.c and battle_controller_player.c --- src/battle/battle_4.c | 342 +++++++- src/battle/battle_controller_player.c | 1402 +++++++++++++++++++++++++++++++++ 2 files changed, 1742 insertions(+), 2 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 3763fc309..038b4f5cf 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -1090,7 +1090,7 @@ static const u8 sTerrainToType[] = TYPE_NORMAL, // plain }; -static const u8 sBallCatchBonuses[] = +const u8 sBallCatchBonuses[] = { 20, 15, 10, 15 // Ultra, Great, Poke, Safari }; @@ -5018,7 +5018,156 @@ _0801F610: .4byte BattleScript_SAtkDown2\n\ } #endif // NONMATCHING - +#if DEBUG +__attribute__((naked)) +static void atk15_seteffectwithchance(void) +{ + asm("\ + push {r4, lr}\n\ + ldr r2, ._1037\n\ + ldr r0, ._1037 + 4\n\ + ldrb r1, [r0]\n\ + mov r0, #0x58\n\ + mul r0, r0, r1\n\ + add r0, r0, r2\n\ + add r0, r0, #0x20\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x20\n\ + bne ._1035 @cond_branch\n\ + ldr r2, ._1037 + 8\n\ + ldr r0, ._1037 + 12\n\ + ldrh r1, [r0]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r2\n\ + ldrb r0, [r0, #0x5]\n\ + lsl r4, r0, #0x1\n\ + b ._1036\n\ +._1038:\n\ + .align 2, 0\n\ +._1037:\n\ + .word gBattleMons\n\ + .word gBankAttacker\n\ + .word gBattleMoves\n\ + .word gCurrentMove\n\ +._1035:\n\ + ldr r2, ._1045\n\ + ldr r0, ._1045 + 4\n\ + ldrh r1, [r0]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r2\n\ + ldrb r4, [r0, #0x5]\n\ +._1036:\n\ + ldr r0, ._1045 + 8\n\ + ldrb r1, [r0]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + ldr r2, ._1045 + 12\n\ + cmp r0, #0\n\ + beq ._1039 @cond_branch\n\ + ldrb r1, [r2, #0x3]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1040 @cond_branch\n\ + ldr r0, ._1045 + 16\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1050 @cond_branch\n\ +._1039:\n\ + ldrb r1, [r2, #0x3]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._1043 @cond_branch\n\ +._1040:\n\ + ldr r0, ._1045 + 16\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1043 @cond_branch\n\ + ldr r2, ._1045 + 12\n\ + ldrb r1, [r2, #0x3]\n\ + mov r0, #0x7f\n\ + and r0, r0, r1\n\ + strb r0, [r2, #0x3]\n\ + b ._1044\n\ +._1046:\n\ + .align 2, 0\n\ +._1045:\n\ + .word gBattleMoves\n\ + .word gCurrentMove\n\ + .word gUnknown_02023A14+0x50\n\ + .word gBattleCommunication\n\ + .word gBattleMoveFlags\n\ +._1043:\n\ + bl Random\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + mov r1, #0x64\n\ + bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + lsl r0, r0, #0x10\n\ + lsr r0, r0, #0x10\n\ + cmp r0, r4\n\ + bhi ._1049 @cond_branch\n\ + ldr r0, ._1052\n\ + ldrb r0, [r0, #0x3]\n\ + cmp r0, #0\n\ + beq ._1049 @cond_branch\n\ + ldr r0, ._1052 + 4\n\ + ldrb r1, [r0]\n\ + mov r0, #0x29\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._1049 @cond_branch\n\ + cmp r4, #0x63\n\ + bls ._1050 @cond_branch\n\ +._1044:\n\ + mov r0, #0x0\n\ + mov r1, #0x80\n\ + bl SetMoveEffect\n\ + b ._1054\n\ +._1053:\n\ + .align 2, 0\n\ +._1052:\n\ + .word gBattleCommunication\n\ + .word gBattleMoveFlags\n\ +._1050:\n\ + mov r0, #0x0\n\ + mov r1, #0x0\n\ + bl SetMoveEffect\n\ + b ._1054\n\ +._1049:\n\ + ldr r1, ._1055\n\ + ldr r0, [r1]\n\ + add r0, r0, #0x1\n\ + str r0, [r1]\n\ +._1054:\n\ + ldr r0, ._1055 + 4\n\ + mov r1, #0x0\n\ + strb r1, [r0, #0x3]\n\ + ldr r0, ._1055 + 8\n\ + ldr r2, ._1055 + 12\n\ + add r0, r0, r2\n\ + strb r1, [r0]\n\ + pop {r4}\n\ + pop {r0}\n\ + bx r0\n\ +._1056:\n\ + .align 2, 0\n\ +._1055:\n\ + .word gBattlescriptCurrInstr\n\ + .word gBattleCommunication\n\ + .word +0x2000000\n\ + .word 0x16112"); +} +#else static void atk15_seteffectwithchance(void) { u32 PercentChance; @@ -5043,6 +5192,7 @@ static void atk15_seteffectwithchance(void) gBattleCommunication[MOVE_EFFECT_BYTE] = 0; gBattleStruct->unk16112 = 0; } +#endif static void atk16_seteffectprimary(void) { @@ -12620,6 +12770,193 @@ static void atk9D_mimicattackcopy(void) } } +#if DEBUG +__attribute__((naked)) +static void atk9E_metronome(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + ldr r6, ._3076\n\ + ldrb r2, [r6]\n\ + lsl r1, r2, #0x1\n\ + ldr r0, ._3076 + 4\n\ + add r3, r1, r0\n\ + ldr r5, ._3076 + 8\n\ + mov r4, #0x58\n\ + add r0, r2, #0\n\ + mul r0, r0, r4\n\ + add r1, r0, r5\n\ + ldrh r0, [r1, #0xe]\n\ + cmp r0, #0\n\ + bne ._3071 @cond_branch\n\ + ldrh r2, [r1, #0x10]\n\ + cmp r2, #0\n\ + beq ._3071 @cond_branch\n\ + ldrh r0, [r1, #0x12]\n\ + cmp r0, #0\n\ + beq ._3071 @cond_branch\n\ + ldrh r0, [r3]\n\ + cmp r0, #0\n\ + bne ._3072 @cond_branch\n\ + strh r2, [r3]\n\ +._3072:\n\ + ldr r1, ._3076 + 12\n\ + ldrh r0, [r3]\n\ + strh r0, [r1]\n\ + ldrb r0, [r6]\n\ + mul r0, r0, r4\n\ + add r0, r0, r5\n\ + ldrh r5, [r0, #0x10]\n\ + ldrh r2, [r0, #0x12]\n\ + add r7, r1, #0\n\ + cmp r5, r2\n\ + bcs ._3073 @cond_branch\n\ + ldrh r0, [r3]\n\ + cmp r0, r2\n\ + beq ._3074 @cond_branch\n\ + add r0, r0, #0x1\n\ + b ._3079\n\ +._3077:\n\ + .align 2, 0\n\ +._3076:\n\ + .word gBankAttacker\n\ + .word +0x20160b4\n\ + .word gBattleMons\n\ + .word gCurrentMove\n\ +._3073:\n\ + ldrh r4, [r3]\n\ + add r1, r4, #0\n\ + mov r0, #0xb1\n\ + lsl r0, r0, #0x1\n\ + cmp r1, r0\n\ + bne ._3078 @cond_branch\n\ + mov r0, #0x1\n\ + b ._3079\n\ +._3078:\n\ + cmp r1, r2\n\ + bne ._3080 @cond_branch\n\ +._3074:\n\ + strh r5, [r3]\n\ + b ._3081\n\ +._3080:\n\ + add r0, r4, #1\n\ +._3079:\n\ + strh r0, [r3]\n\ +._3081:\n\ + ldr r4, ._3083\n\ + ldr r2, [r4]\n\ + ldr r0, ._3083 + 4\n\ + and r2, r2, r0\n\ + str r2, [r4]\n\ + ldr r6, ._3083 + 8\n\ + ldr r5, ._3083 + 12\n\ + ldr r3, ._3083 + 16\n\ + ldrh r1, [r7]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r3\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r5\n\ + ldr r0, [r0]\n\ + str r0, [r6]\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x4\n\ + orr r2, r2, r0\n\ + str r2, [r4]\n\ + ldrh r0, [r7]\n\ + b ._3082\n\ +._3084:\n\ + .align 2, 0\n\ +._3083:\n\ + .word gHitMarker\n\ + .word 0xfffffbff\n\ + .word gBattlescriptCurrInstr\n\ + .word gBattleScriptsForMoveEffects\n\ + .word gBattleMoves\n\ +._3071:\n\ + ldr r7, ._3090\n\ + mov r6, #0xb1\n\ + lsl r6, r6, #0x1\n\ + ldr r5, ._3090 + 4\n\ + ldr r0, ._3090 + 8\n\ + mov r8, r0\n\ +._3089:\n\ + bl Random\n\ + ldr r2, ._3090 + 12\n\ + add r1, r2, #0\n\ + and r0, r0, r1\n\ + add r0, r0, #0x1\n\ + strh r0, [r7]\n\ + cmp r0, r6\n\ + bhi ._3089 @cond_branch\n\ + mov r0, #0x3\n\ +._3086:\n\ + sub r0, r0, #0x1\n\ + cmp r0, #0\n\ + bge ._3086 @cond_branch\n\ + ldr r4, ._3090\n\ + ldrh r2, [r4]\n\ + ldr r3, ._3090 + 16\n\ + sub r0, r5, #2\n\ +._3088:\n\ + add r0, r0, #0x2\n\ + ldrh r1, [r0]\n\ + cmp r1, r2\n\ + beq ._3087 @cond_branch\n\ + cmp r1, r3\n\ + bne ._3088 @cond_branch\n\ +._3087:\n\ + ldr r0, ._3090 + 16\n\ + cmp r1, r0\n\ + bne ._3089 @cond_branch\n\ + ldr r2, ._3090 + 20\n\ + ldr r0, [r2]\n\ + ldr r1, ._3090 + 24\n\ + and r0, r0, r1\n\ + str r0, [r2]\n\ + ldr r3, ._3090 + 28\n\ + ldr r2, ._3090 + 32\n\ + ldrh r1, [r4]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r2\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r3\n\ + ldr r0, [r0]\n\ + mov r1, r8\n\ + str r0, [r1]\n\ + ldrh r0, [r4]\n\ +._3082:\n\ + mov r1, #0x0\n\ + bl GetMoveTarget\n\ + ldr r1, ._3090 + 36\n\ + strb r0, [r1]\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._3091:\n\ + .align 2, 0\n\ +._3090:\n\ + .word gCurrentMove\n\ + .word sMovesForbiddenToCopy\n\ + .word gBattlescriptCurrInstr\n\ + .word 0x1ff\n\ + .word 0xffff\n\ + .word gHitMarker\n\ + .word 0xfffffbff\n\ + .word gBattleScriptsForMoveEffects\n\ + .word gBattleMoves\n\ + .word gBankTarget"); +} +#else #ifdef NONMATCHING static void atk9E_metronome(void) { @@ -12721,6 +13058,7 @@ _0802795C: .4byte gBankTarget\n\ .syntax divided"); } #endif // NONMATCHING +#endif static void atk9F_dmgtolevel(void) { diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 0d05b7aed..eaabe9b53 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -617,6 +617,725 @@ struct ChooseMoveStruct const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}"); +#if DEBUG +__attribute__((naked)) +void sub_802C68C(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, sl\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5, r6, r7}\n\ + add sp, sp, #0xfffffff8\n\ + mov r0, #0x0\n\ + mov r8, r0\n\ + mov r7, #0x0\n\ + ldr r1, ._131\n\ + ldrb r2, [r1]\n\ + lsl r1, r2, #0x9\n\ + ldr r0, ._131 + 4\n\ + add r6, r1, r0\n\ + ldr r0, ._131 + 8\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r5, #0x1\n\ + add r0, r5, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._126 @cond_branch\n\ + b ._127\n\ +._126:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r1, ._131 + 12\n\ + ldr r2, ._131\n\ + ldrb r0, [r2]\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x1\n\ + add r1, r6, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, #0xae\n\ + bne ._128 @cond_branch\n\ + ldrb r0, [r6, #0x12]\n\ + mov r4, #0x0\n\ + cmp r0, #0x7\n\ + beq ._130 @cond_branch\n\ + ldrb r1, [r6, #0x13]\n\ + mov r0, #0x7\n\ + eor r1, r1, r0\n\ + neg r0, r1\n\ + orr r0, r0, r1\n\ + asr r4, r0, #0x1f\n\ + mov r0, #0x10\n\ + and r4, r4, r0\n\ + b ._130\n\ +._132:\n\ + .align 2, 0\n\ +._131:\n\ + .word gActiveBank\n\ + .word gUnknown_02023A64\n\ + .word gMain\n\ + .word gMoveSelectionCursor\n\ +._128:\n\ + ldr r2, ._135\n\ + ldrh r1, [r1]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r2\n\ + ldrb r4, [r0, #0x6]\n\ +._130:\n\ + mov r0, #0x10\n\ + and r0, r0, r4\n\ + cmp r0, #0\n\ + beq ._133 @cond_branch\n\ + ldr r0, ._135 + 4\n\ + ldr r1, ._135 + 8\n\ + ldrb r1, [r1]\n\ + strb r1, [r0]\n\ + b ._134\n\ +._136:\n\ + .align 2, 0\n\ +._135:\n\ + .word gBattleMoves\n\ + .word gUnknown_03004344\n\ + .word gActiveBank\n\ +._133:\n\ + ldr r0, ._141\n\ + ldrb r0, [r0]\n\ + bl GetBankIdentity\n\ + add r1, r0, #0\n\ + mov r2, #0x1\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + eor r0, r0, r2\n\ + bl GetBankByIdentity\n\ + ldr r1, ._141 + 4\n\ + strb r0, [r1]\n\ +._134:\n\ + ldr r3, ._141 + 8\n\ + ldr r5, ._141\n\ + ldrb r2, [r5]\n\ + lsl r1, r2, #0x9\n\ + add r0, r3, #1\n\ + add r0, r1, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + bne ._137 @cond_branch\n\ + mov r0, #0x2\n\ + and r0, r0, r4\n\ + cmp r0, #0\n\ + beq ._146 @cond_branch\n\ + add r0, r3, #2\n\ + add r0, r1, r0\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + bne ._146 @cond_branch\n\ + mov r0, #0x1\n\ + add r8, r8, r0\n\ + b ._146\n\ +._142:\n\ + .align 2, 0\n\ +._141:\n\ + .word gActiveBank\n\ + .word gUnknown_03004344\n\ + .word gBattleBufferA\n\ +._137:\n\ + mov r0, #0x7d\n\ + and r0, r0, r4\n\ + cmp r0, #0\n\ + bne ._143 @cond_branch\n\ + mov r1, #0x1\n\ + add r8, r8, r1\n\ +._143:\n\ + ldr r0, ._149\n\ + add r0, r2, r0\n\ + add r1, r6, #0\n\ + add r1, r1, #0x8\n\ + ldrb r0, [r0]\n\ + add r1, r1, r0\n\ + ldrb r0, [r1]\n\ + cmp r0, #0\n\ + beq ._144 @cond_branch\n\ + mov r0, #0x12\n\ + and r0, r0, r4\n\ + cmp r0, #0\n\ + bne ._146 @cond_branch\n\ + mov r0, #0x0\n\ + bl CountAliveMons\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + bhi ._146 @cond_branch\n\ + ldrb r0, [r5]\n\ + bl sub_803C434\n\ + ldr r1, ._149 + 4\n\ + strb r0, [r1]\n\ + mov r2, #0x0\n\ + mov r8, r2\n\ +._146:\n\ + mov r0, r8\n\ + cmp r0, #0\n\ + bne ._147 @cond_branch\n\ +._144:\n\ + bl DestroyMenuCursor\n\ + ldr r1, ._149\n\ + ldr r0, ._149 + 8\n\ + ldrb r0, [r0]\n\ + add r0, r0, r1\n\ + ldrb r2, [r0]\n\ + ldr r0, ._149 + 4\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x8\n\ + orr r2, r2, r0\n\ + b ._148\n\ +._150:\n\ + .align 2, 0\n\ +._149:\n\ + .word gMoveSelectionCursor\n\ + .word gUnknown_03004344\n\ + .word gActiveBank\n\ +._147:\n\ + ldr r1, ._153\n\ + ldr r2, ._153 + 4\n\ + ldrb r0, [r2]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, ._153 + 8\n\ + str r1, [r0]\n\ + mov r0, #0x12\n\ + and r4, r4, r0\n\ + cmp r4, #0\n\ + beq ._151 @cond_branch\n\ + ldr r1, ._153 + 12\n\ + ldrb r0, [r2]\n\ + b ._152\n\ +._154:\n\ + .align 2, 0\n\ +._153:\n\ + .word gBattleBankFunc\n\ + .word gActiveBank\n\ + .word sub_802C2EC+1\n\ + .word gUnknown_03004344\n\ +._151:\n\ + mov r0, #0x1\n\ + bl GetBankByIdentity\n\ + ldr r1, ._157\n\ + ldrb r1, [r1]\n\ + ldr r2, ._157 + 4\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x16\n\ + add r0, r0, r2\n\ + ldr r0, [r0]\n\ + and r1, r1, r0\n\ + cmp r1, #0\n\ + beq ._155 @cond_branch\n\ + mov r0, #0x3\n\ + b ._156\n\ +._158:\n\ + .align 2, 0\n\ +._157:\n\ + .word gAbsentBankFlags\n\ + .word gBitTable\n\ +._155:\n\ + mov r0, #0x1\n\ +._156:\n\ + bl GetBankByIdentity\n\ + ldr r1, ._160\n\ +._152:\n\ + strb r0, [r1]\n\ + ldr r2, ._160 + 4\n\ + ldr r1, ._160 + 8\n\ + ldr r0, ._160\n\ + ldrb r0, [r0]\n\ + add r0, r0, r1\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x4\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r2, r2, #0x1c\n\ + add r0, r0, r2\n\ + ldr r1, ._160 + 12\n\ + b ._203\n\ +._161:\n\ + .align 2, 0\n\ +._160:\n\ + .word gUnknown_03004344\n\ + .word gSprites\n\ + .word gObjectBankIDs\n\ + .word sub_8010520+1\n\ +._127:\n\ + mov r6, #0x2\n\ + add r0, r6, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._162 @cond_branch\n\ + bl DestroyMenuCursor\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r0, ._164\n\ + strh r7, [r0]\n\ + ldr r1, ._164 + 4\n\ + mov r2, #0xa0\n\ + lsl r2, r2, #0x1\n\ + add r0, r2, #0\n\ + strh r0, [r1]\n\ + ldr r2, ._164 + 8\n\ +._148:\n\ + mov r0, #0x1\n\ + mov r1, #0xa\n\ + bl Emitcmd33\n\ + bl PlayerBufferExecCompleted\n\ + b ._209\n\ +._165:\n\ + .align 2, 0\n\ +._164:\n\ + .word gBattle_BG0_X\n\ + .word gBattle_BG0_Y\n\ + .word 0xffff\n\ +._162:\n\ + mov r0, #0x20\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._166 @cond_branch\n\ + ldr r4, ._170\n\ + add r2, r2, r4\n\ + ldrb r1, [r2]\n\ + add r0, r5, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._167 @cond_branch\n\ + b ._209\n\ +._167:\n\ + ldrb r0, [r2]\n\ + bl nullsub_7\n\ + ldr r0, ._170 + 4\n\ + ldrb r1, [r0]\n\ + add r1, r1, r4\n\ + ldrb r0, [r1]\n\ + mov r2, #0x1\n\ + eor r0, r0, r2\n\ + b ._183\n\ +._171:\n\ + .align 2, 0\n\ +._170:\n\ + .word gMoveSelectionCursor\n\ + .word gActiveBank\n\ +._166:\n\ + mov r3, #0x10\n\ + add r0, r3, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._172 @cond_branch\n\ + ldr r4, ._178\n\ + add r3, r2, r4\n\ + ldrb r2, [r3]\n\ + mov r6, #0x1\n\ + add r0, r5, #0\n\ + and r0, r0, r2\n\ + cmp r0, #0\n\ + beq ._173 @cond_branch\n\ + b ._209\n\ +._173:\n\ + ldr r1, ._178 + 4\n\ + add r0, r6, #0\n\ + eor r0, r0, r2\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc ._175 @cond_branch\n\ + b ._209\n\ +._175:\n\ + ldrb r0, [r3]\n\ + bl nullsub_7\n\ + ldr r2, ._178 + 8\n\ + ldrb r1, [r2]\n\ + add r1, r1, r4\n\ + ldrb r0, [r1]\n\ + eor r0, r0, r6\n\ + b ._183\n\ +._179:\n\ + .align 2, 0\n\ +._178:\n\ + .word gMoveSelectionCursor\n\ + .word gUnknown_03004348\n\ + .word gActiveBank\n\ +._172:\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._180 @cond_branch\n\ + ldr r4, ._184\n\ + add r2, r2, r4\n\ + ldrb r1, [r2]\n\ + add r0, r6, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._181 @cond_branch\n\ + b ._209\n\ +._181:\n\ + ldrb r0, [r2]\n\ + bl nullsub_7\n\ + ldr r2, ._184 + 4\n\ + ldrb r1, [r2]\n\ + add r1, r1, r4\n\ + ldrb r0, [r1]\n\ + mov r2, #0x2\n\ + eor r0, r0, r2\n\ + b ._183\n\ +._185:\n\ + .align 2, 0\n\ +._184:\n\ + .word gMoveSelectionCursor\n\ + .word gActiveBank\n\ +._180:\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._186 @cond_branch\n\ + ldr r4, ._192\n\ + add r3, r2, r4\n\ + ldrb r2, [r3]\n\ + mov r5, #0x2\n\ + add r0, r6, #0\n\ + and r0, r0, r2\n\ + cmp r0, #0\n\ + beq ._187 @cond_branch\n\ + b ._209\n\ +._187:\n\ + ldr r1, ._192 + 4\n\ + add r0, r5, #0\n\ + eor r0, r0, r2\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc ._189 @cond_branch\n\ + b ._209\n\ +._189:\n\ + ldrb r0, [r3]\n\ + bl nullsub_7\n\ + ldr r2, ._192 + 8\n\ + ldrb r1, [r2]\n\ + add r1, r1, r4\n\ + ldrb r0, [r1]\n\ + eor r0, r0, r5\n\ +._183:\n\ + strb r0, [r1]\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldr r1, ._192 + 8\n\ + ldrb r0, [r1]\n\ + add r0, r0, r4\n\ + ldrb r0, [r0]\n\ + mov r1, #0x0\n\ + bl sub_802E3B4\n\ + bl sub_802E220\n\ + bl sub_802E2D4\n\ + b ._209\n\ +._193:\n\ + .align 2, 0\n\ +._192:\n\ + .word gMoveSelectionCursor\n\ + .word gUnknown_03004348\n\ + .word gActiveBank\n\ +._186:\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._194 @cond_branch\n\ + ldr r0, ._201\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + bhi ._195 @cond_branch\n\ + b ._209\n\ +._195:\n\ + ldr r0, ._201 + 4\n\ + ldrh r1, [r0]\n\ + add r0, r6, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._197 @cond_branch\n\ + b ._209\n\ +._197:\n\ + ldr r4, ._201 + 8\n\ + add r0, r2, r4\n\ + ldrb r0, [r0]\n\ + ldr r1, ._201 + 12\n\ + bl sub_802E12C\n\ + ldr r2, ._201 + 16\n\ + ldrb r0, [r2]\n\ + add r0, r0, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + beq ._199 @cond_branch\n\ + ldr r0, ._201 + 20\n\ + strb r7, [r0]\n\ + b ._200\n\ +._202:\n\ + .align 2, 0\n\ +._201:\n\ + .word gUnknown_03004348\n\ + .word gBattleTypeFlags\n\ + .word gMoveSelectionCursor\n\ + .word gUnknown_081FAE80\n\ + .word gActiveBank\n\ + .word gUnknown_03004344\n\ +._199:\n\ + ldr r1, ._204\n\ + add r0, r0, #0x1\n\ + strb r0, [r1]\n\ + add r0, r1, #0\n\ +._200:\n\ + ldrb r0, [r0]\n\ + mov r1, #0x1b\n\ + bl sub_802E3B4\n\ + ldr r4, ._204 + 4\n\ + ldr r1, ._204 + 8\n\ + mov r0, #0x1c\n\ + str r0, [sp]\n\ + mov r0, #0x3a\n\ + str r0, [sp, #0x4]\n\ + add r0, r4, #0\n\ + mov r2, #0x17\n\ + mov r3, #0x37\n\ + bl Text_FillWindowRect\n\ + ldr r1, ._204 + 12\n\ + mov r2, #0xa4\n\ + lsl r2, r2, #0x2\n\ + mov r0, #0x37\n\ + str r0, [sp]\n\ + add r0, r4, #0\n\ + mov r3, #0x17\n\ + bl Text_InitWindow\n\ + add r0, r4, #0\n\ + bl Text_PrintWindow8002F44\n\ + ldr r1, ._204 + 16\n\ + ldr r0, ._204 + 20\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, ._204 + 24\n\ + b ._203\n\ +._205:\n\ + .align 2, 0\n\ +._204:\n\ + .word gUnknown_03004344\n\ + .word gUnknown_03004210\n\ + .word 0x1016\n\ + .word BattleText_SwitchWhich\n\ + .word gBattleBankFunc\n\ + .word gActiveBank\n\ + .word sub_802CA60+1\n\ +._194:\n\ + ldr r0, ._214\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + beq ._206 @cond_branch\n\ + b ._209\n\ +._206:\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._208 @cond_branch\n\ + b ._209\n\ +._208:\n\ + ldr r6, ._214 + 4\n\ + ldr r1, ._214 + 8\n\ + str r3, [sp]\n\ + mov r0, #0x3a\n\ + str r0, [sp, #0x4]\n\ + add r0, r6, #0\n\ + mov r2, #0x1\n\ + mov r3, #0x37\n\ + bl Text_FillWindowRect\n\ + ldr r0, ._214 + 12\n\ + mov sl, r0\n\ + ldr r1, ._214 + 16\n\ + ldrb r0, [r1]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, sl\n\ + ldrh r0, [r0]\n\ + mov r2, #0x64\n\ + mov r9, r2\n\ + mov r1, r9\n\ + mul r1, r1, r0\n\ + add r0, r1, #0\n\ + ldr r5, ._214 + 20\n\ + add r0, r0, r5\n\ + mov r1, #0xd\n\ + bl GetMonData\n\ + mov r1, #0xd\n\ + mul r1, r1, r0\n\ + ldr r0, ._214 + 24\n\ + add r1, r1, r0\n\ + mov r2, #0x80\n\ + lsl r2, r2, #0x1\n\ + mov r0, #0x37\n\ + mov r8, r0\n\ + str r0, [sp]\n\ + add r0, r6, #0\n\ + mov r3, #0x2\n\ + bl Text_InitWindowAndPrintText\n\ + ldr r4, ._214 + 28\n\ + ldr r1, ._214 + 16\n\ + ldrb r0, [r1]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, sl\n\ + ldrh r0, [r0]\n\ + mov r2, r9\n\ + mul r2, r2, r0\n\ + add r0, r2, #0\n\ + add r0, r0, r5\n\ + mov r1, #0xd\n\ + bl GetMonData\n\ + add r1, r0, #0\n\ + add r0, r4, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x3\n\ + bl ConvertIntToDecimalStringN\n\ + mov r2, #0x88\n\ + lsl r2, r2, #0x1\n\ + mov r0, r8\n\ + str r0, [sp]\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + mov r3, #0xa\n\ + bl Text_InitWindowAndPrintText\n\ + ldr r1, ._214 + 32\n\ + mov r2, #0x8b\n\ + lsl r2, r2, #0x1\n\ + mov r5, #0x39\n\ + str r5, [sp]\n\ + add r0, r6, #0\n\ + mov r3, #0x1\n\ + bl Text_InitWindowAndPrintText\n\ + ldr r0, ._214 + 36\n\ + ldrb r1, [r0]\n\ + add r0, r4, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x3\n\ + bl ConvertIntToDecimalStringN\n\ + mov r2, #0x8e\n\ + lsl r2, r2, #0x1\n\ + str r5, [sp]\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + mov r3, #0x4\n\ + bl Text_InitWindowAndPrintText\n\ + ldr r0, ._214 + 40\n\ + add r2, r0, #0\n\ + add r2, r2, #0x3e\n\ + mov r1, #0x3f\n\ +._211:\n\ + ldrb r0, [r2]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._210 @cond_branch\n\ + add r0, r7, #1\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ +._210:\n\ + add r2, r2, #0x44\n\ + sub r1, r1, #0x1\n\ + cmp r1, #0\n\ + bge ._211 @cond_branch\n\ + ldr r4, ._214 + 28\n\ + add r0, r4, #0\n\ + add r1, r7, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x2\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r6, ._214 + 4\n\ + mov r2, #0x91\n\ + lsl r2, r2, #0x1\n\ + mov r5, #0x39\n\ + str r5, [sp]\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + mov r3, #0x8\n\ + bl Text_InitWindowAndPrintText\n\ + bl GetTaskCount\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ + add r0, r4, #0\n\ + add r1, r7, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x2\n\ + bl ConvertIntToDecimalStringN\n\ + mov r2, #0x93\n\ + lsl r2, r2, #0x1\n\ + str r5, [sp]\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + mov r3, #0xb\n\ + bl Text_InitWindowAndPrintText\n\ + mov r1, #0x0\n\ + mov r7, #0x0\n\ + ldr r0, ._214 + 44\n\ + mov r3, #0x1\n\ + ldr r2, [r0]\n\ +._213:\n\ + add r0, r3, #0\n\ + LSL r0, r1\n\ + and r0, r0, r2\n\ + cmp r0, #0\n\ + beq ._212 @cond_branch\n\ + add r0, r7, #1\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ +._212:\n\ + add r1, r1, #0x1\n\ + cmp r1, #0x1f\n\ + ble ._213 @cond_branch\n\ + ldr r4, ._214 + 28\n\ + add r0, r4, #0\n\ + add r1, r7, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x2\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r0, ._214 + 4\n\ + mov r2, #0x95\n\ + lsl r2, r2, #0x1\n\ + mov r1, #0x39\n\ + str r1, [sp]\n\ + add r1, r4, #0\n\ + mov r3, #0xe\n\ + bl Text_InitWindowAndPrintText\n\ + ldr r1, ._214 + 48\n\ + ldr r0, ._214 + 16\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, ._214 + 52\n\ +._203:\n\ + str r1, [r0]\n\ +._209:\n\ + add sp, sp, #0x8\n\ + pop {r3, r4, r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov sl, r5\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._215:\n\ + .align 2, 0\n\ +._214:\n\ + .word gUnknown_020297ED\n\ + .word gUnknown_03004210\n\ + .word 0x1016\n\ + .word gBattlePartyID\n\ + .word gActiveBank\n\ + .word gPlayerParty\n\ + .word gMoveNames\n\ + .word gDisplayedStringBattle\n\ + .word sBallCatchBonuses+0x4\n\ + .word gAnimMoveTurn\n\ + .word gSprites\n\ + .word gOamMatrixAllocBitmap\n\ + .word gBattleBankFunc\n\ + .word debug_sub_8030C24+1"); +} +#else void sub_802C68C(void) { u32 r8 = 0; @@ -751,6 +1470,7 @@ void sub_802C68C(void) } } } +#endif extern const u8 BattleText_Format[]; @@ -956,6 +1676,688 @@ void sub_802D18C(void) } } +#if DEBUG +__attribute__((naked)) +void debug_sub_8030C24(void) +{ + asm("\ + push {r4, r5, r6, lr}\n\ + add sp, sp, #0xfffffff4\n\ + ldr r1, ._293\n\ + ldr r4, ._293 + 4\n\ + ldrb r0, [r4]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + mov r0, #0x64\n\ + mul r0, r0, r1\n\ + ldr r1, ._293 + 8\n\ + add r0, r0, r1\n\ + mov r1, #0xd\n\ + bl GetMonData\n\ + add r1, sp, #0x8\n\ + strh r0, [r1]\n\ + ldr r5, ._293 + 12\n\ + ldrh r1, [r5, #0x30]\n\ + cmp r1, #0x20\n\ + bne ._286 @cond_branch\n\ + b ._287\n\ +._286:\n\ + cmp r1, #0x20\n\ + bgt ._288 @cond_branch\n\ + cmp r1, #0x8\n\ + beq ._289 @cond_branch\n\ + cmp r1, #0x8\n\ + bgt ._290 @cond_branch\n\ + cmp r1, #0x4\n\ + beq ._291 @cond_branch\n\ + b ._348\n\ +._294:\n\ + .align 2, 0\n\ +._293:\n\ + .word gBattlePartyID\n\ + .word gActiveBank\n\ + .word gPlayerParty\n\ + .word gMain\n\ +._290:\n\ + cmp r1, #0x10\n\ + bne ._295 @cond_branch\n\ + b ._296\n\ +._295:\n\ + b ._348\n\ +._288:\n\ + cmp r1, #0x80\n\ + bne ._298 @cond_branch\n\ + b ._302\n\ +._298:\n\ + cmp r1, #0x80\n\ + bgt ._300 @cond_branch\n\ + cmp r1, #0x40\n\ + bne ._301 @cond_branch\n\ + b ._302\n\ +._301:\n\ + b ._348\n\ +._300:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x1\n\ + cmp r1, r0\n\ + bne ._304 @cond_branch\n\ + b ._305\n\ +._304:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x2\n\ + cmp r1, r0\n\ + bne ._306 @cond_branch\n\ + b ._307\n\ +._306:\n\ + b ._348\n\ +._289:\n\ + ldrb r0, [r4]\n\ + mov r1, #0x1\n\ + bl dp11b_obj_free\n\ + ldrb r0, [r4]\n\ + mov r1, #0x0\n\ + bl dp11b_obj_free\n\ + ldr r0, ._312\n\ + ldrb r2, [r4]\n\ + strb r2, [r0]\n\ + ldrh r1, [r5, #0x28]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._310 @cond_branch\n\ + ldr r0, ._312 + 4\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._310 @cond_branch\n\ + ldr r0, ._312 + 8\n\ + mov r1, #0x2\n\ + eor r1, r1, r2\n\ + strb r1, [r0]\n\ + b ._311\n\ +._313:\n\ + .align 2, 0\n\ +._312:\n\ + .word gBankAttacker\n\ + .word gBattleTypeFlags\n\ + .word gBankTarget\n\ +._310:\n\ + ldr r0, ._317\n\ + ldrh r1, [r0, #0x28]\n\ + mov r2, #0x1\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._315 @cond_branch\n\ + ldr r0, ._317 + 4\n\ + ldrh r1, [r0]\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._315 @cond_branch\n\ + mov r0, #0x3\n\ + b ._316\n\ +._318:\n\ + .align 2, 0\n\ +._317:\n\ + .word gMain\n\ + .word gBattleTypeFlags\n\ +._315:\n\ + mov r0, #0x1\n\ +._316:\n\ + bl GetBankByIdentity\n\ + ldr r1, ._320\n\ + strb r0, [r1]\n\ +._311:\n\ + mov r0, #0x0\n\ + bl sub_80326EC\n\ + add r0, sp, #0x8\n\ + ldrh r0, [r0]\n\ + bl DoMoveAnim\n\ + ldr r1, ._320 + 4\n\ + ldr r0, ._320 + 8\n\ + ldrb r0, [r0]\n\ + b ._332\n\ +._321:\n\ + .align 2, 0\n\ +._320:\n\ + .word gBankTarget\n\ + .word gBattleBankFunc\n\ + .word gActiveBank\n\ +._291:\n\ + ldrb r0, [r4]\n\ + mov r1, #0x1\n\ + bl dp11b_obj_free\n\ + ldrb r0, [r4]\n\ + mov r1, #0x0\n\ + bl dp11b_obj_free\n\ + ldr r0, ._325\n\ + ldrb r2, [r4]\n\ + strb r2, [r0]\n\ + ldrh r1, [r5, #0x28]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._323 @cond_branch\n\ + ldr r0, ._325 + 4\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._323 @cond_branch\n\ + ldr r0, ._325 + 8\n\ + mov r1, #0x2\n\ + eor r1, r1, r2\n\ + strb r1, [r0]\n\ + b ._324\n\ +._326:\n\ + .align 2, 0\n\ +._325:\n\ + .word gBankTarget\n\ + .word gBattleTypeFlags\n\ + .word gBankAttacker\n\ +._323:\n\ + ldr r0, ._330\n\ + ldrh r1, [r0, #0x28]\n\ + mov r2, #0x1\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._328 @cond_branch\n\ + ldr r0, ._330 + 4\n\ + ldrh r1, [r0]\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._328 @cond_branch\n\ + mov r0, #0x3\n\ + b ._329\n\ +._331:\n\ + .align 2, 0\n\ +._330:\n\ + .word gMain\n\ + .word gBattleTypeFlags\n\ +._328:\n\ + mov r0, #0x1\n\ +._329:\n\ + bl GetBankByIdentity\n\ + ldr r1, ._333\n\ + strb r0, [r1]\n\ +._324:\n\ + mov r0, #0x0\n\ + bl sub_80326EC\n\ + add r0, sp, #0x8\n\ + ldrh r0, [r0]\n\ + bl DoMoveAnim\n\ + ldr r1, ._333 + 4\n\ + ldr r0, ._333 + 8\n\ + ldrb r0, [r0]\n\ + b ._332\n\ +._334:\n\ + .align 2, 0\n\ +._333:\n\ + .word gBankAttacker\n\ + .word gBattleBankFunc\n\ + .word gActiveBank\n\ +._305:\n\ + ldrh r1, [r5, #0x28]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._336 @cond_branch\n\ + ldr r0, ._338\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._336 @cond_branch\n\ + ldrb r0, [r4]\n\ + mov r1, #0x1\n\ + bl dp11b_obj_free\n\ + ldrb r0, [r4]\n\ + mov r1, #0x0\n\ + bl dp11b_obj_free\n\ + mov r0, #0x3\n\ + bl GetBankByIdentity\n\ + ldr r1, ._338 + 4\n\ + strb r0, [r1]\n\ + mov r0, #0x1\n\ + b ._337\n\ +._339:\n\ + .align 2, 0\n\ +._338:\n\ + .word gBattleTypeFlags\n\ + .word gBankAttacker\n\ +._336:\n\ + add r0, sp, #0x8\n\ + mov r1, #0x0\n\ + ldsh r0, [r0, r1]\n\ + add r0, r0, #0x9\n\ + add r1, sp, #0x8\n\ + strh r0, [r1]\n\ +._296:\n\ + add r0, sp, #0x8\n\ + mov r2, #0x0\n\ + ldsh r0, [r0, r2]\n\ + add r0, r0, #0x1\n\ + lsl r2, r0, #0x10\n\ + add r1, sp, #0x8\n\ + strh r0, [r1]\n\ + mov r0, #0xb1\n\ + lsl r0, r0, #0x11\n\ + cmp r2, r0\n\ + ble ._347 @cond_branch\n\ + mov r1, #0x1\n\ + add r0, sp, #0x8\n\ + strh r1, [r0]\n\ + b ._347\n\ +._307:\n\ + ldrh r1, [r5, #0x28]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._343 @cond_branch\n\ + ldr r0, ._345\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._343 @cond_branch\n\ + ldrb r0, [r4]\n\ + mov r1, #0x1\n\ + bl dp11b_obj_free\n\ + ldrb r0, [r4]\n\ + mov r1, #0x0\n\ + bl dp11b_obj_free\n\ + mov r0, #0x1\n\ + bl GetBankByIdentity\n\ + ldr r1, ._345 + 4\n\ + strb r0, [r1]\n\ + mov r0, #0x3\n\ +._337:\n\ + bl GetBankByIdentity\n\ + ldr r1, ._345 + 8\n\ + strb r0, [r1]\n\ + mov r0, #0x0\n\ + bl sub_80326EC\n\ + add r0, sp, #0x8\n\ + ldrh r0, [r0]\n\ + bl DoMoveAnim\n\ + ldr r1, ._345 + 12\n\ + ldrb r0, [r4]\n\ +._332:\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, ._345 + 16\n\ + str r1, [r0]\n\ + b ._348\n\ +._346:\n\ + .align 2, 0\n\ +._345:\n\ + .word gBattleTypeFlags\n\ + .word gBankAttacker\n\ + .word gBankTarget\n\ + .word gBattleBankFunc\n\ + .word debug_sub_803107C+1\n\ +._343:\n\ + add r1, sp, #0x8\n\ + add r0, r1, #0\n\ + ldrh r0, [r0]\n\ + sub r0, r0, #0x9\n\ + strh r0, [r1]\n\ +._287:\n\ + add r1, sp, #0x8\n\ + add r0, r1, #0\n\ + ldrh r0, [r0]\n\ + sub r0, r0, #0x1\n\ + strh r0, [r1]\n\ + lsl r0, r0, #0x10\n\ + cmp r0, #0\n\ + bgt ._347 @cond_branch\n\ + mov r2, #0xb1\n\ + lsl r2, r2, #0x1\n\ + add r0, r2, #0\n\ + strh r0, [r1]\n\ +._347:\n\ + ldr r1, ._349\n\ + ldr r4, ._349 + 4\n\ + ldrb r0, [r4]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + mov r0, #0x64\n\ + mul r0, r0, r1\n\ + ldr r1, ._349 + 8\n\ + add r0, r0, r1\n\ + mov r1, #0xd\n\ + add r2, sp, #0x8\n\ + bl SetMonData\n\ + ldr r2, ._349 + 12\n\ + ldrb r1, [r4]\n\ + mov r0, #0x58\n\ + mul r0, r0, r1\n\ + add r0, r0, r2\n\ + add r1, sp, #0x8\n\ + ldrh r1, [r1]\n\ + strh r1, [r0, #0xc]\n\ + ldr r5, ._349 + 16\n\ + ldr r1, ._349 + 20\n\ + mov r0, #0x10\n\ + str r0, [sp]\n\ + mov r0, #0x38\n\ + str r0, [sp, #0x4]\n\ + add r0, r5, #0\n\ + mov r2, #0x1\n\ + mov r3, #0x37\n\ + bl Text_FillWindowRect\n\ + add r0, sp, #0x8\n\ + mov r2, #0x0\n\ + ldsh r1, [r0, r2]\n\ + mov r0, #0xd\n\ + mul r1, r1, r0\n\ + ldr r0, ._349 + 24\n\ + add r1, r1, r0\n\ + mov r2, #0x80\n\ + lsl r2, r2, #0x1\n\ + mov r6, #0x37\n\ + str r6, [sp]\n\ + add r0, r5, #0\n\ + mov r3, #0x2\n\ + bl Text_InitWindowAndPrintText\n\ + ldr r4, ._349 + 28\n\ + add r0, sp, #0x8\n\ + mov r2, #0x0\n\ + ldsh r1, [r0, r2]\n\ + add r0, r4, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x3\n\ + bl ConvertIntToDecimalStringN\n\ + mov r2, #0x88\n\ + lsl r2, r2, #0x1\n\ + str r6, [sp]\n\ + add r0, r5, #0\n\ + add r1, r4, #0\n\ + mov r3, #0xa\n\ + bl Text_InitWindowAndPrintText\n\ + b ._348\n\ +._350:\n\ + .align 2, 0\n\ +._349:\n\ + .word gBattlePartyID\n\ + .word gActiveBank\n\ + .word gPlayerParty\n\ + .word gBattleMons\n\ + .word gUnknown_03004210\n\ + .word 0x1016\n\ + .word gMoveNames\n\ + .word gDisplayedStringBattle\n\ +._302:\n\ + ldr r0, ._353\n\ + ldrh r0, [r0, #0x30]\n\ + cmp r0, #0x40\n\ + bne ._351 @cond_branch\n\ + ldr r1, ._353 + 4\n\ + ldrb r0, [r1]\n\ + sub r0, r0, #0x1\n\ + b ._352\n\ +._354:\n\ + .align 2, 0\n\ +._353:\n\ + .word gMain\n\ + .word gAnimMoveTurn\n\ +._351:\n\ + ldr r1, ._359\n\ + ldrb r0, [r1]\n\ + add r0, r0, #0x1\n\ +._352:\n\ + strb r0, [r1]\n\ + ldr r4, ._359 + 4\n\ + ldrb r1, [r1]\n\ + add r0, r4, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x3\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r0, ._359 + 8\n\ + mov r2, #0x8e\n\ + lsl r2, r2, #0x1\n\ + mov r1, #0x39\n\ + str r1, [sp]\n\ + add r1, r4, #0\n\ + mov r3, #0x4\n\ + bl Text_InitWindowAndPrintText\n\ +._348:\n\ + ldr r0, ._359 + 12\n\ + ldrh r2, [r0, #0x28]\n\ + mov r1, #0xc0\n\ + lsl r1, r1, #0x2\n\ + add r0, r1, #0\n\ + and r0, r0, r2\n\ + cmp r0, r1\n\ + bne ._355 @cond_branch\n\ + mov r4, #0x0\n\ + ldr r5, ._359 + 4\n\ + ldr r6, ._359 + 8\n\ +._361:\n\ + add r0, r5, #0\n\ + ldr r1, ._359 + 16\n\ + bl StringCopy\n\ + ldr r1, ._359 + 20\n\ + ldr r0, ._359 + 24\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x1\n\ + add r0, r0, r1\n\ + ldrh r1, [r0]\n\ + mov r0, #0x64\n\ + mul r0, r0, r1\n\ + ldr r1, ._359 + 28\n\ + add r0, r0, r1\n\ + add r1, r4, #0\n\ + add r1, r1, #0xd\n\ + bl GetMonData\n\ + mov r1, #0xd\n\ + mul r1, r1, r0\n\ + ldr r0, ._359 + 32\n\ + add r1, r1, r0\n\ + add r0, r5, #0\n\ + bl StringAppend\n\ + lsl r0, r4, #0x14\n\ + mov r1, #0x80\n\ + lsl r1, r1, #0x11\n\ + add r0, r0, r1\n\ + lsr r2, r0, #0x10\n\ + mov r0, #0x1\n\ + and r0, r0, r4\n\ + mov r3, #0x2\n\ + cmp r0, #0\n\ + beq ._356 @cond_branch\n\ + mov r3, #0xa\n\ +._356:\n\ + cmp r4, #0x1\n\ + bhi ._357 @cond_branch\n\ + mov r0, #0x37\n\ + b ._358\n\ +._360:\n\ + .align 2, 0\n\ +._359:\n\ + .word gAnimMoveTurn\n\ + .word gDisplayedStringBattle\n\ + .word gUnknown_03004210\n\ + .word gMain\n\ + .word BattleText_Format\n\ + .word gBattlePartyID\n\ + .word gActiveBank\n\ + .word gPlayerParty\n\ + .word gMoveNames\n\ +._357:\n\ + mov r0, #0x39\n\ +._358:\n\ + str r0, [sp]\n\ + add r0, r6, #0\n\ + add r1, r5, #0\n\ + bl Text_InitWindow\n\ + ldr r0, ._362\n\ + bl Text_PrintWindow8002F44\n\ + add r0, r4, #1\n\ + lsl r0, r0, #0x18\n\ + lsr r4, r0, #0x18\n\ + cmp r4, #0x3\n\ + bls ._361 @cond_branch\n\ + ldr r1, ._362 + 4\n\ + ldr r0, ._362 + 8\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, ._362 + 12\n\ + str r1, [r0]\n\ +._355:\n\ + add sp, sp, #0xc\n\ + pop {r4, r5, r6}\n\ + pop {r0}\n\ + bx r0\n\ +._363:\n\ + .align 2, 0\n\ +._362:\n\ + .word gUnknown_03004210\n\ + .word gBattleBankFunc\n\ + .word gActiveBank\n\ + .word sub_802C68C+1"); +} + +__attribute__((naked)) +void debug_sub_803107C(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + add sp, sp, #0xfffffffc\n\ + mov r7, #0x0\n\ + ldr r0, ._369\n\ + ldr r0, [r0]\n\ + bl gMysteryEventScriptCmdTableEnd+0x3cf4\n\ + ldr r0, ._369 + 4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0\n\ + bne ._364 @cond_branch\n\ + mov r0, #0x1\n\ + bl sub_80326EC\n\ + ldr r4, ._369 + 8\n\ + ldrb r0, [r4]\n\ + mov r1, #0x1\n\ + mov r2, #0x7\n\ + mov r3, #0x1\n\ + bl dp11b_obj_instanciate\n\ + ldrb r0, [r4]\n\ + mov r1, #0x0\n\ + mov r2, #0x7\n\ + mov r3, #0x1\n\ + bl dp11b_obj_instanciate\n\ + ldr r0, ._369 + 12\n\ + add r2, r0, #0\n\ + add r2, r2, #0x3e\n\ + mov r1, #0x3f\n\ +._366:\n\ + ldrb r0, [r2]\n\ + lsl r0, r0, #0x1f\n\ + cmp r0, #0\n\ + beq ._365 @cond_branch\n\ + add r0, r7, #1\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ +._365:\n\ + add r2, r2, #0x44\n\ + sub r1, r1, #0x1\n\ + cmp r1, #0\n\ + bge ._366 @cond_branch\n\ + ldr r4, ._369 + 16\n\ + add r0, r4, #0\n\ + add r1, r7, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x2\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r6, ._369 + 20\n\ + mov r2, #0x91\n\ + lsl r2, r2, #0x1\n\ + mov r5, #0x39\n\ + str r5, [sp]\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + mov r3, #0x8\n\ + bl Text_InitWindowAndPrintText\n\ + bl GetTaskCount\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ + add r0, r4, #0\n\ + add r1, r7, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x2\n\ + bl ConvertIntToDecimalStringN\n\ + mov r2, #0x93\n\ + lsl r2, r2, #0x1\n\ + str r5, [sp]\n\ + add r0, r6, #0\n\ + add r1, r4, #0\n\ + mov r3, #0xb\n\ + bl Text_InitWindowAndPrintText\n\ + mov r1, #0x0\n\ + mov r7, #0x0\n\ + ldr r0, ._369 + 24\n\ + mov r3, #0x1\n\ + ldr r2, [r0]\n\ +._368:\n\ + add r0, r3, #0\n\ + LSL r0, r1\n\ + and r0, r0, r2\n\ + cmp r0, #0\n\ + beq ._367 @cond_branch\n\ + add r0, r7, #1\n\ + lsl r0, r0, #0x18\n\ + lsr r7, r0, #0x18\n\ +._367:\n\ + add r1, r1, #0x1\n\ + cmp r1, #0x1f\n\ + ble ._368 @cond_branch\n\ + ldr r4, ._369 + 16\n\ + add r0, r4, #0\n\ + add r1, r7, #0\n\ + mov r2, #0x2\n\ + mov r3, #0x2\n\ + bl ConvertIntToDecimalStringN\n\ + ldr r0, ._369 + 20\n\ + mov r2, #0x95\n\ + lsl r2, r2, #0x1\n\ + mov r1, #0x39\n\ + str r1, [sp]\n\ + add r1, r4, #0\n\ + mov r3, #0xe\n\ + bl Text_InitWindowAndPrintText\n\ + ldr r1, ._369 + 28\n\ + ldr r0, ._369 + 8\n\ + ldrb r0, [r0]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, ._369 + 32\n\ + str r1, [r0]\n\ +._364:\n\ + add sp, sp, #0x4\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._370:\n\ + .align 2, 0\n\ +._369:\n\ + .word gAnimScriptCallback\n\ + .word gAnimScriptActive\n\ + .word gActiveBank\n\ + .word gSprites\n\ + .word gDisplayedStringBattle\n\ + .word gUnknown_03004210\n\ + .word gOamMatrixAllocBitmap\n\ + .word gBattleBankFunc\n\ + .word debug_sub_8030C24+1"); +} +#endif + void sub_802D204(void) { if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy) -- cgit v1.2.3 From b8b4a11a032d7fb21ae14c5372a266509d2f918b Mon Sep 17 00:00:00 2001 From: ProjectRevoTPP Date: Thu, 18 Jan 2018 01:12:45 -0500 Subject: formatting --- src/battle/battle_anim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/battle') diff --git a/src/battle/battle_anim.c b/src/battle/battle_anim.c index a4540868c..c71c12ce7 100644 --- a/src/battle/battle_anim.c +++ b/src/battle/battle_anim.c @@ -2417,7 +2417,7 @@ static void LoadMoveBg(u16 bgId) { void *tilemap = gBattleAnimBackgroundTable[bgId].tilemap; - LZDecompressWram(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000); + LZDecompressWram(tilemap, IsContest() ? EWRAM_14800 : EWRAM_18000); sub_80763FC(sub_80789BC(), IsContest() ? EWRAM_14800 : EWRAM_18000, 0x100, 0); DmaCopy32Defvars(3, IsContest() ? EWRAM_14800 : EWRAM_18000, (void *)(VRAM + 0xD000), 0x800); LZDecompressVram(gBattleAnimBackgroundTable[bgId].image, (void *)(VRAM + 0x2000)); -- cgit v1.2.3 From ec84ae801985ac7f83397979bde6a15508eb02ed Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Thu, 18 Jan 2018 11:54:49 -0600 Subject: add more debug code --- src/battle/battle_controller_opponent.c | 548 ++++++++++++++++++++++++++++++++ 1 file changed, 548 insertions(+) (limited to 'src/battle') diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 5947053b6..cc69c0120 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -1209,6 +1209,243 @@ void sub_8034B74(void) } } +#if DEBUG +__attribute__((naked)) +void OpponentHandleTrainerThrow(void) +{ + asm("\ + push {r4, r5, r6, lr}\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5, r6}\n\ + ldr r0, ._480\n\ + ldrb r1, [r0]\n\ + mov r0, #0x10\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._478 @cond_branch\n\ + ldr r0, ._480 + 4\n\ + ldr r1, ._480 + 8\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + b ._491\n\ +._481:\n\ + .align 2, 0\n\ +._480:\n\ + .word gUnknown_02023A14+0x50\n\ + .word +0x2000000\n\ + .word 0x160a3\n\ +._478:\n\ + ldr r3, ._484\n\ + ldrh r1, [r3]\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x3\n\ + cmp r1, r0\n\ + bne ._482 @cond_branch\n\ + bl GetSecretBaseTrainerPicIndex\n\ + b ._487\n\ +._485:\n\ + .align 2, 0\n\ +._484:\n\ + .word gTrainerBattleOpponent\n\ +._482:\n\ + ldr r0, ._488\n\ + ldrh r1, [r0]\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._486 @cond_branch\n\ + bl get_trainer_class_pic_index\n\ + b ._487\n\ +._489:\n\ + .align 2, 0\n\ +._488:\n\ + .word gBattleTypeFlags\n\ +._486:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x4\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._490 @cond_branch\n\ + bl GetEReaderTrainerPicIndex\n\ +._487:\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + b ._491\n\ +._490:\n\ + ldr r2, ._492\n\ + ldrh r1, [r3]\n\ + lsl r0, r1, #0x2\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x3\n\ + add r0, r0, r2\n\ + ldrb r0, [r0, #0x3]\n\ +._491:\n\ + mov r9, r0\n\ + ldr r2, ._492 + 4\n\ + mov r8, r2\n\ + ldrb r1, [r2]\n\ + bl sub_8031A6C\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + bl GetBankIdentity\n\ + add r1, r0, #0\n\ + lsl r1, r1, #0x18\n\ + lsr r1, r1, #0x18\n\ + mov r0, r9\n\ + bl GetMonSpriteTemplate_803C5A0\n\ + ldr r5, ._492 + 8\n\ + ldr r1, ._492 + 12\n\ + mov r2, r9\n\ + lsl r0, r2, #0x2\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + mov r4, #0x8\n\ + sub r4, r4, r0\n\ + lsl r4, r4, #0x12\n\ + mov r0, #0xa0\n\ + lsl r0, r0, #0xe\n\ + add r4, r4, r0\n\ + asr r4, r4, #0x10\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + bl sub_8079E90\n\ + add r3, r0, #0\n\ + lsl r3, r3, #0x18\n\ + lsr r3, r3, #0x18\n\ + add r0, r5, #0\n\ + mov r1, #0xb0\n\ + add r2, r4, #0\n\ + bl CreateSprite\n\ + ldr r5, ._492 + 16\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + add r1, r1, r5\n\ + strb r0, [r1]\n\ + ldr r4, ._492 + 20\n\ + ldrb r0, [r2]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x4\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r4\n\ + ldr r1, ._492 + 24\n\ + strh r1, [r0, #0x24]\n\ + ldrb r0, [r2]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x4\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r4\n\ + mov r1, #0x2\n\ + strh r1, [r0, #0x2e]\n\ + ldr r0, ._492 + 28\n\ + mov r1, r9\n\ + lsl r6, r1, #0x3\n\ + add r0, r6, r0\n\ + ldrh r0, [r0, #0x4]\n\ + bl IndexOfSpritePaletteTag\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + add r1, r1, r5\n\ + ldrb r1, [r1]\n\ + lsl r2, r1, #0x4\n\ + add r2, r2, r1\n\ + lsl r2, r2, #0x2\n\ + add r2, r2, r4\n\ + lsl r0, r0, #0x4\n\ + ldrb r3, [r2, #0x5]\n\ + mov r1, #0xf\n\ + and r1, r1, r3\n\ + orr r1, r1, r0\n\ + strb r1, [r2, #0x5]\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + add r0, r0, r5\n\ + ldrb r0, [r0]\n\ + lsl r1, r0, #0x4\n\ + add r1, r1, r0\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r4\n\ + ldrh r0, [r1, #0x4]\n\ + lsl r0, r0, #0x16\n\ + lsr r0, r0, #0x16\n\ + strh r0, [r1, #0x38]\n\ + ldr r0, ._492 + 32\n\ + add r6, r6, r0\n\ + ldrh r0, [r6, #0x6]\n\ + bl GetSpriteTileStartByTag\n\ + mov r2, r8\n\ + ldrb r1, [r2]\n\ + add r1, r1, r5\n\ + ldrb r2, [r1]\n\ + lsl r1, r2, #0x4\n\ + add r1, r1, r2\n\ + lsl r1, r1, #0x2\n\ + add r1, r1, r4\n\ + ldr r2, ._492 + 36\n\ + and r2, r2, r0\n\ + ldrh r3, [r1, #0x4]\n\ + ldr r0, ._492 + 40\n\ + and r0, r0, r3\n\ + orr r0, r0, r2\n\ + strh r0, [r1, #0x4]\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x4\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r4\n\ + mov r2, r9\n\ + strh r2, [r0, #0x6]\n\ + mov r1, r8\n\ + ldrb r0, [r1]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + lsl r0, r1, #0x4\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r4, r4, #0x1c\n\ + add r0, r0, r4\n\ + ldr r1, ._492 + 44\n\ + str r1, [r0]\n\ + ldr r1, ._492 + 48\n\ + mov r2, r8\n\ + ldrb r0, [r2]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldr r1, ._492 + 52\n\ + str r1, [r0]\n\ + pop {r3, r4}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + pop {r4, r5, r6}\n\ + pop {r0}\n\ + bx r0\n\ +._493:\n\ + .align 2, 0\n\ +._492:\n\ + .word gTrainers\n\ + .word gActiveBank\n\ + .word gUnknown_02024E8C\n\ + .word gTrainerFrontPicCoords\n\ + .word gObjectBankIDs\n\ + .word gSprites\n\ + .word 0xff10\n\ + .word gTrainerFrontPicPaletteTable\n\ + .word gTrainerFrontPicTable\n\ + .word 0x3ff\n\ + .word 0xfffffc00\n\ + .word sub_80313A0+1\n\ + .word gBattleBankFunc\n\ + .word sub_8032B4C+1"); +} +#else void OpponentHandleTrainerThrow(void) { u32 trainerPicIndex; @@ -1238,6 +1475,7 @@ void OpponentHandleTrainerThrow(void) gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; gBattleBankFunc[gActiveBank] = sub_8032B4C; } +#endif void OpponentHandleTrainerSlide(void) { @@ -1427,6 +1665,315 @@ void OpponentHandlecmd19(void) OpponentBufferExecCompleted(); } +#if DEBUG +__attribute__((naked)) +void OpponentHandlecmd20(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, sl\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5, r6, r7}\n\ + ldr r6, ._549\n\ + ldrb r0, [r6]\n\ + lsl r0, r0, #0x9\n\ + ldr r1, ._549 + 4\n\ + add r5, r0, r1\n\ + ldr r2, ._549 + 8\n\ + ldrb r1, [r2]\n\ + mov r0, #0x4\n\ + and r0, r0, r1\n\ + mov sl, r6\n\ + cmp r0, #0\n\ + beq ._546 @cond_branch\n\ + ldr r0, ._549 + 12\n\ + mov r9, r0\n\ + ldr r1, ._549 + 16\n\ + mov ip, r1\n\ + add r7, r6, #0\n\ + mov r0, #0x2\n\ + mov r8, r0\n\ + ldr r6, ._549 + 20\n\ +._552:\n\ + ldrb r1, [r7]\n\ + mov r0, r8\n\ + and r0, r0, r1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x19\n\ + add r0, r0, r6\n\ + mov r1, ip\n\ + add r3, r0, r1\n\ + ldrb r1, [r3]\n\ + lsl r0, r1, #0x1\n\ + add r0, r5, r0\n\ + ldrh r2, [r0]\n\ + add r4, r1, #0\n\ + cmp r2, #0\n\ + beq ._547 @cond_branch\n\ + add r0, r4, #1\n\ + strb r0, [r3]\n\ + b ._548\n\ +._550:\n\ + .align 2, 0\n\ +._549:\n\ + .word gActiveBank\n\ + .word gUnknown_02023A64\n\ + .word gUnknown_02023A14+0x50\n\ + .word gBattleMoves\n\ + .word +0x2000000\n\ + .word 0x1609e\n\ +._547:\n\ + strb r2, [r3]\n\ +._548:\n\ + ldrb r0, [r7]\n\ + mov r1, r8\n\ + and r1, r1, r0\n\ + lsl r1, r1, #0x18\n\ + lsr r1, r1, #0x19\n\ + add r1, r1, r6\n\ + add r1, r1, ip\n\ + ldrb r0, [r1]\n\ + cmp r0, #0x3\n\ + bls ._551 @cond_branch\n\ + mov r0, #0x0\n\ + strb r0, [r1]\n\ +._551:\n\ + cmp r2, #0\n\ + beq ._552 @cond_branch\n\ + lsl r0, r2, #0x1\n\ + add r0, r0, r2\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r9\n\ + ldrb r3, [r0, #0x6]\n\ + mov r0, #0x12\n\ + and r0, r0, r3\n\ + cmp r0, #0\n\ + beq ._553 @cond_branch\n\ + mov r1, sl\n\ + ldrb r0, [r1]\n\ + b ._561\n\ +._553:\n\ + ldr r0, ._559\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._557 @cond_branch\n\ + ldr r0, ._559 + 4\n\ + ldrb r1, [r0]\n\ + mov r5, #0x2\n\ + add r0, r5, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._556 @cond_branch\n\ + cmp r3, #0\n\ + bne ._557 @cond_branch\n\ + mov r1, sl\n\ + ldrb r0, [r1]\n\ + bl GetBankIdentity\n\ + mov r1, #0x2\n\ + eor r0, r0, r1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + b ._558\n\ +._560:\n\ + .align 2, 0\n\ +._559:\n\ + .word gBattleTypeFlags\n\ + .word gUnknown_02023A14+0x50\n\ +._556:\n\ + bl Random\n\ + add r1, r5, #0\n\ + and r1, r1, r0\n\ + lsl r1, r1, #0x10\n\ + lsr r0, r1, #0x10\n\ + b ._561\n\ +._557:\n\ + mov r0, #0x0\n\ +._558:\n\ + bl GetBankByIdentity\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ +._561:\n\ + lsl r2, r0, #0x8\n\ + orr r2, r2, r4\n\ + mov r0, #0x1\n\ + mov r1, #0xa\n\ +._569:\n\ + bl Emitcmd33\n\ +._573:\n\ + bl OpponentBufferExecCompleted\n\ + b ._562\n\ +._546:\n\ + ldr r0, ._567\n\ + ldrh r1, [r0]\n\ + mov r0, #0x93\n\ + lsl r0, r0, #0x3\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._563 @cond_branch\n\ + bl BattleAI_SetupAIData\n\ + bl BattleAI_GetAIActionToUse\n\ + lsl r0, r0, #0x18\n\ + lsr r4, r0, #0x18\n\ + cmp r4, #0x4\n\ + beq ._564 @cond_branch\n\ + cmp r4, #0x5\n\ + bne ._565 @cond_branch\n\ + mov r0, #0x1\n\ + mov r1, #0x4\n\ + b ._566\n\ +._568:\n\ + .align 2, 0\n\ +._567:\n\ + .word gBattleTypeFlags\n\ +._564:\n\ + mov r0, #0x1\n\ + mov r1, #0x3\n\ +._566:\n\ + mov r2, #0x0\n\ + b ._569\n\ +._565:\n\ + ldr r3, ._574\n\ + lsl r0, r4, #0x1\n\ + add r2, r5, r0\n\ + ldrh r1, [r2]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r3\n\ + ldrb r1, [r0, #0x6]\n\ + mov r0, #0x12\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._570 @cond_branch\n\ + ldr r1, ._574 + 4\n\ + ldrb r0, [r6]\n\ + strb r0, [r1]\n\ +._570:\n\ + ldrh r1, [r2]\n\ + lsl r0, r1, #0x1\n\ + add r0, r0, r1\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r3\n\ + ldrb r1, [r0, #0x6]\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._572 @cond_branch\n\ + mov r0, #0x0\n\ + bl GetBankByIdentity\n\ + ldr r5, ._574 + 4\n\ + strb r0, [r5]\n\ + ldr r0, ._574 + 8\n\ + ldrb r1, [r0]\n\ + ldr r2, ._574 + 12\n\ + ldrb r0, [r5]\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r2\n\ + ldr r0, [r0]\n\ + and r1, r1, r0\n\ + cmp r1, #0\n\ + beq ._572 @cond_branch\n\ + mov r0, #0x2\n\ + bl GetBankByIdentity\n\ + strb r0, [r5]\n\ +._572:\n\ + ldr r0, ._574 + 4\n\ + ldrb r2, [r0]\n\ + lsl r2, r2, #0x8\n\ + orr r2, r2, r4\n\ + mov r0, #0x1\n\ + mov r1, #0xa\n\ + bl Emitcmd33\n\ + b ._573\n\ +._575:\n\ + .align 2, 0\n\ +._574:\n\ + .word gBattleMoves\n\ + .word gBankTarget\n\ + .word gAbsentBankFlags\n\ + .word gBitTable\n\ +._563:\n\ + mov r6, #0x3\n\ +._576:\n\ + bl Random\n\ + add r4, r0, #0\n\ + and r4, r4, r6\n\ + lsl r0, r4, #0x1\n\ + add r0, r5, r0\n\ + ldrh r2, [r0]\n\ + cmp r2, #0\n\ + beq ._576 @cond_branch\n\ + ldr r1, ._579\n\ + lsl r0, r2, #0x1\n\ + add r0, r0, r2\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r1\n\ + ldrb r1, [r0, #0x6]\n\ + mov r0, #0x12\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._577 @cond_branch\n\ + ldr r0, ._579 + 4\n\ + ldrb r2, [r0]\n\ + lsl r2, r2, #0x8\n\ + b ._578\n\ +._580:\n\ + .align 2, 0\n\ +._579:\n\ + .word gBattleMoves\n\ + .word gActiveBank\n\ +._577:\n\ + ldr r0, ._583\n\ + ldrh r1, [r0]\n\ + mov r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._581 @cond_branch\n\ + bl Random\n\ + mov r1, #0x2\n\ + and r1, r1, r0\n\ + lsl r1, r1, #0x18\n\ + lsr r1, r1, #0x18\n\ + add r0, r1, #0\n\ + bl GetBankByIdentity\n\ + add r2, r0, #0\n\ + lsl r2, r2, #0x18\n\ + lsr r2, r2, #0x10\n\ +._578:\n\ + orr r2, r2, r4\n\ + mov r0, #0x1\n\ + mov r1, #0xa\n\ + bl Emitcmd33\n\ + b ._582\n\ +._584:\n\ + .align 2, 0\n\ +._583:\n\ + .word gBattleTypeFlags\n\ +._581:\n\ + mov r0, #0x0\n\ + bl GetBankByIdentity\n\ + add r2, r0, #0\n\ + lsl r2, r2, #0x18\n\ + lsr r2, r2, #0x10\n\ + orr r2, r2, r4\n\ + mov r0, #0x1\n\ + mov r1, #0xa\n\ + bl Emitcmd33\n\ +._582:\n\ + bl OpponentBufferExecCompleted\n\ +._562:\n\ + pop {r3, r4, r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov sl, r5\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0"); +} +#else #ifdef NONMATCHING void OpponentHandlecmd20(void) { @@ -1670,6 +2217,7 @@ _0803558A:\n\ .syntax divided\n"); } #endif +#endif void OpponentHandleOpenBag(void) { -- cgit v1.2.3 From 9c2f7c88f0d7e57c99d548870e78185e05cc472a Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Thu, 18 Jan 2018 13:54:10 -0600 Subject: add more debug code --- src/battle/battle_records.c | 60 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'src/battle') diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index 17e2352ff..4fce958fa 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -223,6 +223,66 @@ void UpdateLinkBattleRecords(int id) gLinkPlayers[gLinkPlayerMapObjects[id].linkPlayerId].language); } +#if DEBUG +__attribute__((naked)) +void debug_sub_81257E0(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + add sp, sp, #0xfffffffc\n\ + bl InitLinkBattleRecords\n\ + mov r5, #0x0\n\ + ldr r6, ._62\n\ + sub r0, r6, #2\n\ + mov r8, r0\n\ + ldr r7, ._62 + 4\n\ +._61:\n\ + ldr r0, ._62 + 8\n\ + lsl r3, r5, #0x2\n\ + add r3, r3, r0\n\ + ldrb r4, [r3]\n\ + sub r4, r4, #0x1\n\ + lsl r0, r4, #0x1\n\ + add r0, r0, r4\n\ + lsl r0, r0, #0x2\n\ + add r1, r0, r6\n\ + add r0, r0, r8\n\ + ldrh r2, [r0]\n\ + ldrb r3, [r3, #0x1]\n\ + ldr r0, ._62 + 12\n\ + lsl r4, r4, #0x2\n\ + add r4, r4, r0\n\ + ldrb r4, [r4, #0x1]\n\ + lsl r0, r4, #0x3\n\ + sub r0, r0, r4\n\ + lsl r0, r0, #0x2\n\ + add r0, r0, r7\n\ + ldrb r0, [r0, #0x1a]\n\ + str r0, [sp]\n\ + ldr r0, ._62 + 16\n\ + bl UpdateLinkBattleRecords_\n\ + add r5, r5, #0x1\n\ + cmp r5, #0x2\n\ + bls ._61 @cond_branch\n\ + add sp, sp, #0x4\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._63:\n\ + .align 2, 0\n\ +._62:\n\ + .word gUnknown_083F8410+0xa\n\ + .word gLinkPlayers\n\ + .word gUnknown_083F8410+0x5c\n\ + .word gLinkPlayerMapObjects\n\ + .word gSaveBlock1+0x30b8"); +} +#endif + static void PrintLinkBattleWinsLossesDraws(struct LinkBattleRecord *records) { ConvertIntToDecimalStringN_DigitWidth6(gStringVar1, GetGameStat(GAME_STAT_LINK_BATTLE_WINS), STR_CONV_MODE_RIGHT_ALIGN, 4); -- cgit v1.2.3 From bcbc9d040ba671df27183bff0b7356da3d9511f6 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Thu, 18 Jan 2018 15:19:31 -0600 Subject: finish adding all debug code --- src/battle/battle_controller_safari.c | 231 ++++++++++++++++++++++++++++++++++ 1 file changed, 231 insertions(+) (limited to 'src/battle') diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 0d193d68f..4af8adbbb 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -207,6 +207,236 @@ void SafariBufferRunCommand(void) } } +#if DEBUG +__attribute__((naked)) +void bx_battle_menu_t6_2(void) +{ + asm("\ + push {r4, r5, lr}\n\ + add sp, sp, #0xfffffffc\n\ + ldr r0, ._94\n\ + ldrh r1, [r0, #0x2e]\n\ + mov r2, #0x1\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._89 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + bl DestroyMenuCursor\n\ + ldr r1, ._94 + 4\n\ + ldr r0, ._94 + 8\n\ + ldrb r0, [r0]\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + beq ._90 @cond_branch\n\ + cmp r0, #0x1\n\ + bgt ._91 @cond_branch\n\ + cmp r0, #0\n\ + beq ._92 @cond_branch\n\ + b ._101\n\ +._95:\n\ + .align 2, 0\n\ +._94:\n\ + .word gMain\n\ + .word gActionSelectionCursor\n\ + .word gActiveBank\n\ +._91:\n\ + cmp r0, #0x2\n\ + beq ._96 @cond_branch\n\ + cmp r0, #0x3\n\ + beq ._97 @cond_branch\n\ + b ._101\n\ +._92:\n\ + mov r0, #0x1\n\ + mov r1, #0x5\n\ + b ._100\n\ +._90:\n\ + mov r0, #0x1\n\ + mov r1, #0x6\n\ + b ._100\n\ +._96:\n\ + mov r0, #0x1\n\ + mov r1, #0x7\n\ +._100:\n\ + mov r2, #0x0\n\ + bl Emitcmd33\n\ + b ._101\n\ +._97:\n\ + mov r0, #0x1\n\ + mov r1, #0x8\n\ + mov r2, #0x0\n\ + bl Emitcmd33\n\ +._101:\n\ + bl SafariBufferExecCompleted\n\ + b ._129\n\ +._89:\n\ + mov r3, #0x20\n\ + add r0, r3, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._103 @cond_branch\n\ + ldr r5, ._107\n\ + ldr r4, ._107 + 4\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._104 @cond_branch\n\ + b ._129\n\ +._104:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r0, [r0]\n\ + bl nullsub_8\n\ + ldrb r1, [r4]\n\ + add r1, r1, r5\n\ + ldrb r0, [r1]\n\ + mov r2, #0x1\n\ + b ._111\n\ +._108:\n\ + .align 2, 0\n\ +._107:\n\ + .word gActionSelectionCursor\n\ + .word gActiveBank\n\ +._103:\n\ + mov r0, #0x10\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._109 @cond_branch\n\ + ldr r5, ._112\n\ + ldr r4, ._112 + 4\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + add r0, r2, #0\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._129 @cond_branch\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r0, [r0]\n\ + bl nullsub_8\n\ + ldrb r1, [r4]\n\ + add r1, r1, r5\n\ + ldrb r0, [r1]\n\ + mov r2, #0x1\n\ + b ._111\n\ +._113:\n\ + .align 2, 0\n\ +._112:\n\ + .word gActionSelectionCursor\n\ + .word gActiveBank\n\ +._109:\n\ + mov r0, #0x40\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._114 @cond_branch\n\ + ldr r5, ._117\n\ + ldr r4, ._117 + 4\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._129 @cond_branch\n\ + b ._116\n\ +._118:\n\ + .align 2, 0\n\ +._117:\n\ + .word gActionSelectionCursor\n\ + .word gActiveBank\n\ +._114:\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._119 @cond_branch\n\ + ldr r5, ._122\n\ + ldr r4, ._122 + 4\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r1, [r0]\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + bne ._129 @cond_branch\n\ +._116:\n\ + mov r0, #0x5\n\ + bl PlaySE\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r0, [r0]\n\ + bl nullsub_8\n\ + ldrb r1, [r4]\n\ + add r1, r1, r5\n\ + ldrb r0, [r1]\n\ + mov r2, #0x2\n\ +._111:\n\ + eor r0, r0, r2\n\ + strb r0, [r1]\n\ + ldrb r0, [r4]\n\ + add r0, r0, r5\n\ + ldrb r0, [r0]\n\ + mov r1, #0x0\n\ + bl sub_802E3E4\n\ + b ._129\n\ +._123:\n\ + .align 2, 0\n\ +._122:\n\ + .word gActionSelectionCursor\n\ + .word gActiveBank\n\ +._119:\n\ + mov r0, #0x80\n\ + lsl r0, r0, #0x1\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._124 @cond_branch\n\ + ldr r0, ._127\n\ + ldrb r2, [r0]\n\ + lsl r0, r2, #0x1\n\ + add r0, r0, r2\n\ + lsl r0, r0, #0x2\n\ + ldr r1, ._127 + 4\n\ + add r0, r0, r1\n\ + ldrb r1, [r0]\n\ + add r0, r3, #0\n\ + and r0, r0, r1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0\n\ + bne ._129 @cond_branch\n\ + str r0, [sp]\n\ + add r0, r2, #0\n\ + add r1, r2, #0\n\ + mov r3, #0x4\n\ + bl move_anim_start_t3\n\ + b ._129\n\ +._128:\n\ + .align 2, 0\n\ +._127:\n\ + .word gActiveBank\n\ + .word +0x2017810\n\ +._124:\n\ + mov r0, #0x8\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._129 @cond_branch\n\ + bl sub_804454C\n\ +._129:\n\ + add sp, sp, #0x4\n\ + pop {r4, r5}\n\ + pop {r0}\n\ + bx r0"); +} +#else void bx_battle_menu_t6_2(void) { if (gMain.newKeys & A_BUTTON) @@ -273,6 +503,7 @@ void bx_battle_menu_t6_2(void) } } } +#endif void sub_812B65C(void) { -- cgit v1.2.3 From 428f712da678b3f5b9256d85c0e3248cacd8e7c2 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 19 Jan 2018 21:30:16 -0800 Subject: Further document weather --- src/battle/battle_util.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c index f93664593..87b6952ff 100644 --- a/src/battle/battle_util.c +++ b/src/battle/battle_util.c @@ -4,6 +4,7 @@ #include "data2.h" #include "event_data.h" #include "ewram.h" +#include "field_weather.h" #include "item.h" #include "link.h" #include "pokemon.h" @@ -85,7 +86,6 @@ u8 CountTrailingZeroBits(u32 a); u8 GetMoveTarget(u16 move, u8 useMoveTarget); u8 sub_803FC34(u8 bank); u16 sub_803FBFC(u8 a); -u8 weather_get_current(void); void RecordAbilityBattle(u8 bank, u8 ability); void RecordItemBattle(u8 bank, u8 holdEffect); s8 GetPokeFlavourRelation(u32 pid, u8 flavor); @@ -1747,7 +1747,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { case 0xFF: //weather from overworld //_08018586 - switch (weather_get_current()) + switch (GetCurrentWeather()) { case WEATHER_RAIN_LIGHT: case WEATHER_RAIN_MED: @@ -1781,7 +1781,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } if (effect) { - gBattleCommunication[MULTISTRING_CHOOSER] = weather_get_current(); + gBattleCommunication[MULTISTRING_CHOOSER] = GetCurrentWeather(); BattleScriptPushCursorAndCallback(BattleScript_OverworldWeatherStarts); } break; -- cgit v1.2.3 From 003ed9293b2c51f0481ed31f0e0459cbecbf757e Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 20 Jan 2018 14:17:03 -0800 Subject: More documentation of field_weather --- src/battle/battle_transition.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_transition.c b/src/battle/battle_transition.c index f7cdc0694..a94974b27 100644 --- a/src/battle/battle_transition.c +++ b/src/battle/battle_transition.c @@ -6,6 +6,7 @@ #include "palette.h" #include "trig.h" #include "field_effect.h" +#include "field_weather.h" #include "random.h" #include "sprite.h" #include "sound.h" @@ -15,7 +16,6 @@ #include "ewram.h" #include "scanline_effect.h" -void sub_807DE10(void); void ScanlineEffect_Clear(void); extern const struct OamData gFieldOamData_32x32; @@ -567,7 +567,7 @@ static void Task_BattleTransitionMain(u8 taskID) static bool8 Transition_Phase1(struct Task* task) { - sub_807DE10(); + SetWeatherScreenFadeOut(); CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, 0x400); if (sPhase1_Tasks[task->tTransitionID] != NULL) { -- cgit v1.2.3 From ffb74a0211f750506650b66fe2bcdf7ddf770668 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Sun, 21 Jan 2018 18:14:47 -0600 Subject: match debug ROM --- src/battle/battle_2.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 696f1fde0..03391cf92 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -12104,6 +12104,12 @@ void SetActionsAndBanksTurnOrder(void) } } } + // Debug ROM has a register swap from the retail ROM. + // And doing this seems to fix it. +#if DEBUG + asm("");asm("");asm("");asm("");asm("");asm("");asm("");asm("");asm(""); + asm("");asm("");asm("");asm("");asm("");asm("");asm("");asm(""); +#endif gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; eFocusPunchBank = 0; } -- cgit v1.2.3 From 796d331df605f17b3e5d89d494d89ce7a907eaab Mon Sep 17 00:00:00 2001 From: Thomas Winwood Date: Mon, 22 Jan 2018 06:35:10 +0000 Subject: Use BATTLE_TYPE_DOUBLE constant in guard.c --- src/battle/anim/guard.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/battle') diff --git a/src/battle/anim/guard.c b/src/battle/anim/guard.c index ab093eab1..01cf07e39 100644 --- a/src/battle/anim/guard.c +++ b/src/battle/anim/guard.c @@ -12,7 +12,7 @@ extern u16 gBattleTypeFlags; void sub_80D3014(struct Sprite *sprite) { - if ((gBattleTypeFlags & 1) && IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2)) + if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2)) { sub_807A3FC(gAnimBankAttacker, 0, &sprite->pos1.x, &sprite->pos1.y); sprite->pos1.y += 40; -- cgit v1.2.3 From 4e98ffed3339ca9fd7c4f0915da707aa8b2417ef Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 14:54:37 -0500 Subject: through sub_80C8604 --- src/battle/contest_link_80C857C.c | 46 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index 616a72d27..e0b24b9e1 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -1,6 +1,52 @@ #include "global.h" +#include "ewram.h" +#include "task.h" #include "link.h" +void sub_80C8644(u8 taskId); + +void sub_80C857C(const void *data, u16 size) +{ + memcpy(eContestLinkSendBuffer, data, size); + SendBlock(bitmask_all_link_players_but_self(), eContestLinkSendBuffer, size); +} + +bool8 sub_80C85AC(u8 who) +{ + u8 flag = 1 << who; + if (!(GetBlockReceivedStatus() & flag)) + return FALSE; + ResetBlockReceivedFlag(flag); + return TRUE; +} + +bool8 sub_80C85D8(void) +{ + int i; + + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + if (!((GetBlockReceivedStatus() >> i) & 1)) + return FALSE; + } + ResetBlockReceivedFlags(); + return TRUE; +} + +void sub_80C8604(u8 taskId) +{ +#if ENGLISH + u8 i; + + for (i = 0; i < 4; i++) + gBlockRecvBuffer[i][0] = 0xff; +#endif + gTasks[taskId].data[0] = 0; + gTasks[taskId].func = sub_80C8644; +} + +asm(".section .text_de"); + #if GERMAN void de_sub_80C9274(bool32 arg0) -- cgit v1.2.3 From fc504ce61b8698bc4777bbd37a8766b8c35a5814 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 15:51:57 -0500 Subject: through (nonmatching) sub_80C86A0 --- src/battle/contest_link_80C857C.c | 150 +++++++++++++++++++++++++++++++++++++- 1 file changed, 149 insertions(+), 1 deletion(-) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index e0b24b9e1..3360ecbb6 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -1,9 +1,13 @@ #include "global.h" #include "ewram.h" #include "task.h" +#include "contest.h" +#include "text.h" +#include "string_util.h" #include "link.h" -void sub_80C8644(u8 taskId); +static void sub_80C8644(u8 taskId); +static void sub_80C8660(u8 taskId); void sub_80C857C(const void *data, u16 size) { @@ -45,6 +49,150 @@ void sub_80C8604(u8 taskId) gTasks[taskId].func = sub_80C8644; } +static void sub_80C8644(u8 taskId) +{ + gTasks[taskId].func = sub_80C8660; +} + +static void sub_80C8660(u8 taskId) +{ + if (gReceivedRemoteLinkPlayers) + { + gContestPlayerMonIndex = GetMultiplayerId(); + if (GetLinkPlayerCount() == MAX_LINK_PLAYERS) + { + gIsLinkContest = TRUE; + SwitchTaskToFollowupFunc(taskId); + } + } +} + +#ifdef NONMATCHING +u8 sub_80C86A0(const u8 *string) +{ + u8 language = GAME_LANGUAGE; + if (string[0] == EXT_CTRL_CODE_BEGIN && string[1] == 0x15) + return language; + if (StringLength(string) > 5) + return language; + for (; *string != EOS; string++) + { + if (!((*string >= CHAR_A && *string <= CHAR_z) || + (*string >= CHAR_0 + 0 && *string <= CHAR_0 + 9) || + *string == CHAR_SPACE || + *string == CHAR_PERIOD || + *string == CHAR_COMMA || + *string == 0xAB || + *string == CHAR_QUESTION_MARK || + *string == CHAR_MALE || + *string == CHAR_FEMALE || + *string == CHAR_SLASH || + *string == CHAR_HYPHEN || + *string == CHAR_ELLIPSIS || + *string == 0xB1 || + *string == 0xB2 || + *string == 0xB3 || + *string == 0xB1 + )) + { + language = LANGUAGE_JAPANESE; + break; + } + } + return language; +} +#else +__attribute__((naked)) u8 sub_80C86A0(const u8 *string) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tadds r4, r0, 0\n" + ".ifdef ENGLISH\n" + "\tmovs r5, 0x2\n" + ".else\n" + "\tmovs r5, 0x5\n" + ".endif\n" + "\tldrb r0, [r4]\n" + "\tcmp r0, 0xFC\n" + "\tbne _080C86B6\n" + "\tldrb r0, [r4, 0x1]\n" + "\tcmp r0, 0x15\n" + "\tbne _080C86B6\n" + ".ifdef ENGLISH\n" + "\tmovs r0, 0x2\n" + ".else\n" + "\tmovs r0, 0x5\n" + ".endif\n" + "\tb _080C872C\n" + "_080C86B6:\n" + "\tadds r0, r4, 0\n" + "\tbl StringLength\n" + "\tlsls r0, 16\n" + "\tlsrs r0, 16\n" + "\tcmp r0, 0x5\n" + "\tbhi _080C872A\n" + "\tldrb r0, [r4]\n" + "\tcmp r0, 0xFF\n" + "\tbeq _080C872A\n" + "_080C86CA:\n" + "\tldrb r1, [r4]\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0x45\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x33\n" + "\tbls _080C871E\n" + "\tadds r0, r1, 0\n" + "\tadds r0, 0x5F\n" + "\tlsls r0, 24\n" + "\tlsrs r0, 24\n" + "\tcmp r0, 0x9\n" + "\tbls _080C871E\n" + "\tadds r0, r1, 0\n" + "\tcmp r0, 0\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xAD\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xB8\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xAB\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xAC\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xB5\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xB6\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xBA\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xAE\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xB0\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xB1\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xB2\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xB3\n" + "\tbeq _080C871E\n" + "\tcmp r0, 0xB1\n" + "\tbne _080C8728\n" + "_080C871E:\n" + "\tadds r4, 0x1\n" + "\tldrb r0, [r4]\n" + "\tcmp r0, 0xFF\n" + "\tbne _080C86CA\n" + "\tb _080C872A\n" + "_080C8728:\n" + "\tmovs r5, 0x1\n" + "_080C872A:\n" + "\tadds r0, r5, 0\n" + "_080C872C:\n" + "\tpop {r4,r5}\n" + "\tpop {r1}\n" + "\tbx r1"); +} +#endif + asm(".section .text_de"); #if GERMAN -- cgit v1.2.3 From b2ea9aec023be26a83853ca53134ce78b95ac2e6 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 17:33:02 -0500 Subject: sub_80C8734 --- src/battle/contest_link_80C857C.c | 104 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index 3360ecbb6..b86e7bb9c 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -8,6 +8,10 @@ static void sub_80C8644(u8 taskId); static void sub_80C8660(u8 taskId); +#if GERMAN +void de_sub_80C9274(bool32 arg0); +void de_sub_80C9294(bool32 arg0); +#endif void sub_80C857C(const void *data, u16 size) { @@ -193,6 +197,106 @@ __attribute__((naked)) u8 sub_80C86A0(const u8 *string) } #endif +void sub_80C8734(u8 taskId) +{ + int i; + u8 *name; + + switch (gTasks[taskId].data[0]) { +#if ENGLISH + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; +#elif GERMAN + case 8: +#endif + case 0: + if (GetMultiplayerId() == 0) { + if (sub_8007ECC()) { +#if GERMAN + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[0] = 3; + } + else + { +#endif + memcpy(gBlockSendBuffer, gContestMons + gContestPlayerMonIndex, sizeof(struct ContestPokemon)); +#if GERMAN + de_sub_80C9274(FALSE); +#endif + sub_8007E9C(2); +#if GERMAN + gTasks[taskId].data[0] = 1; + } +#else + gTasks[taskId].data[0]++; +#endif + } + } + else + { + memcpy(gBlockSendBuffer, gContestMons + gContestPlayerMonIndex, sizeof(struct ContestPokemon)); +#if GERMAN + de_sub_80C9294(FALSE); +#endif + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80C85D8()) + { + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + memcpy(gContestMons + i, gBlockRecvBuffer[i], sizeof(struct ContestPokemon)); + name = gContestMons[i].nickname; + if (gLinkPlayers[i].language == LANGUAGE_JAPANESE) + { + ConvertInternationalString(name, sub_80C86A0(name)); + } + else if (name[10] == EXT_CTRL_CODE_BEGIN) + { + ConvertInternationalString(name, LANGUAGE_JAPANESE); + } else + { + name[5] = name[10]; + name[10] = EOS; + } + name = gContestMons[i].trainerName; + if (gLinkPlayers[i].language == LANGUAGE_JAPANESE) + { + name[7] = EOS; + name[6] = name[4]; + name[5] = name[3]; + name[4] = name[2]; + name[3] = name[1]; + name[2] = name[0]; + name[1] = 0x15; + name[0] = EXT_CTRL_CODE_BEGIN; + } + else + { + name[5] = name[7]; + name[7] = EOS; + } + } + gTasks[taskId].data[0]++; + } + break; +#if GERMAN + case 2: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + default: + gTasks[taskId].data[0]++; + break; +#endif + } +} + + asm(".section .text_de"); #if GERMAN -- cgit v1.2.3 From 84769240d2002281c7bc274f18aab76fbe908483 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 18:04:04 -0500 Subject: sub_80C88AC --- src/battle/contest_link_80C857C.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index b86e7bb9c..937193172 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -1,5 +1,6 @@ #include "global.h" #include "ewram.h" +#include "random.h" #include "task.h" #include "contest.h" #include "text.h" @@ -296,6 +297,38 @@ void sub_80C8734(u8 taskId) } } +void sub_80C88AC(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (GetMultiplayerId() == 0) + { + if (sub_8007ECC()) + { + sub_80C857C(&gRngValue, sizeof(u32)); + gTasks[taskId].data[0]++; + } + } + else + { + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80C85AC(0)) + { + memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(u32)); + memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(u32)); + gTasks[taskId].data[0]++; + } + break; + } +} asm(".section .text_de"); -- cgit v1.2.3 From 9474c491c070fe38e89f7b3848a5820c763fe045 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 19:03:23 -0500 Subject: sub_80C8938 --- src/battle/contest_link_80C857C.c | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index 937193172..17b82388c 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -330,6 +330,74 @@ void sub_80C88AC(u8 taskId) } } +void sub_80C8938(u8 taskId) +{ + int i; + + switch (gTasks[taskId].data[0]) + { +#if ENGLISH + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; +#elif GERMAN + case 8: +#endif + case 0: + gBlockSendBuffer[0] = gTasks[taskId].data[9]; + if (GetMultiplayerId() == 0) + { + if (sub_8007ECC()) + { +#if GERMAN + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[0] = 3; + } + else + { + de_sub_80C9274(TRUE); +#endif + sub_8007E9C(2); +#if ENGLISH + gTasks[taskId].data[0]++; +#elif GERMAN + gTasks[taskId].data[0] = 1; + } +#endif + } + } + else + { +#if GERMAN + de_sub_80C9294(TRUE); +#endif + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80C85D8()) + { + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + gTasks[taskId].data[i + 1] = gBlockRecvBuffer[i][0]; + } + gTasks[taskId].data[0]++; + } + break; +#if GERMAN + case 2: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + default: + gTasks[taskId].data[0]++; + break; +#endif + } +} + asm(".section .text_de"); #if GERMAN -- cgit v1.2.3 From 5312cf566196e662aa7edd4ef68f32922eb54180 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 19:20:26 -0500 Subject: through sub_80C8A38 --- src/battle/contest_link_80C857C.c | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index 17b82388c..cef290adf 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -398,6 +398,60 @@ void sub_80C8938(u8 taskId) } } +void sub_80C89DC(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (sub_8007ECC()) + { + sub_80C857C(&gContestPlayerMonIndex, sizeof(u8)); + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80C85D8()) + { + gTasks[taskId].data[0]++; + } + break; + } +} + +void sub_80C8A38(u8 taskId) +{ + int i; + + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (sub_8007ECC()) + { + sub_80C857C(&sContestantStatus[gContestPlayerMonIndex].currMove, sizeof(u16)); + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80C85D8()) + { + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + *&sContestantStatus[i].currMove = gBlockRecvBuffer[i][0]; + } + gTasks[taskId].data[0]++; + } + break; + } +} + asm(".section .text_de"); #if GERMAN -- cgit v1.2.3 From cbab0f740349cbeece60f2155537c2a9870d2318 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 20:24:02 -0500 Subject: sub_80C8AD0 --- src/battle/contest_link_80C857C.c | 77 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index cef290adf..465bb0487 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -452,6 +452,83 @@ void sub_80C8A38(u8 taskId) } } +void sub_80C8AD0(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (sub_8007ECC()) + { + sub_80C857C(gUnknown_02038678, sizeof gUnknown_02038678); + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80C85D8()) + { + memcpy(gUnknown_02038678, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038678); + gTasks[taskId].data[0]++; + } + break; + case 2: + case 5: + case 8: + case 11: + if (gTasks[taskId].data[1]++ > 10) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + break; + case 3: + if (sub_8007ECC()) + { + sub_80C857C(gUnknown_02038680, sizeof gUnknown_02038680); + gTasks[taskId].data[0]++; + } + break; + case 4: + if (sub_80C85D8()) + { + memcpy(gUnknown_02038680, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038680); + gTasks[taskId].data[0]++; + } + break; + case 6: + if (sub_8007ECC()) + { + sub_80C857C(gUnknown_02038688, sizeof gUnknown_02038688); + gTasks[taskId].data[0]++; + } + break; + case 7: + if (sub_80C85D8()) + { + memcpy(gUnknown_02038688, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038688); + gTasks[taskId].data[0]++; + } + break; + case 9: + if (sub_8007ECC()) + { + sub_80C857C(gContestFinalStandings, sizeof gContestFinalStandings); + gTasks[taskId].data[0]++; + } + break; + case 10: + if (sub_80C85D8()) + { + memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_0203869B], sizeof gContestFinalStandings); + gTasks[taskId].data[0]++; + } + break; + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + asm(".section .text_de"); #if GERMAN -- cgit v1.2.3 From 399856bc7ead101718891712dd20dd85e138e640 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 20:30:31 -0500 Subject: sub_80C8C80 --- src/battle/contest_link_80C857C.c | 77 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index 465bb0487..84695fb37 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -529,6 +529,83 @@ void sub_80C8AD0(u8 taskId) } } +void sub_80C8C80(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + if (sub_8007ECC()) + { + sub_80C857C(sContestantStatus, 4 * sizeof(struct ContestantStatus)); + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80C85D8()) + { + memcpy(sContestantStatus, gBlockRecvBuffer[gUnknown_0203869B], 4 * sizeof(struct ContestantStatus)); + gTasks[taskId].data[0]++; + } + break; + case 2: + case 5: + case 8: + case 11: + if (gTasks[taskId].data[1]++ > 10) + { + gTasks[taskId].data[1] = 0; + gTasks[taskId].data[0]++; + } + break; + case 3: + if (sub_8007ECC()) + { + sub_80C857C(&shared192D0, sizeof shared192D0); + gTasks[taskId].data[0]++; + } + break; + case 4: + if (sub_80C85D8()) + { + memcpy(&shared192D0, gBlockRecvBuffer[gUnknown_0203869B], sizeof shared192D0); + gTasks[taskId].data[0]++; + } + break; + case 6: + if (sub_8007ECC()) + { + sub_80C857C(&shared19328, sizeof shared19328); + gTasks[taskId].data[0]++; + } + break; + case 7: + if (sub_80C85D8()) + { + memcpy(&shared19328, gBlockRecvBuffer[gUnknown_0203869B], sizeof shared19328); + gTasks[taskId].data[0]++; + } + break; + case 9: + if (sub_8007ECC()) + { + sub_80C857C(gUnknown_02038696, sizeof gUnknown_02038696); + gTasks[taskId].data[0]++; + } + break; + case 10: + if (sub_80C85D8()) + { + memcpy(gUnknown_02038696, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038696); + gTasks[taskId].data[0]++; + } + break; + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + } +} + asm(".section .text_de"); #if GERMAN -- cgit v1.2.3 From 765b2ffe3f7f49e49cc416a930a6e60ee265ce14 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 20:38:05 -0500 Subject: sub_80C8E1C --- src/battle/contest_link_80C857C.c | 68 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index 84695fb37..f505fa658 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -606,6 +606,74 @@ void sub_80C8C80(u8 taskId) } } +void sub_80C8E1C(u8 taskId) +{ + int i; + + switch (gTasks[taskId].data[0]) + { +#if ENGLISH + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; +#elif GERMAN + case 8: +#endif + case 0: + gBlockSendBuffer[0] = 0x64; + if (GetMultiplayerId() == 0) + { + if (sub_8007ECC()) + { +#if GERMAN + if (gTasks[taskId].data[0] == 0) + { + gTasks[taskId].data[0] = 3; + } + else + { + de_sub_80C9274(FALSE); +#endif + sub_8007E9C(2); +#if ENGLISH + gTasks[taskId].data[0]++; +#else + gTasks[taskId].data[0] = 1; + } +#endif + } + } + else + { +#if GERMAN + de_sub_80C9294(FALSE); +#endif + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80C85D8()) + { + for (i = 0; i < MAX_LINK_PLAYERS; i++) + { + gTasks[taskId].data[5 + i] = gBlockRecvBuffer[i][0]; + } + gTasks[taskId].data[0]++; + } + break; +#if GERMAN + case 2: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + default: + gTasks[taskId].data[0]++; + break; +#endif + } +} + asm(".section .text_de"); #if GERMAN -- cgit v1.2.3 From c723b341c50df19f8951353a7efd4ab83bf56833 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 20:52:41 -0500 Subject: through sub_80C8F34 --- src/battle/contest_link_80C857C.c | 60 +++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 6 deletions(-) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index f505fa658..e85350aea 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -228,11 +228,11 @@ void sub_80C8734(u8 taskId) de_sub_80C9274(FALSE); #endif sub_8007E9C(2); -#if GERMAN - gTasks[taskId].data[0] = 1; - } -#else +#if ENGLISH gTasks[taskId].data[0]++; +#elif GERMAN + gTasks[taskId].data[0] = 1; + } #endif } } @@ -638,7 +638,7 @@ void sub_80C8E1C(u8 taskId) sub_8007E9C(2); #if ENGLISH gTasks[taskId].data[0]++; -#else +#elif GERMAN gTasks[taskId].data[0] = 1; } #endif @@ -674,7 +674,55 @@ void sub_80C8E1C(u8 taskId) } } -asm(".section .text_de"); +void sub_80C8EBC(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (sub_8007ECC()) + { + sub_80C857C(gUnknown_02038670, sizeof gUnknown_02038670); + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80C85D8()) + { + memcpy(gUnknown_02038670, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038670); + gTasks[taskId].data[0]++; + } + break; + } +} + +void sub_80C8F34(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + default: + gTasks[taskId].data[0] = 0; + SwitchTaskToFollowupFunc(taskId); + break; + case 0: + if (sub_8007ECC()) + { + sub_80C857C(gUnknown_02038696, sizeof gUnknown_02038696); + gTasks[taskId].data[0]++; + } + break; + case 1: + if (sub_80C85D8()) + { + memcpy(gUnknown_02038696, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038696); + gTasks[taskId].data[0]++; + } + break; + } +} #if GERMAN -- cgit v1.2.3 From cc0d7a675d5fc85adac3bd94387c54e0eb507495 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Mon, 22 Jan 2018 21:01:33 -0500 Subject: Rename some static functions --- src/battle/battle_2.c | 16 +++--- src/battle/contest_link_80C857C.c | 104 +++++++++++++++++++------------------- 2 files changed, 60 insertions(+), 60 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index b00c35312..2ad2adb04 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -396,7 +396,7 @@ void sub_800EC9C(void) case 0: if (gBattleTypeFlags & BATTLE_TYPE_LINK) { - if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) { gBattleStruct->unk0 = 1; gBattleStruct->unk1 = 1; @@ -464,7 +464,7 @@ void sub_800EC9C(void) } break; case 2: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { SendBlock(bitmask_all_link_players_but_self(), gPlayerParty, sizeof(*gPlayerParty) * 2); gBattleCommunication[0]++; @@ -479,7 +479,7 @@ void sub_800EC9C(void) } break; case 4: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 2, sizeof(*gPlayerParty) * 2); gBattleCommunication[0]++; @@ -494,7 +494,7 @@ void sub_800EC9C(void) } break; case 6: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { SendBlock(bitmask_all_link_players_but_self(), gPlayerParty + 4, sizeof(*gPlayerParty) * 2); gBattleCommunication[0]++; @@ -579,7 +579,7 @@ void sub_800F104(void) switch (gBattleCommunication[0]) { case 0: - if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) { sub_800F02C(); SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x60); @@ -639,7 +639,7 @@ void sub_800F298(void) switch (gBattleCommunication[0]) { case 0: - if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + if (gReceivedRemoteLinkPlayers != 0 && IsLinkTaskFinished()) { gBattleStruct->unk0 = 1; gBattleStruct->unk1 = 1; @@ -732,7 +732,7 @@ void sub_800F298(void) break; case 2: step_2: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { SendBlock(bitmask_all_link_players_but_self(), ewram1D000, sizeof(struct Pokemon) * 2); gBattleCommunication[0]++; @@ -795,7 +795,7 @@ void sub_800F298(void) } break; case 4: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { SendBlock(bitmask_all_link_players_but_self(), ewram1D000 + 2, sizeof(struct Pokemon)); gBattleCommunication[0]++; diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index e85350aea..01088bf53 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -10,17 +10,17 @@ static void sub_80C8644(u8 taskId); static void sub_80C8660(u8 taskId); #if GERMAN -void de_sub_80C9274(bool32 arg0); -void de_sub_80C9294(bool32 arg0); +static void de_sub_80C9274(bool32 arg0); +static void de_sub_80C9294(bool32 arg0); #endif -void sub_80C857C(const void *data, u16 size) +static void SendBlockToAllOpponents(const void *data, u16 size) { memcpy(eContestLinkSendBuffer, data, size); SendBlock(bitmask_all_link_players_but_self(), eContestLinkSendBuffer, size); } -bool8 sub_80C85AC(u8 who) +static bool8 HasPlayerReceivedBlock(u8 who) { u8 flag = 1 << who; if (!(GetBlockReceivedStatus() & flag)) @@ -29,7 +29,7 @@ bool8 sub_80C85AC(u8 who) return TRUE; } -bool8 sub_80C85D8(void) +static bool8 HaveAllPlayersReceivedBlock(void) { int i; @@ -214,7 +214,7 @@ void sub_80C8734(u8 taskId) #endif case 0: if (GetMultiplayerId() == 0) { - if (sub_8007ECC()) { + if (IsLinkTaskFinished()) { #if GERMAN if (gTasks[taskId].data[0] == 0) { @@ -246,7 +246,7 @@ void sub_80C8734(u8 taskId) } break; case 1: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { for (i = 0; i < MAX_LINK_PLAYERS; i++) { @@ -308,9 +308,9 @@ void sub_80C88AC(u8 taskId) case 0: if (GetMultiplayerId() == 0) { - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(&gRngValue, sizeof(u32)); + SendBlockToAllOpponents(&gRngValue, sizeof(u32)); gTasks[taskId].data[0]++; } } @@ -320,7 +320,7 @@ void sub_80C88AC(u8 taskId) } break; case 1: - if (sub_80C85AC(0)) + if (HasPlayerReceivedBlock(0)) { memcpy(&gRngValue, gBlockRecvBuffer[0], sizeof(u32)); memcpy(&gContestRngValue, gBlockRecvBuffer[0], sizeof(u32)); @@ -348,7 +348,7 @@ void sub_80C8938(u8 taskId) gBlockSendBuffer[0] = gTasks[taskId].data[9]; if (GetMultiplayerId() == 0) { - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { #if GERMAN if (gTasks[taskId].data[0] == 0) @@ -377,7 +377,7 @@ void sub_80C8938(u8 taskId) } break; case 1: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { for (i = 0; i < MAX_LINK_PLAYERS; i++) { @@ -407,14 +407,14 @@ void sub_80C89DC(u8 taskId) SwitchTaskToFollowupFunc(taskId); break; case 0: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(&gContestPlayerMonIndex, sizeof(u8)); + SendBlockToAllOpponents(&gContestPlayerMonIndex, sizeof(u8)); gTasks[taskId].data[0]++; } break; case 1: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { gTasks[taskId].data[0]++; } @@ -433,14 +433,14 @@ void sub_80C8A38(u8 taskId) SwitchTaskToFollowupFunc(taskId); break; case 0: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(&sContestantStatus[gContestPlayerMonIndex].currMove, sizeof(u16)); + SendBlockToAllOpponents(&sContestantStatus[gContestPlayerMonIndex].currMove, sizeof(u16)); gTasks[taskId].data[0]++; } break; case 1: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { for (i = 0; i < MAX_LINK_PLAYERS; i++) { @@ -457,14 +457,14 @@ void sub_80C8AD0(u8 taskId) switch (gTasks[taskId].data[0]) { case 0: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(gUnknown_02038678, sizeof gUnknown_02038678); + SendBlockToAllOpponents(gUnknown_02038678, sizeof gUnknown_02038678); gTasks[taskId].data[0]++; } break; case 1: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { memcpy(gUnknown_02038678, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038678); gTasks[taskId].data[0]++; @@ -481,42 +481,42 @@ void sub_80C8AD0(u8 taskId) } break; case 3: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(gUnknown_02038680, sizeof gUnknown_02038680); + SendBlockToAllOpponents(gUnknown_02038680, sizeof gUnknown_02038680); gTasks[taskId].data[0]++; } break; case 4: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { memcpy(gUnknown_02038680, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038680); gTasks[taskId].data[0]++; } break; case 6: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(gUnknown_02038688, sizeof gUnknown_02038688); + SendBlockToAllOpponents(gUnknown_02038688, sizeof gUnknown_02038688); gTasks[taskId].data[0]++; } break; case 7: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { memcpy(gUnknown_02038688, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038688); gTasks[taskId].data[0]++; } break; case 9: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(gContestFinalStandings, sizeof gContestFinalStandings); + SendBlockToAllOpponents(gContestFinalStandings, sizeof gContestFinalStandings); gTasks[taskId].data[0]++; } break; case 10: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { memcpy(gContestFinalStandings, gBlockRecvBuffer[gUnknown_0203869B], sizeof gContestFinalStandings); gTasks[taskId].data[0]++; @@ -534,14 +534,14 @@ void sub_80C8C80(u8 taskId) switch (gTasks[taskId].data[0]) { case 0: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(sContestantStatus, 4 * sizeof(struct ContestantStatus)); + SendBlockToAllOpponents(sContestantStatus, 4 * sizeof(struct ContestantStatus)); gTasks[taskId].data[0]++; } break; case 1: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { memcpy(sContestantStatus, gBlockRecvBuffer[gUnknown_0203869B], 4 * sizeof(struct ContestantStatus)); gTasks[taskId].data[0]++; @@ -558,42 +558,42 @@ void sub_80C8C80(u8 taskId) } break; case 3: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(&shared192D0, sizeof shared192D0); + SendBlockToAllOpponents(&shared192D0, sizeof shared192D0); gTasks[taskId].data[0]++; } break; case 4: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { memcpy(&shared192D0, gBlockRecvBuffer[gUnknown_0203869B], sizeof shared192D0); gTasks[taskId].data[0]++; } break; case 6: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(&shared19328, sizeof shared19328); + SendBlockToAllOpponents(&shared19328, sizeof shared19328); gTasks[taskId].data[0]++; } break; case 7: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { memcpy(&shared19328, gBlockRecvBuffer[gUnknown_0203869B], sizeof shared19328); gTasks[taskId].data[0]++; } break; case 9: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(gUnknown_02038696, sizeof gUnknown_02038696); + SendBlockToAllOpponents(gUnknown_02038696, sizeof gUnknown_02038696); gTasks[taskId].data[0]++; } break; case 10: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { memcpy(gUnknown_02038696, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038696); gTasks[taskId].data[0]++; @@ -624,7 +624,7 @@ void sub_80C8E1C(u8 taskId) gBlockSendBuffer[0] = 0x64; if (GetMultiplayerId() == 0) { - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { #if GERMAN if (gTasks[taskId].data[0] == 0) @@ -653,7 +653,7 @@ void sub_80C8E1C(u8 taskId) } break; case 1: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { for (i = 0; i < MAX_LINK_PLAYERS; i++) { @@ -683,14 +683,14 @@ void sub_80C8EBC(u8 taskId) SwitchTaskToFollowupFunc(taskId); break; case 0: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(gUnknown_02038670, sizeof gUnknown_02038670); + SendBlockToAllOpponents(gUnknown_02038670, sizeof gUnknown_02038670); gTasks[taskId].data[0]++; } break; case 1: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { memcpy(gUnknown_02038670, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038670); gTasks[taskId].data[0]++; @@ -708,14 +708,14 @@ void sub_80C8F34(u8 taskId) SwitchTaskToFollowupFunc(taskId); break; case 0: - if (sub_8007ECC()) + if (IsLinkTaskFinished()) { - sub_80C857C(gUnknown_02038696, sizeof gUnknown_02038696); + SendBlockToAllOpponents(gUnknown_02038696, sizeof gUnknown_02038696); gTasks[taskId].data[0]++; } break; case 1: - if (sub_80C85D8()) + if (HaveAllPlayersReceivedBlock()) { memcpy(gUnknown_02038696, gBlockRecvBuffer[gUnknown_0203869B], sizeof gUnknown_02038696); gTasks[taskId].data[0]++; @@ -726,7 +726,7 @@ void sub_80C8F34(u8 taskId) #if GERMAN -void de_sub_80C9274(bool32 arg0) +static void de_sub_80C9274(bool32 arg0) { if (deUnkValue2 == 1) { @@ -737,7 +737,7 @@ void de_sub_80C9274(bool32 arg0) } } -void de_sub_80C9294(bool32 arg0) +static void de_sub_80C9294(bool32 arg0) { if (deUnkValue2 == 1) { -- cgit v1.2.3 From 1685a7977a652f35998a717395407d625878e20e Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Mon, 22 Jan 2018 21:42:14 -0600 Subject: dump some debug baseroms --- src/battle/battle_2.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 03391cf92..478499ad7 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -5155,7 +5155,7 @@ void debug_sub_801174C() "._704:\n" " .word gUnknown_020297ED\n" " .word gSaveBlock2\n" - " .word UnkDebug0+0x279\n" + " .word str_821F631\n" " .word gUnknown_02023A14+0x52\n" " .word gBattleTypeFlags\n" " .word UnkDebug0+0x1e0\n" @@ -5575,7 +5575,7 @@ void debug_sub_801174C() "._750:\n" " .word gPlayerParty\n" " .word gUnknown_02023A14+0x98\n" - " .word UnkDebug0+0x291\n" + " .word Str_821F649\n" " .word gUnknown_02023A14+0x50\n" " .word gUnknown_02023A14+0xde\n" " .word gEnemyParty\n" -- cgit v1.2.3 From 0f09d2e7046a54c95e2ed4a7ff759d4cd1db87f7 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Mon, 22 Jan 2018 22:35:27 -0600 Subject: fix false gMysteryEventScriptCmdTableEnd offsets --- src/battle/battle_2.c | 78 +++++++++++++++++------------------ src/battle/battle_4.c | 2 +- src/battle/battle_controller_player.c | 2 +- src/battle/battle_interface.c | 6 +-- src/battle/battle_util.c | 12 +++--- 5 files changed, 50 insertions(+), 50 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 478499ad7..41d00546d 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -220,7 +220,7 @@ void InitBattle(void) " lsl r1, r1, #0x13\n" " ldr r2, ._10\n" " mov r0, sp\n" - " bl gMysteryEventScriptCmdTableEnd+0x3cb4\n" + " bl CpuSet\n" " ldr r0, ._10 + 4\n" " strh r4, [r0]\n" " sub r0, r0, #0xc\n" @@ -907,7 +907,7 @@ void sub_800EC9C() " ldr r2, ._116 + 4\n" " add r1, r1, r2\n" " mov r2, #0xc8\n" - " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" + " bl memcpy\n" " b ._129\n" "._117:\n" " .align 2, 0\n" @@ -946,7 +946,7 @@ void sub_800EC9C() " ldr r2, ._126 + 4\n" " add r1, r1, r2\n" " mov r2, #0xc8\n" - " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" + " bl memcpy\n" " b ._129\n" "._127:\n" " .align 2, 0\n" @@ -982,7 +982,7 @@ void sub_800EC9C() " add r1, r1, r0\n" " add r0, r4, #0\n" " mov r2, #0xc8\n" - " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" + " bl memcpy\n" " ldr r1, ._134 + 8\n" " add r0, r4, r1\n" " bl shedinja_something\n" @@ -1407,7 +1407,7 @@ void sub_800F104() " add r1, r1, r0\n" " ldr r0, ._177 + 4\n" " mov r2, #0x60\n" - " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" + " bl memcpy\n" "._174:\n" " add r7, r7, #0x1c\n" " add r4, r4, #0x1\n" @@ -1781,7 +1781,7 @@ void sub_800F298() " ldr r1, ._239 + 4\n" " mov r2, #0x96\n" " lsl r2, r2, #0x1\n" - " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" + " bl memcpy\n" " ldr r0, ._239 + 8\n" " mov r1, #0x0\n" " bl CreateTask\n" @@ -2018,7 +2018,7 @@ void sub_800F298() "._283:\n" " add r1, r5, #0\n" " mov r2, #0xc8\n" - " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" + " bl memcpy\n" " b ._291\n" "._293:\n" " .align 2, 0\n" @@ -2028,7 +2028,7 @@ void sub_800F298() " ldr r0, ._296\n" " add r1, r5, #0\n" " mov r2, #0xc8\n" - " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" + " bl memcpy\n" "._291:\n" " mov r0, #0x80\n" " lsl r0, r0, #0x1\n" @@ -2185,7 +2185,7 @@ void sub_800F298() "._333:\n" " add r1, r5, #0\n" " mov r2, #0x64\n" - " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" + " bl memcpy\n" " b ._341\n" "._343:\n" " .align 2, 0\n" @@ -2195,7 +2195,7 @@ void sub_800F298() " ldr r0, ._346\n" " add r1, r5, #0\n" " mov r2, #0x64\n" - " bl gMysteryEventScriptCmdTableEnd+0x5bc4\n" + " bl memcpy\n" "._341:\n" " mov r0, #0x80\n" " lsl r0, r0, #0x1\n" @@ -2627,7 +2627,7 @@ void BattleMainCB2(void) " str r0, [r4]\n" " bl ZeroEnemyPartyMons\n" " mov r0, #0x5a\n" - " bl gMysteryEventScriptCmdTableEnd+0x148c\n" + " bl m4aSongNumStop\n" " ldr r0, ._358 + 24\n" " ldrh r1, [r0]\n" " mov r0, #0x2\n" @@ -3197,7 +3197,7 @@ void debug_sub_80108B8() asm( " push {r4, r5, lr}\n" " add sp, sp, #0xfffffffc\n" - " bl gMysteryEventScriptCmdTableEnd+0x19f4\n" + " bl m4aSoundVSyncOff\n" " mov r0, #0x0\n" " bl SetHBlankCallback\n" " mov r0, #0x0\n" @@ -3264,7 +3264,7 @@ void debug_sub_80108B8() " ldr r1, ._507 + 72\n" " add r0, r4, #0\n" " bl LZDecompressVram\n" - " bl gMysteryEventScriptCmdTableEnd+0x1a70\n" + " bl m4aSoundVSyncOn\n" " ldr r0, ._507 + 76\n" " bl SetVBlankCallback\n" " ldr r0, ._507 + 80\n" @@ -3860,7 +3860,7 @@ void debug_sub_8010CAC() " strb r0, [r3, #0x15]\n" " lsl r0, r0, #0x1f\n" " lsr r0, r0, #0x1f\n" - " bl gMysteryEventScriptCmdTableEnd+0x2aa0\n" + " bl SetPokemonCryStereo\n" " bl debug_nullsub_3\n" "._559:\n" " ldr r4, ._565 + 12\n" @@ -4774,7 +4774,7 @@ void debug_sub_8011498() " lsl r4, r4, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x4358\n" + " bl __udivsi3\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -4830,7 +4830,7 @@ void debug_sub_8011498() " lsl r4, r4, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x4358\n" + " bl __udivsi3\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -4886,7 +4886,7 @@ void debug_sub_8011498() " lsl r4, r4, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x4358\n" + " bl __udivsi3\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -4929,7 +4929,7 @@ void debug_sub_8011498() " lsl r4, r5, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x4358\n" + " bl __udivsi3\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -4965,7 +4965,7 @@ void debug_sub_8011498() " lsl r4, r4, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x4358\n" + " bl __udivsi3\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -5002,7 +5002,7 @@ void debug_sub_8011498() " lsl r4, r5, #0x1\n" " mov r0, r9\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x4358\n" + " bl __udivsi3\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" @@ -5200,7 +5200,7 @@ void debug_sub_801174C() "._713:\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" + " bl __divsi3\n" " mov r3, #0x64\n" " mul r0, r0, r3\n" " ldr r1, ._719\n" @@ -5223,7 +5223,7 @@ void debug_sub_801174C() "._699:\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" + " bl __divsi3\n" " mov r2, #0x64\n" " add r1, r0, #0\n" " mul r1, r1, r2\n" @@ -5282,7 +5282,7 @@ void debug_sub_801174C() " str r0, [sp, #0xc]\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" + " bl __divsi3\n" " mov r3, #0x64\n" " mul r0, r0, r3\n" " ldr r1, ._726\n" @@ -5355,7 +5355,7 @@ void debug_sub_801174C() "._735:\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" + " bl __divsi3\n" " mov r2, #0x64\n" " mul r0, r0, r2\n" " ldr r1, ._741\n" @@ -5382,7 +5382,7 @@ void debug_sub_801174C() "._721:\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" + " bl __divsi3\n" " mov r2, #0x64\n" " add r1, r0, #0\n" " mul r1, r1, r2\n" @@ -5441,7 +5441,7 @@ void debug_sub_801174C() " str r0, [sp, #0xc]\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" + " bl __divsi3\n" " mov r2, #0x64\n" " mul r0, r0, r2\n" " ldr r1, ._750\n" @@ -5460,7 +5460,7 @@ void debug_sub_801174C() " ble ._743 @cond_branch\n" " add r0, r7, #0\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" + " bl __divsi3\n" " mov r3, #0x64\n" " mul r0, r0, r3\n" " ldr r1, ._750\n" @@ -6483,7 +6483,7 @@ void debug_sub_8012294() " lsl r4, r4, #0x1\n" " add r0, r5, #0\n" " mov r1, #0x5\n" - " bl gMysteryEventScriptCmdTableEnd+0x4358\n" + " bl __udivsi3\n" " add r5, r0, #0\n" " lsl r5, r5, #0x18\n" " lsr r5, r5, #0x15\n" @@ -7102,7 +7102,7 @@ void debug_sub_8012688() " bl SetHBlankCallback\n" " ldr r0, ._873 + 100\n" " bl SetVBlankCallback\n" - " bl gMysteryEventScriptCmdTableEnd+0x14f4\n" + " bl m4aMPlayAllStop\n" " ldr r0, ._873 + 104\n" " mov r1, #0x0\n" " bl CreateTask\n" @@ -8484,7 +8484,7 @@ void debug_sub_8013240() { asm( " push {lr}\n" - " bl gMysteryEventScriptCmdTableEnd+0x2fec\n" + " bl IdentifyFlash\n" " lsl r0, r0, #0x10\n" " cmp r0, #0\n" " beq ._1068 @cond_branch\n" @@ -8519,7 +8519,7 @@ void debug_sub_8013258() " lsr r4, r0, #0x10\n" " add r0, r4, #0\n" " add r1, r6, #0\n" - " bl gMysteryEventScriptCmdTableEnd+0x2f60\n" + " bl ProgramFlashSectorAndVerify\n" " cmp r0, #0\n" " bne ._1071 @cond_branch\n" " mov r0, #0x80\n" @@ -8555,13 +8555,13 @@ void debug_sub_8013294() " lsl r0, r0, #0x18\n" " cmp r0, #0\n" " bne ._1076 @cond_branch\n" - " bl gMysteryEventScriptCmdTableEnd+0x19f4\n" + " bl m4aSoundVSyncOff\n" " add r0, r4, #0\n" " add r1, r5, #0\n" " add r2, r6, #0\n" " bl debug_sub_8013258\n" " add r4, r0, #0\n" - " bl gMysteryEventScriptCmdTableEnd+0x1a70\n" + " bl m4aSoundVSyncOn\n" " add r0, r4, #0\n" " b ._1077\n" "._1076:\n" @@ -8591,7 +8591,7 @@ void debug_sub_80132C8() " mov r1, #0x0\n" " add r2, r5, #0\n" " add r3, r6, #0\n" - " bl gMysteryEventScriptCmdTableEnd+0x2d64\n" + " bl ReadFlash\n" "._1078:\n" " pop {r4, r5, r6}\n" " pop {r0}\n" @@ -9066,7 +9066,7 @@ void debug_sub_80139E4() "._1193:\n" " ldr r0, ._1198 + 12\n" " ldr r0, [r0]\n" - " bl gMysteryEventScriptCmdTableEnd+0x3cf4\n" + " bl _call_via_r0\n" " ldr r1, ._1198 + 4\n" " mov r0, #0x0\n" " strb r0, [r1]\n" @@ -9081,7 +9081,7 @@ void debug_sub_80139E4() " lsl r0, r0, #0x2\n" " add r0, r0, r5\n" " ldr r0, [r0]\n" - " bl gMysteryEventScriptCmdTableEnd+0x3cf4\n" + " bl _call_via_r0\n" " ldrb r0, [r4]\n" " add r0, r0, #0x1\n" " strb r0, [r4]\n" @@ -9103,7 +9103,7 @@ void debug_sub_80139E4() "._1192:\n" " ldr r0, ._1202\n" " ldr r0, [r0]\n" - " bl gMysteryEventScriptCmdTableEnd+0x3cf4\n" + " bl _call_via_r0\n" " ldr r1, ._1202 + 4\n" " strb r4, [r1]\n" " ldr r0, ._1202 + 8\n" @@ -9117,7 +9117,7 @@ void debug_sub_80139E4() " lsl r0, r0, #0x2\n" " add r0, r0, r5\n" " ldr r0, [r0]\n" - " bl gMysteryEventScriptCmdTableEnd+0x3cf4\n" + " bl _call_via_r0\n" " ldrb r0, [r4]\n" " add r0, r0, #0x1\n" " strb r0, [r4]\n" @@ -9339,7 +9339,7 @@ void sub_8010874() " mov r0, #0x64\n" " mul r0, r0, r1\n" " ldr r1, ._1215 + 160\n" - " bl gMysteryEventScriptCmdTableEnd+0x3d30\n" + " bl __divsi3\n" " ldr r2, ._1215 + 164\n" " add r1, r4, r2\n" " strb r0, [r1]\n" diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 038b4f5cf..3415d9337 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -5111,7 +5111,7 @@ static void atk15_seteffectwithchance(void) lsl r0, r0, #0x10\n\ lsr r0, r0, #0x10\n\ mov r1, #0x64\n\ - bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + bl __umodsi3\n\ lsl r0, r0, #0x10\n\ lsr r0, r0, #0x10\n\ cmp r0, r4\n\ diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 7e3655e4a..cbca4a586 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -2234,7 +2234,7 @@ void debug_sub_803107C(void) mov r7, #0x0\n\ ldr r0, ._369\n\ ldr r0, [r0]\n\ - bl gMysteryEventScriptCmdTableEnd+0x3cf4\n\ + bl _call_via_r0\n\ ldr r0, ._369 + 4\n\ ldrb r0, [r0]\n\ cmp r0, #0\n\ diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index 1b6240159..b703bc7b8 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -1405,7 +1405,7 @@ void sub_804454C() " add r1, r1, r0\n" " mov r0, sp\n" " ldr r2, ._150 + 36\n" - " bl gMysteryEventScriptCmdTableEnd+0x3cb4\n" + " bl CpuSet\n" " ldrb r4, [r5]\n" " ldrh r0, [r7]\n" " mov r1, sl\n" @@ -1467,7 +1467,7 @@ void sub_804454C() " ldr r2, ._153 + 4\n" " add r1, r1, r2\n" " ldr r2, ._153 + 8\n" - " bl gMysteryEventScriptCmdTableEnd+0x3cb4\n" + " bl CpuSet\n" " b ._163\n" "._154:\n" " .align 2, 0\n" @@ -1521,7 +1521,7 @@ void sub_804454C() " add r1, r1, r6\n" " mov r0, sp\n" " ldr r2, ._161 + 4\n" - " bl gMysteryEventScriptCmdTableEnd+0x3cb4\n" + " bl CpuSet\n" " ldrb r4, [r5]\n" " ldrh r0, [r7]\n" " mov r1, sl\n" diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c index 8dae98b66..817382911 100644 --- a/src/battle/battle_util.c +++ b/src/battle/battle_util.c @@ -2407,7 +2407,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) lsl r0, r0, #0x10\n\ lsr r0, r0, #0x10\n\ mov r1, #0x3\n\ - bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + bl __umodsi3\n\ lsl r0, r0, #0x10\n\ lsr r4, r0, #0x10\n\ cmp r4, #0\n\ @@ -3332,7 +3332,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) lsl r0, r0, #0x10\n\ lsr r0, r0, #0x10\n\ mov r1, #0xa\n\ - bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + bl __umodsi3\n\ lsl r0, r0, #0x10\n\ cmp r0, #0\n\ beq ._1091 @cond_branch\n\ @@ -3542,7 +3542,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) lsl r0, r0, #0x10\n\ lsr r0, r0, #0x10\n\ mov r1, #0x3\n\ - bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + bl __umodsi3\n\ lsl r0, r0, #0x10\n\ cmp r0, #0\n\ beq ._1124 @cond_branch\n\ @@ -3737,7 +3737,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) lsl r0, r0, #0x10\n\ lsr r0, r0, #0x10\n\ mov r1, #0x3\n\ - bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + bl __umodsi3\n\ lsl r0, r0, #0x10\n\ cmp r0, #0\n\ beq ._1155 @cond_branch\n\ @@ -3932,7 +3932,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) lsl r0, r0, #0x10\n\ lsr r0, r0, #0x10\n\ mov r1, #0x3\n\ - bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + bl __umodsi3\n\ lsl r0, r0, #0x10\n\ cmp r0, #0\n\ beq ._1186 @cond_branch\n\ @@ -4204,7 +4204,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) lsl r0, r0, #0x10\n\ lsr r0, r0, #0x10\n\ mov r1, #0x3\n\ - bl gMysteryEventScriptCmdTableEnd+0x43d0\n\ + bl __umodsi3\n\ lsl r0, r0, #0x10\n\ cmp r0, #0\n\ beq ._1232 @cond_branch\n\ -- cgit v1.2.3 From 76c40aac928d139afa725182ab291436f809258d Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Tue, 23 Jan 2018 08:09:31 -0500 Subject: Clean up English/German blocks (fingers crossed) --- src/battle/contest_link_80C857C.c | 46 ++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 25 deletions(-) (limited to 'src/battle') diff --git a/src/battle/contest_link_80C857C.c b/src/battle/contest_link_80C857C.c index 01088bf53..4fb236294 100644 --- a/src/battle/contest_link_80C857C.c +++ b/src/battle/contest_link_80C857C.c @@ -215,24 +215,22 @@ void sub_80C8734(u8 taskId) case 0: if (GetMultiplayerId() == 0) { if (IsLinkTaskFinished()) { -#if GERMAN +#if ENGLISH + memcpy(gBlockSendBuffer, gContestMons + gContestPlayerMonIndex, sizeof(struct ContestPokemon)); + sub_8007E9C(2); + gTasks[taskId].data[0]++; +#elif GERMAN if (gTasks[taskId].data[0] == 0) { gTasks[taskId].data[0] = 3; } else { -#endif - memcpy(gBlockSendBuffer, gContestMons + gContestPlayerMonIndex, sizeof(struct ContestPokemon)); -#if GERMAN - de_sub_80C9274(FALSE); -#endif - sub_8007E9C(2); -#if ENGLISH - gTasks[taskId].data[0]++; -#elif GERMAN - gTasks[taskId].data[0] = 1; - } + memcpy(gBlockSendBuffer, gContestMons + gContestPlayerMonIndex, sizeof(struct ContestPokemon)); + de_sub_80C9274(FALSE); + sub_8007E9C(2); + gTasks[taskId].data[0] = 1; + } #endif } } @@ -350,7 +348,10 @@ void sub_80C8938(u8 taskId) { if (IsLinkTaskFinished()) { -#if GERMAN +#if ENGLISH + sub_8007E9C(2); + gTasks[taskId].data[0]++; +#elif GERMAN if (gTasks[taskId].data[0] == 0) { gTasks[taskId].data[0] = 3; @@ -358,11 +359,7 @@ void sub_80C8938(u8 taskId) else { de_sub_80C9274(TRUE); -#endif - sub_8007E9C(2); -#if ENGLISH - gTasks[taskId].data[0]++; -#elif GERMAN + sub_8007E9C(2); gTasks[taskId].data[0] = 1; } #endif @@ -626,7 +623,10 @@ void sub_80C8E1C(u8 taskId) { if (IsLinkTaskFinished()) { -#if GERMAN +#if ENGLISH + sub_8007E9C(2); + gTasks[taskId].data[0]++; +#elif GERMAN if (gTasks[taskId].data[0] == 0) { gTasks[taskId].data[0] = 3; @@ -634,12 +634,8 @@ void sub_80C8E1C(u8 taskId) else { de_sub_80C9274(FALSE); -#endif - sub_8007E9C(2); -#if ENGLISH - gTasks[taskId].data[0]++; -#elif GERMAN - gTasks[taskId].data[0] = 1; + sub_8007E9C(2); + gTasks[taskId].data[0] = 1; } #endif } -- cgit v1.2.3 From e03633d6bc1e1cd155bc258edbb7783020b4bdb7 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Tue, 23 Jan 2018 16:55:48 -0600 Subject: fix more false offsets --- src/battle/battle_2.c | 218 ++++++++++++++++---------------- src/battle/battle_4.c | 4 +- src/battle/battle_ai.c | 16 +-- src/battle/battle_controller_opponent.c | 12 +- src/battle/battle_controller_player.c | 4 +- src/battle/battle_records.c | 4 +- src/battle/battle_util.c | 12 +- 7 files changed, 135 insertions(+), 135 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 41d00546d..6808ad61c 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -354,7 +354,7 @@ void InitBattle(void) " .word gBattle_BG2_Y\n" " .word gBattle_BG3_X\n" " .word gBattle_BG3_Y\n" - " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_02023A14_50\n" " .word gBattleTerrain\n" " .word gUnknown_03004210\n" " .word gUnknown_030041D0\n" @@ -417,7 +417,7 @@ void InitBattle(void) "._15:\n" " .word sub_800EC9C+1\n" " .word gBattleTypeFlags\n" - " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_02023A14_50\n" " .word gEnemyParty\n" " .word gTrainerBattleOpponent\n" " .word gMain\n" @@ -638,7 +638,7 @@ void sub_800EC9C() "._56:\n" " .align 2, 0\n" "._55:\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word 0x160cb\n" " .word gBattleCommunication\n" " .word ._57\n" @@ -710,8 +710,8 @@ void sub_800EC9C() "._76:\n" " .word gBattleTypeFlags\n" " .word gReceivedRemoteLinkPlayers\n" - " .word +0x2000000\n" - " .word gUnknown_02023A14+0x50\n" + " .word gSharedMem\n" + " .word gUnknown_02023A14_50\n" " .word 0x2211\n" " .word gLinkPlayers\n" " .word gBattleCommunication\n" @@ -873,7 +873,7 @@ void sub_800EC9C() "._106:\n" " .word sub_800DE30+1\n" " .word gTasks\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word gBlockRecvBuffer\n" "._60:\n" " bl sub_8007ECC\n" @@ -1295,7 +1295,7 @@ void sub_800F104() "._152:\n" " .align 2, 0\n" "._151:\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word 0x160cb\n" " .word 0x160c4\n" " .word gBattleCommunication\n" @@ -1355,10 +1355,10 @@ void sub_800F104() " .align 2, 0\n" "._165:\n" " .word gReceivedRemoteLinkPlayers\n" - " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_02023A14_50\n" " .word 0x2211\n" " .word gLinkPlayers\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word gBattleCommunication\n" "._147:\n" " bl GetBlockReceivedStatus\n" @@ -1586,7 +1586,7 @@ void sub_800F298() "._189:\n" " .align 2, 0\n" "._188:\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word 0x160cb\n" " .word gBattleCommunication\n" " .word ._190\n" @@ -1646,10 +1646,10 @@ void sub_800F298() " .align 2, 0\n" "._206:\n" " .word gReceivedRemoteLinkPlayers\n" - " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_02023A14_50\n" " .word 0x2211\n" " .word gLinkPlayers\n" - " .word +0x2000000\n" + " .word gSharedMem\n" "._192:\n" " bl GetBlockReceivedStatus\n" " mov r1, #0xf\n" @@ -3181,12 +3181,12 @@ void debug_sub_8010818() "._502:\n" " .align 2, 0\n" "._501:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word 0x115\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" " .word gUnknown_Debug_030043A8\n" - " .word gUnknown_02023A14+0xde\n" - " .word UnkDebug0+0x1b4\n" + " .word gUnknown_Debug_2023B02\n" + " .word gUnknown_Debug_821F56C\n" "\n" ); } @@ -3345,7 +3345,7 @@ void debug_sub_80108B8() " .word 0x4000050\n" " .word gMonShinyPalette_CircledQuestionMark+0x18\n" " .word gMonShinyPalette_CircledQuestionMark+0x834\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word gMonShinyPalette_CircledQuestionMark+0xa8c\n" " .word 0x50001e0\n" " .word debug_sub_8011D40+1\n" @@ -3356,7 +3356,7 @@ void debug_sub_80108B8() " .word gUnknown_Debug_030043A0\n" " .word gUnknown_Debug_030043A4\n" " .word gUnknown_Debug_030043A8\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" "._505:\n" " ldr r0, ._510\n" " mov r1, #0x0\n" @@ -3377,7 +3377,7 @@ void debug_sub_80108B8() "._511:\n" " .align 2, 0\n" "._510:\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word 0x160bb\n" "\n" ); @@ -3458,7 +3458,7 @@ void debug_sub_8010AAC() " .align 2, 0\n" "._520:\n" " .word gBaseStats\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_030043A4\n" " .word gUnknown_Debug_03004360\n" "._517:\n" @@ -3607,7 +3607,7 @@ void debug_sub_8010B80() "._535:\n" " .align 2, 0\n" "._534:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_030043A0\n" " .word gUnknown_Debug_030043A4\n" " .word gUnknown_Debug_03004360\n" @@ -3800,8 +3800,8 @@ void debug_sub_8010CAC() " .word gUnknown_Debug_030043A0\n" " .word debug_sub_80108B8+1\n" " .word gPlayerParty\n" - " .word gUnknown_02023A14+0x52\n" - " .word gUnknown_02023A14+0xde\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_2023B02\n" " .word gBattleMoves+0x4\n" "._550:\n" " ldr r1, ._556\n" @@ -4078,7 +4078,7 @@ void debug_sub_8010CAC() "._598:\n" " .align 2, 0\n" "._597:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_030043A4\n" "._593:\n" " ldr r1, ._600\n" @@ -4089,7 +4089,7 @@ void debug_sub_8010CAC() "._601:\n" " .align 2, 0\n" "._600:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" "._594:\n" " ldr r3, ._604\n" " add r2, r3, #0\n" @@ -4110,7 +4110,7 @@ void debug_sub_8010CAC() "._605:\n" " .align 2, 0\n" "._604:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" "._602:\n" " mov r1, #0x8\n" " strh r1, [r2]\n" @@ -4250,11 +4250,11 @@ void debug_sub_8010CAC() "._619:\n" " .align 2, 0\n" "._618:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_030043A0\n" " .word gUnknown_Debug_030043A4\n" " .word gUnknown_Debug_03004360\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" " .word gMain\n" " .word ._620\n" "._620:\n" @@ -4287,7 +4287,7 @@ void debug_sub_8010CAC() "._629:\n" " .align 2, 0\n" "._628:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_030043A4\n" "._624:\n" " ldr r1, ._631\n" @@ -4298,7 +4298,7 @@ void debug_sub_8010CAC() "._632:\n" " .align 2, 0\n" "._631:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" "._625:\n" " ldr r3, ._635\n" " add r2, r3, #0\n" @@ -4319,7 +4319,7 @@ void debug_sub_8010CAC() "._636:\n" " .align 2, 0\n" "._635:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" "._633:\n" " mov r1, #0x0\n" " strh r1, [r2]\n" @@ -4456,11 +4456,11 @@ void debug_sub_8010CAC() "._651:\n" " .align 2, 0\n" "._650:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_030043A0\n" " .word gUnknown_Debug_030043A4\n" " .word gUnknown_Debug_03004360\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" " .word gMain\n" "._648:\n" " mov r4, r8\n" @@ -4492,9 +4492,9 @@ void debug_sub_8010CAC() "._656:\n" " .align 2, 0\n" "._655:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_03004360\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" "._657:\n" " add r0, r5, #6\n" " add r0, r1, r0\n" @@ -4614,9 +4614,9 @@ void debug_sub_8010CAC() "._669:\n" " .align 2, 0\n" "._668:\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_03004360\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" "._670:\n" " ldrh r0, [r3]\n" " sub r0, r0, r1\n" @@ -4913,9 +4913,9 @@ void debug_sub_8011498() " .word gMain\n" " .word debug_sub_8010CAC+1\n" " .word gUnknown_Debug_030043A8\n" - " .word gUnknown_02023A14+0xde\n" + " .word gUnknown_Debug_2023B02\n" " .word gUnknown_Debug_03004360\n" - " .word UnkDebug0+0x1ac\n" + " .word gUnknown_Debug_821F564\n" "._689:\n" " add r0, r6, #6\n" " add r0, r2, r0\n" @@ -4988,10 +4988,10 @@ void debug_sub_8011498() " .align 2, 0\n" "._692:\n" " .word gMain\n" - " .word gUnknown_02023A14+0xde\n" + " .word gUnknown_Debug_2023B02\n" " .word gUnknown_Debug_030043A8\n" " .word gUnknown_Debug_03004360\n" - " .word UnkDebug0+0x1ac\n" + " .word gUnknown_Debug_821F564\n" "._694:\n" " ldrh r0, [r4]\n" " sub r0, r0, r1\n" @@ -5156,10 +5156,10 @@ void debug_sub_801174C() " .word gUnknown_020297ED\n" " .word gSaveBlock2\n" " .word str_821F631\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gBattleTypeFlags\n" - " .word UnkDebug0+0x1e0\n" - " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_Debug_821F598\n" + " .word gUnknown_02023A14_50\n" " .word gBattleTerrain\n" " .word gTrainerBattleOpponent\n" " .word gPlayerPartyCount\n" @@ -5272,8 +5272,8 @@ void debug_sub_801174C() " .align 2, 0\n" "._719:\n" " .word gEnemyParty\n" - " .word gUnknown_02023A14+0x52\n" - " .word gUnknown_02023A14+0x56\n" + " .word gUnknown_Debug_2023A76\n" + " .word gUnknown_Debug_2023A7A\n" "._717:\n" " mov r2, #0x0\n" " ldsh r0, [r0, r2]\n" @@ -5316,7 +5316,7 @@ void debug_sub_801174C() " .align 2, 0\n" "._726:\n" " .word gEnemyParty\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" "._723:\n" " cmp r0, #0x2\n" " beq ._728 @cond_branch\n" @@ -5429,10 +5429,10 @@ void debug_sub_801174C() " .align 2, 0\n" "._741:\n" " .word gPlayerParty\n" - " .word gUnknown_02023A14+0x98\n" + " .word gUnknown_Debug_2023ABC\n" " .word gPlayerPartyCount\n" - " .word gUnknown_02023A14+0x9c\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023AC0\n" + " .word gUnknown_Debug_2023A76\n" "._739:\n" " mov r1, #0x0\n" " ldsh r0, [r0, r1]\n" @@ -5574,14 +5574,14 @@ void debug_sub_801174C() " .align 2, 0\n" "._750:\n" " .word gPlayerParty\n" - " .word gUnknown_02023A14+0x98\n" + " .word gUnknown_Debug_2023ABC\n" " .word Str_821F649\n" - " .word gUnknown_02023A14+0x50\n" - " .word gUnknown_02023A14+0xde\n" + " .word gUnknown_02023A14_50\n" + " .word gUnknown_Debug_2023B02\n" " .word gEnemyParty\n" " .word gBattleMoves+0x4\n" - " .word gUnknown_02023A14+0x10e\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023B32\n" + " .word gUnknown_Debug_2023A76\n" "._748:\n" " cmp r0, #0x7\n" " bne ._752 @cond_branch\n" @@ -5592,7 +5592,7 @@ void debug_sub_801174C() "._755:\n" " .align 2, 0\n" "._754:\n" - " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_02023A14_50\n" "._752:\n" " cmp r0, #0x6\n" " bne ._756 @cond_branch\n" @@ -5614,8 +5614,8 @@ void debug_sub_801174C() "._760:\n" " .align 2, 0\n" "._759:\n" - " .word gUnknown_02023A14+0x50\n" - " .word +0x2000000\n" + " .word gUnknown_02023A14_50\n" + " .word gSharedMem\n" " .word 0x160a3\n" "._757:\n" " ldr r0, ._762\n" @@ -5625,7 +5625,7 @@ void debug_sub_801174C() "._763:\n" " .align 2, 0\n" "._762:\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word 0x160a3\n" "._756:\n" " cmp r0, #0x5\n" @@ -5642,7 +5642,7 @@ void debug_sub_801174C() "._767:\n" " .align 2, 0\n" "._766:\n" - " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_02023A14_50\n" "._764:\n" " mov r0, #0x1\n" " and r0, r0, r1\n" @@ -5772,11 +5772,11 @@ void debug_sub_801174C() "._773:\n" " .align 2, 0\n" "._772:\n" - " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_02023A14_50\n" " .word gMain\n" " .word debug_sub_80108B8+1\n" " .word unref_sub_800D684+1\n" - " .word UnkDebug0+0x1f4\n" + " .word gUnknown_Debug_821F5AC\n" "\n" ); } @@ -5834,7 +5834,7 @@ void debug_sub_8011D40() " .align 2, 0\n" "._774:\n" " .word 0x40000d4\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word 0x6004000\n" " .word 0x80000800\n" " .word gBattle_BG0_X\n" @@ -6121,9 +6121,9 @@ void debug_sub_8011EA0() " .align 2, 0\n" "._823:\n" " .word gBattleTextBuff1\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" " .word gUnknown_Debug_03004370\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_03004360\n" " .word gSpeciesNames\n" "._817:\n" @@ -6147,7 +6147,7 @@ void debug_sub_8011EA0() " .align 2, 0\n" "._826:\n" " .word gBattleTextBuff1\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_03004360\n" "._814:\n" " mov r0, #0x0\n" @@ -6226,9 +6226,9 @@ void debug_sub_8011EA0() "._830:\n" " .word gUnknown_Debug_03004370\n" " .word gBattleTextBuff1\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" " .word gUnknown_Debug_03004360\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" "._828:\n" " ldr r1, ._833\n" " mov r0, sl\n" @@ -6257,10 +6257,10 @@ void debug_sub_8011EA0() "._834:\n" " .align 2, 0\n" "._833:\n" - " .word UnkDebug0+0x26c\n" + " .word Str_821F624\n" " .word gUnknown_Debug_03004370\n" " .word gBattleTextBuff1\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" "._816:\n" " mov r0, #0x0\n" " mov r1, #0x4\n" @@ -6308,8 +6308,8 @@ void debug_sub_8011EA0() "._839:\n" " .word gUnknown_Debug_03004370\n" " .word gBattleTextBuff1\n" - " .word UnkDebug0+0x6c\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_821F424\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_03004360\n" "._836:\n" " cmp r0, #0x2\n" @@ -6373,7 +6373,7 @@ void debug_sub_8011EA0() "._849:\n" " .word gBattleTextBuff1\n" " .word gUnknown_Debug_03004370\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" "._815:\n" " ldr r6, ._851\n" " ldr r3, ._851 + 4\n" @@ -6422,10 +6422,10 @@ void debug_sub_8011EA0() " .align 2, 0\n" "._851:\n" " .word gBattleTextBuff1\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_03004360\n" " .word gUnknown_Debug_03004370\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" "\n" ); } @@ -6572,12 +6572,12 @@ void debug_sub_8012294() " .word gUnknown_Debug_030043A4\n" " .word gUnknown_Debug_03004370\n" " .word gBattleTextBuff1\n" - " .word UnkDebug0+0x1ac\n" + " .word gUnknown_Debug_821F564\n" " .word gUnknown_Debug_030043A8\n" - " .word UnkDebug0+0x1ae\n" - " .word UnkDebug0+0x1b0\n" + " .word gUnknown_Debug_821F566\n" + " .word gUnknown_Debug_821F568\n" " .word gUnknown_Debug_03004360\n" - " .word gUnknown_02023A14+0xde\n" + " .word gUnknown_Debug_2023B02\n" " .word gMoveNames\n" "\n" ); @@ -6700,9 +6700,9 @@ void debug_sub_80123D8() "._858:\n" " .word gUnknown_Debug_03004370\n" " .word gBattleTextBuff1\n" - " .word UnkDebug0+0x1d4\n" + " .word gUnknown_Debug_821F58C\n" " .word gUnknown_Debug_03004360\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gBaseStats\n" " .word gAbilityNames\n" "._856:\n" @@ -6745,7 +6745,7 @@ void debug_sub_80123D8() " .word gBattleTextBuff1\n" " .word gAbilityNames\n" " .word gUnknown_Debug_03004370\n" - " .word UnkDebug0+0x1d4\n" + " .word gUnknown_Debug_821F58C\n" "\n" ); } @@ -6792,9 +6792,9 @@ void debug_sub_8012540() " .align 2, 0\n" "._862:\n" " .word gBattleTextBuff1\n" - " .word gUnknown_02023A14+0x52\n" + " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_03004370\n" - " .word UnkDebug0+0x6c\n" + " .word gUnknown_Debug_821F424\n" "\n" ); } @@ -6839,8 +6839,8 @@ void debug_sub_80125A0() "._865:\n" " .align 2, 0\n" "._864:\n" - " .word +0x2000000\n" - " .word UnkDebug0+0x2c8\n" + " .word gSharedMem\n" + " .word gUnknown_Debug_821F680\n" " .word gUnknown_Debug_030043A0\n" " .word gUnknown_Debug_030043A4\n" " .word gUnknown_Debug_03004360\n" @@ -6879,8 +6879,8 @@ void debug_sub_80125E4() "._867:\n" " .align 2, 0\n" "._866:\n" - " .word +0x2000000\n" - " .word UnkDebug0+0x2c8\n" + " .word gSharedMem\n" + " .word gUnknown_Debug_821F680\n" " .word gUnknown_Debug_030043A0\n" " .word gUnknown_Debug_030043A4\n" " .word gUnknown_Debug_03004360\n" @@ -6910,8 +6910,8 @@ void debug_sub_8012628() "._869:\n" " .align 2, 0\n" "._868:\n" - " .word +0x2000000\n" - " .word UnkDebug0+0x3e0\n" + " .word gSharedMem\n" + " .word gUnknown_Debug_821F798\n" " .word gUnknown_Debug_030043A8\n" " .word gUnknown_Debug_03004360\n" "\n" @@ -6940,8 +6940,8 @@ void debug_sub_8012658() "._871:\n" " .align 2, 0\n" "._870:\n" - " .word +0x2000000\n" - " .word UnkDebug0+0x3e0\n" + " .word gSharedMem\n" + " .word gUnknown_Debug_821F798\n" " .word gUnknown_Debug_030043A8\n" " .word gUnknown_Debug_03004360\n" "\n" @@ -7126,7 +7126,7 @@ void debug_sub_8012688() "._874:\n" " .align 2, 0\n" "._873:\n" - " .word gUnknown_02023A14+0x13e\n" + " .word gUnknown_Debug_2023B62\n" " .word 0x40000d4\n" " .word 0x85006000\n" " .word 0x400004c\n" @@ -7341,8 +7341,8 @@ void debug_sub_8012938() "._880:\n" " .word gUnknown_03004210\n" " .word gBattleTextBuff1\n" - " .word UnkDebug0+0x400\n" - " .word gUnknown_02023A14+0x13e\n" + " .word Str_821F7B8\n" + " .word gUnknown_Debug_2023B62\n" " .word gCurrentMove\n" " .word gSprites\n" " .word gTasks\n" @@ -7444,7 +7444,7 @@ void debug_sub_80129F8() " .word gMonPaletteTable\n" " .word gSprites\n" " .word gTasks\n" - " .word gUnknown_02023A14+0x13e\n" + " .word gUnknown_Debug_2023B62\n" "\n" ); } @@ -7638,7 +7638,7 @@ void debug_sub_8012B70() "._901:\n" " .word gTasks\n" " .word gUnknown_03004210\n" - " .word UnkDebug0+0x422\n" + " .word Str_821F7DA\n" "\n" ); } @@ -7762,7 +7762,7 @@ void debug_sub_8012C08() " .align 2, 0\n" "._907:\n" " .word gTasks\n" - " .word UnkDebug0+0x432\n" + " .word Str_821F7EA\n" " .word gUnknown_03004210\n" " .word BattleText_YesNo\n" "\n" @@ -7833,7 +7833,7 @@ void debug_sub_8012D10() " .align 2, 0\n" "._920:\n" " .word gUnknown_03004210\n" - " .word UnkDebug0+0x405\n" + " .word Str_821F7BD\n" " .word gTasks\n" "._915:\n" " ldr r2, ._924\n" @@ -7988,7 +7988,7 @@ void debug_sub_8012D10() "._953:\n" " .align 2, 0\n" "._952:\n" - " .word gUnknown_02023A14+0x13e\n" + " .word gUnknown_Debug_2023B62\n" " .word gCurrentMove\n" "._939:\n" " mov r0, #0x1\n" @@ -8059,7 +8059,7 @@ void debug_sub_8012D10() "._974:\n" " .align 2, 0\n" "._973:\n" - " .word gUnknown_02023A14+0x13e\n" + " .word gUnknown_Debug_2023B62\n" " .word gCurrentMove\n" "._968:\n" " ldr r1, ._977\n" @@ -8135,7 +8135,7 @@ void debug_sub_8012D10() "._996:\n" " .align 2, 0\n" "._995:\n" - " .word gUnknown_02023A14+0x13e\n" + " .word gUnknown_Debug_2023B62\n" " .word gCurrentMove\n" "._983:\n" " mov r0, #0x1\n" @@ -8218,7 +8218,7 @@ void debug_sub_8012D10() "._1021:\n" " .align 2, 0\n" "._1020:\n" - " .word gUnknown_02023A14+0x13e\n" + " .word gUnknown_Debug_2023B62\n" " .word gCurrentMove\n" "._1018:\n" " strb r3, [r2]\n" @@ -8372,7 +8372,7 @@ void debug_sub_8012D10() " .align 2, 0\n" "._1050:\n" " .word gTasks\n" - " .word gUnknown_02023A14+0x13e\n" + " .word gUnknown_Debug_2023B62\n" " .word 0x19b\n" "._1047:\n" " mov r0, #0x2\n" @@ -8458,7 +8458,7 @@ void debug_sub_8012D10() " .align 2, 0\n" "._1065:\n" " .word gTasks\n" - " .word gUnknown_02023A14+0x13e\n" + " .word gUnknown_Debug_2023B62\n" " .word 0x19b\n" "._1062:\n" " mov r0, #0x2\n" @@ -8912,7 +8912,7 @@ void debug_sub_80138CC() " .align 2, 0\n" "._1167:\n" " .word gActiveBank\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word 0x160fd\n" " .word ._1169\n" "._1169:\n" @@ -9095,7 +9095,7 @@ void debug_sub_80139E4() "._1199:\n" " .align 2, 0\n" "._1198:\n" - " .word gUnknown_02023A14+0x50\n" + " .word gUnknown_02023A14_50\n" " .word gActiveBank\n" " .word gNoOfAllBanks\n" " .word gBattleMainFunc\n" @@ -9471,7 +9471,7 @@ void sub_8010874() " .word gStatuses3\n" " .word gUnknown_02024C70\n" " .word gUnknown_02024C5C\n" - " .word +0x2017100\n" + " .word gSharedMem+0x17100\n" " .word gSideTimers\n" " .word gSideAffecting\n" " .word gBankAttacker\n" @@ -9481,7 +9481,7 @@ void sub_8010874() " .word gHitMarker\n" " .word gBattleTypeFlags\n" " .word gSaveBlock2\n" - " .word +0x2000000\n" + " .word gSharedMem\n" " .word 0x16084\n" " .word gMultiHitCounter\n" " .word gBattleOutcome\n" diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 3415d9337..9fe1f6cb0 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -1090,7 +1090,7 @@ static const u8 sTerrainToType[] = TYPE_NORMAL, // plain }; -const u8 sBallCatchBonuses[] = +static const u8 sBallCatchBonuses[] = { 20, 15, 10, 15 // Ultra, Great, Poke, Safari }; @@ -5103,7 +5103,7 @@ static void atk15_seteffectwithchance(void) ._1045:\n\ .word gBattleMoves\n\ .word gCurrentMove\n\ - .word gUnknown_02023A14+0x50\n\ + .word gUnknown_02023A14_50\n\ .word gBattleCommunication\n\ .word gBattleMoveFlags\n\ ._1043:\n\ diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index ffc9281e4..87a66c2c7 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -381,7 +381,7 @@ void BattleAI_SetupAIData() "._17:\n" " .align 2, 0\n" "._16:\n" - " .word +0x2016800\n" + " .word gSharedMem+0x16800\n" " .word gActiveBank\n" " .word gBitTable\n" " .word +0x2016c00\n" @@ -410,7 +410,7 @@ void BattleAI_SetupAIData() "._20:\n" " .word gBankTarget\n" " .word gBattleTypeFlags\n" - " .word +0x2016800\n" + " .word gSharedMem+0x16800\n" "._18:\n" " mov r2, #0x80\n" " lsl r2, r2, #0x3\n" @@ -425,7 +425,7 @@ void BattleAI_SetupAIData() "._25:\n" " .align 2, 0\n" "._24:\n" - " .word +0x2016800\n" + " .word gSharedMem+0x16800\n" "._22:\n" " mov r0, #0x10\n" " and r0, r0, r1\n" @@ -438,7 +438,7 @@ void BattleAI_SetupAIData() "._29:\n" " .align 2, 0\n" "._28:\n" - " .word +0x2016800\n" + " .word gSharedMem+0x16800\n" "._26:\n" " mov r0, #0x90\n" " lsl r0, r0, #0x4\n" @@ -460,7 +460,7 @@ void BattleAI_SetupAIData() " .align 2, 0\n" "._33:\n" " .word gTrainerBattleOpponent\n" - " .word +0x2016800\n" + " .word gSharedMem+0x16800\n" "._31:\n" " ldr r3, ._36\n" " ldr r2, ._36 + 4\n" @@ -489,10 +489,10 @@ void BattleAI_SetupAIData() "._37:\n" " .align 2, 0\n" "._36:\n" - " .word +0x2016800\n" + " .word gSharedMem+0x16800\n" " .word gTrainers\n" - " .word gUnknown_02023A14+0x50\n" - " .word gUnknown_02023A14+0x4c\n" + " .word gUnknown_02023A14_50\n" + " .word gUnknown_02023A14_4C\n" "\n" ); } diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index cc69c0120..d2045b6c4 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -1232,7 +1232,7 @@ void OpponentHandleTrainerThrow(void) ._481:\n\ .align 2, 0\n\ ._480:\n\ - .word gUnknown_02023A14+0x50\n\ + .word gUnknown_02023A14_50\n\ .word +0x2000000\n\ .word 0x160a3\n\ ._478:\n\ @@ -1718,8 +1718,8 @@ void OpponentHandlecmd20(void) .align 2, 0\n\ ._549:\n\ .word gActiveBank\n\ - .word gUnknown_02023A64\n\ - .word gUnknown_02023A14+0x50\n\ + .word gBattleBufferA+4\n\ + .word gUnknown_02023A14_50\n\ .word gBattleMoves\n\ .word +0x2000000\n\ .word 0x1609e\n\ @@ -1781,7 +1781,7 @@ void OpponentHandlecmd20(void) .align 2, 0\n\ ._559:\n\ .word gBattleTypeFlags\n\ - .word gUnknown_02023A14+0x50\n\ + .word gUnknown_02023A14_50\n\ ._556:\n\ bl Random\n\ add r1, r5, #0\n\ @@ -2048,7 +2048,7 @@ void OpponentHandlecmd20(void) ldr r6, _0803545C @ =gActiveBank\n\ ldrb r0, [r6]\n\ lsls r0, 9\n\ - ldr r1, _08035460 @ =gUnknown_02023A64\n\ + ldr r1, _08035460 @ =gBattleBufferA+4\n\ adds r5, r0, r1\n\ ldr r0, _08035464 @ =gBattleTypeFlags\n\ ldrh r1, [r0]\n\ @@ -2070,7 +2070,7 @@ void OpponentHandlecmd20(void) b _0803546C\n\ .align 2, 0\n\ _0803545C: .4byte gActiveBank\n\ -_08035460: .4byte gUnknown_02023A64\n\ +_08035460: .4byte gBattleBufferA+4\n\ _08035464: .4byte gBattleTypeFlags\n\ _08035468:\n\ movs r0, 0x1\n\ diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index cbca4a586..8875d5148 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -674,7 +674,7 @@ void sub_802C68C(void) .align 2, 0\n\ ._131:\n\ .word gActiveBank\n\ - .word gUnknown_02023A64\n\ + .word gBattleBufferA+4\n\ .word gMain\n\ .word gMoveSelectionCursor\n\ ._128:\n\ @@ -1328,7 +1328,7 @@ void sub_802C68C(void) .word gPlayerParty\n\ .word gMoveNames\n\ .word gDisplayedStringBattle\n\ - .word sBallCatchBonuses+0x4\n\ + .word gString_TurnJP\n\ .word gAnimMoveTurn\n\ .word gSprites\n\ .word gOamMatrixAllocBitmap\n\ diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index 4fce958fa..9dd1d7b53 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -275,9 +275,9 @@ void debug_sub_81257E0(void) ._63:\n\ .align 2, 0\n\ ._62:\n\ - .word gUnknown_083F8410+0xa\n\ + .word gUnknown_Debug_4245CC+2\n\ .word gLinkPlayers\n\ - .word gUnknown_083F8410+0x5c\n\ + .word gUnknown_Debug_8424620\n\ .word gLinkPlayerMapObjects\n\ .word gSaveBlock1+0x30b8"); } diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c index 817382911..620e0690a 100644 --- a/src/battle/battle_util.c +++ b/src/battle/battle_util.c @@ -3255,7 +3255,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) ._1079:\n\ .align 2, 0\n\ ._1078:\n\ - .word gUnknown_02023A14+0x50\n\ + .word gUnknown_02023A14_50\n\ .word gBattleMoveFlags\n\ .word gBattleMons\n\ .word gBankAttacker\n\ @@ -3465,7 +3465,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) ._1112:\n\ .align 2, 0\n\ ._1111:\n\ - .word gUnknown_02023A14+0x50\n\ + .word gUnknown_02023A14_50\n\ .word gBattleMoveFlags\n\ .word gBattleMons\n\ .word gBankAttacker\n\ @@ -3660,7 +3660,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) ._1143:\n\ .align 2, 0\n\ ._1142:\n\ - .word gUnknown_02023A14+0x50\n\ + .word gUnknown_02023A14_50\n\ .word gBattleMoveFlags\n\ .word gBattleMons\n\ .word gBankAttacker\n\ @@ -3855,7 +3855,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) ._1174:\n\ .align 2, 0\n\ ._1173:\n\ - .word gUnknown_02023A14+0x50\n\ + .word gUnknown_02023A14_50\n\ .word gBattleMoveFlags\n\ .word gBattleMons\n\ .word gBankAttacker\n\ @@ -4118,7 +4118,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) ._1218:\n\ .align 2, 0\n\ ._1217:\n\ - .word gUnknown_02023A14+0x50\n\ + .word gUnknown_02023A14_50\n\ .word gBattleMoveFlags\n\ .word gBattleMons\n\ .word gBankAttacker\n\ @@ -7489,7 +7489,7 @@ u8 IsMonDisobedient(void) .word gBattleTypeFlags\n\ .word gBankAttacker\n\ .word gBattleMons\n\ - .word gUnknown_02023A14+0x50\n\ + .word gUnknown_02023A14_50\n\ ._1783:\n\ ldr r0, ._1794\n\ bl FlagGet\n\ -- cgit v1.2.3 From dbcf1ce9cb124e303e6bed3fecede7a72b8000f2 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 24 Jan 2018 00:58:38 -0600 Subject: integrate some debug differences --- src/battle/battle_2.c | 2179 +++++-------------------------------------------- 1 file changed, 186 insertions(+), 1993 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 6808ad61c..64b64ecea 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -14,6 +14,7 @@ #include "main.h" #include "m4a.h" #include "name_string_util.h" +#include "overworld.h" #include "palette.h" #include "party_menu.h" #include "pokeball.h" @@ -64,6 +65,9 @@ struct UnknownStruct12 u8 filler4[0x54]; }; +void debug_sub_80139E4(void); +extern u8 gUnknown_02023A14_50; + extern const u16 gUnknown_08D004E0[]; extern const struct MonCoords gCastformFrontSpriteCoords[]; @@ -203,231 +207,6 @@ void sub_800E7C4(void) } } -#if DEBUG -__attribute__((naked)) -void InitBattle(void) -{ - asm( - " push {r4, r5, lr}\n" - " add sp, sp, #0xfffffffc\n" - " mov r0, #0x0\n" - " bl SetHBlankCallback\n" - " mov r0, #0x0\n" - " bl SetVBlankCallback\n" - " mov r4, #0x0\n" - " str r4, [sp]\n" - " mov r1, #0xc0\n" - " lsl r1, r1, #0x13\n" - " ldr r2, ._10\n" - " mov r0, sp\n" - " bl CpuSet\n" - " ldr r0, ._10 + 4\n" - " strh r4, [r0]\n" - " sub r0, r0, #0xc\n" - " mov r2, #0xf0\n" - " strh r2, [r0]\n" - " add r0, r0, #0x4\n" - " ldr r3, ._10 + 8\n" - " add r1, r3, #0\n" - " strh r1, [r0]\n" - " add r0, r0, #0x4\n" - " strh r4, [r0]\n" - " add r0, r0, #0x2\n" - " strh r4, [r0]\n" - " ldr r0, ._10 + 12\n" - " strh r2, [r0]\n" - " ldr r0, ._10 + 16\n" - " strh r1, [r0]\n" - " bl ScanlineEffect_Clear\n" - " ldr r0, ._10 + 20\n" - " mov r3, #0xf0\n" - " mov r5, #0xf0\n" - " lsl r5, r5, #0x3\n" - " add r2, r0, r5\n" - " mov r1, #0x4f\n" - "._5:\n" - " strh r3, [r0]\n" - " strh r3, [r2]\n" - " add r2, r2, #0x2\n" - " add r0, r0, #0x2\n" - " sub r1, r1, #0x1\n" - " cmp r1, #0\n" - " bge ._5 @cond_branch\n" - " mov r1, #0x50\n" - " ldr r4, ._10 + 24\n" - " ldr r0, ._10 + 20\n" - " ldr r3, ._10 + 28\n" - " mov r5, #0x82\n" - " lsl r5, r5, #0x4\n" - " add r2, r0, r5\n" - " add r0, r0, #0xa0\n" - "._6:\n" - " strh r3, [r0]\n" - " strh r3, [r2]\n" - " add r2, r2, #0x2\n" - " add r0, r0, #0x2\n" - " add r1, r1, #0x1\n" - " cmp r1, #0x9f\n" - " ble ._6 @cond_branch\n" - " ldr r0, [r4]\n" - " ldr r1, [r4, #0x4]\n" - " ldr r2, [r4, #0x8]\n" - " bl ScanlineEffect_SetParams\n" - " ldr r4, ._10 + 32\n" - " add r0, r4, #0\n" - " bl Text_LoadWindowTemplate\n" - " bl ResetPaletteFade\n" - " ldr r0, ._10 + 36\n" - " mov r1, #0x0\n" - " strh r1, [r0]\n" - " ldr r0, ._10 + 40\n" - " strh r1, [r0]\n" - " ldr r0, ._10 + 44\n" - " strh r1, [r0]\n" - " ldr r0, ._10 + 48\n" - " strh r1, [r0]\n" - " ldr r0, ._10 + 52\n" - " strh r1, [r0]\n" - " ldr r0, ._10 + 56\n" - " strh r1, [r0]\n" - " ldr r0, ._10 + 60\n" - " strh r1, [r0]\n" - " ldr r0, ._10 + 64\n" - " strh r1, [r0]\n" - " ldr r0, ._10 + 68\n" - " ldrb r1, [r0]\n" - " mov r0, #0x8\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._7 @cond_branch\n" - " bl BattleSetup_GetTerrain\n" - " ldr r1, ._10 + 72\n" - " strb r0, [r1]\n" - "._7:\n" - " ldr r0, ._10 + 76\n" - " add r1, r4, #0\n" - " bl Text_InitWindowWithTemplate\n" - " ldr r0, ._10 + 80\n" - " ldr r1, ._10 + 84\n" - " bl Text_InitWindowWithTemplate\n" - " ldr r0, ._10 + 88\n" - " ldr r1, ._10 + 92\n" - " bl Text_InitWindowWithTemplate\n" - " bl sub_800D6D4\n" - " bl sub_800DAB8\n" - " bl ResetSpriteData\n" - " bl ResetTasks\n" - " bl sub_800E23C\n" - " bl FreeAllSpritePalettes\n" - " ldr r1, ._10 + 96\n" - " mov r0, #0x4\n" - " strb r0, [r1]\n" - " ldr r0, ._10 + 100\n" - " bl SetVBlankCallback\n" - " bl setup_poochyena_battle\n" - " ldr r0, ._10 + 104\n" - " ldrh r1, [r0]\n" - " mov r0, #0x40\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._8 @cond_branch\n" - " ldr r0, ._10 + 108\n" - " bl SetMainCallback2\n" - " b ._9\n" - "._11:\n" - " .align 2, 0\n" - "._10:\n" - " .word 0x5006000\n" - " .word 0x400004c\n" - " .word 0x5051\n" - " .word gBattle_WIN0H\n" - " .word gBattle_WIN0V\n" - " .word gScanlineEffectRegBuffers\n" - " .word gUnknown_081F9674\n" - " .word 0xff10\n" - " .word gWindowTemplate_81E6C58\n" - " .word gBattle_BG0_X\n" - " .word gBattle_BG0_Y\n" - " .word gBattle_BG1_X\n" - " .word gBattle_BG1_Y\n" - " .word gBattle_BG2_X\n" - " .word gBattle_BG2_Y\n" - " .word gBattle_BG3_X\n" - " .word gBattle_BG3_Y\n" - " .word gUnknown_02023A14_50\n" - " .word gBattleTerrain\n" - " .word gUnknown_03004210\n" - " .word gUnknown_030041D0\n" - " .word gWindowTemplate_81E71D0\n" - " .word gUnknown_03004250\n" - " .word gWindowTemplate_81E71EC\n" - " .word gReservedSpritePaletteCount\n" - " .word sub_800FCFC+1\n" - " .word gBattleTypeFlags\n" - " .word sub_800F298+1\n" - "._8:\n" - " ldr r0, ._15\n" - " bl SetMainCallback2\n" - "._9:\n" - " ldr r0, ._15 + 4\n" - " ldrh r1, [r0]\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._13 @cond_branch\n" - " ldr r0, ._15 + 8\n" - " ldrb r1, [r0]\n" - " mov r0, #0x8\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._13 @cond_branch\n" - " ldr r0, ._15 + 12\n" - " ldr r1, ._15 + 16\n" - " ldrh r1, [r1]\n" - " bl CreateNPCTrainerParty\n" - " bl SetWildMonHeldItem\n" - "._13:\n" - " ldr r0, ._15 + 20\n" - " ldr r1, ._15 + 24\n" - " add r0, r0, r1\n" - " ldrb r1, [r0]\n" - " mov r2, #0x2\n" - " orr r1, r1, r2\n" - " strb r1, [r0]\n" - " ldr r4, ._15 + 28\n" - " mov r3, #0xfa\n" - " lsl r3, r3, #0x1\n" - " add r5, r4, r3\n" - "._14:\n" - " add r0, r4, #0\n" - " mov r1, #0x3\n" - " bl AdjustFriendship\n" - " add r4, r4, #0x64\n" - " cmp r4, r5\n" - " ble ._14 @cond_branch\n" - " mov r1, #0x0\n" - " ldr r0, ._15 + 32\n" - " strb r1, [r0]\n" - " add sp, sp, #0x4\n" - " pop {r4, r5}\n" - " pop {r0}\n" - " bx r0\n" - "._16:\n" - " .align 2, 0\n" - "._15:\n" - " .word sub_800EC9C+1\n" - " .word gBattleTypeFlags\n" - " .word gUnknown_02023A14_50\n" - " .word gEnemyParty\n" - " .word gTrainerBattleOpponent\n" - " .word gMain\n" - " .word 0x43d\n" - " .word gPlayerParty\n" - " .word gBattleCommunication\n" - "\n" - ); -} -#else void InitBattle(void) { s32 i; @@ -469,7 +248,14 @@ void InitBattle(void) gBattle_BG2_Y = 0; gBattle_BG3_X = 0; gBattle_BG3_Y = 0; + +#if DEBUG + if (!(gUnknown_02023A14_50 & 8)) + gBattleTerrain = BattleSetup_GetTerrain(); +#else gBattleTerrain = BattleSetup_GetTerrain(); +#endif + Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); Text_InitWindowWithTemplate(&gUnknown_030041D0, &gWindowTemplate_81E71D0); Text_InitWindowWithTemplate(&gUnknown_03004250, &gWindowTemplate_81E71EC); @@ -486,7 +272,11 @@ void InitBattle(void) SetMainCallback2(sub_800F298); else SetMainCallback2(sub_800EC9C); - if (!(gBattleTypeFlags & BATTLE_TYPE_LINK)) + if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) +#if DEBUG + && !(gUnknown_02023A14_50 & 8) +#endif + ) { CreateNPCTrainerParty(gEnemyParty, gTrainerBattleOpponent); SetWildMonHeldItem(); @@ -496,7 +286,6 @@ void InitBattle(void) AdjustFriendship(&gPlayerParty[i], 3); gBattleCommunication[0] = 0; } -#endif void sub_800E9EC(void) { @@ -605,480 +394,11 @@ void shedinja_something(struct Pokemon *pkmn) } } -#if DEBUG -__attribute__((naked)) -void sub_800EC9C() -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " bl RunTasks\n" - " bl AnimateSprites\n" - " bl BuildOamBuffer\n" - " bl GetMultiplayerId\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " ldr r0, ._55\n" - " ldr r1, ._55 + 4\n" - " add r0, r0, r1\n" - " strb r4, [r0]\n" - " mov r0, #0x1\n" - " add r5, r4, #0\n" - " eor r5, r5, r0\n" - " ldr r0, ._55 + 8\n" - " ldrb r0, [r0]\n" - " cmp r0, #0x9\n" - " bls ._53 @cond_branch\n" - " b ._140\n" - "._53:\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._55 + 12\n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov pc, r0\n" - "._56:\n" - " .align 2, 0\n" - "._55:\n" - " .word gSharedMem\n" - " .word 0x160cb\n" - " .word gBattleCommunication\n" - " .word ._57\n" - "._57:\n" - " .word ._58\n" - " .word ._59\n" - " .word ._60\n" - " .word ._61\n" - " .word ._62\n" - " .word ._63\n" - " .word ._64\n" - " .word ._65\n" - " .word ._66\n" - " .word ._67\n" - "._58:\n" - " ldr r2, ._76\n" - " ldrh r1, [r2]\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._68 @cond_branch\n" - " ldr r0, ._76 + 4\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " bne ._69 @cond_branch\n" - " b ._140\n" - "._69:\n" - " bl sub_8007ECC\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._71 @cond_branch\n" - " b ._140\n" - "._71:\n" - " ldr r1, ._76 + 8\n" - " mov r0, #0x1\n" - " strb r0, [r1]\n" - " strb r0, [r1, #0x1]\n" - " bl sub_800E9EC\n" - " bl sub_800EAAC\n" - " ldr r0, ._76 + 12\n" - " ldrb r1, [r0]\n" - " mov r0, #0x8\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._73 @cond_branch\n" - " mov r3, #0x0\n" - " ldr r1, ._76 + 16\n" - " ldr r0, ._76 + 20\n" - "._74:\n" - " strh r3, [r0, #0x18]\n" - " str r1, [r0, #0x14]\n" - " add r0, r0, #0x1c\n" - " add r3, r3, #0x1\n" - " cmp r3, #0x1\n" - " ble ._74 @cond_branch\n" - "._73:\n" - " bl bitmask_all_link_players_but_self\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r1, ._76 + 8\n" - " mov r2, #0x20\n" - " bl SendBlock\n" - " ldr r1, ._76 + 24\n" - " mov r0, #0x1\n" - " strb r0, [r1]\n" - " b ._140\n" - "._77:\n" - " .align 2, 0\n" - "._76:\n" - " .word gBattleTypeFlags\n" - " .word gReceivedRemoteLinkPlayers\n" - " .word gSharedMem\n" - " .word gUnknown_02023A14_50\n" - " .word 0x2211\n" - " .word gLinkPlayers\n" - " .word gBattleCommunication\n" - "._68:\n" - " mov r0, #0x4\n" - " orr r0, r0, r1\n" - " strh r0, [r2]\n" - " ldr r1, ._79\n" - " mov r0, #0x8\n" - " strb r0, [r1]\n" - " bl sub_800EB08\n" - " b ._140\n" - "._80:\n" - " .align 2, 0\n" - "._79:\n" - " .word gBattleCommunication\n" - "._59:\n" - " bl GetBlockReceivedStatus\n" - " mov r1, #0x3\n" - " and r1, r1, r0\n" - " cmp r1, #0x3\n" - " beq ._81 @cond_branch\n" - " b ._140\n" - "._81:\n" - " bl ResetBlockReceivedFlags\n" - " mov r3, #0x0\n" - " ldr r0, ._86\n" - " ldrh r1, [r0]\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " cmp r1, r0\n" - " bne ._83 @cond_branch\n" - " cmp r4, #0\n" - " bne ._84 @cond_branch\n" - " ldr r0, ._86 + 4\n" - " ldrh r1, [r0]\n" - " mov r2, #0xc\n" - " b ._85\n" - "._87:\n" - " .align 2, 0\n" - "._86:\n" - " .word gBlockRecvBuffer\n" - " .word gBattleTypeFlags\n" - "._84:\n" - " ldr r0, ._92\n" - " ldrh r1, [r0]\n" - " mov r2, #0x8\n" - "._85:\n" - " orr r1, r1, r2\n" - " strh r1, [r0]\n" - " add r3, r3, #0x1\n" - "._83:\n" - " lsl r7, r5, #0x8\n" - " cmp r3, #0\n" - " bne ._94 @cond_branch\n" - " ldr r0, ._92 + 4\n" - " mov r1, #0x80\n" - " lsl r1, r1, #0x1\n" - " add r2, r0, r1\n" - " ldrh r1, [r0]\n" - " add r6, r0, #0\n" - " ldrh r2, [r2]\n" - " cmp r1, r2\n" - " bne ._89 @cond_branch\n" - " cmp r4, #0\n" - " bne ._90 @cond_branch\n" - " ldr r0, ._92\n" - " ldrh r1, [r0]\n" - " mov r2, #0xc\n" - " b ._91\n" - "._93:\n" - " .align 2, 0\n" - "._92:\n" - " .word gBattleTypeFlags\n" - " .word gBlockRecvBuffer\n" - "._90:\n" - " ldr r0, ._96\n" - " ldrh r1, [r0]\n" - " mov r2, #0x8\n" - "._91:\n" - " orr r1, r1, r2\n" - " strh r1, [r0]\n" - " add r3, r3, #0x1\n" - "._89:\n" - " lsl r7, r5, #0x8\n" - " cmp r3, #0\n" - " bne ._94 @cond_branch\n" - " ldrh r1, [r6]\n" - " ldr r0, ._96 + 4\n" - " ldr r2, ._96\n" - " b ._95\n" - "._97:\n" - " .align 2, 0\n" - "._96:\n" - " .word gBattleTypeFlags\n" - " .word 0x101\n" - "._100:\n" - " add r3, r3, #0x1\n" - " cmp r3, #0x1\n" - " bgt ._98 @cond_branch\n" - " lsl r0, r3, #0x8\n" - " add r0, r0, r6\n" - " ldrh r1, [r0]\n" - " ldr r0, ._103\n" - "._95:\n" - " cmp r1, r0\n" - " bls ._100 @cond_branch\n" - " cmp r3, r4\n" - " beq ._100 @cond_branch\n" - "._98:\n" - " cmp r3, #0x2\n" - " bne ._101 @cond_branch\n" - " ldrh r0, [r2]\n" - " mov r1, #0xc\n" - " b ._102\n" - "._104:\n" - " .align 2, 0\n" - "._103:\n" - " .word 0x101\n" - "._101:\n" - " ldrh r0, [r2]\n" - " mov r1, #0x8\n" - "._102:\n" - " orr r0, r0, r1\n" - " strh r0, [r2]\n" - "._94:\n" - " bl sub_800EB08\n" - " ldr r0, ._106\n" - " mov r1, #0x0\n" - " bl CreateTask\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r1, ._106 + 4\n" - " lsl r2, r0, #0x2\n" - " add r2, r2, r0\n" - " lsl r2, r2, #0x3\n" - " add r2, r2, r1\n" - " mov r1, #0x0\n" - " mov r0, #0x87\n" - " lsl r0, r0, #0x1\n" - " strh r0, [r2, #0xa]\n" - " mov r0, #0x5a\n" - " strh r0, [r2, #0xc]\n" - " strh r1, [r2, #0x12]\n" - " ldr r0, ._106 + 8\n" - " ldrb r1, [r0, #0x2]\n" - " ldrb r0, [r0, #0x3]\n" - " lsl r0, r0, #0x8\n" - " orr r1, r1, r0\n" - " strh r1, [r2, #0xe]\n" - " ldr r0, ._106 + 12\n" - " add r0, r0, #0x2\n" - " add r0, r7, r0\n" - " ldrh r0, [r0]\n" - " strh r0, [r2, #0x10]\n" - " b ._129\n" - "._107:\n" - " .align 2, 0\n" - "._106:\n" - " .word sub_800DE30+1\n" - " .word gTasks\n" - " .word gSharedMem\n" - " .word gBlockRecvBuffer\n" - "._60:\n" - " bl sub_8007ECC\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._108 @cond_branch\n" - " b ._140\n" - "._108:\n" - " bl bitmask_all_link_players_but_self\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r1, ._111\n" - " mov r2, #0xc8\n" - " bl SendBlock\n" - " b ._129\n" - "._112:\n" - " .align 2, 0\n" - "._111:\n" - " .word gPlayerParty\n" - "._61:\n" - " bl GetBlockReceivedStatus\n" - " mov r1, #0x3\n" - " and r1, r1, r0\n" - " cmp r1, #0x3\n" - " beq ._113 @cond_branch\n" - " b ._140\n" - "._113:\n" - " bl ResetBlockReceivedFlags\n" - " ldr r0, ._116\n" - " lsl r1, r5, #0x8\n" - " ldr r2, ._116 + 4\n" - " add r1, r1, r2\n" - " mov r2, #0xc8\n" - " bl memcpy\n" - " b ._129\n" - "._117:\n" - " .align 2, 0\n" - "._116:\n" - " .word gEnemyParty\n" - " .word gBlockRecvBuffer\n" - "._62:\n" - " bl sub_8007ECC\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._118 @cond_branch\n" - " b ._140\n" - "._118:\n" - " bl bitmask_all_link_players_but_self\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r1, ._121\n" - " mov r2, #0xc8\n" - " bl SendBlock\n" - " b ._129\n" - "._122:\n" - " .align 2, 0\n" - "._121:\n" - " .word gPlayerParty+0xc8\n" - "._63:\n" - " bl GetBlockReceivedStatus\n" - " mov r1, #0x3\n" - " and r1, r1, r0\n" - " cmp r1, #0x3\n" - " beq ._123 @cond_branch\n" - " b ._140\n" - "._123:\n" - " bl ResetBlockReceivedFlags\n" - " ldr r0, ._126\n" - " lsl r1, r5, #0x8\n" - " ldr r2, ._126 + 4\n" - " add r1, r1, r2\n" - " mov r2, #0xc8\n" - " bl memcpy\n" - " b ._129\n" - "._127:\n" - " .align 2, 0\n" - "._126:\n" - " .word gEnemyParty+0xc8\n" - " .word gBlockRecvBuffer\n" - "._64:\n" - " bl sub_8007ECC\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " beq ._140 @cond_branch\n" - " bl bitmask_all_link_players_but_self\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r1, ._130\n" - " mov r2, #0xc8\n" - " bl SendBlock\n" - " b ._129\n" - "._131:\n" - " .align 2, 0\n" - "._130:\n" - " .word gPlayerParty+0x190\n" - "._65:\n" - " bl GetBlockReceivedStatus\n" - " mov r1, #0x3\n" - " and r1, r1, r0\n" - " cmp r1, #0x3\n" - " bne ._140 @cond_branch\n" - " bl ResetBlockReceivedFlags\n" - " ldr r4, ._134\n" - " lsl r1, r5, #0x8\n" - " ldr r0, ._134 + 4\n" - " add r1, r1, r0\n" - " add r0, r4, #0\n" - " mov r2, #0xc8\n" - " bl memcpy\n" - " ldr r1, ._134 + 8\n" - " add r0, r4, r1\n" - " bl shedinja_something\n" - " ldr r1, ._134 + 12\n" - " add r0, r4, r1\n" - " bl shedinja_something\n" - " add r0, r4, #0\n" - " sub r0, r0, #0xc8\n" - " bl shedinja_something\n" - " add r0, r4, #0\n" - " sub r0, r0, #0x64\n" - " bl shedinja_something\n" - " add r0, r4, #0\n" - " bl shedinja_something\n" - " add r0, r4, #0\n" - " add r0, r0, #0x64\n" - " bl shedinja_something\n" - "._129:\n" - " ldr r1, ._134 + 16\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " b ._140\n" - "._135:\n" - " .align 2, 0\n" - "._134:\n" - " .word gEnemyParty+0x190\n" - " .word gBlockRecvBuffer\n" - " .word 0xfffffe70\n" - " .word 0xfffffed4\n" - " .word gBattleCommunication\n" - "._66:\n" - " bl sub_800B950\n" - " ldr r0, ._137\n" - " ldrb r1, [r0]\n" - " add r1, r1, #0x1\n" - " mov r2, #0x0\n" - " strb r1, [r0]\n" - " strb r2, [r0, #0x1]\n" - " strb r2, [r0, #0x2]\n" - " b ._140\n" - "._138:\n" - " .align 2, 0\n" - "._137:\n" - " .word gBattleCommunication\n" - "._67:\n" - " ldr r0, ._141\n" - " add r1, r0, #1\n" - " bl battle_load_something\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " beq ._140 @cond_branch\n" - " ldr r2, ._141 + 4\n" - " ldr r1, ._141 + 8\n" - " ldr r0, [r1]\n" - " str r0, [r2]\n" - " ldr r0, ._141 + 12\n" - " str r0, [r1]\n" - " ldr r0, ._141 + 16\n" - " bl SetMainCallback2\n" - " ldr r3, ._141 + 20\n" - " ldrh r2, [r3]\n" - " mov r0, #0x2\n" - " and r0, r0, r2\n" - " cmp r0, #0\n" - " beq ._140 @cond_branch\n" - " ldr r1, ._141 + 24\n" - " mov r4, #0x80\n" - " lsl r4, r4, #0x4\n" - " add r0, r4, #0\n" - " strh r0, [r1]\n" - " mov r0, #0x20\n" - " orr r0, r0, r2\n" - " strh r0, [r3]\n" - "._140:\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._142:\n" - " .align 2, 0\n" - "._141:\n" - " .word gUnknown_02024D1F\n" - " .word gPreBattleCallback1\n" - " .word gMain\n" - " .word debug_sub_80139E4+1\n" - " .word BattleMainCB2+1\n" - " .word gBattleTypeFlags\n" - " .word gTrainerBattleOpponent\n" - "\n" - ); -} -#else -void sub_800EC9C(void) +void sub_800EC9C(void) { u8 playerId; u8 enemyId; + s32 id; RunTasks(); AnimateSprites(); @@ -1098,6 +418,16 @@ void sub_800EC9C(void) gBattleStruct->unk1 = 1; sub_800E9EC(); sub_800EAAC(); +#if DEBUG + if (gUnknown_02023A14_50 & 8) + { + for (id = 0; id < 2; id++) // Why < 2 here? + { + gLinkPlayers[id].lp_field_18 = id; + gLinkPlayers[id].linkType = 0x2211; + } + } +#endif SendBlock(bitmask_all_link_players_but_self(), gBattleStruct, 32); gBattleCommunication[0] = 1; } @@ -1112,7 +442,6 @@ void sub_800EC9C(void) case 1: if ((GetBlockReceivedStatus() & 3) == 3) { - s32 id; u8 taskId; ResetBlockReceivedFlags(); @@ -1220,7 +549,11 @@ void sub_800EC9C(void) if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) { gPreBattleCallback1 = gMain.callback1; +#if DEBUG + gMain.callback1 = debug_sub_80139E4; +#else gMain.callback1 = sub_8010824; +#endif SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { @@ -1231,7 +564,6 @@ void sub_800EC9C(void) break; } } -#endif void sub_800F02C(void) { @@ -1258,241 +590,12 @@ void sub_800F02C(void) memcpy(gSharedMem, gUnknown_02023A00, 0x60); } -#if DEBUG -__attribute__((naked)) -void sub_800F104() -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r9\n" - " mov r6, r8\n" - " push {r6, r7}\n" - " bl GetMultiplayerId\n" - " lsl r0, r0, #0x18\n" - " lsr r6, r0, #0x18\n" - " ldr r0, ._151\n" - " ldr r2, ._151 + 4\n" - " add r1, r0, r2\n" - " strb r6, [r1]\n" - " ldr r1, ._151 + 8\n" - " add r1, r1, r0\n" - " mov r9, r1\n" - " sub r2, r2, #0x9\n" - " add r2, r2, r0\n" - " mov r8, r2\n" - " bl RunTasks\n" - " bl AnimateSprites\n" - " bl BuildOamBuffer\n" - " ldr r2, ._151 + 12\n" - " ldrb r0, [r2]\n" - " cmp r0, #0x1\n" - " beq ._147 @cond_branch\n" - " cmp r0, #0x1\n" - " bgt ._148 @cond_branch\n" - " cmp r0, #0\n" - " beq ._149 @cond_branch\n" - " b ._183\n" - "._152:\n" - " .align 2, 0\n" - "._151:\n" - " .word gSharedMem\n" - " .word 0x160cb\n" - " .word 0x160c4\n" - " .word gBattleCommunication\n" - "._148:\n" - " cmp r0, #0x2\n" - " bne ._153 @cond_branch\n" - " b ._154\n" - "._153:\n" - " cmp r0, #0x3\n" - " bne ._155 @cond_branch\n" - " b ._156\n" - "._155:\n" - " b ._183\n" - "._149:\n" - " ldr r0, ._165\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " bne ._158 @cond_branch\n" - " b ._183\n" - "._158:\n" - " ldr r0, ._165 + 4\n" - " ldrb r1, [r0]\n" - " mov r0, #0x8\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._160 @cond_branch\n" - " mov r4, #0x0\n" - " ldr r1, ._165 + 8\n" - " ldr r0, ._165 + 12\n" - "._161:\n" - " strh r4, [r0, #0x18]\n" - " str r1, [r0, #0x14]\n" - " add r0, r0, #0x1c\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x3\n" - " ble ._161 @cond_branch\n" - "._160:\n" - " bl sub_8007ECC\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._162 @cond_branch\n" - " b ._183\n" - "._162:\n" - " bl sub_800F02C\n" - " bl bitmask_all_link_players_but_self\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r1, ._165 + 16\n" - " mov r2, #0x60\n" - " bl SendBlock\n" - " ldr r1, ._165 + 20\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " b ._183\n" - "._166:\n" - " .align 2, 0\n" - "._165:\n" - " .word gReceivedRemoteLinkPlayers\n" - " .word gUnknown_02023A14_50\n" - " .word 0x2211\n" - " .word gLinkPlayers\n" - " .word gSharedMem\n" - " .word gBattleCommunication\n" - "._147:\n" - " bl GetBlockReceivedStatus\n" - " mov r1, #0xf\n" - " and r1, r1, r0\n" - " cmp r1, #0xf\n" - " bne ._183 @cond_branch\n" - " bl ResetBlockReceivedFlags\n" - " mov r4, #0x0\n" - " lsl r0, r6, #0x3\n" - " sub r0, r0, r6\n" - " lsl r5, r0, #0x2\n" - " mov r7, #0x0\n" - "._175:\n" - " cmp r4, r6\n" - " beq ._174 @cond_branch\n" - " ldr r2, ._172\n" - " add r0, r7, r2\n" - " ldrh r1, [r0, #0x18]\n" - " mov r3, #0x1\n" - " add r0, r3, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._169 @cond_branch\n" - " add r0, r5, r2\n" - " ldrh r1, [r0, #0x18]\n" - " add r0, r3, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._170 @cond_branch\n" - " b ._174\n" - "._173:\n" - " .align 2, 0\n" - "._172:\n" - " .word gLinkPlayers\n" - "._169:\n" - " add r0, r5, r2\n" - " ldrh r1, [r0, #0x18]\n" - " add r0, r3, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._174 @cond_branch\n" - "._170:\n" - " lsl r1, r4, #0x8\n" - " ldr r0, ._177\n" - " add r1, r1, r0\n" - " ldr r0, ._177 + 4\n" - " mov r2, #0x60\n" - " bl memcpy\n" - "._174:\n" - " add r7, r7, #0x1c\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x3\n" - " ble ._175 @cond_branch\n" - " ldr r1, ._177 + 8\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " ldr r1, ._177 + 12\n" - " ldr r0, [r1, #0x8]\n" - " mov r2, r9\n" - " str r0, [r2]\n" - " ldr r0, ._177 + 16\n" - " ldrh r0, [r0]\n" - " mov r2, r8\n" - " strh r0, [r2]\n" - " ldr r0, ._177 + 20\n" - " str r0, [r1, #0x8]\n" - " mov r0, #0x5\n" - " mov r1, #0x0\n" - " bl OpenPartyMenu\n" - " b ._183\n" - "._178:\n" - " .align 2, 0\n" - "._177:\n" - " .word gBlockRecvBuffer\n" - " .word gUnknown_02023A00\n" - " .word gBattleCommunication\n" - " .word gMain\n" - " .word gBattleTypeFlags\n" - " .word sub_800F104+1\n" - "._154:\n" - " ldr r0, ._181\n" - " ldrb r1, [r0, #0x7]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._183 @cond_branch\n" - " mov r0, #0x3\n" - " strb r0, [r2]\n" - " bl sub_800832C\n" - " b ._183\n" - "._182:\n" - " .align 2, 0\n" - "._181:\n" - " .word gPaletteFade\n" - "._156:\n" - " ldr r0, ._184\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " bne ._183 @cond_branch\n" - " ldr r1, ._184 + 4\n" - " mov r2, r8\n" - " ldrh r0, [r2]\n" - " strh r0, [r1]\n" - " ldr r1, ._184 + 8\n" - " mov r2, r9\n" - " ldr r0, [r2]\n" - " str r0, [r1, #0x8]\n" - " ldr r0, ._184 + 12\n" - " bl SetMainCallback2\n" - "._183:\n" - " pop {r3, r4}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._185:\n" - " .align 2, 0\n" - "._184:\n" - " .word gReceivedRemoteLinkPlayers\n" - " .word gBattleTypeFlags\n" - " .word gMain\n" - " .word InitBattle+1\n" - "\n" - ); -} -#else void sub_800F104(void) { u8 playerId; MainCallback *pSavedCallback; u16 *pSavedBattleTypeFlags; + s32 i; playerId = GetMultiplayerId(); ewram160CB = playerId; @@ -1506,820 +609,66 @@ void sub_800F104(void) switch (gBattleCommunication[0]) { case 0: - if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) - { - sub_800F02C(); - SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x60); - gBattleCommunication[0]++; - } - break; - case 1: - if ((GetBlockReceivedStatus() & 0xF) == 0xF) - { - s32 i; - - ResetBlockReceivedFlags(); - for (i = 0; i < 4; i++) - { - if (i != playerId) - { - if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) - || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) - memcpy(gUnknown_02023A00, gBlockRecvBuffer[i], 0x60); - } - } - gBattleCommunication[0]++; - *pSavedCallback = gMain.savedCallback; - *pSavedBattleTypeFlags = gBattleTypeFlags; - gMain.savedCallback = sub_800F104; - OpenPartyMenu(PARTY_MENU_TYPE_LINK_MULTI_BATTLE, 0); - } - break; - case 2: - if (!gPaletteFade.active) - { - gBattleCommunication[0] = 3; - sub_800832C(); - } - break; - case 3: - if (gReceivedRemoteLinkPlayers == 0) - { - gBattleTypeFlags = *pSavedBattleTypeFlags; - gMain.savedCallback = *pSavedCallback; - SetMainCallback2(InitBattle); - } - break; - } -} -#endif - -#if DEBUG -__attribute__((naked)) -void sub_800F298() -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r8\n" - " push {r7}\n" - " bl GetMultiplayerId\n" - " lsl r0, r0, #0x18\n" - " lsr r6, r0, #0x18\n" - " ldr r0, ._188\n" - " ldr r1, ._188 + 4\n" - " add r0, r0, r1\n" - " strb r6, [r0]\n" - " bl RunTasks\n" - " bl AnimateSprites\n" - " bl BuildOamBuffer\n" - " ldr r0, ._188 + 8\n" - " ldrb r0, [r0]\n" - " cmp r0, #0x7\n" - " bls ._186 @cond_branch\n" - " b ._352\n" - "._186:\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._188 + 12\n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov pc, r0\n" - "._189:\n" - " .align 2, 0\n" - "._188:\n" - " .word gSharedMem\n" - " .word 0x160cb\n" - " .word gBattleCommunication\n" - " .word ._190\n" - "._190:\n" - " .word ._191\n" - " .word ._192\n" - " .word ._193\n" - " .word ._194\n" - " .word ._195\n" - " .word ._196\n" - " .word ._197\n" - " .word ._198\n" - "._191:\n" - " ldr r0, ._206\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " bne ._199 @cond_branch\n" - " b ._352\n" - "._199:\n" - " ldr r0, ._206 + 4\n" - " ldrb r1, [r0]\n" - " mov r0, #0x8\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._201 @cond_branch\n" - " mov r4, #0x0\n" - " ldr r1, ._206 + 8\n" - " ldr r0, ._206 + 12\n" - "._202:\n" - " strh r4, [r0, #0x18]\n" - " str r1, [r0, #0x14]\n" - " add r0, r0, #0x1c\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x3\n" - " ble ._202 @cond_branch\n" - "._201:\n" - " bl sub_8007ECC\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._203 @cond_branch\n" - " b ._352\n" - "._203:\n" - " ldr r4, ._206 + 16\n" - " mov r0, #0x1\n" - " strb r0, [r4]\n" - " strb r0, [r4, #0x1]\n" - " bl sub_800E9EC\n" - " bl sub_800EAAC\n" - " bl bitmask_all_link_players_but_self\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " add r1, r4, #0\n" - " mov r2, #0x20\n" - " bl SendBlock\n" - " b ._300\n" - "._207:\n" - " .align 2, 0\n" - "._206:\n" - " .word gReceivedRemoteLinkPlayers\n" - " .word gUnknown_02023A14_50\n" - " .word 0x2211\n" - " .word gLinkPlayers\n" - " .word gSharedMem\n" - "._192:\n" - " bl GetBlockReceivedStatus\n" - " mov r1, #0xf\n" - " and r1, r1, r0\n" - " cmp r1, #0xf\n" - " beq ._208 @cond_branch\n" - " b ._352\n" - "._208:\n" - " bl ResetBlockReceivedFlags\n" - " mov r4, #0x0\n" - " ldr r0, ._213\n" - " ldrh r1, [r0]\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " cmp r1, r0\n" - " bne ._210 @cond_branch\n" - " cmp r6, #0\n" - " bne ._211 @cond_branch\n" - " ldr r0, ._213 + 4\n" - " ldrh r1, [r0]\n" - " mov r2, #0xc\n" - " b ._212\n" - "._214:\n" - " .align 2, 0\n" - "._213:\n" - " .word gBlockRecvBuffer\n" - " .word gBattleTypeFlags\n" - "._211:\n" - " ldr r0, ._221\n" - " ldrh r1, [r0]\n" - " mov r2, #0x8\n" - "._212:\n" - " orr r1, r1, r2\n" - " strh r1, [r0]\n" - " add r4, r4, #0x1\n" - "._210:\n" - " cmp r4, #0\n" - " bne ._223 @cond_branch\n" - " mov r2, #0x0\n" - " ldr r1, ._221 + 4\n" - " add r5, r1, #0\n" - " mov r3, #0x80\n" - " lsl r3, r3, #0x1\n" - "._217:\n" - " add r1, r1, r3\n" - " add r2, r2, #0x1\n" - " cmp r2, #0x3\n" - " bgt ._216 @cond_branch\n" - " ldrh r0, [r5]\n" - " ldrh r7, [r1]\n" - " cmp r0, r7\n" - " beq ._217 @cond_branch\n" - "._216:\n" - " cmp r2, #0x4\n" - " bne ._218 @cond_branch\n" - " cmp r6, #0\n" - " bne ._219 @cond_branch\n" - " ldr r0, ._221\n" - " ldrh r1, [r0]\n" - " mov r2, #0xc\n" - " b ._220\n" - "._222:\n" - " .align 2, 0\n" - "._221:\n" - " .word gBattleTypeFlags\n" - " .word gBlockRecvBuffer\n" - "._219:\n" - " ldr r0, ._233\n" - " ldrh r1, [r0]\n" - " mov r2, #0x8\n" - "._220:\n" - " orr r1, r1, r2\n" - " strh r1, [r0]\n" - " add r4, r4, #0x1\n" - "._218:\n" - " cmp r4, #0\n" - " bne ._223 @cond_branch\n" - " ldr r0, ._233 + 4\n" - " ldrh r2, [r0]\n" - " ldr r1, ._233 + 8\n" - " add r3, r0, #0\n" - " ldr r5, ._233\n" - " cmp r2, r1\n" - " beq ._224 @cond_branch\n" - "._230:\n" - " lsl r0, r4, #0x8\n" - " add r0, r0, r3\n" - " ldrh r0, [r0]\n" - " ldr r1, ._233 + 8\n" - " cmp r0, r1\n" - " bls ._225 @cond_branch\n" - " cmp r4, r6\n" - " bne ._227 @cond_branch\n" - "._225:\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x3\n" - " bgt ._227 @cond_branch\n" - " lsl r0, r4, #0x8\n" - " add r0, r0, r3\n" - " ldrh r0, [r0]\n" - " cmp r0, r1\n" - " bne ._230 @cond_branch\n" - "._224:\n" - " cmp r4, r6\n" - " beq ._230 @cond_branch\n" - " cmp r4, r6\n" - " bge ._230 @cond_branch\n" - "._227:\n" - " cmp r4, #0x4\n" - " bne ._231 @cond_branch\n" - " ldrh r0, [r5]\n" - " mov r1, #0xc\n" - " b ._232\n" - "._234:\n" - " .align 2, 0\n" - "._233:\n" - " .word gBattleTypeFlags\n" - " .word gBlockRecvBuffer\n" - " .word 0x101\n" - "._231:\n" - " ldrh r0, [r5]\n" - " mov r1, #0x8\n" - "._232:\n" - " orr r0, r0, r1\n" - " strh r0, [r5]\n" - "._223:\n" - " bl sub_800EB08\n" - " ldr r0, ._239\n" - " ldr r1, ._239 + 4\n" - " mov r2, #0x96\n" - " lsl r2, r2, #0x1\n" - " bl memcpy\n" - " ldr r0, ._239 + 8\n" - " mov r1, #0x0\n" - " bl CreateTask\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r2, ._239 + 12\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " lsl r1, r1, #0x3\n" - " add r1, r1, r2\n" - " mov r2, #0x0\n" - " mov r0, #0x87\n" - " lsl r0, r0, #0x1\n" - " strh r0, [r1, #0xa]\n" - " mov r0, #0x5a\n" - " strh r0, [r1, #0xc]\n" - " strh r2, [r1, #0x12]\n" - " strh r2, [r1, #0xe]\n" - " strh r2, [r1, #0x10]\n" - " add r2, r1, #0\n" - " ldr r0, ._239 + 16\n" - " add r3, r0, #2\n" - " ldr r6, ._239 + 20\n" - " mov r5, #0x3f\n" - " mov r7, #0x80\n" - " lsl r7, r7, #0x1\n" - " mov r4, #0x3\n" - "._247:\n" - " ldrh r0, [r6, #0x18]\n" - " cmp r0, #0x1\n" - " beq ._235 @cond_branch\n" - " cmp r0, #0x1\n" - " bgt ._236 @cond_branch\n" - " cmp r0, #0\n" - " beq ._237 @cond_branch\n" - " b ._246\n" - "._240:\n" - " .align 2, 0\n" - "._239:\n" - " .word +0x201d000\n" - " .word gPlayerParty\n" - " .word sub_800DE30+1\n" - " .word gTasks\n" - " .word gBlockRecvBuffer\n" - " .word gLinkPlayers\n" - "._236:\n" - " cmp r0, #0x2\n" - " beq ._241 @cond_branch\n" - " cmp r0, #0x3\n" - " beq ._242 @cond_branch\n" - " b ._246\n" - "._237:\n" - " ldrh r0, [r3]\n" - " add r1, r5, #0\n" - " and r1, r1, r0\n" - " b ._244\n" - "._235:\n" - " ldrh r0, [r3]\n" - " add r1, r5, #0\n" - " and r1, r1, r0\n" - " b ._245\n" - "._241:\n" - " ldrh r0, [r3]\n" - " add r1, r5, #0\n" - " and r1, r1, r0\n" - " lsl r1, r1, #0x6\n" - "._244:\n" - " ldrh r0, [r2, #0xe]\n" - " orr r1, r1, r0\n" - " strh r1, [r2, #0xe]\n" - " b ._246\n" - "._242:\n" - " ldrh r0, [r3]\n" - " add r1, r5, #0\n" - " and r1, r1, r0\n" - " lsl r1, r1, #0x6\n" - "._245:\n" - " ldrh r0, [r2, #0x10]\n" - " orr r1, r1, r0\n" - " strh r1, [r2, #0x10]\n" - "._246:\n" - " add r3, r3, r7\n" - " add r6, r6, #0x1c\n" - " sub r4, r4, #0x1\n" - " cmp r4, #0\n" - " bge ._247 @cond_branch\n" - " bl ZeroPlayerPartyMons\n" - " bl ZeroEnemyPartyMons\n" - " ldr r1, ._251\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - "._193:\n" - " bl sub_8007ECC\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._248 @cond_branch\n" - " b ._352\n" - "._248:\n" - " bl bitmask_all_link_players_but_self\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r1, ._251 + 4\n" - " mov r2, #0xc8\n" - " bl SendBlock\n" - " b ._300\n" - "._252:\n" - " .align 2, 0\n" - "._251:\n" - " .word gBattleCommunication\n" - " .word +0x201d000\n" - "._194:\n" - " bl GetBlockReceivedStatus\n" - " mov r1, #0xf\n" - " and r1, r1, r0\n" - " cmp r1, #0xf\n" - " beq ._253 @cond_branch\n" - " b ._352\n" - "._253:\n" - " bl ResetBlockReceivedFlags\n" - " mov r4, #0x0\n" - " lsl r0, r6, #0x3\n" - " sub r0, r0, r6\n" - " lsl r0, r0, #0x2\n" - " mov r8, r0\n" - " ldr r5, ._260\n" - " mov r7, #0x0\n" - "._294:\n" - " cmp r4, r6\n" - " bne ._255 @cond_branch\n" - " ldr r0, ._260 + 4\n" - " add r0, r7, r0\n" - " ldrh r0, [r0, #0x18]\n" - " cmp r0, #0x2\n" - " bgt ._256 @cond_branch\n" - " cmp r0, #0x1\n" - " bge ._257 @cond_branch\n" - " cmp r0, #0\n" - " beq ._258 @cond_branch\n" - " b ._291\n" - "._261:\n" - " .align 2, 0\n" - "._260:\n" - " .word gBlockRecvBuffer\n" - " .word gLinkPlayers\n" - "._256:\n" - " cmp r0, #0x3\n" - " bne ._291 @cond_branch\n" - "._258:\n" - " ldr r0, ._264\n" - " b ._283\n" - "._265:\n" - " .align 2, 0\n" - "._264:\n" - " .word gPlayerParty\n" - "._257:\n" - " ldr r0, ._267\n" - " b ._283\n" - "._268:\n" - " .align 2, 0\n" - "._267:\n" - " .word gPlayerParty+0x12c\n" - "._255:\n" - " ldr r2, ._272\n" - " add r0, r7, r2\n" - " ldrh r1, [r0, #0x18]\n" - " mov r3, #0x1\n" - " add r0, r3, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._269 @cond_branch\n" - " mov r1, r8\n" - " add r0, r1, r2\n" - " ldrh r1, [r0, #0x18]\n" - " add r0, r3, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._270 @cond_branch\n" - " b ._274\n" - "._273:\n" - " .align 2, 0\n" - "._272:\n" - " .word gLinkPlayers\n" - "._269:\n" - " mov r1, r8\n" - " add r0, r1, r2\n" - " ldrh r1, [r0, #0x18]\n" - " add r0, r3, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._274 @cond_branch\n" - "._270:\n" - " add r0, r7, r2\n" - " ldrh r2, [r0, #0x18]\n" - " cmp r2, #0x2\n" - " bgt ._275 @cond_branch\n" - " cmp r2, #0x1\n" - " bge ._276 @cond_branch\n" - " cmp r2, #0\n" - " beq ._277 @cond_branch\n" - " b ._291\n" - "._275:\n" - " cmp r2, #0x3\n" - " bne ._291 @cond_branch\n" - "._277:\n" - " ldr r0, ._281\n" - " b ._283\n" - "._282:\n" - " .align 2, 0\n" - "._281:\n" - " .word gPlayerParty\n" - "._276:\n" - " ldr r0, ._284\n" - " b ._283\n" - "._285:\n" - " .align 2, 0\n" - "._284:\n" - " .word gPlayerParty+0x12c\n" - "._274:\n" - " add r0, r7, r2\n" - " ldrh r2, [r0, #0x18]\n" - " cmp r2, #0x2\n" - " bgt ._286 @cond_branch\n" - " cmp r2, #0x1\n" - " bge ._287 @cond_branch\n" - " cmp r2, #0\n" - " beq ._288 @cond_branch\n" - " b ._291\n" - "._286:\n" - " cmp r2, #0x3\n" - " bne ._291 @cond_branch\n" - "._288:\n" - " ldr r0, ._292\n" - "._283:\n" - " add r1, r5, #0\n" - " mov r2, #0xc8\n" - " bl memcpy\n" - " b ._291\n" - "._293:\n" - " .align 2, 0\n" - "._292:\n" - " .word gEnemyParty\n" - "._287:\n" - " ldr r0, ._296\n" - " add r1, r5, #0\n" - " mov r2, #0xc8\n" - " bl memcpy\n" - "._291:\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " add r5, r5, r0\n" - " add r7, r7, #0x1c\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x3\n" - " ble ._294 @cond_branch\n" - " b ._300\n" - "._297:\n" - " .align 2, 0\n" - "._296:\n" - " .word gEnemyParty+0x12c\n" - "._195:\n" - " bl sub_8007ECC\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._298 @cond_branch\n" - " b ._352\n" - "._298:\n" - " bl bitmask_all_link_players_but_self\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r1, ._301\n" - " mov r2, #0x64\n" - " bl SendBlock\n" - " b ._300\n" - "._302:\n" - " .align 2, 0\n" - "._301:\n" - " .word +0x201d0c8\n" - "._196:\n" - " bl GetBlockReceivedStatus\n" - " mov r1, #0xf\n" - " and r1, r1, r0\n" - " cmp r1, #0xf\n" - " beq ._303 @cond_branch\n" - " b ._352\n" - "._303:\n" - " bl ResetBlockReceivedFlags\n" - " mov r4, #0x0\n" - " lsl r0, r6, #0x3\n" - " sub r0, r0, r6\n" - " lsl r0, r0, #0x2\n" - " mov r8, r0\n" - " ldr r5, ._310\n" - " mov r7, #0x0\n" - "._344:\n" - " cmp r4, r6\n" - " bne ._305 @cond_branch\n" - " ldr r0, ._310 + 4\n" - " add r0, r7, r0\n" - " ldrh r0, [r0, #0x18]\n" - " cmp r0, #0x2\n" - " bgt ._306 @cond_branch\n" - " cmp r0, #0x1\n" - " bge ._307 @cond_branch\n" - " cmp r0, #0\n" - " beq ._308 @cond_branch\n" - " b ._341\n" - "._311:\n" - " .align 2, 0\n" - "._310:\n" - " .word gBlockRecvBuffer\n" - " .word gLinkPlayers\n" - "._306:\n" - " cmp r0, #0x3\n" - " bne ._341 @cond_branch\n" - "._308:\n" - " ldr r0, ._314\n" - " b ._333\n" - "._315:\n" - " .align 2, 0\n" - "._314:\n" - " .word gPlayerParty+0xc8\n" - "._307:\n" - " ldr r0, ._317\n" - " b ._333\n" - "._318:\n" - " .align 2, 0\n" - "._317:\n" - " .word gPlayerParty+0x1f4\n" - "._305:\n" - " ldr r2, ._322\n" - " add r0, r7, r2\n" - " ldrh r1, [r0, #0x18]\n" - " mov r3, #0x1\n" - " add r0, r3, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._319 @cond_branch\n" - " mov r1, r8\n" - " add r0, r1, r2\n" - " ldrh r1, [r0, #0x18]\n" - " add r0, r3, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._320 @cond_branch\n" - " b ._324\n" - "._323:\n" - " .align 2, 0\n" - "._322:\n" - " .word gLinkPlayers\n" - "._319:\n" - " mov r1, r8\n" - " add r0, r1, r2\n" - " ldrh r1, [r0, #0x18]\n" - " add r0, r3, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._324 @cond_branch\n" - "._320:\n" - " add r0, r7, r2\n" - " ldrh r2, [r0, #0x18]\n" - " cmp r2, #0x2\n" - " bgt ._325 @cond_branch\n" - " cmp r2, #0x1\n" - " bge ._326 @cond_branch\n" - " cmp r2, #0\n" - " beq ._327 @cond_branch\n" - " b ._341\n" - "._325:\n" - " cmp r2, #0x3\n" - " bne ._341 @cond_branch\n" - "._327:\n" - " ldr r0, ._331\n" - " b ._333\n" - "._332:\n" - " .align 2, 0\n" - "._331:\n" - " .word gPlayerParty+0xc8\n" - "._326:\n" - " ldr r0, ._334\n" - " b ._333\n" - "._335:\n" - " .align 2, 0\n" - "._334:\n" - " .word gPlayerParty+0x1f4\n" - "._324:\n" - " add r0, r7, r2\n" - " ldrh r2, [r0, #0x18]\n" - " cmp r2, #0x2\n" - " bgt ._336 @cond_branch\n" - " cmp r2, #0x1\n" - " bge ._337 @cond_branch\n" - " cmp r2, #0\n" - " beq ._338 @cond_branch\n" - " b ._341\n" - "._336:\n" - " cmp r2, #0x3\n" - " bne ._341 @cond_branch\n" - "._338:\n" - " ldr r0, ._342\n" - "._333:\n" - " add r1, r5, #0\n" - " mov r2, #0x64\n" - " bl memcpy\n" - " b ._341\n" - "._343:\n" - " .align 2, 0\n" - "._342:\n" - " .word gEnemyParty+0xc8\n" - "._337:\n" - " ldr r0, ._346\n" - " add r1, r5, #0\n" - " mov r2, #0x64\n" - " bl memcpy\n" - "._341:\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " add r5, r5, r0\n" - " add r7, r7, #0x1c\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x3\n" - " ble ._344 @cond_branch\n" - " ldr r4, ._346 + 4\n" - " add r0, r4, #0\n" - " bl shedinja_something\n" - " add r0, r4, #0\n" - " add r0, r0, #0x64\n" - " bl shedinja_something\n" - " add r0, r4, #0\n" - " add r0, r0, #0xc8\n" - " bl shedinja_something\n" - " mov r1, #0x96\n" - " lsl r1, r1, #0x1\n" - " add r0, r4, r1\n" - " bl shedinja_something\n" - " mov r7, #0xc8\n" - " lsl r7, r7, #0x1\n" - " add r0, r4, r7\n" - " bl shedinja_something\n" - " mov r1, #0xfa\n" - " lsl r1, r1, #0x1\n" - " add r0, r4, r1\n" - " bl shedinja_something\n" - " ldr r4, ._346 + 8\n" - " add r0, r4, #0\n" - " bl shedinja_something\n" - " add r0, r4, #0\n" - " add r0, r0, #0x64\n" - " bl shedinja_something\n" - " add r0, r4, #0\n" - " add r0, r0, #0xc8\n" - " bl shedinja_something\n" - " sub r7, r7, #0x64\n" - " add r0, r4, r7\n" - " bl shedinja_something\n" - " mov r1, #0xc8\n" - " lsl r1, r1, #0x1\n" - " add r0, r4, r1\n" - " bl shedinja_something\n" - " add r7, r7, #0xc8\n" - " add r0, r4, r7\n" - " bl shedinja_something\n" - "._300:\n" - " ldr r1, ._346 + 12\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " b ._352\n" - "._347:\n" - " .align 2, 0\n" - "._346:\n" - " .word gEnemyParty+0x1f4\n" - " .word gPlayerParty\n" - " .word gEnemyParty\n" - " .word gBattleCommunication\n" - "._197:\n" - " bl sub_800B950\n" - " ldr r0, ._349\n" - " ldrb r1, [r0]\n" - " add r1, r1, #0x1\n" - " mov r2, #0x0\n" - " strb r1, [r0]\n" - " strb r2, [r0, #0x1]\n" - " strb r2, [r0, #0x2]\n" - " b ._352\n" - "._350:\n" - " .align 2, 0\n" - "._349:\n" - " .word gBattleCommunication\n" - "._198:\n" - " ldr r0, ._353\n" - " add r1, r0, #1\n" - " bl battle_load_something\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " beq ._352 @cond_branch\n" - " ldr r2, ._353 + 4\n" - " ldr r1, ._353 + 8\n" - " ldr r0, [r1]\n" - " str r0, [r2]\n" - " ldr r0, ._353 + 12\n" - " str r0, [r1]\n" - " ldr r0, ._353 + 16\n" - " bl SetMainCallback2\n" - " ldr r3, ._353 + 20\n" - " ldrh r2, [r3]\n" - " mov r0, #0x2\n" - " and r0, r0, r2\n" - " cmp r0, #0\n" - " beq ._352 @cond_branch\n" - " ldr r1, ._353 + 24\n" - " mov r4, #0x80\n" - " lsl r4, r4, #0x4\n" - " add r0, r4, #0\n" - " strh r0, [r1]\n" - " mov r0, #0x20\n" - " orr r0, r0, r2\n" - " strh r0, [r3]\n" - "._352:\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._354:\n" - " .align 2, 0\n" - "._353:\n" - " .word gUnknown_02024D1F\n" - " .word gPreBattleCallback1\n" - " .word gMain\n" - " .word debug_sub_80139E4+1\n" - " .word BattleMainCB2+1\n" - " .word gBattleTypeFlags\n" - " .word gTrainerBattleOpponent\n" - "\n" - ); + if (gReceivedRemoteLinkPlayers != 0) + { +#if DEBUG + if (gUnknown_02023A14_50 & 8) + { + for (i = 0; i < 4; i++) + { + gLinkPlayers[i].lp_field_18 = i; + gLinkPlayers[i].linkType = 0x2211; + } + } +#endif + if (sub_8007ECC()) + { + sub_800F02C(); + SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x60); + gBattleCommunication[0]++; + } + } + break; + case 1: + if ((GetBlockReceivedStatus() & 0xF) == 0xF) + { + //s32 i; + + ResetBlockReceivedFlags(); + for (i = 0; i < 4; i++) + { + if (i != playerId) + { + if ((!(gLinkPlayers[i].lp_field_18 & 1) && !(gLinkPlayers[playerId].lp_field_18 & 1)) + || ((gLinkPlayers[i].lp_field_18 & 1) && (gLinkPlayers[playerId].lp_field_18 & 1))) + memcpy(gUnknown_02023A00, gBlockRecvBuffer[i], 0x60); + } + } + gBattleCommunication[0]++; + *pSavedCallback = gMain.savedCallback; + *pSavedBattleTypeFlags = gBattleTypeFlags; + gMain.savedCallback = sub_800F104; + OpenPartyMenu(PARTY_MENU_TYPE_LINK_MULTI_BATTLE, 0); + } + break; + case 2: + if (!gPaletteFade.active) + { + gBattleCommunication[0] = 3; + sub_800832C(); + } + break; + case 3: + if (gReceivedRemoteLinkPlayers == 0) + { + gBattleTypeFlags = *pSavedBattleTypeFlags; + gMain.savedCallback = *pSavedCallback; + SetMainCallback2(InitBattle); + } + break; + } } -#else + void sub_800F298(void) { u8 playerId; @@ -2333,14 +682,27 @@ void sub_800F298(void) switch (gBattleCommunication[0]) { case 0: - if (gReceivedRemoteLinkPlayers != 0 && sub_8007ECC()) + if (gReceivedRemoteLinkPlayers != 0) { - gBattleStruct->unk0 = 1; - gBattleStruct->unk1 = 1; - sub_800E9EC(); - sub_800EAAC(); - SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20); - gBattleCommunication[0]++; +#if DEBUG + if (gUnknown_02023A14_50 & 8) + { + for (id = 0; id < 4; id++) + { + gLinkPlayers[id].lp_field_18 = id; + gLinkPlayers[id].linkType = 0x2211; + } + } +#endif + if (sub_8007ECC()) + { + gBattleStruct->unk0 = 1; + gBattleStruct->unk1 = 1; + sub_800E9EC(); + sub_800EAAC(); + SendBlock(bitmask_all_link_players_but_self(), gSharedMem, 0x20); + gBattleCommunication[0]++; + } } break; case 1: @@ -2576,7 +938,12 @@ void sub_800F298(void) if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) { gPreBattleCallback1 = gMain.callback1; + // debug +#if DEBUG + gMain.callback1 = debug_sub_80139E4; +#else gMain.callback1 = sub_8010824; +#endif SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { @@ -2587,128 +954,38 @@ void sub_800F298(void) break; } } -#endif -#if DEBUG -__attribute__((naked)) -void BattleMainCB2(void) -{ - asm( - " push {r4, r5, lr}\n" - " add sp, sp, #0xfffffffc\n" - " bl AnimateSprites\n" - " bl BuildOamBuffer\n" - " ldr r4, ._358\n" - " ldrh r2, [r4, #0x2c]\n" - " mov r1, #0x82\n" - " lsl r1, r1, #0x1\n" - " add r0, r1, #0\n" - " and r0, r0, r2\n" - " cmp r0, r1\n" - " bne ._357 @cond_branch\n" - " ldr r2, ._358 + 4\n" - " ldr r1, ._358 + 8\n" - " mov r0, #0x1\n" - " strb r0, [r1]\n" - " mov r0, #0x1\n" - " strh r0, [r2]\n" - " ldr r0, ._358 + 12\n" - " add r2, r4, r0\n" - " ldrb r1, [r2]\n" - " mov r0, #0x3\n" - " neg r0, r0\n" - " and r0, r0, r1\n" - " strb r0, [r2]\n" - " ldr r1, ._358 + 16\n" - " mov r0, #0x3\n" - " strb r0, [r1, #0x15]\n" - " ldr r0, ._358 + 20\n" - " ldr r0, [r0]\n" - " str r0, [r4]\n" - " bl ZeroEnemyPartyMons\n" - " mov r0, #0x5a\n" - " bl m4aSongNumStop\n" - " ldr r0, ._358 + 24\n" - " ldrh r1, [r0]\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._356 @cond_branch\n" - " ldr r0, ._358 + 28\n" - " bl SetMainCallback2\n" - " b ._357\n" - "._359:\n" - " .align 2, 0\n" - "._358:\n" - " .word gMain\n" - " .word gSpecialVar_Result\n" - " .word gBattleOutcome\n" - " .word 0x43d\n" - " .word gScanlineEffect\n" - " .word gPreBattleCallback1\n" - " .word gBattleTypeFlags\n" - " .word sub_805465C+1\n" - "._356:\n" - " ldr r0, [r4, #0x8]\n" - " bl SetMainCallback2\n" - "._357:\n" - " ldr r5, ._361\n" - " ldrh r1, [r5]\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._360 @cond_branch\n" - " lsr r0, r1, #0x2\n" - " mov r4, #0x1\n" - " and r0, r0, r4\n" - " str r4, [sp]\n" - " mov r1, #0x1\n" - " mov r2, #0x1\n" - " mov r3, #0x1\n" - " bl debug_sub_8008264\n" - " ldrh r0, [r5]\n" - " lsr r0, r0, #0x2\n" - " and r0, r0, r4\n" - " str r4, [sp]\n" - " mov r1, #0x1\n" - " mov r2, #0x15\n" - " mov r3, #0x1\n" - " bl debug_sub_8008264\n" - " ldrh r0, [r5]\n" - " lsr r0, r0, #0x2\n" - " and r0, r0, r4\n" - " str r4, [sp]\n" - " mov r1, #0x1\n" - " mov r2, #0x29\n" - " mov r3, #0x1\n" - " bl debug_sub_8008264\n" - "._360:\n" - " ldr r0, ._361 + 4\n" - " bl Text_UpdateWindowInBattle\n" - " bl UpdatePaletteFade\n" - " bl RunTasks\n" - " add sp, sp, #0x4\n" - " pop {r4, r5}\n" - " pop {r0}\n" - " bx r0\n" - "._362:\n" - " .align 2, 0\n" - "._361:\n" - " .word gBattleTypeFlags\n" - " .word gUnknown_03004210\n" - "\n" - ); -} -#else void BattleMainCB2(void) { AnimateSprites(); BuildOamBuffer(); + +#if DEBUG + if ((gMain.heldKeys & (R_BUTTON | SELECT_BUTTON)) == ((R_BUTTON | SELECT_BUTTON))) + { + gSpecialVar_Result = gBattleOutcome = 1; + gMain.inBattle = FALSE; + gScanlineEffect.state = 3; + gMain.callback1 = gPreBattleCallback1; + ZeroEnemyPartyMons(); + m4aSongNumStop(0x5A); + if (gBattleTypeFlags & 2) + SetMainCallback2(sub_805465C); + else + SetMainCallback2(gMain.savedCallback); + } + if (gBattleTypeFlags & 2) + { + debug_sub_8008264((gBattleTypeFlags >> 2) % 2, 1, 1, 1, 1); + debug_sub_8008264((gBattleTypeFlags >> 2) % 2, 1, 21, 1, 1); + debug_sub_8008264((gBattleTypeFlags >> 2) % 2, 1, 41, 1, 1); + } +#endif + Text_UpdateWindowInBattle(&gUnknown_03004210); UpdatePaletteFade(); RunTasks(); } -#endif void sub_800F828(struct Sprite *sprite) { @@ -3084,24 +1361,19 @@ void c2_081284E0(void) // A LOT of debug code! #if DEBUG -__attribute__((naked)) -void debug_sub_8010800() + +extern u8 gBattleBuffersTransferData[]; + +void debug_sub_8010818(void); +void debug_sub_80108B8(void); +void debug_sub_8011EA0(u8); +void debug_sub_8012294(void); + +void debug_sub_8010800(void) { - asm( - " push {lr}\n" - " bl debug_sub_8010818\n" - " bl debug_sub_80108B8\n" - " ldr r1, ._496\n" - " mov r0, #0x0\n" - " str r0, [r1]\n" - " pop {r0}\n" - " bx r0\n" - "._497:\n" - " .align 2, 0\n" - "._496:\n" - " .word gBattleBuffersTransferData+0x100\n" - "\n" - ); + debug_sub_8010818(); + debug_sub_80108B8(); + *(u32 *)(gBattleBuffersTransferData + 0x100) = 0; } __attribute__((naked)) @@ -5849,133 +4121,54 @@ void debug_sub_8011D40() ); } -__attribute__((naked)) void debug_nullsub_45() { - asm( - " bx lr\n" - "\n" - ); } -__attribute__((naked)) -void debug_sub_8011DD4() +void debug_sub_8011DD4(void) { - asm( - " push {lr}\n" - " ldr r1, ._776\n" - " ldr r2, ._776 + 4\n" - " add r0, r2, #0\n" - " strh r0, [r1]\n" - " add r1, r1, #0x8\n" - " ldr r0, ._776 + 8\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._776 + 12\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._776 + 16\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._776 + 20\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._776 + 24\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._776 + 28\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._776 + 32\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._776 + 36\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " bl LoadOam\n" - " bl ProcessSpriteCopyRequests\n" - " bl TransferPlttBuffer\n" - " bl ScanlineEffect_InitHBlankDmaTransfer\n" - " pop {r0}\n" - " bx r0\n" - "._777:\n" - " .align 2, 0\n" - "._776:\n" - " .word 0x4000008\n" - " .word 0x9803\n" - " .word gBattle_BG0_X\n" - " .word gBattle_BG0_Y\n" - " .word gBattle_BG1_X\n" - " .word gBattle_BG1_Y\n" - " .word gBattle_BG2_X\n" - " .word gBattle_BG2_Y\n" - " .word gBattle_BG3_X\n" - " .word gBattle_BG3_Y\n" - "\n" - ); + REG_BG0CNT = 0x9803; + + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; + + REG_BG1HOFS = gBattle_BG1_X; + REG_BG1VOFS = gBattle_BG1_Y; + + REG_BG2HOFS = gBattle_BG2_X; + REG_BG2VOFS = gBattle_BG2_Y; + + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; + + LoadOam(); + ProcessSpriteCopyRequests(); + TransferPlttBuffer(); + ScanlineEffect_InitHBlankDmaTransfer(); } -__attribute__((naked)) -void debug_sub_8011E5C() +void debug_sub_8011E5C(void) { - asm( - " push {r4, lr}\n" - " mov r4, #0x0\n" - "._778:\n" - " lsl r0, r4, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x1e\n" - " ble ._778 @cond_branch\n" - " pop {r4}\n" - " pop {r0}\n" - " bx r0\n" - "\n" - ); + s32 i; + + for (i = 0; i < 31; i++) + debug_sub_8011EA0(i); } -__attribute__((naked)) -void debug_sub_8011E74() +extern u8 gUnknown_Debug_030043A8; + +void debug_sub_8011E74(void) { - asm( - " push {r4, r5, lr}\n" - " ldr r0, ._780\n" - " ldrb r5, [r0]\n" - " mov r1, #0x0\n" - " strb r1, [r0]\n" - " add r4, r0, #0\n" - "._779:\n" - " bl debug_sub_8012294\n" - " ldrb r0, [r4]\n" - " add r0, r0, #0x1\n" - " strb r0, [r4]\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x3\n" - " bls ._779 @cond_branch\n" - " ldr r0, ._780\n" - " strb r5, [r0]\n" - " pop {r4, r5}\n" - " pop {r0}\n" - " bx r0\n" - "._781:\n" - " .align 2, 0\n" - "._780:\n" - " .word gUnknown_Debug_030043A8\n" - "\n" - ); + u8 r5 = gUnknown_Debug_030043A8; + + for (gUnknown_Debug_030043A8 = 0; gUnknown_Debug_030043A8 < 4; gUnknown_Debug_030043A8++) + debug_sub_8012294(); + + gUnknown_Debug_030043A8 = r5; } __attribute__((naked)) -void debug_sub_8011EA0() +void debug_sub_8011EA0(u8 a) { asm( " push {r4, r5, r6, r7, lr}\n" -- cgit v1.2.3 From 641d2749b67b6c7cad2054f5c52c990f0dad0121 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Wed, 24 Jan 2018 15:32:04 -0600 Subject: decompile debug_sub_8010818 and debug_sub_80108B8 --- src/battle/battle_2.c | 429 ++++++++++++++++---------------------------------- 1 file changed, 137 insertions(+), 292 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 64b64ecea..f9756db29 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1,5 +1,11 @@ #include "global.h" #include "constants/abilities.h" +#include "constants/battle_move_effects.h" +#include "constants/hold_effects.h" +#include "constants/items.h" +#include "constants/moves.h" +#include "constants/songs.h" +#include "constants/species.h" #include "battle.h" #include "battle_ai.h" #include "battle_interface.h" @@ -7,6 +13,7 @@ #include "battle_setup.h" #include "battle_util.h" #include "data2.h" +#include "decompress.h" #include "event_data.h" #include "evolution_scene.h" #include "item.h" @@ -25,9 +32,7 @@ #include "rom3.h" #include "rom_8077ABC.h" #include "rom_8094928.h" -#include "constants/songs.h" #include "sound.h" -#include "constants/species.h" #include "sprite.h" #include "string_util.h" #include "task.h" @@ -37,10 +42,6 @@ #include "tv.h" #include "scanline_effect.h" #include "util.h" -#include "constants/battle_move_effects.h" -#include "constants/items.h" -#include "constants/hold_effects.h" -#include "constants/moves.h" #include "ewram.h" struct UnknownStruct7 @@ -1362,12 +1363,55 @@ void c2_081284E0(void) // A LOT of debug code! #if DEBUG -extern u8 gBattleBuffersTransferData[]; - void debug_sub_8010818(void); void debug_sub_80108B8(void); +void debug_sub_8010CAC(void); +void debug_sub_801174C(void); +void debug_sub_8011D40(void); void debug_sub_8011EA0(u8); void debug_sub_8012294(void); +void debug_sub_80123D8(u8); +void debug_sub_8012540(void); +void debug_sub_80125A0(void); +void debug_nullsub_3(void); + +struct UnknownStruct2023A76 +{ + u16 unk0; + u16 unk2[(0x44-2)/2]; + s16 unk44; + u16 unk46; + u16 unk48[1]; +}; + +struct UnknownStruct2023B02 +{ + u16 unk0[4][4]; + u8 filler20[0x10]; + u16 unk30[4][4]; +}; + +struct UnknownStruct821F424 +{ + u8 filler0[0x12]; + u16 unk12[1][5]; // unknown length +}; + +extern struct UnknownStruct2023A76 gUnknown_Debug_2023A76; +extern struct UnknownStruct2023B02 gUnknown_Debug_2023B02; +extern u8 gUnknown_Debug_03004360; +extern struct Window gUnknown_Debug_03004370; +extern u8 gUnknown_Debug_030043A0; +extern u8 gUnknown_Debug_030043A4; +extern u8 gUnknown_Debug_030043A8; +extern u8 gBattleBuffersTransferData[]; + +extern const struct UnknownStruct821F424 gUnknown_Debug_821F424; +extern const u16 gUnknown_Debug_821F56C[][5]; + +extern const u8 gUnusedOldCharmap_Gfx_lz[]; +extern const u8 gUnusedOldCharmap_Tilemap_lz[]; +extern const u8 gUnusedOldCharmap_Pal_lz[]; void debug_sub_8010800(void) { @@ -1376,283 +1420,84 @@ void debug_sub_8010800(void) *(u32 *)(gBattleBuffersTransferData + 0x100) = 0; } -__attribute__((naked)) -void debug_sub_8010818() -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " ldr r1, ._501\n" - " ldr r0, ._501 + 4\n" - " strh r0, [r1]\n" - " add r2, r1, #0\n" - " add r2, r2, #0x46\n" - " strh r0, [r2]\n" - " ldr r0, ._501 + 8\n" - " add r4, r1, #0\n" - " add r4, r4, #0x48\n" - " add r3, r0, #0\n" - " add r3, r3, #0x12\n" - " add r2, r1, #2\n" - " mov r1, #0x1d\n" - "._498:\n" - " ldrh r0, [r3]\n" - " strh r0, [r2]\n" - " strh r0, [r4]\n" - " add r4, r4, #0x2\n" - " add r3, r3, #0xa\n" - " add r2, r2, #0x2\n" - " sub r1, r1, #0x1\n" - " cmp r1, #0\n" - " bge ._498 @cond_branch\n" - " mov r1, #0x0\n" - " ldr r4, ._501 + 12\n" - " ldr r7, ._501 + 16\n" - " ldr r6, ._501 + 20\n" - " mov r0, #0x30\n" - " add r0, r0, r7\n" - " mov ip, r0\n" - "._500:\n" - " mov r0, #0x0\n" - " strb r0, [r4]\n" - " add r5, r1, #1\n" - " lsl r3, r1, #0x3\n" - "._499:\n" - " ldrb r2, [r4]\n" - " lsl r1, r2, #0x1\n" - " add r1, r1, r3\n" - " add r1, r1, r7\n" - " lsl r0, r2, #0x2\n" - " add r0, r0, r2\n" - " lsl r0, r0, #0x1\n" - " add r0, r0, r6\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " ldrb r2, [r4]\n" - " lsl r1, r2, #0x1\n" - " add r1, r1, r3\n" - " add r1, r1, ip\n" - " lsl r0, r2, #0x2\n" - " add r0, r0, r2\n" - " lsl r0, r0, #0x1\n" - " add r0, r0, r6\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " ldrb r0, [r4]\n" - " add r0, r0, #0x1\n" - " strb r0, [r4]\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x3\n" - " bls ._499 @cond_branch\n" - " add r1, r5, #0\n" - " cmp r1, #0x5\n" - " ble ._500 @cond_branch\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._502:\n" - " .align 2, 0\n" - "._501:\n" - " .word gUnknown_Debug_2023A76\n" - " .word 0x115\n" - " .word gUnknown_Debug_821F424\n" - " .word gUnknown_Debug_030043A8\n" - " .word gUnknown_Debug_2023B02\n" - " .word gUnknown_Debug_821F56C\n" - "\n" - ); -} -__attribute__((naked)) -void debug_sub_80108B8() -{ - asm( - " push {r4, r5, lr}\n" - " add sp, sp, #0xfffffffc\n" - " bl m4aSoundVSyncOff\n" - " mov r0, #0x0\n" - " bl SetHBlankCallback\n" - " mov r0, #0x0\n" - " bl SetVBlankCallback\n" - " mov r3, #0x0\n" - " str r3, [sp]\n" - " ldr r2, ._507\n" - " mov r0, sp\n" - " str r0, [r2]\n" - " mov r1, #0xc0\n" - " lsl r1, r1, #0x13\n" - " str r1, [r2, #0x4]\n" - " ldr r0, ._507 + 4\n" - " str r0, [r2, #0x8]\n" - " ldr r0, [r2, #0x8]\n" - " ldr r2, ._507 + 8\n" - " mov r0, #0x1\n" - " strh r0, [r2]\n" - " mov r2, #0x80\n" - " lsl r2, r2, #0x13\n" - " mov r4, #0x9a\n" - " lsl r4, r4, #0x5\n" - " add r0, r4, #0\n" - " strh r0, [r2]\n" - " ldr r0, ._507 + 12\n" - " mov r5, #0x0\n" - " strh r3, [r0]\n" - " ldr r0, ._507 + 16\n" - " strh r3, [r0]\n" - " ldr r0, ._507 + 20\n" - " strh r3, [r0]\n" - " ldr r0, ._507 + 24\n" - " strh r3, [r0]\n" - " ldr r0, ._507 + 28\n" - " strh r3, [r0]\n" - " ldr r0, ._507 + 32\n" - " strh r3, [r0]\n" - " ldr r0, ._507 + 36\n" - " strh r3, [r0]\n" - " ldr r0, ._507 + 40\n" - " strh r3, [r0]\n" - " add r2, r2, #0x8\n" - " ldr r4, ._507 + 44\n" - " add r0, r4, #0\n" - " strh r0, [r2]\n" - " add r2, r2, #0x2\n" - " ldr r4, ._507 + 48\n" - " add r0, r4, #0\n" - " strh r0, [r2]\n" - " ldr r0, ._507 + 52\n" - " strh r3, [r0]\n" - " add r0, r0, #0x4\n" - " strh r3, [r0]\n" - " ldr r0, ._507 + 56\n" - " bl LZDecompressVram\n" - " ldr r0, ._507 + 60\n" - " ldr r1, ._507 + 64\n" - " bl LZDecompressWram\n" - " ldr r4, ._507 + 68\n" - " mov r1, #0xa0\n" - " lsl r1, r1, #0x13\n" - " add r0, r4, #0\n" - " bl LZDecompressVram\n" - " ldr r1, ._507 + 72\n" - " add r0, r4, #0\n" - " bl LZDecompressVram\n" - " bl m4aSoundVSyncOn\n" - " ldr r0, ._507 + 76\n" - " bl SetVBlankCallback\n" - " ldr r0, ._507 + 80\n" - " bl SetMainCallback2\n" - " bl ResetTasks\n" - " bl ResetSpriteData\n" - " bl ScanlineEffect_Stop\n" - " ldr r4, ._507 + 84\n" - " add r0, r4, #0\n" - " bl Text_LoadWindowTemplate\n" - " ldr r0, ._507 + 88\n" - " add r1, r4, #0\n" - " bl Text_InitWindowWithTemplate\n" - " ldr r0, ._507 + 92\n" - " strb r5, [r0]\n" - " ldr r0, ._507 + 96\n" - " strb r5, [r0]\n" - " ldr r0, ._507 + 100\n" - " strb r5, [r0]\n" - " mov r4, #0x0\n" - "._503:\n" - " lsl r0, r4, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x1e\n" - " ble ._503 @cond_branch\n" - " ldr r1, ._507 + 104\n" - " mov r0, #0x0\n" - " strb r0, [r1]\n" - " add r4, r1, #0\n" - "._504:\n" - " bl debug_sub_8012294\n" - " ldrb r0, [r4]\n" - " add r0, r0, #0x1\n" - " strb r0, [r4]\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x3\n" - " bls ._504 @cond_branch\n" - " ldr r0, ._507 + 100\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - " bl debug_sub_8012540\n" - " bl debug_nullsub_3\n" - " ldr r1, ._507 + 104\n" - " mov r0, #0x0\n" - " strb r0, [r1]\n" - " bl debug_sub_80125A0\n" - " ldr r0, ._507 + 108\n" - " add r0, r0, #0x44\n" - " mov r1, #0x0\n" - " ldsh r0, [r0, r1]\n" - " cmp r0, #0x8\n" - " bne ._505 @cond_branch\n" - " bl debug_sub_801174C\n" - " b ._506\n" - "._508:\n" - " .align 2, 0\n" - "._507:\n" - " .word 0x40000d4\n" - " .word 0x85006000\n" - " .word 0x4000200\n" - " .word gBattle_BG0_X\n" - " .word gBattle_BG0_Y\n" - " .word gBattle_BG1_X\n" - " .word gBattle_BG1_Y\n" - " .word gBattle_BG2_X\n" - " .word gBattle_BG2_Y\n" - " .word gBattle_BG3_X\n" - " .word gBattle_BG3_Y\n" - " .word 0x1f09\n" - " .word 0x4801\n" - " .word 0x4000050\n" - " .word gMonShinyPalette_CircledQuestionMark+0x18\n" - " .word gMonShinyPalette_CircledQuestionMark+0x834\n" - " .word gSharedMem\n" - " .word gMonShinyPalette_CircledQuestionMark+0xa8c\n" - " .word 0x50001e0\n" - " .word debug_sub_8011D40+1\n" - " .word debug_sub_8010CAC+1\n" - " .word gWindowTemplate_81E6C3C\n" - " .word gUnknown_Debug_03004370\n" - " .word gUnknown_Debug_03004360\n" - " .word gUnknown_Debug_030043A0\n" - " .word gUnknown_Debug_030043A4\n" - " .word gUnknown_Debug_030043A8\n" - " .word gUnknown_Debug_2023A76\n" - "._505:\n" - " ldr r0, ._510\n" - " mov r1, #0x0\n" - " mov r4, #0x7\n" - " ldr r2, ._510 + 4\n" - " add r0, r0, r2\n" - "._509:\n" - " strb r1, [r0]\n" - " sub r0, r0, #0x1\n" - " sub r4, r4, #0x1\n" - " cmp r4, #0\n" - " bge ._509 @cond_branch\n" - "._506:\n" - " add sp, sp, #0x4\n" - " pop {r4, r5}\n" - " pop {r0}\n" - " bx r0\n" - "._511:\n" - " .align 2, 0\n" - "._510:\n" - " .word gSharedMem\n" - " .word 0x160bb\n" - "\n" - ); +void debug_sub_8010818(void) +{ + s32 i; + + gUnknown_Debug_2023A76.unk0 = 0x115; + gUnknown_Debug_2023A76.unk46 = 0x115; + for (i = 0; i < 30; i++) + { + gUnknown_Debug_2023A76.unk2[i] = gUnknown_Debug_821F424.unk12[i][0]; + gUnknown_Debug_2023A76.unk48[i] = gUnknown_Debug_821F424.unk12[i][0]; + } + + for (i = 0; i < 6; i++) + { + for (gUnknown_Debug_030043A8 = 0; gUnknown_Debug_030043A8 < 4; gUnknown_Debug_030043A8++) + { + gUnknown_Debug_2023B02.unk0[i][gUnknown_Debug_030043A8] = gUnknown_Debug_821F56C[gUnknown_Debug_030043A8][0]; + gUnknown_Debug_2023B02.unk30[i][gUnknown_Debug_030043A8] = gUnknown_Debug_821F56C[gUnknown_Debug_030043A8][0]; + } + } +} + +void debug_sub_80108B8(void) +{ + s32 i; + + m4aSoundVSyncOff(); + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + DmaFill32(3, 0, (void *)VRAM, VRAM_SIZE); + REG_IE = 1; + REG_DISPCNT = 0x1340; + gBattle_BG0_X = 0; + gBattle_BG0_Y = 0; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + REG_BG0CNT = 0x1F09; + REG_BG1CNT = 0x4801; + REG_BLDCNT = 0; + REG_BLDY = 0; + LZDecompressVram(gUnusedOldCharmap_Gfx_lz, (void *)VRAM); + LZDecompressWram(gUnusedOldCharmap_Tilemap_lz, gSharedMem); + LZDecompressVram(gUnusedOldCharmap_Pal_lz, (void *)PLTT); + LZDecompressVram(gUnusedOldCharmap_Pal_lz, (void *)(PLTT + 0x1E0)); + m4aSoundVSyncOn(); + SetVBlankCallback(debug_sub_8011D40); + SetMainCallback2(debug_sub_8010CAC); + ResetTasks(); + ResetSpriteData(); + ScanlineEffect_Stop(); + Text_LoadWindowTemplate(&gWindowTemplate_81E6C3C); + Text_InitWindowWithTemplate(&gUnknown_Debug_03004370, &gWindowTemplate_81E6C3C); + gUnknown_Debug_03004360 = 0; + gUnknown_Debug_030043A0 = 0; + gUnknown_Debug_030043A4 = 0; + for (i = 0; i < 31; i++) + debug_sub_8011EA0(i); + for (gUnknown_Debug_030043A8 = 0; gUnknown_Debug_030043A8 < 4; gUnknown_Debug_030043A8++) + debug_sub_8012294(); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + debug_sub_8012540(); + debug_nullsub_3(); + gUnknown_Debug_030043A8 = 0; + debug_sub_80125A0(); + if (gUnknown_Debug_2023A76.unk44 == 8) + { + debug_sub_801174C(); + } + else + { + for (i = 0; i < 8; i++) + gSharedMem[0x160B4 + i] = 0; + } } __attribute__((naked)) @@ -4128,19 +3973,19 @@ void debug_nullsub_45() void debug_sub_8011DD4(void) { REG_BG0CNT = 0x9803; - + REG_BG0HOFS = gBattle_BG0_X; REG_BG0VOFS = gBattle_BG0_Y; - + REG_BG1HOFS = gBattle_BG1_X; REG_BG1VOFS = gBattle_BG1_Y; - + REG_BG2HOFS = gBattle_BG2_X; REG_BG2VOFS = gBattle_BG2_Y; - + REG_BG3HOFS = gBattle_BG3_X; REG_BG3VOFS = gBattle_BG3_Y; - + LoadOam(); ProcessSpriteCopyRequests(); TransferPlttBuffer(); @@ -4150,7 +3995,7 @@ void debug_sub_8011DD4(void) void debug_sub_8011E5C(void) { s32 i; - + for (i = 0; i < 31; i++) debug_sub_8011EA0(i); } @@ -4160,7 +4005,7 @@ extern u8 gUnknown_Debug_030043A8; void debug_sub_8011E74(void) { u8 r5 = gUnknown_Debug_030043A8; - + for (gUnknown_Debug_030043A8 = 0; gUnknown_Debug_030043A8 < 4; gUnknown_Debug_030043A8++) debug_sub_8012294(); @@ -4777,7 +4622,7 @@ void debug_sub_8012294() } __attribute__((naked)) -void debug_sub_80123D8() +void debug_sub_80123D8(u8 a) { asm( " push {r4, r5, r6, r7, lr}\n" -- cgit v1.2.3 From c7cd31f56ced799f6bb75ef8357b6d623a0b0de8 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 24 Jan 2018 18:17:43 -0600 Subject: integrate debug AbilityBattleEffects --- src/battle/battle_util.c | 4357 ++-------------------------------------------- 1 file changed, 179 insertions(+), 4178 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c index 620e0690a..faa395a97 100644 --- a/src/battle/battle_util.c +++ b/src/battle/battle_util.c @@ -22,6 +22,8 @@ #include "constants/species.h" #include "constants/weather.h" +extern u8 gUnknown_02023A14_50; + extern const u8* gBattlescriptCurrInstr; extern u8 gActiveBank; extern u8 gBattleBufferB[4][0x200]; @@ -1683,4066 +1685,6 @@ u8 CastformDataTypeChange(u8 bank) return formChange; } -#if DEBUG -__attribute__((naked)) -u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) -{ - asm("\ - push {r4, r5, r6, r7, lr}\n\ - mov r7, sl\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5, r6, r7}\n\ - add sp, sp, #0xffffffd8\n\ - ldr r4, [sp, #0x48]\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - str r0, [sp, #0x4]\n\ - lsl r1, r1, #0x18\n\ - lsr r1, r1, #0x18\n\ - mov sl, r1\n\ - lsl r2, r2, #0x18\n\ - lsr r6, r2, #0x18\n\ - lsl r3, r3, #0x18\n\ - lsr r3, r3, #0x18\n\ - mov r8, r3\n\ - lsl r4, r4, #0x10\n\ - lsr r4, r4, #0x10\n\ - mov r0, #0x0\n\ - mov r9, r0\n\ - ldr r5, ._718\n\ - ldr r1, ._718 + 4\n\ - ldrb r0, [r5]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc ._715 @cond_branch\n\ - mov r1, sl\n\ - strb r1, [r5]\n\ -._715:\n\ - ldrb r0, [r5]\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - bne ._716 @cond_branch\n\ - ldr r1, ._718 + 8\n\ - ldrb r0, [r5]\n\ - lsl r0, r0, #0x1\n\ - add r0, r0, r1\n\ - ldrh r1, [r0]\n\ - mov r0, #0x64\n\ - mul r1, r1, r0\n\ - ldr r0, ._718 + 12\n\ - b ._717\n\ -._719:\n\ - .align 2, 0\n\ -._718:\n\ - .word gBankAttacker\n\ - .word gNoOfAllBanks\n\ - .word gBattlePartyID\n\ - .word gPlayerParty\n\ -._716:\n\ - ldr r1, ._723\n\ - ldrb r0, [r5]\n\ - lsl r0, r0, #0x1\n\ - add r0, r0, r1\n\ - ldrh r1, [r0]\n\ - mov r0, #0x64\n\ - mul r1, r1, r0\n\ - ldr r0, ._723 + 4\n\ -._717:\n\ - add r7, r1, r0\n\ - ldr r5, ._723 + 8\n\ - ldr r1, ._723 + 12\n\ - ldrb r0, [r5]\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc ._720 @cond_branch\n\ - mov r2, sl\n\ - strb r2, [r5]\n\ -._720:\n\ - ldrb r0, [r5]\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - bne ._721 @cond_branch\n\ - ldr r1, ._723\n\ - ldrb r0, [r5]\n\ - lsl r0, r0, #0x1\n\ - add r0, r0, r1\n\ - ldrh r1, [r0]\n\ - mov r0, #0x64\n\ - mul r1, r1, r0\n\ - ldr r0, ._723 + 16\n\ - b ._722\n\ -._724:\n\ - .align 2, 0\n\ -._723:\n\ - .word gBattlePartyID\n\ - .word gEnemyParty\n\ - .word gBankTarget\n\ - .word gNoOfAllBanks\n\ - .word gPlayerParty\n\ -._721:\n\ - ldr r1, ._729\n\ - ldrb r0, [r5]\n\ - lsl r0, r0, #0x1\n\ - add r0, r0, r1\n\ - ldrh r1, [r0]\n\ - mov r0, #0x64\n\ - mul r1, r1, r0\n\ - ldr r0, ._729 + 4\n\ -._722:\n\ - add r5, r1, r0\n\ - add r0, r7, #0\n\ - mov r1, #0xb\n\ - bl GetMonData\n\ - lsl r0, r0, #0x10\n\ - lsr r0, r0, #0x10\n\ - str r0, [sp, #0x8]\n\ - add r0, r7, #0\n\ - mov r1, #0x0\n\ - bl GetMonData\n\ - str r0, [sp, #0x10]\n\ - add r0, r5, #0\n\ - mov r1, #0xb\n\ - bl GetMonData\n\ - lsl r0, r0, #0x10\n\ - lsr r0, r0, #0x10\n\ - str r0, [sp, #0xc]\n\ - add r0, r5, #0\n\ - mov r1, #0x0\n\ - bl GetMonData\n\ - str r0, [sp, #0x14]\n\ - ldr r0, ._729 + 8\n\ - ldrh r1, [r0]\n\ - mov r0, #0x80\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._725 @cond_branch\n\ - bl ._1540\n\ -._725:\n\ - mov r3, r8\n\ - cmp r3, #0\n\ - beq ._727 @cond_branch\n\ - ldr r0, ._729 + 12\n\ - strb r3, [r0]\n\ - mov r8, r0\n\ - b ._728\n\ -._730:\n\ - .align 2, 0\n\ -._729:\n\ - .word gBattlePartyID\n\ - .word gEnemyParty\n\ - .word gBattleTypeFlags\n\ - .word gLastUsedAbility\n\ -._727:\n\ - ldr r2, ._733\n\ - ldr r1, ._733 + 4\n\ - mov r0, #0x58\n\ - mov r5, sl\n\ - mul r5, r5, r0\n\ - add r0, r5, #0\n\ - add r0, r0, r1\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - strb r0, [r2]\n\ - mov r8, r2\n\ -._728:\n\ - cmp r4, #0\n\ - beq ._731 @cond_branch\n\ - add r3, r4, #0\n\ - b ._732\n\ -._734:\n\ - .align 2, 0\n\ -._733:\n\ - .word gLastUsedAbility\n\ - .word gBattleMons\n\ -._731:\n\ - ldr r0, ._737\n\ - ldrh r3, [r0]\n\ -._732:\n\ - ldr r1, ._737 + 4\n\ - ldr r2, ._737 + 8\n\ - add r0, r1, r2\n\ - ldrb r0, [r0]\n\ - add r7, r1, #0\n\ - cmp r0, #0\n\ - beq ._735 @cond_branch\n\ - mov r4, #0x3f\n\ - and r4, r4, r0\n\ - b ._736\n\ -._738:\n\ - .align 2, 0\n\ -._737:\n\ - .word gCurrentMove\n\ - .word +0x2000000\n\ - .word 0x1601c\n\ -._735:\n\ - ldr r1, ._741\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r4, [r0, #0x2]\n\ -._736:\n\ - ldr r5, [sp, #0x4]\n\ - cmp r5, #0x13\n\ - bls ._739 @cond_branch\n\ - bl ._1534\n\ -._739:\n\ - lsl r0, r5, #0x2\n\ - ldr r1, ._741 + 4\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ -._742:\n\ - .align 2, 0\n\ -._741:\n\ - .word gBattleMoves\n\ - .word ._743\n\ -._743:\n\ - .word ._744\n\ - .word ._745\n\ - .word ._746\n\ - .word ._747\n\ - .word ._748\n\ - .word ._749\n\ - .word ._750\n\ - .word ._751\n\ - .word ._752\n\ - .word ._753\n\ - .word ._754\n\ - .word ._755\n\ - .word ._756\n\ - .word ._757\n\ - .word ._758\n\ - .word ._759\n\ - .word ._760\n\ - .word ._761\n\ - .word ._762\n\ - .word ._763\n\ -._744:\n\ - ldr r2, ._774\n\ - ldr r0, ._774 + 4\n\ - ldrb r1, [r2]\n\ - add r5, r0, #0\n\ - ldrb r0, [r5]\n\ - cmp r1, r0\n\ - bcc ._764 @cond_branch\n\ - mov r1, sl\n\ - strb r1, [r2]\n\ -._764:\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - cmp r0, #0x2d\n\ - bne ._765 @cond_branch\n\ - b ._766\n\ -._765:\n\ - cmp r0, #0x2d\n\ - bgt ._767 @cond_branch\n\ - cmp r0, #0xd\n\ - bne ._768 @cond_branch\n\ - b ._788\n\ -._768:\n\ - cmp r0, #0xd\n\ - bgt ._770 @cond_branch\n\ - cmp r0, #0x2\n\ - bne ._771 @cond_branch\n\ - b ._772\n\ -._771:\n\ - bl ._1534\n\ -._775:\n\ - .align 2, 0\n\ -._774:\n\ - .word gBankAttacker\n\ - .word gNoOfAllBanks\n\ -._770:\n\ - cmp r0, #0x16\n\ - bne ._776 @cond_branch\n\ - b ._777\n\ -._776:\n\ - cmp r0, #0x24\n\ - bne ._778 @cond_branch\n\ - b ._779\n\ -._778:\n\ - bl ._1534\n\ -._767:\n\ - cmp r0, #0x46\n\ - bne ._781 @cond_branch\n\ - b ._782\n\ -._781:\n\ - cmp r0, #0x46\n\ - bgt ._783 @cond_branch\n\ - cmp r0, #0x3b\n\ - bne ._784 @cond_branch\n\ - b ._785\n\ -._784:\n\ - bl ._1534\n\ -._783:\n\ - cmp r0, #0x4d\n\ - bne ._787 @cond_branch\n\ - b ._788\n\ -._787:\n\ - cmp r0, #0xff\n\ - beq ._789 @cond_branch\n\ - bl ._1534\n\ -._789:\n\ - bl GetCurrentWeather\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - sub r0, r0, #0x3\n\ - cmp r0, #0xa\n\ - bhi ._814 @cond_branch\n\ - lsl r0, r0, #0x2\n\ - ldr r1, ._793\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ -._794:\n\ - .align 2, 0\n\ -._793:\n\ - .word ._792\n\ -._792:\n\ - .word ._805\n\ - .word ._814\n\ - .word ._805\n\ - .word ._814\n\ - .word ._814\n\ - .word ._800\n\ - .word ._814\n\ - .word ._814\n\ - .word ._814\n\ - .word ._804\n\ - .word ._805\n\ -._805:\n\ - ldr r2, ._808\n\ - ldrh r1, [r2]\n\ - mov r0, #0x7\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._814 @cond_branch\n\ - mov r0, #0x5\n\ - strh r0, [r2]\n\ - ldr r0, ._808 + 4\n\ - ldr r3, ._808 + 8\n\ - add r2, r0, r3\n\ - mov r1, #0xa\n\ - b ._811\n\ -._809:\n\ - .align 2, 0\n\ -._808:\n\ - .word gBattleWeather\n\ - .word +0x2000000\n\ - .word 0x160a4\n\ -._800:\n\ - ldr r3, ._812\n\ - ldrh r1, [r3]\n\ - mov r2, #0x18\n\ - add r0, r2, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._814 @cond_branch\n\ - strh r2, [r3]\n\ - ldr r0, ._812 + 4\n\ - ldr r3, ._812 + 8\n\ - add r2, r0, r3\n\ - mov r1, #0xc\n\ - b ._811\n\ -._813:\n\ - .align 2, 0\n\ -._812:\n\ - .word gBattleWeather\n\ - .word +0x2000000\n\ - .word 0x160a4\n\ -._804:\n\ - ldr r3, ._818\n\ - ldrh r1, [r3]\n\ - mov r2, #0x60\n\ - add r0, r2, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._814 @cond_branch\n\ - strh r2, [r3]\n\ - ldr r0, ._818 + 4\n\ - ldr r3, ._818 + 8\n\ - add r2, r0, r3\n\ - mov r1, #0xb\n\ -._811:\n\ - strb r1, [r2]\n\ - ldr r5, ._818 + 12\n\ - add r0, r0, r5\n\ - mov r1, sl\n\ - strb r1, [r0]\n\ - mov r0, r9\n\ - add r0, r0, #0x1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._814:\n\ - mov r2, r9\n\ - cmp r2, #0\n\ - bne ._815 @cond_branch\n\ - bl ._1540\n\ -._815:\n\ - bl GetCurrentWeather\n\ - ldr r1, ._818 + 16\n\ - strb r0, [r1, #0x5]\n\ - ldr r0, ._818 + 20\n\ - bl BattleScriptPushCursorAndCallback\n\ - bl ._1534\n\ -._819:\n\ - .align 2, 0\n\ -._818:\n\ - .word gBattleWeather\n\ - .word +0x2000000\n\ - .word 0x160a4\n\ - .word 0x16003\n\ - .word gBattleCommunication\n\ - .word BattleScript_OverworldWeatherStarts\n\ -._772:\n\ - ldr r2, ._823\n\ - ldrh r1, [r2]\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._820 @cond_branch\n\ - bl ._1534\n\ -._820:\n\ - mov r0, #0x5\n\ - strh r0, [r2]\n\ - ldr r0, ._823 + 4\n\ - bl BattleScriptPushCursorAndCallback\n\ - ldr r0, ._823 + 8\n\ - ldr r3, ._823 + 12\n\ - add r0, r0, r3\n\ - mov r5, sl\n\ - strb r5, [r0]\n\ - bl ._1392\n\ -._824:\n\ - .align 2, 0\n\ -._823:\n\ - .word gBattleWeather\n\ - .word BattleScript_DrizzleActivates\n\ - .word +0x2000000\n\ - .word 0x16003\n\ -._766:\n\ - ldr r2, ._828\n\ - ldrh r1, [r2]\n\ - mov r0, #0x10\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._825 @cond_branch\n\ - bl ._1534\n\ -._825:\n\ - mov r0, #0x18\n\ - strh r0, [r2]\n\ - ldr r0, ._828 + 4\n\ - bl BattleScriptPushCursorAndCallback\n\ - ldr r0, ._828 + 8\n\ - ldr r1, ._828 + 12\n\ - add r0, r0, r1\n\ - mov r2, sl\n\ - strb r2, [r0]\n\ - bl ._1392\n\ -._829:\n\ - .align 2, 0\n\ -._828:\n\ - .word gBattleWeather\n\ - .word BattleScript_SandstreamActivates\n\ - .word +0x2000000\n\ - .word 0x16003\n\ -._782:\n\ - ldr r2, ._833\n\ - ldrh r1, [r2]\n\ - mov r0, #0x40\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._830 @cond_branch\n\ - bl ._1534\n\ -._830:\n\ - mov r0, #0x60\n\ - strh r0, [r2]\n\ - ldr r0, ._833 + 4\n\ - bl BattleScriptPushCursorAndCallback\n\ - ldr r0, ._833 + 8\n\ - ldr r3, ._833 + 12\n\ - add r0, r0, r3\n\ - mov r5, sl\n\ - strb r5, [r0]\n\ - bl ._1392\n\ -._834:\n\ - .align 2, 0\n\ -._833:\n\ - .word gBattleWeather\n\ - .word BattleScript_DroughtActivates\n\ - .word +0x2000000\n\ - .word 0x16003\n\ -._777:\n\ - ldr r0, ._838\n\ - mov r1, sl\n\ - lsl r2, r1, #0x2\n\ - add r1, r2, r1\n\ - lsl r1, r1, #0x2\n\ - add r3, r1, r0\n\ - ldrb r0, [r3]\n\ - lsl r0, r0, #0x1c\n\ - cmp r0, #0\n\ - bge ._835 @cond_branch\n\ - bl ._1534\n\ -._835:\n\ - ldr r1, ._838 + 4\n\ - add r1, r2, r1\n\ - ldr r0, [r1]\n\ - mov r2, #0x80\n\ - lsl r2, r2, #0xc\n\ - orr r0, r0, r2\n\ - str r0, [r1]\n\ - ldrb r0, [r3]\n\ - mov r1, #0x8\n\ - b ._837\n\ -._839:\n\ - .align 2, 0\n\ -._838:\n\ - .word gSpecialStatuses\n\ - .word gStatuses3\n\ -._785:\n\ - mov r0, sl\n\ - bl CastformDataTypeChange\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ - cmp r0, #0\n\ - bne ._840 @cond_branch\n\ - bl ._1540\n\ -._840:\n\ - ldr r0, ._843\n\ - bl BattleScriptPushCursorAndCallback\n\ - ldr r0, ._843 + 4\n\ - ldr r2, ._843 + 8\n\ - add r1, r0, r2\n\ - mov r3, sl\n\ - strb r3, [r1]\n\ - mov r1, r9\n\ - sub r1, r1, #0x1\n\ - ldr r5, ._843 + 12\n\ - add r0, r0, r5\n\ - strb r1, [r0]\n\ - bl ._1534\n\ -._844:\n\ - .align 2, 0\n\ -._843:\n\ - .word BattleScript_CastformChange\n\ - .word +0x2000000\n\ - .word 0x16003\n\ - .word 0x1609b\n\ -._779:\n\ - ldr r0, ._848\n\ - mov r1, sl\n\ - lsl r2, r1, #0x2\n\ - add r1, r2, r1\n\ - lsl r1, r1, #0x2\n\ - add r3, r1, r0\n\ - ldrb r0, [r3]\n\ - lsl r0, r0, #0x1b\n\ - cmp r0, #0\n\ - bge ._845 @cond_branch\n\ - bl ._1534\n\ -._845:\n\ - ldr r1, ._848 + 4\n\ - add r1, r2, r1\n\ - ldr r0, [r1]\n\ - mov r2, #0x80\n\ - lsl r2, r2, #0xd\n\ - orr r0, r0, r2\n\ - str r0, [r1]\n\ - ldrb r0, [r3]\n\ - mov r1, #0x10\n\ -._837:\n\ - orr r0, r0, r1\n\ - strb r0, [r3]\n\ - bl ._1534\n\ -._849:\n\ - .align 2, 0\n\ -._848:\n\ - .word gSpecialStatuses\n\ - .word gStatuses3\n\ -._788:\n\ - mov r6, #0x0\n\ - ldrb r5, [r5]\n\ - cmp r6, r5\n\ - bcc ._854 @cond_branch\n\ - bl ._1534\n\ -._854:\n\ - add r0, r6, #0\n\ - bl CastformDataTypeChange\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ - cmp r0, #0\n\ - beq ._852 @cond_branch\n\ - bl ._853\n\ -._852:\n\ - add r0, r6, #1\n\ - lsl r0, r0, #0x18\n\ - lsr r6, r0, #0x18\n\ - ldr r0, ._856\n\ - ldrb r0, [r0]\n\ - cmp r6, r0\n\ - bcc ._854 @cond_branch\n\ - bl ._1534\n\ -._857:\n\ - .align 2, 0\n\ -._856:\n\ - .word gNoOfAllBanks\n\ -._745:\n\ - ldr r2, ._865\n\ - mov r0, #0x58\n\ - mov r1, sl\n\ - mul r1, r1, r0\n\ - add r4, r1, r2\n\ - ldrh r0, [r4, #0x28]\n\ - cmp r0, #0\n\ - bne ._858 @cond_branch\n\ - bl ._1534\n\ -._858:\n\ - ldr r0, ._865 + 4\n\ - mov r3, sl\n\ - strb r3, [r0]\n\ - mov r3, r8\n\ - ldrb r5, [r3]\n\ - cmp r5, #0x2c\n\ - beq ._860 @cond_branch\n\ - cmp r5, #0x2c\n\ - bgt ._861 @cond_branch\n\ - cmp r5, #0x3\n\ - bne ._862 @cond_branch\n\ - b ._863\n\ -._862:\n\ - bl ._1534\n\ -._866:\n\ - .align 2, 0\n\ -._865:\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ -._861:\n\ - cmp r5, #0x36\n\ - bne ._867 @cond_branch\n\ - b ._868\n\ -._867:\n\ - cmp r5, #0x3d\n\ - beq ._869 @cond_branch\n\ - bl ._1534\n\ -._860:\n\ - mov r0, #0x0\n\ - str r0, [sp]\n\ - mov r0, #0x13\n\ - mov r1, #0x0\n\ - mov r2, #0xd\n\ - mov r3, #0x0\n\ - bl AbilityBattleEffects\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0\n\ - beq ._871 @cond_branch\n\ - bl ._1534\n\ -._871:\n\ - str r0, [sp]\n\ - mov r0, #0x13\n\ - mov r1, #0x0\n\ - mov r2, #0x4d\n\ - mov r3, #0x0\n\ - bl AbilityBattleEffects\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - beq ._873 @cond_branch\n\ - bl ._1534\n\ -._873:\n\ - ldr r0, ._881\n\ - ldrh r1, [r0]\n\ - mov r0, #0x7\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._875 @cond_branch\n\ - bl ._1534\n\ -._875:\n\ - ldrh r0, [r4, #0x2c]\n\ - ldrh r1, [r4, #0x28]\n\ - cmp r0, r1\n\ - bhi ._877 @cond_branch\n\ - bl ._1534\n\ -._877:\n\ - mov r2, r8\n\ - strb r5, [r2]\n\ - ldr r0, ._881 + 4\n\ - bl BattleScriptPushCursorAndCallback\n\ - ldr r1, ._881 + 8\n\ - ldrh r0, [r4, #0x2c]\n\ - lsr r0, r0, #0x4\n\ - str r0, [r1]\n\ - cmp r0, #0\n\ - bne ._879 @cond_branch\n\ - mov r0, #0x1\n\ - str r0, [r1]\n\ -._879:\n\ - ldr r0, [r1]\n\ - neg r0, r0\n\ - str r0, [r1]\n\ - bl ._1392\n\ -._882:\n\ - .align 2, 0\n\ -._881:\n\ - .word gBattleWeather\n\ - .word BattleScript_RainDishActivates\n\ - .word gBattleMoveDamage\n\ -._869:\n\ - add r0, r2, #0\n\ - add r0, r0, #0x4c\n\ - add r5, r1, r0\n\ - ldrb r0, [r5]\n\ - cmp r0, #0\n\ - bne ._883 @cond_branch\n\ - bl ._1534\n\ -._883:\n\ - bl Random\n\ - lsl r0, r0, #0x10\n\ - lsr r0, r0, #0x10\n\ - mov r1, #0x3\n\ - bl __umodsi3\n\ - lsl r0, r0, #0x10\n\ - lsr r4, r0, #0x10\n\ - cmp r4, #0\n\ - beq ._885 @cond_branch\n\ - bl ._1534\n\ -._885:\n\ - ldr r0, [r5]\n\ - mov r1, #0x88\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._887 @cond_branch\n\ - ldr r0, ._893\n\ - ldr r1, ._893 + 4\n\ - bl StringCopy\n\ -._887:\n\ - ldr r0, [r5]\n\ - mov r1, #0x7\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._888 @cond_branch\n\ - ldr r0, ._893\n\ - ldr r1, ._893 + 8\n\ - bl StringCopy\n\ -._888:\n\ - ldr r0, [r5]\n\ - mov r1, #0x40\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._889 @cond_branch\n\ - ldr r0, ._893\n\ - ldr r1, ._893 + 12\n\ - bl StringCopy\n\ -._889:\n\ - ldr r0, [r5]\n\ - mov r1, #0x10\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._890 @cond_branch\n\ - ldr r0, ._893\n\ - ldr r1, ._893 + 16\n\ - bl StringCopy\n\ -._890:\n\ - ldr r0, [r5]\n\ - mov r1, #0x20\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._891 @cond_branch\n\ - ldr r0, ._893\n\ - ldr r1, ._893 + 20\n\ - bl StringCopy\n\ -._891:\n\ - str r4, [r5]\n\ - ldr r0, ._893 + 24\n\ - ldr r4, ._893 + 28\n\ - mov r3, sl\n\ - strb r3, [r4]\n\ - ldr r1, ._893 + 32\n\ - add r0, r0, r1\n\ - strb r3, [r0]\n\ - ldr r0, ._893 + 36\n\ - bl BattleScriptPushCursorAndCallback\n\ - str r5, [sp]\n\ - mov r0, #0x0\n\ - mov r1, #0x28\n\ - mov r2, #0x0\n\ - mov r3, #0x4\n\ - bl EmitSetMonData\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - bl ._1392\n\ -._894:\n\ - .align 2, 0\n\ -._893:\n\ - .word gBattleTextBuff1\n\ - .word gStatusConditionString_PoisonJpn\n\ - .word gStatusConditionString_SleepJpn\n\ - .word gStatusConditionString_ParalysisJpn\n\ - .word gStatusConditionString_BurnJpn\n\ - .word gStatusConditionString_IceJpn\n\ - .word +0x2000000\n\ - .word gActiveBank\n\ - .word 0x16003\n\ - .word BattleScript_ShedSkinActivates\n\ -._863:\n\ - ldrb r2, [r4, #0x1b]\n\ - mov r0, #0x1b\n\ - ldsb r0, [r4, r0]\n\ - cmp r0, #0xb\n\ - ble ._895 @cond_branch\n\ - bl ._1534\n\ -._895:\n\ - ldr r0, ._900\n\ - mov r3, sl\n\ - lsl r1, r3, #0x3\n\ - sub r1, r1, r3\n\ - lsl r1, r1, #0x2\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x16]\n\ - cmp r0, #0x2\n\ - bne ._897 @cond_branch\n\ - bl ._1534\n\ -._897:\n\ - add r0, r2, #1\n\ - mov r2, #0x0\n\ - strb r0, [r4, #0x1b]\n\ - ldr r5, ._900 + 4\n\ - add r1, r7, r5\n\ - mov r0, #0x11\n\ - strb r0, [r1]\n\ - ldr r1, ._900 + 8\n\ - add r0, r7, r1\n\ - strb r2, [r0]\n\ - ldr r0, ._900 + 12\n\ - bl BattleScriptPushCursorAndCallback\n\ - ldr r2, ._900 + 16\n\ - add r0, r7, r2\n\ - mov r3, sl\n\ - strb r3, [r0]\n\ - bl ._1392\n\ -._901:\n\ - .align 2, 0\n\ -._900:\n\ - .word gDisableStructs\n\ - .word 0x160a4\n\ - .word 0x160a5\n\ - .word BattleScript_SpeedBoostActivates\n\ - .word 0x16003\n\ -._868:\n\ - ldr r2, ._903\n\ - ldrb r0, [r0]\n\ - lsl r1, r0, #0x3\n\ - sub r1, r1, r0\n\ - lsl r1, r1, #0x2\n\ - add r1, r1, r2\n\ - ldrb r3, [r1, #0x18]\n\ - lsl r0, r3, #0x1f\n\ - lsr r0, r0, #0x1f\n\ - mov r2, #0x1\n\ - eor r2, r2, r0\n\ - mov r0, #0x2\n\ - neg r0, r0\n\ - and r0, r0, r3\n\ - orr r0, r0, r2\n\ - strb r0, [r1, #0x18]\n\ - bl ._1534\n\ -._904:\n\ - .align 2, 0\n\ -._903:\n\ - .word gDisableStructs\n\ -._746:\n\ - mov r5, r8\n\ - ldrb r0, [r5]\n\ - cmp r0, #0x2b\n\ - beq ._905 @cond_branch\n\ - bl ._1534\n\ -._905:\n\ - mov r4, #0x0\n\ - ldr r0, ._917\n\ - ldrh r2, [r0]\n\ - ldr r5, ._917 + 4\n\ - add r1, r0, #0\n\ - cmp r2, r5\n\ - bne ._907 @cond_branch\n\ - bl ._1534\n\ -._907:\n\ - cmp r2, r3\n\ - beq ._909 @cond_branch\n\ - add r2, r1, #0\n\ -._912:\n\ - add r2, r2, #0x2\n\ - add r4, r4, #0x1\n\ - ldrh r0, [r2]\n\ - cmp r0, r5\n\ - bne ._910 @cond_branch\n\ - bl ._1534\n\ -._910:\n\ - cmp r0, r3\n\ - bne ._912 @cond_branch\n\ -._909:\n\ - lsl r0, r4, #0x1\n\ - add r0, r0, r1\n\ - ldrh r1, [r0]\n\ - ldr r0, ._917 + 4\n\ - cmp r1, r0\n\ - bne ._913 @cond_branch\n\ - bl ._1534\n\ -._913:\n\ - ldr r1, ._917 + 8\n\ - ldr r0, ._917 + 12\n\ - ldrb r2, [r0]\n\ - mov r0, #0x58\n\ - mul r0, r0, r2\n\ - add r1, r1, #0x50\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x5\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._915 @cond_branch\n\ - ldr r0, ._917 + 16\n\ - ldr r1, [r0]\n\ - mov r2, #0x80\n\ - lsl r2, r2, #0x4\n\ - orr r1, r1, r2\n\ - str r1, [r0]\n\ -._915:\n\ - ldr r1, ._917 + 20\n\ - ldr r0, ._917 + 24\n\ - str r0, [r1]\n\ - mov r0, #0x1\n\ - mov r9, r0\n\ - bl ._916\n\ -._918:\n\ - .align 2, 0\n\ -._917:\n\ - .word gSoundMovesTable\n\ - .word 0xffff\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gHitMarker\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_SoundproofProtected\n\ -._747:\n\ - cmp r3, #0\n\ - bne ._919 @cond_branch\n\ - bl ._1534\n\ -._919:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, #0xb\n\ - beq ._921 @cond_branch\n\ - cmp r0, #0xb\n\ - bgt ._922 @cond_branch\n\ - cmp r0, #0xa\n\ - beq ._923 @cond_branch\n\ - b ._956\n\ -._922:\n\ - cmp r0, #0x12\n\ - beq ._925 @cond_branch\n\ - b ._956\n\ -._923:\n\ - cmp r4, #0xd\n\ - beq ._927 @cond_branch\n\ - b ._956\n\ -._927:\n\ - ldr r0, ._933\n\ - lsl r1, r3, #0x1\n\ - add r1, r1, r3\n\ - lsl r1, r1, #0x2\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - cmp r0, #0\n\ - bne ._929 @cond_branch\n\ - b ._956\n\ -._929:\n\ - ldr r1, ._933 + 4\n\ - ldr r0, ._933 + 8\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x4\n\ - add r0, r0, r1\n\ - ldrb r0, [r0, #0x2]\n\ - lsl r0, r0, #0x1c\n\ - cmp r0, #0\n\ - bge ._931 @cond_branch\n\ - ldr r1, ._933 + 12\n\ - ldr r0, ._933 + 16\n\ - b ._932\n\ -._934:\n\ - .align 2, 0\n\ -._933:\n\ - .word gBattleMoves\n\ - .word gProtectStructs\n\ - .word gBankAttacker\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_MoveHPDrain\n\ -._931:\n\ - ldr r1, ._936\n\ - ldr r0, ._936 + 4\n\ -._932:\n\ - str r0, [r1]\n\ - mov r2, #0x1\n\ - b ._935\n\ -._937:\n\ - .align 2, 0\n\ -._936:\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_MoveHPDrain_PPLoss\n\ -._921:\n\ - cmp r4, #0xb\n\ - beq ._938 @cond_branch\n\ - b ._956\n\ -._938:\n\ - ldr r0, ._944\n\ - lsl r1, r3, #0x1\n\ - add r1, r1, r3\n\ - lsl r1, r1, #0x2\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - cmp r0, #0\n\ - bne ._940 @cond_branch\n\ - b ._956\n\ -._940:\n\ - ldr r1, ._944 + 4\n\ - ldr r0, ._944 + 8\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x4\n\ - add r0, r0, r1\n\ - ldrb r0, [r0, #0x2]\n\ - lsl r0, r0, #0x1c\n\ - cmp r0, #0\n\ - bge ._942 @cond_branch\n\ - ldr r1, ._944 + 12\n\ - ldr r0, ._944 + 16\n\ - b ._943\n\ -._945:\n\ - .align 2, 0\n\ -._944:\n\ - .word gBattleMoves\n\ - .word gProtectStructs\n\ - .word gBankAttacker\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_MoveHPDrain\n\ -._942:\n\ - ldr r1, ._947\n\ - ldr r0, ._947 + 4\n\ -._943:\n\ - str r0, [r1]\n\ - mov r3, #0x1\n\ - mov r9, r3\n\ - b ._956\n\ -._948:\n\ - .align 2, 0\n\ -._947:\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_MoveHPDrain_PPLoss\n\ -._925:\n\ - cmp r4, #0xa\n\ - bne ._956 @cond_branch\n\ - ldr r1, ._954\n\ - mov r0, #0x58\n\ - mov r5, sl\n\ - mul r5, r5, r0\n\ - add r0, r5, #0\n\ - add r1, r1, #0x4c\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0x20\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._956 @cond_branch\n\ - ldr r2, ._954 + 4\n\ - mov r0, sl\n\ - lsl r1, r0, #0x2\n\ - add r0, r1, r2\n\ - ldr r3, [r0]\n\ - mov r4, #0x1\n\ - and r3, r3, r4\n\ - add r5, r1, #0\n\ - cmp r3, #0\n\ - bne ._951 @cond_branch\n\ - ldr r0, ._954 + 8\n\ - strb r3, [r0, #0x5]\n\ - ldr r1, ._954 + 12\n\ - ldr r0, ._954 + 16\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x4\n\ - add r0, r0, r1\n\ - ldrb r0, [r0, #0x2]\n\ - lsl r0, r0, #0x1c\n\ - cmp r0, #0\n\ - bge ._952 @cond_branch\n\ - ldr r1, ._954 + 20\n\ - ldr r0, ._954 + 24\n\ - b ._953\n\ -._955:\n\ - .align 2, 0\n\ -._954:\n\ - .word gBattleMons\n\ - .word +0x2017100\n\ - .word gBattleCommunication\n\ - .word gProtectStructs\n\ - .word gBankAttacker\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_FlashFireBoost\n\ -._952:\n\ - ldr r1, ._957\n\ - ldr r0, ._957 + 4\n\ -._953:\n\ - str r0, [r1]\n\ - add r0, r5, r2\n\ - ldr r1, [r0]\n\ - mov r2, #0x1\n\ - orr r1, r1, r2\n\ - str r1, [r0]\n\ - mov r1, #0x2\n\ - mov r9, r1\n\ - b ._956\n\ -._958:\n\ - .align 2, 0\n\ -._957:\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_FlashFireBoost_PPLoss\n\ -._951:\n\ - ldr r0, ._961\n\ - strb r4, [r0, #0x5]\n\ - ldr r1, ._961 + 4\n\ - ldr r0, ._961 + 8\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x4\n\ - add r0, r0, r1\n\ - ldrb r0, [r0, #0x2]\n\ - lsl r0, r0, #0x1c\n\ - cmp r0, #0\n\ - bge ._959 @cond_branch\n\ - ldr r1, ._961 + 12\n\ - ldr r0, ._961 + 16\n\ - b ._960\n\ -._962:\n\ - .align 2, 0\n\ -._961:\n\ - .word gBattleCommunication\n\ - .word gProtectStructs\n\ - .word gBankAttacker\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_FlashFireBoost\n\ -._959:\n\ - ldr r1, ._968\n\ - ldr r0, ._968 + 4\n\ -._960:\n\ - str r0, [r1]\n\ - mov r2, #0x2\n\ -._935:\n\ - mov r9, r2\n\ -._956:\n\ - mov r3, r9\n\ - cmp r3, #0x1\n\ - beq ._963 @cond_branch\n\ - bl ._1534\n\ -._963:\n\ - ldr r1, ._968 + 8\n\ - mov r0, #0x58\n\ - mov r5, sl\n\ - mul r5, r5, r0\n\ - add r0, r5, #0\n\ - add r1, r0, r1\n\ - ldrh r0, [r1, #0x2c]\n\ - ldrh r2, [r1, #0x28]\n\ - cmp r0, r2\n\ - bne ._965 @cond_branch\n\ - ldr r1, ._968 + 12\n\ - ldr r0, ._968 + 16\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x4\n\ - add r0, r0, r1\n\ - ldrb r0, [r0, #0x2]\n\ - lsl r0, r0, #0x1c\n\ - cmp r0, #0\n\ - bge ._966 @cond_branch\n\ - ldr r1, ._968\n\ - ldr r0, ._968 + 20\n\ - str r0, [r1]\n\ - bl ._1534\n\ -._969:\n\ - .align 2, 0\n\ -._968:\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_FlashFireBoost_PPLoss\n\ - .word gBattleMons\n\ - .word gProtectStructs\n\ - .word gBankAttacker\n\ - .word BattleScript_MoveHPDrain_FullHP\n\ -._966:\n\ - ldr r1, ._971\n\ - ldr r0, ._971 + 4\n\ - str r0, [r1]\n\ - bl ._1534\n\ -._972:\n\ - .align 2, 0\n\ -._971:\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_MoveHPDrain_FullHP_PPLoss\n\ -._965:\n\ - ldr r2, ._975\n\ - ldrh r0, [r1, #0x2c]\n\ - lsr r0, r0, #0x2\n\ - str r0, [r2]\n\ - cmp r0, #0\n\ - bne ._973 @cond_branch\n\ - mov r3, r9\n\ - str r3, [r2]\n\ -._973:\n\ - ldr r0, [r2]\n\ - neg r0, r0\n\ - str r0, [r2]\n\ - bl ._1534\n\ -._976:\n\ - .align 2, 0\n\ -._975:\n\ - .word gBattleMoveDamage\n\ -._748:\n\ - mov r5, r8\n\ - ldrb r0, [r5]\n\ - sub r0, r0, #0x9\n\ - cmp r0, #0x2f\n\ - bls ._977 @cond_branch\n\ - bl ._1534\n\ -._977:\n\ - lsl r0, r0, #0x2\n\ - ldr r1, ._980\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ -._981:\n\ - .align 2, 0\n\ -._980:\n\ - .word ._979\n\ -._979:\n\ - .word ._982\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._989\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._997\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1000\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1011\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1022\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1534\n\ - .word ._1029\n\ -._989:\n\ - ldr r0, ._1046\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1030 @cond_branch\n\ - bl ._1534\n\ -._1030:\n\ - cmp r3, #0xa5\n\ - bne ._1032 @cond_branch\n\ - bl ._1534\n\ -._1032:\n\ - ldr r0, ._1046 + 4\n\ - lsl r1, r3, #0x1\n\ - add r1, r1, r3\n\ - lsl r1, r1, #0x2\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - cmp r0, #0\n\ - bne ._1034 @cond_branch\n\ - bl ._1534\n\ -._1034:\n\ - ldr r2, ._1046 + 8\n\ - ldr r0, ._1046 + 12\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r1, r0, #0x2\n\ - add r0, r2, #0\n\ - add r0, r0, #0x8\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1037 @cond_branch\n\ - add r0, r2, #0\n\ - add r0, r0, #0xc\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1037 @cond_branch\n\ - bl ._1534\n\ -._1037:\n\ - ldr r1, ._1046 + 16\n\ - mov r0, #0x58\n\ - mov r2, sl\n\ - mul r2, r2, r0\n\ - add r0, r2, #0\n\ - add r1, r0, r1\n\ - add r3, r1, #0\n\ - add r3, r3, #0x21\n\ - ldrb r0, [r3]\n\ - cmp r0, r4\n\ - bne ._1039 @cond_branch\n\ - bl ._1534\n\ -._1039:\n\ - add r2, r1, #0\n\ - add r2, r2, #0x22\n\ - ldrb r0, [r2]\n\ - cmp r0, r4\n\ - bne ._1041 @cond_branch\n\ - bl ._1534\n\ -._1041:\n\ - ldrh r0, [r1, #0x28]\n\ - cmp r0, #0\n\ - bne ._1043 @cond_branch\n\ - bl ._1534\n\ -._1043:\n\ - strb r4, [r3]\n\ - strb r4, [r2]\n\ - ldr r1, ._1046 + 20\n\ - mov r0, #0xfd\n\ - strb r0, [r1]\n\ - mov r0, #0x3\n\ - strb r0, [r1, #0x1]\n\ - strb r4, [r1, #0x2]\n\ - mov r0, #0xff\n\ - strb r0, [r1, #0x3]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1046 + 24\n\ - ldr r0, ._1046 + 28\n\ - str r0, [r1]\n\ - bl ._1392\n\ -._1047:\n\ - .align 2, 0\n\ -._1046:\n\ - .word gBattleMoveFlags\n\ - .word gBattleMoves\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBattleMons\n\ - .word gBattleTextBuff1\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_ColorChangeActivates\n\ -._997:\n\ - ldr r0, ._1061\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1048 @cond_branch\n\ - bl ._1534\n\ -._1048:\n\ - ldr r1, ._1061 + 4\n\ - ldr r0, ._1061 + 8\n\ - ldrb r2, [r0]\n\ - mov r0, #0x58\n\ - mul r0, r0, r2\n\ - add r4, r0, r1\n\ - ldrh r0, [r4, #0x28]\n\ - cmp r0, #0\n\ - bne ._1050 @cond_branch\n\ - bl ._1534\n\ -._1050:\n\ - ldr r0, ._1061 + 12\n\ - lsl r1, r2, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1052 @cond_branch\n\ - bl ._1534\n\ -._1052:\n\ - ldr r2, ._1061 + 16\n\ - ldr r0, ._1061 + 20\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r1, r0, #0x2\n\ - add r0, r2, #0\n\ - add r0, r0, #0x8\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1055 @cond_branch\n\ - add r0, r2, #0\n\ - add r0, r0, #0xc\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1055 @cond_branch\n\ - bl ._1534\n\ -._1055:\n\ - ldr r1, ._1061 + 24\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r2, #0x1\n\ - add r0, r2, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1057 @cond_branch\n\ - bl ._1534\n\ -._1057:\n\ - ldr r1, ._1061 + 28\n\ - ldrh r0, [r4, #0x2c]\n\ - lsr r0, r0, #0x4\n\ - str r0, [r1]\n\ - cmp r0, #0\n\ - bne ._1059 @cond_branch\n\ - str r2, [r1]\n\ -._1059:\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1061 + 32\n\ - ldr r0, ._1061 + 36\n\ - str r0, [r1]\n\ - bl ._1392\n\ -._1062:\n\ - .align 2, 0\n\ -._1061:\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBattleMoves\n\ - .word gBattleMoveDamage\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_RoughSkinActivates\n\ -._1000:\n\ - ldr r0, ._1078\n\ - ldrb r1, [r0]\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1063 @cond_branch\n\ - ldr r0, ._1078 + 4\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1064 @cond_branch\n\ - bl ._1534\n\ -._1064:\n\ - ldr r1, ._1078 + 8\n\ - ldr r0, ._1078 + 12\n\ - ldrb r2, [r0]\n\ - mov r0, #0x58\n\ - mul r0, r0, r2\n\ - add r0, r0, r1\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1066 @cond_branch\n\ - bl ._1534\n\ -._1066:\n\ - ldr r0, ._1078 + 16\n\ - lsl r1, r2, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1068 @cond_branch\n\ - bl ._1534\n\ -._1068:\n\ - ldr r2, ._1078 + 20\n\ - ldr r0, ._1078 + 24\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r1, r0, #0x2\n\ - add r0, r2, #0\n\ - add r0, r0, #0x8\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1071 @cond_branch\n\ - add r0, r2, #0\n\ - add r0, r0, #0xc\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1071 @cond_branch\n\ - bl ._1534\n\ -._1071:\n\ - ldr r1, ._1078 + 28\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1073 @cond_branch\n\ - bl ._1534\n\ -._1073:\n\ - ldr r5, ._1078 + 32\n\ - mov r4, #0x3\n\ -._1075:\n\ - bl Random\n\ - and r0, r0, r4\n\ - strb r0, [r5, #0x3]\n\ - cmp r0, #0\n\ - beq ._1075 @cond_branch\n\ - ldr r1, ._1078 + 32\n\ - ldrb r0, [r1, #0x3]\n\ - cmp r0, #0x3\n\ - bne ._1076 @cond_branch\n\ - add r0, r0, #0x2\n\ - strb r0, [r1, #0x3]\n\ -._1076:\n\ - ldrb r0, [r1, #0x3]\n\ - add r0, r0, #0x40\n\ - strb r0, [r1, #0x3]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1078 + 36\n\ - ldr r0, ._1078 + 40\n\ - str r0, [r1]\n\ - ldr r2, ._1078 + 44\n\ - ldr r0, [r2]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x6\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - bl ._1392\n\ -._1079:\n\ - .align 2, 0\n\ -._1078:\n\ - .word gUnknown_02023A14_50\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBattleMoves\n\ - .word gBattleCommunication\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_ApplySecondaryEffect\n\ - .word gHitMarker\n\ -._1063:\n\ - ldr r0, ._1096\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1080 @cond_branch\n\ - bl ._1534\n\ -._1080:\n\ - ldr r1, ._1096 + 4\n\ - ldr r0, ._1096 + 8\n\ - ldrb r2, [r0]\n\ - mov r0, #0x58\n\ - mul r0, r0, r2\n\ - add r0, r0, r1\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1082 @cond_branch\n\ - bl ._1534\n\ -._1082:\n\ - ldr r0, ._1096 + 12\n\ - lsl r1, r2, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1084 @cond_branch\n\ - bl ._1534\n\ -._1084:\n\ - ldr r2, ._1096 + 16\n\ - ldr r0, ._1096 + 20\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r1, r0, #0x2\n\ - add r0, r2, #0\n\ - add r0, r0, #0x8\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1087 @cond_branch\n\ - add r0, r2, #0\n\ - add r0, r0, #0xc\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1087 @cond_branch\n\ - bl ._1534\n\ -._1087:\n\ - ldr r1, ._1096 + 24\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1089 @cond_branch\n\ - bl ._1534\n\ -._1089:\n\ - bl Random\n\ - lsl r0, r0, #0x10\n\ - lsr r0, r0, #0x10\n\ - mov r1, #0xa\n\ - bl __umodsi3\n\ - lsl r0, r0, #0x10\n\ - cmp r0, #0\n\ - beq ._1091 @cond_branch\n\ - bl ._1534\n\ -._1091:\n\ - ldr r5, ._1096 + 28\n\ - mov r4, #0x3\n\ -._1093:\n\ - bl Random\n\ - and r0, r0, r4\n\ - strb r0, [r5, #0x3]\n\ - cmp r0, #0\n\ - beq ._1093 @cond_branch\n\ - ldr r1, ._1096 + 28\n\ - ldrb r0, [r1, #0x3]\n\ - cmp r0, #0x3\n\ - bne ._1094 @cond_branch\n\ - add r0, r0, #0x2\n\ - strb r0, [r1, #0x3]\n\ -._1094:\n\ - ldrb r0, [r1, #0x3]\n\ - add r0, r0, #0x40\n\ - strb r0, [r1, #0x3]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1096 + 32\n\ - ldr r0, ._1096 + 36\n\ - str r0, [r1]\n\ - ldr r2, ._1096 + 40\n\ - ldr r0, [r2]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x6\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - bl ._1392\n\ -._1097:\n\ - .align 2, 0\n\ -._1096:\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBattleMoves\n\ - .word gBattleCommunication\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_ApplySecondaryEffect\n\ - .word gHitMarker\n\ -._1011:\n\ - ldr r0, ._1111\n\ - ldrb r1, [r0]\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1098 @cond_branch\n\ - ldr r0, ._1111 + 4\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1099 @cond_branch\n\ - bl ._1534\n\ -._1099:\n\ - ldr r1, ._1111 + 8\n\ - ldr r0, ._1111 + 12\n\ - ldrb r2, [r0]\n\ - mov r0, #0x58\n\ - mul r0, r0, r2\n\ - add r0, r0, r1\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1101 @cond_branch\n\ - bl ._1534\n\ -._1101:\n\ - ldr r0, ._1111 + 16\n\ - lsl r1, r2, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1103 @cond_branch\n\ - bl ._1534\n\ -._1103:\n\ - ldr r2, ._1111 + 20\n\ - ldr r0, ._1111 + 24\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r1, r0, #0x2\n\ - add r0, r2, #0\n\ - add r0, r0, #0x8\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1106 @cond_branch\n\ - add r0, r2, #0\n\ - add r0, r0, #0xc\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1106 @cond_branch\n\ - bl ._1534\n\ -._1106:\n\ - ldr r1, ._1111 + 28\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1108 @cond_branch\n\ - bl ._1534\n\ -._1108:\n\ - ldr r1, ._1111 + 32\n\ - mov r0, #0x42\n\ - strb r0, [r1, #0x3]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1111 + 36\n\ - ldr r0, ._1111 + 40\n\ - str r0, [r1]\n\ - ldr r2, ._1111 + 44\n\ - ldr r0, [r2]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x6\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - bl ._1392\n\ -._1112:\n\ - .align 2, 0\n\ -._1111:\n\ - .word gUnknown_02023A14_50\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBattleMoves\n\ - .word gBattleCommunication\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_ApplySecondaryEffect\n\ - .word gHitMarker\n\ -._1098:\n\ - ldr r0, ._1127\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1113 @cond_branch\n\ - bl ._1534\n\ -._1113:\n\ - ldr r1, ._1127 + 4\n\ - ldr r0, ._1127 + 8\n\ - ldrb r2, [r0]\n\ - mov r0, #0x58\n\ - mul r0, r0, r2\n\ - add r0, r0, r1\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1115 @cond_branch\n\ - bl ._1534\n\ -._1115:\n\ - ldr r0, ._1127 + 12\n\ - lsl r1, r2, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1117 @cond_branch\n\ - bl ._1534\n\ -._1117:\n\ - ldr r2, ._1127 + 16\n\ - ldr r0, ._1127 + 20\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r1, r0, #0x2\n\ - add r0, r2, #0\n\ - add r0, r0, #0x8\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1120 @cond_branch\n\ - add r0, r2, #0\n\ - add r0, r0, #0xc\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1120 @cond_branch\n\ - bl ._1534\n\ -._1120:\n\ - ldr r1, ._1127 + 24\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1122 @cond_branch\n\ - bl ._1534\n\ -._1122:\n\ - bl Random\n\ - lsl r0, r0, #0x10\n\ - lsr r0, r0, #0x10\n\ - mov r1, #0x3\n\ - bl __umodsi3\n\ - lsl r0, r0, #0x10\n\ - cmp r0, #0\n\ - beq ._1124 @cond_branch\n\ - bl ._1534\n\ -._1124:\n\ - ldr r1, ._1127 + 28\n\ - mov r0, #0x42\n\ - strb r0, [r1, #0x3]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1127 + 32\n\ - ldr r0, ._1127 + 36\n\ - str r0, [r1]\n\ - ldr r2, ._1127 + 40\n\ - ldr r0, [r2]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x6\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - bl ._1392\n\ -._1128:\n\ - .align 2, 0\n\ -._1127:\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBattleMoves\n\ - .word gBattleCommunication\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_ApplySecondaryEffect\n\ - .word gHitMarker\n\ -._982:\n\ - ldr r0, ._1142\n\ - ldrb r1, [r0]\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1129 @cond_branch\n\ - ldr r0, ._1142 + 4\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1130 @cond_branch\n\ - bl ._1534\n\ -._1130:\n\ - ldr r1, ._1142 + 8\n\ - ldr r0, ._1142 + 12\n\ - ldrb r2, [r0]\n\ - mov r0, #0x58\n\ - mul r0, r0, r2\n\ - add r0, r0, r1\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1132 @cond_branch\n\ - bl ._1534\n\ -._1132:\n\ - ldr r0, ._1142 + 16\n\ - lsl r1, r2, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1134 @cond_branch\n\ - bl ._1534\n\ -._1134:\n\ - ldr r2, ._1142 + 20\n\ - ldr r0, ._1142 + 24\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r1, r0, #0x2\n\ - add r0, r2, #0\n\ - add r0, r0, #0x8\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1137 @cond_branch\n\ - add r0, r2, #0\n\ - add r0, r0, #0xc\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1137 @cond_branch\n\ - bl ._1534\n\ -._1137:\n\ - ldr r1, ._1142 + 28\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1139 @cond_branch\n\ - bl ._1534\n\ -._1139:\n\ - ldr r1, ._1142 + 32\n\ - mov r0, #0x45\n\ - strb r0, [r1, #0x3]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1142 + 36\n\ - ldr r0, ._1142 + 40\n\ - str r0, [r1]\n\ - ldr r2, ._1142 + 44\n\ - ldr r0, [r2]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x6\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - bl ._1392\n\ -._1143:\n\ - .align 2, 0\n\ -._1142:\n\ - .word gUnknown_02023A14_50\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBattleMoves\n\ - .word gBattleCommunication\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_ApplySecondaryEffect\n\ - .word gHitMarker\n\ -._1129:\n\ - ldr r0, ._1158\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1144 @cond_branch\n\ - bl ._1534\n\ -._1144:\n\ - ldr r1, ._1158 + 4\n\ - ldr r0, ._1158 + 8\n\ - ldrb r2, [r0]\n\ - mov r0, #0x58\n\ - mul r0, r0, r2\n\ - add r0, r0, r1\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1146 @cond_branch\n\ - bl ._1534\n\ -._1146:\n\ - ldr r0, ._1158 + 12\n\ - lsl r1, r2, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1148 @cond_branch\n\ - bl ._1534\n\ -._1148:\n\ - ldr r2, ._1158 + 16\n\ - ldr r0, ._1158 + 20\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r1, r0, #0x2\n\ - add r0, r2, #0\n\ - add r0, r0, #0x8\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1151 @cond_branch\n\ - add r0, r2, #0\n\ - add r0, r0, #0xc\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1151 @cond_branch\n\ - bl ._1534\n\ -._1151:\n\ - ldr r1, ._1158 + 24\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1153 @cond_branch\n\ - bl ._1534\n\ -._1153:\n\ - bl Random\n\ - lsl r0, r0, #0x10\n\ - lsr r0, r0, #0x10\n\ - mov r1, #0x3\n\ - bl __umodsi3\n\ - lsl r0, r0, #0x10\n\ - cmp r0, #0\n\ - beq ._1155 @cond_branch\n\ - bl ._1534\n\ -._1155:\n\ - ldr r1, ._1158 + 28\n\ - mov r0, #0x45\n\ - strb r0, [r1, #0x3]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1158 + 32\n\ - ldr r0, ._1158 + 36\n\ - str r0, [r1]\n\ - ldr r2, ._1158 + 40\n\ - ldr r0, [r2]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x6\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - bl ._1392\n\ -._1159:\n\ - .align 2, 0\n\ -._1158:\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBattleMoves\n\ - .word gBattleCommunication\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_ApplySecondaryEffect\n\ - .word gHitMarker\n\ -._1022:\n\ - ldr r0, ._1173\n\ - ldrb r1, [r0]\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1160 @cond_branch\n\ - ldr r0, ._1173 + 4\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1161 @cond_branch\n\ - bl ._1534\n\ -._1161:\n\ - ldr r1, ._1173 + 8\n\ - ldr r0, ._1173 + 12\n\ - ldrb r2, [r0]\n\ - mov r0, #0x58\n\ - mul r0, r0, r2\n\ - add r0, r0, r1\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1163 @cond_branch\n\ - bl ._1534\n\ -._1163:\n\ - ldr r0, ._1173 + 16\n\ - lsl r1, r2, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1165 @cond_branch\n\ - bl ._1534\n\ -._1165:\n\ - ldr r1, ._1173 + 20\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1167 @cond_branch\n\ - bl ._1534\n\ -._1167:\n\ - ldr r2, ._1173 + 24\n\ - ldr r0, ._1173 + 28\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r1, r0, #0x2\n\ - add r0, r2, #0\n\ - add r0, r0, #0x8\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1170 @cond_branch\n\ - add r0, r2, #0\n\ - add r0, r0, #0xc\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1170 @cond_branch\n\ - bl ._1534\n\ -._1170:\n\ - ldr r1, ._1173 + 32\n\ - mov r0, #0x43\n\ - strb r0, [r1, #0x3]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1173 + 36\n\ - ldr r0, ._1173 + 40\n\ - str r0, [r1]\n\ - ldr r2, ._1173 + 44\n\ - ldr r0, [r2]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x6\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - bl ._1392\n\ -._1174:\n\ - .align 2, 0\n\ -._1173:\n\ - .word gUnknown_02023A14_50\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gBattleMoves\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBattleCommunication\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_ApplySecondaryEffect\n\ - .word gHitMarker\n\ -._1160:\n\ - ldr r0, ._1189\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1175 @cond_branch\n\ - bl ._1534\n\ -._1175:\n\ - ldr r1, ._1189 + 4\n\ - ldr r0, ._1189 + 8\n\ - ldrb r2, [r0]\n\ - mov r0, #0x58\n\ - mul r0, r0, r2\n\ - add r0, r0, r1\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1177 @cond_branch\n\ - bl ._1534\n\ -._1177:\n\ - ldr r0, ._1189 + 12\n\ - lsl r1, r2, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1179 @cond_branch\n\ - bl ._1534\n\ -._1179:\n\ - ldr r1, ._1189 + 16\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1181 @cond_branch\n\ - bl ._1534\n\ -._1181:\n\ - ldr r2, ._1189 + 20\n\ - ldr r0, ._1189 + 24\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r1, r0, #0x2\n\ - add r0, r2, #0\n\ - add r0, r0, #0x8\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1184 @cond_branch\n\ - add r0, r2, #0\n\ - add r0, r0, #0xc\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1184 @cond_branch\n\ - bl ._1534\n\ -._1184:\n\ - bl Random\n\ - lsl r0, r0, #0x10\n\ - lsr r0, r0, #0x10\n\ - mov r1, #0x3\n\ - bl __umodsi3\n\ - lsl r0, r0, #0x10\n\ - cmp r0, #0\n\ - beq ._1186 @cond_branch\n\ - bl ._1534\n\ -._1186:\n\ - ldr r1, ._1189 + 28\n\ - mov r0, #0x43\n\ - strb r0, [r1, #0x3]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1189 + 32\n\ - ldr r0, ._1189 + 36\n\ - str r0, [r1]\n\ - ldr r2, ._1189 + 40\n\ - ldr r0, [r2]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x6\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - bl ._1392\n\ -._1190:\n\ - .align 2, 0\n\ -._1189:\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gBattleMoves\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBattleCommunication\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_ApplySecondaryEffect\n\ - .word gHitMarker\n\ -._1029:\n\ - ldr r0, ._1217\n\ - ldrb r1, [r0]\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1191 @cond_branch\n\ - b ._1192\n\ -._1191:\n\ - ldr r0, ._1217 + 4\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1193 @cond_branch\n\ - bl ._1534\n\ -._1193:\n\ - ldr r5, ._1217 + 8\n\ - ldr r7, ._1217 + 12\n\ - ldrb r1, [r7]\n\ - mov r6, #0x58\n\ - add r0, r1, #0\n\ - mul r0, r0, r6\n\ - add r4, r0, r5\n\ - ldrh r0, [r4, #0x28]\n\ - cmp r0, #0\n\ - bne ._1195 @cond_branch\n\ - bl ._1534\n\ -._1195:\n\ - ldr r0, ._1217 + 16\n\ - lsl r1, r1, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1197 @cond_branch\n\ - bl ._1534\n\ -._1197:\n\ - ldr r1, ._1217 + 20\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1199 @cond_branch\n\ - bl ._1534\n\ -._1199:\n\ - ldr r3, ._1217 + 24\n\ - ldr r0, ._1217 + 28\n\ - mov r8, r0\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r2, r0, #0x2\n\ - add r0, r3, #0\n\ - add r0, r0, #0x8\n\ - add r0, r2, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1202 @cond_branch\n\ - add r0, r3, #0\n\ - add r0, r0, #0xc\n\ - add r0, r2, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1202 @cond_branch\n\ - bl ._1534\n\ -._1202:\n\ - add r0, r1, #0\n\ - mul r0, r0, r6\n\ - add r0, r0, r5\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1204 @cond_branch\n\ - bl ._1534\n\ -._1204:\n\ - add r0, r4, #0\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, #0xc\n\ - bne ._1206 @cond_branch\n\ - bl ._1534\n\ -._1206:\n\ - ldr r0, [sp, #0x8]\n\ - ldr r1, [sp, #0x10]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - add r4, r0, #0\n\ - ldr r0, [sp, #0xc]\n\ - ldr r1, [sp, #0x14]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsl r4, r4, #0x18\n\ - lsl r0, r0, #0x18\n\ - cmp r4, r0\n\ - bne ._1208 @cond_branch\n\ - bl ._1534\n\ -._1208:\n\ - ldrb r0, [r7]\n\ - mul r0, r0, r6\n\ - add r4, r5, #0\n\ - add r4, r4, #0x50\n\ - add r0, r0, r4\n\ - ldr r0, [r0]\n\ - mov r1, #0xf0\n\ - lsl r1, r1, #0xc\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1210 @cond_branch\n\ - bl ._1534\n\ -._1210:\n\ - ldr r0, [sp, #0x8]\n\ - ldr r1, [sp, #0x10]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0xff\n\ - bne ._1212 @cond_branch\n\ - bl ._1534\n\ -._1212:\n\ - ldr r0, [sp, #0xc]\n\ - ldr r1, [sp, #0x14]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0xff\n\ - bne ._1214 @cond_branch\n\ - bl ._1534\n\ -._1214:\n\ - ldrb r0, [r7]\n\ - add r2, r0, #0\n\ - mul r2, r2, r6\n\ - add r2, r2, r4\n\ - ldr r1, ._1217 + 32\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldr r1, [r0]\n\ - lsl r1, r1, #0x10\n\ - ldr r0, [r2]\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1217 + 36\n\ - ldr r0, ._1217 + 40\n\ - str r0, [r1]\n\ - bl ._1392\n\ -._1218:\n\ - .align 2, 0\n\ -._1217:\n\ - .word gUnknown_02023A14_50\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gBattleMoves\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBitTable\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_CuteCharmActivates\n\ -._1192:\n\ - ldr r0, ._1245\n\ - ldrb r1, [r0]\n\ - mov r0, #0x29\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1219 @cond_branch\n\ - bl ._1534\n\ -._1219:\n\ - ldr r5, ._1245 + 4\n\ - ldr r7, ._1245 + 8\n\ - ldrb r1, [r7]\n\ - mov r6, #0x58\n\ - add r0, r1, #0\n\ - mul r0, r0, r6\n\ - add r0, r0, r5\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1221 @cond_branch\n\ - bl ._1534\n\ -._1221:\n\ - ldr r0, ._1245 + 12\n\ - lsl r1, r1, #0x4\n\ - add r1, r1, r0\n\ - ldrb r0, [r1, #0x1]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._1223 @cond_branch\n\ - bl ._1534\n\ -._1223:\n\ - ldr r1, ._1245 + 16\n\ - lsl r0, r3, #0x1\n\ - add r0, r0, r3\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldrb r1, [r0, #0x8]\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1225 @cond_branch\n\ - bl ._1534\n\ -._1225:\n\ - ldr r3, ._1245 + 20\n\ - ldr r0, ._1245 + 24\n\ - mov r8, r0\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r2, r0, #0x2\n\ - add r0, r3, #0\n\ - add r0, r0, #0x8\n\ - add r0, r2, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1228 @cond_branch\n\ - add r0, r3, #0\n\ - add r0, r0, #0xc\n\ - add r0, r2, r0\n\ - ldr r0, [r0]\n\ - cmp r0, #0\n\ - bne ._1228 @cond_branch\n\ - bl ._1534\n\ -._1228:\n\ - add r0, r1, #0\n\ - mul r0, r0, r6\n\ - add r0, r0, r5\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - bne ._1230 @cond_branch\n\ - bl ._1534\n\ -._1230:\n\ - bl Random\n\ - lsl r0, r0, #0x10\n\ - lsr r0, r0, #0x10\n\ - mov r1, #0x3\n\ - bl __umodsi3\n\ - lsl r0, r0, #0x10\n\ - cmp r0, #0\n\ - beq ._1232 @cond_branch\n\ - bl ._1534\n\ -._1232:\n\ - ldrb r0, [r7]\n\ - mul r0, r0, r6\n\ - add r0, r0, r5\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, #0xc\n\ - bne ._1234 @cond_branch\n\ - bl ._1534\n\ -._1234:\n\ - ldr r0, [sp, #0x8]\n\ - ldr r1, [sp, #0x10]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - add r4, r0, #0\n\ - ldr r0, [sp, #0xc]\n\ - ldr r1, [sp, #0x14]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsl r4, r4, #0x18\n\ - lsl r0, r0, #0x18\n\ - cmp r4, r0\n\ - bne ._1236 @cond_branch\n\ - bl ._1534\n\ -._1236:\n\ - ldrb r0, [r7]\n\ - mul r0, r0, r6\n\ - add r4, r5, #0\n\ - add r4, r4, #0x50\n\ - add r0, r0, r4\n\ - ldr r0, [r0]\n\ - mov r1, #0xf0\n\ - lsl r1, r1, #0xc\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1238 @cond_branch\n\ - bl ._1534\n\ -._1238:\n\ - ldr r0, [sp, #0x8]\n\ - ldr r1, [sp, #0x10]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0xff\n\ - bne ._1240 @cond_branch\n\ - bl ._1534\n\ -._1240:\n\ - ldr r0, [sp, #0xc]\n\ - ldr r1, [sp, #0x14]\n\ - bl GetGenderFromSpeciesAndPersonality\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0xff\n\ - bne ._1242 @cond_branch\n\ - bl ._1534\n\ -._1242:\n\ - ldrb r0, [r7]\n\ - add r2, r0, #0\n\ - mul r2, r2, r6\n\ - add r2, r2, r4\n\ - ldr r1, ._1245 + 28\n\ - mov r3, r8\n\ - ldrb r0, [r3]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldr r1, [r0]\n\ - lsl r1, r1, #0x10\n\ - ldr r0, [r2]\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1245 + 32\n\ - ldr r0, ._1245 + 36\n\ - str r0, [r1]\n\ - bl ._1392\n\ -._1246:\n\ - .align 2, 0\n\ -._1245:\n\ - .word gBattleMoveFlags\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gProtectStructs\n\ - .word gBattleMoves\n\ - .word gSpecialStatuses\n\ - .word gBankTarget\n\ - .word gBitTable\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_CuteCharmActivates\n\ -._749:\n\ - mov r5, #0x0\n\ - mov sl, r5\n\ - ldr r0, ._1251\n\ - ldrb r0, [r0]\n\ - cmp sl, r0\n\ - bcc ._1366 @cond_branch\n\ - bl ._1534\n\ -._1366:\n\ - ldr r1, ._1251 + 4\n\ - mov r0, #0x58\n\ - mov r2, sl\n\ - mul r2, r2, r0\n\ - add r0, r2, #0\n\ - add r0, r0, r1\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - sub r0, r0, #0x7\n\ - add r2, r1, #0\n\ - cmp r0, #0x41\n\ - bls ._1249 @cond_branch\n\ - b ._1346\n\ -._1249:\n\ - lsl r0, r0, #0x2\n\ - ldr r1, ._1251 + 8\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov pc, r0\n\ -._1252:\n\ - .align 2, 0\n\ -._1251:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ - .word ._1253\n\ -._1253:\n\ - .word ._1254\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1259\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1319\n\ - .word ._1346\n\ - .word ._1264\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1267\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1287\n\ - .word ._1288\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1346\n\ - .word ._1319\n\ -._1264:\n\ - mov r0, #0x58\n\ - mov r3, sl\n\ - mul r3, r3, r0\n\ - add r0, r3, #0\n\ - add r1, r2, #0\n\ - add r1, r1, #0x4c\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - ldr r1, ._1323\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1320 @cond_branch\n\ - b ._1346\n\ -._1320:\n\ - ldr r0, ._1323 + 4\n\ - ldr r1, ._1323 + 8\n\ - b ._1331\n\ -._1324:\n\ - .align 2, 0\n\ -._1323:\n\ - .word 0xf88\n\ - .word gBattleTextBuff1\n\ - .word gStatusConditionString_PoisonJpn\n\ -._1267:\n\ - mov r0, #0x58\n\ - mov r1, sl\n\ - mul r1, r1, r0\n\ - add r0, r1, #0\n\ - add r1, r2, #0\n\ - add r1, r1, #0x50\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0x7\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1325 @cond_branch\n\ - b ._1346\n\ -._1325:\n\ - ldr r0, ._1328\n\ - ldr r1, ._1328 + 4\n\ - bl StringCopy\n\ - mov r2, #0x2\n\ - mov r9, r2\n\ - b ._1343\n\ -._1329:\n\ - .align 2, 0\n\ -._1328:\n\ - .word gBattleTextBuff1\n\ - .word gStatusConditionString_ConfusionJpn\n\ -._1254:\n\ - mov r0, #0x58\n\ - mov r3, sl\n\ - mul r3, r3, r0\n\ - add r0, r3, #0\n\ - add r1, r2, #0\n\ - add r1, r1, #0x4c\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0x40\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1346 @cond_branch\n\ - ldr r0, ._1332\n\ - ldr r1, ._1332 + 4\n\ - b ._1331\n\ -._1333:\n\ - .align 2, 0\n\ -._1332:\n\ - .word gBattleTextBuff1\n\ - .word gStatusConditionString_ParalysisJpn\n\ -._1319:\n\ - mov r0, #0x58\n\ - mov r3, sl\n\ - mul r3, r3, r0\n\ - add r0, r2, #0\n\ - add r0, r0, #0x4c\n\ - add r0, r3, r0\n\ - ldr r0, [r0]\n\ - mov r1, #0x7\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1346 @cond_branch\n\ - add r2, r2, #0x50\n\ - add r2, r3, r2\n\ - ldr r0, [r2]\n\ - ldr r1, ._1336\n\ - and r0, r0, r1\n\ - str r0, [r2]\n\ - ldr r0, ._1336 + 4\n\ - ldr r1, ._1336 + 8\n\ - bl StringCopy\n\ - mov r0, #0x1\n\ - mov r9, r0\n\ - b ._1343\n\ -._1337:\n\ - .align 2, 0\n\ -._1336:\n\ - .word 0xf7ffffff\n\ - .word gBattleTextBuff1\n\ - .word gStatusConditionString_SleepJpn\n\ -._1288:\n\ - mov r0, #0x58\n\ - mov r1, sl\n\ - mul r1, r1, r0\n\ - add r0, r1, #0\n\ - add r1, r2, #0\n\ - add r1, r1, #0x4c\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0x10\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1346 @cond_branch\n\ - ldr r0, ._1340\n\ - ldr r1, ._1340 + 4\n\ - bl StringCopy\n\ - mov r2, #0x1\n\ - mov r9, r2\n\ - b ._1343\n\ -._1341:\n\ - .align 2, 0\n\ -._1340:\n\ - .word gBattleTextBuff1\n\ - .word gStatusConditionString_BurnJpn\n\ -._1287:\n\ - mov r0, #0x58\n\ - mov r3, sl\n\ - mul r3, r3, r0\n\ - add r0, r3, #0\n\ - add r1, r2, #0\n\ - add r1, r1, #0x4c\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0x20\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1346 @cond_branch\n\ - ldr r0, ._1344\n\ - ldr r1, ._1344 + 4\n\ -._1331:\n\ - bl StringCopy\n\ - mov r5, #0x1\n\ - mov r9, r5\n\ - b ._1343\n\ -._1345:\n\ - .align 2, 0\n\ -._1344:\n\ - .word gBattleTextBuff1\n\ - .word gStatusConditionString_IceJpn\n\ -._1259:\n\ - mov r0, #0x58\n\ - mov r1, sl\n\ - mul r1, r1, r0\n\ - add r0, r1, #0\n\ - add r1, r2, #0\n\ - add r1, r1, #0x50\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0xf0\n\ - lsl r1, r1, #0xc\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1346 @cond_branch\n\ - ldr r0, ._1352\n\ - ldr r1, ._1352 + 4\n\ - bl StringCopy\n\ - mov r2, #0x3\n\ - mov r9, r2\n\ -._1346:\n\ - mov r3, r9\n\ - cmp r3, #0\n\ - beq ._1347 @cond_branch\n\ -._1343:\n\ - mov r5, r9\n\ - cmp r5, #0x2\n\ - beq ._1348 @cond_branch\n\ - cmp r5, #0x2\n\ - bgt ._1349 @cond_branch\n\ - cmp r5, #0x1\n\ - beq ._1350 @cond_branch\n\ - b ._1355\n\ -._1353:\n\ - .align 2, 0\n\ -._1352:\n\ - .word gBattleTextBuff1\n\ - .word gStatusConditionString_LoveJpn\n\ -._1349:\n\ - mov r0, r9\n\ - cmp r0, #0x3\n\ - beq ._1354 @cond_branch\n\ - b ._1355\n\ -._1350:\n\ - ldr r1, ._1357\n\ - mov r0, #0x58\n\ - mov r2, sl\n\ - mul r2, r2, r0\n\ - add r1, r1, #0x4c\n\ - add r2, r2, r1\n\ - mov r0, #0x0\n\ - b ._1356\n\ -._1358:\n\ - .align 2, 0\n\ -._1357:\n\ - .word gBattleMons\n\ -._1348:\n\ - ldr r1, ._1360\n\ - mov r0, #0x58\n\ - mov r2, sl\n\ - mul r2, r2, r0\n\ - add r1, r1, #0x50\n\ - add r2, r2, r1\n\ - ldr r0, [r2]\n\ - mov r1, #0x8\n\ - neg r1, r1\n\ - b ._1359\n\ -._1361:\n\ - .align 2, 0\n\ -._1360:\n\ - .word gBattleMons\n\ -._1354:\n\ - ldr r1, ._1363\n\ - mov r0, #0x58\n\ - mov r2, sl\n\ - mul r2, r2, r0\n\ - add r1, r1, #0x50\n\ - add r2, r2, r1\n\ - ldr r0, [r2]\n\ - ldr r1, ._1363 + 4\n\ -._1359:\n\ - and r0, r0, r1\n\ -._1356:\n\ - str r0, [r2]\n\ -._1355:\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1363 + 8\n\ - ldr r0, ._1363 + 12\n\ - str r0, [r1]\n\ - ldr r0, ._1363 + 16\n\ - ldr r1, ._1363 + 20\n\ - add r0, r0, r1\n\ - mov r2, sl\n\ - strb r2, [r0]\n\ - ldr r4, ._1363 + 24\n\ - strb r2, [r4]\n\ - ldrb r1, [r4]\n\ - mov r0, #0x58\n\ - mul r0, r0, r1\n\ - ldr r1, ._1363 + 28\n\ - add r0, r0, r1\n\ - str r0, [sp]\n\ - mov r0, #0x0\n\ - mov r1, #0x28\n\ - mov r2, #0x0\n\ - mov r3, #0x4\n\ - bl EmitSetMonData\n\ - ldrb r0, [r4]\n\ - bl MarkBufferBankForExecution\n\ - bl ._1540\n\ -._1364:\n\ - .align 2, 0\n\ -._1363:\n\ - .word gBattleMons\n\ - .word 0xfff0ffff\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_AbilityCuredStatus\n\ - .word +0x2000000\n\ - .word 0x16003\n\ - .word gActiveBank\n\ - .word gUnknown_02024ACC\n\ -._1347:\n\ - mov r0, sl\n\ - add r0, r0, #0x1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov sl, r0\n\ - ldr r0, ._1368\n\ - ldrb r0, [r0]\n\ - cmp sl, r0\n\ - bcs ._1365 @cond_branch\n\ - b ._1366\n\ -._1365:\n\ - bl ._1534\n\ -._1369:\n\ - .align 2, 0\n\ -._1368:\n\ - .word gNoOfAllBanks\n\ -._750:\n\ - mov r3, #0x0\n\ - mov sl, r3\n\ - ldr r0, ._1377\n\ - ldrb r0, [r0]\n\ - cmp sl, r0\n\ - bcc ._1370 @cond_branch\n\ - b ._1534\n\ -._1370:\n\ - ldr r4, ._1377 + 4\n\ -._1375:\n\ - mov r0, #0x58\n\ - mov r5, sl\n\ - mul r5, r5, r0\n\ - add r0, r5, #0\n\ - add r0, r0, r4\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x3b\n\ - bne ._1373 @cond_branch\n\ - mov r0, sl\n\ - bl CastformDataTypeChange\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ - cmp r0, #0\n\ - beq ._1373 @cond_branch\n\ - b ._1374\n\ -._1373:\n\ - mov r0, sl\n\ - add r0, r0, #0x1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov sl, r0\n\ - ldr r0, ._1377\n\ - ldrb r0, [r0]\n\ - cmp sl, r0\n\ - bcc ._1375 @cond_branch\n\ - b ._1534\n\ -._1378:\n\ - .align 2, 0\n\ -._1377:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ -._751:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, #0x1c\n\ - beq ._1379 @cond_branch\n\ - b ._1534\n\ -._1379:\n\ - ldr r4, ._1385\n\ - ldr r1, [r4]\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0x7\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1381 @cond_branch\n\ - b ._1534\n\ -._1381:\n\ - ldr r0, ._1385 + 4\n\ - and r1, r1, r0\n\ - str r1, [r4]\n\ - ldr r3, ._1385 + 8\n\ - add r2, r7, r3\n\ - ldrb r1, [r2]\n\ - mov r0, #0x3f\n\ - and r0, r0, r1\n\ - strb r0, [r2]\n\ - cmp r0, #0x6\n\ - bne ._1383 @cond_branch\n\ - mov r0, #0x2\n\ - strb r0, [r2]\n\ -._1383:\n\ - ldr r1, ._1385 + 12\n\ - ldrb r0, [r2]\n\ - add r0, r0, #0x40\n\ - strb r0, [r1, #0x3]\n\ - ldr r0, ._1385 + 16\n\ - ldrb r1, [r0]\n\ - ldr r5, ._1385 + 20\n\ - add r0, r7, r5\n\ - strb r1, [r0]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1385 + 24\n\ - ldr r0, ._1385 + 28\n\ - str r0, [r1]\n\ - ldr r0, [r4]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x6\n\ - orr r0, r0, r1\n\ - str r0, [r4]\n\ - b ._1392\n\ -._1386:\n\ - .align 2, 0\n\ -._1385:\n\ - .word gHitMarker\n\ - .word 0xffffbfff\n\ - .word 0x160ca\n\ - .word gBattleCommunication\n\ - .word gBankTarget\n\ - .word 0x16003\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_SynchronizeActivates\n\ -._752:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, #0x1c\n\ - beq ._1387 @cond_branch\n\ - b ._1534\n\ -._1387:\n\ - ldr r4, ._1393\n\ - ldr r1, [r4]\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0x7\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1389 @cond_branch\n\ - b ._1534\n\ -._1389:\n\ - ldr r0, ._1393 + 4\n\ - and r1, r1, r0\n\ - str r1, [r4]\n\ - ldr r3, ._1393 + 8\n\ - add r2, r7, r3\n\ - ldrb r1, [r2]\n\ - mov r0, #0x3f\n\ - and r0, r0, r1\n\ - strb r0, [r2]\n\ - cmp r0, #0x6\n\ - bne ._1391 @cond_branch\n\ - mov r0, #0x2\n\ - strb r0, [r2]\n\ -._1391:\n\ - ldr r1, ._1393 + 12\n\ - ldrb r0, [r2]\n\ - strb r0, [r1, #0x3]\n\ - ldr r0, ._1393 + 16\n\ - ldrb r1, [r0]\n\ - ldr r5, ._1393 + 20\n\ - add r0, r7, r5\n\ - strb r1, [r0]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1393 + 24\n\ - ldr r0, ._1393 + 28\n\ - str r0, [r1]\n\ - ldr r0, [r4]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0x6\n\ - orr r0, r0, r1\n\ - str r0, [r4]\n\ - b ._1392\n\ -._1394:\n\ - .align 2, 0\n\ -._1393:\n\ - .word gHitMarker\n\ - .word 0xffffbfff\n\ - .word 0x160ca\n\ - .word gBattleCommunication\n\ - .word gBankAttacker\n\ - .word 0x16003\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_SynchronizeActivates\n\ -._753:\n\ - mov r4, #0x0\n\ - ldr r0, ._1402\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - blt ._1395 @cond_branch\n\ - b ._1534\n\ -._1395:\n\ - ldr r0, ._1402 + 4\n\ - add r5, r1, #0\n\ - ldr r2, ._1402 + 8\n\ - add r3, r0, #0\n\ - add r3, r3, #0x20\n\ - mov r6, #0x80\n\ - lsl r6, r6, #0xc\n\ -._1400:\n\ - ldrb r1, [r3]\n\ - cmp r1, #0x16\n\ - bne ._1398 @cond_branch\n\ - ldr r0, [r2]\n\ - and r0, r0, r6\n\ - cmp r0, #0\n\ - beq ._1398 @cond_branch\n\ - b ._1399\n\ -._1398:\n\ - add r2, r2, #0x4\n\ - add r3, r3, #0x58\n\ - add r4, r4, #0x1\n\ - cmp r4, r5\n\ - blt ._1400 @cond_branch\n\ - b ._1534\n\ -._1403:\n\ - .align 2, 0\n\ -._1402:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ - .word gStatuses3\n\ -._755:\n\ - mov r4, #0x0\n\ - ldr r0, ._1417\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1404 @cond_branch\n\ - b ._1534\n\ -._1404:\n\ - ldr r0, ._1417 + 4\n\ - mov r8, r0\n\ - ldr r1, ._1417 + 8\n\ - add r1, r1, #0x20\n\ - str r1, [sp, #0x1c]\n\ - mov r2, #0x0\n\ - str r2, [sp, #0x20]\n\ -._1434:\n\ - ldr r3, [sp, #0x1c]\n\ - ldrb r0, [r3]\n\ - cmp r0, #0x24\n\ - beq ._1406 @cond_branch\n\ - b ._1431\n\ -._1406:\n\ - ldr r0, ._1417 + 12\n\ - ldr r5, [sp, #0x20]\n\ - add r0, r5, r0\n\ - ldr r1, [r0]\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0xd\n\ - and r1, r1, r0\n\ - str r5, [sp, #0x18]\n\ - cmp r1, #0\n\ - bne ._1408 @cond_branch\n\ - b ._1431\n\ -._1408:\n\ - lsl r0, r4, #0x18\n\ - lsr r0, r0, #0x18\n\ - bl GetBankIdentity\n\ - mov r1, #0x1\n\ - add r5, r0, #0\n\ - eor r5, r5, r1\n\ - and r5, r5, r1\n\ - add r0, r5, #0\n\ - bl GetBankByIdentity\n\ - lsl r0, r0, #0x18\n\ - lsr r6, r0, #0x18\n\ - add r0, r5, #2\n\ - bl GetBankByIdentity\n\ - lsl r0, r0, #0x18\n\ - lsr r7, r0, #0x18\n\ - ldr r0, ._1417 + 16\n\ - ldrh r1, [r0]\n\ - mov r2, #0x1\n\ - add r0, r2, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1410 @cond_branch\n\ - b ._1411\n\ -._1410:\n\ - mov r1, #0x58\n\ - add r0, r6, #0\n\ - mul r0, r0, r1\n\ - ldr r3, ._1417 + 8\n\ - add r1, r0, r3\n\ - add r0, r1, #0\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._1420 @cond_branch\n\ - ldrh r0, [r1, #0x28]\n\ - cmp r0, #0\n\ - beq ._1415 @cond_branch\n\ - mov r1, #0x58\n\ - add r0, r7, #0\n\ - mul r0, r0, r1\n\ - add r1, r0, r3\n\ - add r0, r1, #0\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._1415 @cond_branch\n\ - ldrh r0, [r1, #0x28]\n\ - cmp r0, #0\n\ - beq ._1415 @cond_branch\n\ - str r2, [sp, #0x24]\n\ - bl Random\n\ - ldr r2, [sp, #0x24]\n\ - add r1, r2, #0\n\ - and r1, r1, r0\n\ - lsl r1, r1, #0x1\n\ - orr r5, r5, r1\n\ - add r0, r5, #0\n\ - bl GetBankByIdentity\n\ - mov r2, r8\n\ - strb r0, [r2]\n\ - ldrb r0, [r2]\n\ - mov r3, #0x58\n\ - mul r0, r0, r3\n\ - ldr r5, ._1417 + 8\n\ - add r0, r0, r5\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - ldr r1, [sp, #0x1c]\n\ - strb r0, [r1]\n\ - ldrb r0, [r2]\n\ - mul r0, r0, r3\n\ - add r0, r0, r5\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - ldr r2, ._1417 + 20\n\ - strb r0, [r2]\n\ - b ._1416\n\ -._1418:\n\ - .align 2, 0\n\ -._1417:\n\ - .word gNoOfAllBanks\n\ - .word gActiveBank\n\ - .word gBattleMons\n\ - .word gStatuses3\n\ - .word gBattleTypeFlags\n\ - .word gLastUsedAbility\n\ -._1415:\n\ - ldr r3, ._1422\n\ - mov r2, #0x58\n\ - add r0, r6, #0\n\ - mul r0, r0, r2\n\ - add r1, r0, r3\n\ - add r0, r1, #0\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._1420 @cond_branch\n\ - ldrh r0, [r1, #0x28]\n\ - cmp r0, #0\n\ - beq ._1420 @cond_branch\n\ - mov r5, r8\n\ - strb r6, [r5]\n\ - add r1, r4, #0\n\ - mul r1, r1, r2\n\ - add r1, r1, r3\n\ - ldrb r0, [r5]\n\ - mul r0, r0, r2\n\ - add r0, r0, r3\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - add r1, r1, #0x20\n\ - strb r0, [r1]\n\ - ldrb r0, [r5]\n\ - mul r0, r0, r2\n\ - add r0, r0, r3\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - b ._1426\n\ -._1423:\n\ - .align 2, 0\n\ -._1422:\n\ - .word gBattleMons\n\ -._1420:\n\ - ldr r3, ._1427\n\ - mov r2, #0x58\n\ - add r0, r7, #0\n\ - mul r0, r0, r2\n\ - add r1, r0, r3\n\ - add r0, r1, #0\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._1430 @cond_branch\n\ - ldrh r0, [r1, #0x28]\n\ - cmp r0, #0\n\ - beq ._1430 @cond_branch\n\ - mov r5, r8\n\ - strb r7, [r5]\n\ - add r1, r4, #0\n\ - mul r1, r1, r2\n\ - add r1, r1, r3\n\ - ldrb r0, [r5]\n\ - mul r0, r0, r2\n\ - add r0, r0, r3\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - add r1, r1, #0x20\n\ - strb r0, [r1]\n\ - ldrb r0, [r5]\n\ - mul r0, r0, r2\n\ - add r0, r0, r3\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - b ._1426\n\ -._1428:\n\ - .align 2, 0\n\ -._1427:\n\ - .word gBattleMons\n\ -._1411:\n\ - mov r2, r8\n\ - strb r6, [r2]\n\ - mov r3, #0x58\n\ - add r0, r6, #0\n\ - mul r0, r0, r3\n\ - ldr r5, ._1436\n\ - add r0, r0, r5\n\ - add r2, r0, #0\n\ - add r2, r2, #0x20\n\ - ldrb r1, [r2]\n\ - cmp r1, #0\n\ - beq ._1430 @cond_branch\n\ - ldrh r0, [r0, #0x28]\n\ - cmp r0, #0\n\ - beq ._1430 @cond_branch\n\ - ldr r0, [sp, #0x1c]\n\ - strb r1, [r0]\n\ - ldrb r0, [r2]\n\ -._1426:\n\ - ldr r1, ._1436 + 4\n\ - strb r0, [r1]\n\ -._1416:\n\ - mov r0, r9\n\ - add r0, r0, #0x1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1430:\n\ - mov r2, r9\n\ - cmp r2, #0\n\ - beq ._1431 @cond_branch\n\ - b ._1432\n\ -._1431:\n\ - ldr r3, [sp, #0x1c]\n\ - add r3, r3, #0x58\n\ - str r3, [sp, #0x1c]\n\ - ldr r5, [sp, #0x20]\n\ - add r5, r5, #0x4\n\ - str r5, [sp, #0x20]\n\ - add r4, r4, #0x1\n\ - ldr r0, ._1436 + 8\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - bge ._1433 @cond_branch\n\ - b ._1434\n\ -._1433:\n\ - b ._1534\n\ -._1437:\n\ - .align 2, 0\n\ -._1436:\n\ - .word gBattleMons\n\ - .word gLastUsedAbility\n\ - .word gNoOfAllBanks\n\ -._754:\n\ - mov r4, #0x0\n\ - ldr r0, ._1445\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - blt ._1438 @cond_branch\n\ - b ._1534\n\ -._1438:\n\ - ldr r0, ._1445 + 4\n\ - add r5, r1, #0\n\ - ldr r2, ._1445 + 8\n\ - add r3, r0, #0\n\ - add r3, r3, #0x20\n\ - mov r6, #0x80\n\ - lsl r6, r6, #0xc\n\ -._1443:\n\ - ldrb r1, [r3]\n\ - cmp r1, #0x16\n\ - bne ._1441 @cond_branch\n\ - ldr r0, [r2]\n\ - and r0, r0, r6\n\ - cmp r0, #0\n\ - beq ._1441 @cond_branch\n\ - b ._1442\n\ -._1441:\n\ - add r2, r2, #0x4\n\ - add r3, r3, #0x58\n\ - add r4, r4, #0x1\n\ - cmp r4, r5\n\ - blt ._1443 @cond_branch\n\ - b ._1534\n\ -._1446:\n\ - .align 2, 0\n\ -._1445:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ - .word gStatuses3\n\ -._756:\n\ - mov r0, sl\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - lsr r5, r0, #0x18\n\ - mov r4, #0x0\n\ - ldr r0, ._1453\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1447 @cond_branch\n\ - b ._1534\n\ -._1447:\n\ - ldr r7, ._1453 + 4\n\ -._1451:\n\ - lsl r0, r4, #0x18\n\ - lsr r0, r0, #0x18\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - add r3, r4, #1\n\ - cmp r0, r5\n\ - beq ._1450 @cond_branch\n\ - mov r0, #0x58\n\ - mul r0, r0, r4\n\ - add r0, r0, r7\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne ._1450 @cond_branch\n\ - ldr r0, ._1453 + 8\n\ - strb r6, [r0]\n\ - lsl r0, r3, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1450:\n\ - add r4, r3, #0\n\ - ldr r0, ._1453\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1451 @cond_branch\n\ - b ._1534\n\ -._1454:\n\ - .align 2, 0\n\ -._1453:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ - .word gLastUsedAbility\n\ -._757:\n\ - mov r0, sl\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - lsr r5, r0, #0x18\n\ - mov r4, #0x0\n\ - ldr r0, ._1461\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1455 @cond_branch\n\ - b ._1534\n\ -._1455:\n\ - ldr r7, ._1461 + 4\n\ -._1459:\n\ - lsl r0, r4, #0x18\n\ - lsr r0, r0, #0x18\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - add r3, r4, #1\n\ - cmp r0, r5\n\ - bne ._1458 @cond_branch\n\ - mov r0, #0x58\n\ - mul r0, r0, r4\n\ - add r0, r0, r7\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne ._1458 @cond_branch\n\ - ldr r0, ._1461 + 8\n\ - strb r6, [r0]\n\ - lsl r0, r3, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1458:\n\ - add r4, r3, #0\n\ - ldr r0, ._1461\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1459 @cond_branch\n\ - b ._1534\n\ -._1462:\n\ - .align 2, 0\n\ -._1461:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ - .word gLastUsedAbility\n\ -._758:\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - cmp r0, #0xfd\n\ - beq ._1463 @cond_branch\n\ - cmp r0, #0xfe\n\ - beq ._1464 @cond_branch\n\ - mov r4, #0x0\n\ - ldr r0, ._1468\n\ - add r5, r0, #0\n\ - ldrb r2, [r5]\n\ - cmp r4, r2\n\ - blt ._1465 @cond_branch\n\ - b ._1534\n\ -._1465:\n\ - ldr r2, ._1468 + 4\n\ - b ._1485\n\ -._1469:\n\ - .align 2, 0\n\ -._1468:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ -._1463:\n\ - mov r4, #0x0\n\ - ldr r0, ._1475\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1470 @cond_branch\n\ - b ._1534\n\ -._1470:\n\ - ldr r5, ._1475 + 4\n\ - mov r2, #0x80\n\ - lsl r2, r2, #0x9\n\ - add r1, r0, #0\n\ -._1473:\n\ - lsl r0, r4, #0x2\n\ - add r0, r0, r5\n\ - ldr r0, [r0]\n\ - and r0, r0, r2\n\ - add r3, r4, #1\n\ - cmp r0, #0\n\ - beq ._1472 @cond_branch\n\ - lsl r0, r3, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1472:\n\ - add r4, r3, #0\n\ - cmp r4, r1\n\ - blt ._1473 @cond_branch\n\ - b ._1534\n\ -._1476:\n\ - .align 2, 0\n\ -._1475:\n\ - .word gNoOfAllBanks\n\ - .word gStatuses3\n\ -._1464:\n\ - mov r4, #0x0\n\ - ldr r0, ._1482\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1477 @cond_branch\n\ - b ._1534\n\ -._1477:\n\ - ldr r5, ._1482 + 4\n\ - mov r2, #0x80\n\ - lsl r2, r2, #0xa\n\ - add r1, r0, #0\n\ -._1480:\n\ - lsl r0, r4, #0x2\n\ - add r0, r0, r5\n\ - ldr r0, [r0]\n\ - and r0, r0, r2\n\ - add r3, r4, #1\n\ - cmp r0, #0\n\ - beq ._1479 @cond_branch\n\ - lsl r0, r3, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1479:\n\ - add r4, r3, #0\n\ - cmp r4, r1\n\ - blt ._1480 @cond_branch\n\ - b ._1534\n\ -._1483:\n\ - .align 2, 0\n\ -._1482:\n\ - .word gNoOfAllBanks\n\ - .word gStatuses3\n\ -._1485:\n\ - mov r0, #0x58\n\ - mul r0, r0, r4\n\ - add r0, r0, r2\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - add r3, r4, #1\n\ - cmp r0, r6\n\ - bne ._1484 @cond_branch\n\ - mov r0, r8\n\ - strb r6, [r0]\n\ - lsl r0, r3, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1484:\n\ - add r4, r3, #0\n\ - ldrb r1, [r5]\n\ - cmp r4, r1\n\ - blt ._1485 @cond_branch\n\ - b ._1534\n\ -._763:\n\ - mov r4, #0x0\n\ - ldr r0, ._1493\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1487 @cond_branch\n\ - b ._1534\n\ -._1487:\n\ - ldr r7, ._1493 + 4\n\ - add r2, r0, #0\n\ - mov r5, #0x58\n\ -._1491:\n\ - add r0, r4, #0\n\ - mul r0, r0, r5\n\ - add r1, r0, r7\n\ - add r0, r1, #0\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - add r3, r4, #1\n\ - cmp r0, r6\n\ - bne ._1490 @cond_branch\n\ - ldrh r0, [r1, #0x28]\n\ - cmp r0, #0\n\ - beq ._1490 @cond_branch\n\ - mov r0, r8\n\ - strb r6, [r0]\n\ - lsl r0, r3, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1490:\n\ - add r4, r3, #0\n\ - cmp r4, r2\n\ - blt ._1491 @cond_branch\n\ - b ._1534\n\ -._1494:\n\ - .align 2, 0\n\ -._1493:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ -._759:\n\ - mov r4, #0x0\n\ - ldr r0, ._1501\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1495 @cond_branch\n\ - b ._1534\n\ -._1495:\n\ - ldr r7, ._1501 + 4\n\ - add r1, r0, #0\n\ - mov r5, #0x58\n\ - ldr r2, ._1501 + 8\n\ -._1499:\n\ - add r0, r4, #0\n\ - mul r0, r0, r5\n\ - add r0, r0, r7\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - add r3, r4, #1\n\ - cmp r0, r6\n\ - bne ._1498 @cond_branch\n\ - cmp r4, sl\n\ - beq ._1498 @cond_branch\n\ - strb r6, [r2]\n\ - lsl r0, r3, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1498:\n\ - add r4, r3, #0\n\ - cmp r4, r1\n\ - blt ._1499 @cond_branch\n\ - b ._1534\n\ -._1502:\n\ - .align 2, 0\n\ -._1501:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ - .word gLastUsedAbility\n\ -._760:\n\ - mov r0, sl\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - lsr r5, r0, #0x18\n\ - mov r4, #0x0\n\ - ldr r0, ._1509\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1503 @cond_branch\n\ - b ._1534\n\ -._1503:\n\ - ldr r7, ._1509 + 4\n\ -._1507:\n\ - lsl r0, r4, #0x18\n\ - lsr r0, r0, #0x18\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, r5\n\ - beq ._1506 @cond_branch\n\ - mov r0, #0x58\n\ - mul r0, r0, r4\n\ - add r0, r0, r7\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne ._1506 @cond_branch\n\ - ldr r0, ._1509 + 8\n\ - strb r6, [r0]\n\ - mov r0, r9\n\ - add r0, r0, #0x1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1506:\n\ - add r4, r4, #0x1\n\ - ldr r0, ._1509\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1507 @cond_branch\n\ - b ._1534\n\ -._1510:\n\ - .align 2, 0\n\ -._1509:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ - .word gLastUsedAbility\n\ -._761:\n\ - mov r0, sl\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - lsr r5, r0, #0x18\n\ - mov r4, #0x0\n\ - ldr r0, ._1517\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1511 @cond_branch\n\ - b ._1534\n\ -._1511:\n\ - ldr r7, ._1517 + 4\n\ -._1515:\n\ - lsl r0, r4, #0x18\n\ - lsr r0, r0, #0x18\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, r5\n\ - bne ._1514 @cond_branch\n\ - mov r0, #0x58\n\ - mul r0, r0, r4\n\ - add r0, r0, r7\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, r6\n\ - bne ._1514 @cond_branch\n\ - ldr r0, ._1517 + 8\n\ - strb r6, [r0]\n\ - mov r0, r9\n\ - add r0, r0, #0x1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1514:\n\ - add r4, r4, #0x1\n\ - ldr r0, ._1517\n\ - ldrb r0, [r0]\n\ - cmp r4, r0\n\ - blt ._1515 @cond_branch\n\ - b ._1534\n\ -._1518:\n\ - .align 2, 0\n\ -._1517:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ - .word gLastUsedAbility\n\ -._853:\n\ - ldr r0, ._1520\n\ - bl BattleScriptPushCursorAndCallback\n\ - ldr r0, ._1520 + 4\n\ - ldr r2, ._1520 + 8\n\ - add r1, r0, r2\n\ - strb r6, [r1]\n\ - mov r1, r9\n\ - sub r1, r1, #0x1\n\ - ldr r3, ._1520 + 12\n\ - add r0, r0, r3\n\ - strb r1, [r0]\n\ - b ._1534\n\ -._1521:\n\ - .align 2, 0\n\ -._1520:\n\ - .word BattleScript_CastformChange\n\ - .word +0x2000000\n\ - .word 0x16003\n\ - .word 0x1609b\n\ -._1374:\n\ - ldr r0, ._1523\n\ - bl BattleScriptPushCursorAndCallback\n\ - ldr r0, ._1523 + 4\n\ - ldr r5, ._1523 + 8\n\ - add r1, r0, r5\n\ - mov r2, sl\n\ - strb r2, [r1]\n\ - mov r1, r9\n\ - sub r1, r1, #0x1\n\ - ldr r3, ._1523 + 12\n\ - add r0, r0, r3\n\ - strb r1, [r0]\n\ - b ._1540\n\ -._1524:\n\ - .align 2, 0\n\ -._1523:\n\ - .word BattleScript_CastformChange\n\ - .word +0x2000000\n\ - .word 0x16003\n\ - .word 0x1609b\n\ -._1399:\n\ - mov r5, r8\n\ - strb r1, [r5]\n\ - ldr r0, [r2]\n\ - ldr r1, ._1526\n\ - and r0, r0, r1\n\ - str r0, [r2]\n\ - ldr r0, ._1526 + 4\n\ - bl BattleScriptPushCursorAndCallback\n\ - b ._1525\n\ -._1527:\n\ - .align 2, 0\n\ -._1526:\n\ - .word 0xfff7ffff\n\ - .word gUnknown_081D978C\n\ -._1432:\n\ - ldr r0, ._1529\n\ - bl BattleScriptPushCursorAndCallback\n\ - ldr r1, ._1529 + 4\n\ - ldr r2, [sp, #0x18]\n\ - add r1, r2, r1\n\ - ldr r0, [r1]\n\ - ldr r2, ._1529 + 8\n\ - and r0, r0, r2\n\ - str r0, [r1]\n\ - ldr r0, ._1529 + 12\n\ - ldr r3, ._1529 + 16\n\ - add r0, r0, r3\n\ - strb r4, [r0]\n\ - ldr r1, ._1529 + 20\n\ - mov r4, #0xfd\n\ - strb r4, [r1]\n\ - mov r0, #0x4\n\ - strb r0, [r1, #0x1]\n\ - ldr r2, ._1529 + 24\n\ - ldrb r0, [r2]\n\ - strb r0, [r1, #0x2]\n\ - ldr r3, ._1529 + 28\n\ - ldrb r0, [r2]\n\ - lsl r0, r0, #0x1\n\ - add r0, r0, r3\n\ - ldrh r0, [r0]\n\ - strb r0, [r1, #0x3]\n\ - mov r0, #0xff\n\ - strb r0, [r1, #0x4]\n\ - ldr r1, ._1529 + 32\n\ - strb r4, [r1]\n\ - mov r0, #0x9\n\ - strb r0, [r1, #0x1]\n\ - ldr r0, ._1529 + 36\n\ - ldrb r0, [r0]\n\ - strb r0, [r1, #0x2]\n\ - mov r0, #0x1\n\ - neg r0, r0\n\ - strb r0, [r1, #0x3]\n\ - b ._1534\n\ -._1530:\n\ - .align 2, 0\n\ -._1529:\n\ - .word BattleScript_TraceActivates\n\ - .word gStatuses3\n\ - .word 0xffefffff\n\ - .word +0x2000000\n\ - .word 0x16003\n\ - .word gBattleTextBuff1\n\ - .word gActiveBank\n\ - .word gBattlePartyID\n\ - .word gBattleTextBuff2\n\ - .word gLastUsedAbility\n\ -._1442:\n\ - mov r5, r8\n\ - strb r1, [r5]\n\ - ldr r0, [r2]\n\ - ldr r1, ._1532\n\ - and r0, r0, r1\n\ - str r0, [r2]\n\ - bl BattleScriptPushCursor\n\ - ldr r1, ._1532 + 4\n\ - ldr r0, ._1532 + 8\n\ - str r0, [r1]\n\ -._1525:\n\ - ldr r0, ._1532 + 12\n\ - ldr r1, ._1532 + 16\n\ - add r0, r0, r1\n\ - strb r4, [r0]\n\ -._1392:\n\ - mov r0, r9\n\ - add r0, r0, #0x1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ - b ._1534\n\ -._1533:\n\ - .align 2, 0\n\ -._1532:\n\ - .word 0xfff7ffff\n\ - .word gBattlescriptCurrInstr\n\ - .word gUnknown_081D9795\n\ - .word +0x2000000\n\ - .word 0x160dd\n\ -._762:\n\ - mov r4, #0x0\n\ - ldr r0, ._1541\n\ - ldrb r1, [r0]\n\ - cmp r4, r1\n\ - bge ._1534 @cond_branch\n\ - ldr r0, ._1541 + 4\n\ - add r2, r1, #0\n\ - add r1, r0, #0\n\ - add r1, r1, #0x20\n\ - ldr r3, ._1541 + 8\n\ -._1537:\n\ - ldrb r0, [r1]\n\ - cmp r0, r6\n\ - bne ._1536 @cond_branch\n\ - cmp r4, sl\n\ - beq ._1536 @cond_branch\n\ - strb r6, [r3]\n\ - mov r0, r9\n\ - add r0, r0, #0x1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r9, r0\n\ -._1536:\n\ - add r1, r1, #0x58\n\ - add r4, r4, #0x1\n\ - cmp r4, r2\n\ - blt ._1537 @cond_branch\n\ -._1534:\n\ - mov r2, r9\n\ - cmp r2, #0\n\ - beq ._1540 @cond_branch\n\ -._916:\n\ - ldr r3, [sp, #0x4]\n\ - cmp r3, #0xb\n\ - bhi ._1540 @cond_branch\n\ - ldr r1, ._1541 + 8\n\ - ldrb r0, [r1]\n\ - cmp r0, #0xff\n\ - beq ._1540 @cond_branch\n\ - add r1, r0, #0\n\ - mov r0, sl\n\ - bl RecordAbilityBattle\n\ -._1540:\n\ - mov r0, r9\n\ - add sp, sp, #0x28\n\ - pop {r3, r4, r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov sl, r5\n\ - pop {r4, r5, r6, r7}\n\ - pop {r1}\n\ - bx r1\n\ -._1542:\n\ - .align 2, 0\n\ -._1541:\n\ - .word gNoOfAllBanks\n\ - .word gBattleMons\n\ - .word gLastUsedAbility"); -} -#else u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) { u8 effect = 0; @@ -5796,17 +1738,14 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) else moveType = gBattleMoves[move].type; - //_080184AC switch (caseID) { case ABILITYEFFECT_ON_SWITCHIN: // 0 - //_08018518 if (gBankAttacker >= gNoOfAllBanks) gBankAttacker = bank; switch (gLastUsedAbility) { case 0xFF: //weather from overworld - //_08018586 switch (GetCurrentWeather()) { case WEATHER_RAIN_LIGHT: @@ -5846,7 +1785,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_DRIZZLE: - //_08018680 if (!(gBattleWeather & WEATHER_RAIN_PERMANENT)) { gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY); @@ -5856,7 +1794,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_SAND_STREAM: - //_080186B8 if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT)) { gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY); @@ -5866,7 +1803,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_DROUGHT: - //_080186F0 if (!(gBattleWeather & WEATHER_SUN_PERMANENT)) { gBattleWeather = (WEATHER_SUN_PERMANENT | WEATHER_SUN_TEMPORARY); @@ -5876,7 +1812,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_INTIMIDATE: - //_08018728 if (!(gSpecialStatuses[bank].intimidatedPoke)) { gStatuses3[bank] |= STATUS3_INTIMIDATE_POKES; @@ -5884,7 +1819,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_FORECAST: - //_0801875C effect = CastformDataTypeChange(bank); if (effect != 0) { @@ -5894,7 +1828,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_TRACE: - //_080187A0 if (!(gSpecialStatuses[bank].traced)) { gStatuses3[bank] |= STATUS3_TRACE; @@ -5903,7 +1836,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) break; case ABILITY_CLOUD_NINE: case ABILITY_AIR_LOCK: - //_080187DC { // that's a weird choice for a variable, why not use i or bank? for (target1 = 0; target1 < gNoOfAllBanks; target1++) @@ -5922,7 +1854,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_ENDTURN: // 1 - //_08018814 if (gBattleMons[bank].hp != 0) { gBankAttacker = bank; @@ -5982,7 +1913,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_MOVES_BLOCK: // 2 - //_08018A40 if (gLastUsedAbility == ABILITY_SOUNDPROOF) { for (i = 0; gSoundMovesTable[i] != 0xFFFF; i++) @@ -6000,7 +1930,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_ABSORBING: // 3 - //_08018AD8 if (move) { switch (gLastUsedAbility) @@ -6070,11 +1999,9 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_CONTACT: // 4 - //_08018CF0 switch (gLastUsedAbility) { case ABILITY_COLOR_CHANGE: - //_08018DCC if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) && move != MOVE_STRUGGLE && gBattleMoves[move].power != 0 @@ -6095,7 +2022,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_ROUGH_SKIN: - //_08018E94 if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) && gBattleMons[gBankAttacker].hp != 0 && !gProtectStructs[gBankAttacker].confusionSelfDmg @@ -6111,100 +2037,195 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITY_EFFECT_SPORE: - //_08018F54 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 10) == 0) - { - do - { - gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; - } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); - if (gBattleCommunication[MOVE_EFFECT_BYTE] == 3) - gBattleCommunication[MOVE_EFFECT_BYTE] += 2; - gBattleCommunication[MOVE_EFFECT_BYTE] += 0x40; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } + if (DEBUG && (gUnknown_02023A14_50 & 4)) + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + { + do + { + gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; + } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); + if (gBattleCommunication[MOVE_EFFECT_BYTE] == 3) + gBattleCommunication[MOVE_EFFECT_BYTE] += 2; + gBattleCommunication[MOVE_EFFECT_BYTE] += 0x40; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } + else + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (Random() % 10) == 0) + { + do + { + gBattleCommunication[MOVE_EFFECT_BYTE] = Random() & 3; + } while (gBattleCommunication[MOVE_EFFECT_BYTE] == 0); + if (gBattleCommunication[MOVE_EFFECT_BYTE] == 3) + gBattleCommunication[MOVE_EFFECT_BYTE] += 2; + gBattleCommunication[MOVE_EFFECT_BYTE] += 0x40; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } break; case ABILITY_POISON_POINT: - //_0801904C - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x42; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } + if (DEBUG && (gUnknown_02023A14_50 & 4)) + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x42; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } + else + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (Random() % 3) == 0) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x42; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } break; case ABILITY_STATIC: - //_08019128 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x45; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } + if (DEBUG && (gUnknown_02023A14_50 & 4)) + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x45; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } + else + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (Random() % 3) == 0) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x45; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } break; case ABILITY_FLAME_BODY: - //_08019204 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && (Random() % 3) == 0) - { - gBattleCommunication[MOVE_EFFECT_BYTE] = 0x43; - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; - gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; - effect++; - } + if (DEBUG && (gUnknown_02023A14_50 & 4)) + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special)) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x43; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } + else + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && (Random() % 3) == 0) + { + gBattleCommunication[MOVE_EFFECT_BYTE] = 0x43; + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_ApplySecondaryEffect; + gHitMarker |= HITMARKER_IGNORE_SAFEGUARD; + effect++; + } + } break; case ABILITY_CUTE_CHARM: - //_080192E0 - if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) - && gBattleMons[gBankAttacker].hp != 0 - && !gProtectStructs[gBankAttacker].confusionSelfDmg - && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) - && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) - && gBattleMons[gBankTarget].hp != 0 - && (Random() % 3) == 0 - && gBattleMons[gBankAttacker].ability != ABILITY_OBLIVIOUS - && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) - && !(gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) - && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != 0xFF - && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != 0xFF) - { - gBattleMons[gBankAttacker].status2 |= (gBitTable[gBankTarget] << 0x10); - BattleScriptPushCursor(); - gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; - effect++; - } + if (DEBUG && (gUnknown_02023A14_50 & 4)) + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && gBattleMons[gBankTarget].hp != 0 + && gBattleMons[gBankAttacker].ability != ABILITY_OBLIVIOUS + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) + && !(gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != 0xFF + && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != 0xFF) + { + gBattleMons[gBankAttacker].status2 |= (gBitTable[gBankTarget] << 0x10); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; + effect++; + } + } + else + { + if (!(gBattleMoveFlags & MOVESTATUS_NOEFFECT) + && gBattleMons[gBankAttacker].hp != 0 + && !gProtectStructs[gBankAttacker].confusionSelfDmg + && (gBattleMoves[move].flags & FLAG_MAKES_CONTACT) + && (gSpecialStatuses[gBankTarget].moveturnLostHP_physical || gSpecialStatuses[gBankTarget].moveturnLostHP_special) + && gBattleMons[gBankTarget].hp != 0 + && (Random() % 3) == 0 + && gBattleMons[gBankAttacker].ability != ABILITY_OBLIVIOUS + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) + && !(gBattleMons[gBankAttacker].status2 & STATUS2_INFATUATION) + && GetGenderFromSpeciesAndPersonality(speciesAtk, pidAtk) != 0xFF + && GetGenderFromSpeciesAndPersonality(speciesDef, pidDef) != 0xFF) + { + gBattleMons[gBankAttacker].status2 |= (gBitTable[gBankTarget] << 0x10); + BattleScriptPushCursor(); + gBattlescriptCurrInstr = BattleScript_CuteCharmActivates; + effect++; + } + } break; } break; case ABILITYEFFECT_IMMUNITY: // 5 - //_08019448 { for (bank = 0; bank < gNoOfAllBanks; bank++) { @@ -6288,7 +2309,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_FORECAST: // 6 - //_080197B4 { for (bank = 0; bank < gNoOfAllBanks; bank++) { @@ -6307,7 +2327,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_SYNCHRONIZE: // 7 - //_08019804 if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) { gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); @@ -6323,7 +2342,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_ATK_SYNCHRONIZE: // 8 - //_08019880 if (gLastUsedAbility == ABILITY_SYNCHRONIZE && (gHitMarker & HITMARKER_SYNCHRONISE_EFFECT)) { gHitMarker &= ~(HITMARKER_SYNCHRONISE_EFFECT); @@ -6339,7 +2357,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_INTIMIDATE1: // 9 - //_080198FC for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ABILITY_INTIMIDATE && gStatuses3[i] & STATUS3_INTIMIDATE_POKES) @@ -6354,7 +2371,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_TRACE: // 11 - //_08019940 for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ABILITY_TRACE && (gStatuses3[i] & STATUS3_TRACE)) @@ -6368,7 +2384,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0 && gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) { - //_080199AE gActiveBank = GetBankByIdentity(((Random() & 1) * 2) | side); gBattleMons[i].ability = gBattleMons[gActiveBank].ability; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -6376,7 +2391,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } else if (gBattleMons[target1].ability != 0 && gBattleMons[target1].hp != 0) { - //_08019A34 gActiveBank = target1; gBattleMons[i].ability = gBattleMons[gActiveBank].ability; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -6384,7 +2398,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } else if (gBattleMons[target2].ability != 0 && gBattleMons[target2].hp != 0) { - //_08019A78 gActiveBank = target2; gBattleMons[i].ability = gBattleMons[gActiveBank].ability; gLastUsedAbility = gBattleMons[gActiveBank].ability; @@ -6392,7 +2405,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } } else - //_08019ABC { gActiveBank = target1; if (gBattleMons[target1].ability && gBattleMons[target1].hp) @@ -6424,7 +2436,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_INTIMIDATE2: // 10 - //_08019B1C for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ABILITY_INTIMIDATE && (gStatuses3[i] & STATUS3_INTIMIDATE_POKES)) @@ -6440,7 +2451,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_CHECK_OTHER_SIDE: // 12 - //_08019B60 side = GetBankSide(bank); for (i = 0; i < gNoOfAllBanks; i++) { @@ -6452,7 +2462,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_CHECK_BANK_SIDE: // 13 - //_08019BBC side = GetBankSide(bank); for (i = 0; i < gNoOfAllBanks; i++) { @@ -6464,7 +2473,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_FIELD_SPORT: // 14 - //_08019C18 switch (gLastUsedAbility) { case 0xFD: @@ -6494,7 +2502,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_CHECK_ON_FIELD: // 19 - //_08019CD4 for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ability && gBattleMons[i].hp != 0) @@ -6505,7 +2512,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK: // 15 - //_08019D18 for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ability && i != bank) @@ -6516,7 +2522,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_COUNT_OTHER_SIZE: // 16 - //_08019D5C side = GetBankSide(bank); for (i = 0; i < gNoOfAllBanks; i++) { @@ -6528,7 +2533,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_COUNT_BANK_SIDE: // 17 - //_08019DB8 side = GetBankSide(bank); for (i = 0; i < gNoOfAllBanks; i++) { @@ -6540,7 +2544,6 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; case ABILITYEFFECT_COUNT_ON_FIELD: // 18 - //_08019F44 for (i = 0; i < gNoOfAllBanks; i++) { if (gBattleMons[i].ability == ability && i != bank) @@ -6551,14 +2554,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg) } break; } - //_08019F76 if (effect && caseID < 0xC && gLastUsedAbility != 0xFF) RecordAbilityBattle(bank, gLastUsedAbility); } return effect; } -#endif void BattleScriptExecute(const u8* BS_ptr) { -- cgit v1.2.3 From 94c9998804e9da20edf5e7285603c3e03b07e3c5 Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Wed, 24 Jan 2018 18:58:29 -0600 Subject: integrate debug IsMonDisobedient --- src/battle/battle_util.c | 440 ++--------------------------------------------- 1 file changed, 18 insertions(+), 422 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_util.c b/src/battle/battle_util.c index faa395a97..194a002d3 100644 --- a/src/battle/battle_util.c +++ b/src/battle/battle_util.c @@ -3439,417 +3439,6 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget) //get move target return targetBank; } -#if DEBUG -__attribute__((naked)) -u8 IsMonDisobedient(void) -{ - asm("\ - push {r4, r5, r6, r7, lr}\n\ - mov r7, r9\n\ - mov r6, r8\n\ - push {r6, r7}\n\ - add sp, sp, #0xfffffff0\n\ - ldr r0, ._1785\n\ - ldrh r1, [r0]\n\ - mov r0, #0x2\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1791 @cond_branch\n\ - ldr r4, ._1785 + 4\n\ - ldrb r0, [r4]\n\ - bl GetBankSide\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0x1\n\ - beq ._1791 @cond_branch\n\ - ldr r2, ._1785 + 8\n\ - ldrb r1, [r4]\n\ - mov r0, #0x58\n\ - mul r1, r1, r0\n\ - add r0, r2, #0\n\ - add r0, r0, #0x54\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - add r2, r2, #0x3c\n\ - add r1, r1, r2\n\ - bl IsOtherTrainer\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - beq ._1791 @cond_branch\n\ - ldr r0, ._1785 + 12\n\ - ldrb r1, [r0]\n\ - mov r0, #0x40\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1783 @cond_branch\n\ - mov r0, #0xa\n\ - b ._1784\n\ -._1786:\n\ - .align 2, 0\n\ -._1785:\n\ - .word gBattleTypeFlags\n\ - .word gBankAttacker\n\ - .word gBattleMons\n\ - .word gUnknown_02023A14_50\n\ -._1783:\n\ - ldr r0, ._1794\n\ - bl FlagGet\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - bne ._1791 @cond_branch\n\ - mov r1, #0xa\n\ - mov r8, r1\n\ - ldr r0, ._1794 + 4\n\ - bl FlagGet\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - beq ._1788 @cond_branch\n\ - mov r2, #0x1e\n\ - mov r8, r2\n\ -._1788:\n\ - ldr r0, ._1794 + 8\n\ - bl FlagGet\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - beq ._1789 @cond_branch\n\ - mov r4, #0x32\n\ - mov r8, r4\n\ -._1789:\n\ - ldr r0, ._1794 + 12\n\ - bl FlagGet\n\ - lsl r0, r0, #0x18\n\ - cmp r0, #0\n\ - beq ._1790 @cond_branch\n\ - mov r0, #0x46\n\ -._1784:\n\ - mov r8, r0\n\ -._1790:\n\ - ldr r5, ._1794 + 16\n\ - ldr r7, ._1794 + 20\n\ - ldrb r0, [r7]\n\ - mov r6, #0x58\n\ - mul r0, r0, r6\n\ - add r0, r0, r5\n\ - add r0, r0, #0x2a\n\ - ldrb r0, [r0]\n\ - cmp r0, r8\n\ - bls ._1791 @cond_branch\n\ - bl Random\n\ - mov r1, #0xff\n\ - and r1, r1, r0\n\ - ldrb r0, [r7]\n\ - add r2, r0, #0\n\ - mul r2, r2, r6\n\ - add r0, r2, r5\n\ - add r0, r0, #0x2a\n\ - ldrb r0, [r0]\n\ - add r0, r0, r8\n\ - mul r0, r0, r1\n\ - asr r4, r0, #0x8\n\ - cmp r4, r8\n\ - bge ._1792 @cond_branch\n\ -._1791:\n\ - mov r0, #0x0\n\ - b ._1823\n\ -._1795:\n\ - .align 2, 0\n\ -._1794:\n\ - .word 0x80e\n\ - .word 0x808\n\ - .word 0x80a\n\ - .word 0x80c\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ -._1792:\n\ - ldr r3, ._1801\n\ - ldrh r0, [r3]\n\ - cmp r0, #0x63\n\ - bne ._1796 @cond_branch\n\ - add r0, r5, #0\n\ - add r0, r0, #0x50\n\ - add r0, r2, r0\n\ - ldr r1, [r0]\n\ - ldr r2, ._1801 + 4\n\ - and r1, r1, r2\n\ - str r1, [r0]\n\ -._1796:\n\ - ldrb r0, [r7]\n\ - mul r0, r0, r6\n\ - add r1, r5, #0\n\ - add r1, r1, #0x4c\n\ - add r0, r0, r1\n\ - ldr r0, [r0]\n\ - mov r1, #0x7\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._1799 @cond_branch\n\ - ldrh r0, [r3]\n\ - cmp r0, #0xad\n\ - beq ._1798 @cond_branch\n\ - cmp r0, #0xd6\n\ - bne ._1799 @cond_branch\n\ -._1798:\n\ - ldr r1, ._1801 + 8\n\ - ldr r0, ._1801 + 12\n\ - b ._1819\n\ -._1802:\n\ - .align 2, 0\n\ -._1801:\n\ - .word gCurrentMove\n\ - .word 0xff7fffff\n\ - .word gBattlescriptCurrInstr\n\ - .word gUnknown_081D995F\n\ -._1799:\n\ - bl Random\n\ - mov r5, #0xff\n\ - add r1, r5, #0\n\ - and r1, r1, r0\n\ - ldr r6, ._1808\n\ - ldr r2, ._1808 + 4\n\ - mov r9, r2\n\ - ldrb r3, [r2]\n\ - mov r7, #0x58\n\ - add r0, r3, #0\n\ - mul r0, r0, r7\n\ - add r0, r0, r6\n\ - add r0, r0, #0x2a\n\ - ldrb r2, [r0]\n\ - mov r4, r8\n\ - add r0, r2, r4\n\ - mul r0, r0, r1\n\ - asr r4, r0, #0x8\n\ - cmp r4, r8\n\ - bge ._1803 @cond_branch\n\ - ldr r7, ._1808 + 8\n\ - ldr r5, ._1808 + 12\n\ - ldrb r0, [r5]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r7\n\ - ldrb r1, [r0]\n\ - add r0, r3, #0\n\ - mov r2, #0xff\n\ - bl CheckMoveLimitations\n\ - lsl r0, r0, #0x18\n\ - lsr r4, r0, #0x18\n\ - cmp r4, #0xf\n\ - bne ._1804 @cond_branch\n\ - b ._1805\n\ -._1804:\n\ - add r6, r5, #0\n\ - ldr r0, ._1808 + 16\n\ - mov r9, r0\n\ - mov r1, #0x3\n\ - mov r8, r1\n\ -._1806:\n\ - bl Random\n\ - mov r2, r8\n\ - and r0, r0, r2\n\ - mov r1, r9\n\ - strb r0, [r1]\n\ - strb r0, [r6]\n\ - ldrb r0, [r6]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r7\n\ - ldr r5, [r0]\n\ - and r5, r5, r4\n\ - cmp r5, #0\n\ - bne ._1806 @cond_branch\n\ - ldr r4, ._1808 + 20\n\ - ldr r3, ._1808\n\ - ldr r0, ._1808 + 12\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x1\n\ - ldr r1, ._1808 + 4\n\ - ldrb r2, [r1]\n\ - mov r1, #0x58\n\ - mul r1, r1, r2\n\ - add r0, r0, r1\n\ - add r3, r3, #0xc\n\ - add r0, r0, r3\n\ - ldrh r0, [r0]\n\ - strh r0, [r4]\n\ - ldr r0, ._1808 + 24\n\ - strb r5, [r0, #0x3]\n\ - ldr r0, ._1808 + 28\n\ - mov r1, #0x0\n\ - strh r5, [r0]\n\ - ldr r0, ._1808 + 32\n\ - ldr r2, ._1808 + 36\n\ - add r0, r0, r2\n\ - strb r1, [r0]\n\ - ldr r1, ._1808 + 40\n\ - ldr r0, ._1808 + 44\n\ - str r0, [r1]\n\ - ldrh r0, [r4]\n\ - mov r1, #0x0\n\ - bl GetMoveTarget\n\ - ldr r1, ._1808 + 48\n\ - strb r0, [r1]\n\ - ldr r2, ._1808 + 52\n\ - ldr r0, [r2]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0xe\n\ - b ._1807\n\ -._1809:\n\ - .align 2, 0\n\ -._1808:\n\ - .word gBattleMons\n\ - .word gBankAttacker\n\ - .word gBitTable\n\ - .word gCurrMovePos\n\ - .word gUnknown_02024BE5\n\ - .word gRandomMove\n\ - .word gBattleCommunication\n\ - .word gDynamicBasePower\n\ - .word +0x2000000\n\ - .word 0x1601c\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_IgnoresAndUsesRandomMove\n\ - .word gBankTarget\n\ - .word gHitMarker\n\ -._1803:\n\ - mov r4, r8\n\ - sub r0, r2, r4\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - mov r8, r0\n\ - bl Random\n\ - add r4, r5, #0\n\ - and r4, r4, r0\n\ - cmp r4, r8\n\ - bge ._1818 @cond_branch\n\ - mov r1, r9\n\ - ldrb r0, [r1]\n\ - add r1, r0, #0\n\ - mul r1, r1, r7\n\ - add r0, r6, #0\n\ - add r0, r0, #0x4c\n\ - add r0, r1, r0\n\ - ldr r0, [r0]\n\ - and r0, r0, r5\n\ - cmp r0, #0\n\ - bne ._1818 @cond_branch\n\ - add r0, r1, r6\n\ - add r0, r0, #0x20\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x48\n\ - beq ._1818 @cond_branch\n\ - cmp r0, #0xf\n\ - beq ._1818 @cond_branch\n\ - mov r2, #0x0\n\ - ldr r0, ._1820\n\ - ldrb r3, [r0]\n\ - add r7, r0, #0\n\ - cmp r2, r3\n\ - bge ._1816 @cond_branch\n\ - ldr r0, [r6, #0x50]\n\ - mov r1, #0x70\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._1816 @cond_branch\n\ - add r1, r6, #0\n\ - add r1, r1, #0x50\n\ - mov r5, #0x70\n\ -._1817:\n\ - add r1, r1, #0x58\n\ - add r2, r2, #0x1\n\ - cmp r2, r3\n\ - bge ._1816 @cond_branch\n\ - ldr r0, [r1]\n\ - and r0, r0, r5\n\ - cmp r0, #0\n\ - beq ._1817 @cond_branch\n\ -._1816:\n\ - ldrb r7, [r7]\n\ - cmp r2, r7\n\ - bne ._1818 @cond_branch\n\ - ldr r1, ._1820 + 4\n\ - ldr r0, ._1820 + 8\n\ - b ._1819\n\ -._1821:\n\ - .align 2, 0\n\ -._1820:\n\ - .word gNoOfAllBanks\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_IgnoresAndFallsAsleep\n\ -._1818:\n\ - mov r2, r8\n\ - sub r4, r4, r2\n\ - cmp r4, r8\n\ - blt ._1822 @cond_branch\n\ -._1805:\n\ - bl Random\n\ - ldr r2, ._1824\n\ - mov r1, #0x3\n\ - and r1, r1, r0\n\ - strb r1, [r2, #0x5]\n\ - ldr r1, ._1824 + 4\n\ - ldr r0, ._1824 + 8\n\ -._1819:\n\ - str r0, [r1]\n\ - mov r0, #0x1\n\ - b ._1823\n\ -._1825:\n\ - .align 2, 0\n\ -._1824:\n\ - .word gBattleCommunication\n\ - .word gBattlescriptCurrInstr\n\ - .word BattleScript_MoveUsedLoafingAround\n\ -._1822:\n\ - ldr r4, ._1826\n\ - ldrb r1, [r4]\n\ - mov r0, #0x58\n\ - mul r1, r1, r0\n\ - ldr r0, ._1826 + 4\n\ - add r1, r1, r0\n\ - mov r0, #0x28\n\ - str r0, [sp]\n\ - mov r0, #0x0\n\ - str r0, [sp, #0x4]\n\ - ldrb r0, [r4]\n\ - str r0, [sp, #0x8]\n\ - ldrb r0, [r4]\n\ - str r0, [sp, #0xc]\n\ - add r0, r1, #0\n\ - mov r2, #0x1\n\ - mov r3, #0x0\n\ - bl CalculateBaseDamage\n\ - ldr r1, ._1826 + 8\n\ - str r0, [r1]\n\ - ldr r1, ._1826 + 12\n\ - ldrb r0, [r4]\n\ - strb r0, [r1]\n\ - ldr r1, ._1826 + 16\n\ - ldr r0, ._1826 + 20\n\ - str r0, [r1]\n\ - ldr r2, ._1826 + 24\n\ - ldr r0, [r2]\n\ - mov r1, #0x80\n\ - lsl r1, r1, #0xc\n\ -._1807:\n\ - orr r0, r0, r1\n\ - str r0, [r2]\n\ - mov r0, #0x2\n\ -._1823:\n\ - add sp, sp, #0x10\n\ - pop {r3, r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4, r5, r6, r7}\n\ - pop {r1}\n\ - bx r1\n\ -._1827:\n\ - .align 2, 0\n\ -._1826:\n\ - .word gBankAttacker\n\ - .word gBattleMons\n\ - .word gBattleMoveDamage\n\ - .word gBankTarget\n\ - .word gBattlescriptCurrInstr\n\ - .word gUnknown_081D99A0\n\ - .word gHitMarker"); -} -#else u8 IsMonDisobedient(void) { u8 obedienceLevel; @@ -3858,17 +3447,25 @@ u8 IsMonDisobedient(void) if (gBattleTypeFlags & BATTLE_TYPE_LINK || GetBankSide(gBankAttacker) == 1 - || !IsOtherTrainer(gBattleMons[gBankAttacker].otId, gBattleMons[gBankAttacker].otName) - || FlagGet(FLAG_BADGE08_GET)) - return 0; + || !IsOtherTrainer(gBattleMons[gBankAttacker].otId, gBattleMons[gBankAttacker].otName)) + return 0; - obedienceLevel = 10; - if (FlagGet(FLAG_BADGE02_GET)) - obedienceLevel = 30; - if (FlagGet(FLAG_BADGE04_GET)) - obedienceLevel = 50; - if (FlagGet(FLAG_BADGE06_GET)) - obedienceLevel = 70; + if (DEBUG && (gUnknown_02023A14_50 & 0x40)) + { + obedienceLevel = 10; + } + else + { + if (FlagGet(FLAG_BADGE08_GET)) + return 0; + obedienceLevel = 10; + if (FlagGet(FLAG_BADGE02_GET)) + obedienceLevel = 30; + if (FlagGet(FLAG_BADGE04_GET)) + obedienceLevel = 50; + if (FlagGet(FLAG_BADGE06_GET)) + obedienceLevel = 70; + } if (gBattleMons[gBankAttacker].level <= obedienceLevel) return 0; @@ -3950,4 +3547,3 @@ u8 IsMonDisobedient(void) } } } -#endif -- cgit v1.2.3 From e50f5e906776a799ec69418168f032880e16384c Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Thu, 25 Jan 2018 19:36:54 -0600 Subject: more debug integrations --- src/battle/battle_controller_opponent.c | 262 +---------- src/battle/battle_controller_player.c | 764 ++------------------------------ src/battle/battle_controller_safari.c | 243 +--------- src/battle/battle_interface.c | 668 +--------------------------- 4 files changed, 88 insertions(+), 1849 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index d2045b6c4..5382738f7 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -30,6 +30,7 @@ struct MovePpInfo u8 ppBonuses; }; +extern u8 gUnknown_02023A14_50; extern u8 gActiveBank; extern u8 gBattleBufferA[][0x200]; extern u16 gBattlePartyID[]; @@ -1209,255 +1210,27 @@ void sub_8034B74(void) } } -#if DEBUG -__attribute__((naked)) -void OpponentHandleTrainerThrow(void) -{ - asm("\ - push {r4, r5, r6, lr}\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5, r6}\n\ - ldr r0, ._480\n\ - ldrb r1, [r0]\n\ - mov r0, #0x10\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._478 @cond_branch\n\ - ldr r0, ._480 + 4\n\ - ldr r1, ._480 + 8\n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - b ._491\n\ -._481:\n\ - .align 2, 0\n\ -._480:\n\ - .word gUnknown_02023A14_50\n\ - .word +0x2000000\n\ - .word 0x160a3\n\ -._478:\n\ - ldr r3, ._484\n\ - ldrh r1, [r3]\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0x3\n\ - cmp r1, r0\n\ - bne ._482 @cond_branch\n\ - bl GetSecretBaseTrainerPicIndex\n\ - b ._487\n\ -._485:\n\ - .align 2, 0\n\ -._484:\n\ - .word gTrainerBattleOpponent\n\ -._482:\n\ - ldr r0, ._488\n\ - ldrh r1, [r0]\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._486 @cond_branch\n\ - bl get_trainer_class_pic_index\n\ - b ._487\n\ -._489:\n\ - .align 2, 0\n\ -._488:\n\ - .word gBattleTypeFlags\n\ -._486:\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._490 @cond_branch\n\ - bl GetEReaderTrainerPicIndex\n\ -._487:\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - b ._491\n\ -._490:\n\ - ldr r2, ._492\n\ - ldrh r1, [r3]\n\ - lsl r0, r1, #0x2\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x3\n\ - add r0, r0, r2\n\ - ldrb r0, [r0, #0x3]\n\ -._491:\n\ - mov r9, r0\n\ - ldr r2, ._492 + 4\n\ - mov r8, r2\n\ - ldrb r1, [r2]\n\ - bl sub_8031A6C\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - bl GetBankIdentity\n\ - add r1, r0, #0\n\ - lsl r1, r1, #0x18\n\ - lsr r1, r1, #0x18\n\ - mov r0, r9\n\ - bl GetMonSpriteTemplate_803C5A0\n\ - ldr r5, ._492 + 8\n\ - ldr r1, ._492 + 12\n\ - mov r2, r9\n\ - lsl r0, r2, #0x2\n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - mov r4, #0x8\n\ - sub r4, r4, r0\n\ - lsl r4, r4, #0x12\n\ - mov r0, #0xa0\n\ - lsl r0, r0, #0xe\n\ - add r4, r4, r0\n\ - asr r4, r4, #0x10\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - bl sub_8079E90\n\ - add r3, r0, #0\n\ - lsl r3, r3, #0x18\n\ - lsr r3, r3, #0x18\n\ - add r0, r5, #0\n\ - mov r1, #0xb0\n\ - add r2, r4, #0\n\ - bl CreateSprite\n\ - ldr r5, ._492 + 16\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - add r1, r1, r5\n\ - strb r0, [r1]\n\ - ldr r4, ._492 + 20\n\ - ldrb r0, [r2]\n\ - add r0, r0, r5\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x4\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r4\n\ - ldr r1, ._492 + 24\n\ - strh r1, [r0, #0x24]\n\ - ldrb r0, [r2]\n\ - add r0, r0, r5\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x4\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r4\n\ - mov r1, #0x2\n\ - strh r1, [r0, #0x2e]\n\ - ldr r0, ._492 + 28\n\ - mov r1, r9\n\ - lsl r6, r1, #0x3\n\ - add r0, r6, r0\n\ - ldrh r0, [r0, #0x4]\n\ - bl IndexOfSpritePaletteTag\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - add r1, r1, r5\n\ - ldrb r1, [r1]\n\ - lsl r2, r1, #0x4\n\ - add r2, r2, r1\n\ - lsl r2, r2, #0x2\n\ - add r2, r2, r4\n\ - lsl r0, r0, #0x4\n\ - ldrb r3, [r2, #0x5]\n\ - mov r1, #0xf\n\ - and r1, r1, r3\n\ - orr r1, r1, r0\n\ - strb r1, [r2, #0x5]\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - add r0, r0, r5\n\ - ldrb r0, [r0]\n\ - lsl r1, r0, #0x4\n\ - add r1, r1, r0\n\ - lsl r1, r1, #0x2\n\ - add r1, r1, r4\n\ - ldrh r0, [r1, #0x4]\n\ - lsl r0, r0, #0x16\n\ - lsr r0, r0, #0x16\n\ - strh r0, [r1, #0x38]\n\ - ldr r0, ._492 + 32\n\ - add r6, r6, r0\n\ - ldrh r0, [r6, #0x6]\n\ - bl GetSpriteTileStartByTag\n\ - mov r2, r8\n\ - ldrb r1, [r2]\n\ - add r1, r1, r5\n\ - ldrb r2, [r1]\n\ - lsl r1, r2, #0x4\n\ - add r1, r1, r2\n\ - lsl r1, r1, #0x2\n\ - add r1, r1, r4\n\ - ldr r2, ._492 + 36\n\ - and r2, r2, r0\n\ - ldrh r3, [r1, #0x4]\n\ - ldr r0, ._492 + 40\n\ - and r0, r0, r3\n\ - orr r0, r0, r2\n\ - strh r0, [r1, #0x4]\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - add r0, r0, r5\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x4\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r4\n\ - mov r2, r9\n\ - strh r2, [r0, #0x6]\n\ - mov r1, r8\n\ - ldrb r0, [r1]\n\ - add r0, r0, r5\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x4\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x2\n\ - add r4, r4, #0x1c\n\ - add r0, r0, r4\n\ - ldr r1, ._492 + 44\n\ - str r1, [r0]\n\ - ldr r1, ._492 + 48\n\ - mov r2, r8\n\ - ldrb r0, [r2]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldr r1, ._492 + 52\n\ - str r1, [r0]\n\ - pop {r3, r4}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - pop {r4, r5, r6}\n\ - pop {r0}\n\ - bx r0\n\ -._493:\n\ - .align 2, 0\n\ -._492:\n\ - .word gTrainers\n\ - .word gActiveBank\n\ - .word gUnknown_02024E8C\n\ - .word gTrainerFrontPicCoords\n\ - .word gObjectBankIDs\n\ - .word gSprites\n\ - .word 0xff10\n\ - .word gTrainerFrontPicPaletteTable\n\ - .word gTrainerFrontPicTable\n\ - .word 0x3ff\n\ - .word 0xfffffc00\n\ - .word sub_80313A0+1\n\ - .word gBattleBankFunc\n\ - .word sub_8032B4C+1"); -} -#else void OpponentHandleTrainerThrow(void) { u32 trainerPicIndex; - if (gTrainerBattleOpponent == 0x400) - trainerPicIndex = GetSecretBaseTrainerPicIndex(); - else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) - trainerPicIndex = get_trainer_class_pic_index(); - else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) - trainerPicIndex = GetEReaderTrainerPicIndex(); +#if DEBUG + if (gUnknown_02023A14_50 & 0x10) + { + trainerPicIndex = gSharedMem[0x160A3]; + } else - trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; +#endif + { + if (gTrainerBattleOpponent == 0x400) + trainerPicIndex = GetSecretBaseTrainerPicIndex(); + else if (gBattleTypeFlags & BATTLE_TYPE_BATTLE_TOWER) + trainerPicIndex = get_trainer_class_pic_index(); + else if (gBattleTypeFlags & BATTLE_TYPE_EREADER_TRAINER) + trainerPicIndex = GetEReaderTrainerPicIndex(); + else + trainerPicIndex = gTrainers[gTrainerBattleOpponent].trainerPic; + } sub_8031A6C(trainerPicIndex, gActiveBank); GetMonSpriteTemplate_803C5A0(trainerPicIndex, GetBankIdentity(gActiveBank)); @@ -1475,7 +1248,6 @@ void OpponentHandleTrainerThrow(void) gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0; gBattleBankFunc[gActiveBank] = sub_8032B4C; } -#endif void OpponentHandleTrainerSlide(void) { diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index 8875d5148..d4b4da6f2 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -42,6 +42,8 @@ extern struct Window gUnknown_03004210; extern void (*gBattleBankFunc[])(void); +extern u32 gOamMatrixAllocBitmap; +extern u8 gUnknown_020297ED; extern u8 gActiveBank; extern u8 gActionSelectionCursor[]; extern u8 gDisplayedStringBattle[]; @@ -617,728 +619,14 @@ struct ChooseMoveStruct const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}"); -#if DEBUG -__attribute__((naked)) -void sub_802C68C(void) -{ - asm("\ - push {r4, r5, r6, r7, lr}\n\ - mov r7, sl\n\ - mov r6, r9\n\ - mov r5, r8\n\ - push {r5, r6, r7}\n\ - add sp, sp, #0xfffffff8\n\ - mov r0, #0x0\n\ - mov r8, r0\n\ - mov r7, #0x0\n\ - ldr r1, ._131\n\ - ldrb r2, [r1]\n\ - lsl r1, r2, #0x9\n\ - ldr r0, ._131 + 4\n\ - add r6, r1, r0\n\ - ldr r0, ._131 + 8\n\ - ldrh r1, [r0, #0x2e]\n\ - mov r5, #0x1\n\ - add r0, r5, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._126 @cond_branch\n\ - b ._127\n\ -._126:\n\ - mov r0, #0x5\n\ - bl PlaySE\n\ - ldr r1, ._131 + 12\n\ - ldr r2, ._131\n\ - ldrb r0, [r2]\n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x1\n\ - add r1, r6, r0\n\ - ldrh r0, [r1]\n\ - cmp r0, #0xae\n\ - bne ._128 @cond_branch\n\ - ldrb r0, [r6, #0x12]\n\ - mov r4, #0x0\n\ - cmp r0, #0x7\n\ - beq ._130 @cond_branch\n\ - ldrb r1, [r6, #0x13]\n\ - mov r0, #0x7\n\ - eor r1, r1, r0\n\ - neg r0, r1\n\ - orr r0, r0, r1\n\ - asr r4, r0, #0x1f\n\ - mov r0, #0x10\n\ - and r4, r4, r0\n\ - b ._130\n\ -._132:\n\ - .align 2, 0\n\ -._131:\n\ - .word gActiveBank\n\ - .word gBattleBufferA+4\n\ - .word gMain\n\ - .word gMoveSelectionCursor\n\ -._128:\n\ - ldr r2, ._135\n\ - ldrh r1, [r1]\n\ - lsl r0, r1, #0x1\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r2\n\ - ldrb r4, [r0, #0x6]\n\ -._130:\n\ - mov r0, #0x10\n\ - and r0, r0, r4\n\ - cmp r0, #0\n\ - beq ._133 @cond_branch\n\ - ldr r0, ._135 + 4\n\ - ldr r1, ._135 + 8\n\ - ldrb r1, [r1]\n\ - strb r1, [r0]\n\ - b ._134\n\ -._136:\n\ - .align 2, 0\n\ -._135:\n\ - .word gBattleMoves\n\ - .word gUnknown_03004344\n\ - .word gActiveBank\n\ -._133:\n\ - ldr r0, ._141\n\ - ldrb r0, [r0]\n\ - bl GetBankIdentity\n\ - add r1, r0, #0\n\ - mov r2, #0x1\n\ - mov r0, #0x1\n\ - and r0, r0, r1\n\ - eor r0, r0, r2\n\ - bl GetBankByIdentity\n\ - ldr r1, ._141 + 4\n\ - strb r0, [r1]\n\ -._134:\n\ - ldr r3, ._141 + 8\n\ - ldr r5, ._141\n\ - ldrb r2, [r5]\n\ - lsl r1, r2, #0x9\n\ - add r0, r3, #1\n\ - add r0, r1, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - bne ._137 @cond_branch\n\ - mov r0, #0x2\n\ - and r0, r0, r4\n\ - cmp r0, #0\n\ - beq ._146 @cond_branch\n\ - add r0, r3, #2\n\ - add r0, r1, r0\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - bne ._146 @cond_branch\n\ - mov r0, #0x1\n\ - add r8, r8, r0\n\ - b ._146\n\ -._142:\n\ - .align 2, 0\n\ -._141:\n\ - .word gActiveBank\n\ - .word gUnknown_03004344\n\ - .word gBattleBufferA\n\ -._137:\n\ - mov r0, #0x7d\n\ - and r0, r0, r4\n\ - cmp r0, #0\n\ - bne ._143 @cond_branch\n\ - mov r1, #0x1\n\ - add r8, r8, r1\n\ -._143:\n\ - ldr r0, ._149\n\ - add r0, r2, r0\n\ - add r1, r6, #0\n\ - add r1, r1, #0x8\n\ - ldrb r0, [r0]\n\ - add r1, r1, r0\n\ - ldrb r0, [r1]\n\ - cmp r0, #0\n\ - beq ._144 @cond_branch\n\ - mov r0, #0x12\n\ - and r0, r0, r4\n\ - cmp r0, #0\n\ - bne ._146 @cond_branch\n\ - mov r0, #0x0\n\ - bl CountAliveMons\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0x1\n\ - bhi ._146 @cond_branch\n\ - ldrb r0, [r5]\n\ - bl sub_803C434\n\ - ldr r1, ._149 + 4\n\ - strb r0, [r1]\n\ - mov r2, #0x0\n\ - mov r8, r2\n\ -._146:\n\ - mov r0, r8\n\ - cmp r0, #0\n\ - bne ._147 @cond_branch\n\ -._144:\n\ - bl DestroyMenuCursor\n\ - ldr r1, ._149\n\ - ldr r0, ._149 + 8\n\ - ldrb r0, [r0]\n\ - add r0, r0, r1\n\ - ldrb r2, [r0]\n\ - ldr r0, ._149 + 4\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x8\n\ - orr r2, r2, r0\n\ - b ._148\n\ -._150:\n\ - .align 2, 0\n\ -._149:\n\ - .word gMoveSelectionCursor\n\ - .word gUnknown_03004344\n\ - .word gActiveBank\n\ -._147:\n\ - ldr r1, ._153\n\ - ldr r2, ._153 + 4\n\ - ldrb r0, [r2]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldr r1, ._153 + 8\n\ - str r1, [r0]\n\ - mov r0, #0x12\n\ - and r4, r4, r0\n\ - cmp r4, #0\n\ - beq ._151 @cond_branch\n\ - ldr r1, ._153 + 12\n\ - ldrb r0, [r2]\n\ - b ._152\n\ -._154:\n\ - .align 2, 0\n\ -._153:\n\ - .word gBattleBankFunc\n\ - .word gActiveBank\n\ - .word sub_802C2EC+1\n\ - .word gUnknown_03004344\n\ -._151:\n\ - mov r0, #0x1\n\ - bl GetBankByIdentity\n\ - ldr r1, ._157\n\ - ldrb r1, [r1]\n\ - ldr r2, ._157 + 4\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x16\n\ - add r0, r0, r2\n\ - ldr r0, [r0]\n\ - and r1, r1, r0\n\ - cmp r1, #0\n\ - beq ._155 @cond_branch\n\ - mov r0, #0x3\n\ - b ._156\n\ -._158:\n\ - .align 2, 0\n\ -._157:\n\ - .word gAbsentBankFlags\n\ - .word gBitTable\n\ -._155:\n\ - mov r0, #0x1\n\ -._156:\n\ - bl GetBankByIdentity\n\ - ldr r1, ._160\n\ -._152:\n\ - strb r0, [r1]\n\ - ldr r2, ._160 + 4\n\ - ldr r1, ._160 + 8\n\ - ldr r0, ._160\n\ - ldrb r0, [r0]\n\ - add r0, r0, r1\n\ - ldrb r1, [r0]\n\ - lsl r0, r1, #0x4\n\ - add r0, r0, r1\n\ - lsl r0, r0, #0x2\n\ - add r2, r2, #0x1c\n\ - add r0, r0, r2\n\ - ldr r1, ._160 + 12\n\ - b ._203\n\ -._161:\n\ - .align 2, 0\n\ -._160:\n\ - .word gUnknown_03004344\n\ - .word gSprites\n\ - .word gObjectBankIDs\n\ - .word sub_8010520+1\n\ -._127:\n\ - mov r6, #0x2\n\ - add r0, r6, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._162 @cond_branch\n\ - bl DestroyMenuCursor\n\ - mov r0, #0x5\n\ - bl PlaySE\n\ - ldr r0, ._164\n\ - strh r7, [r0]\n\ - ldr r1, ._164 + 4\n\ - mov r2, #0xa0\n\ - lsl r2, r2, #0x1\n\ - add r0, r2, #0\n\ - strh r0, [r1]\n\ - ldr r2, ._164 + 8\n\ -._148:\n\ - mov r0, #0x1\n\ - mov r1, #0xa\n\ - bl Emitcmd33\n\ - bl PlayerBufferExecCompleted\n\ - b ._209\n\ -._165:\n\ - .align 2, 0\n\ -._164:\n\ - .word gBattle_BG0_X\n\ - .word gBattle_BG0_Y\n\ - .word 0xffff\n\ -._162:\n\ - mov r0, #0x20\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._166 @cond_branch\n\ - ldr r4, ._170\n\ - add r2, r2, r4\n\ - ldrb r1, [r2]\n\ - add r0, r5, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._167 @cond_branch\n\ - b ._209\n\ -._167:\n\ - ldrb r0, [r2]\n\ - bl nullsub_7\n\ - ldr r0, ._170 + 4\n\ - ldrb r1, [r0]\n\ - add r1, r1, r4\n\ - ldrb r0, [r1]\n\ - mov r2, #0x1\n\ - eor r0, r0, r2\n\ - b ._183\n\ -._171:\n\ - .align 2, 0\n\ -._170:\n\ - .word gMoveSelectionCursor\n\ - .word gActiveBank\n\ -._166:\n\ - mov r3, #0x10\n\ - add r0, r3, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._172 @cond_branch\n\ - ldr r4, ._178\n\ - add r3, r2, r4\n\ - ldrb r2, [r3]\n\ - mov r6, #0x1\n\ - add r0, r5, #0\n\ - and r0, r0, r2\n\ - cmp r0, #0\n\ - beq ._173 @cond_branch\n\ - b ._209\n\ -._173:\n\ - ldr r1, ._178 + 4\n\ - add r0, r6, #0\n\ - eor r0, r0, r2\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc ._175 @cond_branch\n\ - b ._209\n\ -._175:\n\ - ldrb r0, [r3]\n\ - bl nullsub_7\n\ - ldr r2, ._178 + 8\n\ - ldrb r1, [r2]\n\ - add r1, r1, r4\n\ - ldrb r0, [r1]\n\ - eor r0, r0, r6\n\ - b ._183\n\ -._179:\n\ - .align 2, 0\n\ -._178:\n\ - .word gMoveSelectionCursor\n\ - .word gUnknown_03004348\n\ - .word gActiveBank\n\ -._172:\n\ - mov r0, #0x40\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._180 @cond_branch\n\ - ldr r4, ._184\n\ - add r2, r2, r4\n\ - ldrb r1, [r2]\n\ - add r0, r6, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._181 @cond_branch\n\ - b ._209\n\ -._181:\n\ - ldrb r0, [r2]\n\ - bl nullsub_7\n\ - ldr r2, ._184 + 4\n\ - ldrb r1, [r2]\n\ - add r1, r1, r4\n\ - ldrb r0, [r1]\n\ - mov r2, #0x2\n\ - eor r0, r0, r2\n\ - b ._183\n\ -._185:\n\ - .align 2, 0\n\ -._184:\n\ - .word gMoveSelectionCursor\n\ - .word gActiveBank\n\ -._180:\n\ - mov r0, #0x80\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._186 @cond_branch\n\ - ldr r4, ._192\n\ - add r3, r2, r4\n\ - ldrb r2, [r3]\n\ - mov r5, #0x2\n\ - add r0, r6, #0\n\ - and r0, r0, r2\n\ - cmp r0, #0\n\ - beq ._187 @cond_branch\n\ - b ._209\n\ -._187:\n\ - ldr r1, ._192 + 4\n\ - add r0, r5, #0\n\ - eor r0, r0, r2\n\ - ldrb r1, [r1]\n\ - cmp r0, r1\n\ - bcc ._189 @cond_branch\n\ - b ._209\n\ -._189:\n\ - ldrb r0, [r3]\n\ - bl nullsub_7\n\ - ldr r2, ._192 + 8\n\ - ldrb r1, [r2]\n\ - add r1, r1, r4\n\ - ldrb r0, [r1]\n\ - eor r0, r0, r5\n\ -._183:\n\ - strb r0, [r1]\n\ - mov r0, #0x5\n\ - bl PlaySE\n\ - ldr r1, ._192 + 8\n\ - ldrb r0, [r1]\n\ - add r0, r0, r4\n\ - ldrb r0, [r0]\n\ - mov r1, #0x0\n\ - bl sub_802E3B4\n\ - bl sub_802E220\n\ - bl sub_802E2D4\n\ - b ._209\n\ -._193:\n\ - .align 2, 0\n\ -._192:\n\ - .word gMoveSelectionCursor\n\ - .word gUnknown_03004348\n\ - .word gActiveBank\n\ -._186:\n\ - mov r0, #0x4\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._194 @cond_branch\n\ - ldr r0, ._201\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x1\n\ - bhi ._195 @cond_branch\n\ - b ._209\n\ -._195:\n\ - ldr r0, ._201 + 4\n\ - ldrh r1, [r0]\n\ - add r0, r6, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._197 @cond_branch\n\ - b ._209\n\ -._197:\n\ - ldr r4, ._201 + 8\n\ - add r0, r2, r4\n\ - ldrb r0, [r0]\n\ - ldr r1, ._201 + 12\n\ - bl sub_802E12C\n\ - ldr r2, ._201 + 16\n\ - ldrb r0, [r2]\n\ - add r0, r0, r4\n\ - ldrb r0, [r0]\n\ - cmp r0, #0\n\ - beq ._199 @cond_branch\n\ - ldr r0, ._201 + 20\n\ - strb r7, [r0]\n\ - b ._200\n\ -._202:\n\ - .align 2, 0\n\ -._201:\n\ - .word gUnknown_03004348\n\ - .word gBattleTypeFlags\n\ - .word gMoveSelectionCursor\n\ - .word gUnknown_081FAE80\n\ - .word gActiveBank\n\ - .word gUnknown_03004344\n\ -._199:\n\ - ldr r1, ._204\n\ - add r0, r0, #0x1\n\ - strb r0, [r1]\n\ - add r0, r1, #0\n\ -._200:\n\ - ldrb r0, [r0]\n\ - mov r1, #0x1b\n\ - bl sub_802E3B4\n\ - ldr r4, ._204 + 4\n\ - ldr r1, ._204 + 8\n\ - mov r0, #0x1c\n\ - str r0, [sp]\n\ - mov r0, #0x3a\n\ - str r0, [sp, #0x4]\n\ - add r0, r4, #0\n\ - mov r2, #0x17\n\ - mov r3, #0x37\n\ - bl Text_FillWindowRect\n\ - ldr r1, ._204 + 12\n\ - mov r2, #0xa4\n\ - lsl r2, r2, #0x2\n\ - mov r0, #0x37\n\ - str r0, [sp]\n\ - add r0, r4, #0\n\ - mov r3, #0x17\n\ - bl Text_InitWindow\n\ - add r0, r4, #0\n\ - bl Text_PrintWindow8002F44\n\ - ldr r1, ._204 + 16\n\ - ldr r0, ._204 + 20\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldr r1, ._204 + 24\n\ - b ._203\n\ -._205:\n\ - .align 2, 0\n\ -._204:\n\ - .word gUnknown_03004344\n\ - .word gUnknown_03004210\n\ - .word 0x1016\n\ - .word BattleText_SwitchWhich\n\ - .word gBattleBankFunc\n\ - .word gActiveBank\n\ - .word sub_802CA60+1\n\ -._194:\n\ - ldr r0, ._214\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x1\n\ - beq ._206 @cond_branch\n\ - b ._209\n\ -._206:\n\ - mov r0, #0x8\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._208 @cond_branch\n\ - b ._209\n\ -._208:\n\ - ldr r6, ._214 + 4\n\ - ldr r1, ._214 + 8\n\ - str r3, [sp]\n\ - mov r0, #0x3a\n\ - str r0, [sp, #0x4]\n\ - add r0, r6, #0\n\ - mov r2, #0x1\n\ - mov r3, #0x37\n\ - bl Text_FillWindowRect\n\ - ldr r0, ._214 + 12\n\ - mov sl, r0\n\ - ldr r1, ._214 + 16\n\ - ldrb r0, [r1]\n\ - lsl r0, r0, #0x1\n\ - add r0, r0, sl\n\ - ldrh r0, [r0]\n\ - mov r2, #0x64\n\ - mov r9, r2\n\ - mov r1, r9\n\ - mul r1, r1, r0\n\ - add r0, r1, #0\n\ - ldr r5, ._214 + 20\n\ - add r0, r0, r5\n\ - mov r1, #0xd\n\ - bl GetMonData\n\ - mov r1, #0xd\n\ - mul r1, r1, r0\n\ - ldr r0, ._214 + 24\n\ - add r1, r1, r0\n\ - mov r2, #0x80\n\ - lsl r2, r2, #0x1\n\ - mov r0, #0x37\n\ - mov r8, r0\n\ - str r0, [sp]\n\ - add r0, r6, #0\n\ - mov r3, #0x2\n\ - bl Text_InitWindowAndPrintText\n\ - ldr r4, ._214 + 28\n\ - ldr r1, ._214 + 16\n\ - ldrb r0, [r1]\n\ - lsl r0, r0, #0x1\n\ - add r0, r0, sl\n\ - ldrh r0, [r0]\n\ - mov r2, r9\n\ - mul r2, r2, r0\n\ - add r0, r2, #0\n\ - add r0, r0, r5\n\ - mov r1, #0xd\n\ - bl GetMonData\n\ - add r1, r0, #0\n\ - add r0, r4, #0\n\ - mov r2, #0x2\n\ - mov r3, #0x3\n\ - bl ConvertIntToDecimalStringN\n\ - mov r2, #0x88\n\ - lsl r2, r2, #0x1\n\ - mov r0, r8\n\ - str r0, [sp]\n\ - add r0, r6, #0\n\ - add r1, r4, #0\n\ - mov r3, #0xa\n\ - bl Text_InitWindowAndPrintText\n\ - ldr r1, ._214 + 32\n\ - mov r2, #0x8b\n\ - lsl r2, r2, #0x1\n\ - mov r5, #0x39\n\ - str r5, [sp]\n\ - add r0, r6, #0\n\ - mov r3, #0x1\n\ - bl Text_InitWindowAndPrintText\n\ - ldr r0, ._214 + 36\n\ - ldrb r1, [r0]\n\ - add r0, r4, #0\n\ - mov r2, #0x2\n\ - mov r3, #0x3\n\ - bl ConvertIntToDecimalStringN\n\ - mov r2, #0x8e\n\ - lsl r2, r2, #0x1\n\ - str r5, [sp]\n\ - add r0, r6, #0\n\ - add r1, r4, #0\n\ - mov r3, #0x4\n\ - bl Text_InitWindowAndPrintText\n\ - ldr r0, ._214 + 40\n\ - add r2, r0, #0\n\ - add r2, r2, #0x3e\n\ - mov r1, #0x3f\n\ -._211:\n\ - ldrb r0, [r2]\n\ - lsl r0, r0, #0x1f\n\ - cmp r0, #0\n\ - beq ._210 @cond_branch\n\ - add r0, r7, #1\n\ - lsl r0, r0, #0x18\n\ - lsr r7, r0, #0x18\n\ -._210:\n\ - add r2, r2, #0x44\n\ - sub r1, r1, #0x1\n\ - cmp r1, #0\n\ - bge ._211 @cond_branch\n\ - ldr r4, ._214 + 28\n\ - add r0, r4, #0\n\ - add r1, r7, #0\n\ - mov r2, #0x2\n\ - mov r3, #0x2\n\ - bl ConvertIntToDecimalStringN\n\ - ldr r6, ._214 + 4\n\ - mov r2, #0x91\n\ - lsl r2, r2, #0x1\n\ - mov r5, #0x39\n\ - str r5, [sp]\n\ - add r0, r6, #0\n\ - add r1, r4, #0\n\ - mov r3, #0x8\n\ - bl Text_InitWindowAndPrintText\n\ - bl GetTaskCount\n\ - lsl r0, r0, #0x18\n\ - lsr r7, r0, #0x18\n\ - add r0, r4, #0\n\ - add r1, r7, #0\n\ - mov r2, #0x2\n\ - mov r3, #0x2\n\ - bl ConvertIntToDecimalStringN\n\ - mov r2, #0x93\n\ - lsl r2, r2, #0x1\n\ - str r5, [sp]\n\ - add r0, r6, #0\n\ - add r1, r4, #0\n\ - mov r3, #0xb\n\ - bl Text_InitWindowAndPrintText\n\ - mov r1, #0x0\n\ - mov r7, #0x0\n\ - ldr r0, ._214 + 44\n\ - mov r3, #0x1\n\ - ldr r2, [r0]\n\ -._213:\n\ - add r0, r3, #0\n\ - LSL r0, r1\n\ - and r0, r0, r2\n\ - cmp r0, #0\n\ - beq ._212 @cond_branch\n\ - add r0, r7, #1\n\ - lsl r0, r0, #0x18\n\ - lsr r7, r0, #0x18\n\ -._212:\n\ - add r1, r1, #0x1\n\ - cmp r1, #0x1f\n\ - ble ._213 @cond_branch\n\ - ldr r4, ._214 + 28\n\ - add r0, r4, #0\n\ - add r1, r7, #0\n\ - mov r2, #0x2\n\ - mov r3, #0x2\n\ - bl ConvertIntToDecimalStringN\n\ - ldr r0, ._214 + 4\n\ - mov r2, #0x95\n\ - lsl r2, r2, #0x1\n\ - mov r1, #0x39\n\ - str r1, [sp]\n\ - add r1, r4, #0\n\ - mov r3, #0xe\n\ - bl Text_InitWindowAndPrintText\n\ - ldr r1, ._214 + 48\n\ - ldr r0, ._214 + 16\n\ - ldrb r0, [r0]\n\ - lsl r0, r0, #0x2\n\ - add r0, r0, r1\n\ - ldr r1, ._214 + 52\n\ -._203:\n\ - str r1, [r0]\n\ -._209:\n\ - add sp, sp, #0x8\n\ - pop {r3, r4, r5}\n\ - mov r8, r3\n\ - mov r9, r4\n\ - mov sl, r5\n\ - pop {r4, r5, r6, r7}\n\ - pop {r0}\n\ - bx r0\n\ -._215:\n\ - .align 2, 0\n\ -._214:\n\ - .word gUnknown_020297ED\n\ - .word gUnknown_03004210\n\ - .word 0x1016\n\ - .word gBattlePartyID\n\ - .word gActiveBank\n\ - .word gPlayerParty\n\ - .word gMoveNames\n\ - .word gDisplayedStringBattle\n\ - .word gString_TurnJP\n\ - .word gAnimMoveTurn\n\ - .word gSprites\n\ - .word gOamMatrixAllocBitmap\n\ - .word gBattleBankFunc\n\ - .word debug_sub_8030C24+1"); -} -#else +void debug_sub_8030C24(void); + void sub_802C68C(void) { u32 r8 = 0; +#if DEBUG + u8 count = 0; +#endif struct ChooseMoveStruct *r6 = (struct ChooseMoveStruct *)(gBattleBufferA[gActiveBank] + 4); if (gMain.newKeys & A_BUTTON) @@ -1469,8 +757,44 @@ void sub_802C68C(void) gBattleBankFunc[gActiveBank] = sub_802CA60; } } -} +#if DEBUG + else if (gUnknown_020297ED == 1 && (gMain.newKeys & START_BUTTON)) + { + const u8 *moveName; + s32 i; + + Text_FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 16, 0x3A); + moveName = gMoveNames[GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1)]; + Text_InitWindowAndPrintText(&gUnknown_03004210, moveName, 0x100, 2, 0x37); + ConvertIntToDecimalStringN( + gDisplayedStringBattle, + GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1), + 2, 3); + Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x110, 10, 0x37); + Text_InitWindowAndPrintText(&gUnknown_03004210, gString_TurnJP, 0x116, 1, 0x39); + ConvertIntToDecimalStringN(gDisplayedStringBattle, gAnimMoveTurn, 2, 3); + Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x11C, 4, 0x39); + for (i = 0; i < 64; i++) + { + if (gSprites[i].inUse) + count++; + } + ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); + Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x122, 8, 0x39); + count = GetTaskCount(); + ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); + Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x126, 11, 0x39); + for (i = 0, count = 0; i < 32; i++) + { + if (gOamMatrixAllocBitmap & (1 << i)) + count++; + } + ConvertIntToDecimalStringN(gDisplayedStringBattle, count, 2, 2); + Text_InitWindowAndPrintText(&gUnknown_03004210, gDisplayedStringBattle, 0x12A, 14, 0x39); + gBattleBankFunc[gActiveBank] = debug_sub_8030C24; + } #endif +} extern const u8 BattleText_Format[]; diff --git a/src/battle/battle_controller_safari.c b/src/battle/battle_controller_safari.c index 4af8adbbb..5896e5e18 100644 --- a/src/battle/battle_controller_safari.c +++ b/src/battle/battle_controller_safari.c @@ -1,6 +1,7 @@ #include "global.h" #include "battle_anim_81258BC.h" #include "battle.h" +#include "battle_interface.h" #include "battle_message.h" #include "data2.h" #include "link.h" @@ -207,236 +208,6 @@ void SafariBufferRunCommand(void) } } -#if DEBUG -__attribute__((naked)) -void bx_battle_menu_t6_2(void) -{ - asm("\ - push {r4, r5, lr}\n\ - add sp, sp, #0xfffffffc\n\ - ldr r0, ._94\n\ - ldrh r1, [r0, #0x2e]\n\ - mov r2, #0x1\n\ - add r0, r2, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._89 @cond_branch\n\ - mov r0, #0x5\n\ - bl PlaySE\n\ - bl DestroyMenuCursor\n\ - ldr r1, ._94 + 4\n\ - ldr r0, ._94 + 8\n\ - ldrb r0, [r0]\n\ - add r0, r0, r1\n\ - ldrb r0, [r0]\n\ - cmp r0, #0x1\n\ - beq ._90 @cond_branch\n\ - cmp r0, #0x1\n\ - bgt ._91 @cond_branch\n\ - cmp r0, #0\n\ - beq ._92 @cond_branch\n\ - b ._101\n\ -._95:\n\ - .align 2, 0\n\ -._94:\n\ - .word gMain\n\ - .word gActionSelectionCursor\n\ - .word gActiveBank\n\ -._91:\n\ - cmp r0, #0x2\n\ - beq ._96 @cond_branch\n\ - cmp r0, #0x3\n\ - beq ._97 @cond_branch\n\ - b ._101\n\ -._92:\n\ - mov r0, #0x1\n\ - mov r1, #0x5\n\ - b ._100\n\ -._90:\n\ - mov r0, #0x1\n\ - mov r1, #0x6\n\ - b ._100\n\ -._96:\n\ - mov r0, #0x1\n\ - mov r1, #0x7\n\ -._100:\n\ - mov r2, #0x0\n\ - bl Emitcmd33\n\ - b ._101\n\ -._97:\n\ - mov r0, #0x1\n\ - mov r1, #0x8\n\ - mov r2, #0x0\n\ - bl Emitcmd33\n\ -._101:\n\ - bl SafariBufferExecCompleted\n\ - b ._129\n\ -._89:\n\ - mov r3, #0x20\n\ - add r0, r3, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._103 @cond_branch\n\ - ldr r5, ._107\n\ - ldr r4, ._107 + 4\n\ - ldrb r0, [r4]\n\ - add r0, r0, r5\n\ - ldrb r1, [r0]\n\ - add r0, r2, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._104 @cond_branch\n\ - b ._129\n\ -._104:\n\ - mov r0, #0x5\n\ - bl PlaySE\n\ - ldrb r0, [r4]\n\ - add r0, r0, r5\n\ - ldrb r0, [r0]\n\ - bl nullsub_8\n\ - ldrb r1, [r4]\n\ - add r1, r1, r5\n\ - ldrb r0, [r1]\n\ - mov r2, #0x1\n\ - b ._111\n\ -._108:\n\ - .align 2, 0\n\ -._107:\n\ - .word gActionSelectionCursor\n\ - .word gActiveBank\n\ -._103:\n\ - mov r0, #0x10\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._109 @cond_branch\n\ - ldr r5, ._112\n\ - ldr r4, ._112 + 4\n\ - ldrb r0, [r4]\n\ - add r0, r0, r5\n\ - ldrb r1, [r0]\n\ - add r0, r2, #0\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._129 @cond_branch\n\ - mov r0, #0x5\n\ - bl PlaySE\n\ - ldrb r0, [r4]\n\ - add r0, r0, r5\n\ - ldrb r0, [r0]\n\ - bl nullsub_8\n\ - ldrb r1, [r4]\n\ - add r1, r1, r5\n\ - ldrb r0, [r1]\n\ - mov r2, #0x1\n\ - b ._111\n\ -._113:\n\ - .align 2, 0\n\ -._112:\n\ - .word gActionSelectionCursor\n\ - .word gActiveBank\n\ -._109:\n\ - mov r0, #0x40\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._114 @cond_branch\n\ - ldr r5, ._117\n\ - ldr r4, ._117 + 4\n\ - ldrb r0, [r4]\n\ - add r0, r0, r5\n\ - ldrb r1, [r0]\n\ - mov r0, #0x2\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._129 @cond_branch\n\ - b ._116\n\ -._118:\n\ - .align 2, 0\n\ -._117:\n\ - .word gActionSelectionCursor\n\ - .word gActiveBank\n\ -._114:\n\ - mov r0, #0x80\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._119 @cond_branch\n\ - ldr r5, ._122\n\ - ldr r4, ._122 + 4\n\ - ldrb r0, [r4]\n\ - add r0, r0, r5\n\ - ldrb r1, [r0]\n\ - mov r0, #0x2\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - bne ._129 @cond_branch\n\ -._116:\n\ - mov r0, #0x5\n\ - bl PlaySE\n\ - ldrb r0, [r4]\n\ - add r0, r0, r5\n\ - ldrb r0, [r0]\n\ - bl nullsub_8\n\ - ldrb r1, [r4]\n\ - add r1, r1, r5\n\ - ldrb r0, [r1]\n\ - mov r2, #0x2\n\ -._111:\n\ - eor r0, r0, r2\n\ - strb r0, [r1]\n\ - ldrb r0, [r4]\n\ - add r0, r0, r5\n\ - ldrb r0, [r0]\n\ - mov r1, #0x0\n\ - bl sub_802E3E4\n\ - b ._129\n\ -._123:\n\ - .align 2, 0\n\ -._122:\n\ - .word gActionSelectionCursor\n\ - .word gActiveBank\n\ -._119:\n\ - mov r0, #0x80\n\ - lsl r0, r0, #0x1\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._124 @cond_branch\n\ - ldr r0, ._127\n\ - ldrb r2, [r0]\n\ - lsl r0, r2, #0x1\n\ - add r0, r0, r2\n\ - lsl r0, r0, #0x2\n\ - ldr r1, ._127 + 4\n\ - add r0, r0, r1\n\ - ldrb r1, [r0]\n\ - add r0, r3, #0\n\ - and r0, r0, r1\n\ - lsl r0, r0, #0x18\n\ - lsr r0, r0, #0x18\n\ - cmp r0, #0\n\ - bne ._129 @cond_branch\n\ - str r0, [sp]\n\ - add r0, r2, #0\n\ - add r1, r2, #0\n\ - mov r3, #0x4\n\ - bl move_anim_start_t3\n\ - b ._129\n\ -._128:\n\ - .align 2, 0\n\ -._127:\n\ - .word gActiveBank\n\ - .word +0x2017810\n\ -._124:\n\ - mov r0, #0x8\n\ - and r0, r0, r1\n\ - cmp r0, #0\n\ - beq ._129 @cond_branch\n\ - bl sub_804454C\n\ -._129:\n\ - add sp, sp, #0x4\n\ - pop {r4, r5}\n\ - pop {r0}\n\ - bx r0"); -} -#else void bx_battle_menu_t6_2(void) { if (gMain.newKeys & A_BUTTON) @@ -502,8 +273,18 @@ void bx_battle_menu_t6_2(void) sub_802E3E4(gActionSelectionCursor[gActiveBank], 0); } } -} +#if DEBUG + else if (gMain.newKeys & R_BUTTON) + { + if (!ewram17810[gActiveBank].unk0_5) + move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, 4, 0); + } + else if (gMain.newKeys & START_BUTTON) + { + sub_804454C(); + } #endif +} void sub_812B65C(void) { diff --git a/src/battle/battle_interface.c b/src/battle/battle_interface.c index b703bc7b8..9be026d53 100644 --- a/src/battle/battle_interface.c +++ b/src/battle/battle_interface.c @@ -1277,353 +1277,8 @@ _08044548: .4byte 0x04000008\n\ } #endif -#if DEBUG -__attribute__((naked)) -void sub_804454C() -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, sl\n" - " mov r6, r9\n" - " mov r5, r8\n" - " push {r5, r6, r7}\n" - " add sp, sp, #0xfffffffc\n" - " mov r0, #0x0\n" - " mov r8, r0\n" - " ldr r0, ._150\n" - " ldrb r0, [r0]\n" - " cmp r8, r0\n" - " blt ._133 @cond_branch\n" - " b ._164\n" - "._133:\n" - " ldr r1, ._150 + 4\n" - " mov r9, r1\n" - " mov r2, #0x64\n" - " mov sl, r2\n" - " ldr r7, ._150 + 8\n" - "._165:\n" - " ldr r0, ._150 + 12\n" - " mov r6, r8\n" - " add r5, r6, r0\n" - " ldrb r1, [r5]\n" - " lsl r0, r1, #0x4\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " mov r1, r9\n" - " add r1, r1, #0x1c\n" - " add r0, r0, r1\n" - " ldr r1, [r0]\n" - " ldr r0, ._150 + 16\n" - " cmp r1, r0\n" - " beq ._135 @cond_branch\n" - " b ._147\n" - "._135:\n" - " ldr r0, ._150 + 20\n" - " ldrb r0, [r0]\n" - " lsl r4, r6, #0x18\n" - " cmp r0, #0\n" - " bne ._138 @cond_branch\n" - " lsr r0, r4, #0x18\n" - " bl GetBankSide\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x1\n" - " bne ._138 @cond_branch\n" - " b ._147\n" - "._138:\n" - " bl IsDoubleBattle\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._141 @cond_branch\n" - " lsr r0, r4, #0x18\n" - " bl GetBankSide\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._141 @cond_branch\n" - " b ._147\n" - "._141:\n" - " mov r0, r8\n" - " lsl r3, r0, #0x2\n" - " ldr r0, ._150 + 24\n" - " add r3, r3, r0\n" - " ldr r0, [r3]\n" - " lsl r0, r0, #0x1b\n" - " lsr r0, r0, #0x1f\n" - " mov r2, #0x1\n" - " eor r2, r2, r0\n" - " lsl r2, r2, #0x4\n" - " ldrb r0, [r3]\n" - " mov r6, #0x11\n" - " neg r6, r6\n" - " add r1, r6, #0\n" - " and r0, r0, r1\n" - " orr r0, r0, r2\n" - " strb r0, [r3]\n" - " ldr r0, [r3]\n" - " lsl r0, r0, #0x1b\n" - " lsr r6, r0, #0x1f\n" - " lsr r0, r4, #0x18\n" - " bl GetBankSide\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._143 @cond_branch\n" - " bl IsDoubleBattle\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._144 @cond_branch\n" - " b ._147\n" - "._144:\n" - " ldr r0, ._150 + 28\n" - " ldrh r1, [r0]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " lsl r0, r0, #0x10\n" - " lsr r2, r0, #0x10\n" - " cmp r2, #0\n" - " beq ._146 @cond_branch\n" - " b ._147\n" - "._146:\n" - " cmp r6, #0x1\n" - " bne ._148 @cond_branch\n" - " ldrb r1, [r5]\n" - " lsl r0, r1, #0x4\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r9\n" - " ldrh r0, [r0, #0x38]\n" - " lsl r0, r0, #0x18\n" - " lsr r1, r0, #0x18\n" - " str r2, [sp]\n" - " lsl r0, r1, #0x4\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r9\n" - " ldrh r1, [r0, #0x4]\n" - " lsl r1, r1, #0x16\n" - " lsr r1, r1, #0x11\n" - " ldr r0, ._150 + 32\n" - " add r1, r1, r0\n" - " mov r0, sp\n" - " ldr r2, ._150 + 36\n" - " bl CpuSet\n" - " ldrb r4, [r5]\n" - " ldrh r0, [r7]\n" - " mov r1, sl\n" - " mul r1, r1, r0\n" - " add r0, r1, #0\n" - " ldr r2, ._150 + 40\n" - " add r0, r0, r2\n" - " mov r1, #0x39\n" - " bl GetMonData\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x10\n" - " asr r1, r1, #0x10\n" - " add r0, r4, #0\n" - " mov r2, #0x0\n" - " bl sub_8044210\n" - " ldrb r4, [r5]\n" - " ldrh r0, [r7]\n" - " mov r6, sl\n" - " mul r6, r6, r0\n" - " add r0, r6, #0\n" - " ldr r1, ._150 + 40\n" - " b ._149\n" - "._151:\n" - " .align 2, 0\n" - "._150:\n" - " .word gNoOfAllBanks\n" - " .word gSprites\n" - " .word gBattlePartyID\n" - " .word gHealthboxIDs\n" - " .word SpriteCallbackDummy+1\n" - " .word gUnknown_020297ED\n" - " .word +0x2017800\n" - " .word gBattleTypeFlags\n" - " .word 0x6010000\n" - " .word 0x5000040\n" - " .word gPlayerParty\n" - "._148:\n" - " ldrb r0, [r5]\n" - " bl draw_status_ailment_maybe\n" - " ldrb r0, [r5]\n" - " ldrh r1, [r7]\n" - " mov r2, sl\n" - " mul r2, r2, r1\n" - " add r1, r2, #0\n" - " ldr r6, ._153\n" - " add r1, r1, r6\n" - " mov r2, #0x5\n" - " bl sub_8045A5C\n" - " mov r0, #0x75\n" - " bl sub_8043CDC\n" - " ldrb r2, [r5]\n" - " lsl r1, r2, #0x4\n" - " add r1, r1, r2\n" - " lsl r1, r1, #0x2\n" - " add r1, r1, r9\n" - " ldrh r1, [r1, #0x4]\n" - " lsl r1, r1, #0x16\n" - " lsr r1, r1, #0x11\n" - " ldr r2, ._153 + 4\n" - " add r1, r1, r2\n" - " ldr r2, ._153 + 8\n" - " bl CpuSet\n" - " b ._163\n" - "._154:\n" - " .align 2, 0\n" - "._153:\n" - " .word gPlayerParty\n" - " .word 0x6010680\n" - " .word 0x4000008\n" - "._143:\n" - " cmp r6, #0x1\n" - " bne ._155 @cond_branch\n" - " ldr r0, ._158\n" - " ldrh r1, [r0]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " lsl r0, r0, #0x10\n" - " lsr r2, r0, #0x10\n" - " cmp r2, #0\n" - " beq ._156 @cond_branch\n" - " ldrb r0, [r5]\n" - " ldrh r1, [r7]\n" - " mov r6, sl\n" - " mul r6, r6, r1\n" - " add r1, r6, #0\n" - " ldr r2, ._158 + 4\n" - " add r1, r1, r2\n" - " bl sub_8044338\n" - " b ._163\n" - "._159:\n" - " .align 2, 0\n" - "._158:\n" - " .word gBattleTypeFlags\n" - " .word gEnemyParty\n" - "._156:\n" - " ldrb r1, [r5]\n" - " lsl r0, r1, #0x4\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r9\n" - " ldrh r0, [r0, #0x38]\n" - " lsl r0, r0, #0x18\n" - " lsr r1, r0, #0x18\n" - " str r2, [sp]\n" - " lsl r0, r1, #0x4\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r9\n" - " ldrh r1, [r0, #0x4]\n" - " lsl r1, r1, #0x16\n" - " lsr r1, r1, #0x11\n" - " ldr r6, ._161\n" - " add r1, r1, r6\n" - " mov r0, sp\n" - " ldr r2, ._161 + 4\n" - " bl CpuSet\n" - " ldrb r4, [r5]\n" - " ldrh r0, [r7]\n" - " mov r1, sl\n" - " mul r1, r1, r0\n" - " add r0, r1, #0\n" - " ldr r2, ._161 + 8\n" - " add r0, r0, r2\n" - " mov r1, #0x39\n" - " bl GetMonData\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x10\n" - " asr r1, r1, #0x10\n" - " add r0, r4, #0\n" - " mov r2, #0x0\n" - " bl sub_8044210\n" - " ldrb r4, [r5]\n" - " ldrh r0, [r7]\n" - " mov r6, sl\n" - " mul r6, r6, r0\n" - " add r0, r6, #0\n" - " ldr r1, ._161 + 8\n" - "._149:\n" - " add r0, r0, r1\n" - " mov r1, #0x3a\n" - " bl GetMonData\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x10\n" - " asr r1, r1, #0x10\n" - " add r0, r4, #0\n" - " mov r2, #0x1\n" - " bl sub_8044210\n" - " b ._163\n" - "._162:\n" - " .align 2, 0\n" - "._161:\n" - " .word 0x6010000\n" - " .word 0x5000040\n" - " .word gEnemyParty\n" - "._155:\n" - " ldrb r0, [r5]\n" - " bl draw_status_ailment_maybe\n" - " ldrb r0, [r5]\n" - " ldrh r1, [r7]\n" - " mov r6, #0x64\n" - " mul r1, r1, r6\n" - " ldr r4, ._166\n" - " add r1, r1, r4\n" - " mov r2, #0x5\n" - " bl sub_8045A5C\n" - " ldr r0, ._166 + 4\n" - " ldrh r1, [r0]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._163 @cond_branch\n" - " ldrb r0, [r5]\n" - " ldrh r1, [r7]\n" - " mul r1, r1, r6\n" - " add r1, r1, r4\n" - " mov r2, #0x4\n" - " bl sub_8045A5C\n" - "._163:\n" - " ldr r0, ._166 + 8\n" - " add r0, r0, r8\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x4\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r9\n" - " ldrh r1, [r0, #0x3c]\n" - " mov r2, #0x1\n" - " eor r1, r1, r2\n" - " strh r1, [r0, #0x3c]\n" - "._147:\n" - " add r7, r7, #0x2\n" - " mov r2, #0x1\n" - " add r8, r8, r2\n" - " ldr r0, ._166 + 12\n" - " ldrb r0, [r0]\n" - " cmp r8, r0\n" - " bge ._164 @cond_branch\n" - " b ._165\n" - "._164:\n" - " add sp, sp, #0x4\n" - " pop {r3, r4, r5}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " mov sl, r5\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._167:\n" - " .align 2, 0\n" - "._166:\n" - " .word gEnemyParty\n" - " .word gBattleTypeFlags\n" - " .word gHealthboxIDs\n" - " .word gNoOfAllBanks\n" - "\n" - ); -} -#else +extern u8 gUnknown_020297ED; + void sub_804454C(void) { s32 i; @@ -1632,7 +1287,11 @@ void sub_804454C(void) for (i = 0; i < gNoOfAllBanks; i++) { if (gSprites[gHealthboxIDs[i]].callback == SpriteCallbackDummy +#if DEBUG + && (gUnknown_020297ED != 0 || GetBankSide(i) != 1) +#else && GetBankSide(i) != 1 +#endif && (IsDoubleBattle() || GetBankSide(i) != 0)) { u8 r6; @@ -1691,7 +1350,6 @@ void sub_804454C(void) } } } -#endif // This function almost matches except for just two instructions around 0x08044B52 that are swapped. #ifdef NONMATCHING @@ -3045,310 +2703,6 @@ static u8 sub_80457E8(u8 a, u8 b) } } -#if DEBUG -__attribute__((naked)) -void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, sl\n" - " mov r6, r9\n" - " mov r5, r8\n" - " push {r5, r6, r7}\n" - " add sp, sp, #0xfffffff8\n" - " mov r9, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " mov r8, r0\n" - " lsl r2, r2, #0x18\n" - " lsr r7, r2, #0x18\n" - " ldr r1, ._429\n" - " lsl r0, r0, #0x4\n" - " add r0, r0, r8\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r1\n" - " ldrh r0, [r0, #0x3a]\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " mov sl, r0\n" - " bl GetBankSide\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " beq ._410 @cond_branch\n" - " b ._411\n" - "._410:\n" - " cmp r7, #0x3\n" - " beq ._412 @cond_branch\n" - " cmp r7, #0\n" - " bne ._413 @cond_branch\n" - "._412:\n" - " mov r0, r9\n" - " mov r1, #0x38\n" - " bl GetMonData\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x18\n" - " lsr r1, r1, #0x18\n" - " mov r0, r8\n" - " bl sub_8043FC0\n" - "._413:\n" - " cmp r7, #0x1\n" - " bhi ._414 @cond_branch\n" - " mov r0, r9\n" - " mov r1, #0x39\n" - " bl GetMonData\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x10\n" - " asr r1, r1, #0x10\n" - " mov r0, r8\n" - " mov r2, #0x0\n" - " bl sub_80440EC\n" - "._414:\n" - " cmp r7, #0x2\n" - " beq ._415 @cond_branch\n" - " cmp r7, #0\n" - " bne ._416 @cond_branch\n" - "._415:\n" - " mov r0, r9\n" - " mov r1, #0x3a\n" - " bl GetMonData\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x10\n" - " asr r1, r1, #0x10\n" - " mov r0, r8\n" - " mov r2, #0x1\n" - " bl sub_80440EC\n" - "._416:\n" - " cmp r7, #0x5\n" - " beq ._417 @cond_branch\n" - " cmp r7, #0\n" - " bne ._418 @cond_branch\n" - "._417:\n" - " mov r0, #0x0\n" - " bl load_gfxc_health_bar\n" - " mov r0, r9\n" - " mov r1, #0x3a\n" - " bl GetMonData\n" - " add r4, r0, #0\n" - " mov r0, r9\n" - " mov r1, #0x39\n" - " bl GetMonData\n" - " add r3, r0, #0\n" - " mov r0, #0x0\n" - " str r0, [sp]\n" - " mov r0, sl\n" - " mov r1, r8\n" - " add r2, r4, #0\n" - " bl sub_8043D84\n" - " mov r0, sl\n" - " mov r1, r8\n" - " mov r2, #0x0\n" - " mov r3, #0x0\n" - " bl sub_8045C78\n" - "._418:\n" - " bl IsDoubleBattle\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " str r0, [sp, #0x4]\n" - " cmp r0, #0\n" - " bne ._421 @cond_branch\n" - " cmp r7, #0x6\n" - " beq ._420 @cond_branch\n" - " cmp r7, #0\n" - " bne ._421 @cond_branch\n" - "._420:\n" - " mov r0, #0x3\n" - " bl load_gfxc_health_bar\n" - " mov r0, r9\n" - " mov r1, #0xb\n" - " bl GetMonData\n" - " add r5, r0, #0\n" - " lsl r5, r5, #0x10\n" - " lsr r5, r5, #0x10\n" - " mov r0, r9\n" - " mov r1, #0x38\n" - " bl GetMonData\n" - " add r4, r0, #0\n" - " lsl r4, r4, #0x18\n" - " lsr r4, r4, #0x18\n" - " mov r0, r9\n" - " mov r1, #0x19\n" - " bl GetMonData\n" - " add r3, r0, #0\n" - " ldr r6, ._429 + 4\n" - " lsl r1, r4, #0x2\n" - " ldr r2, ._429 + 8\n" - " lsl r0, r5, #0x3\n" - " sub r0, r0, r5\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r2\n" - " ldrb r2, [r0, #0x13]\n" - " mov r0, #0xca\n" - " lsl r0, r0, #0x1\n" - " mul r0, r0, r2\n" - " add r1, r1, r0\n" - " add r1, r1, r6\n" - " ldr r1, [r1]\n" - " sub r3, r3, r1\n" - " add r4, r4, #0x1\n" - " lsl r4, r4, #0x2\n" - " add r4, r4, r0\n" - " add r4, r4, r6\n" - " ldr r2, [r4]\n" - " sub r2, r2, r1\n" - " ldr r0, [sp, #0x4]\n" - " str r0, [sp]\n" - " mov r0, sl\n" - " mov r1, r8\n" - " bl sub_8043D84\n" - " mov r0, sl\n" - " mov r1, r8\n" - " mov r2, #0x1\n" - " mov r3, #0x0\n" - " bl sub_8045C78\n" - "._421:\n" - " cmp r7, #0x4\n" - " beq ._422 @cond_branch\n" - " cmp r7, #0\n" - " bne ._423 @cond_branch\n" - "._422:\n" - " mov r0, r8\n" - " mov r1, r9\n" - " bl sub_80451A0\n" - "._423:\n" - " cmp r7, #0x9\n" - " beq ._424 @cond_branch\n" - " cmp r7, #0\n" - " bne ._425 @cond_branch\n" - "._424:\n" - " mov r0, r8\n" - " bl draw_status_ailment_maybe\n" - "._425:\n" - " cmp r7, #0xa\n" - " bne ._426 @cond_branch\n" - " mov r0, r8\n" - " bl sub_80458B0\n" - "._426:\n" - " add r0, r7, #0\n" - " sub r0, r0, #0xa\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " cmp r0, #0x1\n" - " bhi ._442 @cond_branch\n" - " mov r0, r8\n" - " bl sub_8045998\n" - " b ._442\n" - "._430:\n" - " .align 2, 0\n" - "._429:\n" - " .word gSprites\n" - " .word gExperienceTables\n" - " .word gBaseStats\n" - "._411:\n" - " cmp r7, #0x3\n" - " beq ._431 @cond_branch\n" - " cmp r7, #0\n" - " bne ._432 @cond_branch\n" - "._431:\n" - " mov r0, r9\n" - " mov r1, #0x38\n" - " bl GetMonData\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x18\n" - " lsr r1, r1, #0x18\n" - " mov r0, r8\n" - " bl sub_8043FC0\n" - "._432:\n" - " ldr r0, ._443\n" - " ldrb r0, [r0]\n" - " cmp r0, #0x1\n" - " bne ._436 @cond_branch\n" - " cmp r7, #0x1\n" - " bhi ._434 @cond_branch\n" - " mov r0, r9\n" - " mov r1, #0x39\n" - " bl GetMonData\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x10\n" - " asr r1, r1, #0x10\n" - " mov r0, r8\n" - " mov r2, #0x0\n" - " bl sub_80440EC\n" - "._434:\n" - " cmp r7, #0x2\n" - " beq ._435 @cond_branch\n" - " cmp r7, #0\n" - " bne ._436 @cond_branch\n" - "._435:\n" - " mov r0, r9\n" - " mov r1, #0x3a\n" - " bl GetMonData\n" - " add r1, r0, #0\n" - " lsl r1, r1, #0x10\n" - " asr r1, r1, #0x10\n" - " mov r0, r8\n" - " mov r2, #0x1\n" - " bl sub_80440EC\n" - "._436:\n" - " cmp r7, #0x5\n" - " beq ._437 @cond_branch\n" - " cmp r7, #0\n" - " bne ._438 @cond_branch\n" - "._437:\n" - " mov r0, #0x0\n" - " bl load_gfxc_health_bar\n" - " mov r0, r9\n" - " mov r1, #0x3a\n" - " bl GetMonData\n" - " add r4, r0, #0\n" - " mov r0, r9\n" - " mov r1, #0x39\n" - " bl GetMonData\n" - " add r3, r0, #0\n" - " mov r0, #0x0\n" - " str r0, [sp]\n" - " mov r0, sl\n" - " mov r1, r8\n" - " add r2, r4, #0\n" - " bl sub_8043D84\n" - " mov r0, sl\n" - " mov r1, r8\n" - " mov r2, #0x0\n" - " mov r3, #0x0\n" - " bl sub_8045C78\n" - "._438:\n" - " cmp r7, #0x4\n" - " beq ._439 @cond_branch\n" - " cmp r7, #0\n" - " bne ._440 @cond_branch\n" - "._439:\n" - " mov r0, r8\n" - " mov r1, r9\n" - " bl sub_80451A0\n" - "._440:\n" - " cmp r7, #0x9\n" - " beq ._441 @cond_branch\n" - " cmp r7, #0\n" - " bne ._442 @cond_branch\n" - "._441:\n" - " mov r0, r8\n" - " bl draw_status_ailment_maybe\n" - "._442:\n" - " add sp, sp, #0x8\n" - " pop {r3, r4, r5}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " mov sl, r5\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._444:\n" - " .align 2, 0\n" - "._443:\n" - " .word gUnknown_020297ED\n" - "\n" - ); -} -#else void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) { u8 r10; @@ -3404,6 +2758,15 @@ void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) { if (c == 3 || c == 0) sub_8043FC0(a, GetMonData(pkmn, MON_DATA_LEVEL)); +#if DEBUG + if (gUnknown_020297ED == 1) + { + if (c == 1 || c == 0) + sub_80440EC(a, GetMonData(pkmn, MON_DATA_HP), 0); + if (c == 2 || c == 0) + sub_80440EC(a, GetMonData(pkmn, MON_DATA_MAX_HP), 1); + } +#endif if (c == 5 || c == 0) { load_gfxc_health_bar(0); @@ -3418,7 +2781,6 @@ void sub_8045A5C(u8 a, struct Pokemon *pkmn, u8 c) draw_status_ailment_maybe(a); } } -#endif s32 sub_8045C78(u8 a, u8 unused1, u8 c, u8 unused2) { -- cgit v1.2.3 From 33d2d51906bbde1c62cee3470a9b3706571d551c Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Thu, 25 Jan 2018 21:33:46 -0600 Subject: decompile more debug functions --- src/battle/battle_2.c | 237 +++++++++++++------------------------------------ src/battle/battle_ai.c | 217 ++------------------------------------------ 2 files changed, 69 insertions(+), 385 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index f9756db29..e72a875fb 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -6,6 +6,7 @@ #include "constants/moves.h" #include "constants/songs.h" #include "constants/species.h" +#include "gba/flash_internal.h" #include "battle.h" #include "battle_ai.h" #include "battle_interface.h" @@ -1500,6 +1501,17 @@ void debug_sub_80108B8(void) } } +// This function matches, but it somehow affects registers in SetActionsAndBanksTurnOrder. +#ifdef NONMATCHING +void debug_sub_8010A7C(u8 a, u8 b) +{ + s32 i; + + for (i = 0; i < b; i++) + gBattleTextBuff1[i] = a; + gBattleTextBuff1[i] = EOS; +} +#else __attribute__((naked)) void debug_sub_8010A7C() { @@ -1534,6 +1546,14 @@ void debug_sub_8010A7C() "\n" ); } +#endif + +/* +void debug_sub_8010AAC(u8 a) +{ + u32 r7 = gUnknown_Debug_030043A4 * 5; +} +*/ __attribute__((naked)) void debug_sub_8010AAC() @@ -3898,72 +3918,19 @@ void debug_sub_801174C() ); } -__attribute__((naked)) -void debug_sub_8011D40() +void debug_sub_8011D40(void) { - asm( - " push {lr}\n" - " ldr r1, ._774\n" - " ldr r0, ._774 + 4\n" - " str r0, [r1]\n" - " ldr r0, ._774 + 8\n" - " str r0, [r1, #0x4]\n" - " ldr r0, ._774 + 12\n" - " str r0, [r1, #0x8]\n" - " ldr r0, [r1, #0x8]\n" - " sub r1, r1, #0xc4\n" - " ldr r0, ._774 + 16\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._774 + 20\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._774 + 24\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._774 + 28\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._774 + 32\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._774 + 36\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._774 + 40\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " add r1, r1, #0x2\n" - " ldr r0, ._774 + 44\n" - " ldrh r0, [r0]\n" - " strh r0, [r1]\n" - " bl LoadOam\n" - " bl ProcessSpriteCopyRequests\n" - " pop {r0}\n" - " bx r0\n" - "._775:\n" - " .align 2, 0\n" - "._774:\n" - " .word 0x40000d4\n" - " .word gSharedMem\n" - " .word 0x6004000\n" - " .word 0x80000800\n" - " .word gBattle_BG0_X\n" - " .word gBattle_BG0_Y\n" - " .word gBattle_BG1_X\n" - " .word gBattle_BG1_Y\n" - " .word gBattle_BG2_X\n" - " .word gBattle_BG2_Y\n" - " .word gBattle_BG3_X\n" - " .word gBattle_BG3_Y\n" - "\n" - ); + DmaCopy16(3, gSharedMem, (void *)(VRAM + 0x4000), 0x1000); + REG_BG0HOFS = gBattle_BG0_X; + REG_BG0VOFS = gBattle_BG0_Y; + REG_BG1HOFS = gBattle_BG1_X; + REG_BG1VOFS = gBattle_BG1_Y; + REG_BG2HOFS = gBattle_BG2_X; + REG_BG2VOFS = gBattle_BG2_Y; + REG_BG3HOFS = gBattle_BG3_X; + REG_BG3VOFS = gBattle_BG3_Y; + LoadOam(); + ProcessSpriteCopyRequests(); } void debug_nullsub_45() @@ -6517,125 +6484,45 @@ void debug_sub_8012D10() ); } -__attribute__((naked)) -void debug_sub_8013240() +u8 debug_sub_8013240(void) { - asm( - " push {lr}\n" - " bl IdentifyFlash\n" - " lsl r0, r0, #0x10\n" - " cmp r0, #0\n" - " beq ._1068 @cond_branch\n" - " mov r0, #0x1\n" - " b ._1069\n" - "._1068:\n" - " mov r0, #0x0\n" - "._1069:\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); + if (IdentifyFlash() == 0) + return 0; + else + return 1; } -__attribute__((naked)) -void debug_sub_8013258() +u32 debug_sub_8013258(u16 sectorNum, u8 *data, u32 size) { - asm( - " push {r4, r5, r6, lr}\n" - " add r6, r1, #0\n" - " add r5, r2, #0\n" - " b ._1070\n" - "._1072:\n" - " ldr r0, ._1074\n" - " add r5, r5, r0\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x5\n" - " add r6, r6, r0\n" - " add r0, r4, #1\n" - "._1070:\n" - " lsl r0, r0, #0x10\n" - " lsr r4, r0, #0x10\n" - " add r0, r4, #0\n" - " add r1, r6, #0\n" - " bl ProgramFlashSectorAndVerify\n" - " cmp r0, #0\n" - " bne ._1071 @cond_branch\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x5\n" - " cmp r5, r0\n" - " bhi ._1072 @cond_branch\n" - " mov r0, #0x1\n" - " b ._1073\n" - "._1075:\n" - " .align 2, 0\n" - "._1074:\n" - " .word 0xfffff000\n" - "._1071:\n" - " mov r0, #0x0\n" - "._1073:\n" - " pop {r4, r5, r6}\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); + while (1) + { + if (ProgramFlashSectorAndVerify(sectorNum, data) != 0) + return 0; + if (size <= 0x1000) + break; + size -= 0x1000; + data += 0x1000; + sectorNum++; + } + return 1; } -__attribute__((naked)) -void debug_sub_8013294() +u32 debug_sub_8013294(u8 sectorNum, void *data, u32 size) { - asm( - " push {r4, r5, r6, lr}\n" - " add r5, r1, #0\n" - " add r6, r2, #0\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " bl debug_sub_8013240\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._1076 @cond_branch\n" - " bl m4aSoundVSyncOff\n" - " add r0, r4, #0\n" - " add r1, r5, #0\n" - " add r2, r6, #0\n" - " bl debug_sub_8013258\n" - " add r4, r0, #0\n" - " bl m4aSoundVSyncOn\n" - " add r0, r4, #0\n" - " b ._1077\n" - "._1076:\n" - " mov r0, #0x0\n" - "._1077:\n" - " pop {r4, r5, r6}\n" - " pop {r1}\n" - " bx r1\n" - "\n" - ); + u32 result; + + if (debug_sub_8013240() != 0) + return 0; + m4aSoundVSyncOff(); + result = debug_sub_8013258(sectorNum, data, size); + m4aSoundVSyncOn(); + return result; } -__attribute__((naked)) -void debug_sub_80132C8() +void debug_sub_80132C8(u8 a, void *b, u32 c) { - asm( - " push {r4, r5, r6, lr}\n" - " add r5, r1, #0\n" - " add r6, r2, #0\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " bl debug_sub_8013240\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._1078 @cond_branch\n" - " add r0, r4, #0\n" - " mov r1, #0x0\n" - " add r2, r5, #0\n" - " add r3, r6, #0\n" - " bl ReadFlash\n" - "._1078:\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "\n" - ); + if (debug_sub_8013240() == 0) + ReadFlash(a, 0, b, c); } #endif @@ -10146,7 +10033,7 @@ void SetActionsAndBanksTurnOrder(void) // And doing this seems to fix it. #if DEBUG asm("");asm("");asm("");asm("");asm("");asm("");asm("");asm("");asm(""); - asm("");asm("");asm("");asm("");asm("");asm("");asm("");asm(""); + asm("");asm("");asm("");asm("");asm("");asm("");asm(""); #endif gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; eFocusPunchBank = 0; diff --git a/src/battle/battle_ai.c b/src/battle/battle_ai.c index 87a66c2c7..629a57d25 100644 --- a/src/battle/battle_ai.c +++ b/src/battle/battle_ai.c @@ -13,6 +13,8 @@ #include "util.h" #include "ewram.h" +extern u8 gUnknown_02023A14_50; +extern u32 gUnknown_02023A14_4C; extern u16 gBattleTypeFlags; extern u16 gBattleWeather; extern u8 gActiveBank; @@ -289,214 +291,6 @@ void BattleAI_HandleItemUseBeforeAISetup(void) BattleAI_SetupAIData(); } -#if DEBUG -__attribute__((naked)) -void BattleAI_SetupAIData() -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " ldr r2, ._16\n" - " mov r4, #0x0\n" - " ldr r3, ._16 + 4\n" - " mov r1, #0x0\n" - "._9:\n" - " add r0, r2, r4\n" - " strb r1, [r0]\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x1b\n" - " bls ._9 @cond_branch\n" - " ldr r0, ._16\n" - " mov r1, #0x64\n" - " mov r4, #0x3\n" - " add r0, r0, #0x7\n" - "._10:\n" - " strb r1, [r0]\n" - " sub r0, r0, #0x1\n" - " sub r4, r4, #0x1\n" - " cmp r4, #0\n" - " bge ._10 @cond_branch\n" - " ldrb r0, [r3]\n" - " mov r1, #0x0\n" - " mov r2, #0xff\n" - " bl CheckMoveLimitations\n" - " lsl r0, r0, #0x18\n" - " lsr r7, r0, #0x18\n" - " mov r4, #0x0\n" - " ldr r0, ._16\n" - " add r5, r0, #4\n" - " ldr r6, ._16 + 8\n" - "._12:\n" - " ldr r0, [r6]\n" - " and r0, r0, r7\n" - " cmp r0, #0\n" - " beq ._11 @cond_branch\n" - " mov r0, #0x0\n" - " strb r0, [r5]\n" - "._11:\n" - " bl Random\n" - " lsl r0, r0, #0x10\n" - " lsr r0, r0, #0x10\n" - " mov r1, #0xf\n" - " and r0, r0, r1\n" - " mov r1, #0x64\n" - " sub r1, r1, r0\n" - " strb r1, [r5, #0x14]\n" - " add r5, r5, #0x1\n" - " add r6, r6, #0x4\n" - " add r4, r4, #0x1\n" - " cmp r4, #0x3\n" - " ble ._12 @cond_branch\n" - " ldr r0, ._16 + 12\n" - " add r0, r0, #0x20\n" - " mov r1, #0x0\n" - " strb r1, [r0]\n" - " ldr r1, ._16 + 16\n" - " ldr r0, ._16 + 4\n" - " ldrb r2, [r0]\n" - " strb r2, [r1]\n" - " ldr r0, ._16 + 20\n" - " ldrh r1, [r0]\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._13 @cond_branch\n" - " ldr r4, ._16 + 24\n" - " bl Random\n" - " mov r5, #0x2\n" - " and r0, r0, r5\n" - " strb r0, [r4]\n" - " ldr r0, ._16 + 28\n" - " ldrb r1, [r0]\n" - " ldr r2, ._16 + 8\n" - " ldrb r3, [r4]\n" - " lsl r0, r3, #0x2\n" - " add r0, r0, r2\n" - " ldr r0, [r0]\n" - " and r1, r1, r0\n" - " cmp r1, #0\n" - " beq ._15 @cond_branch\n" - " eor r3, r3, r5\n" - " strb r3, [r4]\n" - " b ._15\n" - "._17:\n" - " .align 2, 0\n" - "._16:\n" - " .word gSharedMem+0x16800\n" - " .word gActiveBank\n" - " .word gBitTable\n" - " .word +0x2016c00\n" - " .word gBankAttacker\n" - " .word gBattleTypeFlags\n" - " .word gBankTarget\n" - " .word gAbsentBankFlags\n" - "._13:\n" - " ldr r0, ._20\n" - " mov r1, #0x1\n" - " eor r1, r1, r2\n" - " strb r1, [r0]\n" - "._15:\n" - " ldr r0, ._20 + 4\n" - " ldrh r1, [r0]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._18 @cond_branch\n" - " ldr r1, ._20 + 8\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x17\n" - " b ._27\n" - "._21:\n" - " .align 2, 0\n" - "._20:\n" - " .word gBankTarget\n" - " .word gBattleTypeFlags\n" - " .word gSharedMem+0x16800\n" - "._18:\n" - " mov r2, #0x80\n" - " lsl r2, r2, #0x3\n" - " add r0, r2, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._22 @cond_branch\n" - " ldr r1, ._24\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x16\n" - " b ._27\n" - "._25:\n" - " .align 2, 0\n" - "._24:\n" - " .word gSharedMem+0x16800\n" - "._22:\n" - " mov r0, #0x10\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._26 @cond_branch\n" - " ldr r1, ._28\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x18\n" - " b ._27\n" - "._29:\n" - " .align 2, 0\n" - "._28:\n" - " .word gSharedMem+0x16800\n" - "._26:\n" - " mov r0, #0x90\n" - " lsl r0, r0, #0x4\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._30 @cond_branch\n" - " ldr r1, ._33\n" - " ldrh r0, [r1]\n" - " cmp r0, r2\n" - " bne ._31 @cond_branch\n" - "._30:\n" - " ldr r1, ._33 + 4\n" - " mov r0, #0x7\n" - "._27:\n" - " str r0, [r1, #0xc]\n" - " add r3, r1, #0\n" - " b ._32\n" - "._34:\n" - " .align 2, 0\n" - "._33:\n" - " .word gTrainerBattleOpponent\n" - " .word gSharedMem+0x16800\n" - "._31:\n" - " ldr r3, ._36\n" - " ldr r2, ._36 + 4\n" - " ldrh r1, [r1]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x3\n" - " add r2, r2, #0x1c\n" - " add r0, r0, r2\n" - " ldr r0, [r0]\n" - " str r0, [r3, #0xc]\n" - "._32:\n" - " ldr r0, ._36 + 8\n" - " ldrb r1, [r0]\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._35 @cond_branch\n" - " ldr r0, ._36 + 12\n" - " ldr r0, [r0]\n" - " str r0, [r3, #0xc]\n" - "._35:\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._37:\n" - " .align 2, 0\n" - "._36:\n" - " .word gSharedMem+0x16800\n" - " .word gTrainers\n" - " .word gUnknown_02023A14_50\n" - " .word gUnknown_02023A14_4C\n" - "\n" - ); -} -#else void BattleAI_SetupAIData(void) { s32 i; @@ -544,13 +338,16 @@ void BattleAI_SetupAIData(void) else if (gBattleTypeFlags & BATTLE_TYPE_FIRST_BATTLE) AI_THINKING_STRUCT->aiFlags = 0x80000000; #ifdef GERMAN - else if (gBattleTypeFlags & 0x900 || gTrainerBattleOpponent == 0x400) + else if (gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER) || gTrainerBattleOpponent == 0x400) AI_THINKING_STRUCT->aiFlags = 7; #endif else // otherwise, just set aiFlags to whatever flags the trainer has set in their data. AI_THINKING_STRUCT->aiFlags = gTrainers[gTrainerBattleOpponent].aiFlags; -} +#if DEBUG + if (gUnknown_02023A14_50 & 1) + AI_THINKING_STRUCT->aiFlags = gUnknown_02023A14_4C; #endif +} u8 BattleAI_GetAIActionToUse(void) { -- cgit v1.2.3 From e8bddb83db39e4352fd2f44d21e761de1174451d Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Fri, 26 Jan 2018 22:10:05 -0800 Subject: fix build --- src/battle/anim/guard.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/battle') diff --git a/src/battle/anim/guard.c b/src/battle/anim/guard.c index 01cf07e39..254160109 100644 --- a/src/battle/anim/guard.c +++ b/src/battle/anim/guard.c @@ -1,4 +1,5 @@ #include "global.h" +#include "battle.h" #include "battle_anim.h" #include "rom_8077ABC.h" -- cgit v1.2.3 From fe400f60b6609d37d2b8a0c2aec75321adc3e95f Mon Sep 17 00:00:00 2001 From: Cameron Hall Date: Sat, 27 Jan 2018 17:03:40 -0600 Subject: add comments for pool loads in C files --- src/battle/battle_2.c | 942 ++++++++++++++++---------------- src/battle/battle_4.c | 76 +-- src/battle/battle_controller_opponent.c | 36 +- src/battle/battle_controller_player.c | 128 ++--- src/battle/battle_records.c | 10 +- 5 files changed, 596 insertions(+), 596 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index 2171c6ef6..b9b4290b5 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1521,7 +1521,7 @@ void debug_sub_8010A7C() " lsl r1, r1, #0x18\n" " lsr r2, r1, #0x18\n" " mov r1, #0x0\n" - " ldr r5, ._514\n" + " ldr r5, ._514 @ gBattleTextBuff1\n" " cmp r1, r2\n" " bge ._512 @cond_branch\n" " add r3, r5, #0\n" @@ -1562,14 +1562,14 @@ void debug_sub_8010AAC() " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x18\n" " mov ip, r0\n" - " ldr r6, ._520\n" - " ldr r4, ._520 + 4\n" - " ldr r5, ._520 + 8\n" + " ldr r6, ._520 @ gBaseStats\n" + " ldr r4, ._520 + 4 @ gUnknown_Debug_2023A76\n" + " ldr r5, ._520 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r5]\n" " lsl r0, r1, #0x2\n" " add r7, r0, r1\n" " lsl r1, r7, #0x1\n" - " ldr r3, ._520 + 12\n" + " ldr r3, ._520 + 12 @ gUnknown_Debug_03004360\n" " ldrb r2, [r3]\n" " mov r0, #0x46\n" " mul r2, r2, r0\n" @@ -1685,10 +1685,10 @@ void debug_sub_8010B80() " lsr r6, r0, #0x18\n" " mov r0, #0x0\n" " mov ip, r0\n" - " ldr r4, ._534\n" - " ldr r1, ._534 + 4\n" + " ldr r4, ._534 @ gUnknown_Debug_2023A76\n" + " ldr r1, ._534 + 4 @ gUnknown_Debug_030043A0\n" " mov r8, r1\n" - " ldr r5, ._534 + 8\n" + " ldr r5, ._534 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r5]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -1696,7 +1696,7 @@ void debug_sub_8010B80() " ldrb r2, [r2]\n" " add r0, r0, r2\n" " lsl r0, r0, #0x1\n" - " ldr r3, ._534 + 12\n" + " ldr r3, ._534 + 12 @ gUnknown_Debug_03004360\n" " ldrb r2, [r3]\n" " mov r1, #0x46\n" " mul r1, r1, r2\n" @@ -1847,7 +1847,7 @@ void debug_sub_8010CAC() " mov r7, r8\n" " push {r7}\n" " add sp, sp, #0xfffffff0\n" - " ldr r4, ._553\n" + " ldr r4, ._553 @ gMain\n" " ldrh r1, [r4, #0x28]\n" " mov r0, #0x81\n" " lsl r0, r0, #0x2\n" @@ -1860,19 +1860,19 @@ void debug_sub_8010CAC() " beq ._544 @cond_branch\n" " b ._559\n" "._544:\n" - " ldr r0, ._553 + 4\n" + " ldr r0, ._553 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " mov r8, r0\n" " cmp r1, #0x5\n" " bhi ._546 @cond_branch\n" - " ldr r0, ._553 + 8\n" + " ldr r0, ._553 + 8 @ gUnknown_Debug_030043A8\n" " mov r1, #0x0\n" " strb r1, [r0]\n" " bl debug_sub_8012628\n" - " ldr r0, ._553 + 12\n" + " ldr r0, ._553 + 12 @ debug_sub_8011498\n" " bl SetMainCallback2\n" "._546:\n" - " ldr r0, ._553 + 16\n" + " ldr r0, ._553 + 16 @ gUnknown_Debug_030043A0\n" " ldrb r3, [r0]\n" " cmp r3, #0\n" " bne ._555 @cond_branch\n" @@ -1880,10 +1880,10 @@ void debug_sub_8010CAC() " ldrb r0, [r1]\n" " cmp r0, #0x6\n" " bne ._555 @cond_branch\n" - " ldr r0, ._553 + 20\n" + " ldr r0, ._553 + 20 @ debug_sub_80108B8\n" " str r0, [r4, #0x8]\n" - " ldr r4, ._553 + 24\n" - " ldr r0, ._553 + 28\n" + " ldr r4, ._553 + 24 @ gPlayerParty\n" + " ldr r0, ._553 + 28 @ gUnknown_Debug_2023A76\n" " ldrh r1, [r0]\n" " ldrb r2, [r0, #0x2]\n" " str r3, [sp]\n" @@ -1899,7 +1899,7 @@ void debug_sub_8010CAC() " add r1, r5, #0\n" " add r1, r1, #0xd\n" " lsl r4, r5, #0x1\n" - " ldr r0, ._553 + 32\n" + " ldr r0, ._553 + 32 @ gUnknown_Debug_2023B02\n" " add r4, r4, r0\n" " add r0, r6, #0\n" " add r2, r4, #0\n" @@ -1911,14 +1911,14 @@ void debug_sub_8010CAC() " lsl r2, r0, #0x1\n" " add r2, r2, r0\n" " lsl r2, r2, #0x2\n" - " ldr r0, ._553 + 36\n" + " ldr r0, ._553 + 36 @ gBattleMoves\n" " add r2, r2, r0\n" " add r0, r6, #0\n" " bl SetMonData\n" " add r5, r5, #0x1\n" " cmp r5, #0x3\n" " ble ._549 @cond_branch\n" - " ldr r2, ._553 + 28\n" + " ldr r2, ._553 + 28 @ gUnknown_Debug_2023A76\n" " mov r4, #0x3c\n" " ldsh r0, [r2, r4]\n" " cmp r0, #0x1\n" @@ -1940,10 +1940,10 @@ void debug_sub_8010CAC() " .word gUnknown_Debug_2023B02\n" " .word gBattleMoves+0x4\n" "._550:\n" - " ldr r1, ._556\n" - " ldr r0, ._556 + 4\n" + " ldr r1, ._556 @ gCB2_AfterEvolution\n" + " ldr r0, ._556 + 4 @ debug_sub_80108B8\n" " str r0, [r1]\n" - " ldr r0, ._556 + 8\n" + " ldr r0, ._556 + 8 @ gPlayerParty\n" " ldrh r1, [r2, #0xa]\n" " mov r2, #0x1\n" " mov r3, #0x0\n" @@ -1958,15 +1958,15 @@ void debug_sub_8010CAC() "._551:\n" " bl debug_sub_8012688\n" "._555:\n" - " ldr r0, ._565\n" + " ldr r0, ._565 @ gUnknown_Debug_030043A0\n" " ldrb r0, [r0]\n" " cmp r0, #0x1\n" " bne ._559 @cond_branch\n" - " ldr r0, ._565 + 4\n" + " ldr r0, ._565 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r0, [r0]\n" " cmp r0, #0x6\n" " bne ._559 @cond_branch\n" - " ldr r3, ._565 + 8\n" + " ldr r3, ._565 + 8 @ gSaveBlock2\n" " ldrb r2, [r3, #0x15]\n" " lsl r0, r2, #0x1d\n" " lsr r5, r0, #0x1f\n" @@ -1999,7 +1999,7 @@ void debug_sub_8010CAC() " bl SetPokemonCryStereo\n" " bl debug_nullsub_3\n" "._559:\n" - " ldr r4, ._565 + 12\n" + " ldr r4, ._565 + 12 @ gMain\n" " ldrh r0, [r4, #0x2a]\n" " cmp r0, #0x8\n" " bne ._561 @cond_branch\n" @@ -2009,7 +2009,7 @@ void debug_sub_8010CAC() " cmp r0, #0x40\n" " bne ._562 @cond_branch\n" " bl debug_sub_80125E4\n" - " ldr r1, ._565 + 4\n" + " ldr r1, ._565 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r0, [r1]\n" " cmp r0, #0\n" " beq ._563 @cond_branch\n" @@ -2027,7 +2027,7 @@ void debug_sub_8010CAC() "._564:\n" " strb r0, [r1]\n" " bl debug_sub_8011E74\n" - " ldr r0, ._570\n" + " ldr r0, ._570 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2036,12 +2036,12 @@ void debug_sub_8010CAC() " bl debug_sub_80123D8\n" " bl debug_sub_80125A0\n" "._562:\n" - " ldr r0, ._570 + 4\n" + " ldr r0, ._570 + 4 @ gMain\n" " ldrh r0, [r0, #0x2a]\n" " cmp r0, #0x80\n" " bne ._567 @cond_branch\n" " bl debug_sub_80125E4\n" - " ldr r1, ._570\n" + " ldr r1, ._570 @ gUnknown_Debug_030043A4\n" " ldrb r0, [r1]\n" " cmp r0, #0x6\n" " bne ._568 @cond_branch\n" @@ -2057,7 +2057,7 @@ void debug_sub_8010CAC() "._569:\n" " strb r0, [r1]\n" " bl debug_sub_8011E74\n" - " ldr r0, ._575\n" + " ldr r0, ._575 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2066,12 +2066,12 @@ void debug_sub_8010CAC() " bl debug_sub_80123D8\n" " bl debug_sub_80125A0\n" "._567:\n" - " ldr r0, ._575 + 4\n" + " ldr r0, ._575 + 4 @ gMain\n" " ldrh r0, [r0, #0x2a]\n" " cmp r0, #0x20\n" " bne ._572 @cond_branch\n" " bl debug_sub_80125E4\n" - " ldr r2, ._575 + 8\n" + " ldr r2, ._575 + 8 @ gUnknown_Debug_030043A0\n" " ldrb r0, [r2]\n" " add r1, r0, #0\n" " cmp r1, #0\n" @@ -2086,18 +2086,18 @@ void debug_sub_8010CAC() " .word gMain\n" " .word gUnknown_Debug_030043A0\n" "._573:\n" - " ldr r3, ._581\n" + " ldr r3, ._581 @ gUnknown_Debug_03004360\n" " ldrb r0, [r3]\n" " cmp r0, #0\n" " beq ._577 @cond_branch\n" " strb r1, [r3]\n" " mov r0, #0x4\n" " strb r0, [r2]\n" - " ldr r0, ._581 + 4\n" + " ldr r0, ._581 + 4 @ gBattle_BG1_X\n" " strh r1, [r0]\n" " bl debug_sub_8011E5C\n" " bl debug_sub_8011E74\n" - " ldr r0, ._581 + 8\n" + " ldr r0, ._581 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2107,12 +2107,12 @@ void debug_sub_8010CAC() "._577:\n" " bl debug_sub_80125A0\n" "._572:\n" - " ldr r0, ._581 + 12\n" + " ldr r0, ._581 + 12 @ gMain\n" " ldrh r0, [r0, #0x2a]\n" " cmp r0, #0x10\n" " bne ._578 @cond_branch\n" " bl debug_sub_80125E4\n" - " ldr r2, ._581 + 16\n" + " ldr r2, ._581 + 16 @ gUnknown_Debug_030043A0\n" " ldrb r0, [r2]\n" " cmp r0, #0x4\n" " beq ._579 @cond_branch\n" @@ -2128,21 +2128,21 @@ void debug_sub_8010CAC() " .word gMain\n" " .word gUnknown_Debug_030043A0\n" "._579:\n" - " ldr r3, ._587\n" + " ldr r3, ._587 @ gUnknown_Debug_03004360\n" " ldrb r1, [r3]\n" " cmp r1, #0\n" " bne ._583 @cond_branch\n" " mov r0, #0x1\n" " strb r0, [r3]\n" " strb r1, [r2]\n" - " ldr r1, ._587 + 4\n" + " ldr r1, ._587 + 4 @ gBattle_BG1_X\n" " mov r2, #0x80\n" " lsl r2, r2, #0x1\n" " add r0, r2, #0\n" " strh r0, [r1]\n" " bl debug_sub_8011E5C\n" " bl debug_sub_8011E74\n" - " ldr r0, ._587 + 8\n" + " ldr r0, ._587 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2152,7 +2152,7 @@ void debug_sub_8010CAC() "._583:\n" " bl debug_sub_80125A0\n" "._578:\n" - " ldr r0, ._587 + 12\n" + " ldr r0, ._587 + 12 @ gMain\n" " ldrh r1, [r0, #0x30]\n" " mov r0, #0x2\n" " and r0, r0, r1\n" @@ -2160,9 +2160,9 @@ void debug_sub_8010CAC() " bne ._584 @cond_branch\n" " b ._607\n" "._584:\n" - " ldr r0, ._587 + 16\n" + " ldr r0, ._587 + 16 @ gUnknown_Debug_030043A0\n" " ldrb r2, [r0]\n" - " ldr r0, ._587 + 8\n" + " ldr r0, ._587 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2171,7 +2171,7 @@ void debug_sub_8010CAC() " cmp r0, #0x4\n" " bhi ._586 @cond_branch\n" " lsl r0, r0, #0x2\n" - " ldr r1, ._587 + 20\n" + " ldr r1, ._587 + 20 @ \n" " add r0, r0, r1\n" " ldr r0, [r0]\n" " mov pc, r0\n" @@ -2194,7 +2194,7 @@ void debug_sub_8010CAC() " bl debug_sub_8010818\n" " b ._595\n" "._592:\n" - " ldr r1, ._597\n" + " ldr r1, ._597 @ gUnknown_Debug_2023A76\n" " mov r0, #0x1f\n" " mov r2, #0xec\n" " bl debug_sub_80132C8\n" @@ -2203,7 +2203,7 @@ void debug_sub_8010CAC() " bl debug_sub_8011E74\n" " bl debug_sub_8012540\n" " bl debug_nullsub_3\n" - " ldr r0, ._597 + 4\n" + " ldr r0, ._597 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2217,7 +2217,7 @@ void debug_sub_8010CAC() " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_030043A4\n" "._593:\n" - " ldr r1, ._600\n" + " ldr r1, ._600 @ gUnknown_Debug_2023A76\n" " mov r0, #0x1f\n" " mov r2, #0xec\n" " bl debug_sub_8013294\n" @@ -2227,7 +2227,7 @@ void debug_sub_8010CAC() "._600:\n" " .word gUnknown_Debug_2023A76\n" "._594:\n" - " ldr r3, ._604\n" + " ldr r3, ._604 @ gUnknown_Debug_2023A76\n" " add r2, r3, #0\n" " add r2, r2, #0x44\n" " ldrh r1, [r2]\n" @@ -2259,8 +2259,8 @@ void debug_sub_8010CAC() "._590:\n" " mov r0, #0x0\n" " bl debug_sub_8010B80\n" - " ldr r2, ._608\n" - " ldr r0, ._608 + 4\n" + " ldr r2, ._608 @ gUnknown_Debug_030043A0\n" + " ldr r0, ._608 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2284,16 +2284,16 @@ void debug_sub_8010CAC() " bl debug_sub_8010AAC\n" " b ._613\n" "._611:\n" - " ldr r6, ._618\n" - " ldr r5, ._618 + 4\n" - " ldr r4, ._618 + 8\n" + " ldr r6, ._618 @ gUnknown_Debug_2023A76\n" + " ldr r5, ._618 + 4 @ gUnknown_Debug_030043A0\n" + " ldr r4, ._618 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r0, [r4]\n" " lsl r1, r0, #0x2\n" " add r1, r1, r0\n" " ldrb r0, [r5]\n" " add r1, r1, r0\n" " lsl r1, r1, #0x1\n" - " ldr r2, ._618 + 12\n" + " ldr r2, ._618 + 12 @ gUnknown_Debug_03004360\n" " ldrb r0, [r2]\n" " mov r3, #0x46\n" " mul r0, r0, r3\n" @@ -2314,7 +2314,7 @@ void debug_sub_8010CAC() " add r3, r0, r6\n" " mov r4, #0x0\n" " ldsh r2, [r3, r4]\n" - " ldr r4, ._618 + 16\n" + " ldr r4, ._618 + 16 @ gUnknown_Debug_821F424\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" " lsl r1, r0, #0x1\n" @@ -2329,13 +2329,13 @@ void debug_sub_8010CAC() " ldrh r0, [r0]\n" " strh r0, [r3]\n" "._613:\n" - " ldr r5, ._618 + 4\n" + " ldr r5, ._618 + 4 @ gUnknown_Debug_030043A0\n" " ldrb r0, [r5]\n" " cmp r0, #0\n" " bne ._614 @cond_branch\n" " mov r0, #0x0\n" " bl debug_sub_8010AAC\n" - " ldr r0, ._618 + 8\n" + " ldr r0, ._618 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2344,7 +2344,7 @@ void debug_sub_8010CAC() " lsr r0, r0, #0x18\n" " bl debug_sub_8011EA0\n" "._614:\n" - " ldr r4, ._618 + 8\n" + " ldr r4, ._618 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r4]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2360,7 +2360,7 @@ void debug_sub_8010CAC() " lsr r0, r0, #0x18\n" " bl debug_sub_80123D8\n" "._607:\n" - " ldr r0, ._618 + 20\n" + " ldr r0, ._618 + 20 @ gMain\n" " ldrh r1, [r0, #0x30]\n" " mov r0, #0x1\n" " and r0, r0, r1\n" @@ -2368,9 +2368,9 @@ void debug_sub_8010CAC() " bne ._615 @cond_branch\n" " b ._638\n" "._615:\n" - " ldr r0, ._618 + 4\n" + " ldr r0, ._618 + 4 @ gUnknown_Debug_030043A0\n" " ldrb r2, [r0]\n" - " ldr r0, ._618 + 8\n" + " ldr r0, ._618 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2379,7 +2379,7 @@ void debug_sub_8010CAC() " cmp r0, #0x4\n" " bhi ._617 @cond_branch\n" " lsl r0, r0, #0x2\n" - " ldr r1, ._618 + 24\n" + " ldr r1, ._618 + 24 @ \n" " add r0, r0, r1\n" " ldr r0, [r0]\n" " mov pc, r0\n" @@ -2403,7 +2403,7 @@ void debug_sub_8010CAC() " bl debug_sub_8010818\n" " b ._626\n" "._623:\n" - " ldr r1, ._628\n" + " ldr r1, ._628 @ gUnknown_Debug_2023A76\n" " mov r0, #0x1f\n" " mov r2, #0xec\n" " bl debug_sub_80132C8\n" @@ -2412,7 +2412,7 @@ void debug_sub_8010CAC() " bl debug_sub_8011E74\n" " bl debug_sub_8012540\n" " bl debug_nullsub_3\n" - " ldr r0, ._628 + 4\n" + " ldr r0, ._628 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2426,7 +2426,7 @@ void debug_sub_8010CAC() " .word gUnknown_Debug_2023A76\n" " .word gUnknown_Debug_030043A4\n" "._624:\n" - " ldr r1, ._631\n" + " ldr r1, ._631 @ gUnknown_Debug_2023A76\n" " mov r0, #0x1f\n" " mov r2, #0xec\n" " bl debug_sub_8013294\n" @@ -2436,7 +2436,7 @@ void debug_sub_8010CAC() "._631:\n" " .word gUnknown_Debug_2023A76\n" "._625:\n" - " ldr r3, ._635\n" + " ldr r3, ._635 @ gUnknown_Debug_2023A76\n" " add r2, r3, #0\n" " add r2, r2, #0x44\n" " ldrh r1, [r2]\n" @@ -2468,8 +2468,8 @@ void debug_sub_8010CAC() "._621:\n" " mov r0, #0x1\n" " bl debug_sub_8010B80\n" - " ldr r2, ._639\n" - " ldr r0, ._639 + 4\n" + " ldr r2, ._639 @ gUnknown_Debug_030043A0\n" + " ldr r0, ._639 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2493,16 +2493,16 @@ void debug_sub_8010CAC() " bl debug_sub_8010AAC\n" " b ._644\n" "._642:\n" - " ldr r6, ._650\n" - " ldr r5, ._650 + 4\n" - " ldr r4, ._650 + 8\n" + " ldr r6, ._650 @ gUnknown_Debug_2023A76\n" + " ldr r5, ._650 + 4 @ gUnknown_Debug_030043A0\n" + " ldr r4, ._650 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r0, [r4]\n" " lsl r1, r0, #0x2\n" " add r1, r1, r0\n" " ldrb r0, [r5]\n" " add r1, r1, r0\n" " lsl r1, r1, #0x1\n" - " ldr r2, ._650 + 12\n" + " ldr r2, ._650 + 12 @ gUnknown_Debug_03004360\n" " ldrb r0, [r2]\n" " mov r3, #0x46\n" " mul r0, r0, r3\n" @@ -2523,7 +2523,7 @@ void debug_sub_8010CAC() " add r3, r0, r6\n" " mov r4, #0x0\n" " ldsh r2, [r3, r4]\n" - " ldr r4, ._650 + 16\n" + " ldr r4, ._650 + 16 @ gUnknown_Debug_821F424\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" " lsl r1, r0, #0x1\n" @@ -2538,13 +2538,13 @@ void debug_sub_8010CAC() " ldrh r0, [r0]\n" " strh r0, [r3]\n" "._644:\n" - " ldr r5, ._650 + 4\n" + " ldr r5, ._650 + 4 @ gUnknown_Debug_030043A0\n" " ldrb r0, [r5]\n" " cmp r0, #0\n" " bne ._645 @cond_branch\n" " mov r0, #0x0\n" " bl debug_sub_8010AAC\n" - " ldr r0, ._650 + 8\n" + " ldr r0, ._650 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2553,7 +2553,7 @@ void debug_sub_8010CAC() " lsr r0, r0, #0x18\n" " bl debug_sub_8011EA0\n" "._645:\n" - " ldr r4, ._650 + 8\n" + " ldr r4, ._650 + 8 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r4]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2569,16 +2569,16 @@ void debug_sub_8010CAC() " lsr r0, r0, #0x18\n" " bl debug_sub_80123D8\n" "._638:\n" - " ldr r0, ._650 + 20\n" + " ldr r0, ._650 + 20 @ gMain\n" " ldrh r1, [r0, #0x30]\n" " mov r0, #0x80\n" " lsl r0, r0, #0x2\n" " and r0, r0, r1\n" " cmp r0, #0\n" " beq ._646 @cond_branch\n" - " ldr r0, ._650 + 4\n" + " ldr r0, ._650 + 4 @ gUnknown_Debug_030043A0\n" " ldrb r1, [r0]\n" - " ldr r2, ._650 + 8\n" + " ldr r2, ._650 + 8 @ gUnknown_Debug_030043A4\n" " mov r8, r2\n" " add r7, r0, #0\n" " cmp r1, #0x4\n" @@ -2611,9 +2611,9 @@ void debug_sub_8010CAC() " bl debug_sub_8010B80\n" " b ._653\n" "._652:\n" - " ldr r4, ._655\n" + " ldr r4, ._655 @ gUnknown_Debug_2023A76\n" " lsl r1, r0, #0x1\n" - " ldr r3, ._655 + 4\n" + " ldr r3, ._655 + 4 @ gUnknown_Debug_03004360\n" " ldrb r2, [r3]\n" " mov r0, #0x46\n" " mul r0, r0, r2\n" @@ -2623,7 +2623,7 @@ void debug_sub_8010CAC() " sub r0, r0, #0xa\n" " strh r0, [r1]\n" " add r6, r3, #0\n" - " ldr r5, ._655 + 8\n" + " ldr r5, ._655 + 8 @ gUnknown_Debug_821F424\n" " b ._654\n" "._656:\n" " .align 2, 0\n" @@ -2663,13 +2663,13 @@ void debug_sub_8010CAC() " cmp r2, r0\n" " blt ._657 @cond_branch\n" "._653:\n" - " ldr r5, ._663\n" + " ldr r5, ._663 @ gUnknown_Debug_030043A0\n" " ldrb r0, [r5]\n" " cmp r0, #0\n" " bne ._658 @cond_branch\n" " mov r0, #0x0\n" " bl debug_sub_8010AAC\n" - " ldr r0, ._663 + 4\n" + " ldr r0, ._663 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2678,7 +2678,7 @@ void debug_sub_8010CAC() " lsr r0, r0, #0x18\n" " bl debug_sub_8011EA0\n" "._658:\n" - " ldr r4, ._663 + 4\n" + " ldr r4, ._663 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r4]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2694,16 +2694,16 @@ void debug_sub_8010CAC() " lsr r0, r0, #0x18\n" " bl debug_sub_80123D8\n" "._646:\n" - " ldr r0, ._663 + 8\n" + " ldr r0, ._663 + 8 @ gMain\n" " ldrh r1, [r0, #0x30]\n" " mov r0, #0x80\n" " lsl r0, r0, #0x1\n" " and r0, r0, r1\n" " cmp r0, #0\n" " beq ._659 @cond_branch\n" - " ldr r0, ._663\n" + " ldr r0, ._663 @ gUnknown_Debug_030043A0\n" " ldrb r1, [r0]\n" - " ldr r2, ._663 + 4\n" + " ldr r2, ._663 + 4 @ gUnknown_Debug_030043A4\n" " mov r8, r2\n" " add r7, r0, #0\n" " cmp r1, #0x4\n" @@ -2733,9 +2733,9 @@ void debug_sub_8010CAC() " bl debug_sub_8010B80\n" " b ._666\n" "._665:\n" - " ldr r4, ._668\n" + " ldr r4, ._668 @ gUnknown_Debug_2023A76\n" " lsl r1, r0, #0x1\n" - " ldr r3, ._668 + 4\n" + " ldr r3, ._668 + 4 @ gUnknown_Debug_03004360\n" " ldrb r2, [r3]\n" " mov r0, #0x46\n" " mul r0, r0, r2\n" @@ -2745,7 +2745,7 @@ void debug_sub_8010CAC() " add r0, r0, #0xa\n" " strh r0, [r1]\n" " add r6, r3, #0\n" - " ldr r5, ._668 + 8\n" + " ldr r5, ._668 + 8 @ gUnknown_Debug_821F424\n" " b ._667\n" "._669:\n" " .align 2, 0\n" @@ -2781,13 +2781,13 @@ void debug_sub_8010CAC() " cmp r2, r1\n" " bgt ._670 @cond_branch\n" "._666:\n" - " ldr r5, ._672\n" + " ldr r5, ._672 @ gUnknown_Debug_030043A0\n" " ldrb r0, [r5]\n" " cmp r0, #0\n" " bne ._671 @cond_branch\n" " mov r0, #0x0\n" " bl debug_sub_8010AAC\n" - " ldr r0, ._672 + 4\n" + " ldr r0, ._672 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2796,7 +2796,7 @@ void debug_sub_8010CAC() " lsr r0, r0, #0x18\n" " bl debug_sub_8011EA0\n" "._671:\n" - " ldr r4, ._672 + 4\n" + " ldr r4, ._672 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r4]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2838,8 +2838,8 @@ void debug_sub_8011498() " mov r6, r9\n" " mov r5, r8\n" " push {r5, r6, r7}\n" - " ldr r2, ._687\n" - " ldr r0, ._687 + 4\n" + " ldr r2, ._687 @ gUnknown_Debug_030043A0\n" + " ldr r0, ._687 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -2848,7 +2848,7 @@ void debug_sub_8011498() " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x18\n" " mov r9, r0\n" - " ldr r4, ._687 + 8\n" + " ldr r4, ._687 + 8 @ gMain\n" " ldrh r1, [r4, #0x28]\n" " mov r0, #0x81\n" " lsl r0, r0, #0x2\n" @@ -2860,7 +2860,7 @@ void debug_sub_8011498() " cmp r0, #0x4\n" " bne ._675 @cond_branch\n" " bl debug_sub_8012658\n" - " ldr r0, ._687 + 12\n" + " ldr r0, ._687 + 12 @ debug_sub_8010CAC\n" " bl SetMainCallback2\n" "._675:\n" " ldrh r0, [r4, #0x2a]\n" @@ -2875,14 +2875,14 @@ void debug_sub_8011498() " bne ._678 @cond_branch\n" "._677:\n" " bl debug_sub_8012658\n" - " ldr r0, ._687 + 16\n" + " ldr r0, ._687 + 16 @ gUnknown_Debug_030043A8\n" " ldrb r1, [r0]\n" " mov r2, #0x2\n" " eor r1, r1, r2\n" " strb r1, [r0]\n" " bl debug_sub_8012628\n" "._678:\n" - " ldr r0, ._687 + 8\n" + " ldr r0, ._687 + 8 @ gMain\n" " ldrh r0, [r0, #0x2a]\n" " cmp r0, #0x20\n" " beq ._679 @cond_branch\n" @@ -2890,22 +2890,22 @@ void debug_sub_8011498() " bne ._680 @cond_branch\n" "._679:\n" " bl debug_sub_8012658\n" - " ldr r0, ._687 + 16\n" + " ldr r0, ._687 + 16 @ gUnknown_Debug_030043A8\n" " ldrb r1, [r0]\n" " mov r2, #0x1\n" " eor r1, r1, r2\n" " strb r1, [r0]\n" " bl debug_sub_8012628\n" "._680:\n" - " ldr r0, ._687 + 8\n" + " ldr r0, ._687 + 8 @ gMain\n" " ldrh r1, [r0, #0x30]\n" " mov r0, #0x2\n" " and r0, r0, r1\n" " cmp r0, #0\n" " beq ._681 @cond_branch\n" - " ldr r0, ._687 + 20\n" + " ldr r0, ._687 + 20 @ gUnknown_Debug_2023B02\n" " mov r8, r0\n" - " ldr r6, ._687 + 16\n" + " ldr r6, ._687 + 16 @ gUnknown_Debug_030043A8\n" " ldrb r4, [r6]\n" " lsl r4, r4, #0x1\n" " mov r0, r9\n" @@ -2914,7 +2914,7 @@ void debug_sub_8011498() " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" - " ldr r5, ._687 + 24\n" + " ldr r5, ._687 + 24 @ gUnknown_Debug_03004360\n" " ldrb r2, [r5]\n" " lsl r1, r2, #0x1\n" " add r1, r1, r2\n" @@ -2936,7 +2936,7 @@ void debug_sub_8011498() " add r4, r1, r0\n" " mov r0, #0x0\n" " ldsh r1, [r4, r0]\n" - " ldr r5, ._687 + 28\n" + " ldr r5, ._687 + 28 @ gUnknown_Debug_821F564\n" " lsl r0, r3, #0x2\n" " add r0, r0, r3\n" " lsl r2, r0, #0x1\n" @@ -2953,15 +2953,15 @@ void debug_sub_8011498() "._682:\n" " bl debug_sub_8012294\n" "._681:\n" - " ldr r0, ._687 + 8\n" + " ldr r0, ._687 + 8 @ gMain\n" " ldrh r1, [r0, #0x30]\n" " mov r0, #0x1\n" " and r0, r0, r1\n" " cmp r0, #0\n" " beq ._683 @cond_branch\n" - " ldr r1, ._687 + 20\n" + " ldr r1, ._687 + 20 @ gUnknown_Debug_2023B02\n" " mov r8, r1\n" - " ldr r6, ._687 + 16\n" + " ldr r6, ._687 + 16 @ gUnknown_Debug_030043A8\n" " ldrb r4, [r6]\n" " lsl r4, r4, #0x1\n" " mov r0, r9\n" @@ -2970,7 +2970,7 @@ void debug_sub_8011498() " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" - " ldr r5, ._687 + 24\n" + " ldr r5, ._687 + 24 @ gUnknown_Debug_03004360\n" " ldrb r2, [r5]\n" " lsl r1, r2, #0x1\n" " add r1, r1, r2\n" @@ -2992,7 +2992,7 @@ void debug_sub_8011498() " add r4, r1, r0\n" " mov r0, #0x0\n" " ldsh r1, [r4, r0]\n" - " ldr r5, ._687 + 28\n" + " ldr r5, ._687 + 28 @ gUnknown_Debug_821F564\n" " lsl r0, r3, #0x2\n" " add r0, r0, r3\n" " lsl r2, r0, #0x1\n" @@ -3009,15 +3009,15 @@ void debug_sub_8011498() "._684:\n" " bl debug_sub_8012294\n" "._683:\n" - " ldr r0, ._687 + 8\n" + " ldr r0, ._687 + 8 @ gMain\n" " ldrh r1, [r0, #0x30]\n" " mov r0, #0x80\n" " lsl r0, r0, #0x2\n" " and r0, r0, r1\n" " cmp r0, #0\n" " beq ._685 @cond_branch\n" - " ldr r6, ._687 + 20\n" - " ldr r5, ._687 + 16\n" + " ldr r6, ._687 + 20 @ gUnknown_Debug_2023B02\n" + " ldr r5, ._687 + 16 @ gUnknown_Debug_030043A8\n" " ldrb r4, [r5]\n" " lsl r4, r4, #0x1\n" " mov r0, r9\n" @@ -3026,7 +3026,7 @@ void debug_sub_8011498() " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" - " ldr r2, ._687 + 24\n" + " ldr r2, ._687 + 24 @ gUnknown_Debug_03004360\n" " ldrb r1, [r2]\n" " lsl r0, r1, #0x1\n" " add r0, r0, r1\n" @@ -3039,7 +3039,7 @@ void debug_sub_8011498() " mov sl, r5\n" " mov r8, r6\n" " add r7, r2, #0\n" - " ldr r6, ._687 + 28\n" + " ldr r6, ._687 + 28 @ gUnknown_Debug_821F564\n" " b ._686\n" "._688:\n" " .align 2, 0\n" @@ -3088,15 +3088,15 @@ void debug_sub_8011498() " blt ._689 @cond_branch\n" " bl debug_sub_8012294\n" "._685:\n" - " ldr r0, ._692\n" + " ldr r0, ._692 @ gMain\n" " ldrh r1, [r0, #0x30]\n" " mov r0, #0x80\n" " lsl r0, r0, #0x1\n" " and r0, r0, r1\n" " cmp r0, #0\n" " beq ._690 @cond_branch\n" - " ldr r6, ._692 + 4\n" - " ldr r5, ._692 + 8\n" + " ldr r6, ._692 + 4 @ gUnknown_Debug_2023B02\n" + " ldr r5, ._692 + 8 @ gUnknown_Debug_030043A8\n" " ldrb r4, [r5]\n" " lsl r4, r4, #0x1\n" " mov r0, r9\n" @@ -3105,7 +3105,7 @@ void debug_sub_8011498() " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x15\n" " add r4, r4, r0\n" - " ldr r2, ._692 + 12\n" + " ldr r2, ._692 + 12 @ gUnknown_Debug_03004360\n" " ldrb r1, [r2]\n" " lsl r0, r1, #0x1\n" " add r0, r0, r1\n" @@ -3118,7 +3118,7 @@ void debug_sub_8011498() " mov sl, r5\n" " mov r8, r6\n" " add r7, r2, #0\n" - " ldr r6, ._692 + 16\n" + " ldr r6, ._692 + 16 @ gUnknown_Debug_821F564\n" " b ._691\n" "._693:\n" " .align 2, 0\n" @@ -3185,7 +3185,7 @@ void debug_sub_801174C() " add sp, sp, #0xffffffe8\n" " mov r0, #0x0\n" " mov r9, r0\n" - " ldr r1, ._704\n" + " ldr r1, ._704 @ gUnknown_020297ED\n" " mov r0, #0x1\n" " strb r0, [r1]\n" " bl Random\n" @@ -3196,11 +3196,11 @@ void debug_sub_801174C() " and r4, r4, r0\n" " lsl r4, r4, #0x18\n" " lsr r6, r4, #0x18\n" - " ldr r5, ._704 + 4\n" + " ldr r5, ._704 + 4 @ gSaveBlock2\n" " lsl r1, r6, #0x1\n" " add r1, r1, r6\n" " lsl r1, r1, #0x1\n" - " ldr r0, ._704 + 8\n" + " ldr r0, ._704 + 8 @ str_821F631\n" " add r1, r1, r0\n" " add r0, r5, #0\n" " bl StringCopy\n" @@ -3208,7 +3208,7 @@ void debug_sub_801174C() " strb r4, [r5, #0x8]\n" " bl ZeroPlayerPartyMons\n" " bl ZeroEnemyPartyMons\n" - " ldr r0, ._704 + 12\n" + " ldr r0, ._704 + 12 @ gUnknown_Debug_2023A76\n" " mov r1, #0x3c\n" " ldsh r7, [r0, r1]\n" " mov r2, r9\n" @@ -3223,17 +3223,17 @@ void debug_sub_801174C() " bgt ._696 @cond_branch\n" " str r0, [sp, #0xc]\n" "._695:\n" - " ldr r2, ._704 + 16\n" - " ldr r1, ._704 + 20\n" + " ldr r2, ._704 + 16 @ gBattleTypeFlags\n" + " ldr r1, ._704 + 20 @ gUnknown_Debug_821F598\n" " sub r0, r7, #1\n" " lsl r0, r0, #0x1\n" " add r0, r0, r1\n" " ldrh r3, [r0]\n" " strh r3, [r2]\n" - " ldr r1, ._704 + 24\n" + " ldr r1, ._704 + 24 @ gUnknown_02023A14_50\n" " mov r0, #0x8\n" " strb r0, [r1]\n" - " ldr r1, ._704 + 28\n" + " ldr r1, ._704 + 28 @ gBattleTerrain\n" " add r0, sp, #0xc\n" " ldrb r0, [r0]\n" " strb r0, [r1]\n" @@ -3243,27 +3243,27 @@ void debug_sub_801174C() " beq ._697 @cond_branch\n" " bl EnterSafariMode\n" "._697:\n" - " ldr r5, ._704 + 12\n" + " ldr r5, ._704 + 12 @ gUnknown_Debug_2023A76\n" " ldrh r0, [r5, #0x3c]\n" " sub r0, r0, #0x2\n" " lsl r0, r0, #0x10\n" " lsr r0, r0, #0x10\n" " cmp r0, #0x2\n" " bhi ._698 @cond_branch\n" - " ldr r4, ._704 + 32\n" + " ldr r4, ._704 + 32 @ gTrainerBattleOpponent\n" " bl Random\n" " mov r1, #0x7\n" " and r1, r1, r0\n" " add r1, r1, #0x1\n" " strh r1, [r4]\n" "._698:\n" - " ldr r1, ._704 + 36\n" + " ldr r1, ._704 + 36 @ gPlayerPartyCount\n" " mov r0, #0x0\n" " strb r0, [r1]\n" " mov r7, #0x0\n" "._745:\n" " lsl r0, r7, #0x1\n" - " ldr r3, ._704 + 12\n" + " ldr r3, ._704 + 12 @ gUnknown_Debug_2023A76\n" " add r1, r0, r3\n" " mov r2, #0x0\n" " ldsh r1, [r1, r2]\n" @@ -3339,14 +3339,14 @@ void debug_sub_801174C() " bl __divsi3\n" " mov r3, #0x64\n" " mul r0, r0, r3\n" - " ldr r1, ._719\n" + " ldr r1, ._719 @ gEnemyParty\n" " add r0, r0, r1\n" - " ldr r1, ._719 + 4\n" + " ldr r1, ._719 + 4 @ gUnknown_Debug_2023A76\n" " add r1, r1, r8\n" " ldrh r1, [r1]\n" " add r2, r7, #1\n" " lsl r2, r2, #0x1\n" - " ldr r3, ._719 + 4\n" + " ldr r3, ._719 + 4 @ gUnknown_Debug_2023A76\n" " add r2, r2, r3\n" " ldrb r2, [r2]\n" " str r6, [sp]\n" @@ -3363,9 +3363,9 @@ void debug_sub_801174C() " mov r2, #0x64\n" " add r1, r0, #0\n" " mul r1, r1, r2\n" - " ldr r0, ._719\n" + " ldr r0, ._719 @ gEnemyParty\n" " add r5, r1, r0\n" - " ldr r4, ._719 + 8\n" + " ldr r4, ._719 + 8 @ gUnknown_Debug_2023A7A\n" " mov r3, r8\n" " add r6, r3, r4\n" " add r0, r5, #0\n" @@ -3421,19 +3421,19 @@ void debug_sub_801174C() " bl __divsi3\n" " mov r3, #0x64\n" " mul r0, r0, r3\n" - " ldr r1, ._726\n" + " ldr r1, ._726 @ gEnemyParty\n" " add r0, r0, r1\n" " mov r1, #0x2e\n" " add r2, sp, #0xc\n" " bl SetMonData\n" "._716:\n" - " ldr r1, ._726 + 4\n" + " ldr r1, ._726 + 4 @ gUnknown_Debug_2023A76\n" " add r1, r1, #0x46\n" " mov r2, r8\n" " add r0, r2, r1\n" " mov r3, #0x0\n" " ldsh r0, [r0, r3]\n" - " ldr r2, ._726 + 4\n" + " ldr r2, ._726 + 4 @ gUnknown_Debug_2023A76\n" " cmp r0, #0\n" " beq ._721 @cond_branch\n" " add r0, r7, #4\n" @@ -3494,14 +3494,14 @@ void debug_sub_801174C() " bl __divsi3\n" " mov r2, #0x64\n" " mul r0, r0, r2\n" - " ldr r1, ._741\n" + " ldr r1, ._741 @ gPlayerParty\n" " add r0, r0, r1\n" - " ldr r1, ._741 + 4\n" + " ldr r1, ._741 + 4 @ gUnknown_Debug_2023ABC\n" " add r1, r1, r8\n" " ldrh r1, [r1]\n" " add r2, r7, #1\n" " lsl r2, r2, #0x1\n" - " ldr r3, ._741 + 4\n" + " ldr r3, ._741 + 4 @ gUnknown_Debug_2023ABC\n" " add r2, r2, r3\n" " ldrb r2, [r2]\n" " str r6, [sp]\n" @@ -3511,7 +3511,7 @@ void debug_sub_801174C() " str r3, [sp, #0x8]\n" " mov r3, #0x0\n" " bl CreateMonWithGenderNatureLetter\n" - " ldr r1, ._741 + 8\n" + " ldr r1, ._741 + 8 @ gPlayerPartyCount\n" " ldrb r0, [r1]\n" " add r0, r0, #0x1\n" " strb r0, [r1]\n" @@ -3522,9 +3522,9 @@ void debug_sub_801174C() " mov r2, #0x64\n" " add r1, r0, #0\n" " mul r1, r1, r2\n" - " ldr r0, ._741\n" + " ldr r0, ._741 @ gPlayerParty\n" " add r4, r1, r0\n" - " ldr r0, ._741 + 12\n" + " ldr r0, ._741 + 12 @ gUnknown_Debug_2023AC0\n" " mov r3, r8\n" " add r5, r3, r0\n" " add r0, r4, #0\n" @@ -3533,7 +3533,7 @@ void debug_sub_801174C() " bl SetMonData\n" " ldr r1, [sp, #0x10]\n" " lsl r0, r1, #0x1\n" - " ldr r2, ._741 + 16\n" + " ldr r2, ._741 + 16 @ gUnknown_Debug_2023A76\n" " add r0, r0, r2\n" " ldrh r0, [r0]\n" " sub r0, r0, #0x1\n" @@ -3548,7 +3548,7 @@ void debug_sub_801174C() "._736:\n" " ldr r3, [sp, #0x14]\n" " lsl r0, r3, #0x1\n" - " ldr r1, ._741 + 4\n" + " ldr r1, ._741 + 4 @ gUnknown_Debug_2023ABC\n" " add r0, r0, r1\n" " mov r2, #0x0\n" " ldsh r1, [r0, r2]\n" @@ -3580,7 +3580,7 @@ void debug_sub_801174C() " bl __divsi3\n" " mov r2, #0x64\n" " mul r0, r0, r2\n" - " ldr r1, ._750\n" + " ldr r1, ._750 @ gPlayerParty\n" " add r0, r0, r1\n" " mov r1, #0x2e\n" " add r2, sp, #0xc\n" @@ -3588,7 +3588,7 @@ void debug_sub_801174C() "._738:\n" " ldr r3, [sp, #0x14]\n" " lsl r0, r3, #0x1\n" - " ldr r1, ._750 + 4\n" + " ldr r1, ._750 + 4 @ gUnknown_Debug_2023ABC\n" " add r0, r0, r1\n" " mov r2, #0x0\n" " ldsh r0, [r0, r2]\n" @@ -3599,12 +3599,12 @@ void debug_sub_801174C() " bl __divsi3\n" " mov r3, #0x64\n" " mul r0, r0, r3\n" - " ldr r1, ._750\n" + " ldr r1, ._750 @ gPlayerParty\n" " add r0, r0, r1\n" " mov r1, #0x7\n" - " ldr r2, ._750 + 8\n" + " ldr r2, ._750 + 8 @ Str_821F649\n" " bl SetMonData\n" - " ldr r2, ._750 + 12\n" + " ldr r2, ._750 + 12 @ gUnknown_02023A14_50\n" " ldrb r0, [r2]\n" " mov r1, #0x40\n" " orr r0, r0, r1\n" @@ -3619,9 +3619,9 @@ void debug_sub_801174C() " str r0, [sp, #0xc]\n" " mov r0, #0x64\n" " mov r8, r0\n" - " ldr r1, ._750 + 16\n" + " ldr r1, ._750 + 16 @ gUnknown_Debug_2023B02\n" " mov r9, r1\n" - " ldr r2, ._750\n" + " ldr r2, ._750 @ gPlayerParty\n" " mov sl, r2\n" "._747:\n" " mov r7, #0x0\n" @@ -3629,7 +3629,7 @@ void debug_sub_801174C() " ldr r2, [sp, #0xc]\n" " mov r0, r8\n" " mul r0, r0, r2\n" - " ldr r3, ._750 + 20\n" + " ldr r3, ._750 + 20 @ gEnemyParty\n" " add r0, r0, r3\n" " add r5, r7, #0\n" " add r5, r5, #0xd\n" @@ -3643,7 +3643,7 @@ void debug_sub_801174C() " ldr r1, [sp, #0xc]\n" " mov r0, r8\n" " mul r0, r0, r1\n" - " ldr r2, ._750 + 20\n" + " ldr r2, ._750 + 20 @ gEnemyParty\n" " add r0, r0, r2\n" " add r6, r7, #0\n" " add r6, r6, #0x11\n" @@ -3655,7 +3655,7 @@ void debug_sub_801174C() " lsl r2, r1, #0x1\n" " add r2, r2, r1\n" " lsl r2, r2, #0x2\n" - " ldr r1, ._750 + 24\n" + " ldr r1, ._750 + 24 @ gBattleMoves\n" " add r2, r2, r1\n" " add r1, r6, #0\n" " bl SetMonData\n" @@ -3664,7 +3664,7 @@ void debug_sub_801174C() " mul r0, r0, r2\n" " add r0, r0, sl\n" " lsl r2, r2, #0x3\n" - " ldr r3, ._750 + 28\n" + " ldr r3, ._750 + 28 @ gUnknown_Debug_2023B32\n" " add r1, r4, r3\n" " add r2, r2, r1\n" " add r1, r5, #0\n" @@ -3675,14 +3675,14 @@ void debug_sub_801174C() " add r0, r0, sl\n" " lsl r1, r1, #0x3\n" " add r4, r4, r1\n" - " ldr r1, ._750 + 28\n" + " ldr r1, ._750 + 28 @ gUnknown_Debug_2023B32\n" " add r4, r4, r1\n" " mov r2, #0x0\n" " ldsh r1, [r4, r2]\n" " lsl r2, r1, #0x1\n" " add r2, r2, r1\n" " lsl r2, r2, #0x2\n" - " ldr r3, ._750 + 24\n" + " ldr r3, ._750 + 24 @ gBattleMoves\n" " add r2, r2, r3\n" " add r1, r6, #0\n" " bl SetMonData\n" @@ -3694,7 +3694,7 @@ void debug_sub_801174C() " str r0, [sp, #0xc]\n" " cmp r0, #0x5\n" " ble ._747 @cond_branch\n" - " ldr r3, ._750 + 32\n" + " ldr r3, ._750 + 32 @ gUnknown_Debug_2023A76\n" " add r4, r3, #0\n" " add r4, r4, #0x44\n" " ldrh r1, [r4]\n" @@ -3702,7 +3702,7 @@ void debug_sub_801174C() " ldsh r0, [r4, r2]\n" " cmp r0, #0x8\n" " bne ._748 @cond_branch\n" - " ldr r0, ._750 + 12\n" + " ldr r0, ._750 + 12 @ gUnknown_02023A14_50\n" " ldrb r1, [r0]\n" " mov r2, #0x80\n" " b ._753\n" @@ -3721,7 +3721,7 @@ void debug_sub_801174C() "._748:\n" " cmp r0, #0x7\n" " bne ._752 @cond_branch\n" - " ldr r0, ._754\n" + " ldr r0, ._754 @ gUnknown_02023A14_50\n" " ldrb r1, [r0]\n" " mov r2, #0x20\n" " b ._753\n" @@ -3732,7 +3732,7 @@ void debug_sub_801174C() "._752:\n" " cmp r0, #0x6\n" " bne ._756 @cond_branch\n" - " ldr r2, ._759\n" + " ldr r2, ._759 @ gUnknown_02023A14_50\n" " ldrb r0, [r2]\n" " mov r1, #0x10\n" " orr r0, r0, r1\n" @@ -3742,9 +3742,9 @@ void debug_sub_801174C() " ldsh r0, [r3, r2]\n" " cmp r0, #0x5\n" " ble ._757 @cond_branch\n" - " ldr r0, ._759 + 4\n" + " ldr r0, ._759 + 4 @ gSharedMem\n" " sub r1, r1, #0x2\n" - " ldr r3, ._759 + 8\n" + " ldr r3, ._759 + 8 @ 0x160a3\n" " add r0, r0, r3\n" " b ._761\n" "._760:\n" @@ -3754,8 +3754,8 @@ void debug_sub_801174C() " .word gSharedMem\n" " .word 0x160a3\n" "._757:\n" - " ldr r0, ._762\n" - " ldr r2, ._762 + 4\n" + " ldr r0, ._762 @ gSharedMem\n" + " ldr r2, ._762 + 4 @ 0x160a3\n" " add r0, r0, r2\n" " b ._761\n" "._763:\n" @@ -3766,7 +3766,7 @@ void debug_sub_801174C() "._756:\n" " cmp r0, #0x5\n" " bne ._764 @cond_branch\n" - " ldr r0, ._766\n" + " ldr r0, ._766 @ gUnknown_02023A14_50\n" " ldrb r1, [r0]\n" " mov r2, #0x21\n" "._753:\n" @@ -3791,7 +3791,7 @@ void debug_sub_801174C() " and r0, r0, r3\n" " cmp r0, #0\n" " beq ._769 @cond_branch\n" - " ldr r0, ._772\n" + " ldr r0, ._772 @ gUnknown_02023A14_50\n" " ldrb r1, [r0]\n" " mov r2, #0x4\n" " orr r1, r1, r2\n" @@ -3801,16 +3801,16 @@ void debug_sub_801174C() " and r0, r0, r3\n" " cmp r0, #0\n" " beq ._770 @cond_branch\n" - " ldr r0, ._772\n" + " ldr r0, ._772 @ gUnknown_02023A14_50\n" " ldrb r1, [r0]\n" " mov r2, #0x6\n" " orr r1, r1, r2\n" " strb r1, [r0]\n" "._770:\n" - " ldr r0, ._772 + 4\n" - " ldr r1, ._772 + 8\n" + " ldr r0, ._772 + 4 @ gMain\n" + " ldr r1, ._772 + 8 @ debug_sub_80108B8\n" " str r1, [r0, #0x8]\n" - " ldr r0, ._772 + 12\n" + " ldr r0, ._772 + 12 @ unref_sub_800D684\n" " bl SetMainCallback2\n" " bl ClearBag\n" " mov r0, #0x1\n" @@ -3888,7 +3888,7 @@ void debug_sub_801174C() " mov r0, #0x50\n" " mov r1, #0x63\n" " bl AddBagItem\n" - " ldr r4, ._772 + 16\n" + " ldr r4, ._772 + 16 @ gUnknown_Debug_821F5AC\n" " mov r7, #0xe\n" "._771:\n" " add r0, r4, #0\n" @@ -3995,7 +3995,7 @@ void debug_sub_8011EA0(u8 a) " b ._815\n" "._782:\n" " lsl r0, r7, #0x2\n" - " ldr r1, ._785\n" + " ldr r1, ._785 @ \n" " add r1, r0, r1\n" " ldr r1, [r1]\n" " str r0, [sp, #0x8]\n" @@ -4044,8 +4044,8 @@ void debug_sub_8011EA0(u8 a) " mov r0, #0x0\n" " mov r1, #0x14\n" " bl debug_sub_8010A7C\n" - " ldr r6, ._823\n" - " ldr r2, ._823 + 4\n" + " ldr r6, ._823 @ gBattleTextBuff1\n" + " ldr r2, ._823 + 4 @ gUnknown_Debug_821F424\n" " ldr r0, [sp, #0x8]\n" " add r1, r0, r7\n" " lsl r1, r1, #0x1\n" @@ -4061,17 +4061,17 @@ void debug_sub_8011EA0(u8 a) " ldrb r1, [r1]\n" " mov r9, r1\n" " str r1, [sp]\n" - " ldr r0, ._823 + 8\n" + " ldr r0, ._823 + 8 @ gUnknown_Debug_03004370\n" " add r1, r6, #0\n" " ldr r2, [sp, #0x4]\n" " mov r3, r8\n" " bl Text_InitWindow\n" - " ldr r0, ._823 + 8\n" + " ldr r0, ._823 + 8 @ gUnknown_Debug_03004370\n" " bl Text_PrintWindow8002F44\n" - " ldr r1, ._823 + 12\n" + " ldr r1, ._823 + 12 @ gUnknown_Debug_2023A76\n" " mov sl, r1\n" " lsl r4, r7, #0x1\n" - " ldr r5, ._823 + 16\n" + " ldr r5, ._823 + 16 @ gUnknown_Debug_03004360\n" " ldrb r0, [r5]\n" " mov r7, #0x46\n" " mul r0, r0, r7\n" @@ -4092,10 +4092,10 @@ void debug_sub_8011EA0(u8 a) " lsr r3, r3, #0x18\n" " mov r0, #0x0\n" " str r0, [sp]\n" - " ldr r0, ._823 + 8\n" + " ldr r0, ._823 + 8 @ gUnknown_Debug_03004370\n" " add r1, r6, #0\n" " bl Text_InitWindow\n" - " ldr r0, ._823 + 8\n" + " ldr r0, ._823 + 8 @ gUnknown_Debug_03004370\n" " bl Text_PrintWindow8002F44\n" " mov r0, #0xff\n" " strb r0, [r6]\n" @@ -4107,18 +4107,18 @@ void debug_sub_8011EA0(u8 a) " ldsh r1, [r4, r0]\n" " mov r0, #0xb\n" " mul r1, r1, r0\n" - " ldr r0, ._823 + 20\n" + " ldr r0, ._823 + 20 @ gSpeciesNames\n" " add r1, r1, r0\n" " add r0, r6, #0\n" " bl StringAppend\n" " mov r1, r9\n" " str r1, [sp]\n" - " ldr r0, ._823 + 8\n" + " ldr r0, ._823 + 8 @ gUnknown_Debug_03004370\n" " add r1, r6, #0\n" " ldr r2, [sp, #0x4]\n" " mov r3, r8\n" " bl Text_InitWindow\n" - " ldr r0, ._823 + 8\n" + " ldr r0, ._823 + 8 @ gUnknown_Debug_03004370\n" " bl Text_PrintWindow8002F44\n" " b ._848\n" "._824:\n" @@ -4131,10 +4131,10 @@ void debug_sub_8011EA0(u8 a) " .word gUnknown_Debug_03004360\n" " .word gSpeciesNames\n" "._817:\n" - " ldr r6, ._826\n" - " ldr r3, ._826 + 4\n" + " ldr r6, ._826 @ gBattleTextBuff1\n" + " ldr r3, ._826 + 4 @ gUnknown_Debug_2023A76\n" " lsl r1, r7, #0x1\n" - " ldr r0, ._826 + 8\n" + " ldr r0, ._826 + 8 @ gUnknown_Debug_03004360\n" " ldrb r2, [r0]\n" " mov r0, #0x46\n" " mul r0, r0, r2\n" @@ -4157,10 +4157,10 @@ void debug_sub_8011EA0(u8 a) " mov r0, #0x0\n" " mov r1, #0x18\n" " bl debug_sub_8010A7C\n" - " ldr r6, ._830\n" - " ldr r1, ._830 + 4\n" + " ldr r6, ._830 @ gUnknown_Debug_03004370\n" + " ldr r1, ._830 + 4 @ gBattleTextBuff1\n" " mov sl, r1\n" - " ldr r4, ._830 + 8\n" + " ldr r4, ._830 + 8 @ gUnknown_Debug_821F424\n" " ldr r2, [sp, #0x8]\n" " add r1, r2, r7\n" " lsl r1, r1, #0x1\n" @@ -4179,12 +4179,12 @@ void debug_sub_8011EA0(u8 a) " add r0, r6, #0\n" " bl Text_PrintWindow8002F44\n" " lsl r4, r7, #0x1\n" - " ldr r5, ._830 + 12\n" + " ldr r5, ._830 + 12 @ gUnknown_Debug_03004360\n" " ldrb r0, [r5]\n" " mov r1, #0x46\n" " mul r0, r0, r1\n" " add r0, r4, r0\n" - " ldr r2, ._830 + 16\n" + " ldr r2, ._830 + 16 @ gUnknown_Debug_2023A76\n" " add r0, r0, r2\n" " mov r2, #0x0\n" " ldsh r1, [r0, r2]\n" @@ -4213,7 +4213,7 @@ void debug_sub_8011EA0(u8 a) " mov r2, #0x46\n" " mul r0, r0, r2\n" " add r4, r4, r0\n" - " ldr r0, ._830 + 16\n" + " ldr r0, ._830 + 16 @ gUnknown_Debug_2023A76\n" " add r4, r4, r0\n" " mov r1, #0x0\n" " ldsh r0, [r4, r1]\n" @@ -4234,13 +4234,13 @@ void debug_sub_8011EA0(u8 a) " .word gUnknown_Debug_03004360\n" " .word gUnknown_Debug_2023A76\n" "._828:\n" - " ldr r1, ._833\n" + " ldr r1, ._833 @ Str_821F624\n" " mov r0, sl\n" " bl StringAppend\n" "._829:\n" - " ldr r6, ._833 + 4\n" - " ldr r1, ._833 + 8\n" - " ldr r5, ._833 + 12\n" + " ldr r6, ._833 + 4 @ gUnknown_Debug_03004370\n" + " ldr r1, ._833 + 8 @ gBattleTextBuff1\n" + " ldr r5, ._833 + 12 @ gUnknown_Debug_821F424\n" " ldr r2, [sp, #0x8]\n" " add r4, r2, r7\n" " lsl r4, r4, #0x1\n" @@ -4269,9 +4269,9 @@ void debug_sub_8011EA0(u8 a) " mov r0, #0x0\n" " mov r1, #0x4\n" " bl debug_sub_8010A7C\n" - " ldr r5, ._839\n" - " ldr r6, ._839 + 4\n" - " ldr r4, ._839 + 8\n" + " ldr r5, ._839 @ gUnknown_Debug_03004370\n" + " ldr r6, ._839 + 4 @ gBattleTextBuff1\n" + " ldr r4, ._839 + 8 @ gUnknown_Debug_821F424\n" " ldr r0, [sp, #0x8]\n" " add r1, r0, r7\n" " lsl r1, r1, #0x1\n" @@ -4290,9 +4290,9 @@ void debug_sub_8011EA0(u8 a) " add r0, r5, #0\n" " bl Text_PrintWindow8002F44\n" " mov r4, #0x0\n" - " ldr r3, ._839 + 12\n" + " ldr r3, ._839 + 12 @ gUnknown_Debug_2023A76\n" " lsl r1, r7, #0x1\n" - " ldr r0, ._839 + 16\n" + " ldr r0, ._839 + 16 @ gUnknown_Debug_03004360\n" " ldrb r2, [r0]\n" " mov r0, #0x46\n" " mul r0, r0, r2\n" @@ -4341,7 +4341,7 @@ void debug_sub_8011EA0(u8 a) " mov r4, #0x2\n" " b ._847\n" "._843:\n" - " ldr r2, ._849\n" + " ldr r2, ._849 @ gBattleTextBuff1\n" " add r1, r4, r2\n" " mov r0, #0xac\n" " strb r0, [r1]\n" @@ -4352,8 +4352,8 @@ void debug_sub_8011EA0(u8 a) " mov r0, #0xff\n" " strb r0, [r1]\n" "._825:\n" - " ldr r5, ._849 + 4\n" - " ldr r4, ._849 + 8\n" + " ldr r5, ._849 + 4 @ gUnknown_Debug_03004370\n" + " ldr r4, ._849 + 8 @ gUnknown_Debug_821F424\n" " ldr r0, [sp, #0x8]\n" " add r1, r0, r7\n" " lsl r1, r1, #0x1\n" @@ -4379,10 +4379,10 @@ void debug_sub_8011EA0(u8 a) " .word gUnknown_Debug_03004370\n" " .word gUnknown_Debug_821F424\n" "._815:\n" - " ldr r6, ._851\n" - " ldr r3, ._851 + 4\n" + " ldr r6, ._851 @ gBattleTextBuff1\n" + " ldr r3, ._851 + 4 @ gUnknown_Debug_2023A76\n" " lsl r1, r7, #0x1\n" - " ldr r0, ._851 + 8\n" + " ldr r0, ._851 + 8 @ gUnknown_Debug_03004360\n" " ldrb r2, [r0]\n" " mov r0, #0x46\n" " mul r0, r0, r2\n" @@ -4394,8 +4394,8 @@ void debug_sub_8011EA0(u8 a) " mov r2, #0x2\n" " mov r3, #0x1\n" " bl ConvertIntToDecimalStringN\n" - " ldr r5, ._851 + 12\n" - " ldr r4, ._851 + 16\n" + " ldr r5, ._851 + 12 @ gUnknown_Debug_03004370\n" + " ldr r4, ._851 + 16 @ gUnknown_Debug_821F424\n" " lsl r1, r7, #0x2\n" " add r1, r1, r7\n" " lsl r1, r1, #0x1\n" @@ -4444,8 +4444,8 @@ void debug_sub_8012294() " mov r5, r8\n" " push {r5, r6, r7}\n" " add sp, sp, #0xfffffffc\n" - " ldr r2, ._854\n" - " ldr r0, ._854 + 4\n" + " ldr r2, ._854 @ gUnknown_Debug_030043A0\n" + " ldr r0, ._854 + 4 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" @@ -4458,23 +4458,23 @@ void debug_sub_8012294() " mov r0, #0x0\n" " mov r1, #0x18\n" " bl debug_sub_8010A7C\n" - " ldr r0, ._854 + 8\n" + " ldr r0, ._854 + 8 @ gUnknown_Debug_03004370\n" " mov sl, r0\n" - " ldr r1, ._854 + 12\n" + " ldr r1, ._854 + 12 @ gBattleTextBuff1\n" " mov r9, r1\n" - " ldr r2, ._854 + 16\n" + " ldr r2, ._854 + 16 @ gUnknown_Debug_821F564\n" " mov r8, r2\n" - " ldr r7, ._854 + 20\n" + " ldr r7, ._854 + 20 @ gUnknown_Debug_030043A8\n" " ldrb r1, [r7]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" " lsl r0, r0, #0x1\n" " add r1, r0, r2\n" " ldrh r2, [r1]\n" - " ldr r3, ._854 + 24\n" + " ldr r3, ._854 + 24 @ gUnknown_Debug_821F566\n" " add r1, r0, r3\n" " ldrb r3, [r1]\n" - " ldr r1, ._854 + 28\n" + " ldr r1, ._854 + 28 @ gUnknown_Debug_821F568\n" " add r0, r0, r1\n" " ldrb r0, [r0]\n" " str r0, [sp]\n" @@ -4492,13 +4492,13 @@ void debug_sub_8012294() " lsl r5, r5, #0x18\n" " lsr r5, r5, #0x15\n" " add r4, r4, r5\n" - " ldr r6, ._854 + 32\n" + " ldr r6, ._854 + 32 @ gUnknown_Debug_03004360\n" " ldrb r1, [r6]\n" " lsl r0, r1, #0x1\n" " add r0, r0, r1\n" " lsl r0, r0, #0x4\n" " add r4, r4, r0\n" - " ldr r2, ._854 + 36\n" + " ldr r2, ._854 + 36 @ gUnknown_Debug_2023B02\n" " add r4, r4, r2\n" " mov r3, #0x0\n" " ldsh r1, [r4, r3]\n" @@ -4531,13 +4531,13 @@ void debug_sub_8012294() " add r0, r0, r2\n" " lsl r0, r0, #0x4\n" " add r1, r1, r0\n" - " ldr r2, ._854 + 36\n" + " ldr r2, ._854 + 36 @ gUnknown_Debug_2023B02\n" " add r1, r1, r2\n" " mov r3, #0x0\n" " ldsh r1, [r1, r3]\n" " mov r0, #0xd\n" " mul r1, r1, r0\n" - " ldr r0, ._854 + 40\n" + " ldr r0, ._854 + 40 @ gMoveNames\n" " add r1, r1, r0\n" " mov r0, r9\n" " bl StringAppend\n" @@ -4548,10 +4548,10 @@ void debug_sub_8012294() " add r8, r8, r0\n" " mov r1, r8\n" " ldrh r2, [r1]\n" - " ldr r3, ._854 + 24\n" + " ldr r3, ._854 + 24 @ gUnknown_Debug_821F566\n" " add r1, r0, r3\n" " ldrb r3, [r1]\n" - " ldr r1, ._854 + 28\n" + " ldr r1, ._854 + 28 @ gUnknown_Debug_821F568\n" " add r0, r0, r1\n" " ldrb r0, [r0]\n" " str r0, [sp]\n" @@ -4604,10 +4604,10 @@ void debug_sub_80123D8(u8 a) " mov r0, #0x0\n" " mov r1, #0x12\n" " bl debug_sub_8010A7C\n" - " ldr r4, ._858\n" - " ldr r0, ._858 + 4\n" + " ldr r4, ._858 @ gUnknown_Debug_03004370\n" + " ldr r0, ._858 + 4 @ gBattleTextBuff1\n" " mov r8, r0\n" - " ldr r6, ._858 + 8\n" + " ldr r6, ._858 + 8 @ gUnknown_Debug_821F58C\n" " ldrh r1, [r6]\n" " mov sl, r1\n" " ldrb r7, [r6, #0x2]\n" @@ -4622,25 +4622,25 @@ void debug_sub_80123D8(u8 a) " add r0, r4, #0\n" " bl Text_PrintWindow8002F44\n" " lsl r5, r5, #0x1\n" - " ldr r1, ._858 + 12\n" + " ldr r1, ._858 + 12 @ gUnknown_Debug_03004360\n" " ldrb r0, [r1]\n" " mov r2, #0x46\n" " mul r0, r0, r2\n" " add r0, r5, r0\n" - " ldr r1, ._858 + 16\n" + " ldr r1, ._858 + 16 @ gUnknown_Debug_2023A76\n" " add r0, r0, r1\n" " mov r2, #0x0\n" " ldsh r1, [r0, r2]\n" " lsl r0, r1, #0x3\n" " sub r0, r0, r1\n" " lsl r0, r0, #0x2\n" - " ldr r1, ._858 + 20\n" + " ldr r1, ._858 + 20 @ gBaseStats\n" " add r0, r0, r1\n" " ldrb r0, [r0, #0x16]\n" " mov r2, #0xd\n" " add r1, r0, #0\n" " mul r1, r1, r2\n" - " ldr r0, ._858 + 24\n" + " ldr r0, ._858 + 24 @ gAbilityNames\n" " add r1, r1, r0\n" " mov r0, r8\n" " bl StringCopy\n" @@ -4668,25 +4668,25 @@ void debug_sub_80123D8(u8 a) " bl Text_InitWindow\n" " add r0, r4, #0\n" " bl Text_PrintWindow8002F44\n" - " ldr r1, ._858 + 12\n" + " ldr r1, ._858 + 12 @ gUnknown_Debug_03004360\n" " ldrb r0, [r1]\n" " mov r2, #0x46\n" " mul r0, r0, r2\n" " add r5, r5, r0\n" - " ldr r0, ._858 + 16\n" + " ldr r0, ._858 + 16 @ gUnknown_Debug_2023A76\n" " add r5, r5, r0\n" " mov r2, #0x0\n" " ldsh r1, [r5, r2]\n" " lsl r0, r1, #0x3\n" " sub r0, r0, r1\n" " lsl r0, r0, #0x2\n" - " ldr r1, ._858 + 20\n" + " ldr r1, ._858 + 20 @ gBaseStats\n" " add r0, r0, r1\n" " ldrb r0, [r0, #0x17]\n" " mov r2, #0xd\n" " add r1, r0, #0\n" " mul r1, r1, r2\n" - " ldr r0, ._858 + 24\n" + " ldr r0, ._858 + 24 @ gAbilityNames\n" " add r1, r1, r0\n" " mov r0, r8\n" " bl StringCopy\n" @@ -4710,12 +4710,12 @@ void debug_sub_80123D8(u8 a) " .word gBaseStats\n" " .word gAbilityNames\n" "._856:\n" - " ldr r6, ._860\n" - " ldr r1, ._860 + 4\n" + " ldr r6, ._860 @ gBattleTextBuff1\n" + " ldr r1, ._860 + 4 @ gAbilityNames\n" " add r0, r6, #0\n" " bl StringCopy\n" - " ldr r5, ._860 + 8\n" - " ldr r4, ._860 + 12\n" + " ldr r5, ._860 + 8 @ gUnknown_Debug_03004370\n" + " ldr r4, ._860 + 12 @ gUnknown_Debug_821F58C\n" " ldrh r2, [r4]\n" " ldrb r3, [r4, #0x2]\n" " ldrb r0, [r4, #0x4]\n" @@ -4760,8 +4760,8 @@ void debug_sub_8012540() asm( " push {r4, r5, r6, lr}\n" " add sp, sp, #0xfffffffc\n" - " ldr r5, ._862\n" - " ldr r0, ._862 + 4\n" + " ldr r5, ._862 @ gBattleTextBuff1\n" + " ldr r0, ._862 + 4 @ gUnknown_Debug_2023A76\n" " add r0, r0, #0x44\n" " mov r2, #0x0\n" " ldsh r1, [r0, r2]\n" @@ -4769,8 +4769,8 @@ void debug_sub_8012540() " mov r2, #0x0\n" " mov r3, #0x1\n" " bl ConvertIntToDecimalStringN\n" - " ldr r4, ._862 + 8\n" - " ldr r1, ._862 + 12\n" + " ldr r4, ._862 + 8 @ gUnknown_Debug_03004370\n" + " ldr r1, ._862 + 12 @ gUnknown_Debug_821F424\n" " mov r3, #0x9b\n" " lsl r3, r3, #0x1\n" " add r0, r1, r3\n" @@ -4817,17 +4817,17 @@ void debug_sub_80125A0() { asm( " push {r4, lr}\n" - " ldr r4, ._864\n" - " ldr r3, ._864 + 4\n" - " ldr r2, ._864 + 8\n" - " ldr r0, ._864 + 12\n" + " ldr r4, ._864 @ gSharedMem\n" + " ldr r3, ._864 + 4 @ gUnknown_Debug_821F680\n" + " ldr r2, ._864 + 8 @ gUnknown_Debug_030043A0\n" + " ldr r0, ._864 + 12 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" " ldrb r2, [r2]\n" " add r0, r0, r2\n" " lsl r0, r0, #0x2\n" - " ldr r1, ._864 + 16\n" + " ldr r1, ._864 + 16 @ gUnknown_Debug_03004360\n" " ldrb r2, [r1]\n" " mov r1, #0x8c\n" " mul r1, r1, r2\n" @@ -4857,17 +4857,17 @@ void debug_sub_80125E4() { asm( " push {r4, lr}\n" - " ldr r4, ._866\n" - " ldr r3, ._866 + 4\n" - " ldr r2, ._866 + 8\n" - " ldr r0, ._866 + 12\n" + " ldr r4, ._866 @ gSharedMem\n" + " ldr r3, ._866 + 4 @ gUnknown_Debug_821F680\n" + " ldr r2, ._866 + 8 @ gUnknown_Debug_030043A0\n" + " ldr r0, ._866 + 12 @ gUnknown_Debug_030043A4\n" " ldrb r1, [r0]\n" " lsl r0, r1, #0x2\n" " add r0, r0, r1\n" " ldrb r2, [r2]\n" " add r0, r0, r2\n" " lsl r0, r0, #0x2\n" - " ldr r1, ._866 + 16\n" + " ldr r1, ._866 + 16 @ gUnknown_Debug_03004360\n" " ldrb r2, [r1]\n" " mov r1, #0x8c\n" " mul r1, r1, r2\n" @@ -4896,12 +4896,12 @@ __attribute__((naked)) void debug_sub_8012628() { asm( - " ldr r3, ._868\n" - " ldr r2, ._868 + 4\n" - " ldr r0, ._868 + 8\n" + " ldr r3, ._868 @ gSharedMem\n" + " ldr r2, ._868 + 4 @ gUnknown_Debug_821F798\n" + " ldr r0, ._868 + 8 @ gUnknown_Debug_030043A8\n" " ldrb r1, [r0]\n" " lsl r1, r1, #0x2\n" - " ldr r0, ._868 + 12\n" + " ldr r0, ._868 + 12 @ gUnknown_Debug_03004360\n" " ldrb r0, [r0]\n" " lsl r0, r0, #0x4\n" " add r1, r1, r0\n" @@ -4926,12 +4926,12 @@ __attribute__((naked)) void debug_sub_8012658() { asm( - " ldr r3, ._870\n" - " ldr r2, ._870 + 4\n" - " ldr r0, ._870 + 8\n" + " ldr r3, ._870 @ gSharedMem\n" + " ldr r2, ._870 + 4 @ gUnknown_Debug_821F798\n" + " ldr r0, ._870 + 8 @ gUnknown_Debug_030043A8\n" " ldrb r1, [r0]\n" " lsl r1, r1, #0x2\n" - " ldr r0, ._870 + 12\n" + " ldr r0, ._870 + 12 @ gUnknown_Debug_03004360\n" " ldrb r0, [r0]\n" " lsl r0, r0, #0x4\n" " add r1, r1, r0\n" @@ -4963,7 +4963,7 @@ void debug_sub_8012688() " mov r1, #0x0\n" " mov r4, #0xcd\n" " lsl r4, r4, #0x1\n" - " ldr r3, ._873\n" + " ldr r3, ._873 @ gUnknown_Debug_2023B62\n" " mov r2, #0x0\n" "._872:\n" " add r0, r1, r3\n" @@ -4977,16 +4977,16 @@ void debug_sub_8012688() " bl SetVBlankCallback\n" " mov r5, #0x0\n" " str r5, [sp, #0x8]\n" - " ldr r1, ._873 + 4\n" + " ldr r1, ._873 + 4 @ 0x40000d4\n" " add r0, sp, #0x8\n" " str r0, [r1]\n" " mov r0, #0xc0\n" " lsl r0, r0, #0x13\n" " str r0, [r1, #0x4]\n" - " ldr r0, ._873 + 8\n" + " ldr r0, ._873 + 8 @ 0x85006000\n" " str r0, [r1, #0x8]\n" " ldr r0, [r1, #0x8]\n" - " ldr r0, ._873 + 12\n" + " ldr r0, ._873 + 12 @ 0x400004c\n" " strh r5, [r0]\n" " sub r0, r0, #0xc\n" " strh r5, [r0]\n" @@ -5000,28 +5000,28 @@ void debug_sub_8012688() " strh r5, [r0]\n" " add r0, r0, #0x2\n" " strh r5, [r0]\n" - " ldr r4, ._873 + 16\n" + " ldr r4, ._873 + 16 @ gWindowTemplate_81E6C58\n" " add r0, r4, #0\n" " bl Text_LoadWindowTemplate\n" " bl ResetPaletteFade\n" - " ldr r0, ._873 + 20\n" + " ldr r0, ._873 + 20 @ gBattle_BG0_X\n" " strh r5, [r0]\n" - " ldr r1, ._873 + 24\n" + " ldr r1, ._873 + 24 @ gBattle_BG0_Y\n" " mov r0, #0xa0\n" " strh r0, [r1]\n" - " ldr r0, ._873 + 28\n" + " ldr r0, ._873 + 28 @ gBattle_BG1_X\n" " strh r5, [r0]\n" - " ldr r0, ._873 + 32\n" + " ldr r0, ._873 + 32 @ gBattle_BG1_Y\n" " strh r5, [r0]\n" - " ldr r0, ._873 + 36\n" + " ldr r0, ._873 + 36 @ gBattle_BG2_X\n" " strh r5, [r0]\n" - " ldr r0, ._873 + 40\n" + " ldr r0, ._873 + 40 @ gBattle_BG2_Y\n" " strh r5, [r0]\n" - " ldr r0, ._873 + 44\n" + " ldr r0, ._873 + 44 @ gBattle_BG3_X\n" " strh r5, [r0]\n" - " ldr r0, ._873 + 48\n" + " ldr r0, ._873 + 48 @ gBattle_BG3_Y\n" " strh r5, [r0]\n" - " ldr r1, ._873 + 52\n" + " ldr r1, ._873 + 52 @ gBattleTerrain\n" " mov r0, #0x9\n" " strb r0, [r1]\n" " bl sub_800D6D4\n" @@ -5029,20 +5029,20 @@ void debug_sub_8012688() " bl ResetSpriteData\n" " bl ResetTasks\n" " bl FreeAllSpritePalettes\n" - " ldr r1, ._873 + 56\n" + " ldr r1, ._873 + 56 @ gReservedSpritePaletteCount\n" " mov r0, #0x4\n" " strb r0, [r1]\n" - " ldr r6, ._873 + 60\n" + " ldr r6, ._873 + 60 @ gCurrentMove\n" " mov r0, #0x1\n" " strh r0, [r6]\n" - " ldr r0, ._873 + 64\n" + " ldr r0, ._873 + 64 @ gUnknown_03004210\n" " add r1, r4, #0\n" " bl Text_InitWindowWithTemplate\n" " ldrh r2, [r6]\n" " lsl r0, r2, #0x3\n" - " ldr r1, ._873 + 68\n" + " ldr r1, ._873 + 68 @ gMonFrontPicTable\n" " add r0, r0, r1\n" - " ldr r1, ._873 + 72\n" + " ldr r1, ._873 + 72 @ gMonFrontPicCoords\n" " mov r8, r1\n" " lsl r2, r2, #0x2\n" " add r2, r2, r8\n" @@ -5050,13 +5050,13 @@ void debug_sub_8012688() " ldrb r2, [r2, #0x1]\n" " mov r3, #0x80\n" " lsl r3, r3, #0x12\n" - " ldr r4, ._873 + 76\n" + " ldr r4, ._873 + 76 @ gUnknown_081FAF4C\n" " ldr r4, [r4, #0x4]\n" " str r4, [sp]\n" " ldrh r4, [r6]\n" " str r4, [sp, #0x4]\n" " bl DecompressPicFromTable_2\n" - " ldr r1, ._873 + 80\n" + " ldr r1, ._873 + 80 @ gMonPaletteTable\n" " ldrh r0, [r6]\n" " lsl r0, r0, #0x3\n" " add r0, r0, r1\n" @@ -5068,7 +5068,7 @@ void debug_sub_8012688() " ldrh r0, [r6]\n" " mov r1, #0x1\n" " bl GetMonSpriteTemplate_803C56C\n" - " ldr r0, ._873 + 84\n" + " ldr r0, ._873 + 84 @ gUnknown_02024E8C\n" " ldrh r1, [r6]\n" " lsl r1, r1, #0x2\n" " add r1, r1, r8\n" @@ -5080,14 +5080,14 @@ void debug_sub_8012688() " add r4, r0, #0\n" " lsl r4, r4, #0x18\n" " lsr r4, r4, #0x18\n" - " ldr r3, ._873 + 88\n" + " ldr r3, ._873 + 88 @ gSprites\n" " lsl r1, r4, #0x4\n" " add r1, r1, r4\n" " lsl r1, r1, #0x2\n" " add r0, r3, #0\n" " add r0, r0, #0x1c\n" " add r0, r1, r0\n" - " ldr r2, ._873 + 92\n" + " ldr r2, ._873 + 92 @ nullsub_37\n" " str r2, [r0]\n" " add r1, r1, r3\n" " ldrb r2, [r1, #0x5]\n" @@ -5102,24 +5102,24 @@ void debug_sub_8012688() " lsl r2, r2, #0x5\n" " add r0, r2, #0\n" " strh r0, [r1]\n" - " ldr r0, ._873 + 96\n" + " ldr r0, ._873 + 96 @ debug_nullsub_45\n" " bl SetHBlankCallback\n" - " ldr r0, ._873 + 100\n" + " ldr r0, ._873 + 100 @ debug_sub_8011DD4\n" " bl SetVBlankCallback\n" " bl m4aMPlayAllStop\n" - " ldr r0, ._873 + 104\n" + " ldr r0, ._873 + 104 @ debug_sub_8012D10\n" " mov r1, #0x0\n" " bl CreateTask\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x18\n" - " ldr r2, ._873 + 108\n" + " ldr r2, ._873 + 108 @ gTasks\n" " lsl r1, r0, #0x2\n" " add r1, r1, r0\n" " lsl r1, r1, #0x3\n" " add r1, r1, r2\n" " strh r5, [r1, #0x8]\n" " strh r4, [r1, #0xa]\n" - " ldr r0, ._873 + 112\n" + " ldr r0, ._873 + 112 @ debug_sub_8012878\n" " bl SetMainCallback2\n" " add sp, sp, #0xc\n" " pop {r3}\n" @@ -5170,17 +5170,17 @@ void debug_sub_8012878() " push {lr}\n" " bl AnimateSprites\n" " bl BuildOamBuffer\n" - " ldr r0, ._876\n" + " ldr r0, ._876 @ gUnknown_03004210\n" " bl Text_UpdateWindowInBattle\n" " bl UpdatePaletteFade\n" " bl RunTasks\n" - " ldr r0, ._876 + 4\n" + " ldr r0, ._876 + 4 @ gMain\n" " ldrh r1, [r0, #0x2c]\n" " mov r0, #0x82\n" " lsl r0, r0, #0x1\n" " cmp r1, r0\n" " bne ._875 @cond_branch\n" - " ldr r0, ._876 + 8\n" + " ldr r0, ._876 + 8 @ debug_sub_80108B8\n" " bl SetMainCallback2\n" "._875:\n" " pop {r0}\n" @@ -5206,8 +5206,8 @@ void debug_sub_80128B4() " mov r0, #0x0\n" " mov r1, #0x9\n" " bl debug_sub_8010A7C\n" - " ldr r5, ._878\n" - " ldr r4, ._878 + 4\n" + " ldr r5, ._878 @ gUnknown_03004210\n" + " ldr r4, ._878 + 4 @ gBattleTextBuff1\n" " mov r0, #0x23\n" " mov r8, r0\n" " str r0, [sp]\n" @@ -5218,7 +5218,7 @@ void debug_sub_80128B4() " bl Text_InitWindow\n" " add r0, r5, #0\n" " bl Text_PrintWindow8002F44\n" - " ldr r6, ._878 + 8\n" + " ldr r6, ._878 + 8 @ gCurrentMove\n" " ldrh r1, [r6]\n" " add r0, r4, #0\n" " mov r2, #0x2\n" @@ -5231,7 +5231,7 @@ void debug_sub_80128B4() " ldrh r1, [r6]\n" " mov r0, #0xb\n" " mul r1, r1, r0\n" - " ldr r0, ._878 + 12\n" + " ldr r0, ._878 + 12 @ gSpeciesNames\n" " add r1, r1, r0\n" " add r0, r4, #0\n" " bl StringAppend\n" @@ -5277,8 +5277,8 @@ void debug_sub_8012938() " mov r0, #0x0\n" " mov r1, #0x7\n" " bl debug_sub_8010A7C\n" - " ldr r6, ._880\n" - " ldr r4, ._880 + 4\n" + " ldr r6, ._880 @ gUnknown_03004210\n" + " ldr r4, ._880 + 4 @ gBattleTextBuff1\n" " mov r0, #0x25\n" " mov r8, r0\n" " str r0, [sp]\n" @@ -5289,13 +5289,13 @@ void debug_sub_8012938() " bl Text_InitWindow\n" " add r0, r6, #0\n" " bl Text_PrintWindow8002F44\n" - " ldr r1, ._880 + 8\n" + " ldr r1, ._880 + 8 @ Str_821F7B8\n" " add r0, r4, #0\n" " bl StringCopy\n" " add r0, r4, #4\n" - " ldr r1, ._880 + 12\n" + " ldr r1, ._880 + 12 @ gUnknown_Debug_2023B62\n" " mov sl, r1\n" - " ldr r2, ._880 + 16\n" + " ldr r2, ._880 + 16 @ gCurrentMove\n" " mov r9, r2\n" " ldrh r1, [r2]\n" " sub r1, r1, #0x1\n" @@ -5313,8 +5313,8 @@ void debug_sub_8012938() " bl Text_InitWindow\n" " add r0, r6, #0\n" " bl Text_PrintWindow8002F44\n" - " ldr r2, ._880 + 20\n" - " ldr r1, ._880 + 24\n" + " ldr r2, ._880 + 20 @ gSprites\n" + " ldr r1, ._880 + 24 @ gTasks\n" " lsl r0, r5, #0x2\n" " add r0, r0, r5\n" " lsl r0, r0, #0x3\n" @@ -5365,12 +5365,12 @@ void debug_sub_80129F8() " add r5, r0, #0\n" " lsl r5, r5, #0x18\n" " lsr r5, r5, #0x18\n" - " ldr r6, ._882\n" + " ldr r6, ._882 @ gCurrentMove\n" " ldrh r2, [r6]\n" " lsl r0, r2, #0x3\n" - " ldr r1, ._882 + 4\n" + " ldr r1, ._882 + 4 @ gMonFrontPicTable\n" " add r0, r0, r1\n" - " ldr r1, ._882 + 8\n" + " ldr r1, ._882 + 8 @ gMonFrontPicCoords\n" " mov r8, r1\n" " lsl r2, r2, #0x2\n" " add r2, r2, r8\n" @@ -5378,13 +5378,13 @@ void debug_sub_80129F8() " ldrb r2, [r2, #0x1]\n" " mov r3, #0x80\n" " lsl r3, r3, #0x12\n" - " ldr r4, ._882 + 12\n" + " ldr r4, ._882 + 12 @ gUnknown_081FAF4C\n" " ldr r4, [r4, #0x4]\n" " str r4, [sp]\n" " ldrh r4, [r6]\n" " str r4, [sp, #0x4]\n" " bl DecompressPicFromTable_2\n" - " ldr r1, ._882 + 16\n" + " ldr r1, ._882 + 16 @ gMonPaletteTable\n" " ldrh r0, [r6]\n" " lsl r0, r0, #0x3\n" " add r0, r0, r1\n" @@ -5393,8 +5393,8 @@ void debug_sub_80129F8() " lsl r1, r1, #0x1\n" " mov r2, #0x20\n" " bl LoadCompressedPalette\n" - " ldr r4, ._882 + 20\n" - " ldr r0, ._882 + 24\n" + " ldr r4, ._882 + 20 @ gSprites\n" + " ldr r0, ._882 + 24 @ gTasks\n" " lsl r2, r5, #0x2\n" " add r2, r2, r5\n" " lsl r2, r2, #0x3\n" @@ -5417,7 +5417,7 @@ void debug_sub_80129F8() " add r1, r1, r0\n" " lsl r1, r1, #0x2\n" " add r1, r1, r4\n" - " ldr r3, ._882 + 28\n" + " ldr r3, ._882 + 28 @ gUnknown_Debug_2023B62\n" " ldrh r0, [r6]\n" " sub r0, r0, #0x1\n" " add r0, r0, r3\n" @@ -5462,8 +5462,8 @@ void debug_sub_8012AC0() " lsr r5, r0, #0x18\n" " lsl r1, r1, #0x18\n" " lsr r6, r1, #0x18\n" - " ldr r3, ._885\n" - " ldr r4, ._885 + 4\n" + " ldr r3, ._885 @ gCurrentMove\n" + " ldr r4, ._885 + 4 @ gBaseStats\n" " b ._884\n" "._886:\n" " .align 2, 0\n" @@ -5484,12 +5484,12 @@ void debug_sub_8012AC0() " lsl r0, r0, #0x10\n" " cmp r0, #0\n" " bne ._888 @cond_branch\n" - " ldr r1, ._891\n" + " ldr r1, ._891 @ 0x19b\n" " add r0, r1, #0\n" " strh r0, [r2]\n" "._888:\n" " ldrh r1, [r2]\n" - " ldr r0, ._891\n" + " ldr r0, ._891 @ 0x19b\n" " cmp r1, r0\n" " bne ._889 @cond_branch\n" " mov r0, #0x1\n" @@ -5526,11 +5526,11 @@ void debug_sub_8012B2C() asm( " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x11\n" - " ldr r1, ._893\n" + " ldr r1, ._893 @ 0x600c772\n" " add r2, r0, r1\n" " mov r1, #0x1\n" " strh r1, [r2]\n" - " ldr r1, ._893 + 4\n" + " ldr r1, ._893 + 4 @ 0x600c7b2\n" " add r0, r0, r1\n" " mov r1, #0x2\n" " strh r1, [r0]\n" @@ -5550,12 +5550,12 @@ void debug_sub_8012B4C() asm( " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x11\n" - " ldr r2, ._895\n" + " ldr r2, ._895 @ 0x600c772\n" " add r1, r0, r2\n" - " ldr r3, ._895 + 4\n" + " ldr r3, ._895 + 4 @ 0x1016\n" " add r2, r3, #0\n" " strh r2, [r1]\n" - " ldr r1, ._895 + 8\n" + " ldr r1, ._895 + 8 @ 0x600c7b2\n" " add r0, r0, r1\n" " strh r2, [r0]\n" " bx lr\n" @@ -5593,7 +5593,7 @@ void debug_sub_8012B70() " bl debug_sub_8012938\n" " add r0, r5, #0\n" " bl debug_sub_80129F8\n" - " ldr r1, ._899\n" + " ldr r1, ._899 @ gTasks\n" " lsl r0, r5, #0x2\n" " add r0, r0, r5\n" " lsl r0, r0, #0x3\n" @@ -5611,15 +5611,15 @@ void debug_sub_8012B70() " mov r2, #0x1d\n" " mov r3, #0x21\n" " bl sub_802BBD4\n" - " ldr r0, ._901\n" + " ldr r0, ._901 @ gTasks\n" " lsl r4, r5, #0x2\n" " add r4, r4, r5\n" " lsl r4, r4, #0x3\n" " add r4, r4, r0\n" " mov r0, #0x2\n" " strh r0, [r4, #0x8]\n" - " ldr r5, ._901 + 4\n" - " ldr r1, ._901 + 8\n" + " ldr r5, ._901 + 4 @ gUnknown_03004210\n" + " ldr r1, ._901 + 8 @ Str_821F7DA\n" " mov r2, #0xa4\n" " lsl r2, r2, #0x2\n" " mov r0, #0x1d\n" @@ -5663,8 +5663,8 @@ void debug_sub_8012C08() " mov r0, #0x0\n" " mov r1, #0x9\n" " bl debug_sub_8010A7C\n" - " ldr r7, ._905\n" - " ldr r5, ._905 + 4\n" + " ldr r7, ._905 @ gUnknown_03004210\n" + " ldr r5, ._905 + 4 @ gBattleTextBuff1\n" " mov r0, #0x23\n" " mov r8, r0\n" " str r0, [sp]\n" @@ -5696,14 +5696,14 @@ void debug_sub_8012C08() " bl sub_802BBD4\n" " cmp r4, #0\n" " beq ._903 @cond_branch\n" - " ldr r1, ._905 + 8\n" + " ldr r1, ._905 + 8 @ gTasks\n" " lsl r4, r6, #0x2\n" " add r0, r4, r6\n" " lsl r0, r0, #0x3\n" " add r0, r0, r1\n" " mov r1, #0x4\n" " strh r1, [r0, #0x8]\n" - " ldr r1, ._905 + 12\n" + " ldr r1, ._905 + 12 @ gUnknown_Debug_821F7F3\n" " mov r0, r8\n" " str r0, [sp]\n" " add r0, r7, #0\n" @@ -5719,14 +5719,14 @@ void debug_sub_8012C08() " .word gTasks\n" " .word gUnknown_Debug_821F7F3\n" "._903:\n" - " ldr r1, ._907\n" + " ldr r1, ._907 @ gTasks\n" " lsl r4, r6, #0x2\n" " add r0, r4, r6\n" " lsl r0, r0, #0x3\n" " add r0, r0, r1\n" " mov r1, #0x3\n" " strh r1, [r0, #0x8]\n" - " ldr r1, ._907 + 4\n" + " ldr r1, ._907 + 4 @ Str_821F7EA\n" " mov r0, r8\n" " str r0, [sp]\n" " add r0, r7, #0\n" @@ -5735,10 +5735,10 @@ void debug_sub_8012C08() " bl Text_InitWindow\n" "._904:\n" " add r5, r4, #0\n" - " ldr r4, ._907 + 8\n" + " ldr r4, ._907 + 8 @ gUnknown_03004210\n" " add r0, r4, #0\n" " bl Text_PrintWindow8002F44\n" - " ldr r1, ._907 + 12\n" + " ldr r1, ._907 + 12 @ BattleText_YesNo\n" " mov r2, #0xa4\n" " lsl r2, r2, #0x2\n" " mov r0, #0x1d\n" @@ -5748,7 +5748,7 @@ void debug_sub_8012C08() " bl Text_InitWindow\n" " add r0, r4, #0\n" " bl Text_PrintWindow8002F44\n" - " ldr r1, ._907\n" + " ldr r1, ._907 @ gTasks\n" " add r0, r5, r6\n" " lsl r0, r0, #0x3\n" " add r0, r0, r1\n" @@ -5781,7 +5781,7 @@ void debug_sub_8012D10() " add sp, sp, #0xfffffffc\n" " lsl r0, r0, #0x18\n" " lsr r5, r0, #0x18\n" - " ldr r1, ._911\n" + " ldr r1, ._911 @ gTasks\n" " lsl r0, r5, #0x2\n" " add r0, r0, r5\n" " lsl r0, r0, #0x3\n" @@ -5793,7 +5793,7 @@ void debug_sub_8012D10() " b ._1067\n" "._909:\n" " lsl r0, r0, #0x2\n" - " ldr r1, ._911 + 4\n" + " ldr r1, ._911 + 4 @ \n" " add r0, r0, r1\n" " ldr r0, [r0]\n" " mov pc, r0\n" @@ -5812,8 +5812,8 @@ void debug_sub_8012D10() " bl debug_sub_80128B4\n" " add r0, r5, #0\n" " bl debug_sub_8012938\n" - " ldr r4, ._920\n" - " ldr r1, ._920 + 4\n" + " ldr r4, ._920 @ gUnknown_03004210\n" + " ldr r1, ._920 + 4 @ Str_821F7BD\n" " mov r2, #0xc8\n" " lsl r2, r2, #0x1\n" " mov r0, #0x23\n" @@ -5823,7 +5823,7 @@ void debug_sub_8012D10() " bl Text_InitWindow\n" " add r0, r4, #0\n" " bl Text_PrintWindow8002F44\n" - " ldr r1, ._920 + 8\n" + " ldr r1, ._920 + 8 @ gTasks\n" " lsl r0, r5, #0x2\n" " add r0, r0, r5\n" " lsl r0, r0, #0x3\n" @@ -5840,7 +5840,7 @@ void debug_sub_8012D10() " .word Str_821F7BD\n" " .word gTasks\n" "._915:\n" - " ldr r2, ._924\n" + " ldr r2, ._924 @ gMain\n" " ldrh r1, [r2, #0x2e]\n" " mov r0, #0x40\n" " and r0, r0, r1\n" @@ -5848,7 +5848,7 @@ void debug_sub_8012D10() " beq ._922 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._924 + 4\n" + " ldr r0, ._924 + 4 @ gTasks\n" " lsl r4, r5, #0x2\n" " add r4, r4, r5\n" " lsl r4, r4, #0x3\n" @@ -5872,7 +5872,7 @@ void debug_sub_8012D10() " beq ._926 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._928\n" + " ldr r0, ._928 @ gTasks\n" " lsl r4, r5, #0x2\n" " add r4, r4, r5\n" " lsl r4, r4, #0x3\n" @@ -5893,7 +5893,7 @@ void debug_sub_8012D10() " beq ._930 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._932\n" + " ldr r0, ._932 @ gTasks\n" " lsl r4, r5, #0x2\n" " add r4, r4, r5\n" " lsl r4, r4, #0x3\n" @@ -5916,7 +5916,7 @@ void debug_sub_8012D10() " beq ._934 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._936\n" + " ldr r0, ._936 @ gTasks\n" " lsl r4, r5, #0x2\n" " add r4, r4, r5\n" " lsl r4, r4, #0x3\n" @@ -5948,7 +5948,7 @@ void debug_sub_8012D10() " beq ._938 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r1, ._943\n" + " ldr r1, ._943 @ gTasks\n" " lsl r0, r5, #0x2\n" " add r0, r0, r5\n" " lsl r0, r0, #0x3\n" @@ -5976,8 +5976,8 @@ void debug_sub_8012D10() "._946:\n" " b ._1067\n" "._941:\n" - " ldr r1, ._952\n" - " ldr r0, ._952 + 4\n" + " ldr r1, ._952 @ gUnknown_Debug_2023B62\n" + " ldr r0, ._952 + 4 @ gCurrentMove\n" " ldrh r0, [r0]\n" " sub r0, r0, #0x1\n" " add r1, r0, r1\n" @@ -5998,7 +5998,7 @@ void debug_sub_8012D10() " mov r0, #0x1\n" " b ._997\n" "._945:\n" - " ldr r1, ._957\n" + " ldr r1, ._957 @ gCurrentMove\n" " ldrh r2, [r1]\n" " mov r0, #0xcd\n" " lsl r0, r0, #0x1\n" @@ -6022,7 +6022,7 @@ void debug_sub_8012D10() " beq ._960 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r1, ._966\n" + " ldr r1, ._966 @ gTasks\n" " lsl r0, r5, #0x2\n" " add r0, r0, r5\n" " lsl r0, r0, #0x3\n" @@ -6047,8 +6047,8 @@ void debug_sub_8012D10() " beq ._968 @cond_branch\n" " b ._990\n" "._964:\n" - " ldr r1, ._973\n" - " ldr r0, ._973 + 4\n" + " ldr r1, ._973 @ gUnknown_Debug_2023B62\n" + " ldr r0, ._973 + 4 @ gCurrentMove\n" " ldrh r0, [r0]\n" " sub r0, r0, #0x1\n" " add r1, r0, r1\n" @@ -6066,7 +6066,7 @@ void debug_sub_8012D10() " .word gUnknown_Debug_2023B62\n" " .word gCurrentMove\n" "._968:\n" - " ldr r1, ._977\n" + " ldr r1, ._977 @ gCurrentMove\n" " ldrh r0, [r1]\n" " cmp r0, #0x1\n" " bls ._975 @cond_branch\n" @@ -6077,7 +6077,7 @@ void debug_sub_8012D10() "._977:\n" " .word gCurrentMove\n" "._975:\n" - " ldr r2, ._980\n" + " ldr r2, ._980 @ 0x19b\n" " add r0, r2, #0\n" " b ._979\n" "._981:\n" @@ -6092,7 +6092,7 @@ void debug_sub_8012D10() " beq ._982 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r1, ._987\n" + " ldr r1, ._987 @ gTasks\n" " lsl r0, r5, #0x2\n" " add r0, r0, r5\n" " lsl r0, r0, #0x3\n" @@ -6115,8 +6115,8 @@ void debug_sub_8012D10() " beq ._989 @cond_branch\n" " b ._990\n" "._985:\n" - " ldr r3, ._995\n" - " ldr r2, ._995 + 4\n" + " ldr r3, ._995 @ gUnknown_Debug_2023B62\n" + " ldr r2, ._995 + 4 @ gCurrentMove\n" " ldrh r0, [r2]\n" " sub r0, r0, #0x1\n" " add r1, r0, r3\n" @@ -6145,11 +6145,11 @@ void debug_sub_8012D10() " mov r0, #0x1\n" " b ._997\n" "._989:\n" - " ldr r3, ._1000\n" + " ldr r3, ._1000 @ gCurrentMove\n" " ldrh r2, [r3]\n" " add r1, r2, #0\n" " add r1, r1, #0xa\n" - " ldr r0, ._1000 + 4\n" + " ldr r0, ._1000 + 4 @ 0x19b\n" " cmp r1, r0\n" " bgt ._998 @cond_branch\n" " strh r1, [r3]\n" @@ -6160,7 +6160,7 @@ void debug_sub_8012D10() " .word gCurrentMove\n" " .word 0x19b\n" "._998:\n" - " ldr r1, ._1003\n" + " ldr r1, ._1003 @ 0xfffffe70\n" " add r0, r2, r1\n" " strh r0, [r3]\n" " b ._1025\n" @@ -6178,7 +6178,7 @@ void debug_sub_8012D10() "._1005:\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r1, ._1011\n" + " ldr r1, ._1011 @ gTasks\n" " lsl r0, r5, #0x2\n" " add r0, r0, r5\n" " lsl r0, r0, #0x3\n" @@ -6203,8 +6203,8 @@ void debug_sub_8012D10() " beq ._1014 @cond_branch\n" " b ._1067\n" "._1009:\n" - " ldr r1, ._1020\n" - " ldr r0, ._1020 + 4\n" + " ldr r1, ._1020 @ gUnknown_Debug_2023B62\n" + " ldr r0, ._1020 + 4 @ gCurrentMove\n" " ldrh r0, [r0]\n" " sub r0, r0, #0x1\n" " add r2, r0, r1\n" @@ -6238,7 +6238,7 @@ void debug_sub_8012D10() " bl debug_sub_8012AC0\n" " b ._1067\n" "._1013:\n" - " ldr r2, ._1026\n" + " ldr r2, ._1026 @ gCurrentMove\n" " ldrh r0, [r2]\n" " add r1, r0, #0\n" " sub r1, r1, #0xa\n" @@ -6268,7 +6268,7 @@ void debug_sub_8012D10() " bl debug_sub_8012B70\n" " b ._1067\n" "._916:\n" - " ldr r0, ._1032\n" + " ldr r0, ._1032 @ gMain\n" " ldrh r1, [r0, #0x2e]\n" " mov r0, #0x40\n" " and r0, r0, r1\n" @@ -6276,7 +6276,7 @@ void debug_sub_8012D10() " beq ._1030 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._1032 + 4\n" + " ldr r0, ._1032 + 4 @ gTasks\n" " lsl r4, r5, #0x2\n" " add r4, r4, r5\n" " lsl r4, r4, #0x3\n" @@ -6301,7 +6301,7 @@ void debug_sub_8012D10() " beq ._1035 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._1037\n" + " ldr r0, ._1037 @ gTasks\n" " lsl r1, r5, #0x2\n" " add r1, r1, r5\n" " lsl r1, r1, #0x3\n" @@ -6325,7 +6325,7 @@ void debug_sub_8012D10() " bl PlaySE\n" " b ._1063\n" "._917:\n" - " ldr r0, ._1044\n" + " ldr r0, ._1044 @ gMain\n" " ldrh r1, [r0, #0x2e]\n" " mov r0, #0x40\n" " and r0, r0, r1\n" @@ -6333,7 +6333,7 @@ void debug_sub_8012D10() " beq ._1042 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._1044 + 4\n" + " ldr r0, ._1044 + 4 @ gTasks\n" " lsl r4, r5, #0x2\n" " add r4, r4, r5\n" " lsl r4, r4, #0x3\n" @@ -6358,7 +6358,7 @@ void debug_sub_8012D10() " beq ._1047 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._1050\n" + " ldr r0, ._1050 @ gTasks\n" " lsl r1, r5, #0x2\n" " add r1, r1, r5\n" " lsl r1, r1, #0x3\n" @@ -6367,8 +6367,8 @@ void debug_sub_8012D10() " ldsh r0, [r1, r2]\n" " cmp r0, #0\n" " bne ._1063 @cond_branch\n" - " ldr r1, ._1050 + 4\n" - " ldr r2, ._1050 + 8\n" + " ldr r1, ._1050 + 4 @ gUnknown_Debug_2023B62\n" + " ldr r2, ._1050 + 8 @ 0x19b\n" " mov r0, #0x1f\n" " bl debug_sub_80132C8\n" " b ._1063\n" @@ -6387,7 +6387,7 @@ void debug_sub_8012D10() " bl PlaySE\n" " b ._1063\n" "._918:\n" - " ldr r0, ._1056\n" + " ldr r0, ._1056 @ gMain\n" " ldrh r1, [r0, #0x2e]\n" " mov r0, #0x40\n" " and r0, r0, r1\n" @@ -6395,7 +6395,7 @@ void debug_sub_8012D10() " beq ._1054 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._1056 + 4\n" + " ldr r0, ._1056 + 4 @ gTasks\n" " lsl r4, r5, #0x2\n" " add r4, r4, r5\n" " lsl r4, r4, #0x3\n" @@ -6417,7 +6417,7 @@ void debug_sub_8012D10() "._1046:\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._1060\n" + " ldr r0, ._1060 @ gTasks\n" " lsl r4, r5, #0x2\n" " add r4, r4, r5\n" " lsl r4, r4, #0x3\n" @@ -6440,7 +6440,7 @@ void debug_sub_8012D10() " beq ._1062 @cond_branch\n" " mov r0, #0x5\n" " bl PlaySE\n" - " ldr r0, ._1065\n" + " ldr r0, ._1065 @ gTasks\n" " lsl r1, r5, #0x2\n" " add r1, r1, r5\n" " lsl r1, r1, #0x3\n" @@ -6449,8 +6449,8 @@ void debug_sub_8012D10() " ldsh r0, [r1, r2]\n" " cmp r0, #0\n" " bne ._1063 @cond_branch\n" - " ldr r1, ._1065 + 4\n" - " ldr r2, ._1065 + 8\n" + " ldr r1, ._1065 + 4 @ gUnknown_Debug_2023B62\n" + " ldr r2, ._1065 + 8 @ 0x19b\n" " mov r0, #0x1f\n" " bl debug_sub_8013294\n" "._1063:\n" @@ -6810,7 +6810,7 @@ void debug_sub_80138CC() { asm( " push {lr}\n" - " ldr r0, ._1167\n" + " ldr r0, ._1167 @ gActiveBank\n" " ldrb r0, [r0]\n" " bl GetBankSide\n" " lsl r0, r0, #0x18\n" @@ -6818,8 +6818,8 @@ void debug_sub_80138CC() " beq ._1163 @cond_branch\n" " b ._1186\n" "._1163:\n" - " ldr r1, ._1167 + 4\n" - " ldr r2, ._1167 + 8\n" + " ldr r1, ._1167 + 4 @ gSharedMem\n" + " ldr r2, ._1167 + 8 @ 0x160fd\n" " add r0, r1, r2\n" " ldrb r0, [r0]\n" " add r2, r1, #0\n" @@ -6828,7 +6828,7 @@ void debug_sub_80138CC() " b ._1186\n" "._1165:\n" " lsl r0, r0, #0x2\n" - " ldr r1, ._1167 + 12\n" + " ldr r1, ._1167 + 12 @ \n" " add r0, r0, r1\n" " ldr r0, [r0]\n" " mov pc, r0\n" @@ -6846,16 +6846,16 @@ void debug_sub_80138CC() " .word ._1173\n" " .word ._1174\n" "._1170:\n" - " ldr r1, ._1177\n" - " ldr r0, ._1177 + 4\n" + " ldr r1, ._1177 @ gBattleBankFunc\n" + " ldr r0, ._1177 + 4 @ gActiveBank\n" " ldrb r0, [r0]\n" " lsl r0, r0, #0x2\n" " add r0, r0, r1\n" " ldr r1, [r0]\n" - " ldr r0, ._1177 + 8\n" + " ldr r0, ._1177 + 8 @ sub_802C098\n" " cmp r1, r0\n" " bne ._1186 @cond_branch\n" - " ldr r0, ._1177 + 12\n" + " ldr r0, ._1177 + 12 @ 0x160fd\n" " add r1, r2, r0\n" " ldrb r0, [r1]\n" " add r0, r0, #0x1\n" @@ -6868,16 +6868,16 @@ void debug_sub_80138CC() " .word sub_802C098+1\n" " .word 0x160fd\n" "._1171:\n" - " ldr r1, ._1180\n" + " ldr r1, ._1180 @ gMain\n" " mov r0, #0x1\n" " strh r0, [r1, #0x2c]\n" " strh r0, [r1, #0x2e]\n" - " ldr r0, ._1180 + 4\n" + " ldr r0, ._1180 + 4 @ 0x160fd\n" " add r1, r2, r0\n" " ldrb r0, [r1]\n" " add r0, r0, #0x1\n" " strb r0, [r1]\n" - " ldr r0, ._1180 + 8\n" + " ldr r0, ._1180 + 8 @ 0x160fe\n" " add r1, r2, r0\n" " mov r0, #0x80\n" " b ._1187\n" @@ -6888,7 +6888,7 @@ void debug_sub_80138CC() " .word 0x160fd\n" " .word 0x160fe\n" "._1172:\n" - " ldr r0, ._1184\n" + " ldr r0, ._1184 @ 0x160fe\n" " add r3, r2, r0\n" " ldrb r0, [r3]\n" " sub r0, r0, #0x1\n" @@ -6896,11 +6896,11 @@ void debug_sub_80138CC() " lsl r0, r0, #0x18\n" " cmp r0, #0\n" " bne ._1186 @cond_branch\n" - " ldr r1, ._1184 + 4\n" + " ldr r1, ._1184 + 4 @ gMain\n" " mov r0, #0x1\n" " strh r0, [r1, #0x2c]\n" " strh r0, [r1, #0x2e]\n" - " ldr r0, ._1184 + 8\n" + " ldr r0, ._1184 + 8 @ 0x160fd\n" " add r1, r2, r0\n" " ldrb r0, [r1]\n" " add r0, r0, #0x1\n" @@ -6915,7 +6915,7 @@ void debug_sub_80138CC() " .word gMain\n" " .word 0x160fd\n" "._1173:\n" - " ldr r0, ._1188\n" + " ldr r0, ._1188 @ 0x160fe\n" " add r1, r2, r0\n" " ldrb r0, [r1]\n" " sub r0, r0, #0x1\n" @@ -6923,11 +6923,11 @@ void debug_sub_80138CC() " lsl r0, r0, #0x18\n" " cmp r0, #0\n" " bne ._1186 @cond_branch\n" - " ldr r1, ._1188 + 4\n" + " ldr r1, ._1188 + 4 @ gMain\n" " mov r0, #0x1\n" " strh r0, [r1, #0x2c]\n" " strh r0, [r1, #0x2e]\n" - " ldr r0, ._1188 + 8\n" + " ldr r0, ._1188 + 8 @ 0x160fd\n" " add r1, r2, r0\n" " ldrb r0, [r1]\n" " add r0, r0, #0x1\n" @@ -6939,7 +6939,7 @@ void debug_sub_80138CC() " .word gMain\n" " .word 0x160fd\n" "._1174:\n" - " ldr r0, ._1190\n" + " ldr r0, ._1190 @ 0x160fd\n" " add r1, r2, r0\n" " mov r0, #0x0\n" "._1187:\n" @@ -6960,7 +6960,7 @@ void debug_sub_80139E4() { asm( " push {r4, r5, lr}\n" - " ldr r0, ._1198\n" + " ldr r0, ._1198 @ gUnknown_02023A14_50\n" " ldrb r1, [r0]\n" " mov r0, #0x80\n" " and r0, r0, r1\n" @@ -6968,10 +6968,10 @@ void debug_sub_80139E4() " lsr r4, r0, #0x18\n" " cmp r4, #0\n" " beq ._1192 @cond_branch\n" - " ldr r2, ._1198 + 4\n" + " ldr r2, ._1198 + 4 @ gActiveBank\n" " mov r0, #0x0\n" " strb r0, [r2]\n" - " ldr r1, ._1198 + 8\n" + " ldr r1, ._1198 + 8 @ gNoOfAllBanks\n" " ldrb r0, [r1]\n" " cmp r0, #0\n" " beq ._1193 @cond_branch\n" @@ -6988,17 +6988,17 @@ void debug_sub_80139E4() " cmp r0, r1\n" " bcc ._1194 @cond_branch\n" "._1193:\n" - " ldr r0, ._1198 + 12\n" + " ldr r0, ._1198 + 12 @ gBattleMainFunc\n" " ldr r0, [r0]\n" " bl _call_via_r0\n" - " ldr r1, ._1198 + 4\n" + " ldr r1, ._1198 + 4 @ gActiveBank\n" " mov r0, #0x0\n" " strb r0, [r1]\n" - " ldr r0, ._1198 + 8\n" + " ldr r0, ._1198 + 8 @ gNoOfAllBanks\n" " ldrb r0, [r0]\n" " cmp r0, #0\n" " beq ._1200 @cond_branch\n" - " ldr r5, ._1198 + 16\n" + " ldr r5, ._1198 + 16 @ gBattleBankFunc\n" " add r4, r1, #0\n" "._1196:\n" " ldrb r0, [r4]\n" @@ -7009,7 +7009,7 @@ void debug_sub_80139E4() " ldrb r0, [r4]\n" " add r0, r0, #0x1\n" " strb r0, [r4]\n" - " ldr r1, ._1198 + 8\n" + " ldr r1, ._1198 + 8 @ gNoOfAllBanks\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x18\n" " ldrb r1, [r1]\n" @@ -7025,16 +7025,16 @@ void debug_sub_80139E4() " .word gBattleMainFunc\n" " .word gBattleBankFunc\n" "._1192:\n" - " ldr r0, ._1202\n" + " ldr r0, ._1202 @ gBattleMainFunc\n" " ldr r0, [r0]\n" " bl _call_via_r0\n" - " ldr r1, ._1202 + 4\n" + " ldr r1, ._1202 + 4 @ gActiveBank\n" " strb r4, [r1]\n" - " ldr r0, ._1202 + 8\n" + " ldr r0, ._1202 + 8 @ gNoOfAllBanks\n" " ldrb r0, [r0]\n" " cmp r4, r0\n" " bcs ._1200 @cond_branch\n" - " ldr r5, ._1202 + 12\n" + " ldr r5, ._1202 + 12 @ gBattleBankFunc\n" " add r4, r1, #0\n" "._1201:\n" " ldrb r0, [r4]\n" @@ -7045,7 +7045,7 @@ void debug_sub_80139E4() " ldrb r0, [r4]\n" " add r0, r0, #0x1\n" " strb r0, [r4]\n" - " ldr r1, ._1202 + 8\n" + " ldr r1, ._1202 + 8 @ gNoOfAllBanks\n" " lsl r0, r0, #0x18\n" " lsr r0, r0, #0x18\n" " ldrb r1, [r1]\n" @@ -7080,20 +7080,20 @@ void sub_8010874() " bl SpecialStatusesClear\n" " mov r2, #0x0\n" " mov r3, #0x0\n" - " ldr r0, ._1215\n" + " ldr r0, ._1215 @ gUnknown_02024C4C\n" " mov sl, r0\n" - " ldr r1, ._1215 + 4\n" + " ldr r1, ._1215 + 4 @ gLastHitByType\n" " mov r9, r1\n" - " ldr r4, ._1215 + 8\n" + " ldr r4, ._1215 + 8 @ gLastLandedMoves\n" " mov r8, r4\n" - " ldr r0, ._1215 + 12\n" + " ldr r0, ._1215 + 12 @ gLastUsedMove\n" " mov ip, r0\n" - " ldr r4, ._1215 + 16\n" + " ldr r4, ._1215 + 16 @ gDisableStructs\n" " mov r5, #0x0\n" - " ldr r7, ._1215 + 20\n" - " ldr r6, ._1215 + 24\n" + " ldr r7, ._1215 + 20 @ gUnknown_02024C2C\n" + " ldr r6, ._1215 + 24 @ gLockedMoves\n" "._1205:\n" - " ldr r0, ._1215 + 28\n" + " ldr r0, ._1215 + 28 @ gStatuses3\n" " add r0, r5, r0\n" " str r3, [r0]\n" " mov r1, #0x0\n" @@ -7105,7 +7105,7 @@ void sub_8010874() " bls ._1204 @cond_branch\n" " mov r0, #0x2\n" " strb r0, [r4, #0x16]\n" - " ldr r1, ._1215 + 32\n" + " ldr r1, ._1215 + 32 @ gUnknown_02024C70\n" " add r0, r2, r1\n" " strb r3, [r0]\n" " mov r0, ip\n" @@ -7116,13 +7116,13 @@ void sub_8010874() " strh r3, [r0]\n" " mov r1, sl\n" " strh r3, [r1]\n" - " ldr r0, ._1215 + 36\n" + " ldr r0, ._1215 + 36 @ gUnknown_02024C5C\n" " add r1, r2, r0\n" " mov r0, #0xff\n" " strb r0, [r1]\n" " strh r3, [r6]\n" " strh r3, [r7]\n" - " ldr r1, ._1215 + 40\n" + " ldr r1, ._1215 + 40 @ gSharedMem\n" " add r0, r5, r1\n" " str r3, [r0]\n" " mov r0, #0x2\n" @@ -7138,8 +7138,8 @@ void sub_8010874() " cmp r2, #0x3\n" " ble ._1205 @cond_branch\n" " mov r5, #0x0\n" - " ldr r3, ._1215 + 44\n" - " ldr r4, ._1215 + 48\n" + " ldr r3, ._1215 + 44 @ gSideTimers\n" + " ldr r4, ._1215 + 48 @ gSideAffecting\n" " mov r2, #0x1\n" "._1207:\n" " strh r5, [r4]\n" @@ -7156,13 +7156,13 @@ void sub_8010874() " cmp r2, #0\n" " bge ._1207 @cond_branch\n" " mov r1, #0x0\n" - " ldr r2, ._1215 + 52\n" + " ldr r2, ._1215 + 52 @ gBankAttacker\n" " strb r1, [r2]\n" - " ldr r3, ._1215 + 56\n" + " ldr r3, ._1215 + 56 @ gBankTarget\n" " strb r1, [r3]\n" - " ldr r4, ._1215 + 60\n" + " ldr r4, ._1215 + 60 @ gBattleWeather\n" " strh r1, [r4]\n" - " ldr r1, ._1215 + 64\n" + " ldr r1, ._1215 + 64 @ gWishFutureKnock\n" " mov r2, #0x0\n" " mov r3, #0x0\n" "._1208:\n" @@ -7172,50 +7172,50 @@ void sub_8010874() " cmp r2, #0x2b\n" " bls ._1208 @cond_branch\n" " mov r0, #0x0\n" - " ldr r1, ._1215 + 68\n" + " ldr r1, ._1215 + 68 @ gHitMarker\n" " str r0, [r1]\n" - " ldr r2, ._1215 + 72\n" + " ldr r2, ._1215 + 72 @ gBattleTypeFlags\n" " ldrh r1, [r2]\n" " mov r0, #0x2\n" " and r0, r0, r1\n" " cmp r0, #0\n" " bne ._1210 @cond_branch\n" - " ldr r3, ._1215 + 76\n" + " ldr r3, ._1215 + 76 @ gSaveBlock2\n" " ldrb r1, [r3, #0x15]\n" " mov r0, #0x4\n" " and r0, r0, r1\n" " cmp r0, #0\n" " beq ._1210 @cond_branch\n" " mov r0, #0x80\n" - " ldr r4, ._1215 + 68\n" + " ldr r4, ._1215 + 68 @ gHitMarker\n" " str r0, [r4]\n" "._1210:\n" - " ldr r1, ._1215 + 76\n" + " ldr r1, ._1215 + 76 @ gSaveBlock2\n" " ldrb r0, [r1, #0x15]\n" " lsl r0, r0, #0x1e\n" " lsr r0, r0, #0x1f\n" - " ldr r3, ._1215 + 80\n" - " ldr r4, ._1215 + 84\n" + " ldr r3, ._1215 + 80 @ gSharedMem\n" + " ldr r4, ._1215 + 84 @ 0x16084\n" " add r2, r3, r4\n" " mov r1, #0x0\n" " strb r0, [r2]\n" - " ldr r0, ._1215 + 88\n" + " ldr r0, ._1215 + 88 @ gMultiHitCounter\n" " strb r1, [r0]\n" - " ldr r2, ._1215 + 92\n" + " ldr r2, ._1215 + 92 @ gBattleOutcome\n" " strb r1, [r2]\n" - " ldr r3, ._1215 + 96\n" + " ldr r3, ._1215 + 96 @ gBattleExecBuffer\n" " str r1, [r3]\n" " mov r2, #0x0\n" - " ldr r4, ._1215 + 100\n" + " ldr r4, ._1215 + 100@ gPaydayMoney\n" " strh r1, [r4]\n" - " ldr r1, ._1215 + 80\n" - " ldr r3, ._1215 + 104\n" + " ldr r1, ._1215 + 80 @ gSharedMem\n" + " ldr r3, ._1215 + 104@ 0x17130\n" " add r0, r1, r3\n" " strb r2, [r0]\n" - " ldr r4, ._1215 + 108\n" + " ldr r4, ._1215 + 108@ 0x17160\n" " add r0, r1, r4\n" " strb r2, [r0]\n" - " ldr r1, ._1215 + 112\n" + " ldr r1, ._1215 + 112@ gBattleCommunication\n" " mov r2, #0x0\n" " add r0, r1, #7\n" "._1211:\n" @@ -7224,37 +7224,37 @@ void sub_8010874() " cmp r0, r1\n" " bge ._1211 @cond_branch\n" " mov r5, #0x0\n" - " ldr r0, ._1215 + 116\n" + " ldr r0, ._1215 + 116@ gPauseCounterBattle\n" " strh r5, [r0]\n" " mov r0, #0x0\n" - " ldr r1, ._1215 + 120\n" + " ldr r1, ._1215 + 120@ gBattleMoveDamage\n" " str r0, [r1]\n" - " ldr r2, ._1215 + 124\n" + " ldr r2, ._1215 + 124@ gUnknown_02024DE8\n" " strh r0, [r2]\n" - " ldr r4, ._1215 + 80\n" - " ldr r3, ._1215 + 128\n" + " ldr r4, ._1215 + 80 @ gSharedMem\n" + " ldr r3, ._1215 + 128@ 0x16002\n" " add r0, r4, r3\n" " strb r5, [r0]\n" - " ldr r1, ._1215 + 132\n" + " ldr r1, ._1215 + 132@ 0x160a1\n" " add r0, r4, r1\n" " strb r5, [r0]\n" - " ldr r2, ._1215 + 136\n" + " ldr r2, ._1215 + 136@ gLeveledUpInBattle\n" " strb r5, [r2]\n" - " ldr r3, ._1215 + 140\n" + " ldr r3, ._1215 + 140@ gAbsentBankFlags\n" " strb r5, [r3]\n" " sub r1, r1, #0x29\n" " add r0, r4, r1\n" " strb r5, [r0]\n" - " ldr r2, ._1215 + 144\n" + " ldr r2, ._1215 + 144@ 0x16086\n" " add r0, r4, r2\n" " strb r5, [r0]\n" - " ldr r3, ._1215 + 148\n" + " ldr r3, ._1215 + 148@ 0x16087\n" " add r0, r4, r3\n" " strb r5, [r0]\n" - " ldr r0, ._1215 + 152\n" + " ldr r0, ._1215 + 152@ gEnemyParty\n" " mov r1, #0xb\n" " bl GetMonData\n" - " ldr r2, ._1215 + 156\n" + " ldr r2, ._1215 + 156@ gBaseStats\n" " lsl r1, r0, #0x3\n" " sub r1, r1, r0\n" " lsl r1, r1, #0x2\n" @@ -7262,16 +7262,16 @@ void sub_8010874() " ldrb r1, [r1, #0x8]\n" " mov r0, #0x64\n" " mul r0, r0, r1\n" - " ldr r1, ._1215 + 160\n" + " ldr r1, ._1215 + 160@ 0x4fb\n" " bl __divsi3\n" - " ldr r2, ._1215 + 164\n" + " ldr r2, ._1215 + 164@ 0x16089\n" " add r1, r4, r2\n" " strb r0, [r1]\n" - " ldr r3, ._1215 + 168\n" + " ldr r3, ._1215 + 168@ 0x16088\n" " add r1, r4, r3\n" " mov r0, #0x3\n" " strb r0, [r1]\n" - " ldr r1, ._1215 + 172\n" + " ldr r1, ._1215 + 172@ 0x1601b\n" " add r0, r4, r1\n" " strb r5, [r0]\n" " sub r2, r2, #0x33\n" @@ -7281,7 +7281,7 @@ void sub_8010874() " mov r2, #0x0\n" " mov r1, #0x0\n" "._1212:\n" - " ldr r3, ._1215 + 176\n" + " ldr r3, ._1215 + 176@ 0x160ac\n" " add r0, r2, r3\n" " add r0, r0, r4\n" " strb r1, [r0]\n" @@ -7308,8 +7308,8 @@ void sub_8010874() " add r2, r2, #0x1\n" " cmp r2, #0x7\n" " ble ._1212 @cond_branch\n" - " ldr r4, ._1215 + 80\n" - " ldr r1, ._1215 + 180\n" + " ldr r4, ._1215 + 80 @ gSharedMem\n" + " ldr r1, ._1215 + 180@ 0x160c8\n" " add r0, r4, r1\n" " mov r2, #0x0\n" " mov r1, #0x6\n" @@ -7317,10 +7317,10 @@ void sub_8010874() " sub r3, r3, #0x3f\n" " add r0, r4, r3\n" " strb r1, [r0]\n" - " ldr r1, ._1215 + 184\n" + " ldr r1, ._1215 + 184@ 0x16113\n" " add r0, r4, r1\n" " strb r2, [r0]\n" - " ldr r3, ._1215 + 188\n" + " ldr r3, ._1215 + 188@ gBattleResults\n" " mov r1, #0x0\n" " mov r2, #0xa\n" " add r0, r3, #0\n" @@ -7367,12 +7367,12 @@ void sub_8010874() " add r2, r2, #0x1\n" " cmp r2, #0x9\n" " ble ._1214 @cond_branch\n" - " ldr r2, ._1215 + 80\n" - " ldr r3, ._1215 + 192\n" + " ldr r2, ._1215 + 80 @ gSharedMem\n" + " ldr r3, ._1215 + 192@ 0x1609e\n" " add r0, r2, r3\n" " mov r1, #0x0\n" " strb r1, [r0]\n" - " ldr r4, ._1215 + 196\n" + " ldr r4, ._1215 + 196@ 0x1609f\n" " add r0, r2, r4\n" " strb r1, [r0]\n" " pop {r3, r4, r5}\n" diff --git a/src/battle/battle_4.c b/src/battle/battle_4.c index 9fe1f6cb0..8b81139fb 100644 --- a/src/battle/battle_4.c +++ b/src/battle/battle_4.c @@ -5024,8 +5024,8 @@ static void atk15_seteffectwithchance(void) { asm("\ push {r4, lr}\n\ - ldr r2, ._1037\n\ - ldr r0, ._1037 + 4\n\ + ldr r2, ._1037 @ gBattleMons\n\ + ldr r0, ._1037 + 4 @ gBankAttacker\n\ ldrb r1, [r0]\n\ mov r0, #0x58\n\ mul r0, r0, r1\n\ @@ -5034,8 +5034,8 @@ static void atk15_seteffectwithchance(void) ldrb r0, [r0]\n\ cmp r0, #0x20\n\ bne ._1035 @cond_branch\n\ - ldr r2, ._1037 + 8\n\ - ldr r0, ._1037 + 12\n\ + ldr r2, ._1037 + 8 @ gBattleMoves\n\ + ldr r0, ._1037 + 12 @ gCurrentMove\n\ ldrh r1, [r0]\n\ lsl r0, r1, #0x1\n\ add r0, r0, r1\n\ @@ -5052,8 +5052,8 @@ static void atk15_seteffectwithchance(void) .word gBattleMoves\n\ .word gCurrentMove\n\ ._1035:\n\ - ldr r2, ._1045\n\ - ldr r0, ._1045 + 4\n\ + ldr r2, ._1045 @ gBattleMoves\n\ + ldr r0, ._1045 + 4 @ gCurrentMove\n\ ldrh r1, [r0]\n\ lsl r0, r1, #0x1\n\ add r0, r0, r1\n\ @@ -5061,11 +5061,11 @@ static void atk15_seteffectwithchance(void) add r0, r0, r2\n\ ldrb r4, [r0, #0x5]\n\ ._1036:\n\ - ldr r0, ._1045 + 8\n\ + ldr r0, ._1045 + 8 @ gUnknown_02023A14_50\n\ ldrb r1, [r0]\n\ mov r0, #0x4\n\ and r0, r0, r1\n\ - ldr r2, ._1045 + 12\n\ + ldr r2, ._1045 + 12 @ gBattleCommunication\n\ cmp r0, #0\n\ beq ._1039 @cond_branch\n\ ldrb r1, [r2, #0x3]\n\ @@ -5073,7 +5073,7 @@ static void atk15_seteffectwithchance(void) and r0, r0, r1\n\ cmp r0, #0\n\ bne ._1040 @cond_branch\n\ - ldr r0, ._1045 + 16\n\ + ldr r0, ._1045 + 16 @ gBattleMoveFlags\n\ ldrb r1, [r0]\n\ mov r0, #0x29\n\ and r0, r0, r1\n\ @@ -5086,13 +5086,13 @@ static void atk15_seteffectwithchance(void) cmp r0, #0\n\ beq ._1043 @cond_branch\n\ ._1040:\n\ - ldr r0, ._1045 + 16\n\ + ldr r0, ._1045 + 16 @ gBattleMoveFlags\n\ ldrb r1, [r0]\n\ mov r0, #0x29\n\ and r0, r0, r1\n\ cmp r0, #0\n\ bne ._1043 @cond_branch\n\ - ldr r2, ._1045 + 12\n\ + ldr r2, ._1045 + 12 @ gBattleCommunication\n\ ldrb r1, [r2, #0x3]\n\ mov r0, #0x7f\n\ and r0, r0, r1\n\ @@ -5116,11 +5116,11 @@ static void atk15_seteffectwithchance(void) lsr r0, r0, #0x10\n\ cmp r0, r4\n\ bhi ._1049 @cond_branch\n\ - ldr r0, ._1052\n\ + ldr r0, ._1052 @ gBattleCommunication\n\ ldrb r0, [r0, #0x3]\n\ cmp r0, #0\n\ beq ._1049 @cond_branch\n\ - ldr r0, ._1052 + 4\n\ + ldr r0, ._1052 + 4 @ gBattleMoveFlags\n\ ldrb r1, [r0]\n\ mov r0, #0x29\n\ and r0, r0, r1\n\ @@ -5144,16 +5144,16 @@ static void atk15_seteffectwithchance(void) bl SetMoveEffect\n\ b ._1054\n\ ._1049:\n\ - ldr r1, ._1055\n\ + ldr r1, ._1055 @ gBattlescriptCurrInstr\n\ ldr r0, [r1]\n\ add r0, r0, #0x1\n\ str r0, [r1]\n\ ._1054:\n\ - ldr r0, ._1055 + 4\n\ + ldr r0, ._1055 + 4 @ gBattleCommunication\n\ mov r1, #0x0\n\ strb r1, [r0, #0x3]\n\ - ldr r0, ._1055 + 8\n\ - ldr r2, ._1055 + 12\n\ + ldr r0, ._1055 + 8 @ \n\ + ldr r2, ._1055 + 12 @ \n\ add r0, r0, r2\n\ strb r1, [r0]\n\ pop {r4}\n\ @@ -12778,12 +12778,12 @@ static void atk9E_metronome(void) push {r4, r5, r6, r7, lr}\n\ mov r7, r8\n\ push {r7}\n\ - ldr r6, ._3076\n\ + ldr r6, ._3076 @ gBankAttacker\n\ ldrb r2, [r6]\n\ lsl r1, r2, #0x1\n\ - ldr r0, ._3076 + 4\n\ + ldr r0, ._3076 + 4 @ \n\ add r3, r1, r0\n\ - ldr r5, ._3076 + 8\n\ + ldr r5, ._3076 + 8 @ \n\ mov r4, #0x58\n\ add r0, r2, #0\n\ mul r0, r0, r4\n\ @@ -12802,7 +12802,7 @@ static void atk9E_metronome(void) bne ._3072 @cond_branch\n\ strh r2, [r3]\n\ ._3072:\n\ - ldr r1, ._3076 + 12\n\ + ldr r1, ._3076 + 12 @ \n\ ldrh r0, [r3]\n\ strh r0, [r1]\n\ ldrb r0, [r6]\n\ @@ -12845,14 +12845,14 @@ static void atk9E_metronome(void) ._3079:\n\ strh r0, [r3]\n\ ._3081:\n\ - ldr r4, ._3083\n\ + ldr r4, ._3083 @ gHitMarker\n\ ldr r2, [r4]\n\ - ldr r0, ._3083 + 4\n\ + ldr r0, ._3083 + 4 @ 0xfffffbff\n\ and r2, r2, r0\n\ str r2, [r4]\n\ - ldr r6, ._3083 + 8\n\ - ldr r5, ._3083 + 12\n\ - ldr r3, ._3083 + 16\n\ + ldr r6, ._3083 + 8 @ gBattlescriptCurrInstr\n\ + ldr r5, ._3083 + 12 @ gBattleScriptsForMoveEffects\n\ + ldr r3, ._3083 + 16 @ gBattleMoves\n\ ldrh r1, [r7]\n\ lsl r0, r1, #0x1\n\ add r0, r0, r1\n\ @@ -12878,15 +12878,15 @@ static void atk9E_metronome(void) .word gBattleScriptsForMoveEffects\n\ .word gBattleMoves\n\ ._3071:\n\ - ldr r7, ._3090\n\ + ldr r7, ._3090 @ gCurrentMove\n\ mov r6, #0xb1\n\ lsl r6, r6, #0x1\n\ - ldr r5, ._3090 + 4\n\ - ldr r0, ._3090 + 8\n\ + ldr r5, ._3090 + 4 @ sMovesForbiddenToCopy\n\ + ldr r0, ._3090 + 8 @ gBattlescriptCurrInstr\n\ mov r8, r0\n\ ._3089:\n\ bl Random\n\ - ldr r2, ._3090 + 12\n\ + ldr r2, ._3090 + 12 @ 0x1ff\n\ add r1, r2, #0\n\ and r0, r0, r1\n\ add r0, r0, #0x1\n\ @@ -12898,9 +12898,9 @@ static void atk9E_metronome(void) sub r0, r0, #0x1\n\ cmp r0, #0\n\ bge ._3086 @cond_branch\n\ - ldr r4, ._3090\n\ + ldr r4, ._3090 @ gCurrentMove\n\ ldrh r2, [r4]\n\ - ldr r3, ._3090 + 16\n\ + ldr r3, ._3090 + 16 @ 0xffff\n\ sub r0, r5, #2\n\ ._3088:\n\ add r0, r0, #0x2\n\ @@ -12910,16 +12910,16 @@ static void atk9E_metronome(void) cmp r1, r3\n\ bne ._3088 @cond_branch\n\ ._3087:\n\ - ldr r0, ._3090 + 16\n\ + ldr r0, ._3090 + 16 @ 0xffff\n\ cmp r1, r0\n\ bne ._3089 @cond_branch\n\ - ldr r2, ._3090 + 20\n\ + ldr r2, ._3090 + 20 @ gHitMarker\n\ ldr r0, [r2]\n\ - ldr r1, ._3090 + 24\n\ + ldr r1, ._3090 + 24 @ 0xfffffbff\n\ and r0, r0, r1\n\ str r0, [r2]\n\ - ldr r3, ._3090 + 28\n\ - ldr r2, ._3090 + 32\n\ + ldr r3, ._3090 + 28 @ gBattleScriptsForMoveEffects\n\ + ldr r2, ._3090 + 32 @ gBattleMoves\n\ ldrh r1, [r4]\n\ lsl r0, r1, #0x1\n\ add r0, r0, r1\n\ @@ -12935,7 +12935,7 @@ static void atk9E_metronome(void) ._3082:\n\ mov r1, #0x0\n\ bl GetMoveTarget\n\ - ldr r1, ._3090 + 36\n\ + ldr r1, ._3090 + 36 @ gBankTarget\n\ strb r0, [r1]\n\ pop {r3}\n\ mov r8, r3\n\ diff --git a/src/battle/battle_controller_opponent.c b/src/battle/battle_controller_opponent.c index 5382738f7..338f8d418 100644 --- a/src/battle/battle_controller_opponent.c +++ b/src/battle/battle_controller_opponent.c @@ -1447,26 +1447,26 @@ void OpponentHandlecmd20(void) mov r6, r9\n\ mov r5, r8\n\ push {r5, r6, r7}\n\ - ldr r6, ._549\n\ + ldr r6, ._549 @ gActiveBank\n\ ldrb r0, [r6]\n\ lsl r0, r0, #0x9\n\ - ldr r1, ._549 + 4\n\ + ldr r1, ._549 + 4 @ gBattleBufferA\n\ add r5, r0, r1\n\ - ldr r2, ._549 + 8\n\ + ldr r2, ._549 + 8 @ gUnknown_02023A14_50\n\ ldrb r1, [r2]\n\ mov r0, #0x4\n\ and r0, r0, r1\n\ mov sl, r6\n\ cmp r0, #0\n\ beq ._546 @cond_branch\n\ - ldr r0, ._549 + 12\n\ + ldr r0, ._549 + 12 @ gBattleMoves\n\ mov r9, r0\n\ - ldr r1, ._549 + 16\n\ + ldr r1, ._549 + 16 @ \n\ mov ip, r1\n\ add r7, r6, #0\n\ mov r0, #0x2\n\ mov r8, r0\n\ - ldr r6, ._549 + 20\n\ + ldr r6, ._549 + 20 @ \n\ ._552:\n\ ldrb r1, [r7]\n\ mov r0, r8\n\ @@ -1526,13 +1526,13 @@ void OpponentHandlecmd20(void) ldrb r0, [r1]\n\ b ._561\n\ ._553:\n\ - ldr r0, ._559\n\ + ldr r0, ._559 @ gBattleTypeFlags\n\ ldrh r1, [r0]\n\ mov r0, #0x1\n\ and r0, r0, r1\n\ cmp r0, #0\n\ beq ._557 @cond_branch\n\ - ldr r0, ._559 + 4\n\ + ldr r0, ._559 + 4 @ gUnknown_02023A14_50\n\ ldrb r1, [r0]\n\ mov r5, #0x2\n\ add r0, r5, #0\n\ @@ -1578,7 +1578,7 @@ void OpponentHandlecmd20(void) bl OpponentBufferExecCompleted\n\ b ._562\n\ ._546:\n\ - ldr r0, ._567\n\ + ldr r0, ._567 @ gBattleTypeFlags\n\ ldrh r1, [r0]\n\ mov r0, #0x93\n\ lsl r0, r0, #0x3\n\ @@ -1607,7 +1607,7 @@ void OpponentHandlecmd20(void) mov r2, #0x0\n\ b ._569\n\ ._565:\n\ - ldr r3, ._574\n\ + ldr r3, ._574 @ gBattleMoves\n\ lsl r0, r4, #0x1\n\ add r2, r5, r0\n\ ldrh r1, [r2]\n\ @@ -1620,7 +1620,7 @@ void OpponentHandlecmd20(void) and r0, r0, r1\n\ cmp r0, #0\n\ beq ._570 @cond_branch\n\ - ldr r1, ._574 + 4\n\ + ldr r1, ._574 + 4 @ gBankTarget\n\ ldrb r0, [r6]\n\ strb r0, [r1]\n\ ._570:\n\ @@ -1636,11 +1636,11 @@ void OpponentHandlecmd20(void) beq ._572 @cond_branch\n\ mov r0, #0x0\n\ bl GetBankByIdentity\n\ - ldr r5, ._574 + 4\n\ + ldr r5, ._574 + 4 @ gBankTarget\n\ strb r0, [r5]\n\ - ldr r0, ._574 + 8\n\ + ldr r0, ._574 + 8 @ gAbsentBankFlags\n\ ldrb r1, [r0]\n\ - ldr r2, ._574 + 12\n\ + ldr r2, ._574 + 12 @ gBitTable\n\ ldrb r0, [r5]\n\ lsl r0, r0, #0x2\n\ add r0, r0, r2\n\ @@ -1652,7 +1652,7 @@ void OpponentHandlecmd20(void) bl GetBankByIdentity\n\ strb r0, [r5]\n\ ._572:\n\ - ldr r0, ._574 + 4\n\ + ldr r0, ._574 + 4 @ gBankTarget\n\ ldrb r2, [r0]\n\ lsl r2, r2, #0x8\n\ orr r2, r2, r4\n\ @@ -1678,7 +1678,7 @@ void OpponentHandlecmd20(void) ldrh r2, [r0]\n\ cmp r2, #0\n\ beq ._576 @cond_branch\n\ - ldr r1, ._579\n\ + ldr r1, ._579 @ gBattleMoves\n\ lsl r0, r2, #0x1\n\ add r0, r0, r2\n\ lsl r0, r0, #0x2\n\ @@ -1688,7 +1688,7 @@ void OpponentHandlecmd20(void) and r0, r0, r1\n\ cmp r0, #0\n\ beq ._577 @cond_branch\n\ - ldr r0, ._579 + 4\n\ + ldr r0, ._579 + 4 @ gActiveBank\n\ ldrb r2, [r0]\n\ lsl r2, r2, #0x8\n\ b ._578\n\ @@ -1698,7 +1698,7 @@ void OpponentHandlecmd20(void) .word gBattleMoves\n\ .word gActiveBank\n\ ._577:\n\ - ldr r0, ._583\n\ + ldr r0, ._583 @ gBattleTypeFlags\n\ ldrh r1, [r0]\n\ mov r0, #0x1\n\ and r0, r0, r1\n\ diff --git a/src/battle/battle_controller_player.c b/src/battle/battle_controller_player.c index d4b4da6f2..e03e21849 100644 --- a/src/battle/battle_controller_player.c +++ b/src/battle/battle_controller_player.c @@ -1007,21 +1007,21 @@ void debug_sub_8030C24(void) asm("\ push {r4, r5, r6, lr}\n\ add sp, sp, #0xfffffff4\n\ - ldr r1, ._293\n\ - ldr r4, ._293 + 4\n\ + ldr r1, ._293 @ gBattlePartyID\n\ + ldr r4, ._293 + 4 @ gActiveBank\n\ ldrb r0, [r4]\n\ lsl r0, r0, #0x1\n\ add r0, r0, r1\n\ ldrh r1, [r0]\n\ mov r0, #0x64\n\ mul r0, r0, r1\n\ - ldr r1, ._293 + 8\n\ + ldr r1, ._293 + 8 @ gPlayerParty\n\ add r0, r0, r1\n\ mov r1, #0xd\n\ bl GetMonData\n\ add r1, sp, #0x8\n\ strh r0, [r1]\n\ - ldr r5, ._293 + 12\n\ + ldr r5, ._293 + 12 @ gMain\n\ ldrh r1, [r5, #0x30]\n\ cmp r1, #0x20\n\ bne ._286 @cond_branch\n\ @@ -1082,7 +1082,7 @@ void debug_sub_8030C24(void) ldrb r0, [r4]\n\ mov r1, #0x0\n\ bl dp11b_obj_free\n\ - ldr r0, ._312\n\ + ldr r0, ._312 @ gBankAttacker\n\ ldrb r2, [r4]\n\ strb r2, [r0]\n\ ldrh r1, [r5, #0x28]\n\ @@ -1090,13 +1090,13 @@ void debug_sub_8030C24(void) and r0, r0, r1\n\ cmp r0, #0\n\ beq ._310 @cond_branch\n\ - ldr r0, ._312 + 4\n\ + ldr r0, ._312 + 4 @ gBattleTypeFlags\n\ ldrh r1, [r0]\n\ mov r0, #0x1\n\ and r0, r0, r1\n\ cmp r0, #0\n\ beq ._310 @cond_branch\n\ - ldr r0, ._312 + 8\n\ + ldr r0, ._312 + 8 @ gBankTarget\n\ mov r1, #0x2\n\ eor r1, r1, r2\n\ strb r1, [r0]\n\ @@ -1108,14 +1108,14 @@ void debug_sub_8030C24(void) .word gBattleTypeFlags\n\ .word gBankTarget\n\ ._310:\n\ - ldr r0, ._317\n\ + ldr r0, ._317 @ gMain\n\ ldrh r1, [r0, #0x28]\n\ mov r2, #0x1\n\ add r0, r2, #0\n\ and r0, r0, r1\n\ cmp r0, #0\n\ beq ._315 @cond_branch\n\ - ldr r0, ._317 + 4\n\ + ldr r0, ._317 + 4 @ gBattleTypeFlags\n\ ldrh r1, [r0]\n\ add r0, r2, #0\n\ and r0, r0, r1\n\ @@ -1132,7 +1132,7 @@ void debug_sub_8030C24(void) mov r0, #0x1\n\ ._316:\n\ bl GetBankByIdentity\n\ - ldr r1, ._320\n\ + ldr r1, ._320 @ gBankTarget\n\ strb r0, [r1]\n\ ._311:\n\ mov r0, #0x0\n\ @@ -1140,8 +1140,8 @@ void debug_sub_8030C24(void) add r0, sp, #0x8\n\ ldrh r0, [r0]\n\ bl DoMoveAnim\n\ - ldr r1, ._320 + 4\n\ - ldr r0, ._320 + 8\n\ + ldr r1, ._320 + 4 @ gBattleBankFunc\n\ + ldr r0, ._320 + 8 @ gActiveBank\n\ ldrb r0, [r0]\n\ b ._332\n\ ._321:\n\ @@ -1157,7 +1157,7 @@ void debug_sub_8030C24(void) ldrb r0, [r4]\n\ mov r1, #0x0\n\ bl dp11b_obj_free\n\ - ldr r0, ._325\n\ + ldr r0, ._325 @ gBankTarget\n\ ldrb r2, [r4]\n\ strb r2, [r0]\n\ ldrh r1, [r5, #0x28]\n\ @@ -1165,13 +1165,13 @@ void debug_sub_8030C24(void) and r0, r0, r1\n\ cmp r0, #0\n\ beq ._323 @cond_branch\n\ - ldr r0, ._325 + 4\n\ + ldr r0, ._325 + 4 @ gBattleTypeFlags\n\ ldrh r1, [r0]\n\ mov r0, #0x1\n\ and r0, r0, r1\n\ cmp r0, #0\n\ beq ._323 @cond_branch\n\ - ldr r0, ._325 + 8\n\ + ldr r0, ._325 + 8 @ gBankAttacker\n\ mov r1, #0x2\n\ eor r1, r1, r2\n\ strb r1, [r0]\n\ @@ -1183,14 +1183,14 @@ void debug_sub_8030C24(void) .word gBattleTypeFlags\n\ .word gBankAttacker\n\ ._323:\n\ - ldr r0, ._330\n\ + ldr r0, ._330 @ gMain\n\ ldrh r1, [r0, #0x28]\n\ mov r2, #0x1\n\ add r0, r2, #0\n\ and r0, r0, r1\n\ cmp r0, #0\n\ beq ._328 @cond_branch\n\ - ldr r0, ._330 + 4\n\ + ldr r0, ._330 + 4 @ gBattleTypeFlags\n\ ldrh r1, [r0]\n\ add r0, r2, #0\n\ and r0, r0, r1\n\ @@ -1207,7 +1207,7 @@ void debug_sub_8030C24(void) mov r0, #0x1\n\ ._329:\n\ bl GetBankByIdentity\n\ - ldr r1, ._333\n\ + ldr r1, ._333 @ gBankAttacker\n\ strb r0, [r1]\n\ ._324:\n\ mov r0, #0x0\n\ @@ -1215,8 +1215,8 @@ void debug_sub_8030C24(void) add r0, sp, #0x8\n\ ldrh r0, [r0]\n\ bl DoMoveAnim\n\ - ldr r1, ._333 + 4\n\ - ldr r0, ._333 + 8\n\ + ldr r1, ._333 + 4 @ gBattleBankFunc\n\ + ldr r0, ._333 + 8 @ gActiveBank\n\ ldrb r0, [r0]\n\ b ._332\n\ ._334:\n\ @@ -1231,7 +1231,7 @@ void debug_sub_8030C24(void) and r0, r0, r1\n\ cmp r0, #0\n\ beq ._336 @cond_branch\n\ - ldr r0, ._338\n\ + ldr r0, ._338 @ gBattleTypeFlags\n\ ldrh r1, [r0]\n\ mov r0, #0x1\n\ and r0, r0, r1\n\ @@ -1245,7 +1245,7 @@ void debug_sub_8030C24(void) bl dp11b_obj_free\n\ mov r0, #0x3\n\ bl GetBankByIdentity\n\ - ldr r1, ._338 + 4\n\ + ldr r1, ._338 + 4 @ gBankAttacker\n\ strb r0, [r1]\n\ mov r0, #0x1\n\ b ._337\n\ @@ -1283,7 +1283,7 @@ void debug_sub_8030C24(void) and r0, r0, r1\n\ cmp r0, #0\n\ beq ._343 @cond_branch\n\ - ldr r0, ._345\n\ + ldr r0, ._345 @ gBattleTypeFlags\n\ ldrh r1, [r0]\n\ mov r0, #0x1\n\ and r0, r0, r1\n\ @@ -1297,24 +1297,24 @@ void debug_sub_8030C24(void) bl dp11b_obj_free\n\ mov r0, #0x1\n\ bl GetBankByIdentity\n\ - ldr r1, ._345 + 4\n\ + ldr r1, ._345 + 4 @ gBankAttacker\n\ strb r0, [r1]\n\ mov r0, #0x3\n\ ._337:\n\ bl GetBankByIdentity\n\ - ldr r1, ._345 + 8\n\ + ldr r1, ._345 + 8 @ gBankTarget\n\ strb r0, [r1]\n\ mov r0, #0x0\n\ bl sub_80326EC\n\ add r0, sp, #0x8\n\ ldrh r0, [r0]\n\ bl DoMoveAnim\n\ - ldr r1, ._345 + 12\n\ + ldr r1, ._345 + 12 @ gBattleBankFunc\n\ ldrb r0, [r4]\n\ ._332:\n\ lsl r0, r0, #0x2\n\ add r0, r0, r1\n\ - ldr r1, ._345 + 16\n\ + ldr r1, ._345 + 16 @ debug_sub_803107C\n\ str r1, [r0]\n\ b ._348\n\ ._346:\n\ @@ -1345,20 +1345,20 @@ void debug_sub_8030C24(void) add r0, r2, #0\n\ strh r0, [r1]\n\ ._347:\n\ - ldr r1, ._349\n\ - ldr r4, ._349 + 4\n\ + ldr r1, ._349 @ gBattlePartyID\n\ + ldr r4, ._349 + 4 @ gActiveBank\n\ ldrb r0, [r4]\n\ lsl r0, r0, #0x1\n\ add r0, r0, r1\n\ ldrh r1, [r0]\n\ mov r0, #0x64\n\ mul r0, r0, r1\n\ - ldr r1, ._349 + 8\n\ + ldr r1, ._349 + 8 @ gPlayerParty\n\ add r0, r0, r1\n\ mov r1, #0xd\n\ add r2, sp, #0x8\n\ bl SetMonData\n\ - ldr r2, ._349 + 12\n\ + ldr r2, ._349 + 12 @ gBattleMons\n\ ldrb r1, [r4]\n\ mov r0, #0x58\n\ mul r0, r0, r1\n\ @@ -1366,8 +1366,8 @@ void debug_sub_8030C24(void) add r1, sp, #0x8\n\ ldrh r1, [r1]\n\ strh r1, [r0, #0xc]\n\ - ldr r5, ._349 + 16\n\ - ldr r1, ._349 + 20\n\ + ldr r5, ._349 + 16 @ gUnknown_03004210\n\ + ldr r1, ._349 + 20 @ 0x1016\n\ mov r0, #0x10\n\ str r0, [sp]\n\ mov r0, #0x38\n\ @@ -1381,7 +1381,7 @@ void debug_sub_8030C24(void) ldsh r1, [r0, r2]\n\ mov r0, #0xd\n\ mul r1, r1, r0\n\ - ldr r0, ._349 + 24\n\ + ldr r0, ._349 + 24 @ gMoveNames\n\ add r1, r1, r0\n\ mov r2, #0x80\n\ lsl r2, r2, #0x1\n\ @@ -1390,7 +1390,7 @@ void debug_sub_8030C24(void) add r0, r5, #0\n\ mov r3, #0x2\n\ bl Text_InitWindowAndPrintText\n\ - ldr r4, ._349 + 28\n\ + ldr r4, ._349 + 28 @ gDisplayedStringBattle\n\ add r0, sp, #0x8\n\ mov r2, #0x0\n\ ldsh r1, [r0, r2]\n\ @@ -1418,11 +1418,11 @@ void debug_sub_8030C24(void) .word gMoveNames\n\ .word gDisplayedStringBattle\n\ ._302:\n\ - ldr r0, ._353\n\ + ldr r0, ._353 @ gMain\n\ ldrh r0, [r0, #0x30]\n\ cmp r0, #0x40\n\ bne ._351 @cond_branch\n\ - ldr r1, ._353 + 4\n\ + ldr r1, ._353 + 4 @ gAnimMoveTurn\n\ ldrb r0, [r1]\n\ sub r0, r0, #0x1\n\ b ._352\n\ @@ -1432,18 +1432,18 @@ void debug_sub_8030C24(void) .word gMain\n\ .word gAnimMoveTurn\n\ ._351:\n\ - ldr r1, ._359\n\ + ldr r1, ._359 @ gAnimMoveTurn\n\ ldrb r0, [r1]\n\ add r0, r0, #0x1\n\ ._352:\n\ strb r0, [r1]\n\ - ldr r4, ._359 + 4\n\ + ldr r4, ._359 + 4 @ gDisplayedStringBattle\n\ ldrb r1, [r1]\n\ add r0, r4, #0\n\ mov r2, #0x2\n\ mov r3, #0x3\n\ bl ConvertIntToDecimalStringN\n\ - ldr r0, ._359 + 8\n\ + ldr r0, ._359 + 8 @ gUnknown_03004210\n\ mov r2, #0x8e\n\ lsl r2, r2, #0x1\n\ mov r1, #0x39\n\ @@ -1452,7 +1452,7 @@ void debug_sub_8030C24(void) mov r3, #0x4\n\ bl Text_InitWindowAndPrintText\n\ ._348:\n\ - ldr r0, ._359 + 12\n\ + ldr r0, ._359 + 12 @ gMain\n\ ldrh r2, [r0, #0x28]\n\ mov r1, #0xc0\n\ lsl r1, r1, #0x2\n\ @@ -1461,28 +1461,28 @@ void debug_sub_8030C24(void) cmp r0, r1\n\ bne ._355 @cond_branch\n\ mov r4, #0x0\n\ - ldr r5, ._359 + 4\n\ - ldr r6, ._359 + 8\n\ + ldr r5, ._359 + 4 @ gDisplayedStringBattle\n\ + ldr r6, ._359 + 8 @ gUnknown_03004210\n\ ._361:\n\ add r0, r5, #0\n\ - ldr r1, ._359 + 16\n\ + ldr r1, ._359 + 16 @ BattleText_Format\n\ bl StringCopy\n\ - ldr r1, ._359 + 20\n\ - ldr r0, ._359 + 24\n\ + ldr r1, ._359 + 20 @ gBattlePartyID\n\ + ldr r0, ._359 + 24 @ gActiveBank\n\ ldrb r0, [r0]\n\ lsl r0, r0, #0x1\n\ add r0, r0, r1\n\ ldrh r1, [r0]\n\ mov r0, #0x64\n\ mul r0, r0, r1\n\ - ldr r1, ._359 + 28\n\ + ldr r1, ._359 + 28 @ gPlayerParty\n\ add r0, r0, r1\n\ add r1, r4, #0\n\ add r1, r1, #0xd\n\ bl GetMonData\n\ mov r1, #0xd\n\ mul r1, r1, r0\n\ - ldr r0, ._359 + 32\n\ + ldr r0, ._359 + 32 @ gMoveNames\n\ add r1, r1, r0\n\ add r0, r5, #0\n\ bl StringAppend\n\ @@ -1521,19 +1521,19 @@ void debug_sub_8030C24(void) add r0, r6, #0\n\ add r1, r5, #0\n\ bl Text_InitWindow\n\ - ldr r0, ._362\n\ + ldr r0, ._362 @ gUnknown_03004210\n\ bl Text_PrintWindow8002F44\n\ add r0, r4, #1\n\ lsl r0, r0, #0x18\n\ lsr r4, r0, #0x18\n\ cmp r4, #0x3\n\ bls ._361 @cond_branch\n\ - ldr r1, ._362 + 4\n\ - ldr r0, ._362 + 8\n\ + ldr r1, ._362 + 4 @ gBattleBankFunc\n\ + ldr r0, ._362 + 8 @ gActiveBank\n\ ldrb r0, [r0]\n\ lsl r0, r0, #0x2\n\ add r0, r0, r1\n\ - ldr r1, ._362 + 12\n\ + ldr r1, ._362 + 12 @ sub_802C68C\n\ str r1, [r0]\n\ ._355:\n\ add sp, sp, #0xc\n\ @@ -1556,16 +1556,16 @@ void debug_sub_803107C(void) push {r4, r5, r6, r7, lr}\n\ add sp, sp, #0xfffffffc\n\ mov r7, #0x0\n\ - ldr r0, ._369\n\ + ldr r0, ._369 @ gAnimScriptCallback\n\ ldr r0, [r0]\n\ bl _call_via_r0\n\ - ldr r0, ._369 + 4\n\ + ldr r0, ._369 + 4 @ gAnimScriptActive\n\ ldrb r0, [r0]\n\ cmp r0, #0\n\ bne ._364 @cond_branch\n\ mov r0, #0x1\n\ bl sub_80326EC\n\ - ldr r4, ._369 + 8\n\ + ldr r4, ._369 + 8 @ gActiveBank\n\ ldrb r0, [r4]\n\ mov r1, #0x1\n\ mov r2, #0x7\n\ @@ -1576,7 +1576,7 @@ void debug_sub_803107C(void) mov r2, #0x7\n\ mov r3, #0x1\n\ bl dp11b_obj_instanciate\n\ - ldr r0, ._369 + 12\n\ + ldr r0, ._369 + 12 @ gSprites\n\ add r2, r0, #0\n\ add r2, r2, #0x3e\n\ mov r1, #0x3f\n\ @@ -1593,13 +1593,13 @@ void debug_sub_803107C(void) sub r1, r1, #0x1\n\ cmp r1, #0\n\ bge ._366 @cond_branch\n\ - ldr r4, ._369 + 16\n\ + ldr r4, ._369 + 16 @ gDisplayedStringBattle\n\ add r0, r4, #0\n\ add r1, r7, #0\n\ mov r2, #0x2\n\ mov r3, #0x2\n\ bl ConvertIntToDecimalStringN\n\ - ldr r6, ._369 + 20\n\ + ldr r6, ._369 + 20 @ gUnknown_03004210\n\ mov r2, #0x91\n\ lsl r2, r2, #0x1\n\ mov r5, #0x39\n\ @@ -1625,7 +1625,7 @@ void debug_sub_803107C(void) bl Text_InitWindowAndPrintText\n\ mov r1, #0x0\n\ mov r7, #0x0\n\ - ldr r0, ._369 + 24\n\ + ldr r0, ._369 + 24 @ gOamMatrixAllocBitmap\n\ mov r3, #0x1\n\ ldr r2, [r0]\n\ ._368:\n\ @@ -1641,13 +1641,13 @@ void debug_sub_803107C(void) add r1, r1, #0x1\n\ cmp r1, #0x1f\n\ ble ._368 @cond_branch\n\ - ldr r4, ._369 + 16\n\ + ldr r4, ._369 + 16 @ gDisplayedStringBattle\n\ add r0, r4, #0\n\ add r1, r7, #0\n\ mov r2, #0x2\n\ mov r3, #0x2\n\ bl ConvertIntToDecimalStringN\n\ - ldr r0, ._369 + 20\n\ + ldr r0, ._369 + 20 @ gUnknown_03004210\n\ mov r2, #0x95\n\ lsl r2, r2, #0x1\n\ mov r1, #0x39\n\ @@ -1655,12 +1655,12 @@ void debug_sub_803107C(void) add r1, r4, #0\n\ mov r3, #0xe\n\ bl Text_InitWindowAndPrintText\n\ - ldr r1, ._369 + 28\n\ - ldr r0, ._369 + 8\n\ + ldr r1, ._369 + 28 @ gBattleBankFunc\n\ + ldr r0, ._369 + 8 @ gActiveBank\n\ ldrb r0, [r0]\n\ lsl r0, r0, #0x2\n\ add r0, r0, r1\n\ - ldr r1, ._369 + 32\n\ + ldr r1, ._369 + 32 @ debug_sub_8030C24\n\ str r1, [r0]\n\ ._364:\n\ add sp, sp, #0x4\n\ diff --git a/src/battle/battle_records.c b/src/battle/battle_records.c index 9dd1d7b53..1532a0b2f 100644 --- a/src/battle/battle_records.c +++ b/src/battle/battle_records.c @@ -234,12 +234,12 @@ void debug_sub_81257E0(void) add sp, sp, #0xfffffffc\n\ bl InitLinkBattleRecords\n\ mov r5, #0x0\n\ - ldr r6, ._62\n\ + ldr r6, ._62 @ gUnknown_Debug_4245CC\n\ sub r0, r6, #2\n\ mov r8, r0\n\ - ldr r7, ._62 + 4\n\ + ldr r7, ._62 + 4 @ gLinkPlayers\n\ ._61:\n\ - ldr r0, ._62 + 8\n\ + ldr r0, ._62 + 8 @ gUnknown_Debug_8424620\n\ lsl r3, r5, #0x2\n\ add r3, r3, r0\n\ ldrb r4, [r3]\n\ @@ -251,7 +251,7 @@ void debug_sub_81257E0(void) add r0, r0, r8\n\ ldrh r2, [r0]\n\ ldrb r3, [r3, #0x1]\n\ - ldr r0, ._62 + 12\n\ + ldr r0, ._62 + 12 @ gLinkPlayerMapObjects\n\ lsl r4, r4, #0x2\n\ add r4, r4, r0\n\ ldrb r4, [r4, #0x1]\n\ @@ -261,7 +261,7 @@ void debug_sub_81257E0(void) add r0, r0, r7\n\ ldrb r0, [r0, #0x1a]\n\ str r0, [sp]\n\ - ldr r0, ._62 + 16\n\ + ldr r0, ._62 + 16 @ gSaveBlock1\n\ bl UpdateLinkBattleRecords_\n\ add r5, r5, #0x1\n\ cmp r5, #0x2\n\ -- cgit v1.2.3 From f87bd7328ce26deddc53b62e53827089bfacd30a Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sat, 27 Jan 2018 20:34:43 -0600 Subject: decompile more debug functions in battle_2.c --- src/battle/battle_2.c | 2737 +++++++++++++++---------------------------------- 1 file changed, 800 insertions(+), 1937 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index b9b4290b5..a400257dd 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -67,12 +67,15 @@ struct UnknownStruct12 u8 filler4[0x54]; }; -void debug_sub_80139E4(void); -extern u8 gUnknown_02023A14_50; +extern void sub_802BBD4(); +extern const u8 Str_821F7B8[]; +extern u8 gUnknown_02023A14_50; extern const u16 gUnknown_08D004E0[]; extern const struct MonCoords gCastformFrontSpriteCoords[]; - +extern const u8 Str_821F7EA[]; +extern const u8 gUnknown_Debug_821F7F3[]; +extern const u8 BattleText_YesNo[]; extern u8 gStatStageRatios[][2]; extern u8 gActionsByTurnOrder[4]; extern struct UnknownPokemonStruct2 gUnknown_02023A00[]; @@ -85,7 +88,7 @@ extern u8 gCurrentActionFuncId; extern u8 gBanksByTurnOrder[]; extern struct UnknownStruct12 gUnknown_02024AD0[]; extern u8 gObjectBankIDs[]; -extern u16 gCurrentMove; +extern u16 gCurrentMove; // This is mis-named. It is a species, not a move ID. extern u8 gLastUsedAbility; extern u8 gStringBank; extern u8 gAbsentBankFlags; @@ -182,7 +185,7 @@ extern u8 gUnknown_081FA70C[][3]; extern u8 gUnknown_081FA71B[]; extern u8 gUnknown_081FA71F[]; - +void sub_8010824(void); static void BattlePrepIntroSlide(void); void CheckFocusPunch_ClearVarsBeforeTurnStarts(void); void SetActionsAndBanksTurnOrder(void); @@ -551,11 +554,7 @@ void sub_800EC9C(void) if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) { gPreBattleCallback1 = gMain.callback1; -#if DEBUG - gMain.callback1 = debug_sub_80139E4; -#else gMain.callback1 = sub_8010824; -#endif SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { @@ -940,11 +939,7 @@ void sub_800F298(void) if (battle_load_something(gUnknown_02024D1F, gUnknown_02024D1F + 1) != 0) { gPreBattleCallback1 = gMain.callback1; -#if DEBUG - gMain.callback1 = debug_sub_80139E4; -#else gMain.callback1 = sub_8010824; -#endif SetMainCallback2(BattleMainCB2); if (gBattleTypeFlags & BATTLE_TYPE_LINK) { @@ -1363,6 +1358,10 @@ void c2_081284E0(void) // A LOT of debug code! #if DEBUG +extern u8 gUnknown_Debug_2023B62[]; +extern const u8 Str_821F7BD[]; +extern const u8 Str_821F7DA[]; + void debug_sub_8010818(void); void debug_sub_80108B8(void); void debug_sub_8010CAC(void); @@ -1372,8 +1371,10 @@ void debug_sub_8011EA0(u8); void debug_sub_8012294(void); void debug_sub_80123D8(u8); void debug_sub_8012540(void); -void debug_sub_80125A0(void); void debug_nullsub_3(void); +void debug_sub_80125A0(void); +u32 debug_sub_8013294(u8, void *, u32); +void debug_sub_80132C8(u8, void *, u32); struct UnknownStruct2023A76 { @@ -1500,8 +1501,6 @@ void debug_sub_80108B8(void) } } -// This function matches, but it somehow affects registers in SetActionsAndBanksTurnOrder. -#ifdef NONMATCHING void debug_sub_8010A7C(u8 a, u8 b) { s32 i; @@ -1510,49 +1509,6 @@ void debug_sub_8010A7C(u8 a, u8 b) gBattleTextBuff1[i] = a; gBattleTextBuff1[i] = EOS; } -#else -__attribute__((naked)) -void debug_sub_8010A7C() -{ - asm( - " push {r4, r5, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " lsl r1, r1, #0x18\n" - " lsr r2, r1, #0x18\n" - " mov r1, #0x0\n" - " ldr r5, ._514 @ gBattleTextBuff1\n" - " cmp r1, r2\n" - " bge ._512 @cond_branch\n" - " add r3, r5, #0\n" - "._513:\n" - " add r0, r1, r3\n" - " strb r4, [r0]\n" - " add r1, r1, #0x1\n" - " cmp r1, r2\n" - " blt ._513 @cond_branch\n" - "._512:\n" - " add r1, r1, r5\n" - " mov r0, #0xff\n" - " strb r0, [r1]\n" - " pop {r4, r5}\n" - " pop {r0}\n" - " bx r0\n" - "._515:\n" - " .align 2, 0\n" - "._514:\n" - " .word gBattleTextBuff1\n" - "\n" - ); -} -#endif - -/* -void debug_sub_8010AAC(u8 a) -{ - u32 r7 = gUnknown_Debug_030043A4 * 5; -} -*/ __attribute__((naked)) void debug_sub_8010AAC() @@ -5195,6 +5151,21 @@ void debug_sub_8012878() ); } +/* +void debug_sub_80128B4(void) +{ + debug_sub_8010A7C(0, 9); + Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 144, 2, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); + ConvertIntToDecimalStringN(gBattleTextBuff1, gCurrentMove, 2, 3); + gBattleTextBuff1[3] = CHAR_SPACE; + gBattleTextBuff1[4] = EOS; + StringAppend(gBattleTextBuff1, gSpeciesNames[gCurrentMove]); + Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 144, 2, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); +} +*/ + __attribute__((naked)) void debug_sub_80128B4() { @@ -5261,1226 +5232,354 @@ void debug_sub_80128B4() ); } -__attribute__((naked)) -void debug_sub_8012938() +void debug_sub_8012938(u8 taskId) { - asm( - " push {r4, r5, r6, lr}\n" - " mov r6, sl\n" - " mov r5, r9\n" - " mov r4, r8\n" - " push {r4, r5, r6}\n" - " add sp, sp, #0xfffffffc\n" - " add r5, r0, #0\n" - " lsl r5, r5, #0x18\n" - " lsr r5, r5, #0x18\n" - " mov r0, #0x0\n" - " mov r1, #0x7\n" - " bl debug_sub_8010A7C\n" - " ldr r6, ._880 @ gUnknown_03004210\n" - " ldr r4, ._880 + 4 @ gBattleTextBuff1\n" - " mov r0, #0x25\n" - " mov r8, r0\n" - " str r0, [sp]\n" - " add r0, r6, #0\n" - " add r1, r4, #0\n" - " mov r2, #0xa2\n" - " mov r3, #0x2\n" - " bl Text_InitWindow\n" - " add r0, r6, #0\n" - " bl Text_PrintWindow8002F44\n" - " ldr r1, ._880 + 8 @ Str_821F7B8\n" - " add r0, r4, #0\n" - " bl StringCopy\n" - " add r0, r4, #4\n" - " ldr r1, ._880 + 12 @ gUnknown_Debug_2023B62\n" - " mov sl, r1\n" - " ldr r2, ._880 + 16 @ gCurrentMove\n" - " mov r9, r2\n" - " ldrh r1, [r2]\n" - " sub r1, r1, #0x1\n" - " add r1, r1, sl\n" - " ldrb r1, [r1]\n" - " mov r2, #0x2\n" - " mov r3, #0x3\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, r8\n" - " str r0, [sp]\n" - " add r0, r6, #0\n" - " add r1, r4, #0\n" - " mov r2, #0xa2\n" - " mov r3, #0x2\n" - " bl Text_InitWindow\n" - " add r0, r6, #0\n" - " bl Text_PrintWindow8002F44\n" - " ldr r2, ._880 + 20 @ gSprites\n" - " ldr r1, ._880 + 24 @ gTasks\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r1, #0xa\n" - " ldsh r0, [r0, r1]\n" - " lsl r1, r0, #0x4\n" - " add r1, r1, r0\n" - " lsl r1, r1, #0x2\n" - " add r1, r1, r2\n" - " mov r2, r9\n" - " ldrh r0, [r2]\n" - " sub r0, r0, #0x1\n" - " add r0, r0, sl\n" - " ldrb r0, [r0]\n" - " neg r0, r0\n" - " strh r0, [r1, #0x26]\n" - " add sp, sp, #0x4\n" - " pop {r3, r4, r5}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " mov sl, r5\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._881:\n" - " .align 2, 0\n" - "._880:\n" - " .word gUnknown_03004210\n" - " .word gBattleTextBuff1\n" - " .word Str_821F7B8\n" - " .word gUnknown_Debug_2023B62\n" - " .word gCurrentMove\n" - " .word gSprites\n" - " .word gTasks\n" - "\n" - ); + debug_sub_8010A7C(0, 7); + Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 162, 2, 37); + Text_PrintWindow8002F44(&gUnknown_03004210); + StringCopy(gBattleTextBuff1, Str_821F7B8); + ConvertIntToDecimalStringN(gBattleTextBuff1 + 4, gUnknown_Debug_2023B62[gCurrentMove - 1], 2, 3); + Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 162, 2, 37); + Text_PrintWindow8002F44(&gUnknown_03004210); + gSprites[gTasks[taskId].data[1]].pos2.y = -gUnknown_Debug_2023B62[gCurrentMove - 1]; } -__attribute__((naked)) -void debug_sub_80129F8() +void debug_sub_80129F8(u8 taskId) { - asm( - " push {r4, r5, r6, lr}\n" - " mov r6, r8\n" - " push {r6}\n" - " add sp, sp, #0xfffffff8\n" - " add r5, r0, #0\n" - " lsl r5, r5, #0x18\n" - " lsr r5, r5, #0x18\n" - " ldr r6, ._882 @ gCurrentMove\n" - " ldrh r2, [r6]\n" - " lsl r0, r2, #0x3\n" - " ldr r1, ._882 + 4 @ gMonFrontPicTable\n" - " add r0, r0, r1\n" - " ldr r1, ._882 + 8 @ gMonFrontPicCoords\n" - " mov r8, r1\n" - " lsl r2, r2, #0x2\n" - " add r2, r2, r8\n" - " ldrb r1, [r2]\n" - " ldrb r2, [r2, #0x1]\n" - " mov r3, #0x80\n" - " lsl r3, r3, #0x12\n" - " ldr r4, ._882 + 12 @ gUnknown_081FAF4C\n" - " ldr r4, [r4, #0x4]\n" - " str r4, [sp]\n" - " ldrh r4, [r6]\n" - " str r4, [sp, #0x4]\n" - " bl DecompressPicFromTable_2\n" - " ldr r1, ._882 + 16 @ gMonPaletteTable\n" - " ldrh r0, [r6]\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov r1, #0x88\n" - " lsl r1, r1, #0x1\n" - " mov r2, #0x20\n" - " bl LoadCompressedPalette\n" - " ldr r4, ._882 + 20 @ gSprites\n" - " ldr r0, ._882 + 24 @ gTasks\n" - " lsl r2, r5, #0x2\n" - " add r2, r2, r5\n" - " lsl r2, r2, #0x3\n" - " add r2, r2, r0\n" - " mov r1, #0xa\n" - " ldsh r0, [r2, r1]\n" - " lsl r1, r0, #0x4\n" - " add r1, r1, r0\n" - " lsl r1, r1, #0x2\n" - " add r1, r1, r4\n" - " ldrh r0, [r6]\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r8\n" - " ldrb r0, [r0, #0x1]\n" - " add r0, r0, #0x28\n" - " strh r0, [r1, #0x22]\n" - " mov r1, #0xa\n" - " ldsh r0, [r2, r1]\n" - " lsl r1, r0, #0x4\n" - " add r1, r1, r0\n" - " lsl r1, r1, #0x2\n" - " add r1, r1, r4\n" - " ldr r3, ._882 + 28 @ gUnknown_Debug_2023B62\n" - " ldrh r0, [r6]\n" - " sub r0, r0, #0x1\n" - " add r0, r0, r3\n" - " ldrb r0, [r0]\n" - " neg r0, r0\n" - " strh r0, [r1, #0x26]\n" - " mov r0, #0xa\n" - " ldsh r1, [r2, r0]\n" - " lsl r0, r1, #0x4\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r4\n" - " mov r1, #0x0\n" - " bl StartSpriteAnim\n" - " add sp, sp, #0x8\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._883:\n" - " .align 2, 0\n" - "._882:\n" - " .word gCurrentMove\n" - " .word gMonFrontPicTable\n" - " .word gMonFrontPicCoords\n" - " .word gUnknown_081FAF4C\n" - " .word gMonPaletteTable\n" - " .word gSprites\n" - " .word gTasks\n" - " .word gUnknown_Debug_2023B62\n" - "\n" - ); + DecompressPicFromTable_2( + &gMonFrontPicTable[gCurrentMove], + gMonFrontPicCoords[gCurrentMove].coords, + gMonFrontPicCoords[gCurrentMove].y_offset, + (void *)0x02000000, + gUnknown_081FAF4C[1], + gCurrentMove); + LoadCompressedPalette(gMonPaletteTable[gCurrentMove].data, 272, 32); + gSprites[gTasks[taskId].data[1]].pos1.y = gMonFrontPicCoords[gCurrentMove].y_offset + 40; + gSprites[gTasks[taskId].data[1]].pos2.y = -gUnknown_Debug_2023B62[gCurrentMove - 1]; + StartSpriteAnim(&gSprites[gTasks[taskId].data[1]], 0); } -__attribute__((naked)) -void debug_sub_8012AC0() +void debug_sub_8012AC0(s8 a, u8 taskId) { - asm( - " push {r4, r5, r6, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r5, r0, #0x18\n" - " lsl r1, r1, #0x18\n" - " lsr r6, r1, #0x18\n" - " ldr r3, ._885 @ gCurrentMove\n" - " ldr r4, ._885 + 4 @ gBaseStats\n" - " b ._884\n" - "._886:\n" - " .align 2, 0\n" - "._885:\n" - " .word gCurrentMove\n" - " .word gBaseStats\n" - "._890:\n" - " ldrb r0, [r1, #0x7]\n" - " cmp r0, #0x2\n" - " beq ._887 @cond_branch\n" - "._884:\n" - " add r2, r3, #0\n" - " lsl r0, r5, #0x18\n" - " asr r0, r0, #0x18\n" - " ldrh r1, [r2]\n" - " add r0, r0, r1\n" - " strh r0, [r2]\n" - " lsl r0, r0, #0x10\n" - " cmp r0, #0\n" - " bne ._888 @cond_branch\n" - " ldr r1, ._891 @ 0x19b\n" - " add r0, r1, #0\n" - " strh r0, [r2]\n" - "._888:\n" - " ldrh r1, [r2]\n" - " ldr r0, ._891 @ 0x19b\n" - " cmp r1, r0\n" - " bne ._889 @cond_branch\n" - " mov r0, #0x1\n" - " strh r0, [r2]\n" - "._889:\n" - " ldrh r0, [r3]\n" - " lsl r1, r0, #0x3\n" - " sub r1, r1, r0\n" - " lsl r1, r1, #0x2\n" - " add r1, r1, r4\n" - " ldrb r0, [r1, #0x6]\n" - " cmp r0, #0x2\n" - " bne ._890 @cond_branch\n" - "._887:\n" - " bl debug_sub_80128B4\n" - " add r0, r6, #0\n" - " bl debug_sub_8012938\n" - " add r0, r6, #0\n" - " bl debug_sub_80129F8\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._892:\n" - " .align 2, 0\n" - "._891:\n" - " .word 0x19b\n" - "\n" - ); + do + { + gCurrentMove += a; + if (gCurrentMove == 0) + gCurrentMove = 411; + if (gCurrentMove == 411) + gCurrentMove = 1; + } while (gBaseStats[gCurrentMove].type1 != 2 && gBaseStats[gCurrentMove].type2 != 2); + debug_sub_80128B4(); + debug_sub_8012938(taskId); + debug_sub_80129F8(taskId); } -__attribute__((naked)) -void debug_sub_8012B2C() +void debug_sub_8012B2C(u8 a) { - asm( - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x11\n" - " ldr r1, ._893 @ 0x600c772\n" - " add r2, r0, r1\n" - " mov r1, #0x1\n" - " strh r1, [r2]\n" - " ldr r1, ._893 + 4 @ 0x600c7b2\n" - " add r0, r0, r1\n" - " mov r1, #0x2\n" - " strh r1, [r0]\n" - " bx lr\n" - "._894:\n" - " .align 2, 0\n" - "._893:\n" - " .word 0x600c772\n" - " .word 0x600c7b2\n" - "\n" - ); + *(u16 *)(VRAM + 0xC000 + 0x772 + (a * 4 + 0) * 0x20) = 1; + *(u16 *)(VRAM + 0xC000 + 0x772 + (a * 4 + 2) * 0x20) = 2; } -__attribute__((naked)) -void debug_sub_8012B4C() +void debug_sub_8012B4C(u8 a) { - asm( - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x11\n" - " ldr r2, ._895 @ 0x600c772\n" - " add r1, r0, r2\n" - " ldr r3, ._895 + 4 @ 0x1016\n" - " add r2, r3, #0\n" - " strh r2, [r1]\n" - " ldr r1, ._895 + 8 @ 0x600c7b2\n" - " add r0, r0, r1\n" - " strh r2, [r0]\n" - " bx lr\n" - "._896:\n" - " .align 2, 0\n" - "._895:\n" - " .word 0x600c772\n" - " .word 0x1016\n" - " .word 0x600c7b2\n" - "\n" - ); + *(u16 *)(VRAM + 0xC000 + 0x772 + (a * 4 + 0) * 0x20) = 0x1016; + *(u16 *)(VRAM + 0xC000 + 0x772 + (a * 4 + 2) * 0x20) = 0x1016; } -__attribute__((naked)) -void debug_sub_8012B70() +void debug_sub_8012B70(u8 taskId, u8 b) { - asm( - " push {r4, r5, r6, lr}\n" - " add sp, sp, #0xfffffffc\n" - " lsl r0, r0, #0x18\n" - " lsr r5, r0, #0x18\n" - " lsl r1, r1, #0x18\n" - " lsr r6, r1, #0x18\n" - " cmp r6, #0\n" - " beq ._897 @cond_branch\n" - " mov r4, #0x1\n" - " str r4, [sp]\n" - " mov r0, #0x18\n" - " mov r1, #0x1c\n" - " mov r2, #0x1d\n" - " mov r3, #0x21\n" - " bl sub_802BBD4\n" - " bl debug_sub_80128B4\n" - " add r0, r5, #0\n" - " bl debug_sub_8012938\n" - " add r0, r5, #0\n" - " bl debug_sub_80129F8\n" - " ldr r1, ._899 @ gTasks\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " strh r4, [r0, #0x8]\n" - " b ._898\n" - "._900:\n" - " .align 2, 0\n" - "._899:\n" - " .word gTasks\n" - "._897:\n" - " str r6, [sp]\n" - " mov r0, #0x18\n" - " mov r1, #0x1c\n" - " mov r2, #0x1d\n" - " mov r3, #0x21\n" - " bl sub_802BBD4\n" - " ldr r0, ._901 @ gTasks\n" - " lsl r4, r5, #0x2\n" - " add r4, r4, r5\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " mov r0, #0x2\n" - " strh r0, [r4, #0x8]\n" - " ldr r5, ._901 + 4 @ gUnknown_03004210\n" - " ldr r1, ._901 + 8 @ Str_821F7DA\n" - " mov r2, #0xa4\n" - " lsl r2, r2, #0x2\n" - " mov r0, #0x1d\n" - " str r0, [sp]\n" - " add r0, r5, #0\n" - " mov r3, #0x1a\n" - " bl Text_InitWindow\n" - " add r0, r5, #0\n" - " bl Text_PrintWindow8002F44\n" - " strh r6, [r4, #0xe]\n" - " mov r0, #0x0\n" - " bl debug_sub_8012B2C\n" - "._898:\n" - " add sp, sp, #0x4\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._902:\n" - " .align 2, 0\n" - "._901:\n" - " .word gTasks\n" - " .word gUnknown_03004210\n" - " .word Str_821F7DA\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_8012C08() -{ - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r8\n" - " push {r7}\n" - " add sp, sp, #0xfffffffc\n" - " add r4, r1, #0\n" - " lsl r0, r0, #0x18\n" - " lsr r6, r0, #0x18\n" - " lsl r4, r4, #0x18\n" - " lsr r4, r4, #0x18\n" - " mov r0, #0x0\n" - " mov r1, #0x9\n" - " bl debug_sub_8010A7C\n" - " ldr r7, ._905 @ gUnknown_03004210\n" - " ldr r5, ._905 + 4 @ gBattleTextBuff1\n" - " mov r0, #0x23\n" - " mov r8, r0\n" - " str r0, [sp]\n" - " add r0, r7, #0\n" - " add r1, r5, #0\n" - " mov r2, #0x90\n" - " mov r3, #0x2\n" - " bl Text_InitWindow\n" - " add r0, r7, #0\n" - " bl Text_PrintWindow8002F44\n" - " mov r0, #0x0\n" - " mov r1, #0x7\n" - " bl debug_sub_8010A7C\n" - " mov r0, #0x25\n" - " str r0, [sp]\n" - " add r0, r7, #0\n" - " add r1, r5, #0\n" - " mov r2, #0xa2\n" - " mov r3, #0x2\n" - " bl Text_InitWindow\n" - " add r0, r7, #0\n" - " bl Text_PrintWindow8002F44\n" - " mov r0, #0x0\n" - " str r0, [sp]\n" - " mov r0, #0x18\n" - " mov r1, #0x1c\n" - " mov r2, #0x1d\n" - " mov r3, #0x21\n" - " bl sub_802BBD4\n" - " cmp r4, #0\n" - " beq ._903 @cond_branch\n" - " ldr r1, ._905 + 8 @ gTasks\n" - " lsl r4, r6, #0x2\n" - " add r0, r4, r6\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r1, #0x4\n" - " strh r1, [r0, #0x8]\n" - " ldr r1, ._905 + 12 @ gUnknown_Debug_821F7F3\n" - " mov r0, r8\n" - " str r0, [sp]\n" - " add r0, r7, #0\n" - " mov r2, #0x90\n" - " mov r3, #0x2\n" - " bl Text_InitWindow\n" - " b ._904\n" - "._906:\n" - " .align 2, 0\n" - "._905:\n" - " .word gUnknown_03004210\n" - " .word gBattleTextBuff1\n" - " .word gTasks\n" - " .word gUnknown_Debug_821F7F3\n" - "._903:\n" - " ldr r1, ._907 @ gTasks\n" - " lsl r4, r6, #0x2\n" - " add r0, r4, r6\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r1, #0x3\n" - " strh r1, [r0, #0x8]\n" - " ldr r1, ._907 + 4 @ Str_821F7EA\n" - " mov r0, r8\n" - " str r0, [sp]\n" - " add r0, r7, #0\n" - " mov r2, #0x90\n" - " mov r3, #0x2\n" - " bl Text_InitWindow\n" - "._904:\n" - " add r5, r4, #0\n" - " ldr r4, ._907 + 8 @ gUnknown_03004210\n" - " add r0, r4, #0\n" - " bl Text_PrintWindow8002F44\n" - " ldr r1, ._907 + 12 @ BattleText_YesNo\n" - " mov r2, #0xa4\n" - " lsl r2, r2, #0x2\n" - " mov r0, #0x1d\n" - " str r0, [sp]\n" - " add r0, r4, #0\n" - " mov r3, #0x1a\n" - " bl Text_InitWindow\n" - " add r0, r4, #0\n" - " bl Text_PrintWindow8002F44\n" - " ldr r1, ._907 @ gTasks\n" - " add r0, r5, r6\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r1, #0x1\n" - " strh r1, [r0, #0xe]\n" - " mov r0, #0x1\n" - " bl debug_sub_8012B2C\n" - " add sp, sp, #0x4\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._908:\n" - " .align 2, 0\n" - "._907:\n" - " .word gTasks\n" - " .word Str_821F7EA\n" - " .word gUnknown_03004210\n" - " .word BattleText_YesNo\n" - "\n" - ); -} - -__attribute__((naked)) -void debug_sub_8012D10() -{ - asm( - " push {r4, r5, lr}\n" - " add sp, sp, #0xfffffffc\n" - " lsl r0, r0, #0x18\n" - " lsr r5, r0, #0x18\n" - " ldr r1, ._911 @ gTasks\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r1, #0x8\n" - " ldsh r0, [r0, r1]\n" - " cmp r0, #0x4\n" - " bls ._909 @cond_branch\n" - " b ._1067\n" - "._909:\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._911 + 4 @ \n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov pc, r0\n" - "._912:\n" - " .align 2, 0\n" - "._911:\n" - " .word gTasks\n" - " .word ._913\n" - "._913:\n" - " .word ._914\n" - " .word ._915\n" - " .word ._916\n" - " .word ._917\n" - " .word ._918\n" - "._914:\n" - " bl debug_sub_80128B4\n" - " add r0, r5, #0\n" - " bl debug_sub_8012938\n" - " ldr r4, ._920 @ gUnknown_03004210\n" - " ldr r1, ._920 + 4 @ Str_821F7BD\n" - " mov r2, #0xc8\n" - " lsl r2, r2, #0x1\n" - " mov r0, #0x23\n" - " str r0, [sp]\n" - " add r0, r4, #0\n" - " mov r3, #0x13\n" - " bl Text_InitWindow\n" - " add r0, r4, #0\n" - " bl Text_PrintWindow8002F44\n" - " ldr r1, ._920 + 8 @ gTasks\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " ldrh r1, [r0, #0x8]\n" - " add r1, r1, #0x1\n" - " strh r1, [r0, #0x8]\n" - " ldrb r0, [r0, #0xc]\n" - " b ._919\n" - "._921:\n" - " .align 2, 0\n" - "._920:\n" - " .word gUnknown_03004210\n" - " .word Str_821F7BD\n" - " .word gTasks\n" - "._915:\n" - " ldr r2, ._924 @ gMain\n" - " ldrh r1, [r2, #0x2e]\n" - " mov r0, #0x40\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._922 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._924 + 4 @ gTasks\n" - " lsl r4, r5, #0x2\n" - " add r4, r4, r5\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " ldrb r0, [r4, #0xc]\n" - " bl nullsub_8\n" - " ldrh r1, [r4, #0xc]\n" - " mov r0, #0x3\n" - " neg r0, r0\n" - " and r0, r0, r1\n" - " b ._931\n" - "._925:\n" - " .align 2, 0\n" - "._924:\n" - " .word gMain\n" - " .word gTasks\n" - "._922:\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._926 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._928 @ gTasks\n" - " lsl r4, r5, #0x2\n" - " add r4, r4, r5\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " ldrb r0, [r4, #0xc]\n" - " bl nullsub_8\n" - " ldrh r1, [r4, #0xc]\n" - " mov r0, #0x2\n" - " b ._927\n" - "._929:\n" - " .align 2, 0\n" - "._928:\n" - " .word gTasks\n" - "._926:\n" - " mov r0, #0x20\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._930 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._932 @ gTasks\n" - " lsl r4, r5, #0x2\n" - " add r4, r4, r5\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " ldrb r0, [r4, #0xc]\n" - " bl nullsub_8\n" - " ldrh r1, [r4, #0xc]\n" - " mov r0, #0x2\n" - " neg r0, r0\n" - " and r0, r0, r1\n" - " b ._931\n" - "._933:\n" - " .align 2, 0\n" - "._932:\n" - " .word gTasks\n" - "._930:\n" - " mov r0, #0x10\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._934 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._936 @ gTasks\n" - " lsl r4, r5, #0x2\n" - " add r4, r4, r5\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " ldrb r0, [r4, #0xc]\n" - " bl nullsub_8\n" - " ldrh r1, [r4, #0xc]\n" - " mov r0, #0x1\n" - "._927:\n" - " orr r0, r0, r1\n" - "._931:\n" - " strh r0, [r4, #0xc]\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - "._919:\n" - " mov r1, #0x0\n" - " bl sub_802E3E4\n" - " b ._1067\n" - "._937:\n" - " .align 2, 0\n" - "._936:\n" - " .word gTasks\n" - "._934:\n" - " ldrh r1, [r2, #0x30]\n" - " mov r4, #0x1\n" - " add r0, r4, #0\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._938 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r1, ._943 @ gTasks\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r2, #0xc\n" - " ldsh r0, [r0, r2]\n" - " cmp r0, #0x1\n" - " beq ._939 @cond_branch\n" - " cmp r0, #0x1\n" - " bgt ._940 @cond_branch\n" - " cmp r0, #0\n" - " beq ._941 @cond_branch\n" - " b ._1067\n" - "._944:\n" - " .align 2, 0\n" - "._943:\n" - " .word gTasks\n" - "._940:\n" - " cmp r0, #0x2\n" - " beq ._945 @cond_branch\n" - "._990:\n" - " cmp r0, #0x3\n" - " bne ._946 @cond_branch\n" - " b ._1014\n" - "._946:\n" - " b ._1067\n" - "._941:\n" - " ldr r1, ._952 @ gUnknown_Debug_2023B62\n" - " ldr r0, ._952 + 4 @ gCurrentMove\n" - " ldrh r0, [r0]\n" - " sub r0, r0, #0x1\n" - " add r1, r0, r1\n" - " ldrb r0, [r1]\n" - " cmp r0, #0x3f\n" - " bls ._949 @cond_branch\n" - " b ._1067\n" - "._949:\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " b ._1019\n" - "._953:\n" - " .align 2, 0\n" - "._952:\n" - " .word gUnknown_Debug_2023B62\n" - " .word gCurrentMove\n" - "._939:\n" - " mov r0, #0x1\n" - " b ._997\n" - "._945:\n" - " ldr r1, ._957 @ gCurrentMove\n" - " ldrh r2, [r1]\n" - " mov r0, #0xcd\n" - " lsl r0, r0, #0x1\n" - " cmp r2, r0\n" - " bhi ._955 @cond_branch\n" - " add r0, r2, #1\n" - "._979:\n" - " strh r0, [r1]\n" - " b ._1025\n" - "._958:\n" - " .align 2, 0\n" - "._957:\n" - " .word gCurrentMove\n" - "._955:\n" - " strh r4, [r1]\n" - " b ._1025\n" - "._938:\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._960 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r1, ._966 @ gTasks\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r1, #0xc\n" - " ldsh r0, [r0, r1]\n" - " cmp r0, #0x1\n" - " bne ._961 @cond_branch\n" - " b ._1007\n" - "._961:\n" - " cmp r0, #0x1\n" - " bgt ._963 @cond_branch\n" - " cmp r0, #0\n" - " beq ._964 @cond_branch\n" - " b ._1067\n" - "._967:\n" - " .align 2, 0\n" - "._966:\n" - " .word gTasks\n" - "._963:\n" - " cmp r0, #0x2\n" - " beq ._968 @cond_branch\n" - " b ._990\n" - "._964:\n" - " ldr r1, ._973 @ gUnknown_Debug_2023B62\n" - " ldr r0, ._973 + 4 @ gCurrentMove\n" - " ldrh r0, [r0]\n" - " sub r0, r0, #0x1\n" - " add r1, r0, r1\n" - " ldrb r0, [r1]\n" - " cmp r0, #0\n" - " bne ._970 @cond_branch\n" - " b ._1067\n" - "._970:\n" - " sub r0, r0, #0x1\n" - " strb r0, [r1]\n" - " b ._1019\n" - "._974:\n" - " .align 2, 0\n" - "._973:\n" - " .word gUnknown_Debug_2023B62\n" - " .word gCurrentMove\n" - "._968:\n" - " ldr r1, ._977 @ gCurrentMove\n" - " ldrh r0, [r1]\n" - " cmp r0, #0x1\n" - " bls ._975 @cond_branch\n" - " sub r0, r0, #0x1\n" - " b ._979\n" - "._978:\n" - " .align 2, 0\n" - "._977:\n" - " .word gCurrentMove\n" - "._975:\n" - " ldr r2, ._980 @ 0x19b\n" - " add r0, r2, #0\n" - " b ._979\n" - "._981:\n" - " .align 2, 0\n" - "._980:\n" - " .word 0x19b\n" - "._960:\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._982 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r1, ._987 @ gTasks\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r1, #0xc\n" - " ldsh r0, [r0, r1]\n" - " cmp r0, #0x1\n" - " beq ._983 @cond_branch\n" - " cmp r0, #0x1\n" - " bgt ._984 @cond_branch\n" - " cmp r0, #0\n" - " beq ._985 @cond_branch\n" - " b ._1067\n" - "._988:\n" - " .align 2, 0\n" - "._987:\n" - " .word gTasks\n" - "._984:\n" - " cmp r0, #0x2\n" - " beq ._989 @cond_branch\n" - " b ._990\n" - "._985:\n" - " ldr r3, ._995 @ gUnknown_Debug_2023B62\n" - " ldr r2, ._995 + 4 @ gCurrentMove\n" - " ldrh r0, [r2]\n" - " sub r0, r0, #0x1\n" - " add r1, r0, r3\n" - " ldrb r0, [r1]\n" - " cmp r0, #0x3f\n" - " bls ._991 @cond_branch\n" - " b ._1067\n" - "._991:\n" - " add r0, r0, #0x8\n" - " strb r0, [r1]\n" - " ldrh r0, [r2]\n" - " sub r0, r0, #0x1\n" - " add r1, r0, r3\n" - " ldrb r0, [r1]\n" - " cmp r0, #0x40\n" - " bls ._1019 @cond_branch\n" - " mov r0, #0x40\n" - " strb r0, [r1]\n" - " b ._1019\n" - "._996:\n" - " .align 2, 0\n" - "._995:\n" - " .word gUnknown_Debug_2023B62\n" - " .word gCurrentMove\n" - "._983:\n" - " mov r0, #0x1\n" - " b ._997\n" - "._989:\n" - " ldr r3, ._1000 @ gCurrentMove\n" - " ldrh r2, [r3]\n" - " add r1, r2, #0\n" - " add r1, r1, #0xa\n" - " ldr r0, ._1000 + 4 @ 0x19b\n" - " cmp r1, r0\n" - " bgt ._998 @cond_branch\n" - " strh r1, [r3]\n" - " b ._1025\n" - "._1001:\n" - " .align 2, 0\n" - "._1000:\n" - " .word gCurrentMove\n" - " .word 0x19b\n" - "._998:\n" - " ldr r1, ._1003 @ 0xfffffe70\n" - " add r0, r2, r1\n" - " strh r0, [r3]\n" - " b ._1025\n" - "._1004:\n" - " .align 2, 0\n" - "._1003:\n" - " .word 0xfffffe70\n" - "._982:\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._1005 @cond_branch\n" - " b ._1067\n" - "._1005:\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r1, ._1011 @ gTasks\n" - " lsl r0, r5, #0x2\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " mov r2, #0xc\n" - " ldsh r3, [r0, r2]\n" - " cmp r3, #0x1\n" - " beq ._1007 @cond_branch\n" - " cmp r3, #0x1\n" - " bgt ._1008 @cond_branch\n" - " cmp r3, #0\n" - " beq ._1009 @cond_branch\n" - " b ._1067\n" - "._1012:\n" - " .align 2, 0\n" - "._1011:\n" - " .word gTasks\n" - "._1008:\n" - " cmp r3, #0x2\n" - " beq ._1013 @cond_branch\n" - " cmp r3, #0x3\n" - " beq ._1014 @cond_branch\n" - " b ._1067\n" - "._1009:\n" - " ldr r1, ._1020 @ gUnknown_Debug_2023B62\n" - " ldr r0, ._1020 + 4 @ gCurrentMove\n" - " ldrh r0, [r0]\n" - " sub r0, r0, #0x1\n" - " add r2, r0, r1\n" - " ldrb r0, [r2]\n" - " add r1, r0, #0\n" - " cmp r1, #0\n" - " bne ._1016 @cond_branch\n" - " b ._1067\n" - "._1016:\n" - " cmp r1, #0x8\n" - " bls ._1018 @cond_branch\n" - " sub r0, r0, #0x8\n" - " strb r0, [r2]\n" - " b ._1019\n" - "._1021:\n" - " .align 2, 0\n" - "._1020:\n" - " .word gUnknown_Debug_2023B62\n" - " .word gCurrentMove\n" - "._1018:\n" - " strb r3, [r2]\n" - "._1019:\n" - " add r0, r5, #0\n" - " bl debug_sub_8012938\n" - " b ._1067\n" - "._1007:\n" - " mov r0, #0x1\n" - " neg r0, r0\n" - "._997:\n" - " add r1, r5, #0\n" - " bl debug_sub_8012AC0\n" - " b ._1067\n" - "._1013:\n" - " ldr r2, ._1026 @ gCurrentMove\n" - " ldrh r0, [r2]\n" - " add r1, r0, #0\n" - " sub r1, r1, #0xa\n" - " cmp r1, #0x1\n" - " ble ._1024 @cond_branch\n" - " strh r1, [r2]\n" - " b ._1025\n" - "._1027:\n" - " .align 2, 0\n" - "._1026:\n" - " .word gCurrentMove\n" - "._1024:\n" - " mov r1, #0xc8\n" - " lsl r1, r1, #0x1\n" - " add r0, r0, r1\n" - " strh r0, [r2]\n" - "._1025:\n" - " bl debug_sub_80128B4\n" - " add r0, r5, #0\n" - " bl debug_sub_8012938\n" - " add r0, r5, #0\n" - " bl debug_sub_80129F8\n" - " b ._1067\n" - "._1014:\n" - " add r0, r5, #0\n" - " mov r1, #0x0\n" - " bl debug_sub_8012B70\n" - " b ._1067\n" - "._916:\n" - " ldr r0, ._1032 @ gMain\n" - " ldrh r1, [r0, #0x2e]\n" - " mov r0, #0x40\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._1030 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._1032 + 4 @ gTasks\n" - " lsl r4, r5, #0x2\n" - " add r4, r4, r5\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " ldrb r0, [r4, #0xe]\n" - " bl debug_sub_8012B4C\n" - " mov r0, #0x0\n" - " b ._1055\n" - "._1033:\n" - " .align 2, 0\n" - "._1032:\n" - " .word gMain\n" - " .word gTasks\n" - "._1030:\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._1046 @cond_branch\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._1035 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._1037 @ gTasks\n" - " lsl r1, r5, #0x2\n" - " add r1, r1, r5\n" - " lsl r1, r1, #0x3\n" - " add r1, r1, r0\n" - " ldrb r1, [r1, #0xe]\n" - " add r0, r5, #0\n" - " bl debug_sub_8012C08\n" - " b ._1067\n" - "._1038:\n" - " .align 2, 0\n" - "._1037:\n" - " .word gTasks\n" - "._1035:\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._1039 @cond_branch\n" - " b ._1067\n" - "._1039:\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " b ._1063\n" - "._917:\n" - " ldr r0, ._1044 @ gMain\n" - " ldrh r1, [r0, #0x2e]\n" - " mov r0, #0x40\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._1042 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._1044 + 4 @ gTasks\n" - " lsl r4, r5, #0x2\n" - " add r4, r4, r5\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " ldrb r0, [r4, #0xe]\n" - " bl debug_sub_8012B4C\n" - " mov r0, #0x0\n" - " b ._1055\n" - "._1045:\n" - " .align 2, 0\n" - "._1044:\n" - " .word gMain\n" - " .word gTasks\n" - "._1042:\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._1046 @cond_branch\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._1047 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._1050 @ gTasks\n" - " lsl r1, r5, #0x2\n" - " add r1, r1, r5\n" - " lsl r1, r1, #0x3\n" - " add r1, r1, r0\n" - " mov r2, #0xe\n" - " ldsh r0, [r1, r2]\n" - " cmp r0, #0\n" - " bne ._1063 @cond_branch\n" - " ldr r1, ._1050 + 4 @ gUnknown_Debug_2023B62\n" - " ldr r2, ._1050 + 8 @ 0x19b\n" - " mov r0, #0x1f\n" - " bl debug_sub_80132C8\n" - " b ._1063\n" - "._1051:\n" - " .align 2, 0\n" - "._1050:\n" - " .word gTasks\n" - " .word gUnknown_Debug_2023B62\n" - " .word 0x19b\n" - "._1047:\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._1067 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " b ._1063\n" - "._918:\n" - " ldr r0, ._1056 @ gMain\n" - " ldrh r1, [r0, #0x2e]\n" - " mov r0, #0x40\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._1054 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._1056 + 4 @ gTasks\n" - " lsl r4, r5, #0x2\n" - " add r4, r4, r5\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " ldrb r0, [r4, #0xe]\n" - " bl debug_sub_8012B4C\n" - " mov r0, #0x0\n" - " b ._1055\n" - "._1057:\n" - " .align 2, 0\n" - "._1056:\n" - " .word gMain\n" - " .word gTasks\n" - "._1054:\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._1058 @cond_branch\n" - "._1046:\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._1060 @ gTasks\n" - " lsl r4, r5, #0x2\n" - " add r4, r4, r5\n" - " lsl r4, r4, #0x3\n" - " add r4, r4, r0\n" - " ldrb r0, [r4, #0xe]\n" - " bl debug_sub_8012B4C\n" - " mov r0, #0x1\n" - "._1055:\n" - " strh r0, [r4, #0xe]\n" - " bl debug_sub_8012B2C\n" - " b ._1067\n" - "._1061:\n" - " .align 2, 0\n" - "._1060:\n" - " .word gTasks\n" - "._1058:\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._1062 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " ldr r0, ._1065 @ gTasks\n" - " lsl r1, r5, #0x2\n" - " add r1, r1, r5\n" - " lsl r1, r1, #0x3\n" - " add r1, r1, r0\n" - " mov r2, #0xe\n" - " ldsh r0, [r1, r2]\n" - " cmp r0, #0\n" - " bne ._1063 @cond_branch\n" - " ldr r1, ._1065 + 4 @ gUnknown_Debug_2023B62\n" - " ldr r2, ._1065 + 8 @ 0x19b\n" - " mov r0, #0x1f\n" - " bl debug_sub_8013294\n" - "._1063:\n" - " add r0, r5, #0\n" - " mov r1, #0x1\n" - " bl debug_sub_8012B70\n" - " b ._1067\n" - "._1066:\n" - " .align 2, 0\n" - "._1065:\n" - " .word gTasks\n" - " .word gUnknown_Debug_2023B62\n" - " .word 0x19b\n" - "._1062:\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._1067 @cond_branch\n" - " mov r0, #0x5\n" - " bl PlaySE\n" - " add r0, r5, #0\n" - " mov r1, #0x1\n" - " bl debug_sub_8012B70\n" - "._1067:\n" - " add sp, sp, #0x4\n" - " pop {r4, r5}\n" - " pop {r0}\n" - " bx r0\n" - "\n" - ); + if (b != 0) + { + sub_802BBD4(24, 28, 29, 33, 1); + debug_sub_80128B4(); + debug_sub_8012938(taskId); + debug_sub_80129F8(taskId); + gTasks[taskId].data[0] = 1; + } + else + { + sub_802BBD4(24, 28, 29, 33, 0); + gTasks[taskId].data[0] = 2; + Text_InitWindow(&gUnknown_03004210, Str_821F7DA, 656, 26, 29); + Text_PrintWindow8002F44(&gUnknown_03004210); + gTasks[taskId].data[3] = 0; + debug_sub_8012B2C(0); + } +} + +void debug_sub_8012C08(u8 taskId, u8 b) +{ + debug_sub_8010A7C(0, 9); + Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 144, 2, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); + debug_sub_8010A7C(0, 7); + Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 162, 2, 37); + Text_PrintWindow8002F44(&gUnknown_03004210); + sub_802BBD4(24, 28, 29, 33, 0); + if (b != 0) + { + gTasks[taskId].data[0] = 4; + Text_InitWindow(&gUnknown_03004210, gUnknown_Debug_821F7F3, 144, 2, 35); + } + else + { + gTasks[taskId].data[0] = 3; + Text_InitWindow(&gUnknown_03004210, Str_821F7EA, 144, 2, 35); + } + Text_PrintWindow8002F44(&gUnknown_03004210); + Text_InitWindow(&gUnknown_03004210, BattleText_YesNo, 656, 26, 29); + Text_PrintWindow8002F44(&gUnknown_03004210); + gTasks[taskId].data[3] = 1; + debug_sub_8012B2C(1); +} + +void debug_sub_8012D10(u8 taskId) +{ + switch (gTasks[taskId].data[0]) + { + case 0: + debug_sub_80128B4(); + debug_sub_8012938(taskId); + Text_InitWindow(&gUnknown_03004210, Str_821F7BD, 400, 19, 35); + Text_PrintWindow8002F44(&gUnknown_03004210); + gTasks[taskId].data[0]++; + sub_802E3E4(gTasks[taskId].data[2], 0); + break; + case 1: + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + nullsub_8(gTasks[taskId].data[2]); + gTasks[taskId].data[2] &= ~2; + sub_802E3E4(gTasks[taskId].data[2], 0); + } + else if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + nullsub_8(gTasks[taskId].data[2]); + gTasks[taskId].data[2] |= 2; + sub_802E3E4(gTasks[taskId].data[2], 0); + } + else if (gMain.newKeys & DPAD_LEFT) + { + PlaySE(SE_SELECT); + nullsub_8(gTasks[taskId].data[2]); + gTasks[taskId].data[2] &= ~1; + sub_802E3E4(gTasks[taskId].data[2], 0); + } + else if (gMain.newKeys & DPAD_RIGHT) + { + PlaySE(SE_SELECT); + nullsub_8(gTasks[taskId].data[2]); + gTasks[taskId].data[2] |= 1; + sub_802E3E4(gTasks[taskId].data[2], 0); + } + else if (gMain.newAndRepeatedKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + switch (gTasks[taskId].data[2]) + { + case 0: + if (gUnknown_Debug_2023B62[gCurrentMove - 1] < 64) + { + gUnknown_Debug_2023B62[gCurrentMove - 1] += 1; + debug_sub_8012938(taskId); + } + break; + case 1: + debug_sub_8012AC0(1, taskId); + break; + case 2: + if (gCurrentMove < 411) + gCurrentMove++; + else + gCurrentMove = 1; + debug_sub_80128B4(); + debug_sub_8012938(taskId); + debug_sub_80129F8(taskId); + break; + case 3: + debug_sub_8012B70(taskId, 0); + break; + } + } + else if (gMain.newAndRepeatedKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + switch (gTasks[taskId].data[2]) + { + case 0: + if (gUnknown_Debug_2023B62[gCurrentMove - 1] > 0) + { + gUnknown_Debug_2023B62[gCurrentMove - 1] -= 1; + debug_sub_8012938(taskId); + } + break; + case 1: + debug_sub_8012AC0(-1, taskId); + break; + case 2: + if (gCurrentMove > 1) + gCurrentMove--; + else + gCurrentMove = 411; + debug_sub_80128B4(); + debug_sub_8012938(taskId); + debug_sub_80129F8(taskId); + break; + case 3: + debug_sub_8012B70(taskId, 0); + break; + } + } + else if (gMain.newAndRepeatedKeys & R_BUTTON) + { + PlaySE(SE_SELECT); + switch (gTasks[taskId].data[2]) + { + case 0: + if (gUnknown_Debug_2023B62[gCurrentMove - 1] < 64) + { + gUnknown_Debug_2023B62[gCurrentMove - 1] += 8; + if (gUnknown_Debug_2023B62[gCurrentMove - 1] > 64) + gUnknown_Debug_2023B62[gCurrentMove - 1] = 64; + debug_sub_8012938(taskId); + } + break; + case 1: + debug_sub_8012AC0(1, taskId); + break; + case 2: + if (gCurrentMove + 10 < 412) + gCurrentMove += 10; + else + gCurrentMove -= 400; + debug_sub_80128B4(); + debug_sub_8012938(taskId); + debug_sub_80129F8(taskId); + break; + case 3: + debug_sub_8012B70(taskId, 0); + break; + } + } + else if (gMain.newAndRepeatedKeys & L_BUTTON) + { + PlaySE(SE_SELECT); + switch (gTasks[taskId].data[2]) + { + case 0: + if (gUnknown_Debug_2023B62[gCurrentMove - 1] > 0) + { + if (gUnknown_Debug_2023B62[gCurrentMove - 1] > 8) + gUnknown_Debug_2023B62[gCurrentMove - 1] -= 8; + else + gUnknown_Debug_2023B62[gCurrentMove - 1] = 0; + debug_sub_8012938(taskId); + } + break; + case 1: + debug_sub_8012AC0(-1, taskId); + break; + case 2: + if (gCurrentMove - 10 > 1) + gCurrentMove -= 10; + else + gCurrentMove += 400; + debug_sub_80128B4(); + debug_sub_8012938(taskId); + debug_sub_80129F8(taskId); + break; + case 3: + debug_sub_8012B70(taskId, 0); + break; + } + } + break; + case 2: + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + debug_sub_8012B4C(gTasks[taskId].data[3]); + gTasks[taskId].data[3] = 0; + debug_sub_8012B2C(0); + } + else if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + debug_sub_8012B4C(gTasks[taskId].data[3]); + gTasks[taskId].data[3] = 1; + debug_sub_8012B2C(1); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + debug_sub_8012C08(taskId, gTasks[taskId].data[3]); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + asm(""); + debug_sub_8012B70(taskId, 1); + } + return; + case 3: + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + debug_sub_8012B4C(gTasks[taskId].data[3]); + gTasks[taskId].data[3] = 0; + debug_sub_8012B2C(0); + } + else if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + debug_sub_8012B4C(gTasks[taskId].data[3]); + gTasks[taskId].data[3] = 1; + debug_sub_8012B2C(1); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gTasks[taskId].data[3] == 0) + debug_sub_80132C8(31, gUnknown_Debug_2023B62, 411); + debug_sub_8012B70(taskId, 1); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + debug_sub_8012B70(taskId, 1); + } + break; + case 4: + if (gMain.newKeys & DPAD_UP) + { + PlaySE(SE_SELECT); + debug_sub_8012B4C(gTasks[taskId].data[3]); + gTasks[taskId].data[3] = 0; + debug_sub_8012B2C(0); + } + else if (gMain.newKeys & DPAD_DOWN) + { + PlaySE(SE_SELECT); + debug_sub_8012B4C(gTasks[taskId].data[3]); + gTasks[taskId].data[3] = 1; + debug_sub_8012B2C(1); + } + else if (gMain.newKeys & A_BUTTON) + { + PlaySE(SE_SELECT); + if (gTasks[taskId].data[3] == 0) + debug_sub_8013294(31, gUnknown_Debug_2023B62, 411); + debug_sub_8012B70(taskId, 1); + } + else if (gMain.newKeys & B_BUTTON) + { + PlaySE(SE_SELECT); + debug_sub_8012B70(taskId, 1); + } + break; + } } u8 debug_sub_8013240(void) @@ -6769,683 +5868,103 @@ void dp11b_obj_free(u8 a, u8 b) } else { - if (!ewram17810[a].unk0_2) - return; - r4 = gSprites[ewram17810[a].unk3].data[3]; - DestroySprite(&gSprites[ewram17810[a].unk3]); - ewram17810[a].unk0_2 = 0; - } - gSprites[r4].pos2.x = 0; - gSprites[r4].pos2.y = 0; -} - -void objc_dp11b_pingpong(struct Sprite *sprite) -{ - u8 spriteId = sprite->data[3]; - s32 var; - - if (sprite->data[4] == 1) - var = sprite->data[0]; - else - var = sprite->data[0]; - - gSprites[spriteId].pos2.y = Sin(var, sprite->data[2]) + sprite->data[2]; - sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF; -} - -void nullsub_41(void) -{ -} - -void sub_8010800(void) -{ - sub_8010874(); - gBattleCommunication[1] = 0; - gBattleMainFunc = bc_8012FAC; -} - -#if DEBUG -__attribute__((naked)) -void debug_sub_80138CC() -{ - asm( - " push {lr}\n" - " ldr r0, ._1167 @ gActiveBank\n" - " ldrb r0, [r0]\n" - " bl GetBankSide\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " beq ._1163 @cond_branch\n" - " b ._1186\n" - "._1163:\n" - " ldr r1, ._1167 + 4 @ gSharedMem\n" - " ldr r2, ._1167 + 8 @ 0x160fd\n" - " add r0, r1, r2\n" - " ldrb r0, [r0]\n" - " add r2, r1, #0\n" - " cmp r0, #0x4\n" - " bls ._1165 @cond_branch\n" - " b ._1186\n" - "._1165:\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._1167 + 12 @ \n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov pc, r0\n" - "._1168:\n" - " .align 2, 0\n" - "._1167:\n" - " .word gActiveBank\n" - " .word gSharedMem\n" - " .word 0x160fd\n" - " .word ._1169\n" - "._1169:\n" - " .word ._1170\n" - " .word ._1171\n" - " .word ._1172\n" - " .word ._1173\n" - " .word ._1174\n" - "._1170:\n" - " ldr r1, ._1177 @ gBattleBankFunc\n" - " ldr r0, ._1177 + 4 @ gActiveBank\n" - " ldrb r0, [r0]\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r1\n" - " ldr r1, [r0]\n" - " ldr r0, ._1177 + 8 @ sub_802C098\n" - " cmp r1, r0\n" - " bne ._1186 @cond_branch\n" - " ldr r0, ._1177 + 12 @ 0x160fd\n" - " add r1, r2, r0\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " b ._1187\n" - "._1178:\n" - " .align 2, 0\n" - "._1177:\n" - " .word gBattleBankFunc\n" - " .word gActiveBank\n" - " .word sub_802C098+1\n" - " .word 0x160fd\n" - "._1171:\n" - " ldr r1, ._1180 @ gMain\n" - " mov r0, #0x1\n" - " strh r0, [r1, #0x2c]\n" - " strh r0, [r1, #0x2e]\n" - " ldr r0, ._1180 + 4 @ 0x160fd\n" - " add r1, r2, r0\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " ldr r0, ._1180 + 8 @ 0x160fe\n" - " add r1, r2, r0\n" - " mov r0, #0x80\n" - " b ._1187\n" - "._1181:\n" - " .align 2, 0\n" - "._1180:\n" - " .word gMain\n" - " .word 0x160fd\n" - " .word 0x160fe\n" - "._1172:\n" - " ldr r0, ._1184 @ 0x160fe\n" - " add r3, r2, r0\n" - " ldrb r0, [r3]\n" - " sub r0, r0, #0x1\n" - " strb r0, [r3]\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._1186 @cond_branch\n" - " ldr r1, ._1184 + 4 @ gMain\n" - " mov r0, #0x1\n" - " strh r0, [r1, #0x2c]\n" - " strh r0, [r1, #0x2e]\n" - " ldr r0, ._1184 + 8 @ 0x160fd\n" - " add r1, r2, r0\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " strb r0, [r1]\n" - " mov r0, #0x80\n" - " strb r0, [r3]\n" - " b ._1186\n" - "._1185:\n" - " .align 2, 0\n" - "._1184:\n" - " .word 0x160fe\n" - " .word gMain\n" - " .word 0x160fd\n" - "._1173:\n" - " ldr r0, ._1188 @ 0x160fe\n" - " add r1, r2, r0\n" - " ldrb r0, [r1]\n" - " sub r0, r0, #0x1\n" - " strb r0, [r1]\n" - " lsl r0, r0, #0x18\n" - " cmp r0, #0\n" - " bne ._1186 @cond_branch\n" - " ldr r1, ._1188 + 4 @ gMain\n" - " mov r0, #0x1\n" - " strh r0, [r1, #0x2c]\n" - " strh r0, [r1, #0x2e]\n" - " ldr r0, ._1188 + 8 @ 0x160fd\n" - " add r1, r2, r0\n" - " ldrb r0, [r1]\n" - " add r0, r0, #0x1\n" - " b ._1187\n" - "._1189:\n" - " .align 2, 0\n" - "._1188:\n" - " .word 0x160fe\n" - " .word gMain\n" - " .word 0x160fd\n" - "._1174:\n" - " ldr r0, ._1190 @ 0x160fd\n" - " add r1, r2, r0\n" - " mov r0, #0x0\n" - "._1187:\n" - " strb r0, [r1]\n" - "._1186:\n" - " pop {r0}\n" - " bx r0\n" - "._1191:\n" - " .align 2, 0\n" - "._1190:\n" - " .word 0x160fd\n" - "\n" - ); + if (!ewram17810[a].unk0_2) + return; + r4 = gSprites[ewram17810[a].unk3].data[3]; + DestroySprite(&gSprites[ewram17810[a].unk3]); + ewram17810[a].unk0_2 = 0; + } + gSprites[r4].pos2.x = 0; + gSprites[r4].pos2.y = 0; } -__attribute__((naked)) -void debug_sub_80139E4() +void objc_dp11b_pingpong(struct Sprite *sprite) { - asm( - " push {r4, r5, lr}\n" - " ldr r0, ._1198 @ gUnknown_02023A14_50\n" - " ldrb r1, [r0]\n" - " mov r0, #0x80\n" - " and r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r4, r0, #0x18\n" - " cmp r4, #0\n" - " beq ._1192 @cond_branch\n" - " ldr r2, ._1198 + 4 @ gActiveBank\n" - " mov r0, #0x0\n" - " strb r0, [r2]\n" - " ldr r1, ._1198 + 8 @ gNoOfAllBanks\n" - " ldrb r0, [r1]\n" - " cmp r0, #0\n" - " beq ._1193 @cond_branch\n" - " add r4, r2, #0\n" - " add r5, r1, #0\n" - "._1194:\n" - " bl debug_sub_80138CC\n" - " ldrb r0, [r4]\n" - " add r0, r0, #0x1\n" - " strb r0, [r4]\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldrb r1, [r5]\n" - " cmp r0, r1\n" - " bcc ._1194 @cond_branch\n" - "._1193:\n" - " ldr r0, ._1198 + 12 @ gBattleMainFunc\n" - " ldr r0, [r0]\n" - " bl _call_via_r0\n" - " ldr r1, ._1198 + 4 @ gActiveBank\n" - " mov r0, #0x0\n" - " strb r0, [r1]\n" - " ldr r0, ._1198 + 8 @ gNoOfAllBanks\n" - " ldrb r0, [r0]\n" - " cmp r0, #0\n" - " beq ._1200 @cond_branch\n" - " ldr r5, ._1198 + 16 @ gBattleBankFunc\n" - " add r4, r1, #0\n" - "._1196:\n" - " ldrb r0, [r4]\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r5\n" - " ldr r0, [r0]\n" - " bl _call_via_r0\n" - " ldrb r0, [r4]\n" - " add r0, r0, #0x1\n" - " strb r0, [r4]\n" - " ldr r1, ._1198 + 8 @ gNoOfAllBanks\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldrb r1, [r1]\n" - " cmp r0, r1\n" - " bcc ._1196 @cond_branch\n" - " b ._1200\n" - "._1199:\n" - " .align 2, 0\n" - "._1198:\n" - " .word gUnknown_02023A14_50\n" - " .word gActiveBank\n" - " .word gNoOfAllBanks\n" - " .word gBattleMainFunc\n" - " .word gBattleBankFunc\n" - "._1192:\n" - " ldr r0, ._1202 @ gBattleMainFunc\n" - " ldr r0, [r0]\n" - " bl _call_via_r0\n" - " ldr r1, ._1202 + 4 @ gActiveBank\n" - " strb r4, [r1]\n" - " ldr r0, ._1202 + 8 @ gNoOfAllBanks\n" - " ldrb r0, [r0]\n" - " cmp r4, r0\n" - " bcs ._1200 @cond_branch\n" - " ldr r5, ._1202 + 12 @ gBattleBankFunc\n" - " add r4, r1, #0\n" - "._1201:\n" - " ldrb r0, [r4]\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r5\n" - " ldr r0, [r0]\n" - " bl _call_via_r0\n" - " ldrb r0, [r4]\n" - " add r0, r0, #0x1\n" - " strb r0, [r4]\n" - " ldr r1, ._1202 + 8 @ gNoOfAllBanks\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldrb r1, [r1]\n" - " cmp r0, r1\n" - " bcc ._1201 @cond_branch\n" - "._1200:\n" - " pop {r4, r5}\n" - " pop {r0}\n" - " bx r0\n" - "._1203:\n" - " .align 2, 0\n" - "._1202:\n" - " .word gBattleMainFunc\n" - " .word gActiveBank\n" - " .word gNoOfAllBanks\n" - " .word gBattleBankFunc\n" - "\n" - ); + u8 spriteId = sprite->data[3]; + s32 var; + + if (sprite->data[4] == 1) + var = sprite->data[0]; + else + var = sprite->data[0]; + + gSprites[spriteId].pos2.y = Sin(var, sprite->data[2]) + sprite->data[2]; + sprite->data[0] = (sprite->data[0] + sprite->data[1]) & 0xFF; } -__attribute__((naked)) -void sub_8010874() +void nullsub_41(void) { - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, sl\n" - " mov r6, r9\n" - " mov r5, r8\n" - " push {r5, r6, r7}\n" - " mov r0, #0x0\n" - " bl TurnValuesCleanUp\n" - " bl SpecialStatusesClear\n" - " mov r2, #0x0\n" - " mov r3, #0x0\n" - " ldr r0, ._1215 @ gUnknown_02024C4C\n" - " mov sl, r0\n" - " ldr r1, ._1215 + 4 @ gLastHitByType\n" - " mov r9, r1\n" - " ldr r4, ._1215 + 8 @ gLastLandedMoves\n" - " mov r8, r4\n" - " ldr r0, ._1215 + 12 @ gLastUsedMove\n" - " mov ip, r0\n" - " ldr r4, ._1215 + 16 @ gDisableStructs\n" - " mov r5, #0x0\n" - " ldr r7, ._1215 + 20 @ gUnknown_02024C2C\n" - " ldr r6, ._1215 + 24 @ gLockedMoves\n" - "._1205:\n" - " ldr r0, ._1215 + 28 @ gStatuses3\n" - " add r0, r5, r0\n" - " str r3, [r0]\n" - " mov r1, #0x0\n" - "._1204:\n" - " add r0, r4, r1\n" - " strb r3, [r0]\n" - " add r1, r1, #0x1\n" - " cmp r1, #0x1b\n" - " bls ._1204 @cond_branch\n" - " mov r0, #0x2\n" - " strb r0, [r4, #0x16]\n" - " ldr r1, ._1215 + 32 @ gUnknown_02024C70\n" - " add r0, r2, r1\n" - " strb r3, [r0]\n" - " mov r0, ip\n" - " strh r3, [r0]\n" - " mov r1, r8\n" - " strh r3, [r1]\n" - " mov r0, r9\n" - " strh r3, [r0]\n" - " mov r1, sl\n" - " strh r3, [r1]\n" - " ldr r0, ._1215 + 36 @ gUnknown_02024C5C\n" - " add r1, r2, r0\n" - " mov r0, #0xff\n" - " strb r0, [r1]\n" - " strh r3, [r6]\n" - " strh r3, [r7]\n" - " ldr r1, ._1215 + 40 @ gSharedMem\n" - " add r0, r5, r1\n" - " str r3, [r0]\n" - " mov r0, #0x2\n" - " add sl, sl, r0\n" - " add r9, r9, r0\n" - " add r8, r8, r0\n" - " add ip, ip, r0\n" - " add r4, r4, #0x1c\n" - " add r5, r5, #0x4\n" - " add r7, r7, #0x2\n" - " add r6, r6, #0x2\n" - " add r2, r2, #0x1\n" - " cmp r2, #0x3\n" - " ble ._1205 @cond_branch\n" - " mov r5, #0x0\n" - " ldr r3, ._1215 + 44 @ gSideTimers\n" - " ldr r4, ._1215 + 48 @ gSideAffecting\n" - " mov r2, #0x1\n" - "._1207:\n" - " strh r5, [r4]\n" - " mov r1, #0x0\n" - "._1206:\n" - " add r0, r3, r1\n" - " strb r5, [r0]\n" - " add r1, r1, #0x1\n" - " cmp r1, #0xb\n" - " bls ._1206 @cond_branch\n" - " add r3, r3, #0xc\n" - " add r4, r4, #0x2\n" - " sub r2, r2, #0x1\n" - " cmp r2, #0\n" - " bge ._1207 @cond_branch\n" - " mov r1, #0x0\n" - " ldr r2, ._1215 + 52 @ gBankAttacker\n" - " strb r1, [r2]\n" - " ldr r3, ._1215 + 56 @ gBankTarget\n" - " strb r1, [r3]\n" - " ldr r4, ._1215 + 60 @ gBattleWeather\n" - " strh r1, [r4]\n" - " ldr r1, ._1215 + 64 @ gWishFutureKnock\n" - " mov r2, #0x0\n" - " mov r3, #0x0\n" - "._1208:\n" - " add r0, r1, r2\n" - " strb r3, [r0]\n" - " add r2, r2, #0x1\n" - " cmp r2, #0x2b\n" - " bls ._1208 @cond_branch\n" - " mov r0, #0x0\n" - " ldr r1, ._1215 + 68 @ gHitMarker\n" - " str r0, [r1]\n" - " ldr r2, ._1215 + 72 @ gBattleTypeFlags\n" - " ldrh r1, [r2]\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._1210 @cond_branch\n" - " ldr r3, ._1215 + 76 @ gSaveBlock2\n" - " ldrb r1, [r3, #0x15]\n" - " mov r0, #0x4\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._1210 @cond_branch\n" - " mov r0, #0x80\n" - " ldr r4, ._1215 + 68 @ gHitMarker\n" - " str r0, [r4]\n" - "._1210:\n" - " ldr r1, ._1215 + 76 @ gSaveBlock2\n" - " ldrb r0, [r1, #0x15]\n" - " lsl r0, r0, #0x1e\n" - " lsr r0, r0, #0x1f\n" - " ldr r3, ._1215 + 80 @ gSharedMem\n" - " ldr r4, ._1215 + 84 @ 0x16084\n" - " add r2, r3, r4\n" - " mov r1, #0x0\n" - " strb r0, [r2]\n" - " ldr r0, ._1215 + 88 @ gMultiHitCounter\n" - " strb r1, [r0]\n" - " ldr r2, ._1215 + 92 @ gBattleOutcome\n" - " strb r1, [r2]\n" - " ldr r3, ._1215 + 96 @ gBattleExecBuffer\n" - " str r1, [r3]\n" - " mov r2, #0x0\n" - " ldr r4, ._1215 + 100@ gPaydayMoney\n" - " strh r1, [r4]\n" - " ldr r1, ._1215 + 80 @ gSharedMem\n" - " ldr r3, ._1215 + 104@ 0x17130\n" - " add r0, r1, r3\n" - " strb r2, [r0]\n" - " ldr r4, ._1215 + 108@ 0x17160\n" - " add r0, r1, r4\n" - " strb r2, [r0]\n" - " ldr r1, ._1215 + 112@ gBattleCommunication\n" - " mov r2, #0x0\n" - " add r0, r1, #7\n" - "._1211:\n" - " strb r2, [r0]\n" - " sub r0, r0, #0x1\n" - " cmp r0, r1\n" - " bge ._1211 @cond_branch\n" - " mov r5, #0x0\n" - " ldr r0, ._1215 + 116@ gPauseCounterBattle\n" - " strh r5, [r0]\n" - " mov r0, #0x0\n" - " ldr r1, ._1215 + 120@ gBattleMoveDamage\n" - " str r0, [r1]\n" - " ldr r2, ._1215 + 124@ gUnknown_02024DE8\n" - " strh r0, [r2]\n" - " ldr r4, ._1215 + 80 @ gSharedMem\n" - " ldr r3, ._1215 + 128@ 0x16002\n" - " add r0, r4, r3\n" - " strb r5, [r0]\n" - " ldr r1, ._1215 + 132@ 0x160a1\n" - " add r0, r4, r1\n" - " strb r5, [r0]\n" - " ldr r2, ._1215 + 136@ gLeveledUpInBattle\n" - " strb r5, [r2]\n" - " ldr r3, ._1215 + 140@ gAbsentBankFlags\n" - " strb r5, [r3]\n" - " sub r1, r1, #0x29\n" - " add r0, r4, r1\n" - " strb r5, [r0]\n" - " ldr r2, ._1215 + 144@ 0x16086\n" - " add r0, r4, r2\n" - " strb r5, [r0]\n" - " ldr r3, ._1215 + 148@ 0x16087\n" - " add r0, r4, r3\n" - " strb r5, [r0]\n" - " ldr r0, ._1215 + 152@ gEnemyParty\n" - " mov r1, #0xb\n" - " bl GetMonData\n" - " ldr r2, ._1215 + 156@ gBaseStats\n" - " lsl r1, r0, #0x3\n" - " sub r1, r1, r0\n" - " lsl r1, r1, #0x2\n" - " add r1, r1, r2\n" - " ldrb r1, [r1, #0x8]\n" - " mov r0, #0x64\n" - " mul r0, r0, r1\n" - " ldr r1, ._1215 + 160@ 0x4fb\n" - " bl __divsi3\n" - " ldr r2, ._1215 + 164@ 0x16089\n" - " add r1, r4, r2\n" - " strb r0, [r1]\n" - " ldr r3, ._1215 + 168@ 0x16088\n" - " add r1, r4, r3\n" - " mov r0, #0x3\n" - " strb r0, [r1]\n" - " ldr r1, ._1215 + 172@ 0x1601b\n" - " add r0, r4, r1\n" - " strb r5, [r0]\n" - " sub r2, r2, #0x33\n" - " add r1, r4, r2\n" - " mov r0, #0x1\n" - " strb r0, [r1]\n" - " mov r2, #0x0\n" - " mov r1, #0x0\n" - "._1212:\n" - " ldr r3, ._1215 + 176@ 0x160ac\n" - " add r0, r2, r3\n" - " add r0, r0, r4\n" - " strb r1, [r0]\n" - " add r3, r3, #0x20\n" - " add r0, r2, r3\n" - " add r0, r0, r4\n" - " strb r1, [r0]\n" - " add r3, r3, #0x1c\n" - " add r0, r2, r3\n" - " add r0, r0, r4\n" - " strb r1, [r0]\n" - " add r3, r3, #0x8\n" - " add r0, r2, r3\n" - " add r0, r0, r4\n" - " strb r1, [r0]\n" - " add r3, r3, #0x10\n" - " add r0, r2, r3\n" - " add r0, r0, r4\n" - " strb r1, [r0]\n" - " add r3, r3, #0x8\n" - " add r0, r2, r3\n" - " add r0, r0, r4\n" - " strb r1, [r0]\n" - " add r2, r2, #0x1\n" - " cmp r2, #0x7\n" - " ble ._1212 @cond_branch\n" - " ldr r4, ._1215 + 80 @ gSharedMem\n" - " ldr r1, ._1215 + 180@ 0x160c8\n" - " add r0, r4, r1\n" - " mov r2, #0x0\n" - " mov r1, #0x6\n" - " strb r1, [r0]\n" - " sub r3, r3, #0x3f\n" - " add r0, r4, r3\n" - " strb r1, [r0]\n" - " ldr r1, ._1215 + 184@ 0x16113\n" - " add r0, r4, r1\n" - " strb r2, [r0]\n" - " ldr r3, ._1215 + 188@ gBattleResults\n" - " mov r1, #0x0\n" - " mov r2, #0xa\n" - " add r0, r3, #0\n" - " add r0, r0, #0x40\n" - "._1213:\n" - " strb r1, [r0]\n" - " sub r0, r0, #0x1\n" - " sub r2, r2, #0x1\n" - " cmp r2, #0\n" - " bge ._1213 @cond_branch\n" - " mov r1, #0x0\n" - " strb r1, [r3, #0x13]\n" - " strb r1, [r3]\n" - " strb r1, [r3, #0x1]\n" - " strb r1, [r3, #0x2]\n" - " strb r1, [r3, #0x3]\n" - " strb r1, [r3, #0x4]\n" - " ldrb r2, [r3, #0x5]\n" - " mov r0, #0x2\n" - " neg r0, r0\n" - " and r0, r0, r2\n" - " mov r2, #0x3\n" - " neg r2, r2\n" - " and r0, r0, r2\n" - " strb r0, [r3, #0x5]\n" - " strh r1, [r3, #0x20]\n" - " strh r1, [r3, #0x22]\n" - " strh r1, [r3, #0x24]\n" - " strh r1, [r3, #0x6]\n" - " strh r1, [r3, #0x26]\n" - " strh r1, [r3, #0x28]\n" - " mov r2, #0x0\n" - " add r5, r3, #0\n" - " add r5, r5, #0x8\n" - " mov r4, #0x0\n" - " add r1, r3, #0\n" - " add r1, r1, #0x14\n" - "._1214:\n" - " add r0, r2, r5\n" - " strb r4, [r0]\n" - " strb r4, [r1]\n" - " strb r4, [r1, #0x16]\n" - " add r1, r1, #0x1\n" - " add r2, r2, #0x1\n" - " cmp r2, #0x9\n" - " ble ._1214 @cond_branch\n" - " ldr r2, ._1215 + 80 @ gSharedMem\n" - " ldr r3, ._1215 + 192@ 0x1609e\n" - " add r0, r2, r3\n" - " mov r1, #0x0\n" - " strb r1, [r0]\n" - " ldr r4, ._1215 + 196@ 0x1609f\n" - " add r0, r2, r4\n" - " strb r1, [r0]\n" - " pop {r3, r4, r5}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " mov sl, r5\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._1216:\n" - " .align 2, 0\n" - "._1215:\n" - " .word gUnknown_02024C4C\n" - " .word gLastHitByType\n" - " .word gLastLandedMoves\n" - " .word gLastUsedMove\n" - " .word gDisableStructs\n" - " .word gUnknown_02024C2C\n" - " .word gLockedMoves\n" - " .word gStatuses3\n" - " .word gUnknown_02024C70\n" - " .word gUnknown_02024C5C\n" - " .word gSharedMem+0x17100\n" - " .word gSideTimers\n" - " .word gSideAffecting\n" - " .word gBankAttacker\n" - " .word gBankTarget\n" - " .word gBattleWeather\n" - " .word gWishFutureKnock\n" - " .word gHitMarker\n" - " .word gBattleTypeFlags\n" - " .word gSaveBlock2\n" - " .word gSharedMem\n" - " .word 0x16084\n" - " .word gMultiHitCounter\n" - " .word gBattleOutcome\n" - " .word gBattleExecBuffer\n" - " .word gPaydayMoney\n" - " .word 0x17130\n" - " .word 0x17160\n" - " .word gBattleCommunication\n" - " .word gPauseCounterBattle\n" - " .word gBattleMoveDamage\n" - " .word gUnknown_02024DE8\n" - " .word 0x16002\n" - " .word 0x160a1\n" - " .word gLeveledUpInBattle\n" - " .word gAbsentBankFlags\n" - " .word 0x16086\n" - " .word 0x16087\n" - " .word gEnemyParty\n" - " .word gBaseStats\n" - " .word 0x4fb\n" - " .word 0x16089\n" - " .word 0x16088\n" - " .word 0x1601b\n" - " .word 0x160ac\n" - " .word 0x160c8\n" - " .word 0x16113\n" - " .word gBattleResults\n" - " .word 0x1609e\n" - " .word 0x1609f\n" - "\n" - ); } -#else -void sub_8010824(void) +void sub_8010800(void) { - gBattleMainFunc(); + sub_8010874(); + gBattleCommunication[1] = 0; + gBattleMainFunc = bc_8012FAC; +} - for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) - gBattleBankFunc[gActiveBank](); +#if DEBUG +void debug_sub_80138CC(void) +{ + if (GetBankSide(gActiveBank) == 0) + { + switch (gSharedMem[0x160FD]) + { + case 0: + if (gBattleBankFunc[gActiveBank] == sub_802C098) + gSharedMem[0x160FD]++; + break; + case 1: + gMain.heldKeys = A_BUTTON; + gMain.newKeys = A_BUTTON; + gSharedMem[0x160FD]++; + gSharedMem[0x160FE] = 0x80; + break; + case 2: + gSharedMem[0x160FE]--; + if (gSharedMem[0x160FE] == 0) + { + gMain.heldKeys = A_BUTTON; + gMain.newKeys = A_BUTTON; + gSharedMem[0x160FD]++; + gSharedMem[0x160FE] = 0x80; + } + break; + case 3: + gSharedMem[0x160FE]--; + if (gSharedMem[0x160FE] == 0) + { + gMain.heldKeys = A_BUTTON; + gMain.newKeys = A_BUTTON; + gSharedMem[0x160FD]++; + } + break; + case 4: + gSharedMem[0x160FD] = 0; + break; + } + } +} +#endif + +void sub_8010824(void) +{ +#if DEBUG + if (gUnknown_02023A14_50 & 0x80) + { + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + debug_sub_80138CC(); + gBattleMainFunc(); + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + gBattleBankFunc[gActiveBank](); + } + else +#endif + { + gBattleMainFunc(); + for (gActiveBank = 0; gActiveBank < gNoOfAllBanks; gActiveBank++) + gBattleBankFunc[gActiveBank](); + } } void sub_8010874(void) @@ -7548,8 +6067,11 @@ void sub_8010874(void) gBattleResults.pokeString2[i] = 0; gBattleResults.caughtNick[i] = 0; } -} +#if DEBUG + gSharedMem[0x1609E] = 0; + gSharedMem[0x1609F] = 0; #endif +} void SwitchInClearSetData(void) { @@ -9936,6 +8458,351 @@ u8 GetWhoStrikesFirst(u8 bank1, u8 bank2, bool8 ignoreMovePriorities) return strikesFirst; } +// The debug version should be identical, but has a strange register swap, and +// seems to be affected by other functions, which is bizarre. +#if DEBUG +__attribute__((naked)) +void SetActionsAndBanksTurnOrder(void) +{ + asm("\ + push {r4, r5, r6, r7, lr}\n\ + mov r7, sl\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5, r6, r7}\n\ + mov r3, #0x0\n\ + ldr r0, ._L1550\n\ + ldrh r1, [r0]\n\ + mov r0, #0x80\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._L1499 @cond_branch\n\ + ldr r0, ._L1550+0x4\n\ + strb r3, [r0]\n\ + ldr r4, ._L1550+0x8\n\ + mov r8, r0\n\ + ldrb r0, [r4]\n\ + cmp r3, r0\n\ + bcc ._LCB12758\n\ + b ._L1505 @long jump\n\ +._LCB12758:\n\ + ldr r7, ._L1550+0xc\n\ + ldr r6, ._L1550+0x10\n\ + mov r2, r8\n\ + ldr r5, ._L1550+0x14\n\ +._L1503:\n\ + add r1, r3, r7\n\ + ldrb r0, [r2]\n\ + add r0, r0, r6\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + add r1, r3, r5\n\ + ldrb r0, [r2]\n\ + strb r0, [r1]\n\ + add r3, r3, #0x1\n\ + ldrb r0, [r2]\n\ + add r0, r0, #0x1\n\ + strb r0, [r2]\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldrb r1, [r4]\n\ + cmp r0, r1\n\ + bcc ._L1503 @cond_branch\n\ + b ._L1505\n\ +._L1551:\n\ + .align 2, 0\n\ +._L1550:\n\ + .word gBattleTypeFlags\n\ + .word gActiveBank\n\ + .word gNoOfAllBanks\n\ + .word gActionsByTurnOrder\n\ + .word gActionForBanks\n\ + .word gBanksByTurnOrder\n\ +._L1499:\n\ + mov r0, #0x2\n\ + and r0, r0, r1\n\ + cmp r0, #0\n\ + beq ._L1506 @cond_branch\n\ + ldr r0, ._L1552\n\ + strb r3, [r0]\n\ + ldr r1, ._L1552+0x4\n\ + mov r8, r0\n\ + add r2, r1, #0\n\ + ldrb r2, [r2]\n\ + cmp r3, r2\n\ + bcs ._L1513 @cond_branch\n\ + ldr r0, ._L1552+0x8\n\ + ldrb r1, [r0]\n\ + add r4, r0, #0\n\ + cmp r1, #0x3\n\ + beq ._L1548 @cond_branch\n\ +._L1509:\n\ + mov r7, r8\n\ + ldrb r0, [r7]\n\ + add r0, r0, #0x1\n\ + strb r0, [r7]\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldr r1, ._L1552+0x4\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcs ._L1513 @cond_branch\n\ + ldrb r0, [r7]\n\ + add r0, r0, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x3\n\ + bne ._L1509 @cond_branch\n\ + b ._L1548\n\ +._L1553:\n\ + .align 2, 0\n\ +._L1552:\n\ + .word gActiveBank\n\ + .word gNoOfAllBanks\n\ + .word gActionForBanks\n\ +._L1506:\n\ + ldr r0, ._L1554\n\ + ldrb r0, [r0]\n\ + ldr r2, ._L1554+0x4\n\ + mov r8, r2\n\ + cmp r0, #0x3\n\ + bne ._L1513 @cond_branch\n\ + strb r3, [r2]\n\ +._L1548:\n\ + mov r3, #0x5\n\ +._L1513:\n\ + cmp r3, #0x5\n\ + bne ._L1515 @cond_branch\n\ + ldr r6, ._L1554+0x8\n\ + ldr r1, ._L1554\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + add r0, r0, r1\n\ + ldrb r0, [r0]\n\ + strb r0, [r6]\n\ + ldr r2, ._L1554+0xc\n\ + ldrb r0, [r3]\n\ + strb r0, [r2]\n\ + mov r3, #0x1\n\ + mov r5, #0x0\n\ + add r4, r1, #0\n\ + ldr r7, ._L1554+0x10\n\ + mov r9, r7\n\ + ldr r0, ._L1554+0x14\n\ + mov ip, r0\n\ + ldr r1, ._L1554+0x18\n\ + mov sl, r1\n\ + ldr r7, ._L1554+0x1c\n\ + ldrb r7, [r7]\n\ + cmp r5, r7\n\ + bge ._L1517 @cond_branch\n\ + add r7, r6, #0\n\ + add r6, r4, #0\n\ + add r4, r2, #0\n\ + ldr r2, ._L1554+0x1c\n\ +._L1519:\n\ + mov r0, r8\n\ + ldrb r0, [r0]\n\ + cmp r5, r0\n\ + beq ._L1518 @cond_branch\n\ + add r1, r3, r7\n\ + add r0, r5, r6\n\ + ldrb r0, [r0]\n\ + strb r0, [r1]\n\ + add r0, r3, r4\n\ + strb r5, [r0]\n\ + add r3, r3, #0x1\n\ +._L1518:\n\ + add r5, r5, #0x1\n\ + ldrb r1, [r2]\n\ + cmp r5, r1\n\ + blt ._L1519 @cond_branch\n\ +._L1517:\n\ + mov r2, ip\n\ + mov r3, r9\n\ + str r2, [r3]\n\ + ldr r1, ._L1554+0x20\n\ + add r1, r1, sl\n\ + mov r0, #0x0\n\ + strb r0, [r1]\n\ + b ._L1498\n\ +._L1555:\n\ + .align 2, 0\n\ +._L1554:\n\ + .word gActionForBanks\n\ + .word gActiveBank\n\ + .word gActionsByTurnOrder\n\ + .word gBanksByTurnOrder\n\ + .word gBattleMainFunc\n\ + .word CheckFocusPunch_ClearVarsBeforeTurnStarts\n\ + .word gSharedMem\n\ + .word gNoOfAllBanks\n\ + .word 0x1601d\n\ +._L1515:\n\ + mov r0, #0x0\n\ + mov r7, r8\n\ + strb r0, [r7]\n\ + ldr r1, ._L1556\n\ + ldrb r0, [r1]\n\ + cmp r0, #0\n\ + beq ._L1524 @cond_branch\n\ + ldr r6, ._L1556+0x4\n\ + mov r2, r8\n\ + ldr r5, ._L1556+0x8\n\ + ldr r4, ._L1556+0xc\n\ +._L1526:\n\ + ldrb r0, [r2]\n\ + add r0, r0, r6\n\ + ldrb r1, [r0]\n\ + sub r0, r1, #0x1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + bhi ._L1525 @cond_branch\n\ + add r0, r3, r5\n\ + strb r1, [r0]\n\ + add r1, r3, r4\n\ + mov r7, r8\n\ + ldrb r0, [r7]\n\ + strb r0, [r1]\n\ + add r3, r3, #0x1\n\ +._L1525:\n\ + ldrb r0, [r2]\n\ + add r0, r0, #0x1\n\ + strb r0, [r2]\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldr r1, ._L1556\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc ._L1526 @cond_branch\n\ +._L1524:\n\ + mov r0, #0x0\n\ + mov r2, r8\n\ + strb r0, [r2]\n\ + ldr r7, ._L1556\n\ + ldrb r0, [r7]\n\ + cmp r0, #0\n\ + beq ._L1530 @cond_branch\n\ + ldr r6, ._L1556+0x4\n\ + ldr r5, ._L1556+0x8\n\ + ldr r4, ._L1556+0xc\n\ +._L1532:\n\ + ldrb r0, [r2]\n\ + add r0, r0, r6\n\ + ldrb r1, [r0]\n\ + sub r0, r1, #0x1\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + cmp r0, #0x1\n\ + bls ._L1531 @cond_branch\n\ + add r0, r3, r5\n\ + strb r1, [r0]\n\ + add r1, r3, r4\n\ + mov r7, r8\n\ + ldrb r0, [r7]\n\ + strb r0, [r1]\n\ + add r3, r3, #0x1\n\ +._L1531:\n\ + ldrb r0, [r2]\n\ + add r0, r0, #0x1\n\ + strb r0, [r2]\n\ + lsl r0, r0, #0x18\n\ + lsr r0, r0, #0x18\n\ + ldr r1, ._L1556\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + bcc ._L1532 @cond_branch\n\ +._L1530:\n\ + mov r5, #0x0\n\ + b ._L1549\n\ +._L1557:\n\ + .align 2, 0\n\ +._L1556:\n\ + .word gNoOfAllBanks\n\ + .word gActionForBanks\n\ + .word gActionsByTurnOrder\n\ + .word gBanksByTurnOrder\n\ +._L1538:\n\ + add r4, r5, #0x1\n\ + add r7, r4, #0\n\ + ldrb r1, [r1]\n\ + cmp r7, r1\n\ + bge ._L1537 @cond_branch\n\ + ldr r6, ._L1558\n\ + lsl r2, r5, #0x18\n\ + mov r8, r2\n\ +._L1542:\n\ + ldr r0, ._L1558+0x4\n\ + add r1, r5, r0\n\ + ldrb r3, [r1]\n\ + add r0, r4, r0\n\ + ldrb r1, [r0]\n\ + add r0, r5, r6\n\ + ldrb r2, [r0]\n\ + cmp r2, #0x1\n\ + beq ._L1541 @cond_branch\n\ + add r0, r4, r6\n\ + ldrb r0, [r0]\n\ + cmp r0, #0x1\n\ + beq ._L1541 @cond_branch\n\ + cmp r2, #0x2\n\ + beq ._L1541 @cond_branch\n\ + cmp r0, #0x2\n\ + beq ._L1541 @cond_branch\n\ + add r0, r3, #0\n\ + mov r2, #0x0\n\ + bl GetWhoStrikesFirst\n\ + lsl r0, r0, #0x18\n\ + cmp r0, #0\n\ + beq ._L1541 @cond_branch\n\ + lsl r1, r4, #0x18\n\ + lsr r1, r1, #0x18\n\ + mov r3, r8\n\ + lsr r0, r3, #0x18\n\ + bl SwapTurnOrder\n\ +._L1541:\n\ + add r4, r4, #0x1\n\ + ldr r0, ._L1558+0x8\n\ + ldrb r0, [r0]\n\ + cmp r4, r0\n\ + blt ._L1542 @cond_branch\n\ +._L1537:\n\ + add r5, r7, #0\n\ +._L1549:\n\ + ldr r1, ._L1558+0x8\n\ + ldrb r0, [r1]\n\ + sub r0, r0, #0x1\n\ + cmp r5, r0\n\ + blt ._L1538 @cond_branch\n\ +._L1505:\n\ + ldr r1, ._L1558+0xc\n\ + ldr r0, ._L1558+0x10\n\ + str r0, [r1]\n\ + ldr r0, ._L1558+0x14\n\ + ldr r7, ._L1558+0x18\n\ + add r0, r0, r7\n\ + mov r1, #0x0\n\ + strb r1, [r0]\n\ +._L1498:\n\ + pop {r3, r4, r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov sl, r5\n\ + pop {r4, r5, r6, r7}\n\ + pop {r0}\n\ + bx r0\n\ +._L1559:\n\ + .align 2, 0\n\ +._L1558:\n\ + .word gActionsByTurnOrder\n\ + .word gBanksByTurnOrder\n\ + .word gNoOfAllBanks\n\ + .word gBattleMainFunc\n\ + .word CheckFocusPunch_ClearVarsBeforeTurnStarts\n\ + .word gSharedMem\n\ + .word 0x1601d"); +} +#else void SetActionsAndBanksTurnOrder(void) { s32 var = 0; @@ -10028,15 +8895,11 @@ void SetActionsAndBanksTurnOrder(void) } } } - // Debug ROM has a register swap from the retail ROM. - // And doing this seems to fix it. -#if DEBUG - asm("");asm("");asm("");asm("");asm("");asm("");asm("");asm("");asm(""); - asm("");asm("");asm("");asm("");asm("");asm("");asm(""); -#endif + gBattleMainFunc = CheckFocusPunch_ClearVarsBeforeTurnStarts; eFocusPunchBank = 0; } +#endif static void TurnValuesCleanUp(bool8 var0) { -- cgit v1.2.3 From 1416a4c4efe8b926c809664eb63dd2c3d0f86728 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Sun, 28 Jan 2018 23:10:53 -0600 Subject: clean up option_menu.c and field_poison.c a bit --- src/battle/battle_setup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/battle') diff --git a/src/battle/battle_setup.c b/src/battle/battle_setup.c index 892be1029..15555f833 100644 --- a/src/battle/battle_setup.c +++ b/src/battle/battle_setup.c @@ -475,7 +475,7 @@ static void Task_BattleStart(u8 taskId) switch (tState) { case 0: - if (!FieldPoisonEffectIsRunning()) // is poison not active? + if (!FldeffPoison_IsActive()) // is poison not active? { BattleTransition_StartOnField(tTransition); tState++; // go to case 1. -- cgit v1.2.3 From 9af005dfd0a84692fb1e632589df99b1e53ba802 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 28 Jan 2018 20:40:11 -0800 Subject: Start decompiling rock.s --- src/battle/anim/rock.c | 149 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 149 insertions(+) create mode 100644 src/battle/anim/rock.c (limited to 'src/battle') diff --git a/src/battle/anim/rock.c b/src/battle/anim/rock.c new file mode 100644 index 000000000..d4307e7c1 --- /dev/null +++ b/src/battle/anim/rock.c @@ -0,0 +1,149 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "decompress.h" +#include "palette.h" +#include "rom_8077ABC.h" +#include "task.h" +#include "trig.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; + +extern const u8 gBattleAnimBackgroundTilemap_SandstormBrew[]; +extern const u8 gBattleAnimBackgroundImage_SandstormBrew[]; +extern const u16 gBattleAnimSpritePalette_261[]; + +static void sub_80DCF1C(struct Sprite *sprite); +static void sub_80DD02C(struct Sprite *sprite); +void sub_80DD190(u8 taskId); + + +void sub_80DCE9C(struct Sprite *sprite) +{ + if (gBattleAnimArgs[3] != 0) + sub_807A3FC(gAnimBankTarget, 0, &sprite->pos1.x, &sprite->pos1.y); + + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += 14; + + StartSpriteAnim(sprite, gBattleAnimArgs[1]); + AnimateSprite(sprite); + + sprite->data[0] = 0; + sprite->data[1] = 0; + sprite->data[2] = 4; + sprite->data[3] = 16; + sprite->data[4] = -70; + sprite->data[5] = gBattleAnimArgs[2]; + + StoreSpriteCallbackInData(sprite, sub_80DCF1C); + sprite->callback = sub_8078278; + sprite->callback(sprite); +} + +static void sub_80DCF1C(struct Sprite *sprite) +{ + sprite->pos1.x += sprite->data[5]; + + sprite->data[0] = 192; + sprite->data[1] = sprite->data[5]; + sprite->data[2] = 4; + sprite->data[3] = 32; + sprite->data[4] = -24; + + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); + sprite->callback = sub_8078278; + sprite->callback(sprite); +} + +void sub_80DCF60(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, gBattleAnimArgs[5]); + AnimateSprite(sprite); + + if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER) + sprite->pos1.x -= gBattleAnimArgs[0]; + else + sprite->pos1.x += gBattleAnimArgs[0]; + + sprite->pos1.y += gBattleAnimArgs[1]; + + sprite->data[0] = gBattleAnimArgs[4]; + sprite->data[1] = sprite->pos1.x; + sprite->data[2] = sprite->pos1.x + gBattleAnimArgs[2]; + sprite->data[3] = sprite->pos1.y; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[3]; + + sub_8078A5C(sprite); + sprite->data[3] = 0; + sprite->data[4] = 0; + + sprite->callback = sub_8078394; + StoreSpriteCallbackInData(sprite, move_anim_8074EE0); +} + +void sub_80DCFE4(struct Sprite *sprite) +{ + if (gBattleAnimArgs[6] == 0) + sub_80787B0(sprite, 0); + else + sub_8078764(sprite, 0); + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[2]; + sprite->data[2] = gBattleAnimArgs[4]; + sprite->data[3] = gBattleAnimArgs[5]; + + sprite->callback = sub_80DD02C; +} + +static void sub_80DD02C(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[1]; + sprite->pos2.y = -(sprite->data[4] >> 8); + sprite->pos2.x = Sin(sprite->data[5], sprite->data[3]); + sprite->data[5] = (sprite->data[5] + sprite->data[2]) & 0xFF; + + if (--sprite->data[0] == -1) + { + DestroyAnimSprite(sprite); + } +} + +void do_boulder_dust(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + int var0 = 0; + + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0x1000; + REG_BG1CNT_BITFIELD.priority = 1; + REG_BG1CNT_BITFIELD.screenSize = 0; + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BG1HOFS = 0; + REG_BG1VOFS = 0; + + sub_8078914(&subStruct); + DmaFill32Defvars(3, 0, subStruct.field_4, 0x1000); + LZDecompressVram(&gBattleAnimBackgroundTilemap_SandstormBrew, subStruct.field_4); + LZDecompressVram(&gBattleAnimBackgroundImage_SandstormBrew, subStruct.field_0); + LoadCompressedPalette(&gBattleAnimSpritePalette_261, subStruct.field_8 << 4, 32); + + if (IsContest()) + sub_80763FC(subStruct.field_8, (u16 *)subStruct.field_4, 0, 0); + + if (gBattleAnimArgs[0] != 0 && GetBankSide(gAnimBankAttacker) != SIDE_PLAYER) + var0 = 1; + + gTasks[taskId].data[0] = var0; + gTasks[taskId].func = sub_80DD190; +} -- cgit v1.2.3 From 5911f59a7dc71c92ea52ff62fcb18e4a8ffa8e69 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Mon, 29 Jan 2018 20:15:27 -0800 Subject: More rock.s decompilation --- src/battle/anim/rock.c | 126 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) (limited to 'src/battle') diff --git a/src/battle/anim/rock.c b/src/battle/anim/rock.c index d4307e7c1..26ac78053 100644 --- a/src/battle/anim/rock.c +++ b/src/battle/anim/rock.c @@ -17,6 +17,8 @@ extern const u8 gBattleAnimBackgroundTilemap_SandstormBrew[]; extern const u8 gBattleAnimBackgroundImage_SandstormBrew[]; extern const u16 gBattleAnimSpritePalette_261[]; +extern const struct SubspriteTable gUnknown_083DAD10; + static void sub_80DCF1C(struct Sprite *sprite); static void sub_80DD02C(struct Sprite *sprite); void sub_80DD190(u8 taskId); @@ -147,3 +149,127 @@ void do_boulder_dust(u8 taskId) gTasks[taskId].data[0] = var0; gTasks[taskId].func = sub_80DD190; } + +void sub_80DD190(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + + if (gTasks[taskId].data[0] == 0) + gBattle_BG1_X += 0xFFFA; + else + gBattle_BG1_X += 6; + + gBattle_BG1_Y += -1; + + switch (gTasks[taskId].data[12]) + { + case 0: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]++; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 7) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 1: + if (++gTasks[taskId].data[11] == 101) + { + gTasks[taskId].data[11] = 7; + gTasks[taskId].data[12]++; + } + break; + case 2: + if (++gTasks[taskId].data[10] == 4) + { + gTasks[taskId].data[10] = 0; + gTasks[taskId].data[11]--; + REG_BLDALPHA = gTasks[taskId].data[11] | ((16 - gTasks[taskId].data[11]) << 8); + if (gTasks[taskId].data[11] == 0) + { + gTasks[taskId].data[12]++; + gTasks[taskId].data[11] = 0; + } + } + break; + case 3: + sub_8078914(&subStruct); + DmaFill32Large(3, 0, subStruct.field_0, 0x2000, 0x1000); + DmaClear32(3, subStruct.field_4, 0x800); + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + gTasks[taskId].data[12]++; + // fall through + case 4: + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + REG_BG1CNT_BITFIELD.priority = 1; + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80DD3AC(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + if (gBattleAnimArgs[3] != 0 && GetBankSide(gAnimBankAttacker) != SIDE_PLAYER) + { + sprite->pos1.x = 304; + gBattleAnimArgs[1] = -gBattleAnimArgs[1]; + sprite->data[5] = 1; + sprite->oam.matrixNum = 8; + } + else + { + sprite->pos1.x = -64; + } + + sprite->pos1.y = gBattleAnimArgs[0]; + SetSubspriteTables(sprite, &gUnknown_083DAD10); + sprite->data[1] = gBattleAnimArgs[1]; + sprite->data[2] = gBattleAnimArgs[2]; + sprite->data[0]++; + } + else + { + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + sprite->pos2.x += (sprite->data[3] >> 8); + sprite->pos2.y += (sprite->data[4] >> 8); + sprite->data[3] &= 0xFF; + sprite->data[4] &= 0xFF; + + if (sprite->data[5] == 0) + { + if (sprite->pos1.x + sprite->pos2.x > 272) + { + sprite->callback = DestroyAnimSprite; + } + } + else if (sprite->pos1.x + sprite->pos2.x < -32) + { + sprite->callback = DestroyAnimSprite; + } + } +} + +void sub_80DD490(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + sub_80787B0(sprite, 0); + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[2] = sprite->pos1.x; + sprite->data[4] = sprite->pos1.y + gBattleAnimArgs[2]; + + sprite->callback = sub_8078B34; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} -- cgit v1.2.3 From 2df648dc4b9dee51503d319c677456c008b438fb Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Tue, 30 Jan 2018 19:56:12 -0800 Subject: Finish decompiling rock.s --- src/battle/anim/rock.c | 331 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 329 insertions(+), 2 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/rock.c b/src/battle/anim/rock.c index 26ac78053..b113ce040 100644 --- a/src/battle/anim/rock.c +++ b/src/battle/anim/rock.c @@ -4,24 +4,35 @@ #include "decompress.h" #include "palette.h" #include "rom_8077ABC.h" +#include "sound.h" #include "task.h" #include "trig.h" +#include "constants/songs.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; +extern u32 gAnimMoveDmg; extern u16 gBattle_BG1_X; extern u16 gBattle_BG1_Y; +extern u16 gBattle_BG3_Y; extern const u8 gBattleAnimBackgroundTilemap_SandstormBrew[]; extern const u8 gBattleAnimBackgroundImage_SandstormBrew[]; extern const u16 gBattleAnimSpritePalette_261[]; +extern const struct SpriteTemplate gSpriteTemplate_83DAD78; +extern const struct SpriteTemplate gSpriteTemplate_83DAD90; extern const struct SubspriteTable gUnknown_083DAD10; static void sub_80DCF1C(struct Sprite *sprite); static void sub_80DD02C(struct Sprite *sprite); -void sub_80DD190(u8 taskId); +static void sub_80DD190(u8 taskId); +static void sub_80DD604(u8 taskId); +static void sub_80DD774(struct Task *task); +static u8 sub_80DD8BC(void); +static void sub_80DD928(struct Sprite *sprite); +static void sub_80DD9FC(struct Sprite *sprite); void sub_80DCE9C(struct Sprite *sprite) @@ -150,7 +161,7 @@ void do_boulder_dust(u8 taskId) gTasks[taskId].func = sub_80DD190; } -void sub_80DD190(u8 taskId) +static void sub_80DD190(u8 taskId) { struct Struct_sub_8078914 subStruct; @@ -273,3 +284,319 @@ void sub_80DD490(struct Sprite *sprite) sprite->callback = sub_8078B34; StoreSpriteCallbackInData(sprite, DestroyAnimSprite); } + +void sub_80DD4D4(u8 taskId) +{ + u16 var0, var1, var2, var3; + u8 var4; + int var5; + s16 pan1, pan2; + struct Task *task; + + task = &gTasks[taskId]; + + var0 = GetBankPosition(gAnimBankAttacker, 2); + var1 = GetBankPosition(gAnimBankAttacker, 1) + 24; + var2 = GetBankPosition(gAnimBankTarget, 2); + var3 = GetBankPosition(gAnimBankTarget, 1) + 24; + + if ((gAnimBankAttacker ^ 2) == gAnimBankTarget) + var3 = var1; + + var4 = sub_80DD8BC(); + if (var4 == 1) + task->data[8] = 32; + else + task->data[8] = 48 - (var4 * 8); + + task->data[0] = 0; + task->data[11] = 0; + task->data[9] = 0; + task->data[12] = 1; + + var5 = task->data[8]; + if (var5 < 0) + var5 += 7; + + task->data[10] = (var5 >> 3) - 1; + + task->data[2] = var0 * 8; + task->data[3] = var1 * 8; + task->data[4] = ((var2 - var0) * 8) / task->data[8]; + task->data[5] = ((var3 - var1) * 8) / task->data[8]; + task->data[6] = 0; + task->data[7] = 0; + + pan1 = BattleAnimAdjustPanning(-64); + pan2 = BattleAnimAdjustPanning(63); + + task->data[13] = pan1; + task->data[14] = (pan2 - pan1) / task->data[8]; + task->data[1] = var4; + task->data[15] = GetAnimBankSpriteId(0); + + task->func = sub_80DD604; +} + +static void sub_80DD604(u8 taskId) +{ + struct Task *task; + + task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[6] -= task->data[4]; + task->data[7] -= task->data[5]; + gSprites[task->data[15]].pos2.x = task->data[6] >> 3; + gSprites[task->data[15]].pos2.y = task->data[7] >> 3; + + if (++task->data[9] == 10) + { + task->data[11] = 20; + task->data[0]++; + } + + PlaySE12WithPanning(SE_W029, task->data[13]); + break; + case 1: + if (--task->data[11] == 0) + task->data[0]++; + break; + case 2: + if (--task->data[9] != 0) + { + task->data[6] += task->data[4]; + task->data[7] += task->data[5]; + } + else + { + task->data[6] = 0; + task->data[7] = 0; + task->data[0]++; + } + + gSprites[task->data[15]].pos2.x = task->data[6] >> 3; + gSprites[task->data[15]].pos2.y = task->data[7] >> 3; + break; + case 3: + task->data[2] += task->data[4]; + task->data[3] += task->data[5]; + if (++task->data[9] >= task->data[10]) + { + task->data[9] = 0; + sub_80DD774(task); + task->data[13] += task->data[14]; + PlaySE12WithPanning(SE_W091, task->data[13]); + } + + if (--task->data[8] == 0) + { + task->data[0]++; + } + break; + case 4: + if (task->data[11] == 0) + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80DD774(struct Task *task) +{ + const struct SpriteTemplate *spriteTemplate; + int var0; + u16 x, y; + u8 spriteId; + + switch (task->data[1]) + { + case 1: + spriteTemplate = &gSpriteTemplate_83DAD78; + var0 = 0; + break; + case 2: + case 3: + spriteTemplate = &gSpriteTemplate_83DAD90; + var0 = 80; + break; + case 4: + spriteTemplate = &gSpriteTemplate_83DAD90; + var0 = 64; + break; + case 5: + spriteTemplate = &gSpriteTemplate_83DAD90; + var0 = 48; + break; + default: + return; + } + + x = task->data[2] >> 3; + y = task->data[3] >> 3; + x += (task->data[12] * 4); + + spriteId = CreateSprite(spriteTemplate, x, y, 35); + if (spriteId != 64) + { + gSprites[spriteId].data[0] = 18; + gSprites[spriteId].data[2] = ((task->data[12] * 20) + x) + (task->data[1] * 3); + gSprites[spriteId].data[4] = y; + gSprites[spriteId].data[5] = -16 - (task->data[1] * 2); + gSprites[spriteId].oam.tileNum += var0; + + sub_80786EC(&gSprites[spriteId]); + task->data[11]++; + } + + task->data[12] *= -1; +} + +void sub_80DD87C(struct Sprite *sprite) +{ + if (sub_8078718(sprite)) + { + u8 taskId = FindTaskIdByFunc(sub_80DD604); + if (taskId != 0xFF) + gTasks[taskId].data[11]--; + + DestroySprite(sprite); + } +} + +u8 sub_80DD8BC(void) +{ + u8 retVal = gAnimDisableStructPtr->rolloutTimer2 - gAnimDisableStructPtr->rolloutTimer1; + u8 var0 = retVal - 1; + if (var0 > 4) + { + retVal = 1; + } + + return retVal; +} + +void sub_80DD8E8(struct Sprite *sprite) +{ + StartSpriteAnim(sprite, gBattleAnimArgs[4]); + + sprite->pos2.x = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[3] -= gBattleAnimArgs[2]; + sprite->data[0] = 3; + sprite->data[1] = gBattleAnimArgs[3]; + sprite->callback = sub_80DD928; + sprite->invisible = 1; +} + +static void sub_80DD928(struct Sprite *sprite) +{ + sprite->invisible = 0; + if (sprite->data[3] != 0) + { + sprite->pos2.y = sprite->data[2] + sprite->data[3]; + sprite->data[3] += sprite->data[0]; + sprite->data[0]++; + if (sprite->data[3] > 0) + { + sprite->data[3] = 0; + } + } + else + { + if (--sprite->data[1] == 0) + { + DestroyAnimSprite(sprite); + } + } +} + +void sub_80DD978(struct Sprite *sprite) +{ + if (GetBankSide(gAnimBankAttacker) == SIDE_OPPONENT) + StartSpriteAffineAnim(sprite, 1); + + sub_807941C(sprite); +} + +void sub_80DD9A4(struct Sprite *sprite) +{ + sprite->pos1.x = GetBankPosition(gAnimBankTarget, 0); + sprite->pos1.y = GetBankPosition(gAnimBankTarget, 1); + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + + sprite->data[1] = gBattleAnimArgs[0]; + sprite->data[2] = gBattleAnimArgs[1]; + sprite->data[5] = gBattleAnimArgs[2]; + + StartSpriteAnim(sprite, gBattleAnimArgs[3]); + sprite->callback = sub_80DD9FC; +} + +static void sub_80DD9FC(struct Sprite *sprite) +{ + sprite->data[0] += 8; + sprite->data[3] += sprite->data[1]; + sprite->data[4] += sprite->data[2]; + + sprite->pos2.x += sprite->data[3] / 40; + sprite->pos2.y -= Sin(sprite->data[0], sprite->data[5]); + + if (sprite->data[0] > 140) + DestroyAnimSprite(sprite); +} + +void sub_80DDA4C(u8 taskId) +{ + if ((s32)gAnimMoveDmg < 33) + gBattleAnimArgs[7] = 0; + if (gAnimMoveDmg - 33 < 33) + gBattleAnimArgs[7] = 1; + if ((s32)gAnimMoveDmg > 65) + gBattleAnimArgs[7] = 2; + + DestroyAnimVisualTask(taskId); +} + +void sub_80DDA8C(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + sub_80789D4(0); + gTasks[taskId].data[1] = 200; + } + + gBattle_BG3_Y += gTasks[taskId].data[1] / 10; + gTasks[taskId].data[1] -= 3; + + if (gTasks[taskId].data[0] == 120) + { + sub_80789D4(1); + DestroyAnimVisualTask(taskId); + } + + gTasks[taskId].data[0]++; +} + +void sub_80DDAF0(u8 taskId) +{ + if (gTasks[taskId].data[0] == 0) + { + sub_80789D4(0); + gTasks[taskId].data[0]++; + gTasks[taskId].data[2] = gBattle_BG3_Y; + } + + gTasks[taskId].data[1] += 80; + gTasks[taskId].data[1] &= 0xFF; + gBattle_BG3_Y = gTasks[taskId].data[2] + Cos(4, gTasks[taskId].data[1]); + + if (gBattleAnimArgs[7] == 0xFFF) + { + gBattle_BG3_Y = 0; + sub_80789D4(1); + DestroyAnimVisualTask(taskId); + } +} -- cgit v1.2.3 From cb674ce14dc43f99dd76f456e69ab8a90cc3d506 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Wed, 31 Jan 2018 15:45:28 -0600 Subject: fix and decompile more battle_2.c debug code --- src/battle/battle_2.c | 511 ++++++++++---------------------------------------- 1 file changed, 101 insertions(+), 410 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index a400257dd..b8ad21869 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1376,30 +1376,9 @@ void debug_sub_80125A0(void); u32 debug_sub_8013294(u8, void *, u32); void debug_sub_80132C8(u8, void *, u32); -struct UnknownStruct2023A76 -{ - u16 unk0; - u16 unk2[(0x44-2)/2]; - s16 unk44; - u16 unk46; - u16 unk48[1]; -}; - -struct UnknownStruct2023B02 -{ - u16 unk0[4][4]; - u8 filler20[0x10]; - u16 unk30[4][4]; -}; - -struct UnknownStruct821F424 -{ - u8 filler0[0x12]; - u16 unk12[1][5]; // unknown length -}; - -extern struct UnknownStruct2023A76 gUnknown_Debug_2023A76; -extern struct UnknownStruct2023B02 gUnknown_Debug_2023B02; +extern s16 gUnknown_Debug_2023A76[][0x23]; +extern s16 gUnknown_Debug_2023A76_[][7][5]; +extern s16 gUnknown_Debug_2023B02[][6][4]; extern u8 gUnknown_Debug_03004360; extern struct Window gUnknown_Debug_03004370; extern u8 gUnknown_Debug_030043A0; @@ -1407,7 +1386,7 @@ extern u8 gUnknown_Debug_030043A4; extern u8 gUnknown_Debug_030043A8; extern u8 gBattleBuffersTransferData[]; -extern const struct UnknownStruct821F424 gUnknown_Debug_821F424; +extern const s16 gUnknown_Debug_821F424[][5]; extern const u16 gUnknown_Debug_821F56C[][5]; extern const u8 gUnusedOldCharmap_Gfx_lz[]; @@ -1421,25 +1400,24 @@ void debug_sub_8010800(void) *(u32 *)(gBattleBuffersTransferData + 0x100) = 0; } - void debug_sub_8010818(void) { s32 i; - gUnknown_Debug_2023A76.unk0 = 0x115; - gUnknown_Debug_2023A76.unk46 = 0x115; - for (i = 0; i < 30; i++) + gUnknown_Debug_2023A76[0][0] = 0x115; + gUnknown_Debug_2023A76[1][0] = 0x115; + for (i = 1; i < 31; i++) { - gUnknown_Debug_2023A76.unk2[i] = gUnknown_Debug_821F424.unk12[i][0]; - gUnknown_Debug_2023A76.unk48[i] = gUnknown_Debug_821F424.unk12[i][0]; + gUnknown_Debug_2023A76[0][i] = gUnknown_Debug_821F424[i][4]; + gUnknown_Debug_2023A76[1][i] = gUnknown_Debug_821F424[i][4]; } for (i = 0; i < 6; i++) { for (gUnknown_Debug_030043A8 = 0; gUnknown_Debug_030043A8 < 4; gUnknown_Debug_030043A8++) { - gUnknown_Debug_2023B02.unk0[i][gUnknown_Debug_030043A8] = gUnknown_Debug_821F56C[gUnknown_Debug_030043A8][0]; - gUnknown_Debug_2023B02.unk30[i][gUnknown_Debug_030043A8] = gUnknown_Debug_821F56C[gUnknown_Debug_030043A8][0]; + gUnknown_Debug_2023B02[0][i][gUnknown_Debug_030043A8] = gUnknown_Debug_821F56C[gUnknown_Debug_030043A8][0]; + gUnknown_Debug_2023B02[1][i][gUnknown_Debug_030043A8] = gUnknown_Debug_821F56C[gUnknown_Debug_030043A8][0]; } } } @@ -1490,7 +1468,7 @@ void debug_sub_80108B8(void) debug_nullsub_3(); gUnknown_Debug_030043A8 = 0; debug_sub_80125A0(); - if (gUnknown_Debug_2023A76.unk44 == 8) + if (gUnknown_Debug_2023A76[0][0x22] == 8) { debug_sub_801174C(); } @@ -1510,289 +1488,91 @@ void debug_sub_8010A7C(u8 a, u8 b) gBattleTextBuff1[i] = EOS; } -__attribute__((naked)) -void debug_sub_8010AAC() +// gUnknown_Debug_2023A76_ seems like a 3D array, but this function refuses to match when I do that. +#ifdef NONMATCHING +void debug_sub_8010AAC(u8 a) { - asm( - " push {r4, r5, r6, r7, lr}\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " mov ip, r0\n" - " ldr r6, ._520 @ gBaseStats\n" - " ldr r4, ._520 + 4 @ gUnknown_Debug_2023A76\n" - " ldr r5, ._520 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r5]\n" - " lsl r0, r1, #0x2\n" - " add r7, r0, r1\n" - " lsl r1, r7, #0x1\n" - " ldr r3, ._520 + 12 @ gUnknown_Debug_03004360\n" - " ldrb r2, [r3]\n" - " mov r0, #0x46\n" - " mul r2, r2, r0\n" - " add r1, r1, r2\n" - " add r1, r1, r4\n" - " mov r0, #0x0\n" - " ldsh r1, [r1, r0]\n" - " lsl r0, r1, #0x3\n" - " sub r0, r0, r1\n" - " lsl r0, r0, #0x2\n" - " add r0, r0, r6\n" - " ldrb r0, [r0, #0x10]\n" - " add r6, r3, #0\n" - " cmp r0, #0xfe\n" - " beq ._516 @cond_branch\n" - " cmp r0, #0xfe\n" - " bgt ._517 @cond_branch\n" - " cmp r0, #0\n" - " beq ._518 @cond_branch\n" - " b ._523\n" - "._521:\n" - " .align 2, 0\n" - "._520:\n" - " .word gBaseStats\n" - " .word gUnknown_Debug_2023A76\n" - " .word gUnknown_Debug_030043A4\n" - " .word gUnknown_Debug_03004360\n" - "._517:\n" - " cmp r0, #0xff\n" - " beq ._522 @cond_branch\n" - " b ._523\n" - "._518:\n" - " add r0, r7, #4\n" - " lsl r0, r0, #0x1\n" - " add r0, r0, r2\n" - " add r0, r0, r4\n" - " mov r1, #0x2\n" - " b ._528\n" - "._516:\n" - " add r0, r7, #4\n" - " lsl r0, r0, #0x1\n" - " add r0, r0, r2\n" - " add r0, r0, r4\n" - " mov r1, #0x3\n" - " b ._528\n" - "._522:\n" - " add r0, r7, #4\n" - " lsl r0, r0, #0x1\n" - " add r0, r0, r2\n" - " add r0, r0, r4\n" - " mov r1, #0x4\n" - " b ._528\n" - "._523:\n" - " ldrb r0, [r5]\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " add r1, r1, #0x4\n" - " lsl r1, r1, #0x1\n" - " ldrb r0, [r6]\n" - " mov r3, #0x46\n" - " mul r0, r0, r3\n" - " add r1, r1, r0\n" - " add r1, r1, r4\n" - " ldrh r2, [r1]\n" - " mov r0, #0x1\n" - " and r0, r0, r2\n" - " strh r0, [r1]\n" - " mov r1, ip\n" - " cmp r1, #0\n" - " beq ._527 @cond_branch\n" - " ldrb r1, [r5]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " add r0, r0, #0x4\n" - " lsl r0, r0, #0x1\n" - " ldrb r1, [r6]\n" - " mul r1, r1, r3\n" - " add r0, r0, r1\n" - " add r0, r0, r4\n" - " ldrh r1, [r0]\n" - " mov r2, #0x1\n" - " eor r1, r1, r2\n" - " b ._528\n" - "._527:\n" - " ldrb r1, [r5]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " add r0, r0, #0x4\n" - " lsl r0, r0, #0x1\n" - " ldrb r1, [r6]\n" - " mul r1, r1, r3\n" - " add r0, r0, r1\n" - " add r0, r0, r4\n" - " mov r1, ip\n" - "._528:\n" - " strh r1, [r0]\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "\n" - ); + switch (gBaseStats[gUnknown_Debug_2023A76_[gUnknown_Debug_03004360][gUnknown_Debug_030043A4][0]].genderRatio) + { + case 0: + gUnknown_Debug_2023A76_[gUnknown_Debug_03004360][gUnknown_Debug_030043A4][4] = 2; + break; + case 0xFE: + gUnknown_Debug_2023A76_[gUnknown_Debug_03004360][gUnknown_Debug_030043A4][4] = 3; + break; + case 0xFF: + gUnknown_Debug_2023A76_[gUnknown_Debug_03004360][gUnknown_Debug_030043A4][4] = 4; + break; + default: + gUnknown_Debug_2023A76_[gUnknown_Debug_03004360][gUnknown_Debug_030043A4][4] &= 1; + if (a != 0) + gUnknown_Debug_2023A76_[gUnknown_Debug_03004360][gUnknown_Debug_030043A4][4] ^= 1; + else + gUnknown_Debug_2023A76_[gUnknown_Debug_03004360][gUnknown_Debug_030043A4][4] = 0; + break; + } } +#else +void debug_sub_8010AAC(u8 a) +{ + switch (gBaseStats[gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5]].genderRatio) + { + case 0: + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + 4] = 2; + break; + case 0xFE: + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + 4] = 3; + break; + case 0xFF: + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + 4] = 4; + break; + default: + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + 4] &= 1; + if (a != 0) + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + 4] ^= 1; + else + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + 4] = 0; + break; + } +} +#endif -__attribute__((naked)) -void debug_sub_8010B80() +void debug_sub_8010B80(u8 a) { - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r9\n" - " mov r6, r8\n" - " push {r6, r7}\n" - " lsl r0, r0, #0x18\n" - " lsr r6, r0, #0x18\n" - " mov r0, #0x0\n" - " mov ip, r0\n" - " ldr r4, ._534 @ gUnknown_Debug_2023A76\n" - " ldr r1, ._534 + 4 @ gUnknown_Debug_030043A0\n" - " mov r8, r1\n" - " ldr r5, ._534 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r5]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " mov r2, r8\n" - " ldrb r2, [r2]\n" - " add r0, r0, r2\n" - " lsl r0, r0, #0x1\n" - " ldr r3, ._534 + 12 @ gUnknown_Debug_03004360\n" - " ldrb r2, [r3]\n" - " mov r1, #0x46\n" - " mul r1, r1, r2\n" - " add r0, r0, r1\n" - " add r0, r0, r4\n" - " ldrb r7, [r0]\n" - " lsl r1, r7, #0x18\n" - " asr r0, r1, #0x18\n" - " mov r9, r4\n" - " add r2, r5, #0\n" - " add r4, r3, #0\n" - " cmp r0, #0x9\n" - " ble ._529 @cond_branch\n" - "._530:\n" - " mov r3, #0xf6\n" - " lsl r3, r3, #0x18\n" - " add r0, r1, r3\n" - " lsr r7, r0, #0x18\n" - " mov r1, ip\n" - " lsl r0, r1, #0x18\n" - " mov r3, #0x80\n" - " lsl r3, r3, #0x11\n" - " add r0, r0, r3\n" - " lsr r0, r0, #0x18\n" - " mov ip, r0\n" - " lsl r1, r7, #0x18\n" - " asr r0, r1, #0x18\n" - " cmp r0, #0x9\n" - " bgt ._530 @cond_branch\n" - "._529:\n" - " mov r0, #0x2\n" - " and r0, r0, r6\n" - " cmp r0, #0\n" - " beq ._531 @cond_branch\n" - " mov r0, #0x1\n" - " and r0, r0, r6\n" - " cmp r0, #0\n" - " beq ._532 @cond_branch\n" - " mov r1, ip\n" - " lsl r0, r1, #0x18\n" - " mov r3, #0x80\n" - " lsl r3, r3, #0x11\n" - " b ._533\n" - "._535:\n" - " .align 2, 0\n" - "._534:\n" - " .word gUnknown_Debug_2023A76\n" - " .word gUnknown_Debug_030043A0\n" - " .word gUnknown_Debug_030043A4\n" - " .word gUnknown_Debug_03004360\n" - "._532:\n" - " mov r1, ip\n" - " lsl r0, r1, #0x18\n" - " mov r3, #0xff\n" - " lsl r3, r3, #0x18\n" - "._533:\n" - " add r0, r0, r3\n" - " lsr r0, r0, #0x18\n" - " mov ip, r0\n" - " mov r1, ip\n" - " lsl r0, r1, #0x18\n" - " cmp r0, #0\n" - " bge ._536 @cond_branch\n" - " mov r3, #0x9\n" - " mov ip, r3\n" - "._536:\n" - " mov r1, ip\n" - " lsl r0, r1, #0x18\n" - " asr r0, r0, #0x18\n" - " cmp r0, #0x9\n" - " ble ._542 @cond_branch\n" - " mov r3, #0x0\n" - " mov ip, r3\n" - " b ._542\n" - "._531:\n" - " mov r0, #0x1\n" - " and r0, r0, r6\n" - " cmp r0, #0\n" - " beq ._539 @cond_branch\n" - " lsl r0, r7, #0x18\n" - " mov r1, #0x80\n" - " lsl r1, r1, #0x11\n" - " add r0, r0, r1\n" - " b ._540\n" - "._539:\n" - " lsl r0, r7, #0x18\n" - " mov r3, #0xff\n" - " lsl r3, r3, #0x18\n" - " add r0, r0, r3\n" - "._540:\n" - " lsr r7, r0, #0x18\n" - " lsl r0, r7, #0x18\n" - " cmp r0, #0\n" - " bgt ._541 @cond_branch\n" - " mov r7, #0x9\n" - "._541:\n" - " lsl r0, r7, #0x18\n" - " asr r0, r0, #0x18\n" - " cmp r0, #0x9\n" - " ble ._542 @cond_branch\n" - " mov r7, #0x1\n" - "._542:\n" - " ldrb r0, [r2]\n" - " lsl r2, r0, #0x2\n" - " add r2, r2, r0\n" - " mov r0, r8\n" - " ldrb r0, [r0]\n" - " add r2, r2, r0\n" - " lsl r2, r2, #0x1\n" - " ldrb r1, [r4]\n" - " mov r0, #0x1\n" - " eor r0, r0, r1\n" - " mov r1, #0x46\n" - " add r3, r0, #0\n" - " mul r3, r3, r1\n" - " add r3, r2, r3\n" - " add r3, r3, r9\n" - " ldrb r0, [r4]\n" - " mul r0, r0, r1\n" - " add r2, r2, r0\n" - " add r2, r2, r9\n" - " mov r1, ip\n" - " lsl r0, r1, #0x18\n" - " asr r0, r0, #0x18\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " lsl r1, r1, #0x1\n" - " lsl r0, r7, #0x18\n" - " asr r0, r0, #0x18\n" - " add r0, r0, r1\n" - " strh r0, [r2]\n" - " strh r0, [r3]\n" - " pop {r3, r4}\n" - " mov r8, r3\n" - " mov r9, r4\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "\n" - ); + s8 r12 = 0; + s8 r7 = gUnknown_Debug_2023A76_[gUnknown_Debug_03004360][gUnknown_Debug_030043A4][gUnknown_Debug_030043A0]; + + while (r7 >= 10) + { + r7 -= 10; + r12++; + } + + if (a & 2) + { + if (a & 1) + r12++; + else + r12--; + if (r12 < 0) + r12 = 9; + if (r12 > 9) + r12 = 0; + } + else + { + if (a & 1) + r7++; + else + r7--; + if (r7 < 1) + r7 = 9; + if (r7 > 9) + r7 = 1; + } + gUnknown_Debug_2023A76_[gUnknown_Debug_03004360 ^ 1][gUnknown_Debug_030043A4][gUnknown_Debug_030043A0] + = gUnknown_Debug_2023A76_[gUnknown_Debug_03004360][gUnknown_Debug_030043A4][gUnknown_Debug_030043A0] + = r12 * 10 + r7; } __attribute__((naked)) @@ -5119,39 +4899,17 @@ void debug_sub_8012688() ); } -__attribute__((naked)) -void debug_sub_8012878() +void debug_sub_8012878(void) { - asm( - " push {lr}\n" - " bl AnimateSprites\n" - " bl BuildOamBuffer\n" - " ldr r0, ._876 @ gUnknown_03004210\n" - " bl Text_UpdateWindowInBattle\n" - " bl UpdatePaletteFade\n" - " bl RunTasks\n" - " ldr r0, ._876 + 4 @ gMain\n" - " ldrh r1, [r0, #0x2c]\n" - " mov r0, #0x82\n" - " lsl r0, r0, #0x1\n" - " cmp r1, r0\n" - " bne ._875 @cond_branch\n" - " ldr r0, ._876 + 8 @ debug_sub_80108B8\n" - " bl SetMainCallback2\n" - "._875:\n" - " pop {r0}\n" - " bx r0\n" - "._877:\n" - " .align 2, 0\n" - "._876:\n" - " .word gUnknown_03004210\n" - " .word gMain\n" - " .word debug_sub_80108B8+1\n" - "\n" - ); + AnimateSprites(); + BuildOamBuffer(); + Text_UpdateWindowInBattle(&gUnknown_03004210); + UpdatePaletteFade(); + RunTasks(); + if (gMain.heldKeys == (SELECT_BUTTON | R_BUTTON)) + SetMainCallback2(debug_sub_80108B8); } -/* void debug_sub_80128B4(void) { debug_sub_8010A7C(0, 9); @@ -5164,73 +4922,6 @@ void debug_sub_80128B4(void) Text_InitWindow(&gUnknown_03004210, gBattleTextBuff1, 144, 2, 35); Text_PrintWindow8002F44(&gUnknown_03004210); } -*/ - -__attribute__((naked)) -void debug_sub_80128B4() -{ - asm( - " push {r4, r5, r6, lr}\n" - " mov r6, r8\n" - " push {r6}\n" - " add sp, sp, #0xfffffffc\n" - " mov r0, #0x0\n" - " mov r1, #0x9\n" - " bl debug_sub_8010A7C\n" - " ldr r5, ._878 @ gUnknown_03004210\n" - " ldr r4, ._878 + 4 @ gBattleTextBuff1\n" - " mov r0, #0x23\n" - " mov r8, r0\n" - " str r0, [sp]\n" - " add r0, r5, #0\n" - " add r1, r4, #0\n" - " mov r2, #0x90\n" - " mov r3, #0x2\n" - " bl Text_InitWindow\n" - " add r0, r5, #0\n" - " bl Text_PrintWindow8002F44\n" - " ldr r6, ._878 + 8 @ gCurrentMove\n" - " ldrh r1, [r6]\n" - " add r0, r4, #0\n" - " mov r2, #0x2\n" - " mov r3, #0x3\n" - " bl ConvertIntToDecimalStringN\n" - " mov r0, #0x0\n" - " strb r0, [r4, #0x3]\n" - " mov r0, #0xff\n" - " strb r0, [r4, #0x4]\n" - " ldrh r1, [r6]\n" - " mov r0, #0xb\n" - " mul r1, r1, r0\n" - " ldr r0, ._878 + 12 @ gSpeciesNames\n" - " add r1, r1, r0\n" - " add r0, r4, #0\n" - " bl StringAppend\n" - " mov r0, r8\n" - " str r0, [sp]\n" - " add r0, r5, #0\n" - " add r1, r4, #0\n" - " mov r2, #0x90\n" - " mov r3, #0x2\n" - " bl Text_InitWindow\n" - " add r0, r5, #0\n" - " bl Text_PrintWindow8002F44\n" - " add sp, sp, #0x4\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._879:\n" - " .align 2, 0\n" - "._878:\n" - " .word gUnknown_03004210\n" - " .word gBattleTextBuff1\n" - " .word gCurrentMove\n" - " .word gSpeciesNames\n" - "\n" - ); -} void debug_sub_8012938(u8 taskId) { -- cgit v1.2.3 From 449d5cd95bbd1a3ad291e6ebe0654f47f2f3b6e4 Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Wed, 31 Jan 2018 18:19:25 -0600 Subject: decompile more battle_2.c debug functions --- src/battle/battle_2.c | 326 ++++++++++---------------------------------------- 1 file changed, 64 insertions(+), 262 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index b8ad21869..d3ddc5960 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -69,6 +69,7 @@ struct UnknownStruct12 extern void sub_802BBD4(); +extern struct SpriteTemplate gUnknown_02024E8C; extern const u8 Str_821F7B8[]; extern u8 gUnknown_02023A14_50; extern const u16 gUnknown_08D004E0[]; @@ -1362,6 +1363,8 @@ extern u8 gUnknown_Debug_2023B62[]; extern const u8 Str_821F7BD[]; extern const u8 Str_821F7DA[]; +void debug_sub_8012878(void); +void debug_sub_8012D10(u8); void debug_sub_8010818(void); void debug_sub_80108B8(void); void debug_sub_8010CAC(void); @@ -1388,6 +1391,7 @@ extern u8 gBattleBuffersTransferData[]; extern const s16 gUnknown_Debug_821F424[][5]; extern const u16 gUnknown_Debug_821F56C[][5]; +extern const u32 gUnknown_Debug_821F798[][4]; extern const u8 gUnusedOldCharmap_Gfx_lz[]; extern const u8 gUnusedOldCharmap_Tilemap_lz[]; @@ -4628,275 +4632,73 @@ void debug_sub_80125E4() ); } -__attribute__((naked)) -void debug_sub_8012628() +void debug_sub_8012628(void) { - asm( - " ldr r3, ._868 @ gSharedMem\n" - " ldr r2, ._868 + 4 @ gUnknown_Debug_821F798\n" - " ldr r0, ._868 + 8 @ gUnknown_Debug_030043A8\n" - " ldrb r1, [r0]\n" - " lsl r1, r1, #0x2\n" - " ldr r0, ._868 + 12 @ gUnknown_Debug_03004360\n" - " ldrb r0, [r0]\n" - " lsl r0, r0, #0x4\n" - " add r1, r1, r0\n" - " add r1, r1, r2\n" - " ldr r0, [r1]\n" - " add r0, r0, r3\n" - " mov r1, #0x6d\n" - " strb r1, [r0]\n" - " bx lr\n" - "._869:\n" - " .align 2, 0\n" - "._868:\n" - " .word gSharedMem\n" - " .word gUnknown_Debug_821F798\n" - " .word gUnknown_Debug_030043A8\n" - " .word gUnknown_Debug_03004360\n" - "\n" - ); + gSharedMem[gUnknown_Debug_821F798[gUnknown_Debug_03004360][gUnknown_Debug_030043A8]] = 0x6D; } -__attribute__((naked)) -void debug_sub_8012658() +void debug_sub_8012658(void) { - asm( - " ldr r3, ._870 @ gSharedMem\n" - " ldr r2, ._870 + 4 @ gUnknown_Debug_821F798\n" - " ldr r0, ._870 + 8 @ gUnknown_Debug_030043A8\n" - " ldrb r1, [r0]\n" - " lsl r1, r1, #0x2\n" - " ldr r0, ._870 + 12 @ gUnknown_Debug_03004360\n" - " ldrb r0, [r0]\n" - " lsl r0, r0, #0x4\n" - " add r1, r1, r0\n" - " add r1, r1, r2\n" - " ldr r0, [r1]\n" - " add r0, r0, r3\n" - " mov r1, #0x81\n" - " strb r1, [r0]\n" - " bx lr\n" - "._871:\n" - " .align 2, 0\n" - "._870:\n" - " .word gSharedMem\n" - " .word gUnknown_Debug_821F798\n" - " .word gUnknown_Debug_030043A8\n" - " .word gUnknown_Debug_03004360\n" - "\n" - ); + gSharedMem[gUnknown_Debug_821F798[gUnknown_Debug_03004360][gUnknown_Debug_030043A8]] = 0x81; } -__attribute__((naked)) -void debug_sub_8012688() +void debug_sub_8012688(void) { - asm( - " push {r4, r5, r6, lr}\n" - " mov r6, r8\n" - " push {r6}\n" - " add sp, sp, #0xfffffff4\n" - " mov r1, #0x0\n" - " mov r4, #0xcd\n" - " lsl r4, r4, #0x1\n" - " ldr r3, ._873 @ gUnknown_Debug_2023B62\n" - " mov r2, #0x0\n" - "._872:\n" - " add r0, r1, r3\n" - " strb r2, [r0]\n" - " add r1, r1, #0x1\n" - " cmp r1, r4\n" - " ble ._872 @cond_branch\n" - " mov r0, #0x0\n" - " bl SetHBlankCallback\n" - " mov r0, #0x0\n" - " bl SetVBlankCallback\n" - " mov r5, #0x0\n" - " str r5, [sp, #0x8]\n" - " ldr r1, ._873 + 4 @ 0x40000d4\n" - " add r0, sp, #0x8\n" - " str r0, [r1]\n" - " mov r0, #0xc0\n" - " lsl r0, r0, #0x13\n" - " str r0, [r1, #0x4]\n" - " ldr r0, ._873 + 8 @ 0x85006000\n" - " str r0, [r1, #0x8]\n" - " ldr r0, [r1, #0x8]\n" - " ldr r0, ._873 + 12 @ 0x400004c\n" - " strh r5, [r0]\n" - " sub r0, r0, #0xc\n" - " strh r5, [r0]\n" - " add r0, r0, #0x4\n" - " strh r5, [r0]\n" - " sub r0, r0, #0x2\n" - " strh r5, [r0]\n" - " add r0, r0, #0x4\n" - " strh r5, [r0]\n" - " add r0, r0, #0x2\n" - " strh r5, [r0]\n" - " add r0, r0, #0x2\n" - " strh r5, [r0]\n" - " ldr r4, ._873 + 16 @ gWindowTemplate_81E6C58\n" - " add r0, r4, #0\n" - " bl Text_LoadWindowTemplate\n" - " bl ResetPaletteFade\n" - " ldr r0, ._873 + 20 @ gBattle_BG0_X\n" - " strh r5, [r0]\n" - " ldr r1, ._873 + 24 @ gBattle_BG0_Y\n" - " mov r0, #0xa0\n" - " strh r0, [r1]\n" - " ldr r0, ._873 + 28 @ gBattle_BG1_X\n" - " strh r5, [r0]\n" - " ldr r0, ._873 + 32 @ gBattle_BG1_Y\n" - " strh r5, [r0]\n" - " ldr r0, ._873 + 36 @ gBattle_BG2_X\n" - " strh r5, [r0]\n" - " ldr r0, ._873 + 40 @ gBattle_BG2_Y\n" - " strh r5, [r0]\n" - " ldr r0, ._873 + 44 @ gBattle_BG3_X\n" - " strh r5, [r0]\n" - " ldr r0, ._873 + 48 @ gBattle_BG3_Y\n" - " strh r5, [r0]\n" - " ldr r1, ._873 + 52 @ gBattleTerrain\n" - " mov r0, #0x9\n" - " strb r0, [r1]\n" - " bl sub_800D6D4\n" - " bl sub_800DAB8\n" - " bl ResetSpriteData\n" - " bl ResetTasks\n" - " bl FreeAllSpritePalettes\n" - " ldr r1, ._873 + 56 @ gReservedSpritePaletteCount\n" - " mov r0, #0x4\n" - " strb r0, [r1]\n" - " ldr r6, ._873 + 60 @ gCurrentMove\n" - " mov r0, #0x1\n" - " strh r0, [r6]\n" - " ldr r0, ._873 + 64 @ gUnknown_03004210\n" - " add r1, r4, #0\n" - " bl Text_InitWindowWithTemplate\n" - " ldrh r2, [r6]\n" - " lsl r0, r2, #0x3\n" - " ldr r1, ._873 + 68 @ gMonFrontPicTable\n" - " add r0, r0, r1\n" - " ldr r1, ._873 + 72 @ gMonFrontPicCoords\n" - " mov r8, r1\n" - " lsl r2, r2, #0x2\n" - " add r2, r2, r8\n" - " ldrb r1, [r2]\n" - " ldrb r2, [r2, #0x1]\n" - " mov r3, #0x80\n" - " lsl r3, r3, #0x12\n" - " ldr r4, ._873 + 76 @ gUnknown_081FAF4C\n" - " ldr r4, [r4, #0x4]\n" - " str r4, [sp]\n" - " ldrh r4, [r6]\n" - " str r4, [sp, #0x4]\n" - " bl DecompressPicFromTable_2\n" - " ldr r1, ._873 + 80 @ gMonPaletteTable\n" - " ldrh r0, [r6]\n" - " lsl r0, r0, #0x3\n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov r1, #0x88\n" - " lsl r1, r1, #0x1\n" - " mov r2, #0x20\n" - " bl LoadCompressedPalette\n" - " ldrh r0, [r6]\n" - " mov r1, #0x1\n" - " bl GetMonSpriteTemplate_803C56C\n" - " ldr r0, ._873 + 84 @ gUnknown_02024E8C\n" - " ldrh r1, [r6]\n" - " lsl r1, r1, #0x2\n" - " add r1, r1, r8\n" - " ldrb r2, [r1, #0x1]\n" - " add r2, r2, #0x28\n" - " mov r1, #0xb0\n" - " mov r3, #0x28\n" - " bl CreateSprite\n" - " add r4, r0, #0\n" - " lsl r4, r4, #0x18\n" - " lsr r4, r4, #0x18\n" - " ldr r3, ._873 + 88 @ gSprites\n" - " lsl r1, r4, #0x4\n" - " add r1, r1, r4\n" - " lsl r1, r1, #0x2\n" - " add r0, r3, #0\n" - " add r0, r0, #0x1c\n" - " add r0, r1, r0\n" - " ldr r2, ._873 + 92 @ nullsub_37\n" - " str r2, [r0]\n" - " add r1, r1, r3\n" - " ldrb r2, [r1, #0x5]\n" - " mov r0, #0xf\n" - " and r0, r0, r2\n" - " mov r2, #0x10\n" - " orr r0, r0, r2\n" - " strb r0, [r1, #0x5]\n" - " mov r1, #0x80\n" - " lsl r1, r1, #0x13\n" - " mov r2, #0xfa\n" - " lsl r2, r2, #0x5\n" - " add r0, r2, #0\n" - " strh r0, [r1]\n" - " ldr r0, ._873 + 96 @ debug_nullsub_45\n" - " bl SetHBlankCallback\n" - " ldr r0, ._873 + 100 @ debug_sub_8011DD4\n" - " bl SetVBlankCallback\n" - " bl m4aMPlayAllStop\n" - " ldr r0, ._873 + 104 @ debug_sub_8012D10\n" - " mov r1, #0x0\n" - " bl CreateTask\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " ldr r2, ._873 + 108 @ gTasks\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " lsl r1, r1, #0x3\n" - " add r1, r1, r2\n" - " strh r5, [r1, #0x8]\n" - " strh r4, [r1, #0xa]\n" - " ldr r0, ._873 + 112 @ debug_sub_8012878\n" - " bl SetMainCallback2\n" - " add sp, sp, #0xc\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6}\n" - " pop {r0}\n" - " bx r0\n" - "._874:\n" - " .align 2, 0\n" - "._873:\n" - " .word gUnknown_Debug_2023B62\n" - " .word 0x40000d4\n" - " .word 0x85006000\n" - " .word 0x400004c\n" - " .word gWindowTemplate_81E6C58\n" - " .word gBattle_BG0_X\n" - " .word gBattle_BG0_Y\n" - " .word gBattle_BG1_X\n" - " .word gBattle_BG1_Y\n" - " .word gBattle_BG2_X\n" - " .word gBattle_BG2_Y\n" - " .word gBattle_BG3_X\n" - " .word gBattle_BG3_Y\n" - " .word gBattleTerrain\n" - " .word gReservedSpritePaletteCount\n" - " .word gCurrentMove\n" - " .word gUnknown_03004210\n" - " .word gMonFrontPicTable\n" - " .word gMonFrontPicCoords\n" - " .word gUnknown_081FAF4C\n" - " .word gMonPaletteTable\n" - " .word gUnknown_02024E8C\n" - " .word gSprites\n" - " .word nullsub_37+1\n" - " .word debug_nullsub_45+1\n" - " .word debug_sub_8011DD4+1\n" - " .word debug_sub_8012D10+1\n" - " .word gTasks\n" - " .word debug_sub_8012878+1\n" - "\n" - ); + s32 i; + u8 spriteId; + u8 taskId; + + for (i = 0; i < 411; i++) + gUnknown_Debug_2023B62[i] = 0; + SetHBlankCallback(NULL); + SetVBlankCallback(NULL); + DmaFill32(3, 0, (void *)VRAM, VRAM_SIZE); + REG_MOSAIC = 0; + REG_WIN0H = 0; + REG_WIN0V = 0; + REG_WIN1H = 0; + REG_WIN1V = 0; + REG_WININ = 0; + REG_WINOUT = 0; + Text_LoadWindowTemplate(&gWindowTemplate_81E6C58); + ResetPaletteFade(); + gBattle_BG0_X = 0; + gBattle_BG0_Y = DISPLAY_HEIGHT; + gBattle_BG1_X = 0; + gBattle_BG1_Y = 0; + gBattle_BG2_X = 0; + gBattle_BG2_Y = 0; + gBattle_BG3_X = 0; + gBattle_BG3_Y = 0; + gBattleTerrain = 9; + sub_800D6D4(); + sub_800DAB8(); + ResetSpriteData(); + ResetTasks(); + FreeAllSpritePalettes(); + gReservedSpritePaletteCount = 4; + gCurrentMove = 1; + Text_InitWindowWithTemplate(&gUnknown_03004210, &gWindowTemplate_81E6C58); + DecompressPicFromTable_2( + &gMonFrontPicTable[gCurrentMove], + gMonFrontPicCoords[gCurrentMove].coords, + gMonFrontPicCoords[gCurrentMove].y_offset, + (void *)0x02000000, + gUnknown_081FAF4C[1], + gCurrentMove); + LoadCompressedPalette(gMonPaletteTable[gCurrentMove].data, 272, 32); + GetMonSpriteTemplate_803C56C(gCurrentMove, 1); + spriteId = CreateSprite(&gUnknown_02024E8C, 176, 40 + gMonFrontPicCoords[gCurrentMove].y_offset, 40); + gSprites[spriteId].callback = nullsub_37; + gSprites[spriteId].oam.paletteNum = 1; + REG_DISPCNT = 0x1F40; + SetHBlankCallback(debug_nullsub_45); + SetVBlankCallback(debug_sub_8011DD4); + m4aMPlayAllStop(); + taskId = CreateTask(debug_sub_8012D10, 0); + gTasks[taskId].data[0] = 0; + gTasks[taskId].data[1] = spriteId; + SetMainCallback2(debug_sub_8012878); } void debug_sub_8012878(void) -- cgit v1.2.3 From c410df510012f7a6ccfc342b398cd5d407fb0bf6 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 31 Jan 2018 18:33:01 -0800 Subject: Start decompiling psychic.s --- src/battle/anim/psychic.c | 356 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 356 insertions(+) create mode 100644 src/battle/anim/psychic.c (limited to 'src/battle') diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c new file mode 100644 index 000000000..19bfdfdb6 --- /dev/null +++ b/src/battle/anim/psychic.c @@ -0,0 +1,356 @@ +#include "global.h" +#include "battle.h" +#include "battle_anim.h" +#include "palette.h" +#include "rom_8077ABC.h" +#include "sound.h" +#include "task.h" +#include "trig.h" +#include "constants/songs.h" + +extern s16 gBattleAnimArgs[]; +extern u8 gAnimBankAttacker; +extern u8 gAnimBankTarget; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG2_X; +extern u8 gObjectBankIDs[]; + +extern const union AffineAnimCmd *const gUnknown_083DA888[]; +extern struct AffineAnimFrameCmd gUnknown_083DA8A4; +extern struct AffineAnimFrameCmd gUnknown_083DA8C4; + +static void sub_80DB88C(struct Sprite *sprite); +static void sub_80DB8C0(struct Sprite *sprite); +static void sub_80DB92C(struct Sprite *sprite); +static void sub_80DB9E4(struct Sprite *sprite); +static void sub_80DBC00(struct Sprite *sprite); +static void sub_80DBC34(struct Sprite *sprite); +static void sub_80DBCD0(u8 taskId); +static void sub_80DBD58(u8 taskId); +void sub_80DBE98(u8 taskId); + + +void sub_80DB74C(struct Sprite *sprite) +{ + if (GetBankSide(gAnimBankAttacker) == SIDE_PLAYER || IsContest()) + { + sprite->oam.priority = 2; + sprite->subpriority = 200; + } + + if (!IsContest()) + { + u8 bankCopy; + u8 bank = bankCopy = GetBankByIdentity(IDENTITY_OPPONENT_MON1); + u8 identity = GetBankIdentity_permutated(bank); + int var0 = 1; + u8 toBG_2 = (identity ^ var0) != 0; + + if (IsAnimBankSpriteVisible(bank)) + sub_8076034(bank, toBG_2); + + bank = bankCopy ^ 2; + if (IsAnimBankSpriteVisible(bank)) + sub_8076034(bank, toBG_2 ^ var0); + } + + if (!IsContest() && IsDoubleBattle()) + { + if (GetBankSide(gAnimBankAttacker) == SIDE_PLAYER) + { + sprite->pos1.x = 72; + sprite->pos1.y = 80; + } + else + { + sprite->pos1.x = 176; + sprite->pos1.y = 40; + } + } + else + { + if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER) + gBattleAnimArgs[0] = -gBattleAnimArgs[0]; + + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 0) + gBattleAnimArgs[0]; + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 1) + gBattleAnimArgs[1]; + } + + if (IsContest()) + sprite->pos1.y += 9; + + sprite->data[0] = 256 + IndexOfSpritePaletteTag(gBattleAnimArgs[2]) * 16; + sprite->callback = sub_80DB88C; + sprite->callback(sprite); +} + +static void sub_80DB88C(struct Sprite *sprite) +{ + REG_BLDALPHA = ((16 - sprite->data[3]) << 8) | sprite->data[3]; + + if (sprite->data[3] == 13) + sprite->callback = sub_80DB8C0; + else + sprite->data[3]++; +} + +static void sub_80DB8C0(struct Sprite *sprite) +{ + u16 color; + u16 startOffset; + int i; + + if (++sprite->data[1] == 2) + { + sprite->data[1] = 0; + startOffset = sprite->data[0]; + color = gPlttBufferFaded[startOffset + 8]; + + for (i = 8; i > 0; i--) + gPlttBufferFaded[startOffset + i] = gPlttBufferFaded[startOffset + i - 1]; + + gPlttBufferFaded[startOffset + 1] = color; + + if (++sprite->data[2] == 16) + sprite->callback = sub_80DB92C; + } +} + +static void sub_80DB92C(struct Sprite *sprite) +{ + REG_BLDALPHA = ((16 - sprite->data[3]) << 8) | sprite->data[3]; + + if (--sprite->data[3] == -1) + { + if (!IsContest()) + { + u8 bankCopy; + u8 bank = bankCopy = GetBankByIdentity(IDENTITY_OPPONENT_MON1); + + if (IsAnimBankSpriteVisible(bank)) + gSprites[gObjectBankIDs[bank]].invisible = 0; + + bank = bankCopy ^ 2; + if (IsAnimBankSpriteVisible(bank)) + gSprites[gObjectBankIDs[bank]].invisible = 0; + } + + sprite->invisible = 1; + sprite->callback = sub_80DB9E4; + } +} + +static void sub_80DB9E4(struct Sprite *sprite) +{ + if (!IsContest()) + { + u8 bankCopy; + u8 bank = bankCopy = GetBankByIdentity(IDENTITY_OPPONENT_MON1); + u8 identity = GetBankIdentity_permutated(bank); + int var0 = 1; + u8 toBG_2 = (identity ^ var0) != 0; + + if (IsAnimBankSpriteVisible(bank)) + sub_8076464(toBG_2); + + bank = bankCopy ^ 2; + if (IsAnimBankSpriteVisible(bank)) + sub_8076464(toBG_2 ^ var0); + } + + sprite->callback = DestroyAnimSprite; +} + +void sub_80DBA4C(struct Sprite *sprite) +{ + if (sprite->data[0] == 0) + { + int arg3 = gBattleAnimArgs[3]; + u8 var0 = 0; + if (arg3 == 0) + var0 = 1; + + if (!IsContest() && IsDoubleBattle()) + { + if (GetBankSide(gAnimBankAttacker) == SIDE_PLAYER) + { + sprite->pos1.x = 72 - gBattleAnimArgs[0]; + sprite->pos1.y = gBattleAnimArgs[1] + 80; + } + else + { + sprite->pos1.x = gBattleAnimArgs[0] + 176; + sprite->pos1.y = gBattleAnimArgs[1] + 40; + } + } + else + { + if (gBattleAnimArgs[2] == 0) + sub_80787B0(sprite, var0); + else + sub_8078764(sprite, var0); + } + + sprite->data[0]++; + } + else + { + if (sprite->animEnded || sprite->affineAnimEnded) + move_anim_8074EE0(sprite); + } +} + +void sub_80DBAF4(struct Sprite *sprite) +{ + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3); + + if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER) + { + StartSpriteAnim(sprite, 1); + sprite->pos1.x -= 40; + sprite->pos1.y += 10; + sprite->data[1] = -1; + } + else + { + sprite->pos1.x += 40; + sprite->pos1.y -= 10; + sprite->data[1] = 1; + } + + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); + sprite->callback = sub_8078600; +} + +void sub_80DBB70(struct Sprite *sprite) +{ + s16 x = sub_807A100(gAnimBankAttacker, 1) / 2; + s16 y = sub_807A100(gAnimBankAttacker, 0) / -2; + + if (GetBankSide(gAnimBankAttacker) == SIDE_OPPONENT) + { + x = -x; + } + + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2) + x; + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3) + y; + + if (sprite->pos1.y < 16) + { + sprite->pos1.y = 16; + } + + StoreSpriteCallbackInData(sprite, sub_80DBC00); + sprite->callback = sub_8078600; +} + +static void sub_80DBC00(struct Sprite *sprite) +{ + sprite->oam.affineMode = 1; + sprite->affineAnims = gUnknown_083DA888; + sprite->data[0] = 0; + InitSpriteAffineAnim(sprite); + sprite->callback = sub_80DBC34; +} + +static void sub_80DBC34(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + if (sprite->affineAnimEnded) + { + FreeOamMatrix(sprite->oam.matrixNum); + sprite->oam.affineMode = 0; + sprite->data[1] = 18; + sprite->data[0]++; + } + break; + case 1: + if (--sprite->data[1] == -1) + { + DestroyAnimSprite(sprite); + } + break; + } +} + +void sub_80DBC94(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + u8 spriteId = GetAnimBankSpriteId(0); + task->data[0] = spriteId; + sub_80798F4(task, spriteId, &gUnknown_083DA8A4); + task->func = sub_80DBCD0; +} + +static void sub_80DBCD0(u8 taskId) +{ + if (!sub_807992C(&gTasks[taskId])) + { + DestroyAnimVisualTask(taskId); + } +} + +void sub_80DBCFC(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + u8 spriteId = GetAnimBankSpriteId(0); + task->data[0] = spriteId; + task->data[1] = 0; + task->data[2] = 0; + task->data[3] = GetBankSide(gAnimBankAttacker) != SIDE_PLAYER ? 4 : 8; + + sub_80798F4(task, task->data[0], &gUnknown_083DA8C4); + task->func = sub_80DBD58; +} + +static void sub_80DBD58(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[1]) + { + case 0: + sub_807992C(task); + if (++task->data[2] > 19) + task->data[1]++; + break; + case 1: + if (task->data[3] != 0) + { + gSprites[task->data[0]].pos2.y -= 8; + task->data[3]--; + } + else + { + gSprites[task->data[0]].invisible = 1; + gSprites[task->data[0]].pos1.x = 272; + sub_8078F40(task->data[0]); + DestroyAnimVisualTask(taskId); + } + break; + } +} + +void sub_80DBE00(u8 taskId) +{ + u16 var0, var1; + + struct Task *task = &gTasks[taskId]; + + task->data[3] = 16; + task->data[4] = 0; + task->data[13] = GetBankPosition(gAnimBankAttacker, 2); + task->data[14] = GetBankPosition(gAnimBankAttacker, 3); + + var0 = sub_807A100(gAnimBankAttacker, 1) / 3; + var1 = sub_807A100(gAnimBankAttacker, 0) / 3; + task->data[12] = var0 > var1 ? var0 : var1; + + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = 0x10; + + task->func = sub_80DBE98; +} -- cgit v1.2.3 From 2d89da39c172c80a8d1ca6ad63e16a8d8e29d39d Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Wed, 31 Jan 2018 20:59:31 -0800 Subject: More psychic.s decompilation --- src/battle/anim/psychic.c | 254 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 253 insertions(+), 1 deletion(-) (limited to 'src/battle') diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c index 19bfdfdb6..a00b0ba3a 100644 --- a/src/battle/anim/psychic.c +++ b/src/battle/anim/psychic.c @@ -3,6 +3,7 @@ #include "battle_anim.h" #include "palette.h" #include "rom_8077ABC.h" +#include "scanline_effect.h" #include "sound.h" #include "task.h" #include "trig.h" @@ -18,6 +19,8 @@ extern u8 gObjectBankIDs[]; extern const union AffineAnimCmd *const gUnknown_083DA888[]; extern struct AffineAnimFrameCmd gUnknown_083DA8A4; extern struct AffineAnimFrameCmd gUnknown_083DA8C4; +extern const struct SpriteTemplate gSpriteTemplate_83DA8DC; +extern const struct SpriteTemplate gSpriteTemplate_83DA9AC; static void sub_80DB88C(struct Sprite *sprite); static void sub_80DB8C0(struct Sprite *sprite); @@ -27,7 +30,9 @@ static void sub_80DBC00(struct Sprite *sprite); static void sub_80DBC34(struct Sprite *sprite); static void sub_80DBCD0(u8 taskId); static void sub_80DBD58(u8 taskId); -void sub_80DBE98(u8 taskId); +static void sub_80DBE98(u8 taskId); +static void sub_80DC1FC(u8 taskId); +void sub_80DC3F4(u8 taskId); void sub_80DB74C(struct Sprite *sprite) @@ -354,3 +359,250 @@ void sub_80DBE00(u8 taskId) task->func = sub_80DBE98; } + +static void sub_80DBE98(u8 taskId) +{ + u16 i; + u8 spriteId; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 8) + { + task->data[1] = 0; + spriteId = CreateSprite(&gSpriteTemplate_83DA8DC, task->data[13], task->data[14], 0); + task->data[task->data[2] + 8] = spriteId; + + if (spriteId != 64) + { + switch (task->data[2]) + { + case 0: + gSprites[spriteId].pos2.x = task->data[12]; + gSprites[spriteId].pos2.y = -task->data[12]; + break; + case 1: + gSprites[spriteId].pos2.x = -task->data[12]; + gSprites[spriteId].pos2.y = task->data[12]; + break; + case 2: + gSprites[spriteId].pos2.x = task->data[12]; + gSprites[spriteId].pos2.y = task->data[12]; + break; + case 3: + gSprites[spriteId].pos2.x = -task->data[12]; + gSprites[spriteId].pos2.y = -task->data[12]; + break; + } + } + + if (++task->data[2] == 5) + task->data[0]++; + } + break; + case 1: + if (task->data[1] & 1) + task->data[3]--; + else + task->data[4]++; + + REG_BLDALPHA = (task->data[4] << 8) | task->data[3]; + + if (++task->data[1] == 32) + { + for (i = 8; i < 13; i++) + { + if (task->data[i] != 64) + DestroySprite(&gSprites[task->data[i]]); + } + + task->data[0]++; + } + break; + case 2: + task->data[0]++; + break; + case 3: + REG_BLDALPHA = 0; + REG_BLDCNT = 0; + DestroyAnimVisualTask(taskId); + break; + } +} + +static void sub_80DC020(struct Sprite *sprite) +{ + if (sprite->data[1] > sprite->data[0] - 10) + sprite->invisible = sprite->data[1] & 1; + + if (sprite->data[1] == sprite->data[0]) + DestroyAnimSprite(sprite); + + sprite->data[1]++; +} + +void sub_80DC068(struct Sprite *sprite) +{ + if (gBattleAnimArgs[0] == 0) + { + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 2); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 3); + } + + sprite->data[0] = gBattleAnimArgs[1]; + sprite->callback = sub_80DC020; +} + +void sub_80DC0B0(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + if (IsContest()) + { + if (gBattleAnimArgs[0] == 1) + { + task->data[10] = -10; + task->data[11] = sub_807A100(gAnimBankTarget, 5) - 8; + task->data[12] = sub_807A100(gAnimBankTarget, 2) + 8; + task->data[13] = sub_807A100(gAnimBankAttacker, 5) - 8; + task->data[14] = sub_807A100(gAnimBankAttacker, 2) + 8; + } + else + { + task->data[10] = 10; + task->data[11] = sub_807A100(gAnimBankAttacker, 4) + 8; + task->data[12] = sub_807A100(gAnimBankAttacker, 3) - 8; + task->data[13] = sub_807A100(gAnimBankTarget, 4) + 8; + task->data[14] = sub_807A100(gAnimBankTarget, 3) - 8; + } + } + else + { + if (gBattleAnimArgs[0] == 1) + { + task->data[10] = -10; + task->data[11] = sub_807A100(gAnimBankTarget, 4) + 8; + task->data[12] = sub_807A100(gAnimBankTarget, 2) + 8; + task->data[13] = sub_807A100(gAnimBankAttacker, 4) + 8; + task->data[14] = sub_807A100(gAnimBankAttacker, 2) + 8; + } + else + { + task->data[10] = 10; + task->data[11] = sub_807A100(gAnimBankAttacker, 5) - 8; + task->data[12] = sub_807A100(gAnimBankAttacker, 3) - 8; + task->data[13] = sub_807A100(gAnimBankTarget, 5) - 8; + task->data[14] = sub_807A100(gAnimBankTarget, 3) - 8; + } + } + + task->data[1] = 6; + task->func = sub_80DC1FC; +} + +static void sub_80DC1FC(u8 taskId) +{ + u8 spriteId; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 6) + { + task->data[1] = 0; + spriteId = CreateSprite(&gSpriteTemplate_83DA9AC, task->data[11], task->data[12], 0); + if (spriteId != 64) + { + gSprites[spriteId].data[0] = 16; + gSprites[spriteId].data[2] = task->data[13]; + gSprites[spriteId].data[4] = task->data[14]; + gSprites[spriteId].data[5] = task->data[10]; + + sub_80786EC(&gSprites[spriteId]); + StartSpriteAffineAnim(&gSprites[spriteId], task->data[2] & 3); + } + + if (++task->data[2] == 12) + task->data[0]++; + } + break; + case 1: + if (++task->data[1] > 17) + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80DC2B0(struct Sprite *sprite) +{ + if (sub_8078718(sprite)) + { + FreeOamMatrix(sprite->oam.matrixNum); + DestroySprite(sprite); + } +} + +void sub_80DC2D4(u8 taskId) +{ + s16 i; + u8 var1; + struct ScanlineEffectParams scanlineParams; + struct Task *task = &gTasks[taskId]; + + var1 = sub_8077FC0(gAnimBankTarget); + task->data[14] = var1 - 32; + + switch (gBattleAnimArgs[0]) + { + case 0: + task->data[11] = 2; + task->data[12] = 5; + task->data[13] = 64; + task->data[15] = var1 + 32; + break; + case 1: + task->data[11] = 2; + task->data[12] = 5; + task->data[13] = 192; + task->data[15] = var1 + 32; + break; + case 2: + task->data[11] = 4; + task->data[12] = 4; + task->data[13] = 0; + task->data[15] = var1 + 32; + break; + } + + if (task->data[14] < 0) + task->data[14] = 0; + + if (GetBankIdentity_permutated(gAnimBankTarget) == 1) + { + task->data[10] = gBattle_BG1_X; + scanlineParams.dmaDest = ®_BG1HOFS; + } + else + { + task->data[10] = gBattle_BG2_X; + scanlineParams.dmaDest = ®_BG2HOFS; + } + + i = task->data[14]; + while (i <= task->data[14] + 64) + { + gScanlineEffectRegBuffers[0][i] = task->data[10]; + gScanlineEffectRegBuffers[1][i] = task->data[10]; + i++; + } + + scanlineParams.dmaControl = 0XA2600001; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + ScanlineEffect_SetParams(scanlineParams); + + task->func = sub_80DC3F4; +} -- cgit v1.2.3 From 513d85e2df9cdb288df6345107130c4bd144148d Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Thu, 1 Feb 2018 12:20:37 -0800 Subject: Finish decompiling psychic.s --- src/battle/anim/psychic.c | 294 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 293 insertions(+), 1 deletion(-) (limited to 'src/battle') diff --git a/src/battle/anim/psychic.c b/src/battle/anim/psychic.c index a00b0ba3a..6617183cb 100644 --- a/src/battle/anim/psychic.c +++ b/src/battle/anim/psychic.c @@ -32,7 +32,8 @@ static void sub_80DBCD0(u8 taskId); static void sub_80DBD58(u8 taskId); static void sub_80DBE98(u8 taskId); static void sub_80DC1FC(u8 taskId); -void sub_80DC3F4(u8 taskId); +static void sub_80DC3F4(u8 taskId); +void sub_80DC5F4(u8 taskId); void sub_80DB74C(struct Sprite *sprite) @@ -606,3 +607,294 @@ void sub_80DC2D4(u8 taskId) task->func = sub_80DC3F4; } + +static void sub_80DC3F4(u8 taskId) +{ + s16 sineIndex, i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + sineIndex = task->data[13]; + i = task->data[14]; + while (i <= task->data[15]) + { + s16 var2 = (gSineTable[sineIndex] >> task->data[12]); + if (var2 > 0) + { + var2 += (task->data[1] & 3); + } + else if (var2 < 0) + { + var2 -= (task->data[1] & 3); + } + + gScanlineEffectRegBuffers[0][i] = task->data[10] + var2; + gScanlineEffectRegBuffers[1][i] = task->data[10] + var2; + + sineIndex += task->data[11]; + i++; + } + + if (++task->data[1] > 23) + { + task->data[0]++; + } + break; + case 1: + gScanlineEffect.state = 3; + task->data[0]++; + break; + case 2: + DestroyAnimVisualTask(taskId); + break; + } +} + +#ifdef NONMATCHING +void sub_80DC4F4(u8 taskId) +{ + s16 spriteId; + u8 matrixNum; + register u8 matrixNum2 asm("r6"); + struct Task *task = &gTasks[taskId]; + + matrixNum = AllocOamMatrix(); + matrixNum2 = matrixNum; + if (matrixNum2 == 0xFF) + { + DestroyAnimVisualTask(taskId); + return; + } + + spriteId = duplicate_obj_of_side_rel2move_in_transparent_mode(gBattleAnimArgs[0]); + if (spriteId < 0) + { + FreeOamMatrix(matrixNum); + DestroyAnimVisualTask(taskId); + return; + } + + gSprites[spriteId].callback = SpriteCallbackDummy; + gSprites[spriteId].oam.affineMode = ST_OAM_AFFINE_DOUBLE; + gSprites[spriteId].oam.matrixNum = matrixNum2; + gSprites[spriteId].affineAnimPaused = 1; + gSprites[spriteId].subpriority++; + obj_id_set_rotscale(spriteId, 256, 256, 0); + CalcCenterToCornerVec(&gSprites[spriteId], gSprites[spriteId].oam.shape, gSprites[spriteId].oam.size, gSprites[spriteId].oam.affineMode); + + task->data[13] = GetAnimBankSpriteId(gBattleAnimArgs[0]); + task->data[14] = matrixNum; + task->data[15] = spriteId; + task->func = sub_80DC5F4; +} +#else +__attribute__((naked)) +void sub_80DC4F4(u8 taskId) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r10\n\ + mov r6, r9\n\ + mov r5, r8\n\ + push {r5-r7}\n\ + lsls r0, 24\n\ + lsrs r4, r0, 24\n\ + mov r8, r4\n\ + lsls r0, r4, 2\n\ + adds r0, r4\n\ + lsls r0, 3\n\ + ldr r1, _080DC528 @ =gTasks\n\ + adds r7, r0, r1\n\ + bl AllocOamMatrix\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + mov r10, r5\n\ + adds r6, r5, 0\n\ + cmp r6, 0xFF\n\ + bne _080DC52C\n\ + adds r0, r4, 0\n\ + bl DestroyAnimVisualTask\n\ + b _080DC5D6\n\ + .align 2, 0\n\ +_080DC528: .4byte gTasks\n\ +_080DC52C:\n\ + ldr r1, _080DC550 @ =gBattleAnimArgs\n\ + ldrb r0, [r1]\n\ + bl duplicate_obj_of_side_rel2move_in_transparent_mode\n\ + lsls r0, 16\n\ + lsrs r1, r0, 16\n\ + mov r9, r1\n\ + asrs r0, 16\n\ + cmp r0, 0\n\ + bge _080DC554\n\ + adds r0, r5, 0\n\ + bl FreeOamMatrix\n\ + mov r0, r8\n\ + bl DestroyAnimVisualTask\n\ + b _080DC5D6\n\ + .align 2, 0\n\ +_080DC550: .4byte gBattleAnimArgs\n\ +_080DC554:\n\ + ldr r2, _080DC5E4 @ =gSprites\n\ + lsls r4, r0, 4\n\ + adds r4, r0\n\ + lsls r4, 2\n\ + adds r0, r2, 0\n\ + adds r0, 0x1C\n\ + adds r0, r4, r0\n\ + ldr r1, _080DC5E8 @ =SpriteCallbackDummy\n\ + str r1, [r0]\n\ + adds r4, r2\n\ + ldrb r0, [r4, 0x1]\n\ + movs r1, 0x3\n\ + orrs r0, r1\n\ + strb r0, [r4, 0x1]\n\ + movs r0, 0x1F\n\ + ands r6, r0\n\ + lsls r2, r6, 1\n\ + ldrb r1, [r4, 0x3]\n\ + movs r0, 0x3F\n\ + negs r0, r0\n\ + ands r0, r1\n\ + orrs r0, r2\n\ + strb r0, [r4, 0x3]\n\ + adds r2, r4, 0\n\ + adds r2, 0x2C\n\ + ldrb r0, [r2]\n\ + movs r1, 0x80\n\ + orrs r0, r1\n\ + strb r0, [r2]\n\ + adds r1, r4, 0\n\ + adds r1, 0x43\n\ + ldrb r0, [r1]\n\ + adds r0, 0x1\n\ + strb r0, [r1]\n\ + mov r1, r9\n\ + lsls r0, r1, 24\n\ + lsrs r0, 24\n\ + movs r2, 0x80\n\ + lsls r2, 1\n\ + adds r1, r2, 0\n\ + movs r3, 0\n\ + bl obj_id_set_rotscale\n\ + ldrb r3, [r4, 0x1]\n\ + lsrs r1, r3, 6\n\ + ldrb r2, [r4, 0x3]\n\ + lsrs r2, 6\n\ + lsls r3, 30\n\ + lsrs r3, 30\n\ + adds r0, r4, 0\n\ + bl CalcCenterToCornerVec\n\ + ldr r1, _080DC5EC @ =gBattleAnimArgs\n\ + ldrb r0, [r1]\n\ + bl GetAnimBankSpriteId\n\ + lsls r0, 24\n\ + lsrs r0, 24\n\ + strh r0, [r7, 0x22]\n\ + mov r0, r10\n\ + strh r0, [r7, 0x24]\n\ + mov r1, r9\n\ + strh r1, [r7, 0x26]\n\ + ldr r0, _080DC5F0 @ =sub_80DC5F4\n\ + str r0, [r7]\n\ +_080DC5D6:\n\ + pop {r3-r5}\n\ + mov r8, r3\n\ + mov r9, r4\n\ + mov r10, r5\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080DC5E4: .4byte gSprites\n\ +_080DC5E8: .4byte SpriteCallbackDummy\n\ +_080DC5EC: .4byte gBattleAnimArgs\n\ +_080DC5F0: .4byte sub_80DC5F4\n\ + .syntax divided\n"); +} +#endif // NONMATCHING + +void sub_80DC5F4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[1] += 4; + task->data[2] = 256 - (gSineTable[task->data[1]] >> 1); + obj_id_set_rotscale(task->data[15], task->data[2], task->data[2], 0); + sub_8079AB8(task->data[15], task->data[13]); + if (task->data[1] == 48) + task->data[0]++; + break; + case 1: + task->data[1] -= 4; + task->data[2] = 256 - (gSineTable[task->data[1]] >> 1);; + obj_id_set_rotscale(task->data[15], task->data[2], task->data[2], 0); + sub_8079AB8(task->data[15], task->data[13]); + if (task->data[1] == 0) + task->data[0]++; + break; + case 2: + obj_delete_but_dont_free_vram(&gSprites[task->data[15]]); + task->data[0]++; + break; + case 3: + FreeOamMatrix(task->data[14]); + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80DC700(struct Sprite *sprite) +{ + switch (sprite->data[0]) + { + case 0: + sprite->pos1.x = GetBankPosition(gAnimBankAttacker, 0); + sprite->pos1.y = GetBankPosition(gAnimBankAttacker, 1); + + if (IsContest()) + sprite->pos1.y += 12; + + sprite->data[1] = 8; + REG_BLDCNT = 0x3F40; + REG_BLDALPHA = ((16 - sprite->data[1]) << 8) | sprite->data[1]; + sprite->data[0]++; + break; + case 1: + if (sprite->affineAnimEnded) + { + PlaySE12WithPanning(SE_W100, BattleAnimAdjustPanning(-64)); + ChangeSpriteAffineAnim(sprite, 1); + sprite->data[0]++; + } + break; + case 2: + if (sprite->data[2]++ > 1) + { + sprite->data[2] = 0; + sprite->data[1]--; + REG_BLDALPHA = ((16 - sprite->data[1]) << 8) | sprite->data[1]; + + if (sprite->data[1] == 0) + { + sprite->data[0]++; + sprite->invisible = 1; + } + } + + sprite->data[3] += 896; + sprite->pos2.y -= sprite->data[3] >> 8; + sprite->data[3] &= 0xFF; + break; + case 3: + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + DestroyAnimSprite(sprite); + break; + } +} -- cgit v1.2.3 From 07a44e30ff530d5018f870aba4c5710d1e83059b Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sat, 3 Feb 2018 11:58:21 -0800 Subject: Decompile more of dark.s --- src/battle/anim/dark.c | 440 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 429 insertions(+), 11 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c index 8ceb00298..14988ac71 100644 --- a/src/battle/anim/dark.c +++ b/src/battle/anim/dark.c @@ -1,22 +1,36 @@ #include "global.h" -#include "rom_8077ABC.h" -#include "trig.h" #include "battle_anim.h" -#include "sound.h" +#include "palette.h" +#include "rom_8077ABC.h" #include "scanline_effect.h" - -void sub_80DFE90(struct Sprite *sprite); - -void sub_80DFC9C(u8 taskId); -void sub_80DFD58(u8 taskId); +#include "sound.h" +#include "trig.h" +#include "constants/battle_constants.h" extern s16 gBattleAnimArgs[]; extern u8 gAnimBankAttacker; extern u8 gAnimBankTarget; extern u8 gObjectBankIDs[]; +extern u16 gBattle_BG1_X; +extern u16 gBattle_BG1_Y; +extern u16 gBattle_BG2_X; +extern u16 gBattle_BG2_Y; +extern u16 gBattle_WIN0H; +extern u16 gBattle_WIN0V; + +static void sub_80DFE90(struct Sprite *sprite); +static void sub_80DFC9C(u8 taskId); +static void sub_80DFD58(u8 taskId); +static void sub_80DFF58(struct Sprite *sprite); +static void sub_80DFF98(struct Sprite *sprite); +static void sub_80E00D0(struct Sprite *sprite); +static void sub_80E02A4(u8 taskId); +static void sub_80E0620(u8 taskId); +void sub_80E08CC(u8 a); +void sub_80E079C(struct Task *task); -// used in Smoke Ball escape, Sky Attack, Feint Attack and Camouflage +// used in Smoke Ball escape, Sky Attack, Feint Attack and Camouflage void sub_80DFC24(u8 taskId) { int bank; @@ -31,7 +45,7 @@ void sub_80DFC24(u8 taskId) gTasks[taskId].func = sub_80DFC9C; } -void sub_80DFC9C(u8 taskId) +static void sub_80DFC9C(u8 taskId) { u8 r2 = gTasks[taskId].data[1] >> 8; u8 r1 = gTasks[taskId].data[1]; @@ -111,7 +125,7 @@ void sub_80DFE14(struct Sprite *sprite) sub_80DFE90(sprite); } -void sub_80DFE90(struct Sprite *sprite) +static void sub_80DFE90(struct Sprite *sprite) { sprite->data[3] += sprite->data[1]; sprite->data[4] += sprite->data[2]; @@ -136,3 +150,407 @@ void sub_80DFE90(struct Sprite *sprite) if (--sprite->data[0] == 0) DestroyAnimSprite(sprite); } + +void sub_80DFF1C(struct Sprite *sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAffineAnim(sprite, gBattleAnimArgs[2]); + + sprite->data[0] = gBattleAnimArgs[3]; + sprite->data[1] = gBattleAnimArgs[4]; + sprite->data[2] = gBattleAnimArgs[5]; + sprite->callback = sub_80DFF58; +} + +static void sub_80DFF58(struct Sprite *sprite) +{ + sprite->data[4] += sprite->data[0]; + sprite->data[5] += sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = sprite->data[5] >> 8; + + if (++sprite->data[3] == sprite->data[2]) + sprite->callback = sub_80DFF98; +} + +static void sub_80DFF98(struct Sprite *sprite) +{ + sprite->data[4] -= sprite->data[0]; + sprite->data[5] -= sprite->data[1]; + sprite->pos2.x = sprite->data[4] >> 8; + sprite->pos2.y = sprite->data[5] >> 8; + + if (--sprite->data[3] == 0) + move_anim_8074EE0(sprite); +} + +void sub_80DFFD0(struct Sprite *sprite) +{ + u8 bank; + s8 xOffset; + + if (gBattleAnimArgs[0] == 0) + bank = gAnimBankAttacker; + else + bank = gAnimBankTarget; + + xOffset = 20; + sprite->oam.tileNum += 4; + + switch (gBattleAnimArgs[1]) + { + case 0: + sprite->pos1.x = sub_807A100(bank, 5) - 8; + sprite->pos1.y = sub_807A100(bank, 2) + 8; + break; + case 1: + sprite->pos1.x = sub_807A100(bank, 5) - 14; + sprite->pos1.y = sub_807A100(bank, 2) + 16; + break; + case 2: + sprite->pos1.x = sub_807A100(bank, 4) + 8; + sprite->pos1.y = sub_807A100(bank, 2) + 8; + StartSpriteAffineAnim(sprite, 1); + xOffset = -20; + break; + case 3: + sprite->pos1.x = sub_807A100(bank, 4) + 14; + sprite->pos1.y = sub_807A100(bank, 2) + 16; + StartSpriteAffineAnim(sprite, 1); + xOffset = -20; + break; + } + + sprite->data[0] = 32; + sprite->data[2] = sprite->pos1.x + xOffset; + sprite->data[4] = sprite->pos1.y + 12; + sprite->data[5] = -12; + + sub_80786EC(sprite); + sprite->callback = sub_80E00D0; +} + +static void sub_80E00D0(struct Sprite *sprite) +{ + if (sub_8078718(sprite)) + move_anim_8074EE0(sprite); +} + +void sub_80E00EC(u8 taskId) +{ + struct ScanlineEffectParams scanlineParams; + struct Struct_sub_8078914 subStruct; + u16 i; + u8 pos; + int var0; + struct Task *task = &gTasks[taskId]; + + task->data[7] = GetBankPosition(gAnimBankAttacker, 1) + 31; + task->data[6] = sub_807A100(gAnimBankAttacker, 2) - 7; + task->data[5] = task->data[7]; + task->data[4] = task->data[6]; + task->data[13] = (task->data[7] - task->data[6]) << 8; + + pos = GetBankPosition(gAnimBankAttacker, 0); + task->data[14] = pos - 32; + task->data[15] = pos + 32; + + if (GetBankSide(gAnimBankAttacker) == SIDE_PLAYER) + task->data[8] = -12; + else + task->data[8] = -64; + + task->data[3] = GetBankIdentity_permutated(gAnimBankAttacker); + if (task->data[3] == 1) + { + sub_8078914(&subStruct); + task->data[10] = gBattle_BG1_Y; + REG_BLDCNT = 0x3F42; + FillPalette(0, subStruct.field_8 << 4, 32); + scanlineParams.dmaDest = ®_BG1VOFS; + var0 = 2; + + if (!IsContest()) + gBattle_BG2_X += 240; + } + else + { + task->data[10] = gBattle_BG2_Y; + REG_BLDCNT = 0x3F44; + FillPalette(0, 144, 32); + scanlineParams.dmaDest = ®_BG2VOFS; + var0 = 4; + + if (!IsContest()) + gBattle_BG1_X += 240; + } + + scanlineParams.dmaControl = 0xA2600001; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + task->data[11] = 0; + task->data[12] = 16; + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + + sub_80E08CC(3); + + for (i = 0; i < 112; i++) + { + gScanlineEffectRegBuffers[0][i] = task->data[10]; + gScanlineEffectRegBuffers[1][i] = task->data[10]; + } + + ScanlineEffect_SetParams(scanlineParams); + + REG_WINOUT = 0x3F00 | (var0 ^ 0x3F); + REG_WININ = 0x3F3F; + gBattle_WIN0H = (task->data[14] << 8) | task->data[15]; + gBattle_WIN0V = 160; + + task->func = sub_80E02A4; +} + +static void sub_80E02A4(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if (++task->data[2] & 1) + { + if (task->data[11] != 12) + task->data[11]++; + } + else + { + if (task->data[12] != 8) + task->data[12]--; + } + + REG_BLDALPHA = (task->data[12] << 8) | task->data[11]; + + if (task->data[11] == 12 && task->data[12] == 8) + task->data[0]++; + } + break; + case 1: + task->data[4] -= 8; + sub_80E079C(task); + + if (task->data[4] < task->data[8]) + task->data[0]++; + break; + case 2: + task->data[4] -= 8; + sub_80E079C(task); + task->data[14] += 4; + task->data[15] -= 4; + + if (task->data[14] >= task->data[15]) + task->data[14] = task->data[15]; + + gBattle_WIN0H = (task->data[14] << 8) | task->data[15]; + + if (task->data[14] == task->data[15]) + task->data[0]++; + break; + case 3: + gScanlineEffect.state = 3; + task->data[0]++; + break; + case 4: + DestroyAnimVisualTask(taskId); + break; + } +} + +void sub_80E03BC(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + struct ScanlineEffectParams scanlineParams; + u8 pos; + u16 i; + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + if (IsContest() == TRUE) + { + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3F; + DestroyAnimVisualTask(taskId); + } + else + { + task->data[3] = GetBankIdentity_permutated(gAnimBankTarget); + if (task->data[3] == 1) + { + REG_BLDCNT = 0x3F42; + gBattle_BG2_X += 240; + } + else + { + REG_BLDCNT = 0x3F44; + gBattle_BG1_X += 240; + } + + task->data[0]++; + } + break; + case 1: + if (task->data[3] == 1) + { + sub_8078914(&subStruct); + task->data[10] = gBattle_BG1_Y; + FillPalette(0, subStruct.field_8 << 4, 32); + } + else + { + task->data[10] = gBattle_BG2_Y; + FillPalette(0, 144, 32); + } + + sub_80E08CC(3); + task->data[0]++; + break; + case 2: + task->data[7] = GetBankPosition(gAnimBankTarget, 1) + 31; + task->data[6] = sub_807A100(gAnimBankTarget, 2) - 7; + task->data[13] = (task->data[7] - task->data[6]) << 8; + pos = GetBankPosition(gAnimBankTarget, 0); + task->data[14] = pos - 4; + task->data[15] = pos + 4; + + if (GetBankSide(gAnimBankTarget) == SIDE_PLAYER) + task->data[8] = -12; + else + task->data[8] = -64; + + task->data[4] = task->data[8]; + task->data[5] = task->data[8]; + task->data[11] = 12; + task->data[12] = 8; + task->data[0]++; + break; + case 3: + if (task->data[3] == 1) + scanlineParams.dmaDest = ®_BG1VOFS; + else + scanlineParams.dmaDest = ®_BG2VOFS; + + for (i = 0; i < 112; i++) + { + gScanlineEffectRegBuffers[0][i] = task->data[10] + (159 - i); + gScanlineEffectRegBuffers[1][i] = task->data[10] + (159 - i); + } + + scanlineParams.dmaControl = 0xA2600001; + scanlineParams.initState = 1; + scanlineParams.unused9 = 0; + ScanlineEffect_SetParams(scanlineParams); + task->data[0]++; + break; + case 4: + if (task->data[3] == 1) + REG_WINOUT = 0x3F3D; + else + REG_WINOUT = 0x3F3B; + + REG_WININ = 0x3F3F; + gBattle_WIN0H = (task->data[14] << 8) | task->data[15]; + gBattle_WIN0V = 160; + + task->data[0] = 0; + task->data[1] = 0; + task->data[2] = 0; + REG_BLDALPHA = 0x80C; + task->func = sub_80E0620; + break; + } +} + +static void sub_80E0620(u8 taskId) +{ + struct Task *task = &gTasks[taskId]; + + switch (task->data[0]) + { + case 0: + task->data[5] += 8; + if (task->data[5] >= task->data[7]) + task->data[5] = task->data[7]; + + sub_80E079C(task); + + if (task->data[5] == task->data[7]) + task->data[0]++; + break; + case 1: + if (task->data[15] - task->data[14] < 64) + { + task->data[14] -= 4; + task->data[15] += 4; + } + else + { + task->data[1] = 1; + } + + gBattle_WIN0H = (task->data[14] << 8) | task->data[15]; + task->data[4] += 8; + + if (task->data[4] >= task->data[6]) + task->data[4] = task->data[6]; + + sub_80E079C(task); + + if (task->data[4] == task->data[6] && task->data[1] != 0) + { + task->data[1] = 0; + task->data[0]++; + } + break; + case 2: + if (++task->data[1] > 1) + { + task->data[1] = 0; + if ((++task->data[2] & 1) != 0) + { + if (task->data[11] != 0) + task->data[11]--; + } + else + { + if (task->data[12] < 16) + task->data[12]++; + } + + REG_BLDALPHA = (task->data[12] << 8) | task->data[11]; + + if (task->data[11] == 0 && task->data[12] == 16) + task->data[0]++; + } + break; + case 3: + gScanlineEffect.state = 3; + task->data[0]++; + break; + case 4: + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3F; + DestroyAnimVisualTask(taskId); + break; + } +} -- cgit v1.2.3 From 338d2b0b1897899a6fa787f8baa4cf392f81b718 Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 4 Feb 2018 12:34:18 -0800 Subject: Finish decompiling dark.s except one function --- src/battle/anim/dark.c | 456 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 454 insertions(+), 2 deletions(-) (limited to 'src/battle') diff --git a/src/battle/anim/dark.c b/src/battle/anim/dark.c index 14988ac71..1c88dc23e 100644 --- a/src/battle/anim/dark.c +++ b/src/battle/anim/dark.c @@ -1,9 +1,13 @@ #include "global.h" #include "battle_anim.h" +#include "blend_palette.h" +#include "decompress.h" +#include "ewram.h" #include "palette.h" #include "rom_8077ABC.h" #include "scanline_effect.h" #include "sound.h" +#include "sprite.h" #include "trig.h" #include "constants/battle_constants.h" @@ -17,6 +21,12 @@ extern u16 gBattle_BG2_X; extern u16 gBattle_BG2_Y; extern u16 gBattle_WIN0H; extern u16 gBattle_WIN0V; +extern u16 gBattlePartyID[]; +extern u8 gAnimMoveTurn; + +extern const u8 gUnknown_08D1D574[]; +extern const u8 gUnknown_08D1D410[]; +extern const u16 gUnknown_08D1D54C[]; static void sub_80DFE90(struct Sprite *sprite); static void sub_80DFC9C(u8 taskId); @@ -26,8 +36,9 @@ static void sub_80DFF98(struct Sprite *sprite); static void sub_80E00D0(struct Sprite *sprite); static void sub_80E02A4(u8 taskId); static void sub_80E0620(u8 taskId); -void sub_80E08CC(u8 a); -void sub_80E079C(struct Task *task); +static void sub_80E08CC(u8 priority); +static void sub_80E079C(struct Task *task); +static void sub_80E0CD0(u8 taskId); // used in Smoke Ball escape, Sky Attack, Feint Attack and Camouflage @@ -554,3 +565,444 @@ static void sub_80E0620(u8 taskId) break; } } + +// static void sub_80E079C(struct Task *task) +// { +// int var0, var1; +// s16 var2; +// s16 i, j; + +// var2 = task->data[5] - task->data[4]; +// if (var2 != 0) +// { +// var0 = task->data[13] / var2; +// var1 = task->data[6]; + +// for (i = 0; i < task->data[4]; i++) +// { +// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = task->data[10] - (i - 159); +// } + +// for (i = task->data[4]; i <= task->data[5]; i++) +// { +// if (i >= 0) +// { +// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][i] = (var1 - i) + task->data[10]; +// } + +// var1 += var0; +// } + +// for (j = i; j < task->data[7]; j++) +// { +// if (j >= 0) +// { +// gScanlineEffectRegBuffers[gScanlineEffect.srcBuffer][j] = (task->data[10] + 159) - j; +// } +// } +// } +// else +// { +// for (i = 0; i < 112; i++) +// { +// gScanlineEffectRegBuffers[0][i] = task->data[10] + 159 - i; +// gScanlineEffectRegBuffers[1][i] = task->data[10] + 159 - i; +// } +// } +// } + +__attribute__((naked)) +static void sub_80E079C(struct Task *task) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + adds r6, r0, 0\n\ + ldrh r0, [r6, 0x12]\n\ + ldrh r4, [r6, 0x10]\n\ + subs r0, r4\n\ + lsls r0, 16\n\ + asrs r1, r0, 16\n\ + cmp r1, 0\n\ + beq _080E0890\n\ + movs r2, 0x22\n\ + ldrsh r0, [r6, r2]\n\ + bl __divsi3\n\ + mov r8, r0\n\ + movs r3, 0x14\n\ + ldrsh r0, [r6, r3]\n\ + lsls r5, r0, 8\n\ + lsls r0, r4, 16\n\ + movs r4, 0\n\ + cmp r0, 0\n\ + ble _080E07FC\n\ + ldr r0, _080E0888 @ =gScanlineEffectRegBuffers\n\ + mov r12, r0\n\ + ldr r7, _080E088C @ =gScanlineEffect\n\ +_080E07D0:\n\ + lsls r2, r4, 16\n\ + asrs r2, 16\n\ + lsls r3, r2, 1\n\ + ldrb r1, [r7, 0x14]\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + lsls r0, 7\n\ + adds r3, r0\n\ + add r3, r12\n\ + adds r1, r2, 0\n\ + subs r1, 0x9F\n\ + ldrh r0, [r6, 0x1C]\n\ + subs r0, r1\n\ + strh r0, [r3]\n\ + adds r2, 0x1\n\ + lsls r2, 16\n\ + lsrs r4, r2, 16\n\ + asrs r2, 16\n\ + movs r1, 0x10\n\ + ldrsh r0, [r6, r1]\n\ + cmp r2, r0\n\ + blt _080E07D0\n\ +_080E07FC:\n\ + ldrh r4, [r6, 0x10]\n\ + lsls r3, r4, 16\n\ + asrs r1, r3, 16\n\ + movs r2, 0x12\n\ + ldrsh r0, [r6, r2]\n\ + cmp r1, r0\n\ + bgt _080E0846\n\ + ldr r0, _080E0888 @ =gScanlineEffectRegBuffers\n\ + mov r12, r0\n\ + ldr r7, _080E088C @ =gScanlineEffect\n\ +_080E0810:\n\ + asrs r4, r3, 16\n\ + cmp r4, 0\n\ + blt _080E0832\n\ + asrs r1, r5, 8\n\ + subs r1, r4\n\ + lsls r3, r4, 1\n\ + ldrb r2, [r7, 0x14]\n\ + lsls r0, r2, 4\n\ + subs r0, r2\n\ + lsls r0, 7\n\ + adds r3, r0\n\ + add r3, r12\n\ + lsls r1, 16\n\ + asrs r1, 16\n\ + ldrh r2, [r6, 0x1C]\n\ + adds r1, r2\n\ + strh r1, [r3]\n\ +_080E0832:\n\ + add r5, r8\n\ + adds r0, r4, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + lsls r3, r4, 16\n\ + asrs r1, r3, 16\n\ + movs r2, 0x12\n\ + ldrsh r0, [r6, r2]\n\ + cmp r1, r0\n\ + ble _080E0810\n\ +_080E0846:\n\ + movs r3, 0x1C\n\ + ldrsh r0, [r6, r3]\n\ + adds r0, 0x9F\n\ + lsls r2, r4, 16\n\ + asrs r1, r2, 16\n\ + subs r5, r0, r1\n\ + movs r3, 0x16\n\ + ldrsh r0, [r6, r3]\n\ + cmp r1, r0\n\ + bge _080E08BE\n\ + ldr r7, _080E0888 @ =gScanlineEffectRegBuffers\n\ + ldr r4, _080E088C @ =gScanlineEffect\n\ +_080E085E:\n\ + asrs r3, r2, 16\n\ + cmp r3, 0\n\ + blt _080E0876\n\ + lsls r2, r3, 1\n\ + ldrb r1, [r4, 0x14]\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + lsls r0, 7\n\ + adds r2, r0\n\ + adds r2, r7\n\ + strh r5, [r2]\n\ + subs r5, 0x1\n\ +_080E0876:\n\ + adds r0, r3, 0x1\n\ + lsls r2, r0, 16\n\ + asrs r1, r2, 16\n\ + movs r3, 0x16\n\ + ldrsh r0, [r6, r3]\n\ + cmp r1, r0\n\ + blt _080E085E\n\ + b _080E08BE\n\ + .align 2, 0\n\ +_080E0888: .4byte gScanlineEffectRegBuffers\n\ +_080E088C: .4byte gScanlineEffect\n\ +_080E0890:\n\ + movs r1, 0x1C\n\ + ldrsh r0, [r6, r1]\n\ + adds r5, r0, 0\n\ + adds r5, 0x9F\n\ + movs r4, 0\n\ + ldr r3, _080E08C8 @ =gScanlineEffectRegBuffers\n\ + movs r2, 0xF0\n\ + lsls r2, 3\n\ + adds r6, r3, r2\n\ +_080E08A2:\n\ + lsls r0, r4, 16\n\ + asrs r0, 16\n\ + lsls r2, r0, 1\n\ + adds r1, r2, r3\n\ + strh r5, [r1]\n\ + adds r2, r6\n\ + strh r5, [r2]\n\ + subs r5, 0x1\n\ + adds r0, 0x1\n\ + lsls r0, 16\n\ + lsrs r4, r0, 16\n\ + asrs r0, 16\n\ + cmp r0, 0x6F\n\ + ble _080E08A2\n\ +_080E08BE:\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r0}\n\ + bx r0\n\ + .align 2, 0\n\ +_080E08C8: .4byte gScanlineEffectRegBuffers\n\ + .syntax divided\n"); +} + +static void sub_80E08CC(u8 priority) +{ + u16 i; + + for (i = 0; i < 4; i++) + { + u8 spriteId = GetAnimBankSpriteId(i); + if (spriteId != 0xFF) + gSprites[spriteId].oam.priority = priority; + } +} + +void sub_80E0918(u8 taskId) +{ + u8 toBG2 = GetBankIdentity_permutated(gAnimBankAttacker) ^ 1 ? 1 : 0; + sub_8076034(gAnimBankAttacker, toBG2); + gSprites[gObjectBankIDs[gAnimBankAttacker]].invisible = 0; + + if (IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2)) + { + sub_8076034(gAnimBankAttacker ^ 2, toBG2 ^ 1); + gSprites[gObjectBankIDs[gAnimBankAttacker ^ 2]].invisible = 0; + } + + DestroyAnimVisualTask(taskId); +} + +void sub_80E09C4(u8 taskId) +{ + u8 toBG2 = GetBankIdentity_permutated(gAnimBankAttacker) ^ 1 ? 1 : 0; + sub_8076464(toBG2); + + if (IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2)) + sub_8076464(toBG2 ^ 1); + + DestroyAnimVisualTask(taskId); +} + +void sub_80E0A10(struct Sprite *sprite) +{ + sprite->pos1.x += gBattleAnimArgs[0]; + sprite->pos1.y += gBattleAnimArgs[1]; + StartSpriteAnim(sprite, gBattleAnimArgs[2]); + sprite->callback = sub_8078600; + StoreSpriteCallbackInData(sprite, DestroyAnimSprite); +} + +void sub_80E0A4C(u8 taskId) +{ + u16 species; + u8 spriteId; + u8 newSpriteId; + u16 paletteNum; + struct Struct_sub_8078914 subStruct; + int var0 = 0; + + gBattle_WIN0H = var0; + gBattle_WIN0V = var0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3D; + REG_DISPCNT |= DISPCNT_OBJWIN_ON; + REG_BLDCNT = 0x3F42; + REG_BLDALPHA = 0xC08; + REG_BG1CNT_BITFIELD.priority = 0; + REG_BG1CNT_BITFIELD.screenSize = 0; + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 1; + + if (IsDoubleBattle() && !IsContest()) + { + if (GetBankIdentity(gAnimBankAttacker) == 3 || GetBankIdentity(gAnimBankAttacker) == 0) + { + if (IsAnimBankSpriteVisible(gAnimBankAttacker ^ 2) == TRUE) + { + gSprites[gObjectBankIDs[gAnimBankAttacker ^ 2]].oam.priority--; + REG_BG1CNT_BITFIELD.priority = 1; + var0 = 1; + } + } + } + + if (IsContest()) + { + species = EWRAM_19348; + } + else + { + if (GetBankSide(gAnimBankAttacker) != SIDE_PLAYER) + species = GetMonData(&gEnemyParty[gBattlePartyID[gAnimBankAttacker]], MON_DATA_SPECIES); + else + species = GetMonData(&gPlayerParty[gBattlePartyID[gAnimBankAttacker]], MON_DATA_SPECIES); + } + + spriteId = GetAnimBankSpriteId(0); + newSpriteId = sub_807A4A0(gAnimBankAttacker, spriteId, species); + + sub_8078914(&subStruct); + DmaClear32(3, subStruct.field_4, 0x1000); + LZDecompressVram(&gUnknown_08D1D574, subStruct.field_4); + LZDecompressVram(&gUnknown_08D1D410, subStruct.field_0); + LoadCompressedPalette(&gUnknown_08D1D54C, subStruct.field_8 << 4, 32); + + gBattle_BG1_X = -gSprites[spriteId].pos1.x + 96; + gBattle_BG1_Y = -gSprites[spriteId].pos1.y + 32; + paletteNum = 16 + gSprites[spriteId].oam.paletteNum; + + if (gBattleAnimArgs[1] == 0) + sub_8079108(paletteNum, FALSE); + else + BlendPalette(paletteNum * 16, 16, 11, gBattleAnimArgs[2]); + + gTasks[taskId].data[0] = newSpriteId; + gTasks[taskId].data[1] = gBattleAnimArgs[0]; + gTasks[taskId].data[2] = gBattleAnimArgs[1]; + gTasks[taskId].data[3] = gBattleAnimArgs[2]; + gTasks[taskId].data[6] = var0; + gTasks[taskId].func = sub_80E0CD0; +} + +static void sub_80E0CD0(u8 taskId) +{ + struct Struct_sub_8078914 subStruct; + u16 paletteNum; + u8 spriteId; + u8 taskIdCopy = taskId; + + gTasks[taskIdCopy].data[10] += 4; + gBattle_BG1_X -= 4; + + if (gTasks[taskIdCopy].data[10] == 128) + { + gTasks[taskIdCopy].data[10] = 0; + gBattle_BG1_X += 128; + + if (++gTasks[taskIdCopy].data[11] == 2) + { + sub_8076464(0); + gBattle_WIN0H = 0; + gBattle_WIN0V = 0; + REG_WININ = 0x3F3F; + REG_WINOUT = 0x3F3F; + + if (!IsContest()) + REG_BG1CNT_BITFIELD.charBaseBlock = 0; + + REG_DISPCNT ^= DISPCNT_OBJWIN_ON; + REG_BLDCNT = 0; + REG_BLDALPHA = 0; + + spriteId = GetAnimBankSpriteId(0); + paletteNum = 16 + gSprites[spriteId].oam.paletteNum; + if (gTasks[taskIdCopy].data[1] == 0) + sub_8079108(paletteNum, 1); + + DestroySprite(&gSprites[gTasks[taskIdCopy].data[0]]); + sub_8078914(&subStruct); + DmaClear32(3, subStruct.field_4, 0x800); + + if (gTasks[taskIdCopy].data[6] == 1) + { + gSprites[gObjectBankIDs[gAnimBankAttacker ^ 2]].oam.priority++; + } + + DestroyAnimVisualTask(taskIdCopy); + } + } +} + +void sub_80E0E24(u8 taskId) +{ + u8 spriteId; + u8 bank; + bool8 calcSpriteId = FALSE; + u8 identity = 0; + + switch (gBattleAnimArgs[0]) + { + case 0: + case 1: + case 2: + case 3: + spriteId = GetAnimBankSpriteId(gBattleAnimArgs[0]); + break; + case 4: + identity = IDENTITY_PLAYER_MON1; + calcSpriteId = TRUE; + break; + case 5: + identity = IDENTITY_PLAYER_MON2; + calcSpriteId = TRUE; + break; + case 6: + identity = IDENTITY_OPPONENT_MON1; + calcSpriteId = TRUE; + break; + case 7: + identity = IDENTITY_OPPONENT_MON2; + calcSpriteId = TRUE; + break; + default: + spriteId = 0xFF; + break; + } + + if (calcSpriteId) + { + bank = GetBankByIdentity(identity); + if (IsAnimBankSpriteVisible(bank)) + spriteId = gObjectBankIDs[bank]; + else + spriteId = 0xFF; + } + + if (spriteId != 0xFF) + sub_8079108(gSprites[spriteId].oam.paletteNum + 16, gBattleAnimArgs[1]); + + DestroyAnimVisualTask(taskId); +} + +void sub_80E0EE8(u8 taskId) +{ + if (gAnimMoveTurn < 2) + gBattleAnimArgs[7] = 0; + + if (gAnimMoveTurn == 2) + gBattleAnimArgs[7] = 1; + + DestroyAnimVisualTask(taskId); +} -- cgit v1.2.3 From 5563c78798f95130cccf7d5a5c17b02cfb06442b Mon Sep 17 00:00:00 2001 From: camthesaxman Date: Tue, 6 Feb 2018 18:50:20 -0600 Subject: decompile debug_sub_8010CAC --- src/battle/battle_2.c | 1317 ++++++++++++------------------------------------- 1 file changed, 327 insertions(+), 990 deletions(-) (limited to 'src/battle') diff --git a/src/battle/battle_2.c b/src/battle/battle_2.c index d3ddc5960..b09d9ad8d 100644 --- a/src/battle/battle_2.c +++ b/src/battle/battle_2.c @@ -1363,19 +1363,25 @@ extern u8 gUnknown_Debug_2023B62[]; extern const u8 Str_821F7BD[]; extern const u8 Str_821F7DA[]; -void debug_sub_8012878(void); -void debug_sub_8012D10(u8); void debug_sub_8010818(void); void debug_sub_80108B8(void); void debug_sub_8010CAC(void); +void debug_sub_8011498(void); void debug_sub_801174C(void); void debug_sub_8011D40(void); +void debug_sub_8011E5C(void); +void debug_sub_8011E74(void); void debug_sub_8011EA0(u8); void debug_sub_8012294(void); void debug_sub_80123D8(u8); void debug_sub_8012540(void); void debug_nullsub_3(void); void debug_sub_80125A0(void); +void debug_sub_80125E4(void); +void debug_sub_8012628(void); +void debug_sub_8012688(void); +void debug_sub_8012878(void); +void debug_sub_8012D10(u8); u32 debug_sub_8013294(u8, void *, u32); void debug_sub_80132C8(u8, void *, u32); @@ -1389,7 +1395,7 @@ extern u8 gUnknown_Debug_030043A4; extern u8 gUnknown_Debug_030043A8; extern u8 gBattleBuffersTransferData[]; -extern const s16 gUnknown_Debug_821F424[][5]; +extern const u16 gUnknown_Debug_821F424[][5]; extern const u16 gUnknown_Debug_821F56C[][5]; extern const u32 gUnknown_Debug_821F798[][4]; @@ -1579,994 +1585,325 @@ void debug_sub_8010B80(u8 a) = r12 * 10 + r7; } -__attribute__((naked)) -void debug_sub_8010CAC() +void debug_sub_8010CAC(void) { - asm( - " push {r4, r5, r6, r7, lr}\n" - " mov r7, r8\n" - " push {r7}\n" - " add sp, sp, #0xfffffff0\n" - " ldr r4, ._553 @ gMain\n" - " ldrh r1, [r4, #0x28]\n" - " mov r0, #0x81\n" - " lsl r0, r0, #0x2\n" - " cmp r1, r0\n" - " bne ._543 @cond_branch\n" - " bl DoSoftReset\n" - "._543:\n" - " ldrh r0, [r4, #0x2a]\n" - " cmp r0, #0x4\n" - " beq ._544 @cond_branch\n" - " b ._559\n" - "._544:\n" - " ldr r0, ._553 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " mov r8, r0\n" - " cmp r1, #0x5\n" - " bhi ._546 @cond_branch\n" - " ldr r0, ._553 + 8 @ gUnknown_Debug_030043A8\n" - " mov r1, #0x0\n" - " strb r1, [r0]\n" - " bl debug_sub_8012628\n" - " ldr r0, ._553 + 12 @ debug_sub_8011498\n" - " bl SetMainCallback2\n" - "._546:\n" - " ldr r0, ._553 + 16 @ gUnknown_Debug_030043A0\n" - " ldrb r3, [r0]\n" - " cmp r3, #0\n" - " bne ._555 @cond_branch\n" - " mov r1, r8\n" - " ldrb r0, [r1]\n" - " cmp r0, #0x6\n" - " bne ._555 @cond_branch\n" - " ldr r0, ._553 + 20 @ debug_sub_80108B8\n" - " str r0, [r4, #0x8]\n" - " ldr r4, ._553 + 24 @ gPlayerParty\n" - " ldr r0, ._553 + 28 @ gUnknown_Debug_2023A76\n" - " ldrh r1, [r0]\n" - " ldrb r2, [r0, #0x2]\n" - " str r3, [sp]\n" - " str r3, [sp, #0x4]\n" - " str r3, [sp, #0x8]\n" - " str r3, [sp, #0xc]\n" - " add r0, r4, #0\n" - " mov r3, #0x20\n" - " bl CreateMon\n" - " mov r5, #0x0\n" - " add r6, r4, #0\n" - "._549:\n" - " add r1, r5, #0\n" - " add r1, r1, #0xd\n" - " lsl r4, r5, #0x1\n" - " ldr r0, ._553 + 32 @ gUnknown_Debug_2023B02\n" - " add r4, r4, r0\n" - " add r0, r6, #0\n" - " add r2, r4, #0\n" - " bl SetMonData\n" - " add r1, r5, #0\n" - " add r1, r1, #0x11\n" - " mov r2, #0x0\n" - " ldsh r0, [r4, r2]\n" - " lsl r2, r0, #0x1\n" - " add r2, r2, r0\n" - " lsl r2, r2, #0x2\n" - " ldr r0, ._553 + 36 @ gBattleMoves\n" - " add r2, r2, r0\n" - " add r0, r6, #0\n" - " bl SetMonData\n" - " add r5, r5, #0x1\n" - " cmp r5, #0x3\n" - " ble ._549 @cond_branch\n" - " ldr r2, ._553 + 28 @ gUnknown_Debug_2023A76\n" - " mov r4, #0x3c\n" - " ldsh r0, [r2, r4]\n" - " cmp r0, #0x1\n" - " beq ._550 @cond_branch\n" - " cmp r0, #0x2\n" - " beq ._551 @cond_branch\n" - " b ._555\n" - "._554:\n" - " .align 2, 0\n" - "._553:\n" - " .word gMain\n" - " .word gUnknown_Debug_030043A4\n" - " .word gUnknown_Debug_030043A8\n" - " .word debug_sub_8011498+1\n" - " .word gUnknown_Debug_030043A0\n" - " .word debug_sub_80108B8+1\n" - " .word gPlayerParty\n" - " .word gUnknown_Debug_2023A76\n" - " .word gUnknown_Debug_2023B02\n" - " .word gBattleMoves+0x4\n" - "._550:\n" - " ldr r1, ._556 @ gCB2_AfterEvolution\n" - " ldr r0, ._556 + 4 @ debug_sub_80108B8\n" - " str r0, [r1]\n" - " ldr r0, ._556 + 8 @ gPlayerParty\n" - " ldrh r1, [r2, #0xa]\n" - " mov r2, #0x1\n" - " mov r3, #0x0\n" - " bl EvolutionScene\n" - " b ._555\n" - "._557:\n" - " .align 2, 0\n" - "._556:\n" - " .word gCB2_AfterEvolution\n" - " .word debug_sub_80108B8+1\n" - " .word gPlayerParty\n" - "._551:\n" - " bl debug_sub_8012688\n" - "._555:\n" - " ldr r0, ._565 @ gUnknown_Debug_030043A0\n" - " ldrb r0, [r0]\n" - " cmp r0, #0x1\n" - " bne ._559 @cond_branch\n" - " ldr r0, ._565 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r0, [r0]\n" - " cmp r0, #0x6\n" - " bne ._559 @cond_branch\n" - " ldr r3, ._565 + 8 @ gSaveBlock2\n" - " ldrb r2, [r3, #0x15]\n" - " lsl r0, r2, #0x1d\n" - " lsr r5, r0, #0x1f\n" - " lsl r0, r2, #0x1f\n" - " lsr r0, r0, #0x1f\n" - " lsl r0, r0, #0x1\n" - " orr r5, r5, r0\n" - " add r5, r5, #0x1\n" - " cmp r5, #0x4\n" - " bne ._560 @cond_branch\n" - " mov r5, #0x0\n" - "._560:\n" - " mov r0, #0x1\n" - " add r1, r5, #0\n" - " and r1, r1, r0\n" - " lsl r1, r1, #0x2\n" - " mov r0, #0x5\n" - " neg r0, r0\n" - " and r0, r0, r2\n" - " orr r0, r0, r1\n" - " mov r1, #0x2\n" - " and r5, r5, r1\n" - " lsr r2, r5, #0x1\n" - " sub r1, r1, #0x4\n" - " and r0, r0, r1\n" - " orr r0, r0, r2\n" - " strb r0, [r3, #0x15]\n" - " lsl r0, r0, #0x1f\n" - " lsr r0, r0, #0x1f\n" - " bl SetPokemonCryStereo\n" - " bl debug_nullsub_3\n" - "._559:\n" - " ldr r4, ._565 + 12 @ gMain\n" - " ldrh r0, [r4, #0x2a]\n" - " cmp r0, #0x8\n" - " bne ._561 @cond_branch\n" - " bl debug_sub_801174C\n" - "._561:\n" - " ldrh r0, [r4, #0x2a]\n" - " cmp r0, #0x40\n" - " bne ._562 @cond_branch\n" - " bl debug_sub_80125E4\n" - " ldr r1, ._565 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r0, [r1]\n" - " cmp r0, #0\n" - " beq ._563 @cond_branch\n" - " sub r0, r0, #0x1\n" - " b ._564\n" - "._566:\n" - " .align 2, 0\n" - "._565:\n" - " .word gUnknown_Debug_030043A0\n" - " .word gUnknown_Debug_030043A4\n" - " .word gSaveBlock2\n" - " .word gMain\n" - "._563:\n" - " mov r0, #0x6\n" - "._564:\n" - " strb r0, [r1]\n" - " bl debug_sub_8011E74\n" - " ldr r0, ._570 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - " bl debug_sub_80125A0\n" - "._562:\n" - " ldr r0, ._570 + 4 @ gMain\n" - " ldrh r0, [r0, #0x2a]\n" - " cmp r0, #0x80\n" - " bne ._567 @cond_branch\n" - " bl debug_sub_80125E4\n" - " ldr r1, ._570 @ gUnknown_Debug_030043A4\n" - " ldrb r0, [r1]\n" - " cmp r0, #0x6\n" - " bne ._568 @cond_branch\n" - " mov r0, #0x0\n" - " b ._569\n" - "._571:\n" - " .align 2, 0\n" - "._570:\n" - " .word gUnknown_Debug_030043A4\n" - " .word gMain\n" - "._568:\n" - " add r0, r0, #0x1\n" - "._569:\n" - " strb r0, [r1]\n" - " bl debug_sub_8011E74\n" - " ldr r0, ._575 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - " bl debug_sub_80125A0\n" - "._567:\n" - " ldr r0, ._575 + 4 @ gMain\n" - " ldrh r0, [r0, #0x2a]\n" - " cmp r0, #0x20\n" - " bne ._572 @cond_branch\n" - " bl debug_sub_80125E4\n" - " ldr r2, ._575 + 8 @ gUnknown_Debug_030043A0\n" - " ldrb r0, [r2]\n" - " add r1, r0, #0\n" - " cmp r1, #0\n" - " beq ._573 @cond_branch\n" - " sub r0, r0, #0x1\n" - " strb r0, [r2]\n" - " b ._577\n" - "._576:\n" - " .align 2, 0\n" - "._575:\n" - " .word gUnknown_Debug_030043A4\n" - " .word gMain\n" - " .word gUnknown_Debug_030043A0\n" - "._573:\n" - " ldr r3, ._581 @ gUnknown_Debug_03004360\n" - " ldrb r0, [r3]\n" - " cmp r0, #0\n" - " beq ._577 @cond_branch\n" - " strb r1, [r3]\n" - " mov r0, #0x4\n" - " strb r0, [r2]\n" - " ldr r0, ._581 + 4 @ gBattle_BG1_X\n" - " strh r1, [r0]\n" - " bl debug_sub_8011E5C\n" - " bl debug_sub_8011E74\n" - " ldr r0, ._581 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - "._577:\n" - " bl debug_sub_80125A0\n" - "._572:\n" - " ldr r0, ._581 + 12 @ gMain\n" - " ldrh r0, [r0, #0x2a]\n" - " cmp r0, #0x10\n" - " bne ._578 @cond_branch\n" - " bl debug_sub_80125E4\n" - " ldr r2, ._581 + 16 @ gUnknown_Debug_030043A0\n" - " ldrb r0, [r2]\n" - " cmp r0, #0x4\n" - " beq ._579 @cond_branch\n" - " add r0, r0, #0x1\n" - " strb r0, [r2]\n" - " b ._583\n" - "._582:\n" - " .align 2, 0\n" - "._581:\n" - " .word gUnknown_Debug_03004360\n" - " .word gBattle_BG1_X\n" - " .word gUnknown_Debug_030043A4\n" - " .word gMain\n" - " .word gUnknown_Debug_030043A0\n" - "._579:\n" - " ldr r3, ._587 @ gUnknown_Debug_03004360\n" - " ldrb r1, [r3]\n" - " cmp r1, #0\n" - " bne ._583 @cond_branch\n" - " mov r0, #0x1\n" - " strb r0, [r3]\n" - " strb r1, [r2]\n" - " ldr r1, ._587 + 4 @ gBattle_BG1_X\n" - " mov r2, #0x80\n" - " lsl r2, r2, #0x1\n" - " add r0, r2, #0\n" - " strh r0, [r1]\n" - " bl debug_sub_8011E5C\n" - " bl debug_sub_8011E74\n" - " ldr r0, ._587 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - "._583:\n" - " bl debug_sub_80125A0\n" - "._578:\n" - " ldr r0, ._587 + 12 @ gMain\n" - " ldrh r1, [r0, #0x30]\n" - " mov r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._584 @cond_branch\n" - " b ._607\n" - "._584:\n" - " ldr r0, ._587 + 16 @ gUnknown_Debug_030043A0\n" - " ldrb r2, [r0]\n" - " ldr r0, ._587 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " add r0, r2, r0\n" - " sub r0, r0, #0x1e\n" - " cmp r0, #0x4\n" - " bhi ._586 @cond_branch\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._587 + 20 @ \n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov pc, r0\n" - "._588:\n" - " .align 2, 0\n" - "._587:\n" - " .word gUnknown_Debug_03004360\n" - " .word gBattle_BG1_X\n" - " .word gUnknown_Debug_030043A4\n" - " .word gMain\n" - " .word gUnknown_Debug_030043A0\n" - " .word ._589\n" - "._589:\n" - " .word ._590\n" - " .word ._591\n" - " .word ._592\n" - " .word ._593\n" - " .word ._594\n" - "._591:\n" - " bl debug_sub_8010818\n" - " b ._595\n" - "._592:\n" - " ldr r1, ._597 @ gUnknown_Debug_2023A76\n" - " mov r0, #0x1f\n" - " mov r2, #0xec\n" - " bl debug_sub_80132C8\n" - "._595:\n" - " bl debug_sub_8011E5C\n" - " bl debug_sub_8011E74\n" - " bl debug_sub_8012540\n" - " bl debug_nullsub_3\n" - " ldr r0, ._597 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - " b ._607\n" - "._598:\n" - " .align 2, 0\n" - "._597:\n" - " .word gUnknown_Debug_2023A76\n" - " .word gUnknown_Debug_030043A4\n" - "._593:\n" - " ldr r1, ._600 @ gUnknown_Debug_2023A76\n" - " mov r0, #0x1f\n" - " mov r2, #0xec\n" - " bl debug_sub_8013294\n" - " b ._607\n" - "._601:\n" - " .align 2, 0\n" - "._600:\n" - " .word gUnknown_Debug_2023A76\n" - "._594:\n" - " ldr r3, ._604 @ gUnknown_Debug_2023A76\n" - " add r2, r3, #0\n" - " add r2, r2, #0x44\n" - " ldrh r1, [r2]\n" - " mov r4, #0x0\n" - " ldsh r0, [r2, r4]\n" - " cmp r0, #0\n" - " beq ._602 @cond_branch\n" - " sub r0, r1, #1\n" - " strh r0, [r2]\n" - " add r1, r3, #0\n" - " add r1, r1, #0x8a\n" - " ldrh r0, [r1]\n" - " sub r0, r0, #0x1\n" - " strh r0, [r1]\n" - " b ._603\n" - "._605:\n" - " .align 2, 0\n" - "._604:\n" - " .word gUnknown_Debug_2023A76\n" - "._602:\n" - " mov r1, #0x8\n" - " strh r1, [r2]\n" - " add r0, r3, #0\n" - " add r0, r0, #0x8a\n" - " strh r1, [r0]\n" - "._603:\n" - " bl debug_sub_8012540\n" - " b ._607\n" - "._590:\n" - " mov r0, #0x0\n" - " bl debug_sub_8010B80\n" - " ldr r2, ._608 @ gUnknown_Debug_030043A0\n" - " ldr r0, ._608 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " ldrb r2, [r2]\n" - " add r0, r0, r2\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - " b ._607\n" - "._609:\n" - " .align 2, 0\n" - "._608:\n" - " .word gUnknown_Debug_030043A0\n" - " .word gUnknown_Debug_030043A4\n" - "._586:\n" - " cmp r2, #0x4\n" - " bne ._611 @cond_branch\n" - " cmp r1, #0x5\n" - " bhi ._611 @cond_branch\n" - " mov r0, #0x1\n" - " bl debug_sub_8010AAC\n" - " b ._613\n" - "._611:\n" - " ldr r6, ._618 @ gUnknown_Debug_2023A76\n" - " ldr r5, ._618 + 4 @ gUnknown_Debug_030043A0\n" - " ldr r4, ._618 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r0, [r4]\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " ldrb r0, [r5]\n" - " add r1, r1, r0\n" - " lsl r1, r1, #0x1\n" - " ldr r2, ._618 + 12 @ gUnknown_Debug_03004360\n" - " ldrb r0, [r2]\n" - " mov r3, #0x46\n" - " mul r0, r0, r3\n" - " add r1, r1, r0\n" - " add r1, r1, r6\n" - " ldrh r0, [r1]\n" - " sub r0, r0, #0x1\n" - " strh r0, [r1]\n" - " ldrb r0, [r4]\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " ldrb r5, [r5]\n" - " add r1, r1, r5\n" - " lsl r0, r1, #0x1\n" - " ldrb r2, [r2]\n" - " mul r2, r2, r3\n" - " add r0, r0, r2\n" - " add r3, r0, r6\n" - " mov r4, #0x0\n" - " ldsh r2, [r3, r4]\n" - " ldr r4, ._618 + 16 @ gUnknown_Debug_821F424\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r1, r0, #0x1\n" - " add r0, r4, #0\n" - " add r0, r0, #0x8\n" - " add r0, r1, r0\n" - " ldrh r0, [r0]\n" - " cmp r2, r0\n" - " bge ._613 @cond_branch\n" - " add r0, r4, #6\n" - " add r0, r1, r0\n" - " ldrh r0, [r0]\n" - " strh r0, [r3]\n" - "._613:\n" - " ldr r5, ._618 + 4 @ gUnknown_Debug_030043A0\n" - " ldrb r0, [r5]\n" - " cmp r0, #0\n" - " bne ._614 @cond_branch\n" - " mov r0, #0x0\n" - " bl debug_sub_8010AAC\n" - " ldr r0, ._618 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " add r0, r0, #0x4\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - "._614:\n" - " ldr r4, ._618 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r4]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " ldrb r5, [r5]\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - " ldrb r1, [r4]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - "._607:\n" - " ldr r0, ._618 + 20 @ gMain\n" - " ldrh r1, [r0, #0x30]\n" - " mov r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " bne ._615 @cond_branch\n" - " b ._638\n" - "._615:\n" - " ldr r0, ._618 + 4 @ gUnknown_Debug_030043A0\n" - " ldrb r2, [r0]\n" - " ldr r0, ._618 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " add r0, r2, r0\n" - " sub r0, r0, #0x1e\n" - " cmp r0, #0x4\n" - " bhi ._617 @cond_branch\n" - " lsl r0, r0, #0x2\n" - " ldr r1, ._618 + 24 @ \n" - " add r0, r0, r1\n" - " ldr r0, [r0]\n" - " mov pc, r0\n" - "._619:\n" - " .align 2, 0\n" - "._618:\n" - " .word gUnknown_Debug_2023A76\n" - " .word gUnknown_Debug_030043A0\n" - " .word gUnknown_Debug_030043A4\n" - " .word gUnknown_Debug_03004360\n" - " .word gUnknown_Debug_821F424\n" - " .word gMain\n" - " .word ._620\n" - "._620:\n" - " .word ._621\n" - " .word ._622\n" - " .word ._623\n" - " .word ._624\n" - " .word ._625\n" - "._622:\n" - " bl debug_sub_8010818\n" - " b ._626\n" - "._623:\n" - " ldr r1, ._628 @ gUnknown_Debug_2023A76\n" - " mov r0, #0x1f\n" - " mov r2, #0xec\n" - " bl debug_sub_80132C8\n" - "._626:\n" - " bl debug_sub_8011E5C\n" - " bl debug_sub_8011E74\n" - " bl debug_sub_8012540\n" - " bl debug_nullsub_3\n" - " ldr r0, ._628 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - " b ._638\n" - "._629:\n" - " .align 2, 0\n" - "._628:\n" - " .word gUnknown_Debug_2023A76\n" - " .word gUnknown_Debug_030043A4\n" - "._624:\n" - " ldr r1, ._631 @ gUnknown_Debug_2023A76\n" - " mov r0, #0x1f\n" - " mov r2, #0xec\n" - " bl debug_sub_8013294\n" - " b ._638\n" - "._632:\n" - " .align 2, 0\n" - "._631:\n" - " .word gUnknown_Debug_2023A76\n" - "._625:\n" - " ldr r3, ._635 @ gUnknown_Debug_2023A76\n" - " add r2, r3, #0\n" - " add r2, r2, #0x44\n" - " ldrh r1, [r2]\n" - " mov r4, #0x0\n" - " ldsh r0, [r2, r4]\n" - " cmp r0, #0x7\n" - " bgt ._633 @cond_branch\n" - " add r0, r1, #1\n" - " strh r0, [r2]\n" - " add r1, r3, #0\n" - " add r1, r1, #0x8a\n" - " ldrh r0, [r1]\n" - " add r0, r0, #0x1\n" - " strh r0, [r1]\n" - " b ._634\n" - "._636:\n" - " .align 2, 0\n" - "._635:\n" - " .word gUnknown_Debug_2023A76\n" - "._633:\n" - " mov r1, #0x0\n" - " strh r1, [r2]\n" - " add r0, r3, #0\n" - " add r0, r0, #0x8a\n" - " strh r1, [r0]\n" - "._634:\n" - " bl debug_sub_8012540\n" - " b ._638\n" - "._621:\n" - " mov r0, #0x1\n" - " bl debug_sub_8010B80\n" - " ldr r2, ._639 @ gUnknown_Debug_030043A0\n" - " ldr r0, ._639 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " ldrb r2, [r2]\n" - " add r0, r0, r2\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - " b ._638\n" - "._640:\n" - " .align 2, 0\n" - "._639:\n" - " .word gUnknown_Debug_030043A0\n" - " .word gUnknown_Debug_030043A4\n" - "._617:\n" - " cmp r2, #0x4\n" - " bne ._642 @cond_branch\n" - " cmp r1, #0x5\n" - " bhi ._642 @cond_branch\n" - " mov r0, #0x1\n" - " bl debug_sub_8010AAC\n" - " b ._644\n" - "._642:\n" - " ldr r6, ._650 @ gUnknown_Debug_2023A76\n" - " ldr r5, ._650 + 4 @ gUnknown_Debug_030043A0\n" - " ldr r4, ._650 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r0, [r4]\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " ldrb r0, [r5]\n" - " add r1, r1, r0\n" - " lsl r1, r1, #0x1\n" - " ldr r2, ._650 + 12 @ gUnknown_Debug_03004360\n" - " ldrb r0, [r2]\n" - " mov r3, #0x46\n" - " mul r0, r0, r3\n" - " add r1, r1, r0\n" - " add r1, r1, r6\n" - " ldrh r0, [r1]\n" - " add r0, r0, #0x1\n" - " strh r0, [r1]\n" - " ldrb r0, [r4]\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " ldrb r5, [r5]\n" - " add r1, r1, r5\n" - " lsl r0, r1, #0x1\n" - " ldrb r2, [r2]\n" - " mul r2, r2, r3\n" - " add r0, r0, r2\n" - " add r3, r0, r6\n" - " mov r4, #0x0\n" - " ldsh r2, [r3, r4]\n" - " ldr r4, ._650 + 16 @ gUnknown_Debug_821F424\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r1, r0, #0x1\n" - " add r0, r4, #6\n" - " add r0, r1, r0\n" - " ldrh r0, [r0]\n" - " cmp r2, r0\n" - " ble ._644 @cond_branch\n" - " add r0, r4, #0\n" - " add r0, r0, #0x8\n" - " add r0, r1, r0\n" - " ldrh r0, [r0]\n" - " strh r0, [r3]\n" - "._644:\n" - " ldr r5, ._650 + 4 @ gUnknown_Debug_030043A0\n" - " ldrb r0, [r5]\n" - " cmp r0, #0\n" - " bne ._645 @cond_branch\n" - " mov r0, #0x0\n" - " bl debug_sub_8010AAC\n" - " ldr r0, ._650 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " add r0, r0, #0x4\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - "._645:\n" - " ldr r4, ._650 + 8 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r4]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " ldrb r5, [r5]\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - " ldrb r1, [r4]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - "._638:\n" - " ldr r0, ._650 + 20 @ gMain\n" - " ldrh r1, [r0, #0x30]\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x2\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._646 @cond_branch\n" - " ldr r0, ._650 + 4 @ gUnknown_Debug_030043A0\n" - " ldrb r1, [r0]\n" - " ldr r2, ._650 + 8 @ gUnknown_Debug_030043A4\n" - " mov r8, r2\n" - " add r7, r0, #0\n" - " cmp r1, #0x4\n" - " bne ._648 @cond_branch\n" - " ldrb r0, [r2]\n" - " cmp r0, #0x5\n" - " bhi ._648 @cond_branch\n" - " mov r0, #0x1\n" - " bl debug_sub_8010AAC\n" - " b ._653\n" - "._651:\n" - " .align 2, 0\n" - "._650:\n" - " .word gUnknown_Debug_2023A76\n" - " .word gUnknown_Debug_030043A0\n" - " .word gUnknown_Debug_030043A4\n" - " .word gUnknown_Debug_03004360\n" - " .word gUnknown_Debug_821F424\n" - " .word gMain\n" - "._648:\n" - " mov r4, r8\n" - " ldrb r1, [r4]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " ldrb r1, [r7]\n" - " add r0, r0, r1\n" - " cmp r0, #0x1e\n" - " bne ._652 @cond_branch\n" - " mov r0, #0x2\n" - " bl debug_sub_8010B80\n" - " b ._653\n" - "._652:\n" - " ldr r4, ._655 @ gUnknown_Debug_2023A76\n" - " lsl r1, r0, #0x1\n" - " ldr r3, ._655 + 4 @ gUnknown_Debug_03004360\n" - " ldrb r2, [r3]\n" - " mov r0, #0x46\n" - " mul r0, r0, r2\n" - " add r1, r1, r0\n" - " add r1, r1, r4\n" - " ldrh r0, [r1]\n" - " sub r0, r0, #0xa\n" - " strh r0, [r1]\n" - " add r6, r3, #0\n" - " ldr r5, ._655 + 8 @ gUnknown_Debug_821F424\n" - " b ._654\n" - "._656:\n" - " .align 2, 0\n" - "._655:\n" - " .word gUnknown_Debug_2023A76\n" - " .word gUnknown_Debug_03004360\n" - " .word gUnknown_Debug_821F424\n" - "._657:\n" - " add r0, r5, #6\n" - " add r0, r1, r0\n" - " ldrh r0, [r0]\n" - " ldrh r2, [r3]\n" - " add r0, r0, r2\n" - " strh r0, [r3]\n" - "._654:\n" - " mov r1, r8\n" - " ldrb r0, [r1]\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " ldrb r2, [r7]\n" - " add r1, r1, r2\n" - " lsl r2, r1, #0x1\n" - " ldrb r3, [r6]\n" - " mov r0, #0x46\n" - " mul r0, r0, r3\n" - " add r2, r2, r0\n" - " add r3, r2, r4\n" - " mov r0, #0x0\n" - " ldsh r2, [r3, r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r1, r0, #0x1\n" - " add r0, r5, #0\n" - " add r0, r0, #0x8\n" - " add r0, r1, r0\n" - " ldrh r0, [r0]\n" - " cmp r2, r0\n" - " blt ._657 @cond_branch\n" - "._653:\n" - " ldr r5, ._663 @ gUnknown_Debug_030043A0\n" - " ldrb r0, [r5]\n" - " cmp r0, #0\n" - " bne ._658 @cond_branch\n" - " mov r0, #0x0\n" - " bl debug_sub_8010AAC\n" - " ldr r0, ._663 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " add r0, r0, #0x4\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - "._658:\n" - " ldr r4, ._663 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r4]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " ldrb r5, [r5]\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - " ldrb r1, [r4]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - "._646:\n" - " ldr r0, ._663 + 8 @ gMain\n" - " ldrh r1, [r0, #0x30]\n" - " mov r0, #0x80\n" - " lsl r0, r0, #0x1\n" - " and r0, r0, r1\n" - " cmp r0, #0\n" - " beq ._659 @cond_branch\n" - " ldr r0, ._663 @ gUnknown_Debug_030043A0\n" - " ldrb r1, [r0]\n" - " ldr r2, ._663 + 4 @ gUnknown_Debug_030043A4\n" - " mov r8, r2\n" - " add r7, r0, #0\n" - " cmp r1, #0x4\n" - " bne ._661 @cond_branch\n" - " ldrb r0, [r2]\n" - " cmp r0, #0x5\n" - " bhi ._661 @cond_branch\n" - " mov r0, #0x1\n" - " bl debug_sub_8010AAC\n" - " b ._666\n" - "._664:\n" - " .align 2, 0\n" - "._663:\n" - " .word gUnknown_Debug_030043A0\n" - " .word gUnknown_Debug_030043A4\n" - " .word gMain\n" - "._661:\n" - " mov r4, r8\n" - " ldrb r1, [r4]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " ldrb r1, [r7]\n" - " add r0, r0, r1\n" - " cmp r0, #0x1e\n" - " bne ._665 @cond_branch\n" - " mov r0, #0x3\n" - " bl debug_sub_8010B80\n" - " b ._666\n" - "._665:\n" - " ldr r4, ._668 @ gUnknown_Debug_2023A76\n" - " lsl r1, r0, #0x1\n" - " ldr r3, ._668 + 4 @ gUnknown_Debug_03004360\n" - " ldrb r2, [r3]\n" - " mov r0, #0x46\n" - " mul r0, r0, r2\n" - " add r1, r1, r0\n" - " add r1, r1, r4\n" - " ldrh r0, [r1]\n" - " add r0, r0, #0xa\n" - " strh r0, [r1]\n" - " add r6, r3, #0\n" - " ldr r5, ._668 + 8 @ gUnknown_Debug_821F424\n" - " b ._667\n" - "._669:\n" - " .align 2, 0\n" - "._668:\n" - " .word gUnknown_Debug_2023A76\n" - " .word gUnknown_Debug_03004360\n" - " .word gUnknown_Debug_821F424\n" - "._670:\n" - " ldrh r0, [r3]\n" - " sub r0, r0, r1\n" - " strh r0, [r3]\n" - "._667:\n" - " mov r2, r8\n" - " ldrb r0, [r2]\n" - " lsl r1, r0, #0x2\n" - " add r1, r1, r0\n" - " ldrb r0, [r7]\n" - " add r1, r1, r0\n" - " lsl r2, r1, #0x1\n" - " ldrb r3, [r6]\n" - " mov r0, #0x46\n" - " mul r0, r0, r3\n" - " add r2, r2, r0\n" - " add r3, r2, r4\n" - " mov r0, #0x0\n" - " ldsh r2, [r3, r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x1\n" - " add r1, r5, #6\n" - " add r0, r0, r1\n" - " ldrh r1, [r0]\n" - " cmp r2, r1\n" - " bgt ._670 @cond_branch\n" - "._666:\n" - " ldr r5, ._672 @ gUnknown_Debug_030043A0\n" - " ldrb r0, [r5]\n" - " cmp r0, #0\n" - " bne ._671 @cond_branch\n" - " mov r0, #0x0\n" - " bl debug_sub_8010AAC\n" - " ldr r0, ._672 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r0]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " add r0, r0, #0x4\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - "._671:\n" - " ldr r4, ._672 + 4 @ gUnknown_Debug_030043A4\n" - " ldrb r1, [r4]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " ldrb r5, [r5]\n" - " add r0, r0, r5\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_8011EA0\n" - " ldrb r1, [r4]\n" - " lsl r0, r1, #0x2\n" - " add r0, r0, r1\n" - " lsl r0, r0, #0x18\n" - " lsr r0, r0, #0x18\n" - " bl debug_sub_80123D8\n" - "._659:\n" - " bl AnimateSprites\n" - " bl BuildOamBuffer\n" - " add sp, sp, #0x10\n" - " pop {r3}\n" - " mov r8, r3\n" - " pop {r4, r5, r6, r7}\n" - " pop {r0}\n" - " bx r0\n" - "._673:\n" - " .align 2, 0\n" - "._672:\n" - " .word gUnknown_Debug_030043A0\n" - " .word gUnknown_Debug_030043A4\n" - "\n" - ); + s32 r5; + + if (gMain.heldKeysRaw == 0x204) + DoSoftReset(); + if (gMain.newKeysRaw == 4) + { + if (gUnknown_Debug_030043A4 < 6) + { + gUnknown_Debug_030043A8 = 0; + debug_sub_8012628(); + SetMainCallback2(debug_sub_8011498); + } + //_546 + if (gUnknown_Debug_030043A0 == 0 && gUnknown_Debug_030043A4 == 6) + { + gMain.savedCallback = debug_sub_80108B8; + CreateMon( + &gPlayerParty[0], + gUnknown_Debug_2023A76_[0][0][0], + gUnknown_Debug_2023A76_[0][0][1], + 32, + 0, 0, 0, 0); + for (r5 = 0; r5 < 4; r5++) + { + SetMonData(&gPlayerParty[0], MON_DATA_MOVE1 + r5, &gUnknown_Debug_2023B02[0][0][r5]); + SetMonData(&gPlayerParty[0], MON_DATA_PP1 + r5, &gBattleMoves[gUnknown_Debug_2023B02[0][0][r5]].pp); + } + switch (gUnknown_Debug_2023A76_[0][6][0]) + { + case 1: //_550 + gCB2_AfterEvolution = debug_sub_80108B8; + EvolutionScene(&gPlayerParty[0], gUnknown_Debug_2023A76_[0][1][0], 1, 0); + break; + case 2: //_551 + debug_sub_8012688(); + break; + } + } + //_555 + if (gUnknown_Debug_030043A0 == 1 && gUnknown_Debug_030043A4 == 6) + { + // This is really weird + r5 = (gSaveBlock2.optionsBattleSceneOff | (gSaveBlock2.optionsSound << 1)); + r5++; + if (r5 == 4) + r5 = 0; + gSaveBlock2.optionsBattleSceneOff = (r5 & 1); + gSaveBlock2.optionsSound = (r5 & 2) >> 1; + SetPokemonCryStereo(gSaveBlock2.optionsSound); + debug_nullsub_3(); + } + } + //_559 + if (gMain.newKeysRaw == 8) + debug_sub_801174C(); + if (gMain.newKeysRaw == 0x40) + { + debug_sub_80125E4(); + if (gUnknown_Debug_030043A4 != 0) + gUnknown_Debug_030043A4--; + else + gUnknown_Debug_030043A4 = 6; + debug_sub_8011E74(); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + debug_sub_80125A0(); + } + //_562 + if (gMain.newKeysRaw == 0x80) + { + debug_sub_80125E4(); + if (gUnknown_Debug_030043A4 == 6) + gUnknown_Debug_030043A4 = 0; + else + gUnknown_Debug_030043A4++; + debug_sub_8011E74(); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + debug_sub_80125A0(); + } + //_567 + if (gMain.newKeysRaw == 0x20) + { + debug_sub_80125E4(); + if (gUnknown_Debug_030043A0 != 0) + { + gUnknown_Debug_030043A0--; + } + else + { + if (gUnknown_Debug_03004360 != 0) + { + gUnknown_Debug_03004360 = 0; + gUnknown_Debug_030043A0 = 4; + gBattle_BG1_X = 0; + debug_sub_8011E5C(); + debug_sub_8011E74(); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + } + } + //_577 + debug_sub_80125A0(); + } + //_572 + if (gMain.newKeysRaw == 0x10) + { + debug_sub_80125E4(); + if (gUnknown_Debug_030043A0 != 4) + { + gUnknown_Debug_030043A0++; + } + else + { + if (gUnknown_Debug_03004360 == 0) + { + gUnknown_Debug_03004360 = 1; + gUnknown_Debug_030043A0 = 0; + gBattle_BG1_X = 0x100; + debug_sub_8011E5C(); + debug_sub_8011E74(); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + } + } + debug_sub_80125A0(); + } + //_578 + if (gMain.newAndRepeatedKeys & B_BUTTON) + { + switch (gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5) + { + case 31: + debug_sub_8010818(); + debug_sub_8011E5C(); + debug_sub_8011E74(); + debug_sub_8012540(); + debug_nullsub_3(); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + break; + case 32: + debug_sub_80132C8(31, gUnknown_Debug_2023A76, 0xEC); + debug_sub_8011E5C(); + debug_sub_8011E74(); + debug_sub_8012540(); + debug_nullsub_3(); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + break; + case 33: + debug_sub_8013294(31, gUnknown_Debug_2023A76, 0xEC); + break; + case 34: + if (gUnknown_Debug_2023A76_[0][6][4] != 0) + { + gUnknown_Debug_2023A76_[0][6][4]--; + gUnknown_Debug_2023A76_[1][6][4]--; + } + else + { + gUnknown_Debug_2023A76_[0][6][4] = 8; + gUnknown_Debug_2023A76_[1][6][4] = 8; + } + debug_sub_8012540(); + break; + case 30: + debug_sub_8010B80(0); + debug_sub_8011EA0(gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5); + break; + default: + if (gUnknown_Debug_030043A0 == 4 && gUnknown_Debug_030043A4 < 6) + { + debug_sub_8010AAC(1); + } + else + { + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5]--; + if (gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] < gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][4]) + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] = gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][3]; + } + //_613 + if (gUnknown_Debug_030043A0 == 0) + { + debug_sub_8010AAC(0); + debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + 4); + } + debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + break; + } + } + //_607 + if (gMain.newAndRepeatedKeys & A_BUTTON) + { + switch (gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5) + { + case 31: + debug_sub_8010818(); + debug_sub_8011E5C(); + debug_sub_8011E74(); + debug_sub_8012540(); + debug_nullsub_3(); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + break; + case 32: + debug_sub_80132C8(31, gUnknown_Debug_2023A76, 0xEC); + debug_sub_8011E5C(); + debug_sub_8011E74(); + debug_sub_8012540(); + debug_nullsub_3(); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + break; + case 33: + debug_sub_8013294(31, gUnknown_Debug_2023A76, 0xEC); + break; + case 34: + if (gUnknown_Debug_2023A76_[0][6][4] < 8) + { + gUnknown_Debug_2023A76_[0][6][4]++; + gUnknown_Debug_2023A76_[1][6][4]++; + } + else + { + gUnknown_Debug_2023A76_[0][6][4] = 0; + gUnknown_Debug_2023A76_[1][6][4] = 0; + } + debug_sub_8012540(); + break; + case 30: + debug_sub_8010B80(1); + debug_sub_8011EA0(gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5); + break; + default: + if (gUnknown_Debug_030043A0 == 4 && gUnknown_Debug_030043A4 < 6) + { + debug_sub_8010AAC(1); + } + else + { + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5]++; + if (gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] > gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][3]) + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] = gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][4]; + } + //_644 + if (gUnknown_Debug_030043A0 == 0) + { + debug_sub_8010AAC(0); + debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + 4); + } + //_645 + debug_sub_8011EA0(gUnknown_Debug_030043A0 + gUnknown_Debug_030043A4 * 5); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + break; + } + } + //_638 + if (gMain.newAndRepeatedKeys & 0x200) + { + if (gUnknown_Debug_030043A0 == 4 && gUnknown_Debug_030043A4 < 6) + { + debug_sub_8010AAC(1); + } + //_648 + else + { + if (gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0 == 30) + { + debug_sub_8010B80(2); + } + //_652 + else + { + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] -= 10; + while (gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] < gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][4]) + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] += gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][3]; + } + } + //_653 + if (gUnknown_Debug_030043A0 == 0) + { + debug_sub_8010AAC(0); + debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + 4); + } + //_658 + debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + } + //_646 + if (gMain.newAndRepeatedKeys & 0x100) + { + if (gUnknown_Debug_030043A0 == 4 && gUnknown_Debug_030043A4 < 6) + { + debug_sub_8010AAC(1); + } + //_661 + else + { + if (gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0 == 30) + { + debug_sub_8010B80(3); + } + //_665 + else + { + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] += 10; + while (gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] > gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][3]) + gUnknown_Debug_2023A76[gUnknown_Debug_03004360][gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0] -= gUnknown_Debug_821F424[gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0][3]; + } + } + //_666 + if (gUnknown_Debug_030043A0 == 0) + { + debug_sub_8010AAC(0); + debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + 4); + } + //_671 + debug_sub_8011EA0(gUnknown_Debug_030043A4 * 5 + gUnknown_Debug_030043A0); + debug_sub_80123D8(gUnknown_Debug_030043A4 * 5); + } + //_659 + AnimateSprites(); + BuildOamBuffer(); } __attribute__((naked)) -- cgit v1.2.3