diff options
author | scnorton <scnorton@biociphers.org> | 2019-01-02 09:37:56 -0500 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2019-01-02 09:37:56 -0500 |
commit | 5c794a1d3d104e70d1215724cbbff211df440585 (patch) | |
tree | 5337627af8a425f1266953ec613aa4cb82549ce1 | |
parent | 0216888949983ec9fcc4649624723714a80db86f (diff) |
through sub_815DA3C
-rw-r--r-- | asm/trainer_tower.s | 130 | ||||
-rw-r--r-- | data/data_8471F00.s | 22 | ||||
-rw-r--r-- | src/trainer_tower.c | 91 |
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]; +} |