Added DPad support to shops (#139)

* Added DPad support to shops

* Wrap changes in CVar

* Remove unnesseccary const_cast

* Fixed transparent texture making framebuffers also transparent in D3D11. (#84)

This happened with the Mirror Shield in the inventory screen preview.

* Add save editor

* Added DPad support to shops

* Fixing rebase conflict

* Remove unnesseccary const_cast

* Added DPad support to file selection and pause screens (#124)

* Added DPad support to file selection and pause screens

* Wrap changes behind CVar

* Fix merge conflict for real

* Remove unnecessary const_cast

* Fixed transparent texture making framebuffers also transparent in D3D11. (#84)

This happened with the Mirror Shield in the inventory screen preview.

* Add save editor

* Added DPad support to file selection and pause screens

* Fixing rebase conflict

* Remove unnecessary const_cast

Co-authored-by: MaikelChan <maikelchan88@gmail.com>
Co-authored-by: rozlette <Rozelette@users.noreply.github.com>

* Added DPad support to shops

* Fixing rebase conflict again

* Allocate aligned heaps

* Formatting fixes

* Added DPad support to ocarina and text prompts (#137)

* Added DPad support to ocarina playing and text choice selection.

* Wrap changes in CVar

* Fix mapping not updating if CVar is changed in-game

* Remove unnecessary const_cast

* Fixed transparent texture making framebuffers also transparent in D3D11. (#84)

This happened with the Mirror Shield in the inventory screen preview.

* Add save editor

* Added DPad support to ocarina playing and text choice selection.

* Fixing rebase conflict

* Fix mapping not updating if CVar is changed in-game

* Remove unnecessary const_cast

* Added DPad support to file selection and pause screens (#124)

* Added DPad support to file selection and pause screens

* Wrap changes behind CVar

* Fix merge conflict for real

* Remove unnecessary const_cast

* Fixed transparent texture making framebuffers also transparent in D3D11. (#84)

This happened with the Mirror Shield in the inventory screen preview.

* Add save editor

* Added DPad support to file selection and pause screens

* Fixing rebase conflict

* Remove unnecessary const_cast

Co-authored-by: MaikelChan <maikelchan88@gmail.com>
Co-authored-by: rozlette <Rozelette@users.noreply.github.com>

* Added DPad support to ocarina playing and text choice selection.

* Fixing rebase conflict again

* Fix mapping not updating if CVar is changed in-game

Co-authored-by: MaikelChan <maikelchan88@gmail.com>
Co-authored-by: rozlette <Rozelette@users.noreply.github.com>

* Added DPad support to shops

* Fixing rebase conflict for the last time

* Totally Fixing rebase conflict again I promise

* This has to be the last time I fix this rebase conflict

Co-authored-by: MaikelChan <maikelchan88@gmail.com>
Co-authored-by: rozlette <Rozelette@users.noreply.github.com>
Co-authored-by: GaryOderNichts <12049776+GaryOderNichts@users.noreply.github.com>
This commit is contained in:
Josh Bodner 2022-04-12 18:38:08 -07:00 committed by GitHub
parent 03a5c7ed29
commit e164819339
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 33 additions and 15 deletions

View File

@ -95,6 +95,9 @@ namespace Game {
Settings.controller.dpad_ocarina_text = stob(Conf[ControllerSection]["dpad_ocarina_text"]); Settings.controller.dpad_ocarina_text = stob(Conf[ControllerSection]["dpad_ocarina_text"]);
CVar_SetS32("gDpadOcarinaText", Settings.controller.dpad_ocarina_text); CVar_SetS32("gDpadOcarinaText", Settings.controller.dpad_ocarina_text);
Settings.controller.dpad_shop = stob(Conf[ControllerSection]["dpad_shop"]);
CVar_SetS32("gDpadShop", Settings.controller.dpad_shop);
// Cheats // Cheats
Settings.cheats.debug_mode = stob(Conf[CheatSection]["debug_mode"]); Settings.cheats.debug_mode = stob(Conf[CheatSection]["debug_mode"]);
@ -157,6 +160,7 @@ namespace Game {
Conf[ControllerSection]["input_enabled"] = std::to_string(Settings.controller.input_enabled); Conf[ControllerSection]["input_enabled"] = std::to_string(Settings.controller.input_enabled);
Conf[ControllerSection]["dpad_pause_name"] = std::to_string(Settings.controller.dpad_pause_name); Conf[ControllerSection]["dpad_pause_name"] = std::to_string(Settings.controller.dpad_pause_name);
Conf[ControllerSection]["dpad_ocarina_text"] = std::to_string(Settings.controller.dpad_ocarina_text); Conf[ControllerSection]["dpad_ocarina_text"] = std::to_string(Settings.controller.dpad_ocarina_text);
Conf[ControllerSection]["dpad_shop"] = std::to_string(Settings.controller.dpad_shop);
// Cheats // Cheats
Conf[CheatSection]["debug_mode"] = std::to_string(Settings.cheats.debug_mode); Conf[CheatSection]["debug_mode"] = std::to_string(Settings.cheats.debug_mode);

View File

@ -36,6 +36,7 @@ struct SoHConfigType {
bool input_enabled = false; bool input_enabled = false;
bool dpad_pause_name = false; bool dpad_pause_name = false;
bool dpad_ocarina_text = false; bool dpad_ocarina_text = false;
bool dpad_shop = false;
} controller; } controller;
// Cheats // Cheats

View File

@ -365,6 +365,11 @@ namespace SohImGui {
needs_save = true; needs_save = true;
} }
if (ImGui::Checkbox("DPad Support for Browsing Shop Items", &Game::Settings.controller.dpad_shop)) {
CVar_SetS32("gDpadShop", Game::Settings.controller.dpad_shop);
needs_save = true;
}
ImGui::EndMenu(); ImGui::EndMenu();
} }

View File

@ -948,7 +948,9 @@ s32 EnOssan_FacingShopkeeperDialogResult(EnOssan* this, GlobalContext* globalCtx
} }
void EnOssan_State_FacingShopkeeper(EnOssan* this, GlobalContext* globalCtx, Player* player) { void EnOssan_State_FacingShopkeeper(EnOssan* this, GlobalContext* globalCtx, Player* player) {
Input* input = &globalCtx->state.input[0];
u8 nextIndex; u8 nextIndex;
bool dpad = CVar_GetS32("gDpadShop", 0);
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_CHOICE) && if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_CHOICE) &&
!EnOssan_TestEndInteraction(this, globalCtx, &globalCtx->state.input[0])) { !EnOssan_TestEndInteraction(this, globalCtx, &globalCtx->state.input[0])) {
@ -957,7 +959,7 @@ void EnOssan_State_FacingShopkeeper(EnOssan* this, GlobalContext* globalCtx, Pla
return; return;
} }
// Stick Left // Stick Left
if (this->stickAccumX < 0) { if ((this->stickAccumX < 0) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DLEFT))) {
nextIndex = EnOssan_SetCursorIndexFromNeutral(this, 4); nextIndex = EnOssan_SetCursorIndexFromNeutral(this, 4);
if (nextIndex != CURSOR_INVALID) { if (nextIndex != CURSOR_INVALID) {
this->cursorIndex = nextIndex; this->cursorIndex = nextIndex;
@ -966,7 +968,7 @@ void EnOssan_State_FacingShopkeeper(EnOssan* this, GlobalContext* globalCtx, Pla
this->stickLeftPrompt.isEnabled = false; this->stickLeftPrompt.isEnabled = false;
func_80078884(NA_SE_SY_CURSOR); func_80078884(NA_SE_SY_CURSOR);
} }
} else if (this->stickAccumX > 0) { } else if ((this->stickAccumX > 0) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DRIGHT))) {
nextIndex = EnOssan_SetCursorIndexFromNeutral(this, 0); nextIndex = EnOssan_SetCursorIndexFromNeutral(this, 0);
if (nextIndex != CURSOR_INVALID) { if (nextIndex != CURSOR_INVALID) {
this->cursorIndex = nextIndex; this->cursorIndex = nextIndex;
@ -1023,11 +1025,13 @@ void EnOssan_State_LookToRightShelf(EnOssan* this, GlobalContext* globalCtx, Pla
} }
} }
void EnOssan_CursorUpDown(EnOssan* this) { void EnOssan_CursorUpDown(EnOssan* this, GlobalContext* globalCtx) {
Input* input = &globalCtx->state.input[0];
u8 curTemp = this->cursorIndex; u8 curTemp = this->cursorIndex;
u8 curScanTemp; u8 curScanTemp;
bool dpad = CVar_GetS32("gDpadShop", 0);
if (this->stickAccumY < 0) { if ((this->stickAccumY < 0) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DDOWN))) {
curTemp &= 0xFE; curTemp &= 0xFE;
if (this->shelfSlots[curTemp] != NULL) { if (this->shelfSlots[curTemp] != NULL) {
this->cursorIndex = curTemp; this->cursorIndex = curTemp;
@ -1066,7 +1070,7 @@ void EnOssan_CursorUpDown(EnOssan* this) {
} }
} }
} }
} else if (this->stickAccumY > 0) { } else if ((this->stickAccumY > 0) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DUP))) {
curTemp |= 1; curTemp |= 1;
if (this->shelfSlots[curTemp] != NULL) { if (this->shelfSlots[curTemp] != NULL) {
this->cursorIndex = curTemp; this->cursorIndex = curTemp;
@ -1172,11 +1176,13 @@ s32 EnOssan_HasPlayerSelectedItem(GlobalContext* globalCtx, EnOssan* this, Input
} }
void EnOssan_State_BrowseLeftShelf(EnOssan* this, GlobalContext* globalCtx, Player* player) { void EnOssan_State_BrowseLeftShelf(EnOssan* this, GlobalContext* globalCtx, Player* player) {
Input* input = &globalCtx->state.input[0];
s32 a; s32 a;
s32 b; s32 b;
u8 prevIndex = this->cursorIndex; u8 prevIndex = this->cursorIndex;
s32 c; s32 c;
s32 d; s32 d;
bool dpad = CVar_GetS32("gDpadShop", 0);
if (!EnOssan_ReturnItemToShelf(this)) { if (!EnOssan_ReturnItemToShelf(this)) {
osSyncPrintf("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2152); osSyncPrintf("%s[%d]:" VT_FGCOL(GREEN) "ズーム中!!" VT_RST "\n", "../z_en_oB1.c", 2152);
@ -1193,7 +1199,7 @@ void EnOssan_State_BrowseLeftShelf(EnOssan* this, GlobalContext* globalCtx, Play
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) &&
!EnOssan_HasPlayerSelectedItem(globalCtx, this, &globalCtx->state.input[0])) { !EnOssan_HasPlayerSelectedItem(globalCtx, this, &globalCtx->state.input[0])) {
if (this->moveHorizontal) { if (this->moveHorizontal) {
if (this->stickAccumX > 0) { if ((this->stickAccumX > 0) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DRIGHT))) {
a = EnOssan_CursorRight(this, this->cursorIndex, 4); a = EnOssan_CursorRight(this, this->cursorIndex, 4);
if (a != CURSOR_INVALID) { if (a != CURSOR_INVALID) {
this->cursorIndex = a; this->cursorIndex = a;
@ -1201,14 +1207,14 @@ void EnOssan_State_BrowseLeftShelf(EnOssan* this, GlobalContext* globalCtx, Play
EnOssan_SetLookToShopkeeperFromShelf(globalCtx, this); EnOssan_SetLookToShopkeeperFromShelf(globalCtx, this);
return; return;
} }
} else if (this->stickAccumX < 0) { } else if ((this->stickAccumX < 0) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DLEFT))) {
b = EnOssan_CursorLeft(this, this->cursorIndex, 8); b = EnOssan_CursorLeft(this, this->cursorIndex, 8);
if (b != CURSOR_INVALID) { if (b != CURSOR_INVALID) {
this->cursorIndex = b; this->cursorIndex = b;
} }
} }
} else { } else {
if (this->stickAccumX > 0 && this->stickAccumX > 500) { if ((this->stickAccumX > 0 && this->stickAccumX > 500) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DRIGHT))) {
c = EnOssan_CursorRight(this, this->cursorIndex, 4); c = EnOssan_CursorRight(this, this->cursorIndex, 4);
if (c != CURSOR_INVALID) { if (c != CURSOR_INVALID) {
this->cursorIndex = c; this->cursorIndex = c;
@ -1216,14 +1222,14 @@ void EnOssan_State_BrowseLeftShelf(EnOssan* this, GlobalContext* globalCtx, Play
EnOssan_SetLookToShopkeeperFromShelf(globalCtx, this); EnOssan_SetLookToShopkeeperFromShelf(globalCtx, this);
return; return;
} }
} else if (this->stickAccumX < 0 && this->stickAccumX < -500) { } else if ((this->stickAccumX < 0 && this->stickAccumX < -500) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DLEFT))) {
d = EnOssan_CursorLeft(this, this->cursorIndex, 8); d = EnOssan_CursorLeft(this, this->cursorIndex, 8);
if (d != CURSOR_INVALID) { if (d != CURSOR_INVALID) {
this->cursorIndex = d; this->cursorIndex = d;
} }
} }
} }
EnOssan_CursorUpDown(this); EnOssan_CursorUpDown(this, globalCtx);
if (this->cursorIndex != prevIndex) { if (this->cursorIndex != prevIndex) {
Message_ContinueTextbox(globalCtx, this->shelfSlots[this->cursorIndex]->actor.textId); Message_ContinueTextbox(globalCtx, this->shelfSlots[this->cursorIndex]->actor.textId);
func_80078884(NA_SE_SY_CURSOR); func_80078884(NA_SE_SY_CURSOR);
@ -1232,9 +1238,11 @@ void EnOssan_State_BrowseLeftShelf(EnOssan* this, GlobalContext* globalCtx, Play
} }
void EnOssan_State_BrowseRightShelf(EnOssan* this, GlobalContext* globalCtx, Player* player) { void EnOssan_State_BrowseRightShelf(EnOssan* this, GlobalContext* globalCtx, Player* player) {
Input* input = &globalCtx->state.input[0];
s32 pad[2]; s32 pad[2];
u8 prevIndex; u8 prevIndex;
u8 nextIndex; u8 nextIndex;
bool dpad = CVar_GetS32("gDpadShop", 0);
prevIndex = this->cursorIndex; prevIndex = this->cursorIndex;
if (!EnOssan_ReturnItemToShelf(this)) { if (!EnOssan_ReturnItemToShelf(this)) {
@ -1252,7 +1260,7 @@ void EnOssan_State_BrowseRightShelf(EnOssan* this, GlobalContext* globalCtx, Pla
if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) && if ((Message_GetState(&globalCtx->msgCtx) == TEXT_STATE_EVENT) &&
!EnOssan_HasPlayerSelectedItem(globalCtx, this, &globalCtx->state.input[0])) { !EnOssan_HasPlayerSelectedItem(globalCtx, this, &globalCtx->state.input[0])) {
if (this->moveHorizontal) { if (this->moveHorizontal) {
if (this->stickAccumX < 0) { if ((this->stickAccumX < 0) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DLEFT))) {
nextIndex = EnOssan_CursorRight(this, this->cursorIndex, 0); nextIndex = EnOssan_CursorRight(this, this->cursorIndex, 0);
if (nextIndex != CURSOR_INVALID) { if (nextIndex != CURSOR_INVALID) {
this->cursorIndex = nextIndex; this->cursorIndex = nextIndex;
@ -1260,14 +1268,14 @@ void EnOssan_State_BrowseRightShelf(EnOssan* this, GlobalContext* globalCtx, Pla
EnOssan_SetLookToShopkeeperFromShelf(globalCtx, this); EnOssan_SetLookToShopkeeperFromShelf(globalCtx, this);
return; return;
} }
} else if (this->stickAccumX > 0) { } else if ((this->stickAccumX > 0) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DRIGHT))) {
nextIndex = EnOssan_CursorLeft(this, this->cursorIndex, 4); nextIndex = EnOssan_CursorLeft(this, this->cursorIndex, 4);
if (nextIndex != CURSOR_INVALID) { if (nextIndex != CURSOR_INVALID) {
this->cursorIndex = nextIndex; this->cursorIndex = nextIndex;
} }
} }
} else { } else {
if (this->stickAccumX < 0 && this->stickAccumX < -500) { if ((this->stickAccumX < 0 && this->stickAccumX < -500) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DLEFT))) {
nextIndex = EnOssan_CursorRight(this, this->cursorIndex, 0); nextIndex = EnOssan_CursorRight(this, this->cursorIndex, 0);
if (nextIndex != CURSOR_INVALID) { if (nextIndex != CURSOR_INVALID) {
this->cursorIndex = nextIndex; this->cursorIndex = nextIndex;
@ -1275,14 +1283,14 @@ void EnOssan_State_BrowseRightShelf(EnOssan* this, GlobalContext* globalCtx, Pla
EnOssan_SetLookToShopkeeperFromShelf(globalCtx, this); EnOssan_SetLookToShopkeeperFromShelf(globalCtx, this);
return; return;
} }
} else if (this->stickAccumX > 0 && this->stickAccumX > 500) { } else if ((this->stickAccumX > 0 && this->stickAccumX > 500) || (dpad && CHECK_BTN_ALL(input->press.button, BTN_DRIGHT))) {
nextIndex = EnOssan_CursorLeft(this, this->cursorIndex, 4); nextIndex = EnOssan_CursorLeft(this, this->cursorIndex, 4);
if (nextIndex != CURSOR_INVALID) { if (nextIndex != CURSOR_INVALID) {
this->cursorIndex = nextIndex; this->cursorIndex = nextIndex;
} }
} }
} }
EnOssan_CursorUpDown(this); EnOssan_CursorUpDown(this, globalCtx);
if (this->cursorIndex != prevIndex) { if (this->cursorIndex != prevIndex) {
Message_ContinueTextbox(globalCtx, this->shelfSlots[this->cursorIndex]->actor.textId); Message_ContinueTextbox(globalCtx, this->shelfSlots[this->cursorIndex]->actor.textId);
func_80078884(NA_SE_SY_CURSOR); func_80078884(NA_SE_SY_CURSOR);