diff --git a/asm/non_matching/mainLoop.inc b/asm/non_matching/mainLoop.inc deleted file mode 100644 index 24e3f299..00000000 --- a/asm/non_matching/mainLoop.inc +++ /dev/null @@ -1,115 +0,0 @@ - .include "asm/macros.inc" - .include "constants/constants.inc" - - .syntax unified - - .text - - push {r4, r5, r6, lr} - bl sub_08055F70 - bl sub_080A3204 - bl sub_0805616C - bl sub_0807CE90 - bl sub_080560B8 - bl sub_08056208 - ldr r1, _08055EEC @ =gUnk_02000010 - movs r0, #0xc1 - strb r0, [r1, #4] - bl sub_0804FFE4 - ldr r1, _08055EF0 @ =0x040000D4 - movs r0, #0xa0 - lsls r0, r0, #0x13 - str r0, [r1] - ldr r0, _08055EF4 @ =gUnk_020176A0 - str r0, [r1, #4] - ldr r0, _08055EF8 @ =0x84000080 - str r0, [r1, #8] - ldr r0, [r1, #8] - movs r0, #1 - bl sub_0804FF84 - bl sub_08056418 - bl sub_080ADD30 - ldr r1, _08055EFC @ =gRand - ldr r0, _08055F00 @ =0x01234567 - str r0, [r1] - ldr r4, _08055F04 @ =gUnk_03001000 - adds r0, r4, #0 - movs r1, #0x10 - bl _DmaZero - movs r0, #0 - bl sub_08056010 - adds r6, r4, #0 -_08055EC8: - bl ReadKeyInput - bl sub_08055FF4 - cmp r0, #0 - beq _08055ED8 - bl sub_080560A8 -_08055ED8: - ldrb r0, [r6, #1] - ldr r1, _08055F04 @ =gUnk_03001000 - cmp r0, #0 - beq _08055F08 - cmp r0, #1 - bne _08055F08 - bl sub_08056260 - b _08055F64 - .align 2, 0 -_08055EEC: .4byte gUnk_02000010 -_08055EF0: .4byte 0x040000D4 -_08055EF4: .4byte gUnk_020176A0 -_08055EF8: .4byte 0x84000080 -_08055EFC: .4byte gRand -_08055F00: .4byte 0x01234567 -_08055F04: .4byte gUnk_03001000 -_08055F08: - ldrb r0, [r1, #8] - cmp r0, #0 - beq _08055F22 - ldr r4, _08055F34 @ =gUnk_03001000 - movs r5, #0xff -_08055F12: - bl VBlankIntrWait - ldrb r0, [r4, #8] - subs r0, #1 - strb r0, [r4, #8] - ands r0, r5 - cmp r0, #0 - bne _08055F12 -_08055F22: - ldr r1, _08055F34 @ =gUnk_03001000 - ldrb r0, [r1, #9] - cmp r0, #0 - beq _08055F44 - subs r0, #1 - strb r0, [r1, #9] - ldrb r4, [r1, #0xa] - b _08055F3C - .align 2, 0 -_08055F34: .4byte gUnk_03001000 -_08055F38: - bl VBlankIntrWait -_08055F3C: - adds r0, r4, #0 - subs r4, #1 - cmp r0, #0 - bgt _08055F38 -_08055F44: - ldrh r0, [r6, #0xc] - adds r0, #1 - strh r0, [r6, #0xc] - ldr r1, _08055F6C @ =gUnk_08100CBC - ldrb r0, [r6, #2] - lsls r0, r0, #2 - adds r0, r0, r1 - ldr r0, [r0] - bl _call_via_r0 - bl sub_08056458 - bl sub_08050154 - bl sub_080A3480 -_08055F64: - bl sub_08016E78 - b _08055EC8 - .align 2, 0 -_08055F6C: .4byte gUnk_08100CBC - .syntax divided \ No newline at end of file diff --git a/include/main.h b/include/main.h index 4cceb41e..c98a1e9a 100644 --- a/include/main.h +++ b/include/main.h @@ -17,13 +17,16 @@ typedef struct { // 0x03001000 typedef struct { u8 interruptFlag; u8 field_0x1; + u8 loadType; u8 funcIndex; - u8 field_0x3; u8 transition; u8 field_0x5; u8 muteAudio; - u8 field_0x8; + u8 field_0x7; u8 countdown; + u8 field_0x9; + u8 field_0xa; + u16 ticks; } Main; typedef struct { @@ -43,27 +46,25 @@ extern UI gUnk_02032EC0; -extern s32 sub_08055F70(); -extern s32 sub_080A3204(s32); -extern s32 sub_0807CE90(s32); -extern s32 sub_080560B8(s32); -extern void sub_08056208(s32); -extern void sub_0804FFE4(); -extern s32 sub_08056418(); -extern void sub_080ADD30(s32); +extern void sub_08055F70(void); +extern void sub_080A3204(void); +extern void sub_0807CE90(void); +extern void sub_080560B8(void); +extern void sub_08056208(void); +extern void sub_0804FFE4(void); +extern void sub_08056418(void); +extern void sub_080ADD30(void); -extern s32 sub_08056010(s32); -extern s32 sub_08016E78(s32); -extern s32 ReadKeyInput(); -extern s32 sub_08055FF4(u8); -extern void sub_080560A8(); -extern s32 sub_08056260(); +extern void sub_08056010(u32); +extern void sub_08016E78(void); +extern void ReadKeyInput(void); +extern u32 sub_08055FF4(void); +extern void sub_080560A8(void); +extern void sub_08056260(void); extern void VBlankIntrWait(); extern s32 _call_via_r0(s32); -extern s32 sub_08056458(s32); -extern s32 sub_08050154(s32); -extern s32 sub_080A3480(s32); +extern void sub_08056458(void); +extern void sub_08050154(void); +extern void sub_080A3480(void); -extern s32 gRand; -extern s32 gUnk_08100CBC; #endif \ No newline at end of file diff --git a/include/structures.h b/include/structures.h index 69e6e65a..f3ca87d5 100644 --- a/include/structures.h +++ b/include/structures.h @@ -25,6 +25,14 @@ typedef struct { #define gUnk_02000000 ((struct_02000000*)(0x2000000)) //extern struct_02000000 gUnk_02000000; +typedef struct { + u8 filler0[0x4]; + u8 field_0x4; + u8 field_0x5; +} struct_02000010; + +extern struct_02000010 gUnk_02000010; + typedef struct { /*0x000*/ u8 filler0[0x6]; /*0x006*/ u8 unk6; diff --git a/src/introSetTransition.c b/src/introSetTransition.c index 33f0e62c..ea42ecd9 100644 --- a/src/introSetTransition.c +++ b/src/introSetTransition.c @@ -18,17 +18,10 @@ typedef struct { extern struct_03000FD0 gUnk_03000FD0; -typedef struct { - u8 filler[5]; - u8 field_0x5; -} struct_02000010; - -extern struct_02000010 gUnk_02000010; - u32 IntroSetTransition(u32 transition) { gUnk_02032EC0.transitionType = transition; - gUnk_03001000.field_0x3 = 2; + gUnk_03001000.funcIndex = 2; _DmaZero((u32 *)&gMenu, 48); DoFade(7, 8); } @@ -36,7 +29,7 @@ u32 IntroSetTransition(u32 transition) void sub_080AD380() { sub_080AD90C(); - switch (gUnk_03001000.field_0x3) { + switch (gUnk_03001000.funcIndex) { case 0: sub_08056418(); _DmaZero(&gUnk_02032EC0, 0x3b4); @@ -50,7 +43,7 @@ void sub_080AD380() return; } sub_0801DA90(1); - gUnk_03001000.field_0x3 = 1; + gUnk_03001000.funcIndex = 1; break; } sub_080AD918(); @@ -112,7 +105,8 @@ void sub_080AD474(void) gMenu.transitionTimer = 0x1e; gMenu.field_0x4 = 7; EraseAllEntities(); - sub_080ADD30(sub_0801CFA8(0)); + sub_0801CFA8(0); + sub_080ADD30(); gUnk_02024490 = 1; sub_0801D7EC(2); if (((struct_02000000*)0x2000000)->gameLanguage == 0) { diff --git a/src/mainLoop.c b/src/mainLoop.c index 4e07b882..0d04e5a8 100644 --- a/src/mainLoop.c +++ b/src/mainLoop.c @@ -1,58 +1,17 @@ #include "global.h" +#include "functions.h" #include "main.h" +#include "random.h" -#if 0 - -typedef struct { - u8 interruptFlag; - u8 field_0x1; - u8 loadType; - u8 funcIndex; - u8 transition; - u16 field_0x5; - u8 muteAudio; - u8 field_0x8; - u8 countdown; - u8 field_0xa; - u8 field_0xb; - u16 ticks; - u8 field_0xe; - u8 field_0xf; -} MainStruct; - -extern void sub_08055F70(void); -extern void sub_080A3204(void); -extern void sub_0805616C(void); -extern void sub_0807CE90(void); -extern void sub_080560B8(void); -extern void sub_08056208(void); -extern void sub_0804FFE4(void); extern void sub_0804FF84(u32); -extern void sub_08056418(void); -extern void sub_080ADD30(void); extern void _DmaZero(void*, u32); -extern void sub_08056010(u32); -extern void ReadKeyInput(); -extern u32 sub_08055FF4(); -extern void sub_080560A8(void); -extern void sub_08056458(void); -extern void sub_08050154(void); -extern void sub_080A3480(void); -extern void sub_08016E78(void); -extern void sub_08056260(void); -extern u8 gUnk_02000014; extern u32 gUnk_020176A0; -extern u32 gRand; -extern MainStruct gUnk_03001000; -extern void (*gUnk_08100CBC[])(); +extern const void (*gUnk_08100CBC[])(); extern void VBlankInterruptWait(void); void MainLoop(void) { - bool32 codeInputted; - u8 cVar1; - u32 uVar2; - MainStruct *s; + int var0; sub_08055F70(); sub_080A3204(); @@ -60,49 +19,49 @@ void MainLoop(void) { sub_0807CE90(); sub_080560B8(); sub_08056208(); - gUnk_02000014 = 193; + gUnk_02000010.field_0x4 = 193; sub_0804FFE4(); DmaSet(3, 0x5000000U, &gUnk_020176A0, 0x84000080U); sub_0804FF84(1); sub_08056418(); sub_080ADD30(); gRand = 0x1234567; - s = &gUnk_03001000; - _DmaZero(s, 16); + _DmaZero(&gUnk_03001000, 16); sub_08056010(0); while (1) { ReadKeyInput(); - codeInputted = sub_08055FF4(); - if (codeInputted) { + if (sub_08055FF4()) { sub_080560A8(); } - if ((s->field_0x1 != 0) || (s->field_0x1 == 1)) { - sub_08056260(); - } else if (s->field_0x8 != 0) { - while (--s->field_0x8) { - VBlankInterruptWait(); + + switch (gUnk_03001000.field_0x1) { + case 1: + sub_08056260(); + break; + case 0: + default: + if (gUnk_03001000.countdown != 0) { + do { + VBlankIntrWait(); + } while (--gUnk_03001000.countdown); } - } - if (s->countdown != 0) { - s->countdown--; - uVar2 = s->field_0xa; - while (uVar2 > 0) { - VBlankIntrWait(); - uVar2--; + + if (gUnk_03001000.field_0x9 != 0) { + gUnk_03001000.field_0x9--; + var0 = gUnk_03001000.field_0xa; + while (var0-- > 0) { + VBlankIntrWait(); + } } - } - s->ticks++; - gUnk_08100CBC[s->loadType](); - sub_08056458(); - sub_08050154(); - sub_080A3480(); + + gUnk_03001000.ticks++; + gUnk_08100CBC[gUnk_03001000.loadType](); + sub_08056458(); + sub_08050154(); + sub_080A3480(); + break; } + sub_08016E78(); -} - -#endif - -NAKED -void MainLoop(void) { - asm(".include \"asm/non_matching/mainLoop.inc\""); + } }