summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorscnorton <scnorton@biociphers.org>2019-01-02 09:37:56 -0500
committerscnorton <scnorton@biociphers.org>2019-01-02 09:37:56 -0500
commit5c794a1d3d104e70d1215724cbbff211df440585 (patch)
tree5337627af8a425f1266953ec613aa4cb82549ce1
parent0216888949983ec9fcc4649624723714a80db86f (diff)
through sub_815DA3C
-rw-r--r--asm/trainer_tower.s130
-rw-r--r--data/data_8471F00.s22
-rw-r--r--src/trainer_tower.c91
3 files changed, 110 insertions, 133 deletions
diff --git a/asm/trainer_tower.s b/asm/trainer_tower.s
index d884ba2f3..4cb4a6ea1 100644
--- a/asm/trainer_tower.s
+++ b/asm/trainer_tower.s
@@ -5,136 +5,6 @@
.text
- thumb_func_start sub_815D96C
-sub_815D96C: @ 815D96C
- push {r4-r6,lr}
- movs r6, 0
-_0815D970:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x59
- bls _0815D994
- lsls r0, r6, 3
- subs r0, r6
- lsls r0, 2
- ldr r1, _0815D990 @ =gUnknown_8479D34
- b _0815D9B0
- .align 2, 0
-_0815D990: .4byte gUnknown_8479D34 + 4
-_0815D994:
- cmp r0, 0x3B
- bls _0815D9A8
- lsls r0, r6, 3
- subs r0, r6
- lsls r0, 2
- ldr r1, _0815D9A4 @ =gUnknown_8479D34 + 12
- b _0815D9B0
- .align 2, 0
-_0815D9A4: .4byte gUnknown_8479D34 + 12
-_0815D9A8:
- lsls r0, r6, 3
- subs r0, r6
- lsls r0, 2
- ldr r1, _0815D9E4 @ =gUnknown_8479D34 + 20
-_0815D9B0:
- adds r5, r0, r1
- movs r4, 0
- adds r6, 0x1
-_0815D9B6:
- adds r1, r5, r4
- ldrb r0, [r1]
- cmp r0, 0xFF
- beq _0815D9CC
- movs r2, 0xFA
- lsls r2, 2
- adds r0, r2, 0
- ldrb r1, [r1]
- adds r0, r1
- bl FlagClear
-_0815D9CC:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _0815D9B6
- lsls r0, r6, 24
- lsrs r6, r0, 24
- cmp r6, 0xE
- bls _0815D970
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0815D9E4: .4byte gUnknown_8479D34 + 20
- thumb_func_end sub_815D96C
-
- thumb_func_start sub_815D9E8
-sub_815D9E8: @ 815D9E8
- push {lr}
- bl sub_815DC8C
- ldr r1, _0815DA08 @ =gUnknown_847A230
- ldr r0, _0815DA0C @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- bl sub_815DD2C
- pop {r0}
- bx r0
- .align 2, 0
-_0815DA08: .4byte gUnknown_847A230
-_0815DA0C: .4byte gSpecialVar_0x8004
- thumb_func_end sub_815D9E8
-
- thumb_func_start sub_815DA10
-sub_815DA10: @ 815DA10
- ldr r1, _0815DA20 @ =gFacilityClassToTrainerClass
- ldr r0, _0815DA24 @ =gUnknown_203F45C
- ldr r0, [r0]
- adds r0, 0x3D
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0815DA20: .4byte gFacilityClassToTrainerClass
-_0815DA24: .4byte gUnknown_203F45C
- thumb_func_end sub_815DA10
-
- thumb_func_start sub_815DA28
-sub_815DA28: @ 815DA28
- push {lr}
- ldr r1, _0815DA38 @ =gUnknown_203F45C
- ldr r1, [r1]
- movs r2, 0xB
- bl StringCopyN
- pop {r0}
- bx r0
- .align 2, 0
-_0815DA38: .4byte gUnknown_203F45C
- thumb_func_end sub_815DA28
-
- thumb_func_start sub_815DA3C
-sub_815DA3C: @ 815DA3C
- ldr r1, _0815DA4C @ =gFacilityClassToPicIndex
- ldr r0, _0815DA50 @ =gUnknown_203F45C
- ldr r0, [r0]
- adds r0, 0x3D
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_0815DA4C: .4byte gFacilityClassToPicIndex
-_0815DA50: .4byte gUnknown_203F45C
- thumb_func_end sub_815DA3C
-
thumb_func_start sub_815DA54
sub_815DA54: @ 815DA54
push {r4-r7,lr}
diff --git a/data/data_8471F00.s b/data/data_8471F00.s
index 9721cd5ed..8d6e8dd93 100644
--- a/data/data_8471F00.s
+++ b/data/data_8471F00.s
@@ -286,7 +286,27 @@ gUnknown_847A22C:: @ 847A22C
.incbin "baserom.gba", 0x47A22C, 0x4
gUnknown_847A230:: @ 847A230
- .incbin "baserom.gba", 0x47A230, 0x54
+ .4byte sub_815DD44
+ .4byte sub_815DF54
+ .4byte sub_815E160
+ .4byte sub_815E1C0
+ .4byte sub_815E1F0
+ .4byte sub_815E218
+ .4byte sub_815E28C
+ .4byte sub_815E394
+ .4byte sub_815E408
+ .4byte sub_815E4B0
+ .4byte sub_815E56C
+ .4byte sub_815E5C4
+ .4byte sub_815E5F0
+ .4byte sub_815E658
+ .4byte sub_815E720
+ .4byte sub_815E88C
+ .4byte sub_815E8B4
+ .4byte sub_815E8CC
+ .4byte sub_815E908
+ .4byte sub_815E948
+ .4byte sub_815E9C8
gUnknown_847A284:: @ 847A284
.incbin "baserom.gba", 0x47A284, 0x30
diff --git a/src/trainer_tower.c b/src/trainer_tower.c
index 86b4639dd..f1526dfc0 100644
--- a/src/trainer_tower.c
+++ b/src/trainer_tower.c
@@ -3,7 +3,9 @@
#include "constants/vars.h"
#include "malloc.h"
#include "save.h"
+#include "string_util.h"
#include "event_data.h"
+#include "random.h"
#include "cereader_tool.h"
struct UnkStruct_8479D34
@@ -16,9 +18,49 @@ struct UnkStruct_8479D34
u8 flags3[8];
};
-extern const struct UnkStruct_8479D34 gUnknown_8479D34[15];
+struct UnkStruct_203F458
+{
+ /* 0x0000 */ u8 filler_0000[0x1F0C];
+};
+
+struct UnkStruct_203F45C
+{
+ /* 0x00 */ u8 unk_00[11];
+ /* 0x0B */ u8 filler_0B[49];
+ /* 0x3C */ u8 unk_3C;
+ /* 0x3D */ u8 unk_3D;
+};
+
+EWRAM_DATA struct UnkStruct_203F458 * gUnknown_203F458 = NULL;
+EWRAM_DATA struct UnkStruct_203F45C * gUnknown_203F45C = NULL;
void sub_815D96C(void);
+void sub_815DC8C(void); // setup
+void sub_815DD2C(void); // teardown
+void sub_815DD44(void);
+void sub_815DF54(void);
+void sub_815E160(void);
+void sub_815E1C0(void);
+void sub_815E1F0(void);
+void sub_815E218(void);
+void sub_815E28C(void);
+void sub_815E394(void);
+void sub_815E408(void);
+void sub_815E4B0(void);
+void sub_815E56C(void);
+void sub_815E5C4(void);
+void sub_815E5F0(void);
+void sub_815E658(void);
+void sub_815E720(void);
+void sub_815E88C(void);
+void sub_815E8B4(void);
+void sub_815E8CC(void);
+void sub_815E908(void);
+void sub_815E948(void);
+void sub_815E9C8(void);
+
+extern const struct UnkStruct_8479D34 gUnknown_8479D34[15];
+extern void (*const gUnknown_847A230[])(void);
bool32 sub_815D7BC(void * dest, void * buffer)
{
@@ -78,7 +120,7 @@ void sub_815D8C8(void)
}
}
-void sub_815D8F8(void)
+void sub_815D8F8(void) // fakematching
{
u8 i;
register u32 found_map asm("r4") = 0xFF;
@@ -97,3 +139,48 @@ void sub_815D8F8(void)
sub_815D96C();
}
}
+
+void sub_815D96C(void)
+{
+ u8 i, j;
+ const u8 * flags;
+ u16 rval;
+
+ for (i = 0; i < 15; i++)
+ {
+ rval = Random() % 100;
+ if (rval >= 90)
+ flags = gUnknown_8479D34[i].flags1;
+ else if (rval >= 60)
+ flags = gUnknown_8479D34[i].flags2;
+ else
+ flags = gUnknown_8479D34[i].flags3;
+ for (j = 0; j < 8; j++)
+ {
+ if (flags[j] != 0xFF)
+ FlagClear(FLAG_TRAINER_TOWER_START + flags[j]);
+ }
+ }
+}
+
+void sub_815D9E8(void)
+{
+ sub_815DC8C();
+ gUnknown_847A230[gSpecialVar_0x8004]();
+ sub_815DD2C();
+}
+
+u8 sub_815DA10(void)
+{
+ return gFacilityClassToTrainerClass[gUnknown_203F45C->unk_3D];
+}
+
+void sub_815DA28(u8 * dest)
+{
+ StringCopyN(dest, gUnknown_203F45C->unk_00, 11);
+}
+
+u8 sub_815DA3C(void)
+{
+ return gFacilityClassToPicIndex[gUnknown_203F45C->unk_3D];
+}