From 04e61537c2bcb0e6fdd631396ae7e5664d25c7d6 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 30 Dec 2018 10:46:21 -0500 Subject: Start decomp of trainer_tower --- src/trainer_tower.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 src/trainer_tower.c (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c new file mode 100644 index 000000000..9d6ea8a3b --- /dev/null +++ b/src/trainer_tower.c @@ -0,0 +1,33 @@ +#include "global.h" +#include "malloc.h" +#include "save.h" +#include "cereader_tool.h" + +bool32 sub_815D7BC(void * dest, void * buffer) +{ + if (TryCopySpecialSaveSection(30, buffer) != 1) + return FALSE; + memcpy(dest + 0x000, buffer, 0xF88); + + if (TryCopySpecialSaveSection(31, buffer) != 1) + return FALSE; + memcpy(dest + 0xF88, buffer, 0xF80); + + if (!sub_815D6B4(dest)) + return FALSE; + return TRUE; +} + +bool32 sub_815D80C(void * dest) +{ + void * buffer = AllocZeroed(0x1000); + bool32 success = sub_815D7BC(dest, buffer); + Free(buffer); + return success; +} + +bool32 sub_815D834(void) +{ + // Stubbed out? + return FALSE; +} -- cgit v1.2.3 From 220fe47299e9fd43ffd2cacfb0222ea4f5548998 Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 30 Dec 2018 11:59:00 -0500 Subject: sub_815D838; decompile some gfx --- src/trainer_tower.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c index 9d6ea8a3b..f2726d59b 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -1,8 +1,20 @@ #include "global.h" #include "malloc.h" #include "save.h" +#include "event_data.h" #include "cereader_tool.h" +struct UnkStruct_8479D38 +{ + u8 flags1[8]; + u8 flags2[8]; + u8 flags3[8]; + u8 unk_24; + u8 unk_25; +}; + +extern const struct UnkStruct_8479D38 gUnknown_8479D38[15]; + bool32 sub_815D7BC(void * dest, void * buffer) { if (TryCopySpecialSaveSection(30, buffer) != 1) @@ -31,3 +43,24 @@ bool32 sub_815D834(void) // Stubbed out? return FALSE; } + +void sub_815D838(void) +{ + u8 i, j; + + for (i = 0; i < 15; i++) + { + const u8 * flags1 = gUnknown_8479D38[i].flags1; + const u8 * flags2 = gUnknown_8479D38[i].flags2; + const u8 * flags3 = gUnknown_8479D38[i].flags3; + for (j = 0; j < 8; j++) + { + if (flags1[j] != 0xFF) + FlagSet(1000 + flags1[j]); + if (flags2[j] != 0xFF) + FlagSet(1000 + flags2[j]); + if (flags3[j] != 0xFF) + FlagSet(1000 + flags3[j]); + } + } +} -- cgit v1.2.3 From 0216888949983ec9fcc4649624723714a80db86f Mon Sep 17 00:00:00 2001 From: scnorton Date: Sun, 30 Dec 2018 12:32:42 -0500 Subject: through sub_815D8F8 --- src/trainer_tower.c | 53 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c index f2726d59b..86b4639dd 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -1,19 +1,24 @@ #include "global.h" +#include "constants/flags.h" +#include "constants/vars.h" #include "malloc.h" #include "save.h" #include "event_data.h" #include "cereader_tool.h" -struct UnkStruct_8479D38 +struct UnkStruct_8479D34 { + s8 mapGroup; + s8 mapNum; + u8 filler[2]; u8 flags1[8]; u8 flags2[8]; u8 flags3[8]; - u8 unk_24; - u8 unk_25; }; -extern const struct UnkStruct_8479D38 gUnknown_8479D38[15]; +extern const struct UnkStruct_8479D34 gUnknown_8479D34[15]; + +void sub_815D96C(void); bool32 sub_815D7BC(void * dest, void * buffer) { @@ -50,17 +55,45 @@ void sub_815D838(void) for (i = 0; i < 15; i++) { - const u8 * flags1 = gUnknown_8479D38[i].flags1; - const u8 * flags2 = gUnknown_8479D38[i].flags2; - const u8 * flags3 = gUnknown_8479D38[i].flags3; + const u8 * flags1 = gUnknown_8479D34[i].flags1; + const u8 * flags2 = gUnknown_8479D34[i].flags2; + const u8 * flags3 = gUnknown_8479D34[i].flags3; for (j = 0; j < 8; j++) { if (flags1[j] != 0xFF) - FlagSet(1000 + flags1[j]); + FlagSet(FLAG_TRAINER_TOWER_START + flags1[j]); if (flags2[j] != 0xFF) - FlagSet(1000 + flags2[j]); + FlagSet(FLAG_TRAINER_TOWER_START + flags2[j]); if (flags3[j] != 0xFF) - FlagSet(1000 + flags3[j]); + FlagSet(FLAG_TRAINER_TOWER_START + flags3[j]); } } } + +void sub_815D8C8(void) +{ + u16 var = VarGet(VAR_0x4023); + if (var < 1500) { + VarSet(VAR_0x4023, var + 1); + } +} + +void sub_815D8F8(void) +{ + u8 i; + register u32 found_map asm("r4") = 0xFF; + for (i = 0; i < 15; i++) + { + if (gUnknown_8479D34[i].mapGroup == gSaveBlock1Ptr->location.mapGroup && gUnknown_8479D34[i].mapNum == gSaveBlock1Ptr->location.mapNum) + found_map = i; + } + + if (found_map == 0xFF) + return; + if (VarGet(VAR_0x4023) >= 1500) + { + VarSet(VAR_0x4023, 0); + sub_815D838(); + sub_815D96C(); + } +} -- cgit v1.2.3 From 5c794a1d3d104e70d1215724cbbff211df440585 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 2 Jan 2019 09:37:56 -0500 Subject: through sub_815DA3C --- src/trainer_tower.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 89 insertions(+), 2 deletions(-) (limited to 'src') 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]; +} -- cgit v1.2.3 From e98d46f43086ccaeaf666407f510a8fe4de78fe8 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 2 Jan 2019 10:19:27 -0500 Subject: sub_815DA54 --- src/trainer_tower.c | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 63 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c index f1526dfc0..1df4dddcd 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -1,4 +1,5 @@ #include "global.h" +#include "main.h" #include "constants/flags.h" #include "constants/vars.h" #include "malloc.h" @@ -18,17 +19,43 @@ struct UnkStruct_8479D34 u8 flags3[8]; }; +struct UnkSubstruct_203F458_000C_004 +{ + /* 0x004 */ u8 unk_000[11]; + /* 0x00F */ u8 unk_00B; + /* 0x010 */ u8 unk_00C; + /* 0x011 */ u8 unk_00D[13]; + /* 0x01A */ u16 unk_01A[6]; + /* 0x026 */ u16 unk_026[6]; + /* 0x032 */ u8 filler_032[0x116]; +}; // size: 328 + +struct UnkSubstruct_203F458_000C +{ + /* 0x000 */ u8 filler_000[2]; + /* 0x002 */ u8 unk_002; + /* 0x003 */ u8 unk_003; + /* 0x004 */ struct UnkSubstruct_203F458_000C_004 unk_004[3]; + /* 0x3DC */ u8 filler_3DC[4]; +}; + struct UnkStruct_203F458 { - /* 0x0000 */ u8 filler_0000[0x1F0C]; + /* 0x0000 */ u8 unk_0000; + /* 0x0001 */ u8 filler_0001[11]; + /* 0x000C */ struct UnkSubstruct_203F458_000C unk_000C[8]; }; struct UnkStruct_203F45C { /* 0x00 */ u8 unk_00[11]; - /* 0x0B */ u8 filler_0B[49]; + /* 0x0C */ u16 unk_0C[6]; + /* 0x18 */ u16 unk_18[6]; + /* 0x24 */ u16 unk_24[6]; + /* 0x30 */ u16 unk_30[6]; /* 0x3C */ u8 unk_3C; /* 0x3D */ u8 unk_3D; + /* 0x3E */ u8 unk_3E; }; EWRAM_DATA struct UnkStruct_203F458 * gUnknown_203F458 = NULL; @@ -184,3 +211,37 @@ u8 sub_815DA3C(void) { return gFacilityClassToPicIndex[gUnknown_203F45C->unk_3D]; } + +void sub_815DA54(void) +{ + u16 r10; + s32 r9; + + sub_815DC8C(); + gUnknown_203F45C = AllocZeroed(sizeof(*gUnknown_203F45C)); + r10 = VarGet(VAR_0x4001); + StringCopyN(gUnknown_203F45C->unk_00, gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_000, 11); + + for (r9 = 0; r9 < 6; r9++) + // r6 = r10 * 4 + // r12 = r10 * 328 + // r5 = (r10 + 1) * 328 + { + // r8 = *gUnknown_203F45C + // r4 = r9 * 2 + gUnknown_203F45C->unk_0C[r9] = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_01A[r9]; + gUnknown_203F45C->unk_18[r9] = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_026[r9]; + + if (gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_002 == 1) + { + gUnknown_203F45C->unk_24[r9] = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_01A[r9]; + gUnknown_203F45C->unk_30[r9] = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_026[r9]; + } + } + + gUnknown_203F45C->unk_3C = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_002; + gUnknown_203F45C->unk_3D = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_00B; + gUnknown_203F45C->unk_3E = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_00C; + SetVBlankCounter1Ptr(gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx]); + sub_815DD2C(); +} -- cgit v1.2.3 From 45ef28346890fe0beba1754fb81bbe58f6c8ae7a Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 2 Jan 2019 11:04:34 -0500 Subject: through sub_815DC40 --- src/trainer_tower.c | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c index 1df4dddcd..d9031635f 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -65,7 +65,9 @@ void sub_815D96C(void); void sub_815DC8C(void); // setup void sub_815DD2C(void); // teardown void sub_815DD44(void); +void sub_815DEFC(u16 * ecWords, u8 * dest); void sub_815DF54(void); +void sub_815E068(u8 battleType, u8 facilityClass); void sub_815E160(void); void sub_815E1C0(void); void sub_815E1F0(void); @@ -223,12 +225,7 @@ void sub_815DA54(void) StringCopyN(gUnknown_203F45C->unk_00, gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_000, 11); for (r9 = 0; r9 < 6; r9++) - // r6 = r10 * 4 - // r12 = r10 * 328 - // r5 = (r10 + 1) * 328 { - // r8 = *gUnknown_203F45C - // r4 = r9 * 2 gUnknown_203F45C->unk_0C[r9] = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_01A[r9]; gUnknown_203F45C->unk_18[r9] = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_026[r9]; @@ -245,3 +242,31 @@ void sub_815DA54(void) SetVBlankCounter1Ptr(gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx]); sub_815DD2C(); } + +void sub_815DBDC(void) +{ + Free(gUnknown_203F45C); + gUnknown_203F45C = NULL; +} + +void sub_815DBF4(u8 * dest, u8 opponentIdx) +// TTower_GetBeforeBattleMessage? +{ + VarSet(VAR_0x4003, opponentIdx); + sub_815E068(gUnknown_203F45C->unk_3C, gUnknown_203F45C->unk_3D); + if (opponentIdx == 0) + sub_815DEFC(gUnknown_203F45C->unk_0C, dest); + else + sub_815DEFC(gUnknown_203F45C->unk_24, dest); +} + +void sub_815DC40(u8 * dest, u8 opponentIdx) +// TTower_GetAfterBattleMessage? +{ + VarSet(VAR_0x4003, opponentIdx); + sub_815E068(gUnknown_203F45C->unk_3C, gUnknown_203F45C->unk_3D); + if (opponentIdx == 0) + sub_815DEFC(gUnknown_203F45C->unk_18, dest); + else + sub_815DEFC(gUnknown_203F45C->unk_30, dest); +} -- cgit v1.2.3 From 90faed914327f40382415d93fdd02919bd3b032c Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 2 Jan 2019 11:51:22 -0500 Subject: nonmatching sub_815DC8C --- src/trainer_tower.c | 145 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 134 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c index d9031635f..16f565f10 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -4,6 +4,7 @@ #include "constants/vars.h" #include "malloc.h" #include "save.h" +#include "util.h" #include "string_util.h" #include "event_data.h" #include "random.h" @@ -39,11 +40,23 @@ struct UnkSubstruct_203F458_000C /* 0x3DC */ u8 filler_3DC[4]; }; +struct Unk_203F458_Header +{ + u8 unk0; + u8 unk1; + u32 unk4; +}; + +struct UnkStruct_203F458_SaveBlock +{ + struct Unk_203F458_Header unk_0000; + struct UnkSubstruct_203F458_000C unk_0008[8]; +}; + struct UnkStruct_203F458 { /* 0x0000 */ u8 unk_0000; - /* 0x0001 */ u8 filler_0001[11]; - /* 0x000C */ struct UnkSubstruct_203F458_000C unk_000C[8]; + /* 0x0004 */ struct UnkStruct_203F458_SaveBlock unk_0004; }; struct UnkStruct_203F45C @@ -87,9 +100,12 @@ void sub_815E8CC(void); void sub_815E908(void); void sub_815E948(void); void sub_815E9C8(void); +void sub_815EC0C(void); extern const struct UnkStruct_8479D34 gUnknown_8479D34[15]; extern void (*const gUnknown_847A230[])(void); +extern const struct Unk_203F458_Header gUnknown_84827AC; +extern const struct UnkSubstruct_203F458_000C *const gUnknown_84827B4[][8]; bool32 sub_815D7BC(void * dest, void * buffer) { @@ -222,23 +238,23 @@ void sub_815DA54(void) sub_815DC8C(); gUnknown_203F45C = AllocZeroed(sizeof(*gUnknown_203F45C)); r10 = VarGet(VAR_0x4001); - StringCopyN(gUnknown_203F45C->unk_00, gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_000, 11); + StringCopyN(gUnknown_203F45C->unk_00, gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_000, 11); for (r9 = 0; r9 < 6; r9++) { - gUnknown_203F45C->unk_0C[r9] = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_01A[r9]; - gUnknown_203F45C->unk_18[r9] = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_026[r9]; + gUnknown_203F45C->unk_0C[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_01A[r9]; + gUnknown_203F45C->unk_18[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_026[r9]; - if (gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_002 == 1) + if (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002 == 1) { - gUnknown_203F45C->unk_24[r9] = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_01A[r9]; - gUnknown_203F45C->unk_30[r9] = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_026[r9]; + gUnknown_203F45C->unk_24[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_01A[r9]; + gUnknown_203F45C->unk_30[r9] = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10 + 1].unk_026[r9]; } } - gUnknown_203F45C->unk_3C = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_002; - gUnknown_203F45C->unk_3D = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_00B; - gUnknown_203F45C->unk_3E = gUnknown_203F458->unk_000C[gUnknown_203F458->unk_0000].unk_004[r10].unk_00C; + gUnknown_203F45C->unk_3C = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002; + gUnknown_203F45C->unk_3D = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_00B; + gUnknown_203F45C->unk_3E = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r10].unk_00C; SetVBlankCounter1Ptr(gSaveBlock1Ptr->unkArray[gSaveBlock1Ptr->unkArrayIdx]); sub_815DD2C(); } @@ -270,3 +286,110 @@ void sub_815DC40(u8 * dest, u8 opponentIdx) else sub_815DEFC(gUnknown_203F45C->unk_30, dest); } + +#ifdef NONMATCHING +void sub_815DC8C(void) // fakematching +{ + u32 whichTimer = gSaveBlock1Ptr->unkArrayIdx; + s32 r4; + const struct UnkSubstruct_203F458_000C *const * r7; + + gUnknown_203F458 = AllocZeroed(sizeof(*gUnknown_203F458)); + gUnknown_203F458->unk_0000 = gMapHeader.mapDataId - 0x2A; + if (sub_815D834() == TRUE) + sub_815D80C(&gUnknown_203F458->unk_0004); + else + { + struct UnkStruct_203F458 * r0_ = gUnknown_203F458; + const struct Unk_203F458_Header * r1 = &gUnknown_84827AC; +// *r0_ = *r1; + memcpy(&r0_->unk_0004.unk_0000, r1, sizeof(struct Unk_203F458_Header)); +// gUnknown_203F458->unk_0004.unk_0000 = gUnknown_84827AC; + r7 = gUnknown_84827B4[whichTimer]; + for (r4 = 0; r4 < 8; r4++) + { + void * r0 = gUnknown_203F458; + r0 = r4 * sizeof(struct UnkSubstruct_203F458_000C) + r0; + r0 += offsetof(struct UnkStruct_203F458, unk_0004.unk_0008); + memcpy(r0, r7[r4], sizeof(struct UnkSubstruct_203F458_000C)); +// r0[r4] = *r7[r4]; + } + gUnknown_203F458->unk_0004.unk_0000.unk4 = CalcByteArraySum((void *)gUnknown_203F458->unk_0004.unk_0008, sizeof(gUnknown_203F458->unk_0004.unk_0008)); + sub_815EC0C(); + } +} +#else +NAKED +void sub_815DC8C(void) +{ + asm_unified("\tpush {r4-r7,lr}\n" + "\tldr r0, _0815DCBC @ =gSaveBlock1Ptr\n" + "\tldr r0, [r0]\n" + "\tldr r1, _0815DCC0 @ =0x00003d34\n" + "\tadds r0, r1\n" + "\tldr r5, [r0]\n" + "\tldr r4, _0815DCC4 @ =gUnknown_203F458\n" + "\tldr r0, _0815DCC8 @ =0x00001f0c\n" + "\tbl AllocZeroed\n" + "\tstr r0, [r4]\n" + "\tldr r1, _0815DCCC @ =gMapHeader\n" + "\tldrb r1, [r1, 0x12]\n" + "\tsubs r1, 0x2A\n" + "\tstrb r1, [r0]\n" + "\tbl sub_815D834\n" + "\tcmp r0, 0x1\n" + "\tbne _0815DCD0\n" + "\tldr r0, [r4]\n" + "\tadds r0, 0x4\n" + "\tbl sub_815D80C\n" + "\tb _0815DD18\n" + "\t.align 2, 0\n" + "_0815DCBC: .4byte gSaveBlock1Ptr\n" + "_0815DCC0: .4byte 0x00003d34\n" + "_0815DCC4: .4byte gUnknown_203F458\n" + "_0815DCC8: .4byte 0x00001f0c\n" + "_0815DCCC: .4byte gMapHeader\n" + "_0815DCD0:\n" + "\tldr r0, [r4]\n" + "\tldr r1, _0815DD20 @ =gUnknown_84827AC\n" + "\tadds r0, 0x4\n" + "\tmovs r2, 0x8\n" + "\tbl memcpy\n" + "\tlsls r1, r5, 5\n" + "\tldr r0, _0815DD24 @ =gUnknown_84827B4\n" + "\tadds r7, r1, r0\n" + "\tmovs r5, 0\n" + "\tmovs r4, 0x7\n" + "_0815DCE6:\n" + "\tldr r6, _0815DD28 @ =gUnknown_203F458\n" + "\tldr r0, [r6]\n" + "\tadds r0, r5, r0\n" + "\tadds r0, 0xC\n" + "\tldm r7!, {r1}\n" + "\tmovs r2, 0xF8\n" + "\tlsls r2, 2\n" + "\tbl memcpy\n" + "\tmovs r0, 0xF8\n" + "\tlsls r0, 2\n" + "\tadds r5, r0\n" + "\tsubs r4, 0x1\n" + "\tcmp r4, 0\n" + "\tbge _0815DCE6\n" + "\tldr r0, [r6]\n" + "\tadds r0, 0xC\n" + "\tmovs r1, 0xF8\n" + "\tlsls r1, 5\n" + "\tbl CalcByteArraySum\n" + "\tldr r1, [r6]\n" + "\tstr r0, [r1, 0x8]\n" + "\tbl sub_815EC0C\n" + "_0815DD18:\n" + "\tpop {r4-r7}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0815DD20: .4byte gUnknown_84827AC\n" + "_0815DD24: .4byte gUnknown_84827B4\n" + "_0815DD28: .4byte gUnknown_203F458"); +} +#endif // NONMATCHING -- cgit v1.2.3 From fa05cd911c5c476db777a0f3433b6ee31a92e4fb Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 2 Jan 2019 14:31:37 -0500 Subject: Dump some pointers and move descriptions --- src/trainer_tower.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c index 16f565f10..c3e2ad17e 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -393,3 +393,9 @@ void sub_815DC8C(void) "_0815DD28: .4byte gUnknown_203F458"); } #endif // NONMATCHING + +void sub_815DD2C(void) +{ + Free(gUnknown_203F458); + gUnknown_203F458 = NULL; +} -- cgit v1.2.3 From 9dd48895b7587b10130f73924c64db44beda7147 Mon Sep 17 00:00:00 2001 From: scnorton Date: Wed, 2 Jan 2019 17:10:26 -0500 Subject: sub_815DD44; some more decomp --- src/trainer_tower.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c index c3e2ad17e..8e94df382 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -9,6 +9,7 @@ #include "event_data.h" #include "random.h" #include "cereader_tool.h" +#include "overworld.h" struct UnkStruct_8479D34 { @@ -78,6 +79,7 @@ void sub_815D96C(void); void sub_815DC8C(void); // setup void sub_815DD2C(void); // teardown void sub_815DD44(void); +void sub_815DDB0(void); void sub_815DEFC(u16 * ecWords, u8 * dest); void sub_815DF54(void); void sub_815E068(u8 battleType, u8 facilityClass); @@ -106,6 +108,7 @@ extern const struct UnkStruct_8479D34 gUnknown_8479D34[15]; 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]; bool32 sub_815D7BC(void * dest, void * buffer) { @@ -399,3 +402,18 @@ void sub_815DD2C(void) Free(gUnknown_203F458); gUnknown_203F458 = NULL; } + +void sub_815DD44(void) +{ + if (gMapHeader.mapDataId - 0x129 > gUnknown_203F458->unk_0004.unk_0000.unk0) + { + gSpecialVar_Result = 3; + sub_8055D40(0x132); + } + else + { + gSpecialVar_Result = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002; + sub_8055D40(gUnknown_847A284[gUnknown_203F458->unk_0000][gSpecialVar_Result]); + sub_815DDB0(); + } +} -- cgit v1.2.3 From 50c3065ec0ec1398e37b3e3c9677645402138469 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Wed, 2 Jan 2019 19:54:52 -0500 Subject: through sub_815DEFC --- src/trainer_tower.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c index 8e94df382..e47d08564 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -9,6 +9,8 @@ #include "event_data.h" #include "random.h" #include "cereader_tool.h" +#include "easy_chat.h" +#include "text.h" #include "overworld.h" struct UnkStruct_8479D34 @@ -72,6 +74,22 @@ struct UnkStruct_203F45C /* 0x3E */ u8 unk_3E; }; +struct UnkStruct_8479ED8 +{ + u8 unk0; + u8 unk1; + bool8 unk2; +}; + +struct UnkStruct_847A024 +{ + u8 unk0; + u8 unk1; + u8 unk2; + bool8 unk3; + bool8 unk4; +}; + EWRAM_DATA struct UnkStruct_203F458 * gUnknown_203F458 = NULL; EWRAM_DATA struct UnkStruct_203F45C * gUnknown_203F45C = NULL; @@ -109,6 +127,8 @@ 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 struct UnkStruct_8479ED8 gUnknown_8479ED8[83]; +extern const struct UnkStruct_847A024 gUnknown_847A024[10]; bool32 sub_815D7BC(void * dest, void * buffer) { @@ -417,3 +437,87 @@ void sub_815DD44(void) sub_815DDB0(); } } + +void sub_815DDB0(void) +{ + s32 r3, r4; + u8 r1, r2, r4_; + switch (gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002) + { + case 0: + r2 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_00B; + for (r3 = 0; r3 < NELEMS(gUnknown_8479ED8); r3++) + { + if (gUnknown_8479ED8[r3].unk1 == r2) + break; + } + if (r3 != NELEMS(gUnknown_8479ED8)) + r1 = gUnknown_8479ED8[r3].unk0; + else + r1 = 18; + VarSet(VAR_0x4011, r1); + break; + case 1: + r2 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[0].unk_00B; + for (r3 = 0; r3 < NELEMS(gUnknown_847A024); r3++) + { + if (gUnknown_847A024[r3].unk2 == r2) + break; + } + if (r3 != NELEMS(gUnknown_847A024)) + { + r1 = gUnknown_847A024[r3].unk0; + r4_ = gUnknown_847A024[r3].unk1; + } + else + { + r1 = 18; + r4_ = 18; + } + VarSet(VAR_0x4010, r1); + VarSet(VAR_0x4013, r4_); + break; + case 2: + for (r4 = 0; r4 < 3; r4++) + { + r2 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_00B; + for (r3 = 0; r3 < NELEMS(gUnknown_8479ED8); r3++) + { + if (gUnknown_8479ED8[r3].unk1 == r2) + break; + } + if (r3 != NELEMS(gUnknown_8479ED8)) + r1 = gUnknown_8479ED8[r3].unk0; + else + r1 = 18; + switch (r4) + { + case 0: + VarSet(VAR_0x4012, r1); + break; + case 1: + VarSet(VAR_0x4010, r1); + break; + case 2: + VarSet(VAR_0x4011, r1); + break; + } + } + } +} + +void sub_815DEFC(u16 * ecWords, u8 * dest) +{ + s32 r1; + ConvertEasyChatWordsToString(dest, ecWords, 3, 2); + if ((unsigned)GetStringWidth(2, dest, -1) > 196) + { + ConvertEasyChatWordsToString(dest, ecWords, 2, 3); + r1 = 0; + while (dest[r1++] != CHAR_NEWLINE) + ; + while (dest[r1] != CHAR_NEWLINE) + r1++; + dest[r1] = CHAR_PROMPT_SCROLL; + } +} -- cgit v1.2.3 From 3e4a7c8eddf76a3532762d7d36f03bf15c1e069a Mon Sep 17 00:00:00 2001 From: scnorton Date: Thu, 3 Jan 2019 16:13:18 -0500 Subject: Rework UnkSubstruct_203F458_000C_004 structure --- src/trainer_tower.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c index e47d08564..b94358185 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -25,13 +25,15 @@ struct UnkStruct_8479D34 struct UnkSubstruct_203F458_000C_004 { - /* 0x004 */ u8 unk_000[11]; - /* 0x00F */ u8 unk_00B; - /* 0x010 */ u8 unk_00C; - /* 0x011 */ u8 unk_00D[13]; + /* 0x000 */ u8 unk_000[11]; + /* 0x00B */ u8 unk_00B; + /* 0x00C */ u8 unk_00C; + /* 0x00D */ u8 unk_00D; + /* 0x00E */ u16 unk_00E[6]; /* 0x01A */ u16 unk_01A[6]; /* 0x026 */ u16 unk_026[6]; - /* 0x032 */ u8 filler_032[0x116]; + /* 0x032 */ u16 unk_032[6]; + /* 0x040 */ struct BattleTowerPokemon unk_040[PARTY_SIZE]; }; // size: 328 struct UnkSubstruct_203F458_000C -- cgit v1.2.3 From f016f6893ee41b92ce8101c9204b29de5a37a818 Mon Sep 17 00:00:00 2001 From: PikalaxALT Date: Thu, 3 Jan 2019 20:06:46 -0500 Subject: dummy tower trainer macros; nonmatching sub_815DF54 --- src/trainer_tower.c | 169 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) (limited to 'src') diff --git a/src/trainer_tower.c b/src/trainer_tower.c index b94358185..91132c07b 100644 --- a/src/trainer_tower.c +++ b/src/trainer_tower.c @@ -523,3 +523,172 @@ void sub_815DEFC(u16 * ecWords, u8 * dest) dest[r1] = CHAR_PROMPT_SCROLL; } } + +#ifdef NONMATCHING +void sub_815DF54(void) +{ + u16 r4 = gSpecialVar_0x8006; + u8 r1; + u8 r5 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_002; + // HOW DO I MATCH THIS CONTROL FLOW?!?! + r1 = gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r5 == 1 ? 0 : r4].unk_00B; + switch (gSpecialVar_0x8005) + { + case 2: + sub_815E068(r5, r1); + sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_00E, gStringVar4); + break; + case 3: + sub_815E068(r5, r1); + sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_01A, gStringVar4); + break; + case 4: + sub_815E068(r5, r1); + sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_026, gStringVar4); + break; + case 5: + sub_815DEFC(gUnknown_203F458->unk_0004.unk_0008[gUnknown_203F458->unk_0000].unk_004[r4].unk_032, gStringVar4); + break; + } +} +#else +NAKED +void sub_815DF54(void) +{ + asm_unified("\tpush {r4,r5,lr}\n" + "\tldr r0, _0815DF90 @ =gSpecialVar_0x8006\n" + "\tldrh r4, [r0]\n" + "\tldr r2, _0815DF94 @ =gUnknown_203F458\n" + "\tldr r3, [r2]\n" + "\tldrb r1, [r3]\n" + "\tlsls r0, r1, 5\n" + "\tsubs r0, r1\n" + "\tlsls r1, r0, 5\n" + "\tadds r0, r3, r1\n" + "\tldrb r5, [r0, 0xE]\n" + "\tcmp r5, 0x1\n" + "\tbeq _0815DF7C\n" + "\tlsls r0, r4, 2\n" + "\tadds r0, r4\n" + "\tlsls r0, 3\n" + "\tadds r0, r4\n" + "\tlsls r0, 3\n" + "\tadds r0, r1\n" + "\tadds r0, r3, r0\n" + "_0815DF7C:\n" + "\tldrb r1, [r0, 0x1B]\n" + "\tldr r0, _0815DF98 @ =gSpecialVar_0x8005\n" + "\tldrh r0, [r0]\n" + "\tcmp r0, 0x3\n" + "\tbeq _0815DFD4\n" + "\tcmp r0, 0x3\n" + "\tbgt _0815DF9C\n" + "\tcmp r0, 0x2\n" + "\tbeq _0815DFA6\n" + "\tb _0815E05C\n" + "\t.align 2, 0\n" + "_0815DF90: .4byte gSpecialVar_0x8006\n" + "_0815DF94: .4byte gUnknown_203F458\n" + "_0815DF98: .4byte gSpecialVar_0x8005\n" + "_0815DF9C:\n" + "\tcmp r0, 0x4\n" + "\tbeq _0815E000\n" + "\tcmp r0, 0x5\n" + "\tbeq _0815E038\n" + "\tb _0815E05C\n" + "_0815DFA6:\n" + "\tadds r0, r5, 0\n" + "\tbl sub_815E068\n" + "\tldr r0, _0815DFD0 @ =gUnknown_203F458\n" + "\tldr r0, [r0]\n" + "\tldrb r2, [r0]\n" + "\tlsls r1, r2, 5\n" + "\tsubs r1, r2\n" + "\tlsls r1, 5\n" + "\tadds r1, 0xC\n" + "\tadds r0, r1\n" + "\tlsls r1, r4, 2\n" + "\tadds r1, r4\n" + "\tlsls r1, 3\n" + "\tadds r1, r4\n" + "\tlsls r1, 3\n" + "\tadds r1, 0x4\n" + "\tadds r0, r1\n" + "\tadds r0, 0xE\n" + "\tb _0815E026\n" + "\t.align 2, 0\n" + "_0815DFD0: .4byte gUnknown_203F458\n" + "_0815DFD4:\n" + "\tadds r0, r5, 0\n" + "\tbl sub_815E068\n" + "\tldr r0, _0815DFFC @ =gUnknown_203F458\n" + "\tldr r0, [r0]\n" + "\tldrb r2, [r0]\n" + "\tlsls r1, r2, 5\n" + "\tsubs r1, r2\n" + "\tlsls r1, 5\n" + "\tadds r1, 0xC\n" + "\tadds r0, r1\n" + "\tlsls r1, r4, 2\n" + "\tadds r1, r4\n" + "\tlsls r1, 3\n" + "\tadds r1, r4\n" + "\tlsls r1, 3\n" + "\tadds r1, 0x4\n" + "\tadds r0, r1\n" + "\tadds r0, 0x1A\n" + "\tb _0815E026\n" + "\t.align 2, 0\n" + "_0815DFFC: .4byte gUnknown_203F458\n" + "_0815E000:\n" + "\tadds r0, r5, 0\n" + "\tbl sub_815E068\n" + "\tldr r0, _0815E030 @ =gUnknown_203F458\n" + "\tldr r0, [r0]\n" + "\tldrb r2, [r0]\n" + "\tlsls r1, r2, 5\n" + "\tsubs r1, r2\n" + "\tlsls r1, 5\n" + "\tadds r1, 0xC\n" + "\tadds r0, r1\n" + "\tlsls r1, r4, 2\n" + "\tadds r1, r4\n" + "\tlsls r1, 3\n" + "\tadds r1, r4\n" + "\tlsls r1, 3\n" + "\tadds r1, 0x4\n" + "\tadds r0, r1\n" + "\tadds r0, 0x26\n" + "_0815E026:\n" + "\tldr r1, _0815E034 @ =gStringVar4\n" + "\tbl sub_815DEFC\n" + "\tb _0815E05C\n" + "\t.align 2, 0\n" + "_0815E030: .4byte gUnknown_203F458\n" + "_0815E034: .4byte gStringVar4\n" + "_0815E038:\n" + "\tldr r0, [r2]\n" + "\tldrb r2, [r0]\n" + "\tlsls r1, r2, 5\n" + "\tsubs r1, r2\n" + "\tlsls r1, 5\n" + "\tadds r1, 0xC\n" + "\tadds r0, r1\n" + "\tlsls r1, r4, 2\n" + "\tadds r1, r4\n" + "\tlsls r1, 3\n" + "\tadds r1, r4\n" + "\tlsls r1, 3\n" + "\tadds r1, 0x4\n" + "\tadds r0, r1\n" + "\tadds r0, 0x32\n" + "\tldr r1, _0815E064 @ =gStringVar4\n" + "\tbl sub_815DEFC\n" + "_0815E05C:\n" + "\tpop {r4,r5}\n" + "\tpop {r0}\n" + "\tbx r0\n" + "\t.align 2, 0\n" + "_0815E064: .4byte gStringVar4"); +} +#endif // NONMATCHING -- cgit v1.2.3