diff options
author | scnorton <scnorton@biociphers.org> | 2019-01-02 11:51:22 -0500 |
---|---|---|
committer | scnorton <scnorton@biociphers.org> | 2019-01-02 11:51:22 -0500 |
commit | 90faed914327f40382415d93fdd02919bd3b032c (patch) | |
tree | 0f79238ebfdad68be5fe52b9487e1fa75c0bb3dd | |
parent | 45ef28346890fe0beba1754fb81bbe58f6c8ae7a (diff) |
nonmatching sub_815DC8C
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | asm/trainer_tower.s | 73 | ||||
-rw-r--r-- | data/data_8471F00.s | 5 | ||||
-rw-r--r-- | src/trainer_tower.c | 145 |
4 files changed, 140 insertions, 85 deletions
@@ -121,6 +121,8 @@ $(C_BUILDDIR)/m4a_4.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/isagbprn.o: CC1 := tools/agbcc/bin/old_agbcc $(C_BUILDDIR)/isagbprn.o: CFLAGS := -mthumb-interwork +$(C_BUILDDIR)/trainer_tower.o: CFLAGS += -ffreestanding + ifeq ($(NODEP),1) $(C_BUILDDIR)/%.o: c_dep := else diff --git a/asm/trainer_tower.s b/asm/trainer_tower.s index bbe0bc39e..8867d7066 100644 --- a/asm/trainer_tower.s +++ b/asm/trainer_tower.s @@ -5,79 +5,6 @@ .text - thumb_func_start sub_815DC8C -sub_815DC8C: @ 815DC8C - push {r4-r7,lr} - ldr r0, _0815DCBC @ =gSaveBlock1Ptr - ldr r0, [r0] - ldr r1, _0815DCC0 @ =0x00003d34 - adds r0, r1 - ldr r5, [r0] - ldr r4, _0815DCC4 @ =gUnknown_203F458 - ldr r0, _0815DCC8 @ =0x00001f0c - bl AllocZeroed - str r0, [r4] - ldr r1, _0815DCCC @ =gMapHeader - ldrb r1, [r1, 0x12] - subs r1, 0x2A - strb r1, [r0] - bl sub_815D834 - cmp r0, 0x1 - bne _0815DCD0 - ldr r0, [r4] - adds r0, 0x4 - bl sub_815D80C - b _0815DD18 - .align 2, 0 -_0815DCBC: .4byte gSaveBlock1Ptr -_0815DCC0: .4byte 0x00003d34 -_0815DCC4: .4byte gUnknown_203F458 -_0815DCC8: .4byte 0x00001f0c -_0815DCCC: .4byte gMapHeader -_0815DCD0: - ldr r0, [r4] - ldr r1, _0815DD20 @ =gUnknown_84827AC - adds r0, 0x4 - movs r2, 0x8 - bl memcpy - lsls r1, r5, 5 - ldr r0, _0815DD24 @ =gUnknown_84827B4 - adds r7, r1, r0 - movs r5, 0 - movs r4, 0x7 -_0815DCE6: - ldr r6, _0815DD28 @ =gUnknown_203F458 - ldr r0, [r6] - adds r0, r5, r0 - adds r0, 0xC - ldm r7!, {r1} - movs r2, 0xF8 - lsls r2, 2 - bl memcpy - movs r0, 0xF8 - lsls r0, 2 - adds r5, r0 - subs r4, 0x1 - cmp r4, 0 - bge _0815DCE6 - ldr r0, [r6] - adds r0, 0xC - movs r1, 0xF8 - lsls r1, 5 - bl CalcByteArraySum - ldr r1, [r6] - str r0, [r1, 0x8] - bl sub_815EC0C -_0815DD18: - pop {r4-r7} - pop {r0} - bx r0 - .align 2, 0 -_0815DD20: .4byte gUnknown_84827AC -_0815DD24: .4byte gUnknown_84827B4 -_0815DD28: .4byte gUnknown_203F458 - thumb_func_end sub_815DC8C - thumb_func_start sub_815DD2C sub_815DD2C: @ 815DD2C push {r4,lr} diff --git a/data/data_8471F00.s b/data/data_8471F00.s index 8d6e8dd93..4c0d805c3 100644 --- a/data/data_8471F00.s +++ b/data/data_8471F00.s @@ -354,8 +354,11 @@ gUnknown_847A890:: @ 847A890 // trainer_tower (again?) + .align 2 gUnknown_84827AC:: @ 84827AC - .incbin "baserom.gba", 0x4827AC, 0x8 + .byte 0x08, 0x01 + .align 2 + .4byte 0 gUnknown_84827B4:: @ 84827B4 .incbin "baserom.gba", 0x4827B4, 0x5F34 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 |