diff --git a/asm/non_matching/subtask2/sub_080A62E0.inc b/asm/non_matching/subtask2/sub_080A62E0.inc deleted file mode 100644 index 1855ca71..00000000 --- a/asm/non_matching/subtask2/sub_080A62E0.inc +++ /dev/null @@ -1,81 +0,0 @@ - .syntax unified - push {r4, lr} - bl sub_080A51F4 - cmp r0, #0 - beq _080A6372 - ldr r0, _080A6310 @ =gMenu - ldrb r3, [r0, #3] - lsls r1, r3, #3 - ldr r0, _080A6314 @ =gUnk_08128DE8 - adds r1, r1, r0 - movs r4, #1 - rsbs r4, r4, #0 - ldr r0, _080A6318 @ =gInput - ldrh r2, [r0, #2] - cmp r2, #0x20 - beq _080A634E - cmp r2, #0x20 - bgt _080A631C - cmp r2, #1 - beq _080A6326 - cmp r2, #0x10 - beq _080A6354 - b _080A635A - .align 2, 0 -_080A6310: .4byte gMenu -_080A6314: .4byte gUnk_08128DE8 -_080A6318: .4byte gInput -_080A631C: - cmp r2, #0x40 - beq _080A6344 - cmp r2, #0x80 - beq _080A634A - b _080A635A -_080A6326: - ldr r0, _080A6340 @ =gSave - lsls r2, r3 - ldr r0, [r0, #0x40] - ands r0, r2 - cmp r0, #0 - beq _080A635A - movs r0, #0x6a - bl SoundReq - movs r0, #6 - bl sub_080A4E84 - b _080A635A - .align 2, 0 -_080A6340: .4byte gSave -_080A6344: - ldrb r0, [r1] - lsls r0, r0, #0x1b - b _080A6358 -_080A634A: - ldrh r0, [r1] - b _080A6356 -_080A634E: - ldrb r0, [r1, #2] - lsls r0, r0, #0x1b - b _080A6358 -_080A6354: - ldrh r0, [r1, #2] -_080A6356: - lsls r0, r0, #0x16 -_080A6358: - lsrs r4, r0, #0x1b -_080A635A: - cmp r4, #0 - blt _080A6368 - ldr r0, _080A6374 @ =gMenu - strb r4, [r0, #3] - movs r0, #0x69 - bl SoundReq -_080A6368: - ldr r0, _080A6374 @ =gMenu - ldrb r0, [r0, #3] - movs r1, #0 - bl sub_080A6FB4 -_080A6372: - pop {r4, pc} - .align 2, 0 -_080A6374: .4byte gMenu - .syntax divided diff --git a/src/subtask2.c b/src/subtask2.c index 6ce3cb28..8bae885e 100644 --- a/src/subtask2.c +++ b/src/subtask2.c @@ -108,10 +108,14 @@ typedef struct { extern const struct_gUnk_08128E94 gUnk_08128E94[]; typedef struct { - u8 unk0; - u8 unk1; - u8 unk2; - u8 unk3; + u8 unk00 : 5; + u8 unk05 : 5; + u8 unk10 : 6; +} PACKED gUnk_08128DE8_struct_2; + +typedef struct { + gUnk_08128DE8_struct_2 unk0; + gUnk_08128DE8_struct_2 unk2; u8 unk4; u8 unk5; u8 unk6; @@ -449,7 +453,45 @@ void sub_080A6290(void) { gMenu.menuType = 1; } -ASM_FUNC("asm/non_matching/subtask2/sub_080A62E0.inc", void sub_080A62E0()) +void sub_080A62E0(void) { + u32 uVar1; + int windcrest; + gUnk_08128DE8_struct* ptr; + + if (!sub_080A51F4()) { + return; + } + ptr = &gUnk_08128DE8[gMenu.field_0x3]; + windcrest = -1; + + switch (gInput.newKeys) { + case A_BUTTON: + if ((gSave.windcrests & (1 << gMenu.field_0x3)) != 0) { + SoundReq(SFX_TEXTBOX_SELECT); + sub_080A4E84(6); + windcrest = -1; + } + break; + case DPAD_UP: + windcrest = ptr->unk0.unk00; + break; + case DPAD_DOWN: + windcrest = ptr->unk0.unk05; + break; + case DPAD_LEFT: + windcrest = ptr->unk2.unk00; + break; + case DPAD_RIGHT: + windcrest = ptr->unk2.unk05; + break; + } + + if (-1 < windcrest) { + gMenu.field_0x3 = windcrest; + SoundReq(SFX_TEXTBOX_CHOICE); + } + sub_080A6FB4(gMenu.field_0x3, 0); +} void sub_080A6378(void) { u32 frameIndex;