diff options
-rw-r--r-- | asm/trainer_tower.s | 314 | ||||
-rw-r--r-- | ld_script.txt | 1 | ||||
-rw-r--r-- | src/trainer_tower.c | 83 |
3 files changed, 75 insertions, 323 deletions
diff --git a/asm/trainer_tower.s b/asm/trainer_tower.s deleted file mode 100644 index 2336ec48a..000000000 --- a/asm/trainer_tower.s +++ /dev/null @@ -1,314 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - thumb_func_start sub_815EBB8 -sub_815EBB8: @ 815EBB8 - push {r4-r6,lr} - movs r6, 0 - movs r5, 0 -_0815EBBE: - movs r0, 0x64 - adds r1, r5, 0 - muls r1, r0 - ldr r0, _0815EC08 @ =gPlayerParty - adds r4, r1, r0 - adds r0, r4, 0 - movs r1, 0xB - movs r2, 0 - bl GetMonData - cmp r0, 0 - beq _0815EBF8 - adds r0, r4, 0 - movs r1, 0x41 - movs r2, 0 - bl GetMonData - movs r1, 0xCE - lsls r1, 1 - cmp r0, r1 - beq _0815EBF8 - adds r0, r4, 0 - movs r1, 0x38 - movs r2, 0 - bl GetMonData - cmp r0, r6 - ble _0815EBF8 - adds r6, r0, 0 -_0815EBF8: - adds r5, 0x1 - cmp r5, 0x5 - ble _0815EBBE - adds r0, r6, 0 - pop {r4-r6} - pop {r1} - bx r1 - .align 2, 0 -_0815EC08: .4byte gPlayerParty - thumb_func_end sub_815EBB8 - - thumb_func_start sub_815EC0C -sub_815EC0C: @ 815EC0C - push {r4,lr} - ldr r4, _0815EC70 @ =gSaveBlock1Ptr - ldr r2, [r4] - ldr r1, _0815EC74 @ =0x00003d34 - adds r0, r2, r1 - ldr r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r2, r0 - ldr r0, _0815EC78 @ =0x00003d41 - adds r2, r0 - ldr r0, _0815EC7C @ =gUnknown_203F458 - ldr r0, [r0] - ldrb r1, [r0, 0x5] - ldrb r0, [r2] - cmp r0, r1 - beq _0815EC6A - strb r1, [r2] - ldr r2, [r4] - ldr r1, _0815EC74 @ =0x00003d34 - adds r0, r2, r1 - ldr r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r2, _0815EC80 @ =0x00003d3c - adds r0, r2 - ldr r1, _0815EC84 @ =0x00034bbf - bl sub_815EDF4 - ldr r1, [r4] - ldr r2, _0815EC74 @ =0x00003d34 - adds r0, r1, r2 - ldr r2, [r0] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, r0 - ldr r0, _0815EC88 @ =0x00003d42 - adds r1, r0 - ldrb r2, [r1] - movs r0, 0x2 - negs r0, r0 - ands r0, r2 - strb r0, [r1] -_0815EC6A: - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815EC70: .4byte gSaveBlock1Ptr -_0815EC74: .4byte 0x00003d34 -_0815EC78: .4byte 0x00003d41 -_0815EC7C: .4byte gUnknown_203F458 -_0815EC80: .4byte 0x00003d3c -_0815EC84: .4byte 0x00034bbf -_0815EC88: .4byte 0x00003d42 - thumb_func_end sub_815EC0C - - thumb_func_start sub_815EC8C -sub_815EC8C: @ 815EC8C - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - movs r0, 0 - mov r8, r0 - bl sub_815DC8C - movs r0, 0xD8 - str r0, [sp] - movs r0, 0x90 - str r0, [sp, 0x4] - movs r0, 0 - movs r1, 0 - movs r2, 0 - movs r3, 0 - bl FillWindowPixelRect - bl sub_815EC0C - ldr r4, _0815EDB4 @ =gUnknown_847A22C - str r4, [sp] - mov r0, r8 - str r0, [sp, 0x4] - ldr r0, _0815EDB8 @ =gUnknown_83FE982 - str r0, [sp, 0x8] - movs r0, 0 - movs r1, 0x2 - movs r2, 0x4A - movs r3, 0 - bl box_print - movs r7, 0 - movs r0, 0x90 - lsls r0, 22 - mov r10, r0 - ldr r0, _0815EDBC @ =0x00003d38 - mov r9, r0 -_0815ECDC: - ldr r0, _0815EDC0 @ =gSaveBlock1Ptr - ldr r0, [r0] - add r0, r9 - adds r0, 0x4 - bl sub_815EDDC - adds r4, r0, 0 - movs r5, 0xE1 - lsls r5, 4 - adds r1, r5, 0 - bl __divsi3 - adds r6, r0, 0 - adds r0, r4, 0 - adds r1, r5, 0 - bl __modsi3 - adds r4, r0, 0 - movs r1, 0x3C - bl __divsi3 - adds r5, r0, 0 - adds r0, r4, 0 - movs r1, 0x3C - bl __modsi3 - movs r1, 0xA8 - muls r0, r1 - movs r1, 0x64 - bl __divsi3 - adds r4, r0, 0 - ldr r0, _0815EDC4 @ =gStringVar1 - adds r1, r6, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _0815EDC8 @ =gStringVar2 - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _0815EDCC @ =gStringVar3 - adds r1, r4, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _0815EDD0 @ =gStringVar4 - ldr r1, _0815EDD4 @ =gUnknown_83FE998 - bl StringExpandPlaceholders - lsls r1, r7, 2 - mov r0, r10 - lsrs r4, r0, 24 - ldr r0, _0815EDB4 @ =gUnknown_847A22C - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - ldr r0, _0815EDD8 @ =gUnknown_83FE9C4 - adds r1, r0 - ldr r0, [r1] - str r0, [sp, 0x8] - mov r0, r8 - movs r1, 0x2 - movs r2, 0x18 - adds r3, r4, 0 - bl box_print - ldr r0, _0815EDB4 @ =gUnknown_847A22C - str r0, [sp] - movs r0, 0 - str r0, [sp, 0x4] - ldr r0, _0815EDD0 @ =gStringVar4 - str r0, [sp, 0x8] - mov r0, r8 - movs r1, 0x2 - movs r2, 0x60 - adds r3, r4, 0 - bl box_print - movs r0, 0xA0 - lsls r0, 21 - add r10, r0 - movs r0, 0xC - add r9, r0 - adds r7, 0x1 - cmp r7, 0x3 - ble _0815ECDC - mov r0, r8 - bl PutWindowTilemap - mov r0, r8 - movs r1, 0x3 - bl CopyWindowToVram - bl sub_815DD2C - add sp, 0xC - pop {r3-r5} - mov r8, r3 - mov r9, r4 - mov r10, r5 - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815EDB4: .4byte gUnknown_847A22C -_0815EDB8: .4byte gUnknown_83FE982 -_0815EDBC: .4byte 0x00003d38 -_0815EDC0: .4byte gSaveBlock1Ptr -_0815EDC4: .4byte gStringVar1 -_0815EDC8: .4byte gStringVar2 -_0815EDCC: .4byte gStringVar3 -_0815EDD0: .4byte gStringVar4 -_0815EDD4: .4byte gUnknown_83FE998 -_0815EDD8: .4byte gUnknown_83FE9C4 - thumb_func_end sub_815EC8C - - thumb_func_start sub_815EDDC -sub_815EDDC: @ 815EDDC - ldr r1, _0815EDF0 @ =gSaveBlock2Ptr - ldr r1, [r1] - movs r2, 0xF2 - lsls r2, 4 - adds r1, r2 - ldr r0, [r0] - ldr r1, [r1] - eors r0, r1 - bx lr - .align 2, 0 -_0815EDF0: .4byte gSaveBlock2Ptr - thumb_func_end sub_815EDDC - - thumb_func_start sub_815EDF4 -sub_815EDF4: @ 815EDF4 - ldr r2, _0815EE08 @ =gSaveBlock2Ptr - ldr r2, [r2] - movs r3, 0xF2 - lsls r3, 4 - adds r2, r3 - ldr r2, [r2] - eors r2, r1 - str r2, [r0] - bx lr - .align 2, 0 -_0815EE08: .4byte gSaveBlock2Ptr - thumb_func_end sub_815EDF4 - - thumb_func_start sub_815EE0C -sub_815EE0C: @ 815EE0C - push {r4-r6,lr} - ldr r6, _0815EE30 @ =gSaveBlock1Ptr - ldr r5, _0815EE34 @ =0x00003d38 - movs r4, 0x3 -_0815EE14: - ldr r0, [r6] - adds r0, r5 - adds r0, 0x4 - ldr r1, _0815EE38 @ =0x00034bbf - bl sub_815EDF4 - adds r5, 0xC - subs r4, 0x1 - cmp r4, 0 - bge _0815EE14 - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815EE30: .4byte gSaveBlock1Ptr -_0815EE34: .4byte 0x00003d38 -_0815EE38: .4byte 0x00034bbf - thumb_func_end sub_815EE0C - - .align 2, 0 @ Don't pad with nop. diff --git a/ld_script.txt b/ld_script.txt index 6eb5e4e6d..6462ac2d7 100644 --- a/ld_script.txt +++ b/ld_script.txt @@ -267,7 +267,6 @@ SECTIONS { asm/ss_anne.o(.text); asm/cereader_tool.o(.text); src/trainer_tower.o(.text); - asm/trainer_tower.o(.text); asm/unk_815EDDC.o(.text); asm/unk_815F138.o(.text); asm/berry_fix_program.o(.text); diff --git a/src/trainer_tower.c b/src/trainer_tower.c index 889d90696..067bdc4ae 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -3,6 +3,7 @@ #include "task.h" #include "constants/flags.h" #include "constants/vars.h" +#include "constants/species.h" #include "malloc.h" #include "save.h" #include "util.h" @@ -139,7 +140,7 @@ void sub_815E908(void); void sub_815E948(void); void sub_815E9C8(void); void sub_815E9FC(void); -s32 sub_815EBB8(void); +static s32 GetPartyMaxLevel(void); void sub_815EC0C(void); u32 sub_815EDDC(u32 *); void sub_815EDF4(u32 *, u32); @@ -153,6 +154,7 @@ extern const struct UnkStruct_8479ED8 gUnknown_8479ED8[83]; extern const struct UnkStruct_847A024 gUnknown_847A024[10]; extern const struct UnkStruct_847A074 gUnknown_847A074[105]; extern const struct WindowTemplate gUnknown_847A218; +extern const struct TextColor gUnknown_847A22C; extern void (*const gUnknown_847A230[])(void); extern const struct Unk_203F458_Header gUnknown_84827AC; extern const struct UnkSubstruct_203F458_000C *const gUnknown_84827B4[][8]; @@ -1018,7 +1020,7 @@ void sub_815E9C8(void) void sub_815E9FC(void) { u16 r4 = VarGet(VAR_0x4001); - s32 r9 = sub_815EBB8(); + s32 r9 = GetPartyMaxLevel(); u8 r5 = gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk8; s32 r6; u8 r2; @@ -1030,12 +1032,6 @@ void sub_815E9FC(void) case 0: default: for (r6 = 0; r6 < 2; r6++) - /* - * sp+0 := r5 * 2 - * r5 := gUnknown_203F458 - * r7 := r4 * 72 - * r8 := r7 + 4 - */ { r2 = gUnknown_847A2EE[r5][r6]; gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_040[r2].level = r9; @@ -1057,3 +1053,74 @@ void sub_815E9FC(void) break; } } + +static s32 GetPartyMaxLevel(void) +{ + s32 topLevel = 0; + s32 i; + + for (i = 0; i < PARTY_SIZE; i++) + { + if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != 0 && GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) != SPECIES_EGG) + { + s32 currLevel = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL, NULL); + if (currLevel > topLevel) + topLevel = currLevel; + } + } + + return topLevel; +} + +void sub_815EC0C(void) +{ + if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 != gUnknown_203F458->unk_0004.unk_0000.unk1) + { + gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk9 = gUnknown_203F458->unk_0004.unk_0000.unk1; + sub_815EDF4(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk4, 215999); + gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_0 = FALSE; + } +} + +void sub_815EC8C(void) +{ + s32 i; + u8 windowId = 0; + + sub_815DC8C(); + FillWindowPixelRect(0, 0, 0, 0, 0xd8, 0x90); + sub_815EC0C(); + box_print(0, 2, 0x4a, 0, &gUnknown_847A22C, 0, gUnknown_83FE982); + + for (i = 0; i < 4; i++) + { + PRINT_TOWER_TIME(sub_815EDDC(&gSaveBlock1Ptr->unkArray[i].unk4)); + StringExpandPlaceholders(gStringVar4, gUnknown_83FE998); + box_print(windowId, 2, 0x18, 0x24 + 0x14 * i, &gUnknown_847A22C, 0, gUnknown_83FE9C4[i]); + box_print(windowId, 2, 0x60, 0x24 + 0x14 * i, &gUnknown_847A22C, 0, gStringVar4); + } + + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); + sub_815DD2C(); +} + +u32 sub_815EDDC(u32 * counter) +{ + return *counter ^ gSaveBlock2Ptr->encryptionKey; +} + +void sub_815EDF4(u32 * counter, u32 value) +{ + *counter = value ^ gSaveBlock2Ptr->encryptionKey; +} + +void sub_815EE0C(void) +{ + s32 i; + + for (i = 0; i < 4; i++) + { + sub_815EDF4(&gSaveBlock1Ptr->unkArray[i].unk4, 215999); + } +} |