diff options
| author | lilDavid <1337lilDavid@gmail.com> | 2022-08-16 02:43:09 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-08-16 09:43:09 +0200 |
| commit | 46a421f93368a20c9aee89abec4376f0319b1313 (patch) | |
| tree | 20cfeb1055d1743ddd3329045ea24674a58c8f35 /soh/src/code/code_800EC960.c | |
| parent | b7f9960a607f73b8b7cd0543c8e339460d4b7ee1 (diff) | |
Add window to customize specific controls (#1122)
Diffstat (limited to 'soh/src/code/code_800EC960.c')
| -rw-r--r-- | soh/src/code/code_800EC960.c | 292 |
1 files changed, 179 insertions, 113 deletions
diff --git a/soh/src/code/code_800EC960.c b/soh/src/code/code_800EC960.c index cab454b13..0689eae41 100644 --- a/soh/src/code/code_800EC960.c +++ b/soh/src/code/code_800EC960.c @@ -825,11 +825,11 @@ NatureAmbienceDataIO sNatureAmbienceDataIO[20] = { }; u32 sOcarinaAllowedBtnMask = (BTN_A | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT); -s32 sOcarinaABtnMap = BTN_A; -s32 sOcarinaCUPBtnMap = BTN_CUP; -s32 sOcarinaCDownBtnMap = BTN_CDOWN; -s32 sOcarinaCLeftBtnMap = BTN_CLEFT; -s32 sOcarinaCRightBtnMap = BTN_CRIGHT; +s32 sOcarinaD5BtnMap = BTN_CUP; +s32 sOcarinaB4BtnMap = BTN_CLEFT; +s32 sOcarinaA4BtnMap = BTN_CRIGHT; +s32 sOcarinaF4BtnMap = BTN_CDOWN; +s32 sOcarinaD4BtnMap = BTN_A; u8 sOcarinaInpEnabled = 0; s8 D_80130F10 = 0; // "OCA", ocarina active? u8 sCurOcarinaBtnVal = 0xFF; @@ -1013,9 +1013,9 @@ OcarinaNote sOcarinaSongs[OCARINA_SONG_MAX][20] = { OcarinaNote* sPlaybackSong = sOcarinaSongs[0]; u8 sFrogsSongNotes[14] = { - OCARINA_NOTE_A, OCARINA_NOTE_C_LEFT, OCARINA_NOTE_C_RIGHT, OCARINA_NOTE_C_DOWN, OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_RIGHT, OCARINA_NOTE_C_DOWN, OCARINA_NOTE_A, OCARINA_NOTE_C_DOWN, OCARINA_NOTE_A, - OCARINA_NOTE_C_DOWN, OCARINA_NOTE_C_RIGHT, OCARINA_NOTE_C_LEFT, OCARINA_NOTE_A, + OCARINA_NOTE_D4, OCARINA_NOTE_B4, OCARINA_NOTE_A4, OCARINA_NOTE_F4, OCARINA_NOTE_B4, + OCARINA_NOTE_A4, OCARINA_NOTE_F4, OCARINA_NOTE_D4, OCARINA_NOTE_F4, OCARINA_NOTE_D4, + OCARINA_NOTE_F4, OCARINA_NOTE_A4, OCARINA_NOTE_B4, OCARINA_NOTE_D4, }; u8* gFrogsSongPtr = sFrogsSongNotes; u8 sRecordingState = 0; @@ -1044,124 +1044,124 @@ OcarinaSongInfo gOcarinaSongNotes[OCARINA_SONG_MAX] = { // Minuet { 6, { - OCARINA_NOTE_A, - OCARINA_NOTE_C_UP, - OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_RIGHT, + OCARINA_NOTE_D4, + OCARINA_NOTE_D5, + OCARINA_NOTE_B4, + OCARINA_NOTE_A4, + OCARINA_NOTE_B4, + OCARINA_NOTE_A4, } }, // Bolero { 8, { - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_A, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_A, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_DOWN, + OCARINA_NOTE_F4, + OCARINA_NOTE_D4, + OCARINA_NOTE_F4, + OCARINA_NOTE_D4, + OCARINA_NOTE_A4, + OCARINA_NOTE_F4, + OCARINA_NOTE_A4, + OCARINA_NOTE_F4, } }, // Serenade { 5, { - OCARINA_NOTE_A, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_LEFT, + OCARINA_NOTE_D4, + OCARINA_NOTE_F4, + OCARINA_NOTE_A4, + OCARINA_NOTE_A4, + OCARINA_NOTE_B4, } }, // Requiem { 6, { - OCARINA_NOTE_A, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_A, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_A, + OCARINA_NOTE_D4, + OCARINA_NOTE_F4, + OCARINA_NOTE_D4, + OCARINA_NOTE_A4, + OCARINA_NOTE_F4, + OCARINA_NOTE_D4, } }, // Nocturne { 7, { - OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_A, - OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_DOWN, + OCARINA_NOTE_B4, + OCARINA_NOTE_A4, + OCARINA_NOTE_A4, + OCARINA_NOTE_D4, + OCARINA_NOTE_B4, + OCARINA_NOTE_A4, + OCARINA_NOTE_F4, } }, // Prelude { 6, { - OCARINA_NOTE_C_UP, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_UP, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_UP, + OCARINA_NOTE_D5, + OCARINA_NOTE_A4, + OCARINA_NOTE_D5, + OCARINA_NOTE_A4, + OCARINA_NOTE_B4, + OCARINA_NOTE_D5, } }, // Sarias { 6, { - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_LEFT, + OCARINA_NOTE_F4, + OCARINA_NOTE_A4, + OCARINA_NOTE_B4, + OCARINA_NOTE_F4, + OCARINA_NOTE_A4, + OCARINA_NOTE_B4, } }, // Epona { 6, { - OCARINA_NOTE_C_UP, - OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_UP, - OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_RIGHT, + OCARINA_NOTE_D5, + OCARINA_NOTE_B4, + OCARINA_NOTE_A4, + OCARINA_NOTE_D5, + OCARINA_NOTE_B4, + OCARINA_NOTE_A4, } }, // Lullaby { 6, { - OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_UP, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_LEFT, - OCARINA_NOTE_C_UP, - OCARINA_NOTE_C_RIGHT, + OCARINA_NOTE_B4, + OCARINA_NOTE_D5, + OCARINA_NOTE_A4, + OCARINA_NOTE_B4, + OCARINA_NOTE_D5, + OCARINA_NOTE_A4, } }, // Suns { 6, { - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_C_UP, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_C_UP, + OCARINA_NOTE_A4, + OCARINA_NOTE_F4, + OCARINA_NOTE_D5, + OCARINA_NOTE_A4, + OCARINA_NOTE_F4, + OCARINA_NOTE_D5, } }, // Song of Time { 6, { - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_A, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_C_RIGHT, - OCARINA_NOTE_A, - OCARINA_NOTE_C_DOWN, + OCARINA_NOTE_A4, + OCARINA_NOTE_D4, + OCARINA_NOTE_F4, + OCARINA_NOTE_A4, + OCARINA_NOTE_D4, + OCARINA_NOTE_F4, } }, // Storms { 6, { - OCARINA_NOTE_A, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_C_UP, - OCARINA_NOTE_A, - OCARINA_NOTE_C_DOWN, - OCARINA_NOTE_C_UP, + OCARINA_NOTE_D4, + OCARINA_NOTE_F4, + OCARINA_NOTE_D5, + OCARINA_NOTE_D4, + OCARINA_NOTE_F4, + OCARINA_NOTE_D5, } }, // Scarecrow { 8, { 0, 0, 0, 0, 0, 0, 0, 0 } }, @@ -1247,24 +1247,49 @@ void func_800F56A8(void); void Audio_PlayNatureAmbienceSequence(u8 natureAmbienceId); s32 Audio_SetGanonDistVol(u8 targetVol); -// Function originally not called, so repurposing for DPad input -void func_800EC960(u8 dpad) { - if (dpad) { - sOcarinaAllowedBtnMask = - (BTN_A | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT | BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT); - sOcarinaABtnMap = BTN_A; - sOcarinaCUPBtnMap = BTN_CUP | BTN_DUP; - sOcarinaCDownBtnMap = BTN_CDOWN | BTN_DDOWN; - sOcarinaCLeftBtnMap = BTN_CLEFT | BTN_DLEFT; - sOcarinaCRightBtnMap = BTN_CRIGHT | BTN_DRIGHT; +// Right stick as virtual C buttons +#define RSTICK_UP 0x100000 +#define RSTICK_DOWN 0x200000 +#define RSTICK_LEFT 0x400000 +#define RSTICK_RIGHT 0x800000 + +// Function originally not called, so repurposing for control mapping +void Audio_OcaUpdateBtnMap(bool customControls, bool dpad, bool rStick) { + if (customControls) { + sOcarinaD5BtnMap = CVar_GetS32("gOcarinaD5BtnMap", BTN_CUP); + sOcarinaB4BtnMap = CVar_GetS32("gOcarinaB4BtnMap", BTN_CLEFT); + sOcarinaA4BtnMap = CVar_GetS32("gOcarinaA4BtnMap", BTN_CRIGHT); + sOcarinaF4BtnMap = CVar_GetS32("gOcarinaF4BtnMap", BTN_CDOWN); + sOcarinaD4BtnMap = CVar_GetS32("gOcarinaD4BtnMap", BTN_A); } else { - sOcarinaAllowedBtnMask = (BTN_A | BTN_CUP | BTN_CDOWN | BTN_CLEFT | BTN_CRIGHT); - sOcarinaABtnMap = BTN_A; - sOcarinaCUPBtnMap = BTN_CUP; - sOcarinaCDownBtnMap = BTN_CDOWN; - sOcarinaCLeftBtnMap = BTN_CLEFT; - sOcarinaCRightBtnMap = BTN_CRIGHT; + sOcarinaD5BtnMap = BTN_CUP; + sOcarinaB4BtnMap = BTN_CLEFT; + sOcarinaA4BtnMap = BTN_CRIGHT; + sOcarinaF4BtnMap = BTN_CDOWN; + sOcarinaD4BtnMap = BTN_A; + } + + if (dpad) { + sOcarinaD5BtnMap |= BTN_DUP; + sOcarinaB4BtnMap |= BTN_DLEFT; + sOcarinaA4BtnMap |= BTN_DRIGHT; + sOcarinaF4BtnMap |= BTN_DDOWN; + } + + if (rStick) { + sOcarinaD5BtnMap |= RSTICK_UP; + sOcarinaB4BtnMap |= RSTICK_LEFT; + sOcarinaA4BtnMap |= RSTICK_RIGHT; + sOcarinaF4BtnMap |= RSTICK_DOWN; } + + sOcarinaAllowedBtnMask = ( + sOcarinaD5BtnMap | + sOcarinaB4BtnMap | + sOcarinaA4BtnMap | + sOcarinaF4BtnMap | + sOcarinaD4BtnMap + ); } void Audio_GetOcaInput(void) { @@ -1278,6 +1303,23 @@ void Audio_GetOcaInput(void) { sPrevOcarinaBtnPress = sp18; sCurOcaStick.x = input->rel.stick_x; sCurOcaStick.y = input->rel.stick_y; + + f32 rstick_x = input->cur.cam_x; + f32 rstick_y = input->cur.cam_y; + printf("%f %f\n", rstick_x, rstick_y); + const f32 sensitivity = 500; + if (rstick_x > sensitivity) { + sCurOcarinaBtnPress |= RSTICK_RIGHT; + } + if (rstick_x < -sensitivity) { + sCurOcarinaBtnPress |= RSTICK_LEFT; + } + if (rstick_y > sensitivity) { + sCurOcarinaBtnPress |= RSTICK_UP; + } + if (rstick_y < -sensitivity) { + sCurOcarinaBtnPress |= RSTICK_DOWN; + } } f32 Audio_OcaAdjStick(s8 inp) { @@ -1495,7 +1537,17 @@ void func_800ED200(void) { u8 j; u8 k; - if (CHECK_BTN_ANY(sCurOcarinaBtnPress, BTN_L) && CHECK_BTN_ANY(sCurOcarinaBtnPress, sOcarinaAllowedBtnMask)) { + u32 disableSongBtnMap; + if (CVar_GetS32("gCustomOcarinaControls", 0)) { + disableSongBtnMap = CVar_GetS32("gOcarinaDisableBtnMap", BTN_L); + } else { + disableSongBtnMap = BTN_L; + } + + if ( + CHECK_BTN_ANY(sCurOcarinaBtnPress, disableSongBtnMap) + && CHECK_BTN_ANY(sCurOcarinaBtnPress, sOcarinaAllowedBtnMask) + ) { func_800ECC04((u16)D_80130F3C); return; } @@ -1548,7 +1600,9 @@ void func_800ED200(void) { void func_800ED458(s32 arg0) { u32 phi_v1_2; - bool dpad = CVar_GetS32("gDpadOcarinaText", 0); + bool customControls = CVar_GetS32("gCustomOcarinaControls", 0); + bool dpad = CVar_GetS32("gDpadOcarina", 0); + bool rStick = CVar_GetS32("gRStickOcarina", 0); if (D_80130F3C != 0 && sOcarinaDropInputTimer != 0) { sOcarinaDropInputTimer--; @@ -1569,35 +1623,47 @@ void func_800ED458(s32 arg0) { D_8016BA18 &= phi_v1_2; } - func_800EC960(dpad); - if (D_8016BA18 & sOcarinaABtnMap) { - osSyncPrintf("Presss NA_KEY_D4 %08x\n", sOcarinaABtnMap); + Audio_OcaUpdateBtnMap(customControls, dpad, rStick); + if (D_8016BA18 & sOcarinaD4BtnMap) { + osSyncPrintf("Presss NA_KEY_D4 %08x\n", sOcarinaD4BtnMap); sCurOcarinaBtnVal = 2; sCurOcarinaBtnIdx = 0; - } else if (D_8016BA18 & sOcarinaCDownBtnMap) { - osSyncPrintf("Presss NA_KEY_F4 %08x\n", sOcarinaCDownBtnMap); + } else if (D_8016BA18 & sOcarinaF4BtnMap) { + osSyncPrintf("Presss NA_KEY_F4 %08x\n", sOcarinaF4BtnMap); sCurOcarinaBtnVal = 5; sCurOcarinaBtnIdx = 1; - } else if (D_8016BA18 & sOcarinaCRightBtnMap) { - osSyncPrintf("Presss NA_KEY_A4 %08x\n", sOcarinaCRightBtnMap); + } else if (D_8016BA18 & sOcarinaA4BtnMap) { + osSyncPrintf("Presss NA_KEY_A4 %08x\n", sOcarinaA4BtnMap); sCurOcarinaBtnVal = 9; sCurOcarinaBtnIdx = 2; - } else if (D_8016BA18 & sOcarinaCLeftBtnMap) { - osSyncPrintf("Presss NA_KEY_B4 %08x\n", sOcarinaCRightBtnMap); + } else if (D_8016BA18 & sOcarinaB4BtnMap) { + osSyncPrintf("Presss NA_KEY_B4 %08x\n", sOcarinaA4BtnMap); sCurOcarinaBtnVal = 0xB; sCurOcarinaBtnIdx = 3; - } else if (D_8016BA18 & sOcarinaCUPBtnMap) { - osSyncPrintf("Presss NA_KEY_D5 %08x\n", sOcarinaCUPBtnMap); + } else if (D_8016BA18 & sOcarinaD5BtnMap) { + osSyncPrintf("Presss NA_KEY_D5 %08x\n", sOcarinaD5BtnMap); sCurOcarinaBtnVal = 0xE; sCurOcarinaBtnIdx = 4; } - if (sCurOcarinaBtnVal != 0xFF && sCurOcarinaBtnPress & 0x10 && sRecordingState != 2) { + u32 noteSharpBtnMap; + if (customControls) { + noteSharpBtnMap = CVar_GetS32("gOcarinaSharpBtnMap", BTN_R); + } else { + noteSharpBtnMap = BTN_R; + } + if ((sCurOcarinaBtnVal != 0xFF) && (sCurOcarinaBtnPress & noteSharpBtnMap) && (sRecordingState != 2)) { sCurOcarinaBtnIdx += 0x80; sCurOcarinaBtnVal++; } - if ((sCurOcarinaBtnVal != 0xFF) && (sCurOcarinaBtnPress & 0x2000) && (sRecordingState != 2)) { + u32 noteFlatBtnMap; + if (customControls) { + noteFlatBtnMap = CVar_GetS32("gOcarinaFlatBtnMap", BTN_Z); + } else { + noteFlatBtnMap = BTN_Z; + } + if ((sCurOcarinaBtnVal != 0xFF) && (sCurOcarinaBtnPress & noteFlatBtnMap) && (sRecordingState != 2)) { sCurOcarinaBtnIdx += 0x40; sCurOcarinaBtnVal--; } |
