make cvar

This commit is contained in:
inspectredc 2024-04-22 23:35:34 +01:00
parent 60a6f8b65c
commit 48513d1dfd
2 changed files with 85 additions and 43 deletions

View File

@ -1369,6 +1369,8 @@ void DrawEnhancementsMenu() {
UIWidgets::Tooltip("Restore a bug from NTSC 1.0 that allows bypassing Bongo Bongo's intro cutscene to quickly kill him");
UIWidgets::PaddedEnhancementCheckbox("Original RBA Values", "gRestoreRBAValues", true, false);
UIWidgets::Tooltip("Restores the original outcomes when performing Reverse Bottle Adventure.");
UIWidgets::PaddedEnhancementCheckbox("Early Eyeball Frog", "gRestorations.EarlyEyeballFrog", true, false);
UIWidgets::Tooltip("Restores a bug from NTSC 1.0/1.1 that allows you to obtain the eyeball frog from King Zora instead of the Zora Tunic by holding shield.");
ImGui::EndMenu();
}

View File

@ -127,19 +127,42 @@ s16 func_80A9C6C0(PlayState* play, Actor* thisx) {
s16 ret = NPC_TALK_STATE_TALKING;
switch (Message_GetState(&play->msgCtx)) {
case TEXT_STATE_DONE:
if (CVarGetInteger("gRestorations.EarlyEyeballFrog", 0)) {
if (Message_ShouldAdvance(play)) {
ret = NPC_TALK_STATE_ITEM_GIVEN;
}
} else {
ret = NPC_TALK_STATE_IDLE;
switch (this->actor.textId) {
case 0x4012:
Flags_SetInfTable(INFTABLE_139);
ret = NPC_TALK_STATE_ACTION;
break;
case 0x401B:
ret = !Message_ShouldAdvance(play) ? NPC_TALK_STATE_TALKING : NPC_TALK_STATE_ACTION;
break;
case 0x401F:
Flags_SetInfTable(INFTABLE_139);
break;
}
}
break;
case TEXT_STATE_CLOSING:
ret = NPC_TALK_STATE_IDLE;
switch (this->actor.textId) {
case 0x4012:
Flags_SetInfTable(INFTABLE_139);
ret = NPC_TALK_STATE_ACTION;
break;
case 0x401B:
ret = !Message_ShouldAdvance(play) ? NPC_TALK_STATE_TALKING : NPC_TALK_STATE_ACTION;
break;
case 0x401F:
Flags_SetInfTable(INFTABLE_139);
break;
if (CVarGetInteger("gRestorations.EarlyEyeballFrog", 0)) {
ret = NPC_TALK_STATE_IDLE;
switch (this->actor.textId) {
case 0x4012:
Flags_SetInfTable(INFTABLE_139);
ret = NPC_TALK_STATE_ACTION;
break;
case 0x401B:
ret = !Message_ShouldAdvance(play) ? NPC_TALK_STATE_TALKING : NPC_TALK_STATE_ACTION;
break;
case 0x401F:
Flags_SetInfTable(INFTABLE_139);
break;
}
}
break;
case TEXT_STATE_DONE_FADING:
@ -159,8 +182,10 @@ s16 func_80A9C6C0(PlayState* play, Actor* thisx) {
break;
}
if (this->actor.textId == 0x4014) {
if (play->msgCtx.choiceIndex == 0 && this->actor.textId == 0x4014) {
// EnKz_SetupGetItem(this, play);
if (play->msgCtx.choiceIndex == 0 && (CVarGetInteger("gRestorations.EarlyEyeballFrog", 0) && this->actor.textId == 0x4014)) {
if (!CVarGetInteger("gRestorations.EarlyEyeballFrog", 0)) {
EnKz_SetupGetItem(this, play);
}
ret = NPC_TALK_STATE_ACTION;
} else {
this->actor.textId = 0x4016;
@ -173,11 +198,6 @@ s16 func_80A9C6C0(PlayState* play, Actor* thisx) {
ret = NPC_TALK_STATE_ACTION;
}
break;
case TEXT_STATE_DONE:
if (Message_ShouldAdvance(play)) {
ret = NPC_TALK_STATE_ITEM_GIVEN;
}
break;
case TEXT_STATE_NONE:
case TEXT_STATE_DONE_HAS_NEXT:
case TEXT_STATE_SONG_DEMO_DONE:
@ -204,30 +224,39 @@ s32 func_80A9C95C(PlayState* play, EnKz* this, s16* talkState, f32 unkf, NpcGetT
s16 sp32;
s16 sp30;
f32 xzDistToPlayer;
// f32 yaw;
f32 yaw;
if (Actor_ProcessTalkRequest(&this->actor, play)) {
*talkState = NPC_TALK_STATE_TALKING;
return 1;
}
// yaw = Math_Vec3f_Yaw(&this->actor.home.pos, &player->actor.world.pos);
// yaw -= this->actor.shape.rot.y;
// if ((fabsf(yaw) > 1638.0f) || (this->actor.xzDistToPlayer < 265.0f)) {
// this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
// return 0;
// }
if (!CVarGetInteger("gRestorations.EarlyEyeballFrog", 0)) {
if (*talkState != NPC_TALK_STATE_IDLE) {
*talkState = updateTalkState(play, &this->actor);
return 0;
}
// this->actor.flags |= ACTOR_FLAG_TARGETABLE;
yaw = Math_Vec3f_Yaw(&this->actor.home.pos, &player->actor.world.pos);
yaw -= this->actor.shape.rot.y;
if ((fabsf(yaw) > 1638.0f) || (this->actor.xzDistToPlayer < 265.0f)) {
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
return 0;
}
this->actor.flags |= ACTOR_FLAG_TARGETABLE;
}
Actor_GetScreenPos(play, &this->actor, &sp32, &sp30);
if (!((sp32 >= -30) && (sp32 < 361) && (sp30 >= -10) && (sp30 < 241))) {
return 0;
}
if (*talkState != NPC_TALK_STATE_IDLE) {
*talkState = updateTalkState(play, &this->actor);
return 0;
if (CVarGetInteger("gRestorations.EarlyEyeballFrog", 0)) {
if (*talkState != NPC_TALK_STATE_IDLE) {
*talkState = updateTalkState(play, &this->actor);
return 0;
}
}
xzDistToPlayer = this->actor.xzDistToPlayer;
@ -244,17 +273,19 @@ s32 func_80A9C95C(PlayState* play, EnKz* this, s16* talkState, f32 unkf, NpcGetT
void func_80A9CB18(EnKz* this, PlayState* play) {
Player* player = GET_PLAYER(play);
f32 yaw;
yaw = Math_Vec3f_Yaw(&this->actor.home.pos, &player->actor.world.pos);
yaw -= this->actor.shape.rot.y;
if ((fabsf(yaw) > 1638.0f) || (this->actor.xzDistToPlayer < 265.0f)) {
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
return 0;
if (CVarGetInteger("gRestorations.EarlyEyeballFrog", 0)) {
f32 yaw;
yaw = Math_Vec3f_Yaw(&this->actor.home.pos, &player->actor.world.pos);
yaw -= this->actor.shape.rot.y;
if ((fabsf(yaw) > 1638.0f) || (this->actor.xzDistToPlayer < 265.0f)) {
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
return 0;
}
this->actor.flags |= ACTOR_FLAG_TARGETABLE;
}
this->actor.flags |= ACTOR_FLAG_TARGETABLE;
if (func_80A9C95C(play, this, &this->interactInfo.talkState, 340.0f, EnKz_GetText, func_80A9C6C0)) {
if (GameInteractor_Should(GI_VB_BE_ABLE_TO_EXCHANGE_RUTOS_LETTER, (this->actor.textId == 0x401A), this) &&
!Flags_GetEventChkInf(EVENTCHKINF_KING_ZORA_MOVED))
@ -276,12 +307,15 @@ void func_80A9CB18(EnKz* this, PlayState* play) {
this->actor.textId = 0x4014;
this->sfxPlayed = false;
player->actor.textId = this->actor.textId;
// this->isTrading = true;
if (!CVarGetInteger("gRestorations.EarlyEyeballFrog", 0)) {
this->isTrading = true;
}
return;
}
}
// this->isTrading = false;
if (!CVarGetInteger("gRestorations.EarlyEyeballFrog", 0)) {
this->isTrading = false;
}
if (Flags_GetInfTable(INFTABLE_139)) {
this->actor.textId = CHECK_QUEST_ITEM(QUEST_SONG_SERENADE) ? 0x4045 : 0x401A;
player->actor.textId = this->actor.textId;
@ -448,7 +482,9 @@ void EnKz_StopMweep(EnKz* this, PlayState* play) {
void EnKz_Wait(EnKz* this, PlayState* play) {
if (this->interactInfo.talkState == NPC_TALK_STATE_ACTION) {
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
if (CVarGetInteger("gRestorations.EarlyEyeballFrog", 0)) {
this->interactInfo.talkState = NPC_TALK_STATE_IDLE;
}
this->actionFunc = EnKz_SetupGetItem;
EnKz_SetupGetItem(this, play);
} else {
@ -475,7 +511,11 @@ void EnKz_SetupGetItem(EnKz* this, PlayState* play) {
Flags_SetRandomizerInf(RAND_INF_ADULT_TRADES_ZD_TRADE_PRESCRIPTION);
}
} else {
getItemId = func_8002F368(play) == EXCH_ITEM_PRESCRIPTION ? GI_FROG : GI_TUNIC_ZORA;
if (CVarGetInteger("gRestorations.EarlyEyeballFrog", 0)) {
getItemId = func_8002F368(play) == EXCH_ITEM_PRESCRIPTION ? GI_FROG : GI_TUNIC_ZORA;
} else {
getItemId = this->isTrading ? GI_FROG : GI_TUNIC_ZORA;
}
yRange = fabsf(this->actor.yDistToPlayer) + 1.0f;
xzRange = this->actor.xzDistToPlayer + 1.0f;
Actor_OfferGetItem(&this->actor, play, getItemId, xzRange, yRange);