diff options
Diffstat (limited to 'src/trainer_tower.c')
-rw-r--r-- | src/trainer_tower.c | 91 |
1 files changed, 89 insertions, 2 deletions
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]; +} |