DPad items

This commit is contained in:
rozlette
2022-06-22 21:24:20 -05:00
committed by louist103
parent 57fb04accc
commit fd06827e2b
17 changed files with 582 additions and 407 deletions
@@ -776,9 +776,12 @@ namespace SohImGui {
if (ImGui::BeginMenu("Controller"))
{
// TODO mutual exclusions -- gDpadEquips and gDpadPauseName cause conflicts, but nothing stops a user from selecting both
// There should be some system to prevent conclifting enhancements from being selected
EnhancementCheckbox("D-pad Support on Pause and File Select", "gDpadPauseName");
EnhancementCheckbox("D-pad Support in Ocarina and Text Choice", "gDpadOcarinaText");
EnhancementCheckbox("D-pad Support for Browsing Shop Items", "gDpadShop");
EnhancementCheckbox("D-pad as Equip Items", "gDpadEquips");
ImGui::Separator();
+4
View File
@@ -76,6 +76,10 @@
? gSaveContext.equips.buttonItems[(button) + 1] \
: ITEM_NONE)
#define DPAD_ITEM(button) ((gSaveContext.buttonStatus[(button) + 5] != BTN_DISABLED) \
? gSaveContext.equips.buttonItems[(button) + 4] \
: ITEM_NONE)
#define CHECK_BTN_ALL(state, combo) (~((state) | ~(combo)) == 0)
#define CHECK_BTN_ANY(state, combo) (((state) & (combo)) != 0)
+4
View File
@@ -705,6 +705,10 @@ typedef struct {
/* 0x024C */ u16 cDownAlpha;
/* 0x024E */ u16 cRightAlpha;
/* 0x0250 */ u16 healthAlpha; // also max C-Up alpha
/* 0x024E */ u16 dpadUpAlpha;
/* 0x024E */ u16 dpadDownAlpha;
/* 0x024E */ u16 dpadLeftAlpha;
/* 0x024E */ u16 dpadRightAlpha;
/* 0x0252 */ u16 magicAlpha; // also Rupee and Key counters alpha
/* 0x0254 */ u16 minimapAlpha;
/* 0x0256 */ s16 startAlpha;
+15
View File
@@ -22,6 +22,21 @@
#define C_UP_BUTTON_X 254
#define C_UP_BUTTON_Y 16
#define DPAD_UP_X 279
#define DPAD_UP_Y 47
#define DPAD_DOWN_X 279
#define DPAD_DOWN_Y 79
#define DPAD_LEFT_X 263
#define DPAD_LEFT_Y 63
#define DPAD_RIGHT_X 295
#define DPAD_RIGHT_Y 63
#define DPAD_X 271
#define DPAD_Y 55
/**
* These are the colors for the hearts in the interface. The prim color is the red color of the heart
* for the base hearts, while the prim color for the double defense hearts is the white outline. The
+3 -3
View File
@@ -5,8 +5,8 @@
#include "z64math.h"
typedef struct {
/* 0x00 */ u8 buttonItems[4];
/* 0x04 */ u8 cButtonSlots[3];
/* 0x00 */ u8 buttonItems[8];
/* 0x04 */ u8 cButtonSlots[7];
/* 0x08 */ u16 equipment;
} ItemEquips; // size = 0x0A
@@ -125,7 +125,7 @@ typedef struct {
/* 0x13DA */ s16 timerY[2];
/* 0x13E0 */ u8 seqId;
/* 0x13E1 */ u8 natureAmbienceId;
/* 0x13E2 */ u8 buttonStatus[5];
/* 0x13E2 */ u8 buttonStatus[9];
/* 0x13E7 */ u8 unk_13E7; // alpha related
/* 0x13E8 */ u16 unk_13E8; // alpha type?
/* 0x13EA */ u16 unk_13EA; // also alpha type?
+12 -8
View File
@@ -278,11 +278,11 @@ void SaveManager::InitFileDebug() {
gSaveContext.savedSceneNum = 0x51;
// Equipment
static std::array<u8, 4> sButtonItems = { ITEM_SWORD_MASTER, ITEM_BOW, ITEM_BOMB, ITEM_OCARINA_FAIRY };
static std::array<u8, 8> sButtonItems = { ITEM_SWORD_MASTER, ITEM_BOW, ITEM_BOMB, ITEM_OCARINA_FAIRY, ITEM_NONE, ITEM_NONE, ITEM_NONE, ITEM_NONE };
for (int button = 0; button < ARRAY_COUNT(gSaveContext.equips.buttonItems); button++) {
gSaveContext.equips.buttonItems[button] = sButtonItems[button];
}
static std::array<u8, 3> sCButtonSlots = { SLOT_BOW, SLOT_BOMB, SLOT_OCARINA };
static std::array<u8, 7> sCButtonSlots = { SLOT_BOW, SLOT_BOMB, SLOT_OCARINA, SLOT_NONE, SLOT_NONE, SLOT_NONE, SLOT_NONE };
for (int button = 0; button < ARRAY_COUNT(gSaveContext.equips.cButtonSlots); button++) {
gSaveContext.equips.cButtonSlots[button] = sCButtonSlots[button];
}
@@ -493,19 +493,23 @@ void SaveManager::LoadBaseVersion1() {
SaveManager::Instance->LoadData("ocarinaGameRoundNum", gSaveContext.ocarinaGameRoundNum);
SaveManager::Instance->LoadStruct("childEquips", []() {
SaveManager::Instance->LoadArray("buttonItems", ARRAY_COUNT(gSaveContext.childEquips.buttonItems), [](size_t i) {
SaveManager::Instance->LoadData("", gSaveContext.childEquips.buttonItems[i]);
SaveManager::Instance->LoadData("", gSaveContext.childEquips.buttonItems[i],
static_cast<uint8_t>(ITEM_NONE));
});
SaveManager::Instance->LoadArray("cButtonSlots", ARRAY_COUNT(gSaveContext.childEquips.cButtonSlots), [](size_t i) {
SaveManager::Instance->LoadData("", gSaveContext.childEquips.cButtonSlots[i]);
SaveManager::Instance->LoadData("", gSaveContext.childEquips.cButtonSlots[i],
static_cast<uint8_t>(SLOT_NONE));
});
SaveManager::Instance->LoadData("equipment", gSaveContext.childEquips.equipment);
});
SaveManager::Instance->LoadStruct("adultEquips", []() {
SaveManager::Instance->LoadArray("buttonItems", ARRAY_COUNT(gSaveContext.adultEquips.buttonItems), [](size_t i) {
SaveManager::Instance->LoadData("", gSaveContext.adultEquips.buttonItems[i]);
SaveManager::Instance->LoadData("", gSaveContext.adultEquips.buttonItems[i],
static_cast<uint8_t>(ITEM_NONE));
});
SaveManager::Instance->LoadArray("cButtonSlots", ARRAY_COUNT(gSaveContext.adultEquips.cButtonSlots), [](size_t i) {
SaveManager::Instance->LoadData("", gSaveContext.adultEquips.cButtonSlots[i]);
SaveManager::Instance->LoadData("", gSaveContext.adultEquips.cButtonSlots[i],
static_cast<uint8_t>(SLOT_NONE));
});
SaveManager::Instance->LoadData("equipment", gSaveContext.adultEquips.equipment);
});
@@ -513,10 +517,10 @@ void SaveManager::LoadBaseVersion1() {
SaveManager::Instance->LoadData("savedSceneNum", gSaveContext.savedSceneNum);
SaveManager::Instance->LoadStruct("equips", []() {
SaveManager::Instance->LoadArray("buttonItems", ARRAY_COUNT(gSaveContext.equips.buttonItems), [](size_t i) {
SaveManager::Instance->LoadData("", gSaveContext.equips.buttonItems[i]);
SaveManager::Instance->LoadData("", gSaveContext.equips.buttonItems[i], static_cast<uint8_t>(ITEM_NONE));
});
SaveManager::Instance->LoadArray("cButtonSlots", ARRAY_COUNT(gSaveContext.equips.cButtonSlots), [](size_t i) {
SaveManager::Instance->LoadData("", gSaveContext.equips.cButtonSlots[i]);
SaveManager::Instance->LoadData("", gSaveContext.equips.cButtonSlots[i], static_cast<uint8_t>(SLOT_NONE));
});
SaveManager::Instance->LoadData("equipment", gSaveContext.equips.equipment);
});
+17 -29
View File
@@ -25,8 +25,9 @@ void func_801109B0(GlobalContext* globalCtx) {
interfaceCtx->minimapAlpha = 0;
interfaceCtx->unk_260 = 0;
interfaceCtx->unk_244 = interfaceCtx->aAlpha = interfaceCtx->bAlpha = interfaceCtx->cLeftAlpha =
interfaceCtx->cDownAlpha = interfaceCtx->cRightAlpha = interfaceCtx->healthAlpha = interfaceCtx->startAlpha =
interfaceCtx->magicAlpha = 0;
interfaceCtx->cDownAlpha = interfaceCtx->cRightAlpha = interfaceCtx->dpadUpAlpha = interfaceCtx->dpadDownAlpha =
interfaceCtx->dpadLeftAlpha = interfaceCtx->dpadRightAlpha = interfaceCtx->healthAlpha =
interfaceCtx->startAlpha = interfaceCtx->magicAlpha = 0;
parameterSize = (uintptr_t)_parameter_staticSegmentRomEnd - (uintptr_t)_parameter_staticSegmentRomStart;
@@ -73,7 +74,8 @@ void func_801109B0(GlobalContext* globalCtx) {
//DmaMgr_SendRequest1(interfaceCtx->doActionSegment + 0x300, (uintptr_t)_do_action_staticSegmentRomStart + doActionOffset,
//0x180, "../z_construct.c", 178);
interfaceCtx->iconItemSegment = GameState_Alloc(&globalCtx->state, 0x4000, "../z_construct.c", 190);
interfaceCtx->iconItemSegment = GameState_Alloc(
&globalCtx->state, 0x1000 * ARRAY_COUNT(gSaveContext.equips.buttonItems), "../z_construct.c", 190);
// "Icon Item Texture Initialization = %x"
osSyncPrintf("アイコンアイテム テクスチャ初期=%x\n", 0x4000);
@@ -85,32 +87,18 @@ void func_801109B0(GlobalContext* globalCtx) {
gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2],
gSaveContext.equips.buttonItems[3]);
if (gSaveContext.equips.buttonItems[0] < 0xF0) {
DmaMgr_SendRequest1(interfaceCtx->iconItemSegment,
_icon_item_staticSegmentRomStart + gSaveContext.equips.buttonItems[0] * 0x1000, 0x1000,
"../z_construct.c", 198);
} else if (gSaveContext.equips.buttonItems[0] != 0xFF) {
DmaMgr_SendRequest1(interfaceCtx->iconItemSegment,
_icon_item_staticSegmentRomStart + gSaveContext.equips.buttonItems[0] * 0x1000, 0x1000,
"../z_construct.c", 203);
}
if (gSaveContext.equips.buttonItems[1] < 0xF0) {
DmaMgr_SendRequest1(interfaceCtx->iconItemSegment + 0x1000,
_icon_item_staticSegmentRomStart + gSaveContext.equips.buttonItems[1] * 0x1000, 0x1000,
"../z_construct.c", 209);
}
if (gSaveContext.equips.buttonItems[2] < 0xF0) {
DmaMgr_SendRequest1(interfaceCtx->iconItemSegment + 0x2000,
_icon_item_staticSegmentRomStart + gSaveContext.equips.buttonItems[2] * 0x1000, 0x1000,
"../z_construct.c", 214);
}
if (gSaveContext.equips.buttonItems[3] < 0xF0) {
DmaMgr_SendRequest1(interfaceCtx->iconItemSegment + 0x3000,
_icon_item_staticSegmentRomStart + gSaveContext.equips.buttonItems[3] * 0x1000, 0x1000,
"../z_construct.c", 219);
for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.equips.buttonItems); buttonIndex++) {
if (gSaveContext.equips.buttonItems[buttonIndex] < 0xF0) {
DmaMgr_SendRequest1(interfaceCtx->iconItemSegment + 0x1000 * buttonIndex,
_icon_item_staticSegmentRomStart +
gSaveContext.equips.buttonItems[buttonIndex] * 0x1000,
0x1000, "../z_construct.c", 198);
} else if (buttonIndex == 0 && gSaveContext.equips.buttonItems[buttonIndex] != 0xFF) {
DmaMgr_SendRequest1(interfaceCtx->iconItemSegment + 0x1000 * buttonIndex,
_icon_item_staticSegmentRomStart +
gSaveContext.equips.buttonItems[buttonIndex] * 0x1000,
0x1000, "../z_construct.c", 203);
}
}
osSyncPrintf("EVENT=%d\n", ((void)0, gSaveContext.timer1State));
+3 -2
View File
@@ -68,8 +68,9 @@ void GameOver_Update(GlobalContext* globalCtx) {
gSaveContext.eventInf[1] = 0;
gSaveContext.eventInf[2] = 0;
gSaveContext.eventInf[3] = 0;
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = gSaveContext.buttonStatus[4] = BTN_ENABLED;
for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) {
gSaveContext.buttonStatus[buttonIndex] = BTN_ENABLED;
}
gSaveContext.unk_13E7 = gSaveContext.unk_13E8 = gSaveContext.unk_13EA = gSaveContext.unk_13EC = 0;
Environment_InitGameOverLights(globalCtx);
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -147,7 +147,7 @@ void Sram_OpenSave() {
INV_CONTENT(ITEM_LETTER_ZELDA) = ITEM_CHICKEN;
for (j = 1; j < 4; j++) {
for (j = 1; j < ARRAY_COUNT(gSaveContext.equips.buttonItems); j++) {
if (gSaveContext.equips.buttonItems[j] == ITEM_LETTER_ZELDA) {
gSaveContext.equips.buttonItems[j] = ITEM_CHICKEN;
}
@@ -166,7 +166,7 @@ void Sram_OpenSave() {
if (INV_CONTENT(ITEM_TRADE_ADULT) == gSpoilingItems[i]) {
INV_CONTENT(gSpoilingItemReverts[i]) = gSpoilingItemReverts[i];
for (j = 1; j < 4; j++) {
for (j = 1; j < ARRAY_COUNT(gSaveContext.equips.buttonItems); j++) {
if (gSaveContext.equips.buttonItems[j] == gSpoilingItems[i]) {
gSaveContext.equips.buttonItems[j] = gSpoilingItemReverts[i];
}
@@ -1057,7 +1057,7 @@ static LinkAnimationHeader* D_80854378[] = {
static u8 D_80854380[2] = { 0x18, 0x19 };
static u8 D_80854384[2] = { 0x1A, 0x1B };
static u16 D_80854388[] = { BTN_B, BTN_CLEFT, BTN_CDOWN, BTN_CRIGHT };
static u16 D_80854388[] = { BTN_B, BTN_CLEFT, BTN_CDOWN, BTN_CRIGHT, BTN_DUP, BTN_DDOWN, BTN_DLEFT, BTN_DRIGHT };
static u8 sMagicSpellCosts[] = { 12, 24, 24, 12, 24, 12 };
@@ -1862,7 +1862,7 @@ s32 func_80833C98(s32 item1, s32 actionParam) {
}
s32 func_80833CDC(GlobalContext* globalCtx, s32 index) {
if (index >= 4) {
if (index >= ((CVar_GetS32("gDpadEquips", 0) != 0) ? 8 : 4)) {
return ITEM_NONE;
}
else if (globalCtx->bombchuBowlingStatus != 0) {
@@ -1877,9 +1877,18 @@ s32 func_80833CDC(GlobalContext* globalCtx, s32 index) {
else if (index == 2) {
return C_BTN_ITEM(1);
}
else {
else if (index == 3) {
return C_BTN_ITEM(2);
}
else if (index == 4) {
return DPAD_ITEM(0);
} else if (index == 5) {
return DPAD_ITEM(1);
} else if (index == 6) {
return DPAD_ITEM(2);
} else if (index == 7) {
return DPAD_ITEM(3);
}
}
void func_80833DF8(Player* this, GlobalContext* globalCtx) {
@@ -1890,16 +1899,29 @@ void func_80833DF8(Player* this, GlobalContext* globalCtx) {
if (this->currentMask != PLAYER_MASK_NONE) {
if (CVar_GetS32("gMMBunnyHood", 0) != 0) {
s32 maskItem = this->currentMask - PLAYER_MASK_KEATON + ITEM_MASK_KEATON;
bool hasOnDpad = false;
if (CVar_GetS32("gDpadEquips", 0) != 0) {
for (int buttonIndex = 4; buttonIndex < 8; buttonIndex++) {
hasOnDpad |= gSaveContext.equips.buttonItems[buttonIndex] == maskItem;
}
}
if (gSaveContext.equips.buttonItems[0] != maskItem && gSaveContext.equips.buttonItems[1] != maskItem &&
gSaveContext.equips.buttonItems[2] != maskItem && gSaveContext.equips.buttonItems[3] != maskItem) {
gSaveContext.equips.buttonItems[2] != maskItem && gSaveContext.equips.buttonItems[3] != maskItem &&
!hasOnDpad) {
this->currentMask = PLAYER_MASK_NONE;
func_808328EC(this, NA_SE_PL_CHANGE_ARMS);
}
} else {
maskActionParam = this->currentMask - 1 + PLAYER_AP_MASK_KEATON;
bool hasOnDpad = false;
if (CVar_GetS32("gDpadEquips", 0) != 0) {
for (int buttonIndex = 0; buttonIndex < 4; buttonIndex++) {
hasOnDpad |= func_80833C98(DPAD_ITEM(buttonIndex), maskActionParam);
}
}
if (!func_80833C98(C_BTN_ITEM(0), maskActionParam) && !func_80833C98(C_BTN_ITEM(1), maskActionParam) &&
!func_80833C98(C_BTN_ITEM(2), maskActionParam)) {
!func_80833C98(C_BTN_ITEM(2), maskActionParam) && hasOnDpad) {
this->currentMask = PLAYER_MASK_NONE;
}
}
@@ -1907,8 +1929,14 @@ void func_80833DF8(Player* this, GlobalContext* globalCtx) {
if (!(this->stateFlags1 & (PLAYER_STATE1_11 | PLAYER_STATE1_29)) && !func_8008F128(this)) {
if (this->itemActionParam >= PLAYER_AP_FISHING_POLE) {
bool hasOnDpad = false;
if (CVar_GetS32("gDpadEquips", 0) != 0) {
for (int buttonIndex = 0; buttonIndex < 4; buttonIndex++) {
hasOnDpad |= func_80833C50(this, DPAD_ITEM(buttonIndex));
}
}
if (!func_80833C50(this, B_BTN_ITEM) && !func_80833C50(this, C_BTN_ITEM(0)) &&
!func_80833C50(this, C_BTN_ITEM(1)) && !func_80833C50(this, C_BTN_ITEM(2))) {
!func_80833C50(this, C_BTN_ITEM(1)) && !func_80833C50(this, C_BTN_ITEM(2)) && !hasOnDpad) {
func_80835F44(globalCtx, this, ITEM_NONE);
return;
}
@@ -2296,9 +2324,12 @@ s32 func_80834E44(GlobalContext* globalCtx) {
}
s32 func_80834E7C(GlobalContext* globalCtx) {
u16 buttonsToCheck = BTN_A | BTN_B | BTN_CUP | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN;
if (CVar_GetS32("gDpadEquips", 0) != 0) {
buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT;
}
return (globalCtx->shootingGalleryStatus != 0) &&
((globalCtx->shootingGalleryStatus < 0) ||
CHECK_BTN_ANY(sControlInput->cur.button, BTN_A | BTN_B | BTN_CUP | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN));
((globalCtx->shootingGalleryStatus < 0) || CHECK_BTN_ANY(sControlInput->cur.button, buttonsToCheck));
}
s32 func_80834EB8(Player* this, GlobalContext* globalCtx) {
@@ -6292,8 +6323,12 @@ s32 func_8083EAF0(Player* this, Actor* actor) {
}
s32 func_8083EB44(Player* this, GlobalContext* globalCtx) {
u16 buttonsToCheck = BTN_A | BTN_B | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN;
if (CVar_GetS32("gDpadEquips", 0) != 0) {
buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT;
}
if ((this->stateFlags1 & PLAYER_STATE1_11) && (this->heldActor != NULL) &&
CHECK_BTN_ANY(sControlInput->press.button, BTN_A | BTN_B | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN)) {
CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)) {
if (!func_80835644(globalCtx, this, this->heldActor)) {
if (!func_8083EAF0(this, this->heldActor)) {
func_80835C58(globalCtx, this, func_808464B0, 1);
@@ -8362,8 +8397,12 @@ void func_8084411C(Player* this, GlobalContext* globalCtx) {
if (this->stateFlags1 & PLAYER_STATE1_11) {
Actor* heldActor = this->heldActor;
u16 buttonsToCheck = BTN_A | BTN_B | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN;
if (CVar_GetS32("gDpadEquips", 0) != 0) {
buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT;
}
if (!func_80835644(globalCtx, this, heldActor) && (heldActor->id == ACTOR_EN_NIW) &&
CHECK_BTN_ANY(sControlInput->press.button, BTN_A | BTN_B | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN)) {
CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)) {
func_8084409C(globalCtx, this, this->linearVelocity + 2.0f, this->actor.velocity.y + 2.0f);
}
}
@@ -9161,6 +9200,10 @@ void func_80846260(Player* this, GlobalContext* globalCtx) {
return;
}
u16 buttonsToCheck = BTN_A | BTN_B | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN;
if (CVar_GetS32("gDpadEquips", 0) != 0) {
buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT;
}
if (this->unk_850 == 0) {
if (LinkAnimation_OnFrame(&this->skelAnime, 27.0f)) {
Actor* interactRangeActor = this->interactRangeActor;
@@ -9176,8 +9219,7 @@ void func_80846260(Player* this, GlobalContext* globalCtx) {
return;
}
}
else if (CHECK_BTN_ANY(sControlInput->press.button, BTN_A | BTN_B | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN)) {
} else if (CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)) {
func_80835C58(globalCtx, this, func_80846358, 1);
func_80832264(globalCtx, this, &gPlayerAnim_0032B8);
}
@@ -11259,13 +11301,16 @@ void func_8084B1D8(Player* this, GlobalContext* globalCtx) {
func_80836670(this, globalCtx);
}
u16 buttonsToCheck = BTN_A | BTN_B | BTN_R | BTN_CUP | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN;
if (CVar_GetS32("gDpadEquips", 0) != 0) {
buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT;
}
if ((this->csMode != 0) || (this->unk_6AD == 0) || (this->unk_6AD >= 4) || func_80833B54(this) ||
(this->unk_664 != NULL) || !func_8083AD4C(globalCtx, this) ||
(((this->unk_6AD == 2) && (CHECK_BTN_ANY(sControlInput->press.button, BTN_A | BTN_B | BTN_R) ||
func_80833B2C(this) || (!func_8002DD78(this) && !func_808334B4(this)))) ||
((this->unk_6AD == 1) &&
CHECK_BTN_ANY(sControlInput->press.button,
BTN_A | BTN_B | BTN_R | BTN_CUP | BTN_CLEFT | BTN_CRIGHT | BTN_CDOWN)))) {
CHECK_BTN_ANY(sControlInput->press.button, buttonsToCheck)))) {
func_8083C148(this, globalCtx);
func_80078884(NA_SE_SY_CAMERA_ZOOM_UP);
}
@@ -1503,8 +1503,9 @@ void FileChoose_LoadGame(GameState* thisx) {
gSaveContext.nextDayTime = 0xFFFF;
gSaveContext.unk_13C3 = 0;
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = gSaveContext.buttonStatus[4] = BTN_ENABLED;
for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) {
gSaveContext.buttonStatus[buttonIndex] = BTN_ENABLED;
}
gSaveContext.unk_13E7 = gSaveContext.unk_13E8 = gSaveContext.unk_13EA = gSaveContext.unk_13EC =
gSaveContext.unk_13F4 = 0;
@@ -1936,8 +1937,9 @@ void FileChoose_InitContext(GameState* thisx) {
Environment_UpdateSkybox(NULL, SKYBOX_NORMAL_SKY, &this->envCtx, &this->skyboxCtx);
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = gSaveContext.buttonStatus[4] = BTN_ENABLED;
for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) {
gSaveContext.buttonStatus[buttonIndex] = BTN_ENABLED;
}
}
void FileChoose_Destroy(GameState* thisx) {
@@ -25,8 +25,9 @@ void Select_LoadGame(SelectContext* this, s32 entranceIndex) {
gSaveContext.unk_13F4 = 0;
gSaveContext.magicLevel = gSaveContext.magic;
}
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = gSaveContext.buttonStatus[4] = BTN_ENABLED;
for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) {
gSaveContext.buttonStatus[buttonIndex] = BTN_ENABLED;
}
gSaveContext.unk_13E7 = gSaveContext.unk_13E8 = gSaveContext.unk_13EA = gSaveContext.unk_13EC = 0;
Audio_QueueSeqCmd(SEQ_PLAYER_BGM_MAIN << 24 | NA_BGM_STOP);
gSaveContext.entranceIndex = entranceIndex;
@@ -490,9 +490,13 @@ void KaleidoScope_DrawEquipment(GlobalContext* globalCtx) {
KaleidoScope_SetCursorVtx(pauseCtx, cursorSlot * 4, pauseCtx->equipVtx);
u16 buttonsToCheck = BTN_A | BTN_CLEFT | BTN_CDOWN | BTN_CRIGHT;
if (CVar_GetS32("gDpadEquips", 0) != 0) {
buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT;
}
if ((pauseCtx->cursorSpecialPos == 0) && (cursorItem != PAUSE_ITEM_NONE) && (pauseCtx->state == 6) &&
(pauseCtx->unk_1E4 == 0) &&
CHECK_BTN_ANY(input->press.button, BTN_A | BTN_CLEFT | BTN_CDOWN | BTN_CRIGHT) &&
(pauseCtx->unk_1E4 == 0) && CHECK_BTN_ANY(input->press.button, buttonsToCheck) &&
(pauseCtx->cursorX[PAUSE_EQUIP] != 0)) {
if ((gEquipAgeReqs[pauseCtx->cursorY[PAUSE_EQUIP]][pauseCtx->cursorX[PAUSE_EQUIP]] == 9) ||
@@ -50,7 +50,7 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx,
gDPPipeSync(POLY_KAL_DISP++);
if (i != 0) {
gSPVertex(POLY_KAL_DISP++, &pauseCtx->itemVtx[(sAmmoVtxOffset[item] + 27) * 4], 4, 0);
gSPVertex(POLY_KAL_DISP++, &pauseCtx->itemVtx[(sAmmoVtxOffset[item] + 31) * 4], 4, 0);
gDPLoadTextureBlock(POLY_KAL_DISP++, ((u8*)_gAmmoDigit0Tex[i]), G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
@@ -59,7 +59,7 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx,
gSP1Quadrangle(POLY_KAL_DISP++, 0, 2, 3, 1, 0);
}
gSPVertex(POLY_KAL_DISP++, &pauseCtx->itemVtx[(sAmmoVtxOffset[item] + 28) * 4], 4, 0);
gSPVertex(POLY_KAL_DISP++, &pauseCtx->itemVtx[(sAmmoVtxOffset[item] + 32) * 4], 4, 0);
gDPLoadTextureBlock(POLY_KAL_DISP++, ((u8*)_gAmmoDigit0Tex[ammo]), G_IM_FMT_IA, G_IM_SIZ_8b, 8, 8, 0,
G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMIRROR | G_TX_WRAP, G_TX_NOMASK, G_TX_NOMASK, G_TX_NOLOD,
@@ -347,7 +347,11 @@ void KaleidoScope_DrawItemSelect(GlobalContext* globalCtx) {
KaleidoScope_SetCursorVtx(pauseCtx, index, pauseCtx->itemVtx);
if ((pauseCtx->debugState == 0) && (pauseCtx->state == 6) && (pauseCtx->unk_1E4 == 0)) {
if (CHECK_BTN_ANY(input->press.button, BTN_CLEFT | BTN_CDOWN | BTN_CRIGHT)) {
u16 buttonsToCheck = BTN_CLEFT | BTN_CDOWN | BTN_CRIGHT;
if (CVar_GetS32("gDpadEquips", 0) != 0) {
buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT;
}
if (CHECK_BTN_ANY(input->press.button, buttonsToCheck)) {
if (((gSlotAgeReqs[cursorSlot] == 9) ||
(gSlotAgeReqs[cursorSlot] == ((void)0, gSaveContext.linkAge))) &&
(cursorItem != ITEM_SOLD_OUT) && (cursorItem != ITEM_NONE)) {
@@ -384,7 +388,7 @@ void KaleidoScope_DrawItemSelect(GlobalContext* globalCtx) {
gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
gDPSetEnvColor(POLY_KAL_DISP++, 0, 0, 0, 0);
for (i = 0, j = 24 * 4; i < 3; i++, j += 4) {
for (i = 0, j = 24 * 4; i < ARRAY_COUNT(gSaveContext.equips.cButtonSlots); i++, j += 4) {
if ((gSaveContext.equips.buttonItems[i + 1] != ITEM_NONE) &&
!((gSaveContext.equips.buttonItems[i + 1] >= ITEM_SHIELD_DEKU) &&
(gSaveContext.equips.buttonItems[i + 1] <= ITEM_BOOTS_HOVER))) {
@@ -474,6 +478,16 @@ void KaleidoScope_SetupItemEquip(GlobalContext* globalCtx, u16 item, u16 slot, s
pauseCtx->equipTargetCBtn = 1;
} else if (CHECK_BTN_ALL(input->press.button, BTN_CRIGHT)) {
pauseCtx->equipTargetCBtn = 2;
} else if (CVar_GetS32("gDpadEquips", 0) != 0) {
if (CHECK_BTN_ALL(input->press.button, BTN_DUP)) {
pauseCtx->equipTargetCBtn = 3;
} else if (CHECK_BTN_ALL(input->press.button, BTN_DDOWN)) {
pauseCtx->equipTargetCBtn = 4;
} else if (CHECK_BTN_ALL(input->press.button, BTN_DLEFT)) {
pauseCtx->equipTargetCBtn = 5;
} else if (CHECK_BTN_ALL(input->press.button, BTN_DRIGHT)) {
pauseCtx->equipTargetCBtn = 6;
}
}
pauseCtx->equipTargetItem = item;
@@ -504,8 +518,9 @@ void KaleidoScope_SetupItemEquip(GlobalContext* globalCtx, u16 item, u16 slot, s
}
}
static s16 sCButtonPosX[] = { 66, 90, 114 };
static s16 sCButtonPosY[] = { 110, 92, 110 };
// TODO update for final positions
static s16 sCButtonPosX[] = { 66, 90, 114, 110, 110, 86, 134 };
static s16 sCButtonPosY[] = { 110, 92, 110, 76, 44, 62, 62 };
void KaleidoScope_UpdateItemEquip(GlobalContext* globalCtx) {
static s16 D_8082A488 = 0;
@@ -598,223 +613,35 @@ void KaleidoScope_UpdateItemEquip(GlobalContext* globalCtx) {
osSyncPrintf("\n================================\n");
if (pauseCtx->equipTargetCBtn == 0) {
if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[1]) {
if (gSaveContext.equips.buttonItems[1] != ITEM_NONE) {
if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) &&
((gSaveContext.equips.buttonItems[1] == ITEM_BOW) ||
((gSaveContext.equips.buttonItems[1] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[1] <= ITEM_BOW_ARROW_LIGHT)))) {
pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_ARROW_FIRE;
pauseCtx->equipTargetSlot = SLOT_BOW;
} else {
gSaveContext.equips.buttonItems[2] = gSaveContext.equips.buttonItems[1];
gSaveContext.equips.cButtonSlots[1] = gSaveContext.equips.cButtonSlots[0];
Interface_LoadItemIcon2(globalCtx, 2);
}
} else {
gSaveContext.equips.buttonItems[2] = ITEM_NONE;
gSaveContext.equips.cButtonSlots[1] = SLOT_NONE;
}
} else if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[2]) {
if (gSaveContext.equips.buttonItems[1] != ITEM_NONE) {
if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) &&
((gSaveContext.equips.buttonItems[1] == ITEM_BOW) ||
((gSaveContext.equips.buttonItems[1] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[1] <= ITEM_BOW_ARROW_LIGHT)))) {
pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_ARROW_FIRE;
pauseCtx->equipTargetSlot = SLOT_BOW;
} else {
gSaveContext.equips.buttonItems[3] = gSaveContext.equips.buttonItems[1];
gSaveContext.equips.cButtonSlots[2] = gSaveContext.equips.cButtonSlots[0];
Interface_LoadItemIcon2(globalCtx, 3);
}
} else {
gSaveContext.equips.buttonItems[3] = ITEM_NONE;
gSaveContext.equips.cButtonSlots[2] = SLOT_NONE;
}
// If the item is on another button already, swap the two
uint16_t targetButtonIndex = pauseCtx->equipTargetCBtn + 1;
for (uint16_t otherSlotIndex = 0; otherSlotIndex < ARRAY_COUNT(gSaveContext.equips.cButtonSlots);
otherSlotIndex++) {
uint16_t otherButtonIndex = otherSlotIndex + 1;
if (otherSlotIndex == pauseCtx->equipTargetCBtn) {
continue;
}
if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1)) {
if ((gSaveContext.equips.buttonItems[1] == ITEM_BOW) ||
((gSaveContext.equips.buttonItems[1] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[1] <= ITEM_BOW_ARROW_LIGHT))) {
pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_ARROW_FIRE;
pauseCtx->equipTargetSlot = SLOT_BOW;
}
} else if (pauseCtx->equipTargetItem == ITEM_BOW) {
if ((gSaveContext.equips.buttonItems[2] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[2] <= ITEM_BOW_ARROW_LIGHT)) {
gSaveContext.equips.buttonItems[2] = gSaveContext.equips.buttonItems[1];
gSaveContext.equips.cButtonSlots[1] = gSaveContext.equips.cButtonSlots[0];
Interface_LoadItemIcon2(globalCtx, 2);
} else if ((gSaveContext.equips.buttonItems[3] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[3] <= ITEM_BOW_ARROW_LIGHT)) {
gSaveContext.equips.buttonItems[3] = gSaveContext.equips.buttonItems[1];
gSaveContext.equips.cButtonSlots[2] = gSaveContext.equips.cButtonSlots[0];
Interface_LoadItemIcon2(globalCtx, 3);
}
}
gSaveContext.equips.buttonItems[1] = pauseCtx->equipTargetItem;
gSaveContext.equips.cButtonSlots[0] = pauseCtx->equipTargetSlot;
Interface_LoadItemIcon1(globalCtx, 1);
osSyncPrintf("C左sl_item_no=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetItem,
gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2],
gSaveContext.equips.buttonItems[3]);
osSyncPrintf("C左sl_number=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetSlot,
gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1],
gSaveContext.equips.cButtonSlots[2]);
} else if (pauseCtx->equipTargetCBtn == 1) {
osSyncPrintf("C下sl_item_no=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetItem,
gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2],
gSaveContext.equips.buttonItems[3]);
osSyncPrintf("C下sl_number=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetSlot,
gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1],
gSaveContext.equips.cButtonSlots[2]);
if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[0]) {
if (gSaveContext.equips.buttonItems[2] != ITEM_NONE) {
if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) &&
((gSaveContext.equips.buttonItems[2] == ITEM_BOW) ||
((gSaveContext.equips.buttonItems[2] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[2] <= ITEM_BOW_ARROW_LIGHT)))) {
pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_ARROW_FIRE;
pauseCtx->equipTargetSlot = SLOT_BOW;
} else {
gSaveContext.equips.buttonItems[1] = gSaveContext.equips.buttonItems[2];
gSaveContext.equips.cButtonSlots[0] = gSaveContext.equips.cButtonSlots[1];
Interface_LoadItemIcon2(globalCtx, 1);
}
if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[otherSlotIndex]) {
// Assign the other button to the target's current item
if (gSaveContext.equips.buttonItems[targetButtonIndex] != ITEM_NONE) {
gSaveContext.equips.buttonItems[otherButtonIndex] =
gSaveContext.equips.buttonItems[targetButtonIndex];
gSaveContext.equips.cButtonSlots[otherSlotIndex] =
gSaveContext.equips.cButtonSlots[pauseCtx->equipTargetCBtn];
Interface_LoadItemIcon2(globalCtx, otherButtonIndex);
} else {
gSaveContext.equips.buttonItems[1] = ITEM_NONE;
gSaveContext.equips.cButtonSlots[0] = SLOT_NONE;
}
} else if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[2]) {
if (gSaveContext.equips.buttonItems[2] != ITEM_NONE) {
if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) &&
((gSaveContext.equips.buttonItems[2] == ITEM_BOW) ||
((gSaveContext.equips.buttonItems[2] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[2] <= ITEM_BOW_ARROW_LIGHT)))) {
pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_ARROW_FIRE;
pauseCtx->equipTargetSlot = SLOT_BOW;
} else {
gSaveContext.equips.buttonItems[3] = gSaveContext.equips.buttonItems[2];
gSaveContext.equips.cButtonSlots[2] = gSaveContext.equips.cButtonSlots[1];
Interface_LoadItemIcon2(globalCtx, 3);
}
} else {
gSaveContext.equips.buttonItems[3] = ITEM_NONE;
gSaveContext.equips.cButtonSlots[2] = SLOT_NONE;
gSaveContext.equips.buttonItems[otherButtonIndex] = ITEM_NONE;
gSaveContext.equips.cButtonSlots[otherSlotIndex] = SLOT_NONE;
}
break; // Assume there is only one possible pre-existing equip
}
if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1)) {
if ((gSaveContext.equips.buttonItems[2] == ITEM_BOW) ||
((gSaveContext.equips.buttonItems[2] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[2] <= ITEM_BOW_ARROW_LIGHT))) {
pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_ARROW_FIRE;
pauseCtx->equipTargetSlot = SLOT_BOW;
}
} else if (pauseCtx->equipTargetItem == ITEM_BOW) {
if ((gSaveContext.equips.buttonItems[1] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[1] <= ITEM_BOW_ARROW_LIGHT)) {
gSaveContext.equips.buttonItems[1] = gSaveContext.equips.buttonItems[2];
Interface_LoadItemIcon2(globalCtx, 1);
} else if ((gSaveContext.equips.buttonItems[3] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[3] <= ITEM_BOW_ARROW_LIGHT)) {
gSaveContext.equips.buttonItems[3] = gSaveContext.equips.buttonItems[2];
Interface_LoadItemIcon2(globalCtx, 3);
}
}
gSaveContext.equips.buttonItems[2] = pauseCtx->equipTargetItem;
gSaveContext.equips.cButtonSlots[1] = pauseCtx->equipTargetSlot;
Interface_LoadItemIcon1(globalCtx, 2);
osSyncPrintf("C下sl_item_no=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetItem,
gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2],
gSaveContext.equips.buttonItems[3]);
osSyncPrintf("C下sl_number=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetSlot,
gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1],
gSaveContext.equips.cButtonSlots[2]);
} else {
osSyncPrintf("C右sl_item_no=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetItem,
gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2],
gSaveContext.equips.buttonItems[3]);
osSyncPrintf("C右sl_number=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetSlot,
gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1],
gSaveContext.equips.cButtonSlots[2]);
if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[0]) {
if (gSaveContext.equips.buttonItems[3] != ITEM_NONE) {
if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) &&
((gSaveContext.equips.buttonItems[3] == ITEM_BOW) ||
((gSaveContext.equips.buttonItems[3] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[3] <= ITEM_BOW_ARROW_LIGHT)))) {
pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_ARROW_FIRE;
pauseCtx->equipTargetSlot = SLOT_BOW;
} else {
gSaveContext.equips.buttonItems[1] = gSaveContext.equips.buttonItems[3];
gSaveContext.equips.cButtonSlots[0] = gSaveContext.equips.cButtonSlots[2];
Interface_LoadItemIcon2(globalCtx, 1);
}
} else {
gSaveContext.equips.buttonItems[1] = ITEM_NONE;
gSaveContext.equips.cButtonSlots[0] = SLOT_NONE;
}
} else if (pauseCtx->equipTargetSlot == gSaveContext.equips.cButtonSlots[1]) {
if (gSaveContext.equips.buttonItems[3] != ITEM_NONE) {
if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1) &&
((gSaveContext.equips.buttonItems[3] == ITEM_BOW) ||
((gSaveContext.equips.buttonItems[3] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[3] <= ITEM_BOW_ARROW_LIGHT)))) {
pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_ARROW_FIRE;
pauseCtx->equipTargetSlot = SLOT_BOW;
} else {
gSaveContext.equips.buttonItems[2] = gSaveContext.equips.buttonItems[3];
gSaveContext.equips.cButtonSlots[1] = gSaveContext.equips.cButtonSlots[2];
Interface_LoadItemIcon2(globalCtx, 2);
}
} else {
gSaveContext.equips.buttonItems[2] = ITEM_NONE;
gSaveContext.equips.cButtonSlots[1] = SLOT_NONE;
}
}
if ((pauseCtx->equipTargetItem >= 0xBF) && (pauseCtx->equipTargetItem <= 0xC1)) {
if ((gSaveContext.equips.buttonItems[3] == ITEM_BOW) ||
((gSaveContext.equips.buttonItems[3] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[3] <= ITEM_BOW_ARROW_LIGHT))) {
pauseCtx->equipTargetItem -= 0xBF - ITEM_BOW_ARROW_FIRE;
pauseCtx->equipTargetSlot = SLOT_BOW;
}
} else if (pauseCtx->equipTargetItem == ITEM_BOW) {
if ((gSaveContext.equips.buttonItems[1] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[1] <= ITEM_BOW_ARROW_LIGHT)) {
gSaveContext.equips.buttonItems[1] = gSaveContext.equips.buttonItems[3];
Interface_LoadItemIcon2(globalCtx, 1);
} else if ((gSaveContext.equips.buttonItems[2] >= ITEM_BOW_ARROW_FIRE) &&
(gSaveContext.equips.buttonItems[2] <= ITEM_BOW_ARROW_LIGHT)) {
gSaveContext.equips.buttonItems[2] = gSaveContext.equips.buttonItems[3];
Interface_LoadItemIcon2(globalCtx, 2);
}
}
gSaveContext.equips.buttonItems[3] = pauseCtx->equipTargetItem;
gSaveContext.equips.cButtonSlots[2] = pauseCtx->equipTargetSlot;
Interface_LoadItemIcon1(globalCtx, 3);
osSyncPrintf("C右sl_item_no=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetItem,
gSaveContext.equips.buttonItems[1], gSaveContext.equips.buttonItems[2],
gSaveContext.equips.buttonItems[3]);
osSyncPrintf("C右sl_number=%d (1)=%d (2)=%d (3)=%d\n", pauseCtx->equipTargetSlot,
gSaveContext.equips.cButtonSlots[0], gSaveContext.equips.cButtonSlots[1],
gSaveContext.equips.cButtonSlots[2]);
}
gSaveContext.equips.buttonItems[targetButtonIndex] = pauseCtx->equipTargetItem;
gSaveContext.equips.cButtonSlots[pauseCtx->equipTargetCBtn] = pauseCtx->equipTargetSlot;
Interface_LoadItemIcon1(globalCtx, targetButtonIndex);
pauseCtx->unk_1E4 = 0;
sEquipMoveTimer = 10;
WREG(90) = 320;
@@ -695,13 +695,13 @@ s16 D_8082AB2C[] = {
24, 72, 13, 22, 19, 20, 19, 27, 14, 26, 22, 21, 49, 32, 45, 60, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 16, 32, 8,
};
static u8 D_8082AB6C[][5] = {
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED },
{ BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED },
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED },
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED },
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED },
{ BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED },
static u8 D_8082AB6C[][ARRAY_COUNT(gSaveContext.buttonStatus)] = {
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED },
{ BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED },
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED },
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED },
{ BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_ENABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED, BTN_DISABLED },
{ BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_DISABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED, BTN_ENABLED },
};
static s16 D_8082AB8C = 0;
@@ -786,7 +786,7 @@ static void* sPromptChoiceTexs[][2] = {
{ gPauseYesFRATex, gPauseNoFRATex },
};
static u8 D_808321A8[5];
static u8 sButtonStatusSave[ARRAY_COUNT(gSaveContext.buttonStatus)];
static PreRender sPlayerPreRender;
static void* sPreRenderCvg;
extern int fbTest;
@@ -911,16 +911,19 @@ void KaleidoScope_SwitchPage(PauseContext* pauseCtx, u8 pt) {
pauseCtx->cursorSpecialPos = PAUSE_CURSOR_PAGE_LEFT;
}
gSaveContext.buttonStatus[1] = D_8082AB6C[pauseCtx->pageIndex + pt][1];
gSaveContext.buttonStatus[2] = D_8082AB6C[pauseCtx->pageIndex + pt][2];
gSaveContext.buttonStatus[3] = D_8082AB6C[pauseCtx->pageIndex + pt][3];
gSaveContext.buttonStatus[4] = D_8082AB6C[pauseCtx->pageIndex + pt][4];
for (int buttonIndex = 1; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) {
gSaveContext.buttonStatus[buttonIndex] = D_8082AB6C[pauseCtx->pageIndex + pt][buttonIndex];
}
if ((CVar_GetS32("gAssignableTunicsAndBoots", 0) != 0) && (D_8082ABEC[pauseCtx->mode] == PAUSE_EQUIP)) {
gSaveContext.buttonStatus[1] = BTN_ENABLED;
gSaveContext.buttonStatus[2] = BTN_ENABLED;
gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.buttonStatus[4] = BTN_ENABLED;
// A-Button is already enabled
gSaveContext.buttonStatus[5] = BTN_ENABLED;
gSaveContext.buttonStatus[6] = BTN_ENABLED;
gSaveContext.buttonStatus[7] = BTN_ENABLED;
gSaveContext.buttonStatus[8] = BTN_ENABLED;
}
osSyncPrintf("kscope->kscp_pos+pt = %d\n", pauseCtx->pageIndex + pt);
@@ -2586,7 +2589,8 @@ void KaleidoScope_InitVertices(GlobalContext* globalCtx, GraphicsContext* gfxCtx
pauseCtx->cursorVtx[17].v.tc[0] = pauseCtx->cursorVtx[18].v.tc[1] = pauseCtx->cursorVtx[19].v.tc[0] =
pauseCtx->cursorVtx[19].v.tc[1] = 0x400;
pauseCtx->itemVtx = Graph_Alloc(gfxCtx, 164 * sizeof(Vtx));
// 24 items, 7 "item selected" backgrounds, 14 ammo digits (2 each for 7 items) -- then 4 vertices for each
pauseCtx->itemVtx = Graph_Alloc(gfxCtx, (24 + 7 + 14) * 4 * sizeof(Vtx));
for (phi_t4 = 0, phi_t2 = 0, phi_t5 = 58; phi_t4 < 4; phi_t4++, phi_t5 -= 32) {
for (phi_t1 = -96, phi_t3 = 0; phi_t3 < 6; phi_t3++, phi_t2 += 4, phi_t1 += 32) {
@@ -2625,8 +2629,9 @@ void KaleidoScope_InitVertices(GlobalContext* globalCtx, GraphicsContext* gfxCtx
}
}
for (phi_t3 = 1; phi_t3 < 4; phi_t3++, phi_t2 += 4) {
if (gSaveContext.equips.cButtonSlots[phi_t3 - 1] != ITEM_NONE) {
for (phi_t3 = 1; phi_t3 < ARRAY_COUNT(gSaveContext.equips.buttonItems); phi_t3++, phi_t2 += 4) {
if (gSaveContext.equips.cButtonSlots[phi_t3 - 1] != ITEM_NONE &&
((phi_t3 < 4) || (CVar_GetS32("gDpadEquips", 0) != 0))) {
phi_t4 = gSaveContext.equips.cButtonSlots[phi_t3 - 1] * 4;
pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[0] =
@@ -2675,7 +2680,7 @@ void KaleidoScope_InitVertices(GlobalContext* globalCtx, GraphicsContext* gfxCtx
}
}
for (phi_t2 = 108, phi_t3 = 0; phi_t3 < 7; phi_t3++) {
for (phi_t3 = 0; phi_t3 < 7; phi_t3++) {
phi_t4 = D_8082B11C[phi_t3];
pauseCtx->itemVtx[phi_t2 + 0].v.ob[0] = pauseCtx->itemVtx[phi_t2 + 2].v.ob[0] =
@@ -3068,11 +3073,10 @@ void func_808265BC(GlobalContext* globalCtx) {
if (pauseCtx->unk_1EA == (64 * ZREG(47))) {
func_80084BF4(globalCtx, 1);
gSaveContext.buttonStatus[0] = D_8082AB6C[pauseCtx->pageIndex][0];
gSaveContext.buttonStatus[1] = D_8082AB6C[pauseCtx->pageIndex][1];
gSaveContext.buttonStatus[2] = D_8082AB6C[pauseCtx->pageIndex][2];
gSaveContext.buttonStatus[3] = D_8082AB6C[pauseCtx->pageIndex][3];
gSaveContext.buttonStatus[4] = D_8082AB6C[pauseCtx->pageIndex][4];
for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) {
gSaveContext.buttonStatus[buttonIndex] = D_8082AB6C[pauseCtx->pageIndex][buttonIndex];
}
pauseCtx->pageIndex = D_8082ABEC[pauseCtx->mode];
@@ -3080,7 +3084,11 @@ void func_808265BC(GlobalContext* globalCtx) {
gSaveContext.buttonStatus[1] = BTN_ENABLED;
gSaveContext.buttonStatus[2] = BTN_ENABLED;
gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.buttonStatus[4] = BTN_ENABLED;
// A-Button is already enabled
gSaveContext.buttonStatus[5] = BTN_ENABLED;
gSaveContext.buttonStatus[6] = BTN_ENABLED;
gSaveContext.buttonStatus[7] = BTN_ENABLED;
gSaveContext.buttonStatus[8] = BTN_ENABLED;
}
pauseCtx->unk_1E4 = 0;
@@ -3246,11 +3254,9 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
switch (pauseCtx->state) {
case 3:
D_808321A8[0] = gSaveContext.buttonStatus[0];
D_808321A8[1] = gSaveContext.buttonStatus[1];
D_808321A8[2] = gSaveContext.buttonStatus[2];
D_808321A8[3] = gSaveContext.buttonStatus[3];
D_808321A8[4] = gSaveContext.buttonStatus[4];
for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) {
sButtonStatusSave[buttonIndex] = gSaveContext.buttonStatus[buttonIndex];
}
pauseCtx->cursorX[PAUSE_MAP] = 0;
pauseCtx->cursorSlot[PAUSE_MAP] = pauseCtx->cursorPoint[PAUSE_MAP] = pauseCtx->dungeonMapSlot =
@@ -3649,6 +3655,8 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = BTN_DISABLED;
gSaveContext.buttonStatus[4] = BTN_ENABLED;
gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
gSaveContext.buttonStatus[8] = BTN_DISABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
pauseCtx->unk_1EC = 0;
@@ -3695,6 +3703,8 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = BTN_DISABLED;
gSaveContext.buttonStatus[4] = BTN_ENABLED;
gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
gSaveContext.buttonStatus[8] = BTN_DISABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
pauseCtx->unk_1EC = 0;
@@ -3744,6 +3754,8 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = BTN_DISABLED;
gSaveContext.buttonStatus[4] = BTN_ENABLED;
gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
gSaveContext.buttonStatus[8] = BTN_DISABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
pauseCtx->unk_1EC = 0;
@@ -3778,6 +3790,8 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
Interface_SetDoAction(globalCtx, DO_ACTION_NONE);
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
gSaveContext.buttonStatus[8] = BTN_ENABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
pauseCtx->unk_1EC = 2;
@@ -3802,6 +3816,8 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
func_800F64E0(0);
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
gSaveContext.buttonStatus[8] = BTN_ENABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
}
@@ -3813,6 +3829,8 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
Interface_SetDoAction(globalCtx, DO_ACTION_NONE);
gSaveContext.buttonStatus[0] = gSaveContext.buttonStatus[1] = gSaveContext.buttonStatus[2] =
gSaveContext.buttonStatus[3] = BTN_ENABLED;
gSaveContext.buttonStatus[5] = gSaveContext.buttonStatus[6] = gSaveContext.buttonStatus[7] =
gSaveContext.buttonStatus[8] = BTN_ENABLED;
gSaveContext.unk_13EA = 0;
Interface_ChangeAlpha(50);
pauseCtx->unk_1EC = 5;
@@ -4202,11 +4220,10 @@ void KaleidoScope_Update(GlobalContext* globalCtx)
break;
}
gSaveContext.buttonStatus[0] = D_808321A8[0];
gSaveContext.buttonStatus[1] = D_808321A8[1];
gSaveContext.buttonStatus[2] = D_808321A8[2];
gSaveContext.buttonStatus[3] = D_808321A8[3];
gSaveContext.buttonStatus[4] = D_808321A8[4];
for (int buttonIndex = 0; buttonIndex < ARRAY_COUNT(gSaveContext.buttonStatus); buttonIndex++) {
gSaveContext.buttonStatus[buttonIndex] = sButtonStatusSave[buttonIndex];
}
interfaceCtx->unk_1FA = interfaceCtx->unk_1FC = 0;
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("i=%d LAST_TIME_TYPE=%d\n", i, gSaveContext.unk_13EE);