diff options
author | PikalaxALT <pikalaxalt@gmail.com> | 2019-01-08 08:45:19 -0500 |
---|---|---|
committer | PikalaxALT <pikalaxalt@gmail.com> | 2019-01-08 08:45:19 -0500 |
commit | 9c5f01fc8efb546fa6ef546cd1c627befcfd6740 (patch) | |
tree | b6094ae48fd287de2f1169fd2ce85937f8e4f507 | |
parent | 724a36220d274a24b666a36e38fb41f191b7c01f (diff) |
through sub_815E948
-rw-r--r-- | asm/trainer_tower.s | 465 | ||||
-rw-r--r-- | include/new_menu_helpers.h | 1 | ||||
-rw-r--r-- | include/pokemon.h | 1 | ||||
-rw-r--r-- | src/trainer_tower.c | 147 |
4 files changed, 149 insertions, 465 deletions
diff --git a/asm/trainer_tower.s b/asm/trainer_tower.s index a1ca0da57..4b1bfdfe0 100644 --- a/asm/trainer_tower.s +++ b/asm/trainer_tower.s @@ -5,471 +5,6 @@ .text - thumb_func_start sub_815E5F0 -sub_815E5F0: @ 815E5F0 - push {lr} - ldr r0, _0815E620 @ =gSaveBlock1Ptr - ldr r2, [r0] - ldr r1, _0815E624 @ =0x00003d34 - adds r0, r2, r1 - ldr r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r2, r0 - ldr r0, _0815E628 @ =0x00003d42 - adds r2, r0 - ldrb r1, [r2] - lsls r0, r1, 28 - cmp r0, 0 - bge _0815E630 - movs r0, 0x9 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldr r1, _0815E62C @ =gSpecialVar_Result - movs r0, 0 - b _0815E64C - .align 2, 0 -_0815E620: .4byte gSaveBlock1Ptr -_0815E624: .4byte 0x00003d34 -_0815E628: .4byte 0x00003d42 -_0815E62C: .4byte gSpecialVar_Result -_0815E630: - lsls r0, r1, 27 - cmp r0, 0 - bge _0815E648 - movs r0, 0x11 - negs r0, r0 - ands r0, r1 - strb r0, [r2] - ldr r1, _0815E644 @ =gSpecialVar_Result - movs r0, 0x1 - b _0815E64C - .align 2, 0 -_0815E644: .4byte gSpecialVar_Result -_0815E648: - ldr r1, _0815E654 @ =gSpecialVar_Result - movs r0, 0x2 -_0815E64C: - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0815E654: .4byte gSpecialVar_Result - thumb_func_end sub_815E5F0 - - thumb_func_start sub_815E658 -sub_815E658: @ 815E658 - push {r4-r6,lr} - ldr r4, _0815E700 @ =gSaveBlock1Ptr - ldr r2, [r4] - ldr r6, _0815E704 @ =0x00003d34 - adds r0, r2, r6 - ldr r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - ldr r5, _0815E708 @ =0x00003d38 - adds r2, r5 - adds r2, r0 - ldr r1, [r2] - ldr r0, _0815E70C @ =0x00034bbe - cmp r1, r0 - bls _0815E690 - bl DisableVBlankCounter1 - ldr r1, [r4] - adds r0, r1, r6 - ldr r2, [r0] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, r5 - adds r1, r0 - ldr r0, _0815E710 @ =0x00034bbf - str r0, [r1] -_0815E690: - ldr r1, [r4] - adds r0, r1, r6 - ldr r2, [r0] - lsls r0, r2, 1 - adds r0, r2 - lsls r0, 2 - adds r1, r5 - adds r1, r0 - ldr r4, [r1] - movs r5, 0xE1 - lsls r5, 4 - adds r0, r4, 0 - 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, _0815E714 @ =gStringVar1 - adds r1, r6, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _0815E718 @ =gStringVar2 - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _0815E71C @ =gStringVar3 - adds r1, r4, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - pop {r4-r6} - pop {r0} - bx r0 - .align 2, 0 -_0815E700: .4byte gSaveBlock1Ptr -_0815E704: .4byte 0x00003d34 -_0815E708: .4byte 0x00003d38 -_0815E70C: .4byte 0x00034bbe -_0815E710: .4byte 0x00034bbf -_0815E714: .4byte gStringVar1 -_0815E718: .4byte gStringVar2 -_0815E71C: .4byte gStringVar3 - thumb_func_end sub_815E658 - - thumb_func_start sub_815E720 -sub_815E720: @ 815E720 - push {r4-r7,lr} - mov r7, r10 - mov r6, r9 - mov r5, r8 - push {r5-r7} - sub sp, 0xC - bl sub_815EC0C - ldr r0, _0815E85C @ =gUnknown_847A218 - bl AddWindow - lsls r0, 24 - lsrs r7, r0, 24 - bl sub_80F6E9C - adds r0, r7, 0 - movs r1, 0 - bl sub_80F6F1C - ldr r2, _0815E860 @ =gUnknown_83FE982 - movs r1, 0 - str r1, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - str r1, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x2 - movs r3, 0x4A - bl AddTextPrinterParameterized - movs r0, 0 - mov r8, r0 - movs r1, 0xB8 - lsls r1, 22 - mov r10, r1 - movs r0, 0x90 - lsls r0, 22 - mov r9, r0 -_0815E76C: - ldr r0, _0815E864 @ =gSaveBlock1Ptr - ldr r2, [r0] - ldr r1, _0815E868 @ =0x00003d34 - adds r0, r2, r1 - ldr r1, [r0] - lsls r0, r1, 1 - adds r0, r1 - lsls r0, 2 - adds r0, r2 - ldr r1, _0815E86C @ =0x00003d3c - adds r0, r1 - 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, _0815E870 @ =gStringVar1 - adds r1, r6, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _0815E874 @ =gStringVar2 - adds r1, r5, 0 - movs r2, 0x1 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _0815E878 @ =gStringVar3 - adds r1, r4, 0 - movs r2, 0x2 - movs r3, 0x2 - bl ConvertIntToDecimalStringN - ldr r0, _0815E87C @ =gStringVar4 - ldr r1, _0815E880 @ =gUnknown_83FE998 - bl StringExpandPlaceholders - ldr r1, _0815E884 @ =gUnknown_83FE9C4 - mov r0, r8 - subs r0, 0x1 - lsls r0, 2 - adds r0, r1 - ldr r2, [r0] - mov r1, r9 - lsrs r0, r1, 24 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x2 - movs r3, 0x18 - bl AddTextPrinterParameterized - mov r1, r10 - lsrs r0, r1, 24 - str r0, [sp] - movs r0, 0xFF - str r0, [sp, 0x4] - movs r1, 0 - str r1, [sp, 0x8] - adds r0, r7, 0 - movs r1, 0x2 - ldr r2, _0815E87C @ =gStringVar4 - movs r3, 0x60 - bl AddTextPrinterParameterized - movs r0, 0xA0 - lsls r0, 21 - add r10, r0 - add r9, r0 - movs r1, 0x1 - add r8, r1 - mov r0, r8 - cmp r0, 0x3 - ble _0815E76C - adds r0, r7, 0 - bl PutWindowTilemap - adds r0, r7, 0 - movs r1, 0x3 - bl CopyWindowToVram - ldr r0, _0815E888 @ =0x00004001 - adds r1, r7, 0 - bl VarSet - 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 -_0815E85C: .4byte gUnknown_847A218 -_0815E860: .4byte gUnknown_83FE982 -_0815E864: .4byte gSaveBlock1Ptr -_0815E868: .4byte 0x00003d34 -_0815E86C: .4byte 0x00003d3c -_0815E870: .4byte gStringVar1 -_0815E874: .4byte gStringVar2 -_0815E878: .4byte gStringVar3 -_0815E87C: .4byte gStringVar4 -_0815E880: .4byte gUnknown_83FE998 -_0815E884: .4byte gUnknown_83FE9C4 -_0815E888: .4byte 0x00004001 - thumb_func_end sub_815E720 - - thumb_func_start sub_815E88C -sub_815E88C: @ 815E88C - push {r4,lr} - ldr r0, _0815E8B0 @ =0x00004001 - bl VarGet - adds r4, r0, 0 - lsls r4, 24 - lsrs r4, 24 - adds r0, r4, 0 - movs r1, 0x1 - bl sub_810F4D8 - adds r0, r4, 0 - bl RemoveWindow - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815E8B0: .4byte 0x00004001 - thumb_func_end sub_815E88C - - thumb_func_start sub_815E8B4 -sub_815E8B4: @ 815E8B4 - push {r4,lr} - ldr r4, _0815E8C8 @ =gSpecialVar_Result - bl GetMonsStateToDoubles - lsls r0, 24 - lsrs r0, 24 - strh r0, [r4] - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815E8C8: .4byte gSpecialVar_Result - thumb_func_end sub_815E8B4 - - thumb_func_start sub_815E8CC -sub_815E8CC: @ 815E8CC - push {lr} - ldr r0, _0815E8EC @ =gUnknown_203F458 - ldr r1, [r0] - ldrb r0, [r1, 0x4] - ldrb r2, [r1, 0xD] - cmp r0, r2 - beq _0815E8F8 - ldr r0, _0815E8F0 @ =gStringVar1 - ldrb r1, [r1, 0x4] - movs r2, 0 - movs r3, 0x1 - bl ConvertIntToDecimalStringN - ldr r1, _0815E8F4 @ =gSpecialVar_Result - movs r0, 0x1 - b _0815E8FC - .align 2, 0 -_0815E8EC: .4byte gUnknown_203F458 -_0815E8F0: .4byte gStringVar1 -_0815E8F4: .4byte gSpecialVar_Result -_0815E8F8: - ldr r1, _0815E904 @ =gSpecialVar_Result - movs r0, 0 -_0815E8FC: - strh r0, [r1] - pop {r0} - bx r0 - .align 2, 0 -_0815E904: .4byte gSpecialVar_Result - thumb_func_end sub_815E8CC - - thumb_func_start sub_815E908 -sub_815E908: @ 815E908 - push {lr} - ldr r0, _0815E928 @ =gMapHeader - ldrh r1, [r0, 0x12] - ldr r0, _0815E92C @ =0x00000129 - cmp r1, r0 - bne _0815E938 - ldr r0, _0815E930 @ =0x00004082 - bl VarGet - lsls r0, 16 - lsrs r1, r0, 16 - cmp r1, 0 - bne _0815E938 - ldr r0, _0815E934 @ =gSpecialVar_Result - strh r1, [r0] - b _0815E93E - .align 2, 0 -_0815E928: .4byte gMapHeader -_0815E92C: .4byte 0x00000129 -_0815E930: .4byte 0x00004082 -_0815E934: .4byte gSpecialVar_Result -_0815E938: - ldr r1, _0815E944 @ =gSpecialVar_Result - movs r0, 0 - strh r0, [r1] -_0815E93E: - pop {r0} - bx r0 - .align 2, 0 -_0815E944: .4byte gSpecialVar_Result - thumb_func_end sub_815E908 - - thumb_func_start sub_815E948 -sub_815E948: @ 815E948 - push {r4,lr} - ldr r0, _0815E97C @ =0x00004001 - bl VarGet - lsls r0, 16 - lsrs r2, r0, 16 - ldr r0, _0815E980 @ =gUnknown_203F458 - ldr r3, [r0] - lsls r1, r2, 2 - adds r1, r2 - lsls r1, 3 - adds r1, r2 - lsls r1, 3 - ldrb r2, [r3] - lsls r0, r2, 5 - subs r0, r2 - lsls r0, 5 - adds r1, r0 - adds r3, r1 - ldrb r1, [r3, 0x1B] - movs r3, 0 - ldr r2, _0815E984 @ =gUnknown_847A074 - ldr r0, _0815E988 @ =gFacilityClassToTrainerClass - adds r1, r0 - b _0815E994 - .align 2, 0 -_0815E97C: .4byte 0x00004001 -_0815E980: .4byte gUnknown_203F458 -_0815E984: .4byte gUnknown_847A074 -_0815E988: .4byte gFacilityClassToTrainerClass -_0815E98C: - adds r2, 0x4 - adds r3, 0x1 - cmp r3, 0x68 - bhi _0815E99C -_0815E994: - ldrb r0, [r2] - ldrb r4, [r1] - cmp r0, r4 - bne _0815E98C -_0815E99C: - cmp r3, 0x69 - beq _0815E9B0 - ldr r1, _0815E9AC @ =gUnknown_847A074 - lsls r0, r3, 2 - adds r0, r1 - ldrb r2, [r0, 0x1] - b _0815E9B2 - .align 2, 0 -_0815E9AC: .4byte gUnknown_847A074 -_0815E9B0: - movs r2, 0 -_0815E9B2: - ldr r0, _0815E9C4 @ =gUnknown_847A2D2 - lsls r1, r2, 1 - adds r1, r0 - ldrh r0, [r1] - bl PlayNewMapMusic - pop {r4} - pop {r0} - bx r0 - .align 2, 0 -_0815E9C4: .4byte gUnknown_847A2D2 - thumb_func_end sub_815E948 - thumb_func_start sub_815E9C8 sub_815E9C8: @ 815E9C8 ldr r3, _0815E9EC @ =gSpecialVar_Result diff --git a/include/new_menu_helpers.h b/include/new_menu_helpers.h index 32b46b552..e22f89f44 100644 --- a/include/new_menu_helpers.h +++ b/include/new_menu_helpers.h @@ -23,5 +23,6 @@ void sub_80F7974(const u8 *); u8 GetStartMenuWindowId(void); void sub_80F7998(void); void sub_80F69E8(u8 bgId, const void *src, u32 size, u16 offset, u8 mode); +void sub_80F6F1C(u8 windowId, bool8 copyNow); #endif // GUARD_NEW_MENU_HELPERS_H diff --git a/include/pokemon.h b/include/pokemon.h index 4c6240cd4..6a9b85e71 100644 --- a/include/pokemon.h +++ b/include/pokemon.h @@ -671,5 +671,6 @@ void BattleAnimateFrontSprite(struct Sprite* sprite, u16 species, bool8 noCry, u void BattleAnimateBackSprite(struct Sprite* sprite, u16 species); void PlayMapChosenOrBattleBGM(u16 songId); +u8 GetMonsStateToDoubles(void); #endif // GUARD_POKEMON_H diff --git a/src/trainer_tower.c b/src/trainer_tower.c index f4e18eee6..8ced159c5 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -18,6 +18,10 @@ #include "battle_2.h" #include "overworld.h" #include "item.h" +#include "window.h" +#include "menu.h" +#include "new_menu_helpers.h" +#include "sound.h" struct UnkStruct_8479D34 { @@ -98,6 +102,12 @@ struct UnkStruct_847A024 bool8 unk4; }; +struct UnkStruct_847A074 +{ + u8 unk0; + u8 unk1; +}; + EWRAM_DATA struct UnkStruct_203F458 * gUnknown_203F458 = NULL; EWRAM_DATA struct UnkStruct_203F45C * gUnknown_203F45C = NULL; @@ -133,14 +143,21 @@ void sub_815EC0C(void); u32 sub_815EDDC(u32 *); void sub_815EDF4(u32 *, u32); +extern const u8 gUnknown_83FE982[]; +extern const u8 gUnknown_83FE998[]; +extern const u8 *const gUnknown_83FE9C4[]; + extern const struct UnkStruct_8479D34 gUnknown_8479D34[15]; 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 void (*const gUnknown_847A230[])(void); extern const struct Unk_203F458_Header gUnknown_84827AC; extern const struct UnkSubstruct_203F458_000C *const gUnknown_84827B4[][8]; extern const u16 gUnknown_847A284[8][3]; extern const u16 gUnknown_847A2B4[]; +extern const u16 gUnknown_847A2D2[]; bool32 sub_815D7BC(void * dest, void * buffer) { @@ -858,3 +875,133 @@ void sub_815E5C4(void) { gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_3 = 1; } + +void sub_815E5F0(void) +{ + if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_3) + { + gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_3 = FALSE; + gSpecialVar_Result = 0; + } + else if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_4) + { + gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unkA_4 = FALSE; + gSpecialVar_Result = 1; + } + else + { + gSpecialVar_Result = 2; + } +} + +#define PRINT_TOWER_TIME(src) ({ \ + s32 minutes, seconds, centiseconds, frames; \ + \ + frames = (src); \ + \ + minutes = frames / 3600; \ + frames %= 3600; \ + seconds = frames / 60; \ + frames %= 60; \ + centiseconds = frames * 168 / 100; \ + \ + ConvertIntToDecimalStringN(gStringVar1, minutes, STR_CONV_MODE_RIGHT_ALIGN, 2); \ + ConvertIntToDecimalStringN(gStringVar2, seconds, STR_CONV_MODE_RIGHT_ALIGN, 2); \ + ConvertIntToDecimalStringN(gStringVar3, centiseconds, STR_CONV_MODE_LEADING_ZEROS, 2); \ +}) + +void sub_815E658(void) +{ + if (gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0 >= 215999) + { + DisableVBlankCounter1(); + gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0 = 215999; + } + + PRINT_TOWER_TIME(gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk0); +} + +void sub_815E720(void) +{ + u8 windowId; + s32 i; + s32 minutes, seconds, centiseconds; + + sub_815EC0C(); + windowId = AddWindow(&gUnknown_847A218); + sub_80F6E9C(); + sub_80F6F1C(windowId, FALSE); + AddTextPrinterParameterized(windowId, 2, gUnknown_83FE982, 0x4A, 0, 0xFF, NULL); + + for (i = 0; i < 4; i++) + { + PRINT_TOWER_TIME(sub_815EDDC(&gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx].unk4)); + + StringExpandPlaceholders(gStringVar4, gUnknown_83FE998); + AddTextPrinterParameterized(windowId, 2, gUnknown_83FE9C4[i - 1], 0x18, 0x24 + 0x14 * i, 0xFF, NULL); + AddTextPrinterParameterized(windowId, 2, gStringVar4, 0x60, 0x2E + 0x14 * i, 0xFF, NULL); + } + + PutWindowTilemap(windowId); + CopyWindowToVram(windowId, 3); + VarSet(VAR_0x4001, windowId); +} + +void sub_815E88C(void) +{ + u8 windowId = VarGet(VAR_0x4001); + sub_810F4D8(windowId, TRUE); + RemoveWindow(windowId); +} + +void sub_815E8B4(void) +{ + gSpecialVar_Result = GetMonsStateToDoubles(); +} + +void sub_815E8CC(void) +{ + if (gUnknown_203F458->unk_0004.unk_0000.unk0 != gUnknown_203F458->unk_0004.unk_0008[0].unk_001) + { + ConvertIntToDecimalStringN(gStringVar1, gUnknown_203F458->unk_0004.unk_0000.unk0, STR_CONV_MODE_LEFT_ALIGN, 1); + gSpecialVar_Result = TRUE; + } + else + { + gSpecialVar_Result = FALSE; + } +} + +void sub_815E908(void) +{ + if (gMapHeader.mapDataId == 0x0129 && VarGet(VAR_0x4082) == 0) + { + gSpecialVar_Result = FALSE; + } + else + { + gSpecialVar_Result = FALSE; + } +} + +void sub_815E948(void) +{ + s32 i; + u16 var_4001 = VarGet(VAR_0x4001); + u8 r1 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[var_4001].unk_00B; + + for (i = 0; i < NELEMS(gUnknown_847A074); i++) + { + if (gUnknown_847A074[i].unk0 == gFacilityClassToTrainerClass[r1]) + break; + } + if (i != NELEMS(gUnknown_847A074)) + { + var_4001 = gUnknown_847A074[i].unk1; + } + else + { + var_4001 = 0; + } + PlayNewMapMusic(gUnknown_847A2D2[var_4001]); +} |