mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-07-01 04:20:23 -04:00
Add Easy Butterfly Fairy Cvar (#6833)
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
#include "soh/ShipInit.hpp"
|
||||
#include "soh/Enhancements/randomizer/SeedContext.h"
|
||||
|
||||
extern "C" {
|
||||
#include "src/overlays/actors/ovl_En_Butte/z_en_butte.h"
|
||||
#include "variables.h"
|
||||
extern void EnButte_SetupTransformIntoFairy(EnButte* enButte);
|
||||
}
|
||||
|
||||
void EasyButterflyFairies_Register() {
|
||||
COND_VB_SHOULD(VB_SPAWN_BUTTERFLY_FAIRY_EASY,
|
||||
CVarGetInteger(CVAR_ENHANCEMENT("EasyButterflyFairies"), 0) ||
|
||||
(IS_RANDO && RAND_GET_OPTION(RSK_SHUFFLE_BUTTERFLY_FAIRIES)),
|
||||
{
|
||||
EnButte* enButte = va_arg(args, EnButte*);
|
||||
Player* player = GET_PLAYER(gPlayState);
|
||||
if (player->heldItemAction == PLAYER_IA_DEKU_STICK && enButte->actor.xzDistToPlayer < 60.0f) {
|
||||
EnButte_SetupTransformIntoFairy(enButte);
|
||||
*should = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
static RegisterShipInitFunc initFunc(EasyButterflyFairies_Register,
|
||||
{ CVAR_ENHANCEMENT("EasyButterflyFairies"), "IS_RANDO" });
|
||||
@@ -2403,6 +2403,14 @@ typedef enum {
|
||||
// - `*EnButte`
|
||||
VB_SPAWN_BUTTERFLY_FAIRY,
|
||||
|
||||
// #### `result`
|
||||
// ```c
|
||||
// true
|
||||
// ```
|
||||
// #### `args`
|
||||
// - `*EnButte`
|
||||
VB_SPAWN_BUTTERFLY_FAIRY_EASY,
|
||||
|
||||
// #### `result`
|
||||
// ```c
|
||||
// INV_CONTENT(ITEM_ARROW_FIRE) == ITEM_NONE
|
||||
|
||||
@@ -296,6 +296,18 @@ void SohMenu::AddMenuEnhancements() {
|
||||
.CVar(CVAR_ENHANCEMENT("BetterOwl"))
|
||||
.Options(CheckboxOptions().Tooltip(
|
||||
"The default response to Kaepora Gaebora is always that you understood what he said."));
|
||||
AddWidget(path, "Easy Butterfly Fairies", WIDGET_CVAR_CHECKBOX)
|
||||
.CVar(CVAR_ENHANCEMENT("EasyButterflyFairies"))
|
||||
.PreFunc([](WidgetInfo& info) {
|
||||
info.options->disabled =
|
||||
IS_RANDO &&
|
||||
OTRGlobals::Instance->gRandoContext->GetOption(RSK_SHUFFLE_BUTTERFLY_FAIRIES).Is(RO_GENERIC_ON);
|
||||
info.options->disabledTooltip = "This setting is forcefully enabled because a randomizer savefile with "
|
||||
"\"Butterfly Fairies Shuffle\" is loaded.";
|
||||
})
|
||||
.Options(CheckboxOptions().Tooltip(
|
||||
"Butterflies will transform into a fairy as soon as you approach them with a Deku Stick, "
|
||||
"skipping the need to stand still and let the butterfly land on your stick."));
|
||||
|
||||
AddWidget(path, "Convenience", WIDGET_SEPARATOR_TEXT);
|
||||
AddWidget(path, "Quit Fishing at Door", WIDGET_CVAR_CHECKBOX)
|
||||
|
||||
@@ -338,14 +338,16 @@ void EnButte_FollowLink(EnButte* this, PlayState* play) {
|
||||
|
||||
distSqFromHome = Math3D_Dist2DSq(this->actor.world.pos.x, this->actor.world.pos.z, this->actor.home.pos.x,
|
||||
this->actor.home.pos.z);
|
||||
if (!((player->heldItemAction == PLAYER_IA_DEKU_STICK) && (fabsf(player->actor.speedXZ) < 1.8f) &&
|
||||
(this->swordDownTimer <= 0) && (distSqFromHome < SQ(320.0f)))) {
|
||||
EnButte_SetupFlyAround(this);
|
||||
} else if (distSqFromHome > SQ(240.0f)) {
|
||||
distSqFromSword = Math3D_Dist2DSq(player->meleeWeaponInfo[0].tip.x, player->meleeWeaponInfo[0].tip.z,
|
||||
this->actor.world.pos.x, this->actor.world.pos.z);
|
||||
if (distSqFromSword < SQ(60.0f)) {
|
||||
EnButte_SetupTransformIntoFairy(this);
|
||||
if (GameInteractor_Should(VB_SPAWN_BUTTERFLY_FAIRY_EASY, true, this)) {
|
||||
if (!((player->heldItemAction == PLAYER_IA_DEKU_STICK) && (fabsf(player->actor.speedXZ) < 1.8f) &&
|
||||
(this->swordDownTimer <= 0) && (distSqFromHome < SQ(320.0f)))) {
|
||||
EnButte_SetupFlyAround(this);
|
||||
} else if (distSqFromHome > SQ(240.0f)) {
|
||||
distSqFromSword = Math3D_Dist2DSq(player->meleeWeaponInfo[0].tip.x, player->meleeWeaponInfo[0].tip.z,
|
||||
this->actor.world.pos.x, this->actor.world.pos.z);
|
||||
if (distSqFromSword < SQ(60.0f)) {
|
||||
EnButte_SetupTransformIntoFairy(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user