diff options
Diffstat (limited to 'src/battle_tower.c')
-rw-r--r-- | src/battle_tower.c | 1062 |
1 files changed, 1061 insertions, 1 deletions
diff --git a/src/battle_tower.c b/src/battle_tower.c index 51f4ca93d..90884ec98 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,11 +1,21 @@ #include "global.h" #include "battle_tower.h" #include "event_data.h" +#include "map_object_constants.h" +#include "rng.h" #include "vars.h" +extern u8 gTrainerClassToPicIndex[]; +extern u8 gTrainerClassToNameIndex[]; +extern u8 gUnknown_08405EB0[]; +extern u8 gUnknown_08405E7E[]; +extern u8 gUnknown_08405E92[]; +extern u8 gUnknown_08405E60[]; +extern struct BattleTowerTrainer gBattleTowerTrainers[]; -extern void sub_813461C(u8 levelType); extern void sub_8135C44(void); +extern void sub_813601C(void); +extern void sub_81349FC(u8); void sub_8134548(void) @@ -56,3 +66,1053 @@ void sub_8134548(void) sub_8135C44(); } + +void sub_813461C(u8 levelType) +{ + gSaveBlock2.filler_A8.var_4AE[levelType] = 0; + gSaveBlock2.filler_A8.var_4B0[levelType] = 1; + gSaveBlock2.filler_A8.var_4B4[levelType] = 1; +} + +// u8 sub_8134650(u8 levelType, u16 b) +// { +// u8 trainerTeamLevel; +// s32 i; +// u32 numValid = 0; + +// sub_813601C(); + +// if (gScriptResult || gSaveBlock2.filler_A8.ereaderTrainer.unk2 != b) +// { +// return 0; +// } + +// trainerTeamLevel = 50; +// if (levelType != 0) +// { +// trainerTeamLevel = 100; +// } + +// for (i = 0; i < 3; i++) +// { +// if (!gSaveBlock2.filler_A8.ereaderTrainer.party[i].level != trainerTeamLevel) +// { +// return 0; +// } + +// CheckMonBattleTowerBanlist(gSaveBlock2.filler_A8.ereaderTrainer.party[i].unk0, gSaveBlock2.filler_A8.ereaderTrainer.party[i].unk2, 1, levelType, &numValid); +// } + +// return numValid == 3; +// } + +__attribute__((naked)) +u8 sub_8134650(u8 levelType, u16 b) +{ + asm(".syntax unified\n\ + push {r4-r7,lr}\n\ + mov r7, r8\n\ + push {r7}\n\ + sub sp, 0x2C\n\ + lsls r0, 24\n\ + lsrs r5, r0, 24\n\ + lsls r1, 16\n\ + lsrs r6, r1, 16\n\ + add r4, sp, 0x28\n\ + movs r0, 0\n\ + strb r0, [r4]\n\ + bl sub_813601C\n\ + ldr r0, _08134684 @ =gScriptResult\n\ + ldrh r0, [r0]\n\ + adds r7, r4, 0\n\ + cmp r0, 0\n\ + bne _08134680\n\ + ldr r1, _08134688 @ =gSaveBlock2\n\ + ldr r2, _0813468C @ =0x0000049a\n\ + adds r0, r1, r2\n\ + ldrh r0, [r0]\n\ + cmp r0, r6\n\ + beq _08134690\n\ +_08134680:\n\ + movs r0, 0\n\ + b _081346E2\n\ + .align 2, 0\n\ +_08134684: .4byte gScriptResult\n\ +_08134688: .4byte gSaveBlock2\n\ +_0813468C: .4byte 0x0000049a\n\ +_08134690:\n\ + movs r6, 0x32\n\ + cmp r5, 0\n\ + beq _08134698\n\ + movs r6, 0x64\n\ +_08134698:\n\ + movs r4, 0\n\ + mov r8, r1\n\ +_0813469C:\n\ + movs r0, 0x2C\n\ + muls r0, r4\n\ + mov r3, r8\n\ + adds r1, r0, r3\n\ + movs r2, 0x9B\n\ + lsls r2, 3\n\ + adds r0, r1, r2\n\ + ldrb r2, [r0]\n\ + cmp r2, r6\n\ + bne _08134680\n\ + ldr r3, _081346F0 @ =0x000004cc\n\ + adds r0, r1, r3\n\ + ldrh r0, [r0]\n\ + adds r3, 0x2\n\ + adds r1, r3\n\ + ldrh r1, [r1]\n\ + str r2, [sp]\n\ + add r2, sp, 0x10\n\ + str r2, [sp, 0x4]\n\ + add r2, sp, 0x1C\n\ + str r2, [sp, 0x8]\n\ + str r7, [sp, 0xC]\n\ + movs r2, 0x1\n\ + adds r3, r5, 0\n\ + bl CheckMonBattleTowerBanlist\n\ + adds r4, 0x1\n\ + cmp r4, 0x2\n\ + ble _0813469C\n\ + movs r1, 0\n\ + ldrb r0, [r7]\n\ + cmp r0, 0x3\n\ + bne _081346E0\n\ + movs r1, 0x1\n\ +_081346E0:\n\ + adds r0, r1, 0\n\ +_081346E2:\n\ + add sp, 0x2C\n\ + pop {r3}\n\ + mov r8, r3\n\ + pop {r4-r7}\n\ + pop {r1}\n\ + bx r1\n\ + .align 2, 0\n\ +_081346F0: .4byte 0x000004cc\n\ +.syntax divided\n"); +} + +// bool8 sub_81346F4(void) +// { +// s32 i; +// u32 j; +// u32 arr[4]; +// u16 var2 = sub_8135D3C(gSaveBlock2.filler_A8.battleTowerLevelType); + +// if (sub_8134650(gSaveBlock2.filler_A8.battleTowerLevelType)) +// { +// gSaveBlock2.filler_A8.battleTowerTrainerId = 0xC8; +// return TRUE; +// } + +// for (i = 0; i < 5; i++) +// { +// u32 var_or = 0; +// u32 var_add = 0; +// for (j = 0; j < 40; j++) +// { +// var_or |= gSaveBlock2.filler_A8.var_0A4[i][j]; +// var_add += gSaveBlock2.filler_A8.var_0A4[i][j]; +// } + + +// } +// } + +__attribute__((naked)) +bool8 sub_81346F4(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, 0x18\n\ + movs r0, 0\n\ + mov r9, r0\n\ + ldr r4, _08134738 @ =gSaveBlock2\n\ + ldr r1, _0813473C @ =0x00000554\n\ + adds r0, r4, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r7, r0, 31\n\ + adds r0, r7, 0\n\ + bl sub_8135D3C\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r8, r0\n\ + adds r0, r7, 0\n\ + mov r1, r8\n\ + bl sub_8134650\n\ + lsls r0, 24\n\ + adds r1, r4, 0\n\ + cmp r0, 0\n\ + beq _08134744\n\ + ldr r2, _08134740 @ =0x00000564\n\ + adds r1, r2\n\ + movs r0, 0xC8\n\ + strb r0, [r1]\n\ + b _081347DE\n\ + .align 2, 0\n\ +_08134738: .4byte gSaveBlock2\n\ +_0813473C: .4byte 0x00000554\n\ +_08134740: .4byte 0x00000564\n\ +_08134744:\n\ + movs r5, 0\n\ + movs r3, 0xA4\n\ + mov r12, r3\n\ + mov r10, sp\n\ +_0813474C:\n\ + mov r0, r12\n\ + muls r0, r5\n\ + movs r4, 0\n\ + movs r1, 0\n\ + movs r2, 0\n\ + adds r6, r5, 0x1\n\ + str r6, [sp, 0x14]\n\ + ldr r6, _081347B4 @ =gSaveBlock2 + 0x14C\n\ + adds r3, r0, r6\n\ +_0813475E:\n\ + ldm r3!, {r0}\n\ + orrs r4, r0\n\ + adds r1, r0\n\ + adds r2, 0x1\n\ + cmp r2, 0x27\n\ + bls _0813475E\n\ + mov r3, r12\n\ + muls r3, r5\n\ + ldr r0, _081347B8 @ =gSaveBlock2\n\ + adds r2, r3, r0\n\ + movs r6, 0xA7\n\ + lsls r6, 1\n\ + adds r0, r2, r6\n\ + ldrh r0, [r0]\n\ + cmp r0, r8\n\ + bne _081347A4\n\ + subs r6, 0x2\n\ + adds r0, r2, r6\n\ + ldrb r0, [r0]\n\ + cmp r0, r7\n\ + bne _081347A4\n\ + cmp r4, 0\n\ + beq _081347A4\n\ + ldr r2, _081347BC @ =gSaveBlock2 + 0x1EC\n\ + adds r0, r3, r2\n\ + ldr r0, [r0]\n\ + cmp r0, r1\n\ + bne _081347A4\n\ + mov r3, r10\n\ + adds r3, 0x4\n\ + mov r10, r3\n\ + subs r3, 0x4\n\ + stm r3!, {r5}\n\ + movs r6, 0x1\n\ + add r9, r6\n\ +_081347A4:\n\ + ldr r5, [sp, 0x14]\n\ + cmp r5, 0x4\n\ + ble _0813474C\n\ + mov r0, r9\n\ + cmp r0, 0\n\ + bne _081347C0\n\ + movs r0, 0\n\ + b _081347E0\n\ + .align 2, 0\n\ +_081347B4: .4byte gSaveBlock2 + 0x14C\n\ +_081347B8: .4byte gSaveBlock2\n\ +_081347BC: .4byte gSaveBlock2 + 0x1EC\n\ +_081347C0:\n\ + bl Random\n\ + ldr r4, _081347F0 @ =gSaveBlock2\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + mov r1, r9\n\ + bl __modsi3\n\ + lsls r0, 2\n\ + add r0, sp\n\ + ldr r0, [r0]\n\ + adds r0, 0x64\n\ + ldr r1, _081347F4 @ =0x00000564\n\ + adds r4, r1\n\ + strb r0, [r4]\n\ +_081347DE:\n\ + movs r0, 0x1\n\ +_081347E0:\n\ + add sp, 0x18\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\ +_081347F0: .4byte gSaveBlock2\n\ +_081347F4: .4byte 0x00000564\n\ +.syntax divided\n"); +} + +// void sub_81347F8(void) +// { +// bool8 levelType = gSaveBlock2.filler_A8.battleTowerLevelType; +// if (sub_81346F4()) +// { +// sub_81349FC(gSaveBlock2.filler_A8.battleTowerTrainerId); +// gSaveBlock2.filler_A8.var_4C1[gSaveBlock2.filler_A8.var_4B0[levelType]] = gSaveBlock2.filler_A8.battleTowerTrainerId; +// } +// else +// { +// u16 var1; + +// if (gSaveBlock2.filler_A8.var_4B4[levelType] > 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 30) >> 8; +// var1 = temp + 70; +// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && var1 != gSaveBlock2.filler_A8.var_4C1[i]; i++) // TODO: [i + 1]??? +// { } + +// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// if (gSaveBlock2.filler_A8.var_4B0[levelType] == 7) +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 5); +// u32 temp2 = (((gSaveBlock2.filler_A8.var_4B4[levelType] - 1) * 10) + 20); +// var1 = temp / 128 + temp2; +// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && gSaveBlock2.filler_A8.var_4C1[i] != var1; i++) // TODO: [i + 1]???? +// { } + +// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// { +// break; +// } +// } +// } +// else +// { +// while (1) +// { +// s32 i; +// u32 temp = ((Random() & 0xFF) * 320); +// u32 temp2 = ((gSaveBlock2.filler_A8.var_4B4[levelType] - 1) * 10); +// var1 = temp + temp2; +// for (i = 0; i < gSaveBlock2.filler_A8.var_4B0[levelType] - 1 && gSaveBlock2.filler_A8.var_4C1[i] != var1; i++) +// { } + +// if (i == gSaveBlock2.filler_A8.var_4B0[levelType] - 1) +// { +// break; +// } +// } +// } +// } + +// gSaveBlock2.filler_A8.battleTowerTrainerId = var1; +// sub_81349FC(gSaveBlock2.filler_A8.battleTowerTrainerId); + +// if (gSaveBlock2.filler_A8.var_4B0[levelType] < 7) +// { +// gSaveBlock2.filler_A8.var_4C1[gSaveBlock2.filler_A8.var_4B0[levelType]] = gSaveBlock2.filler_A8.battleTowerTrainerId; +// } +// } +// } + +__attribute__((naked)) +void sub_81347F8(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 r5, _08134838 @ =gSaveBlock2\n\ + ldr r1, _0813483C @ =0x00000554\n\ + adds r0, r5, r1\n\ + ldrb r0, [r0]\n\ + lsls r0, 31\n\ + lsrs r6, r0, 31\n\ + bl sub_81346F4\n\ + lsls r0, 24\n\ + cmp r0, 0\n\ + beq _08134848\n\ + ldr r2, _08134840 @ =0x00000564\n\ + adds r4, r5, r2\n\ + ldrb r0, [r4]\n\ + bl sub_81349FC\n\ + lsls r0, r6, 1\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r1, r5, r3\n\ + adds r0, r1\n\ + ldrh r0, [r0]\n\ + adds r0, r5, r0\n\ + ldr r1, _08134844 @ =0x00000569\n\ + adds r0, r1\n\ + ldrb r1, [r4]\n\ + b _081349DC\n\ + .align 2, 0\n\ +_08134838: .4byte gSaveBlock2\n\ +_0813483C: .4byte 0x00000554\n\ +_08134840: .4byte 0x00000564\n\ +_08134844: .4byte 0x00000569\n\ +_08134848:\n\ + lsls r0, r6, 1\n\ + ldr r2, _081348D8 @ =0x0000055c\n\ + adds r1, r5, r2\n\ + adds r1, r0, r1\n\ + ldrh r1, [r1]\n\ + adds r7, r0, 0\n\ + cmp r1, 0x7\n\ + bls _0813485A\n\ + b _0813495C\n\ +_0813485A:\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r0, r5, r3\n\ + adds r1, r7, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x7\n\ + bne _081348E4\n\ + adds r6, r5, 0\n\ + mov r9, r7\n\ + adds r5, r1, 0\n\ + ldr r0, _081348DC @ =0x0000056a\n\ + adds r0, r6\n\ + mov r10, r0\n\ + mov r8, r5\n\ +_08134876:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r2, r1, 2\n\ + adds r2, r1\n\ + ldr r1, _081348D8 @ =0x0000055c\n\ + adds r4, r6, r1\n\ + mov r3, r9\n\ + adds r0, r3, r4\n\ + ldrh r1, [r0]\n\ + subs r1, 0x1\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + adds r0, 0x14\n\ + lsrs r2, 7\n\ + adds r2, r0\n\ + lsls r2, 16\n\ + lsrs r2, 16\n\ + movs r1, 0\n\ + ldrh r0, [r5]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081348C8\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + cmp r0, r2\n\ + beq _081348C8\n\ + subs r0, r4, 0x4\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + subs r3, r0, 0x1\n\ + adds r4, 0xE\n\ +_081348BA:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _081348C8\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _081348BA\n\ +_081348C8:\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + subs r0, 0x1\n\ + ldr r4, _081348E0 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _08134876\n\ + b _081349B6\n\ + .align 2, 0\n\ +_081348D8: .4byte 0x0000055c\n\ +_081348DC: .4byte 0x0000056a\n\ +_081348E0: .4byte gSaveBlock2\n\ +_081348E4:\n\ + adds r6, r5, 0\n\ + mov r9, r7\n\ + adds r5, r1, 0\n\ + ldr r2, _08134950 @ =0x0000056a\n\ + adds r2, r6\n\ + mov r10, r2\n\ + mov r8, r5\n\ +_081348F2:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsrs r2, r0, 6\n\ + ldr r3, _08134954 @ =0x0000055c\n\ + adds r4, r6, r3\n\ + mov r1, r9\n\ + adds r0, r1, r4\n\ + ldrh r1, [r0]\n\ + subs r1, 0x1\n\ + lsls r0, r1, 2\n\ + adds r0, r1\n\ + lsls r0, 1\n\ + adds r0, r2, r0\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + ldrh r0, [r5]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _08134942\n\ + mov r3, r10\n\ + ldrb r0, [r3]\n\ + cmp r0, r2\n\ + beq _08134942\n\ + subs r0, r4, 0x4\n\ + adds r0, r7, r0\n\ + ldrh r0, [r0]\n\ + subs r3, r0, 0x1\n\ + adds r4, 0xE\n\ +_08134934:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _08134942\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _08134934\n\ +_08134942:\n\ + mov r3, r8\n\ + ldrh r0, [r3]\n\ + subs r0, 0x1\n\ + ldr r4, _08134958 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _081348F2\n\ + b _081349B6\n\ + .align 2, 0\n\ +_08134950: .4byte 0x0000056a\n\ +_08134954: .4byte 0x0000055c\n\ +_08134958: .4byte gSaveBlock2\n\ +_0813495C:\n\ + movs r2, 0xAB\n\ + lsls r2, 3\n\ + adds r0, r5, r2\n\ + adds r6, r7, r0\n\ + ldr r3, _081349EC @ =0x0000056a\n\ + adds r3, r5\n\ + mov r8, r3\n\ + adds r5, r6, 0\n\ +_0813496C:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + lsls r0, r1, 4\n\ + subs r0, r1\n\ + lsls r0, 1\n\ + asrs r0, 8\n\ + adds r0, 0x46\n\ + lsls r0, 16\n\ + lsrs r2, r0, 16\n\ + movs r1, 0\n\ + ldrh r0, [r6]\n\ + subs r0, 0x1\n\ + cmp r1, r0\n\ + bge _081349AC\n\ + mov r3, r8\n\ + ldrb r0, [r3]\n\ + ldr r4, _081349F0 @ =gSaveBlock2\n\ + cmp r0, r2\n\ + beq _081349AC\n\ + ldrh r0, [r5]\n\ + subs r3, r0, 0x1\n\ + ldr r0, _081349EC @ =0x0000056a\n\ + adds r4, r0\n\ +_0813499E:\n\ + adds r1, 0x1\n\ + cmp r1, r3\n\ + bge _081349AC\n\ + adds r0, r1, r4\n\ + ldrb r0, [r0]\n\ + cmp r0, r2\n\ + bne _0813499E\n\ +_081349AC:\n\ + ldrh r0, [r6]\n\ + subs r0, 0x1\n\ + ldr r4, _081349F0 @ =gSaveBlock2\n\ + cmp r1, r0\n\ + bne _0813496C\n\ +_081349B6:\n\ + ldr r1, _081349F4 @ =0x00000564\n\ + adds r0, r4, r1\n\ + strb r2, [r0]\n\ + ldr r2, _081349F4 @ =0x00000564\n\ + adds r5, r4, r2\n\ + ldrb r0, [r5]\n\ + bl sub_81349FC\n\ + movs r3, 0xAB\n\ + lsls r3, 3\n\ + adds r0, r4, r3\n\ + adds r1, r7, r0\n\ + ldrh r0, [r1]\n\ + cmp r0, 0x6\n\ + bhi _081349DE\n\ + adds r0, r4, r0\n\ + ldr r1, _081349F8 @ =0x00000569\n\ + adds r0, r1\n\ + ldrb r1, [r5]\n\ +_081349DC:\n\ + strb r1, [r0]\n\ +_081349DE:\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\ +_081349EC: .4byte 0x0000056a\n\ +_081349F0: .4byte gSaveBlock2\n\ +_081349F4: .4byte 0x00000564\n\ +_081349F8: .4byte 0x00000569\n\ +.syntax divided\n"); +} + +void sub_81349FC(u8 trainerIndex) +{ + u32 i; + u8 trainerClass; + + if (trainerIndex < 100) + { + trainerClass = gBattleTowerTrainers[trainerIndex].trainerClass; + } + else if (trainerIndex < 200) + { + trainerClass = gSaveBlock2.filler_A8.var_14C[trainerIndex - 100].trainerClass; + } + else + { + trainerClass = gSaveBlock2.filler_A8.ereaderTrainer.trainerClass; + } + + for (i = 0; i < 30 && gUnknown_08405E60[i] != trainerClass; i++); + if (i != 30) + { + u8 trainerObjectGfxId = gUnknown_08405E92[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + for (i = 0; i < 20 && gUnknown_08405E7E[i] != trainerClass; i++); + if (i != 20) + { + u8 trainerObjectGfxId = gUnknown_08405EB0[i]; + VarSet(0x4010, trainerObjectGfxId); + return; + } + + VarSet(0x4010, MAP_OBJ_GFX_BOY_1); +} + +void sub_8134AB4() +{ + sub_81349FC(200); +} + +// void sub_8134AC0(struct BattleTowerRecord *record) +// { +// u16 var1[5]; +// u16 var2[5]; +// s32 i, j, k; +// s16 l = 0; + +// for (i = 0; i < 5; i++) +// { +// k = 0; +// for (j = 0; j < 4 && gSaveBlock2.filler_A8.var_14C[i].var_C[i] != record->var_C[j]; j++); +// if (j == 4) +// { +// for (k = 0; k < 7 && gSaveBlock2.filler_A8.var_14C[i].var_8 == record->var_8; k++) +// { +// if (record->var_8 == 0xFF) +// { +// k = 7; +// break; +// } +// } +// } + +// if (k == 7) +// { +// break; +// } +// } + +// if (i < 5) +// { +// gSaveBlock2.filler_A8.var_14C[i] = *record; +// return; +// } + +// i = 0; +// while (i < 5) +// { +// if (gSaveBlock2.filler_A8.var_14C[i].var_2 == 0) +// { +// if (i > 4) +// { +// break; +// } + +// gSaveBlock2.filler_A8.var_14C[i] = *record; +// return; +// } + +// i++; +// } + +// var1[0] = gSaveBlock2.filler_A8.var_14C[0].var_2; +// var2[0] = 0; +// l++; + +// for (i = 1; i < 5; i++) +// { +// for (j = 0; gSaveBlock2.filler_A8.var_14C[i].var_2 <= var1[0] && j < l; j++) +// { +// if (gSaveBlock2.filler_A8.var_14C[i].var_2 < var1[0]) +// { +// j = 0; +// l = 1; +// var1[0] = gSaveBlock2.filler_A8.var_14C[i].var_2; +// var2[0] = i; +// break; +// } +// } + +// if (j == l) +// { +// var1[l] = gSaveBlock2.filler_A8.var_14C[i].var_2; +// var2[l] = i; +// l++; +// } +// } + +// gSaveBlock2.filler_A8.var_14C[var2[(Random() % l)]] = *record; +// } + +__attribute__((naked)) +void sub_8134AC0(struct BattleTowerRecord *record) +{ + 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\ + movs r7, 0\n\ + mov r8, r0\n\ + movs r5, 0\n\ + ldr r0, _08134B3C @ =gSaveBlock2\n\ + mov r12, r0\n\ + mov r1, r8\n\ + ldrb r1, [r1, 0xC]\n\ + str r1, [sp, 0x18]\n\ + movs r2, 0xAA\n\ + lsls r2, 1\n\ + add r2, r12\n\ + mov r10, r2\n\ + mov r9, r5\n\ +_08134AE6:\n\ + movs r6, 0\n\ + movs r3, 0\n\ + ldr r0, _08134B40 @ =gSaveBlock2 + 0x158\n\ + add r0, r9\n\ + ldrb r0, [r0]\n\ + ldr r1, [sp, 0x18]\n\ + cmp r0, r1\n\ + bne _08134B14\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + ldr r1, _08134B40 @ =gSaveBlock2 + 0x158\n\ + adds r2, r0, r1\n\ + mov r4, r8\n\ + adds r4, 0xC\n\ +_08134B02:\n\ + adds r2, 0x1\n\ + adds r3, 0x1\n\ + cmp r3, 0x3\n\ + bgt _08134B14\n\ + adds r1, r4, r3\n\ + ldrb r0, [r2]\n\ + ldrb r1, [r1]\n\ + cmp r0, r1\n\ + beq _08134B02\n\ +_08134B14:\n\ + cmp r3, 0x4\n\ + bne _08134B54\n\ + movs r6, 0\n\ + mov r2, r10\n\ + ldrb r0, [r2]\n\ + mov r3, r8\n\ + ldrb r3, [r3, 0x8]\n\ + cmp r0, r3\n\ + bne _08134B54\n\ + adds r1, r0, 0\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + adds r0, 0x4\n\ + ldr r3, _08134B44 @ =gSaveBlock2 + 0x150\n\ + adds r2, r0, r3\n\ +_08134B32:\n\ + cmp r1, 0xFF\n\ + bne _08134B48\n\ + movs r6, 0x7\n\ + b _08134B54\n\ + .align 2, 0\n\ +_08134B3C: .4byte gSaveBlock2\n\ +_08134B40: .4byte gSaveBlock2 + 0x158\n\ +_08134B44: .4byte gSaveBlock2 + 0x150\n\ +_08134B48:\n\ + adds r6, 0x1\n\ + cmp r6, 0x6\n\ + bgt _08134B54\n\ + ldrb r0, [r2]\n\ + cmp r0, r1\n\ + beq _08134B32\n\ +_08134B54:\n\ + cmp r6, 0x7\n\ + beq _08134B64\n\ + movs r0, 0xA4\n\ + add r10, r0\n\ + add r9, r0\n\ + adds r5, 0x1\n\ + cmp r5, 0x4\n\ + ble _08134AE6\n\ +\n\ +_08134B64:\n\ + cmp r5, 0x4\n\ + bgt _08134B76\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + add r0, r12\n\ + movs r1, 0xA6\n\ + lsls r1, 1\n\ + adds r0, r1\n\ + b _08134B9E\n\ +_08134B76:\n\ + movs r5, 0\n\ + movs r1, 0xA7\n\ + lsls r1, 1\n\ + add r1, r12\n\ + b _08134B88\n\ +_08134B80:\n\ + adds r1, 0xA4\n\ + adds r5, 0x1\n\ + cmp r5, 0x4\n\ + bgt _08134BA8\n\ +_08134B88:\n\ + ldrh r0, [r1]\n\ + cmp r0, 0\n\ + bne _08134B80\n\ + cmp r5, 0x4\n\ + bgt _08134BA8\n\ + movs r0, 0xA4\n\ + muls r0, r5\n\ + add r0, r12\n\ + movs r2, 0xA6\n\ + lsls r2, 1\n\ + adds r0, r2\n\ +_08134B9E:\n\ + mov r1, r8\n\ + movs r2, 0xA4\n\ + bl memcpy\n\ + b _08134C5E\n\ +\n\ +_08134BA8:\n\ + mov r2, sp\n\ + movs r3, 0xA7\n\ + lsls r3, 1\n\ + mov r1, r12\n\ + adds r0, r1, r3\n\ + ldrh r0, [r0]\n\ + movs r1, 0\n\ + strh r0, [r2]\n\ + add r0, sp, 0xC\n\ + strh r1, [r0]\n\ + adds r7, 0x1\n\ + movs r5, 0x1\n\ + add r2, sp, 0xC @var2 = r2\n\ + mov r9, r2\n\ + mov r10, r3\n\ +_08134BC6:\n\ + movs r3, 0\n\ + adds r0, r5, 0x1\n\ + mov r12, r0\n\ + cmp r3, r7\n\ + bge _08134C0A\n\ + movs r1, 0xA4\n\ + adds r0, r5, 0\n\ + muls r0, r1\n\ + ldr r2, _08134BFC @ =gSaveBlock2\n\ + adds r0, r2\n\ + mov r1, r10\n\ + adds r4, r0, r1\n\ + mov r6, sp\n\ +_08134BE0:\n\ + lsls r0, r3, 1\n\ + add r0, sp\n\ + ldrh r2, [r4]\n\ + adds r1, r2, 0\n\ + ldrh r0, [r0]\n\ + cmp r1, r0\n\ + bcs _08134C00\n\ + movs r3, 0\n\ + movs r7, 0x1\n\ + strh r2, [r6]\n\ + mov r2, r9\n\ + strh r5, [r2]\n\ + b _08134C0A\n\ + .align 2, 0\n\ +_08134BFC: .4byte gSaveBlock2\n\ +_08134C00:\n\ + cmp r1, r0\n\ + bhi _08134C0A\n\ + adds r3, 0x1\n\ + cmp r3, r7\n\ + blt _08134BE0\n\ +_08134C0A:\n\ + cmp r3, r7\n\ + bne _08134C2A\n\ + lsls r1, r7, 1\n\ + mov r3, sp\n\ + adds r2, r3, r1\n\ + movs r3, 0xA4\n\ + adds r0, r5, 0\n\ + muls r0, r3\n\ + ldr r3, _08134C70 @ =gSaveBlock2\n\ + adds r0, r3\n\ + add r0, r10\n\ + ldrh r0, [r0]\n\ + strh r0, [r2]\n\ + add r1, r9\n\ + strh r5, [r1]\n\ + adds r7, 0x1\n\ +_08134C2A:\n\ + mov r5, r12\n\ + cmp r5, 0x4\n\ + ble _08134BC6\n\ + bl Random\n\ + lsls r0, 16\n\ + lsrs r0, 16\n\ + adds r1, r7, 0\n\ + bl __modsi3\n\ + adds r5, r0, 0\n\ + ldr r2, _08134C70 @ =gSaveBlock2\n\ + lsls r0, r5, 1\n\ + add r0, sp\n\ + adds r0, 0xC\n\ + ldrh r1, [r0]\n\ + movs r0, 0xA4\n\ + muls r0, r1\n\ + adds r0, r2\n\ + movs r1, 0xA6\n\ + lsls r1, 1\n\ + adds r0, r1\n\ + mov r1, r8\n\ + movs r2, 0xA4\n\ + bl memcpy\n\ +_08134C5E:\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\ +_08134C70: .4byte gSaveBlock2\n\ +.syntax divided\n"); +} + +u8 get_trainer_class_pic_index(void) +{ + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + { + return gTrainerClassToPicIndex[gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].trainerClass]; + } + else + { + return gTrainerClassToPicIndex[gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].trainerClass]; + } +} + +u8 get_trainer_class_name_index(void) +{ + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.ereaderTrainer.trainerClass]; + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId >= 100) + { + return gTrainerClassToNameIndex[gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].trainerClass]; + } + else + { + return gTrainerClassToNameIndex[gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].trainerClass]; + } +} + +void get_trainer_name(u8* dest) +{ + s32 i; + + if (gSaveBlock2.filler_A8.battleTowerTrainerId == 200) + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.filler_A8.ereaderTrainer.name[i]; + } + } + else if (gSaveBlock2.filler_A8.battleTowerTrainerId < 100) + { + for (i = 0; i < 7; i++) + { + dest[i] = gBattleTowerTrainers[gSaveBlock2.filler_A8.battleTowerTrainerId].name[i]; + } + } + else + { + for (i = 0; i < 7; i++) + { + dest[i] = gSaveBlock2.filler_A8.var_14C[gSaveBlock2.filler_A8.battleTowerTrainerId - 100].name[i]; + } + } + + dest[i] = 0xFF; +} |