diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/battle_tower.c | 454 |
1 files changed, 454 insertions, 0 deletions
diff --git a/src/battle_tower.c b/src/battle_tower.c index 90884ec98..3ba522fe5 100644 --- a/src/battle_tower.c +++ b/src/battle_tower.c @@ -1,10 +1,20 @@ #include "global.h" #include "battle_tower.h" +#include "data2.h" #include "event_data.h" #include "map_object_constants.h" +#include "pokedex.h" #include "rng.h" +#include "string_util.h" +#include "text.h" #include "vars.h" +extern u8 gUnknown_08400E23[]; +extern u8 gUnknown_08400E29[]; +extern u8 gUnknown_08400E2E[]; +extern u8 gUnknown_08400E30[]; + +extern u16 gBattleTowerBanlist[]; extern u8 gTrainerClassToPicIndex[]; extern u8 gTrainerClassToNameIndex[]; extern u8 gUnknown_08405EB0[]; @@ -1116,3 +1126,447 @@ void get_trainer_name(u8* dest) dest[i] = 0xFF; } + +__attribute__((naked)) +void sub_8134DD4(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, 0x28\n\ + movs r0, 0\n\ + str r0, [sp, 0x18]\n\ + movs r1, 0x3C\n\ + str r1, [sp, 0x1C]\n\ + add r4, sp, 0xC\n\ + movs r0, 0xFF\n\ + strb r0, [r4]\n\ + bl ZeroEnemyPartyMons\n\ + ldr r1, _08134E04 @ =gSaveBlock2\n\ + ldr r2, _08134E08 @ =0x00000564\n\ + adds r0, r1, r2\n\ + ldrb r0, [r0]\n\ + cmp r0, 0x13\n\ + bhi _08134E0C\n\ + movs r3, 0x6\n\ + str r3, [sp, 0x14]\n\ + b _08134ED8\n\ + .align 2, 0\n\ +_08134E04: .4byte gSaveBlock2\n\ +_08134E08: .4byte 0x00000564\n\ +_08134E0C:\n\ + cmp r0, 0x1D\n\ + bhi _08134E1A\n\ + movs r0, 0x9\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0x1E\n\ + str r1, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E1A:\n\ + cmp r0, 0x27\n\ + bhi _08134E28\n\ + movs r2, 0xC\n\ + str r2, [sp, 0x14]\n\ + movs r3, 0x3C\n\ + str r3, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E28:\n\ + cmp r0, 0x31\n\ + bhi _08134E36\n\ + movs r0, 0xF\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0x5A\n\ + str r1, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E36:\n\ + cmp r0, 0x3B\n\ + bhi _08134E44\n\ + movs r2, 0x12\n\ + str r2, [sp, 0x14]\n\ + movs r3, 0x78\n\ + str r3, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E44:\n\ + cmp r0, 0x45\n\ + bhi _08134E52\n\ + movs r0, 0x15\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0x96\n\ + str r1, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E52:\n\ + cmp r0, 0x4F\n\ + bhi _08134E60\n\ + movs r2, 0x1F\n\ + str r2, [sp, 0x14]\n\ + movs r3, 0xB4\n\ + str r3, [sp, 0x18]\n\ + b _08134ED8\n\ +_08134E60:\n\ + cmp r0, 0x63\n\ + bhi _08134E72\n\ + movs r0, 0x1F\n\ + str r0, [sp, 0x14]\n\ + movs r1, 0xC8\n\ + str r1, [sp, 0x18]\n\ + movs r2, 0x64\n\ + str r2, [sp, 0x1C]\n\ + b _08134ED8\n\ +_08134E72:\n\ + cmp r0, 0xC8\n\ + bne _08134E9C\n\ + movs r6, 0\n\ +_08134E78:\n\ + movs r0, 0x64\n\ + muls r0, r6\n\ + ldr r1, _08134E94 @ =gEnemyParty\n\ + adds r0, r1\n\ + movs r1, 0x2C\n\ + muls r1, r6\n\ + ldr r2, _08134E98 @ =gSaveBlock2 + 0x4CC\n\ + adds r1, r2\n\ + bl sub_803ADE8\n\ + adds r6, 0x1\n\ + cmp r6, 0x2\n\ + ble _08134E78\n\ + b _08135082\n\ + .align 2, 0\n\ +_08134E94: .4byte gEnemyParty\n\ +_08134E98: .4byte gSaveBlock2 + 0x4CC\n\ +_08134E9C:\n\ + movs r6, 0\n\ + adds r4, r1, 0\n\ + ldr r3, _08134ECC @ =0xffffc158\n\ + adds r5, r4, r3\n\ +_08134EA4:\n\ + movs r0, 0x64\n\ + muls r0, r6\n\ + ldr r1, _08134ED0 @ =gEnemyParty\n\ + adds r0, r1\n\ + ldr r2, _08134ED4 @ =0x00000564\n\ + adds r1, r4, r2\n\ + ldrb r2, [r1]\n\ + movs r1, 0xA4\n\ + muls r1, r2\n\ + adds r1, r5\n\ + movs r2, 0x2C\n\ + muls r2, r6\n\ + adds r1, r2\n\ + bl sub_803ADE8\n\ + adds r6, 0x1\n\ + cmp r6, 0x2\n\ + ble _08134EA4\n\ + b _08135082\n\ + .align 2, 0\n\ +_08134ECC: .4byte 0xffffc158\n\ +_08134ED0: .4byte gEnemyParty\n\ +_08134ED4: .4byte 0x00000564\n\ +_08134ED8:\n\ + ldr r2, _08134EF4 @ =gSaveBlock2\n\ + ldr r3, _08134EF8 @ =0x00000554\n\ + adds r0, r2, r3\n\ + ldrb r1, [r0]\n\ + movs r0, 0x1\n\ + ands r0, r1\n\ + adds r1, r2, 0\n\ + cmp r0, 0\n\ + beq _08134F00\n\ + ldr r0, _08134EFC @ =gBattleTowerLevel100Mons\n\ + mov r10, r0\n\ + movs r2, 0x64\n\ + str r2, [sp, 0x10]\n\ + b _08134F08\n\ + .align 2, 0\n\ +_08134EF4: .4byte gSaveBlock2\n\ +_08134EF8: .4byte 0x00000554\n\ +_08134EFC: .4byte gBattleTowerLevel100Mons\n\ +_08134F00:\n\ + ldr r3, _08134F54 @ =gBattleTowerLevel50Mons\n\ + mov r10, r3\n\ + movs r0, 0x32\n\ + str r0, [sp, 0x10]\n\ +_08134F08:\n\ + ldr r2, _08134F58 @ =gBattleTowerTrainers\n\ + ldr r3, _08134F5C @ =0x00000564\n\ + adds r0, r1, r3\n\ + ldrb r1, [r0]\n\ + lsls r0, r1, 1\n\ + adds r0, r1\n\ + lsls r0, 3\n\ + adds r0, r2\n\ + ldrb r0, [r0, 0x9]\n\ + str r0, [sp, 0x20]\n\ + movs r6, 0\n\ +_08134F1E:\n\ + bl Random\n\ + movs r1, 0xFF\n\ + ands r1, r0\n\ + ldr r2, [sp, 0x1C]\n\ + adds r0, r1, 0\n\ + muls r0, r2\n\ + asrs r0, 8\n\ + ldr r3, [sp, 0x18]\n\ + adds r7, r0, r3\n\ + ldr r0, [sp, 0x20]\n\ + cmp r0, 0\n\ + beq _08134F48\n\ + lsls r0, r7, 4\n\ + add r0, r10\n\ + ldrb r0, [r0, 0x3]\n\ + ldr r1, [sp, 0x20]\n\ + ands r0, r1\n\ + cmp r0, r1\n\ + beq _08134F48\n\ + b _0813507C\n\ +_08134F48:\n\ + movs r5, 0\n\ + lsls r0, r7, 4\n\ + mov r2, r10\n\ + adds r3, r0, r2\n\ + movs r4, 0\n\ + b _08134F64\n\ + .align 2, 0\n\ +_08134F54: .4byte gBattleTowerLevel50Mons\n\ +_08134F58: .4byte gBattleTowerTrainers\n\ +_08134F5C: .4byte 0x00000564\n\ +_08134F60:\n\ + adds r4, 0x64\n\ + adds r5, 0x1\n\ +_08134F64:\n\ + cmp r5, r6\n\ + bge _08134F7E\n\ + ldr r1, _08135094 @ =gEnemyParty\n\ + adds r0, r4, r1\n\ + movs r1, 0xB\n\ + movs r2, 0\n\ + str r3, [sp, 0x24]\n\ + bl GetMonData\n\ + ldr r3, [sp, 0x24]\n\ + ldrh r2, [r3]\n\ + cmp r0, r2\n\ + bne _08134F60\n\ +_08134F7E:\n\ + cmp r5, r6\n\ + bne _0813507C\n\ + movs r5, 0\n\ + cmp r5, r6\n\ + bge _08134FCC\n\ + ldr r3, _08135098 @ =gBattleTowerHeldItems\n\ + mov r9, r3\n\ + lsls r0, r7, 4\n\ + add r0, r10\n\ + mov r8, r0\n\ + movs r3, 0\n\ +_08134F94:\n\ + ldr r0, _08135094 @ =gEnemyParty\n\ + adds r4, r3, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + movs r2, 0\n\ + str r3, [sp, 0x24]\n\ + bl GetMonData\n\ + ldr r3, [sp, 0x24]\n\ + cmp r0, 0\n\ + beq _08134FC4\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + movs r2, 0\n\ + bl GetMonData\n\ + mov r2, r8\n\ + ldrb r1, [r2, 0x2]\n\ + lsls r1, 1\n\ + add r1, r9\n\ + ldr r3, [sp, 0x24]\n\ + ldrh r1, [r1]\n\ + cmp r0, r1\n\ + beq _08134FCC\n\ +_08134FC4:\n\ + adds r3, 0x64\n\ + adds r5, 0x1\n\ + cmp r5, r6\n\ + blt _08134F94\n\ +_08134FCC:\n\ + cmp r5, r6\n\ + bne _0813507C\n\ + movs r5, 0\n\ + cmp r5, r6\n\ + bge _08134FEE\n\ + add r0, sp, 0x4\n\ + ldrh r0, [r0]\n\ + cmp r0, r7\n\ + beq _08134FEE\n\ + add r1, sp, 0x4\n\ +_08134FE0:\n\ + adds r1, 0x2\n\ + adds r5, 0x1\n\ + cmp r5, r6\n\ + bge _08134FEE\n\ + ldrh r0, [r1]\n\ + cmp r0, r7\n\ + bne _08134FE0\n\ +_08134FEE:\n\ + cmp r5, r6\n\ + bne _0813507C\n\ + lsls r0, r6, 1\n\ + add r0, sp\n\ + adds r0, 0x4\n\ + strh r7, [r0]\n\ + movs r3, 0x64\n\ + adds r0, r6, 0\n\ + muls r0, r3\n\ + ldr r1, _08135094 @ =gEnemyParty\n\ + adds r0, r1\n\ + lsls r4, r7, 4\n\ + mov r3, r10\n\ + adds r2, r4, r3\n\ + ldrh r1, [r2]\n\ + ldrb r2, [r2, 0xC]\n\ + str r2, [sp]\n\ + ldr r2, [sp, 0x10]\n\ + ldr r3, [sp, 0x14]\n\ + bl CreateMonWithEVSpread\n\ + movs r5, 0\n\ + adds r0, r6, 0x1\n\ + mov r9, r0\n\ + mov r8, r4\n\ + movs r0, 0x64\n\ + adds r7, r6, 0\n\ + muls r7, r0\n\ + mov r0, r10\n\ + adds r0, 0x4\n\ + adds r4, r0\n\ + ldr r3, _08135094 @ =gEnemyParty\n\ +_0813502E:\n\ + ldrh r1, [r4]\n\ + lsls r2, r5, 24\n\ + lsrs r2, 24\n\ + adds r0, r7, r3\n\ + str r3, [sp, 0x24]\n\ + bl SetMonMoveSlot\n\ + ldrh r0, [r4]\n\ + ldr r3, [sp, 0x24]\n\ + cmp r0, 0xDA\n\ + bne _0813504A\n\ + movs r0, 0\n\ + mov r1, sp\n\ + strb r0, [r1, 0xC]\n\ +_0813504A:\n\ + adds r4, 0x2\n\ + adds r5, 0x1\n\ + cmp r5, 0x3\n\ + ble _0813502E\n\ + movs r2, 0x64\n\ + adds r4, r6, 0\n\ + muls r4, r2\n\ + ldr r3, _08135094 @ =gEnemyParty\n\ + adds r4, r3\n\ + adds r0, r4, 0\n\ + movs r1, 0x20\n\ + add r2, sp, 0xC\n\ + bl SetMonData\n\ + mov r0, r8\n\ + add r0, r10\n\ + ldrb r2, [r0, 0x2]\n\ + lsls r2, 1\n\ + ldr r0, _08135098 @ =gBattleTowerHeldItems\n\ + adds r2, r0\n\ + adds r0, r4, 0\n\ + movs r1, 0xC\n\ + bl SetMonData\n\ + mov r6, r9\n\ +_0813507C:\n\ + cmp r6, 0x3\n\ + beq _08135082\n\ + b _08134F1E\n\ +_08135082:\n\ + add sp, 0x28\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\ +_08135094: .4byte gEnemyParty\n\ +_08135098: .4byte gBattleTowerHeldItems\n\ +.syntax divided\n"); +} + +u32 CountBattleTowerBanlistCaught() +{ + s32 i; + u32 numCaught = 0; + + for (i = 0; gBattleTowerBanlist[i] != 0xFFFF; i++) + { + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleTowerBanlist[i]), FLAG_GET_CAUGHT)) + { + numCaught++; + } + } + + return numCaught; +} + +u8 AppendBattleTowerBannedSpeciesName(u16 species, u8 curIndexToAppend, s32 numToAppend) +{ + if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT)) + { + curIndexToAppend++; + + switch (curIndexToAppend - 1) + { + case 0: + case 2: + case 4: + case 6: + case 8: + case 10: + if (numToAppend == curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else if (numToAppend > curIndexToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + break; + case 1: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E30); + break; + case 3: + case 5: + case 7: + case 9: + default: + if (curIndexToAppend == numToAppend) + { + StringAppend(gStringVar1, gUnknown_08400E23); + } + else + { + StringAppend(gStringVar1, gUnknown_08400E29); + } + + StringAppend(gStringVar1, gUnknown_08400E2E); + break; + } + + StringAppend(gStringVar1, gSpeciesNames[species]); + } + + return curIndexToAppend; +} |