diff --git a/asm/non_matching/demoScreen/sub_080A2FD0.inc b/asm/non_matching/demoScreen/sub_080A2FD0.inc deleted file mode 100644 index e6c50bb3..00000000 --- a/asm/non_matching/demoScreen/sub_080A2FD0.inc +++ /dev/null @@ -1,111 +0,0 @@ - .syntax unified - push {r4, r5, lr} - ldr r0, _080A2FF4 @ =gFadeControl - ldrb r0, [r0] - cmp r0, #0 - bne _080A30A8 - movs r5, #0 - ldr r0, _080A2FF8 @ =gInput - ldrh r0, [r0] - cmp r0, #0x10 - beq _080A3020 - cmp r0, #0x10 - bgt _080A2FFC - cmp r0, #1 - beq _080A303C - cmp r0, #8 - beq _080A303C - b _080A3052 - .align 2, 0 -_080A2FF4: .4byte gFadeControl -_080A2FF8: .4byte gInput -_080A2FFC: - cmp r0, #0x40 - beq _080A3052 - cmp r0, #0x40 - bgt _080A3052 - cmp r0, #0x20 - bne _080A3052 - ldr r1, _080A301C @ =gMenu - ldrb r0, [r1] - cmp r0, #0 - bne _080A3052 - movs r5, #1 - rsbs r5, r5, #0 - adds r1, #0x20 - movs r0, #0xfc - b _080A302E - .align 2, 0 -_080A301C: .4byte gMenu -_080A3020: - ldr r1, _080A3038 @ =gMenu - ldrb r0, [r1] - cmp r0, #0 - bne _080A3052 - movs r5, #1 - adds r1, #0x20 - movs r0, #4 -_080A302E: - strb r0, [r1] - movs r0, #0x69 - bl SoundReq - b _080A3052 - .align 2, 0 -_080A3038: .4byte gMenu -_080A303C: - ldr r0, _080A3090 @ =gMenu - ldrb r2, [r0] - cmp r2, #0 - bne _080A3052 - ldr r1, _080A3094 @ =gMain - movs r0, #2 - strb r0, [r1, #3] - strb r2, [r1, #4] - movs r0, #0x6a - bl SoundReq -_080A3052: - movs r4, #0x80 - lsls r4, r4, #0x12 - ldrb r0, [r4, #4] - adds r1, r5, #3 - adds r0, r0, r1 - movs r1, #3 - bl __modsi3 - strb r0, [r4, #4] - ldr r5, _080A3090 @ =gMenu - movs r0, #0x10 - ldrsh r2, [r5, r0] - ldrb r1, [r4, #4] - movs r0, #0x68 - muls r0, r1, r0 - cmp r0, r2 - beq _080A3098 - adds r0, r5, #0 - adds r0, #0x20 - ldrb r0, [r0] - lsls r0, r0, #0x18 - asrs r0, r0, #0x18 - adds r0, r2, r0 - movs r1, #0x9c - lsls r1, r1, #1 - adds r0, r0, r1 - bl __modsi3 - strh r0, [r5, #0x10] - movs r0, #1 - b _080A309A - .align 2, 0 -_080A3090: .4byte gMenu -_080A3094: .4byte gMain -_080A3098: - movs r0, #0 -_080A309A: - strb r0, [r5] - movs r0, #0x80 - lsls r0, r0, #0x12 - ldrb r0, [r0, #4] - movs r1, #0 - bl sub_080A3198 -_080A30A8: - pop {r4, r5, pc} - .align 2, 0 - .syntax divided diff --git a/include/fileselect.h b/include/fileselect.h index 78855c73..8e75cbc0 100644 --- a/include/fileselect.h +++ b/include/fileselect.h @@ -15,7 +15,7 @@ typedef struct { /*0x10*/ s16 unk_0x10; /*0x12*/ u16 unk_0x12; /*0x14*/ u8 fillerB[0xC]; - /*0x20*/ u8 unk_0x20; + /*0x20*/ s8 unk_0x20; /*0x21*/ u8 fillerC[0xF]; } ChooseFileState; static_assert(sizeof(ChooseFileState) == 0x30); diff --git a/src/demo.c b/src/demo.c index 445294e6..fd8f2aaa 100644 --- a/src/demo.c +++ b/src/demo.c @@ -106,70 +106,53 @@ void sub_080A2F8C(void) { } } -// The condition on the left dpad is very convuluted for some reason (instead oj just an equality check). -// This causes the entire function heirarchy to change on a whim and I couldn't quite figure out -// the correct conditions/code to make it like the original function. -NONMATCH("asm/non_matching/demoScreen/sub_080A2FD0.inc", void sub_080A2FD0(void)) { - s32 tmp; - u32 tmp2; +void sub_080A2FD0(void) { u32 val; s32 tmp3; - u32 unk_0x0; - u32 tmp4; - s32 tmp5; - u32 keys; if (gFadeControl.active == 0) { val = 0; - keys = gInput.heldKeys; - switch (keys) { - case DPAD_RIGHT: { + switch (gInput.heldKeys) { + case DPAD_LEFT: + if (gChooseFileState.unk_0x0 == 0) { + val = -1; + gChooseFileState.unk_0x20 = -4; + SoundReq(SFX_TEXTBOX_CHOICE); + } + break; + case DPAD_RIGHT: if (gChooseFileState.unk_0x0 == 0) { val = 1; gChooseFileState.unk_0x20 = 4; SoundReq(SFX_TEXTBOX_CHOICE); } - } - case DPAD_LEFT: { - if (gChooseFileState.unk_0x0 == 0) { - val = -1; - gChooseFileState.unk_0x20 = 0xfc; - SoundReq(SFX_TEXTBOX_CHOICE); - } - } + break; case START_BUTTON: - case A_BUTTON: { + case A_BUTTON: if (gChooseFileState.unk_0x0 == 0) { - gMain.task = 2; - gMain.state = gChooseFileState.unk_0x0; + gMain.state = 2; + gMain.substate = gChooseFileState.unk_0x0; SoundReq(SFX_TEXTBOX_SELECT); } - } + break; + case DPAD_UP: + case DPAD_DOWN: + break; } - tmp = gSaveHeader->saveFileId; - tmp2 = val + 3; - tmp += tmp2; - gSaveHeader->saveFileId = tmp % 3; + gSaveHeader->saveFileId = (int)(gSaveHeader->saveFileId + 3 + val) % 3; tmp3 = gChooseFileState.unk_0x10; - tmp = gSaveHeader->saveFileId; - tmp *= 0x68; - - if (tmp != tmp3) { - tmp5 = gChooseFileState.unk_0x20; - tmp5 += tmp3; - gChooseFileState.unk_0x10 = (tmp5 + (0x9c << 1)) % (0x9c << 1); - unk_0x0 = 1; + if (gSaveHeader->saveFileId * 0x68 != tmp3) { + gChooseFileState.unk_0x10 = (tmp3 + gChooseFileState.unk_0x20 + 0x138) % 0x138; + gChooseFileState.unk_0x0 = 1; } else { - unk_0x0 = 0; + gChooseFileState.unk_0x0 = 0; } - gChooseFileState.unk_0x0 = unk_0x0; sub_080A3198(gSaveHeader->saveFileId, 0); } } -END_NONMATCH NONMATCH("asm/non_matching/demoScreen/sub_080A30AC.inc", void sub_080A30AC(void)) { u32 unk_0x10;