summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPikalaxALT <pikalaxalt@gmail.com>2019-01-08 08:45:19 -0500
committerPikalaxALT <pikalaxalt@gmail.com>2019-01-08 08:45:19 -0500
commit9c5f01fc8efb546fa6ef546cd1c627befcfd6740 (patch)
treeb6094ae48fd287de2f1169fd2ce85937f8e4f507
parent724a36220d274a24b666a36e38fb41f191b7c01f (diff)
through sub_815E948
-rw-r--r--asm/trainer_tower.s465
-rw-r--r--include/new_menu_helpers.h1
-rw-r--r--include/pokemon.h1
-rw-r--r--src/trainer_tower.c147
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]);
+}