summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--asm/battle_1.s2
-rw-r--r--src/battle/battle_controller_opponent.c262
-rw-r--r--src/battle/battle_controller_player.c764
-rw-r--r--src/battle/battle_controller_safari.c243
-rw-r--r--src/battle/battle_interface.c668
-rw-r--r--src/pokemon/pokemon_1.c359
-rw-r--r--src/pokemon/pokemon_menu.c151
7 files changed, 150 insertions, 2299 deletions
diff --git a/asm/battle_1.s b/asm/battle_1.s
index 24553e020..8ed743677 100644
--- a/asm/battle_1.s
+++ b/asm/battle_1.s
@@ -809,7 +809,7 @@ sub_800DAB8:
mov r2, #0x80
lsl r2, r2, #0x4
add r1, r4, #0
- bl gMysteryEventScriptCmdTableEnd+0x3cb4 @ uh, what?
+ bl CpuSet
ldr r0, ._113 + 12
mov r1, #0x0
mov r2, #0x40
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)
{
diff --git a/src/pokemon/pokemon_1.c b/src/pokemon/pokemon_1.c
index 6f187ad71..41579fa28 100644
--- a/src/pokemon/pokemon_1.c
+++ b/src/pokemon/pokemon_1.c
@@ -525,324 +525,49 @@ void CalculateMonStats(struct Pokemon *mon)
}
#if DEBUG
-__attribute__((naked))
-void debug_sub_803F55C()
+void debug_sub_803F55C(struct Pokemon *mon)
{
- 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, #0xffffffc4\n"
- " add r5, r0, #0\n"
- " mov r1, #0x39\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " str r0, [sp, #0x1c]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x27\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " add r7, r0, #0\n"
- " add r0, r5, #0\n"
- " mov r1, #0x1a\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " add r4, r0, #0\n"
- " add r0, r5, #0\n"
- " mov r1, #0x28\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " mov r9, r0\n"
- " add r0, r5, #0\n"
- " mov r1, #0x1b\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " mov r8, r0\n"
- " add r0, r5, #0\n"
- " mov r1, #0x29\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " str r0, [sp, #0x20]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x1c\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " mov sl, r0\n"
- " add r0, r5, #0\n"
- " mov r1, #0x2a\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " str r0, [sp, #0x24]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x1d\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " str r0, [sp, #0x28]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x2b\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " str r0, [sp, #0x2c]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x1e\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " str r0, [sp, #0x30]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x2c\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " str r0, [sp, #0x34]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x1f\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " str r0, [sp, #0x38]\n"
- " add r0, r5, #0\n"
- " mov r1, #0xb\n"
- " mov r2, #0x0\n"
- " bl GetMonData\n"
- " lsl r0, r0, #0x10\n"
- " lsr r6, r0, #0x10\n"
- " add r0, r5, #0\n"
- " bl GetLevelFromMonExp\n"
- " lsl r0, r0, #0x18\n"
- " lsr r0, r0, #0x18\n"
- " str r0, [sp]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x38\n"
- " mov r2, sp\n"
- " bl SetMonData\n"
- " ldr r0, ._71\n"
- " cmp r6, r0\n"
- " bne ._69 @cond_branch\n"
- " mov r0, #0x1\n"
- " str r0, [sp, #0x4]\n"
- " lsl r7, r6, #0x3\n"
- " b ._70\n"
- "._72:\n"
- " .align 2, 0\n"
- "._71:\n"
- " .word 0x12f\n"
- "._69:\n"
- " ldr r1, ._80\n"
- " lsl r2, r6, #0x3\n"
- " sub r0, r2, r6\n"
- " lsl r0, r0, #0x2\n"
- " add r0, r0, r1\n"
- " ldrb r0, [r0]\n"
- " lsl r0, r0, #0x1\n"
- " add r1, r0, r7\n"
- " add r0, r4, #0\n"
- " add r7, r2, #0\n"
- " cmp r0, #0\n"
- " bge ._73 @cond_branch\n"
- " add r0, r0, #0x3\n"
- "._73:\n"
- " asr r0, r0, #0x2\n"
- " add r0, r1, r0\n"
- " ldr r4, [sp]\n"
- " mul r0, r0, r4\n"
- " mov r1, #0x64\n"
- " bl __divsi3\n"
- " add r0, r0, r4\n"
- " add r0, r0, #0xa\n"
- " str r0, [sp, #0x4]\n"
- "._70:\n"
- " add r2, sp, #0x4\n"
- " add r0, r5, #0\n"
- " mov r1, #0x3a\n"
- " bl SetMonData\n"
- " ldr r1, ._80\n"
- " sub r0, r7, r6\n"
- " lsl r0, r0, #0x2\n"
- " add r6, r0, r1\n"
- " ldrb r0, [r6, #0x1]\n"
- " lsl r0, r0, #0x1\n"
- " mov r2, r9\n"
- " add r1, r0, r2\n"
- " mov r0, r8\n"
- " cmp r0, #0\n"
- " bge ._74 @cond_branch\n"
- " add r0, r0, #0x3\n"
- "._74:\n"
- " asr r0, r0, #0x2\n"
- " add r0, r1, r0\n"
- " ldr r1, [sp]\n"
- " mul r0, r0, r1\n"
- " mov r1, #0x64\n"
- " bl __divsi3\n"
- " add r0, r0, #0x5\n"
- " str r0, [sp, #0x8]\n"
- " add r0, r5, #0\n"
- " bl GetNature\n"
- " lsl r0, r0, #0x18\n"
- " lsr r0, r0, #0x18\n"
- " add r4, sp, #0x8\n"
- " ldrh r1, [r4]\n"
- " mov r2, #0x1\n"
- " bl nature_stat_mod\n"
- " lsl r0, r0, #0x10\n"
- " lsr r0, r0, #0x10\n"
- " str r0, [sp, #0x8]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x3b\n"
- " add r2, r4, #0\n"
- " bl SetMonData\n"
- " ldrb r0, [r6, #0x2]\n"
- " lsl r0, r0, #0x1\n"
- " ldr r2, [sp, #0x20]\n"
- " add r1, r0, r2\n"
- " mov r0, sl\n"
- " cmp r0, #0\n"
- " bge ._75 @cond_branch\n"
- " add r0, r0, #0x3\n"
- "._75:\n"
- " asr r0, r0, #0x2\n"
- " add r0, r1, r0\n"
- " ldr r1, [sp]\n"
- " mul r0, r0, r1\n"
- " mov r1, #0x64\n"
- " bl __divsi3\n"
- " add r0, r0, #0x5\n"
- " str r0, [sp, #0xc]\n"
- " add r0, r5, #0\n"
- " bl GetNature\n"
- " lsl r0, r0, #0x18\n"
- " lsr r0, r0, #0x18\n"
- " add r4, sp, #0xc\n"
- " ldrh r1, [r4]\n"
- " mov r2, #0x2\n"
- " bl nature_stat_mod\n"
- " lsl r0, r0, #0x10\n"
- " lsr r0, r0, #0x10\n"
- " str r0, [sp, #0xc]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x3c\n"
- " add r2, r4, #0\n"
- " bl SetMonData\n"
- " ldrb r0, [r6, #0x3]\n"
- " lsl r0, r0, #0x1\n"
- " ldr r2, [sp, #0x24]\n"
- " add r1, r0, r2\n"
- " ldr r0, [sp, #0x28]\n"
- " cmp r0, #0\n"
- " bge ._76 @cond_branch\n"
- " add r0, r0, #0x3\n"
- "._76:\n"
- " asr r0, r0, #0x2\n"
- " add r0, r1, r0\n"
- " ldr r1, [sp]\n"
- " mul r0, r0, r1\n"
- " mov r1, #0x64\n"
- " bl __divsi3\n"
- " add r0, r0, #0x5\n"
- " str r0, [sp, #0x10]\n"
- " add r0, r5, #0\n"
- " bl GetNature\n"
- " lsl r0, r0, #0x18\n"
- " lsr r0, r0, #0x18\n"
- " add r4, sp, #0x10\n"
- " ldrh r1, [r4]\n"
- " mov r2, #0x3\n"
- " bl nature_stat_mod\n"
- " lsl r0, r0, #0x10\n"
- " lsr r0, r0, #0x10\n"
- " str r0, [sp, #0x10]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x3d\n"
- " add r2, r4, #0\n"
- " bl SetMonData\n"
- " ldrb r0, [r6, #0x4]\n"
- " lsl r0, r0, #0x1\n"
- " ldr r2, [sp, #0x2c]\n"
- " add r1, r0, r2\n"
- " ldr r0, [sp, #0x30]\n"
- " cmp r0, #0\n"
- " bge ._77 @cond_branch\n"
- " add r0, r0, #0x3\n"
- "._77:\n"
- " asr r0, r0, #0x2\n"
- " add r0, r1, r0\n"
- " ldr r1, [sp]\n"
- " mul r0, r0, r1\n"
- " mov r1, #0x64\n"
- " bl __divsi3\n"
- " add r0, r0, #0x5\n"
- " str r0, [sp, #0x14]\n"
- " add r0, r5, #0\n"
- " bl GetNature\n"
- " lsl r0, r0, #0x18\n"
- " lsr r0, r0, #0x18\n"
- " add r4, sp, #0x14\n"
- " ldrh r1, [r4]\n"
- " mov r2, #0x4\n"
- " bl nature_stat_mod\n"
- " lsl r0, r0, #0x10\n"
- " lsr r0, r0, #0x10\n"
- " str r0, [sp, #0x14]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x3e\n"
- " add r2, r4, #0\n"
- " bl SetMonData\n"
- " ldrb r0, [r6, #0x5]\n"
- " lsl r0, r0, #0x1\n"
- " ldr r1, [sp, #0x34]\n"
- " add r2, r0, r1\n"
- " ldr r0, [sp, #0x38]\n"
- " cmp r0, #0\n"
- " bge ._78 @cond_branch\n"
- " add r0, r0, #0x3\n"
- "._78:\n"
- " asr r0, r0, #0x2\n"
- " add r0, r2, r0\n"
- " ldr r1, [sp]\n"
- " mul r0, r0, r1\n"
- " mov r1, #0x64\n"
- " bl __divsi3\n"
- " add r0, r0, #0x5\n"
- " str r0, [sp, #0x18]\n"
- " add r0, r5, #0\n"
- " bl GetNature\n"
- " lsl r0, r0, #0x18\n"
- " lsr r0, r0, #0x18\n"
- " add r4, sp, #0x18\n"
- " ldrh r1, [r4]\n"
- " mov r2, #0x5\n"
- " bl nature_stat_mod\n"
- " lsl r0, r0, #0x10\n"
- " lsr r0, r0, #0x10\n"
- " str r0, [sp, #0x18]\n"
- " add r0, r5, #0\n"
- " mov r1, #0x3f\n"
- " add r2, r4, #0\n"
- " bl SetMonData\n"
- " ldr r1, [sp, #0x4]\n"
- " ldr r0, [sp, #0x1c]\n"
- " cmp r1, r0\n"
- " bge ._79 @cond_branch\n"
- " str r1, [sp, #0x1c]\n"
- "._79:\n"
- " add r2, sp, #0x1c\n"
- " add r0, r5, #0\n"
- " mov r1, #0x39\n"
- " bl SetMonData\n"
- " add sp, sp, #0x3c\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"
- "._81:\n"
- " .align 2, 0\n"
- "._80:\n"
- " .word gBaseStats\n"
- "\n"
- );
+ s32 currentHP = GetMonData(mon, MON_DATA_HP, NULL);
+ s32 hpIV = GetMonData(mon, MON_DATA_HP_IV, NULL);
+ s32 hpEV = GetMonData(mon, MON_DATA_HP_EV, NULL);
+ s32 attackIV = GetMonData(mon, MON_DATA_ATK_IV, NULL);
+ s32 attackEV = GetMonData(mon, MON_DATA_ATK_EV, NULL);
+ s32 defenseIV = GetMonData(mon, MON_DATA_DEF_IV, NULL);
+ s32 defenseEV = GetMonData(mon, MON_DATA_DEF_EV, NULL);
+ s32 speedIV = GetMonData(mon, MON_DATA_SPEED_IV, NULL);
+ s32 speedEV = GetMonData(mon, MON_DATA_SPEED_EV, NULL);
+ s32 spAttackIV = GetMonData(mon, MON_DATA_SPATK_IV, NULL);
+ s32 spAttackEV = GetMonData(mon, MON_DATA_SPATK_EV, NULL);
+ s32 spDefenseIV = GetMonData(mon, MON_DATA_SPDEF_IV, NULL);
+ s32 spDefenseEV = GetMonData(mon, MON_DATA_SPDEF_EV, NULL);
+ u16 species = GetMonData(mon, MON_DATA_SPECIES, NULL);
+ s32 level = GetLevelFromMonExp(mon);
+ s32 newMaxHP;
+
+ SetMonData(mon, MON_DATA_LEVEL, &level);
+
+ if (species == SPECIES_SHEDINJA)
+ {
+ newMaxHP = 1;
+ }
+ else
+ {
+ s32 n = 2 * gBaseStats[species].baseHP + hpIV;
+ newMaxHP = (((n + hpEV / 4) * level) / 100) + level + 10;
+ }
+
+ SetMonData(mon, MON_DATA_MAX_HP, &newMaxHP);
+
+ CALC_STAT(baseAttack, attackIV, attackEV, 1, MON_DATA_ATK)
+ CALC_STAT(baseDefense, defenseIV, defenseEV, 2, MON_DATA_DEF)
+ CALC_STAT(baseSpeed, speedIV, speedEV, 3, MON_DATA_SPEED)
+ CALC_STAT(baseSpAttack, spAttackIV, spAttackEV, 4, MON_DATA_SPATK)
+ CALC_STAT(baseSpDefense, spDefenseIV, spDefenseEV, 5, MON_DATA_SPDEF)
+
+ if (newMaxHP < currentHP)
+ currentHP = newMaxHP;
+
+ SetMonData(mon, MON_DATA_HP, &currentHP);
}
#endif
diff --git a/src/pokemon/pokemon_menu.c b/src/pokemon/pokemon_menu.c
index 8e1bd1671..532340ce4 100644
--- a/src/pokemon/pokemon_menu.c
+++ b/src/pokemon/pokemon_menu.c
@@ -31,6 +31,7 @@
#include "item_menu.h"
#include "player_pc.h"
#include "ewram.h"
+#include "script.h"
/*
Pokemon menu:
@@ -45,6 +46,7 @@ struct PokeMenuFieldMoveFunc
u8 field_1;
};
+extern u8 gUnknown_020297ED;
extern u8 gUnknown_020384F0;
extern u8 gUnknown_0202E8F4;
extern u8 gUnknown_0202E8F5;
@@ -900,9 +902,10 @@ static void sub_808AE08(void)
static bool8 SetUpFieldMove_Waterfall(void)
{
s16 x, y;
+
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE
- && IsPlayerSurfingNorth() == TRUE)
+ && IsPlayerSurfingNorth() == TRUE)
{
gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_808AE08;
@@ -913,138 +916,19 @@ static bool8 SetUpFieldMove_Waterfall(void)
}
#if DEBUG
-__attribute__((naked))
-void debug_sub_80986AC()
-{
- asm("\
- push {r4, lr}\n\
- add sp, sp, #0xfffffffc\n\
- mov r4, sp\n\
- add r4, r4, #0x2\n\
- mov r0, sp\n\
- add r1, r4, #0\n\
- bl GetXYCoordsOneStepInFrontOfPlayer\n\
- mov r0, sp\n\
- mov r1, #0x0\n\
- ldsh r0, [r0, r1]\n\
- mov r2, #0x0\n\
- ldsh r1, [r4, r2]\n\
- bl MapGridGetMetatileBehaviorAt\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- bl MetatileBehavior_IsWaterfall\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- cmp r0, #0x1\n\
- bne ._274 @cond_branch\n\
- bl IsPlayerSurfingNorth\n\
- lsl r0, r0, #0x18\n\
- lsr r0, r0, #0x18\n\
- cmp r0, #0x1\n\
- bne ._274 @cond_branch\n\
- bl sub_808AE08\n\
- b ._275\n\
-._274:\n\
- bl ScriptContext2_Disable\n\
-._275:\n\
- add sp, sp, #0x4\n\
- pop {r4}\n\
- pop {r0}\n\
- bx r0");
+void debug_sub_80986AC(void)
+{
+ s16 x, y;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE
+ && IsPlayerSurfingNorth() == TRUE)
+ sub_808AE08();
+ else
+ ScriptContext2_Disable();
}
#endif
-#if DEBUG
-__attribute__((naked))
-static void sub_808AE8C(void)
-{
- asm("\
- push {r4, r5, r6, lr}\n\
- ldr r0, ._281\n\
- ldrb r0, [r0]\n\
- sub r0, r0, #0x21\n\
- lsl r0, r0, #0x18\n\
- lsr r6, r0, #0x18\n\
- mov r5, #0x0\n\
-._287:\n\
- mov r0, #0x64\n\
- add r1, r5, #0\n\
- mul r1, r1, r0\n\
- ldr r0, ._281 + 4\n\
- add r4, r1, r0\n\
- add r0, r4, #0\n\
- mov r1, #0xb\n\
- bl GetMonData\n\
- cmp r0, #0\n\
- beq ._284 @cond_branch\n\
- add r0, r5, #0\n\
- bl sub_806D668\n\
- ldr r0, ._281 + 8\n\
- ldrb r0, [r0]\n\
- cmp r0, #0\n\
- bne ._279 @cond_branch\n\
- add r0, r4, #0\n\
- mov r1, #0x2d\n\
- bl GetMonData\n\
- cmp r0, #0\n\
- bne ._278 @cond_branch\n\
- add r0, r4, #0\n\
- add r1, r6, #0\n\
- bl CanMonLearnTMHM\n\
- cmp r0, #0\n\
- bne ._279 @cond_branch\n\
-._278:\n\
- add r0, r5, #0\n\
- mov r1, #0x9a\n\
- bl sub_806BC3C\n\
- b ._284\n\
-._282:\n\
- .align 2, 0\n\
-._281:\n\
- .word gSpecialVar_ItemId\n\
- .word gPlayerParty\n\
- .word gUnknown_020297ED\n\
-._279:\n\
- mov r0, #0x64\n\
- add r4, r5, #0\n\
- mul r4, r4, r0\n\
- ldr r0, ._285\n\
- add r4, r4, r0\n\
- ldr r0, ._285 + 4\n\
- ldrh r0, [r0]\n\
- bl ItemIdToBattleMoveId\n\
- add r1, r0, #0\n\
- lsl r1, r1, #0x10\n\
- lsr r1, r1, #0x10\n\
- add r0, r4, #0\n\
- bl pokemon_has_move\n\
- lsl r0, r0, #0x18\n\
- cmp r0, #0\n\
- beq ._283 @cond_branch\n\
- add r0, r5, #0\n\
- mov r1, #0xa8\n\
- bl sub_806BC3C\n\
- b ._284\n\
-._286:\n\
- .align 2, 0\n\
-._285:\n\
- .word gPlayerParty\n\
- .word gSpecialVar_ItemId\n\
-._283:\n\
- add r0, r5, #0\n\
- mov r1, #0x8c\n\
- bl sub_806BC3C\n\
-._284:\n\
- add r0, r5, #1\n\
- lsl r0, r0, #0x18\n\
- lsr r5, r0, #0x18\n\
- cmp r5, #0x5\n\
- bls ._287 @cond_branch\n\
- pop {r4, r5, r6}\n\
- pop {r0}\n\
- bx r0");
-}
-#else
static void sub_808AE8C(void)
{
u8 i;
@@ -1054,7 +938,11 @@ static void sub_808AE8C(void)
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
{
sub_806D668(i);
- if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !CanMonLearnTMHM(&gPlayerParty[i], arg))
+ if (
+#if DEBUG
+ gUnknown_020297ED == 0 &&
+#endif
+ (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !CanMonLearnTMHM(&gPlayerParty[i], arg)))
sub_806BC3C(i, 0x9A);
else if (pokemon_has_move(&gPlayerParty[i], ItemIdToBattleMoveId(gSpecialVar_ItemId)))
sub_806BC3C(i, 0xA8);
@@ -1063,7 +951,6 @@ static void sub_808AE8C(void)
}
}
}
-#endif
static void sub_808AF20(void)
{