mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-08-19 13:00:11 -07:00
Shuffle Grab
AKA str0. Named in-game item Power Bracelet Logic soon
This commit is contained in:
parent
1d20000411
commit
2fce4ab164
16 changed files with 69 additions and 7 deletions
|
@ -1745,6 +1745,14 @@ typedef enum {
|
||||||
// - None
|
// - None
|
||||||
VB_PREVENT_ADULT_STICK,
|
VB_PREVENT_ADULT_STICK,
|
||||||
|
|
||||||
|
// #### `result`
|
||||||
|
// ```c
|
||||||
|
// varies
|
||||||
|
// ```
|
||||||
|
// #### `args`
|
||||||
|
// - None
|
||||||
|
VB_PREVENT_STRENGTH,
|
||||||
|
|
||||||
// #### `result`
|
// #### `result`
|
||||||
// ```c
|
// ```c
|
||||||
// true
|
// true
|
||||||
|
|
|
@ -591,6 +591,10 @@ void GenerateItemPool() {
|
||||||
AddItemToMainPool(RG_PROGRESSIVE_SCALE);
|
AddItemToMainPool(RG_PROGRESSIVE_SCALE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctx->GetOption(RSK_SHUFFLE_GRAB)) {
|
||||||
|
AddItemToMainPool(RG_PROGRESSIVE_STRENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
if (ctx->GetOption(RSK_SHUFFLE_BEEHIVES)) {
|
if (ctx->GetOption(RSK_SHUFFLE_BEEHIVES)) {
|
||||||
// 32 total beehive locations
|
// 32 total beehive locations
|
||||||
AddItemToPool(PendingJunkPool, RG_RED_RUPEE, 23);
|
AddItemToPool(PendingJunkPool, RG_RED_RUPEE, 23);
|
||||||
|
|
|
@ -14,6 +14,7 @@ extern "C" {
|
||||||
#include "dungeon.h"
|
#include "dungeon.h"
|
||||||
#include "objects/object_gi_key/object_gi_key.h"
|
#include "objects/object_gi_key/object_gi_key.h"
|
||||||
#include "objects/object_gi_bosskey/object_gi_bosskey.h"
|
#include "objects/object_gi_bosskey/object_gi_bosskey.h"
|
||||||
|
#include "objects/object_gi_bracelet/object_gi_bracelet.h"
|
||||||
#include "objects/object_gi_compass/object_gi_compass.h"
|
#include "objects/object_gi_compass/object_gi_compass.h"
|
||||||
#include "objects/object_gi_map/object_gi_map.h"
|
#include "objects/object_gi_map/object_gi_map.h"
|
||||||
#include "objects/object_gi_hearts/object_gi_hearts.h"
|
#include "objects/object_gi_hearts/object_gi_hearts.h"
|
||||||
|
@ -1109,6 +1110,22 @@ extern "C" void Randomizer_DrawBronzeScale(PlayState* play, GetItemEntry* getIte
|
||||||
CLOSE_DISPS(play->state.gfxCtx);
|
CLOSE_DISPS(play->state.gfxCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" void Randomizer_DrawPowerBracelet(PlayState* play, GetItemEntry* getItemEntry) {
|
||||||
|
OPEN_DISPS(play->state.gfxCtx);
|
||||||
|
|
||||||
|
Gfx_SetupDL_25Opa(play->state.gfxCtx);
|
||||||
|
|
||||||
|
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx, (char*)__FILE__, __LINE__),
|
||||||
|
G_MTX_MODELVIEW | G_MTX_LOAD);
|
||||||
|
|
||||||
|
gSPGrayscale(POLY_OPA_DISP++, true);
|
||||||
|
gDPSetGrayscaleColor(POLY_OPA_DISP++, 80, 80, 80, 255);
|
||||||
|
gSPDisplayList(POLY_OPA_DISP++, (Gfx*)gGiGoronBraceletDL);
|
||||||
|
gSPGrayscale(POLY_OPA_DISP++, false);
|
||||||
|
|
||||||
|
CLOSE_DISPS(play->state.gfxCtx);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getItemEntry) {
|
extern "C" void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getItemEntry) {
|
||||||
Vec3f pos;
|
Vec3f pos;
|
||||||
OPEN_DISPS(play->state.gfxCtx);
|
OPEN_DISPS(play->state.gfxCtx);
|
||||||
|
|
|
@ -21,6 +21,7 @@ void Randomizer_DrawTriforcePiece(PlayState* play, GetItemEntry getItemEntry);
|
||||||
void Randomizer_DrawTriforcePieceGI(PlayState* play, GetItemEntry getItemEntry);
|
void Randomizer_DrawTriforcePieceGI(PlayState* play, GetItemEntry getItemEntry);
|
||||||
void Randomizer_DrawOcarinaButton(PlayState* play, GetItemEntry* getItemEntry);
|
void Randomizer_DrawOcarinaButton(PlayState* play, GetItemEntry* getItemEntry);
|
||||||
void Randomizer_DrawBronzeScale(PlayState* play, GetItemEntry* getItemEntry);
|
void Randomizer_DrawBronzeScale(PlayState* play, GetItemEntry* getItemEntry);
|
||||||
|
void Randomizer_DrawPowerBracelet(PlayState* play, GetItemEntry* getItemEntry);
|
||||||
void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getItemEntry);
|
void Randomizer_DrawFishingPoleGI(PlayState* play, GetItemEntry* getItemEntry);
|
||||||
void Randomizer_DrawSkeletonKey(PlayState* play, GetItemEntry* getItemEntry);
|
void Randomizer_DrawSkeletonKey(PlayState* play, GetItemEntry* getItemEntry);
|
||||||
void Randomizer_DrawMysteryItem(PlayState* play, GetItemEntry* getItemEntry);
|
void Randomizer_DrawMysteryItem(PlayState* play, GetItemEntry* getItemEntry);
|
||||||
|
|
|
@ -983,6 +983,12 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
|
||||||
*should = false;
|
*should = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case VB_PREVENT_STRENGTH: {
|
||||||
|
if (!Flags_GetRandomizerInf(RAND_INF_CAN_GRAB)) {
|
||||||
|
*should = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case VB_GORONS_CONSIDER_FIRE_TEMPLE_FINISHED: {
|
case VB_GORONS_CONSIDER_FIRE_TEMPLE_FINISHED: {
|
||||||
*should = Flags_GetEventChkInf(EVENTCHKINF_USED_FIRE_TEMPLE_BLUE_WARP);
|
*should = Flags_GetEventChkInf(EVENTCHKINF_USED_FIRE_TEMPLE_BLUE_WARP);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -270,6 +270,10 @@ std::shared_ptr<GetItemEntry> Item::GetGIEntry() const { // NOLINT(*-no-recursio
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case RG_PROGRESSIVE_STRENGTH:
|
case RG_PROGRESSIVE_STRENGTH:
|
||||||
|
if (!logic->CheckRandoInf(RAND_INF_CAN_GRAB)) {
|
||||||
|
actual = RG_POWER_BRACELET;
|
||||||
|
break;
|
||||||
|
}
|
||||||
switch (logic->CurrentUpgrade(UPG_STRENGTH)) {
|
switch (logic->CurrentUpgrade(UPG_STRENGTH)) {
|
||||||
case 0:
|
case 0:
|
||||||
actual = RG_GORONS_BRACELET;
|
actual = RG_GORONS_BRACELET;
|
||||||
|
|
|
@ -349,9 +349,12 @@ void Rando::StaticData::InitItemTable() {
|
||||||
itemTable[RG_OCARINA_C_RIGHT_BUTTON] = Item(RG_OCARINA_C_RIGHT_BUTTON, Text{ "Ocarina C Right Button", "Touche C-Droit de l'Ocarina", "C-Rechts-Taste der Okarina" }, ITEMTYPE_ITEM, GI_MAP, true, LOGIC_OCARINA_C_RIGHT_BUTTON, RHT_OCARINA_C_RIGHT_BUTTON, RG_OCARINA_C_RIGHT_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
itemTable[RG_OCARINA_C_RIGHT_BUTTON] = Item(RG_OCARINA_C_RIGHT_BUTTON, Text{ "Ocarina C Right Button", "Touche C-Droit de l'Ocarina", "C-Rechts-Taste der Okarina" }, ITEMTYPE_ITEM, GI_MAP, true, LOGIC_OCARINA_C_RIGHT_BUTTON, RHT_OCARINA_C_RIGHT_BUTTON, RG_OCARINA_C_RIGHT_BUTTON, OBJECT_GI_MAP, GID_STONE_OF_AGONY, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
||||||
itemTable[RG_OCARINA_C_RIGHT_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton);
|
itemTable[RG_OCARINA_C_RIGHT_BUTTON].SetCustomDrawFunc(Randomizer_DrawOcarinaButton);
|
||||||
|
|
||||||
itemTable[RG_BRONZE_SCALE] = Item(RG_BRONZE_SCALE, Text{ "Bronze Scale", "Écaille de Bronze", "Bronzene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_PROGRESSIVE_WALLET, RHT_BRONZE_SCALE, RG_BRONZE_SCALE, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
itemTable[RG_BRONZE_SCALE] = Item(RG_BRONZE_SCALE, Text{ "Bronze Scale", "Écaille de Bronze", "Bronzene Schuppe" }, ITEMTYPE_ITEM, GI_SCALE_SILVER, true, LOGIC_NONE, RHT_NONE, RG_BRONZE_SCALE, OBJECT_GI_SCALE, GID_SCALE_SILVER, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
||||||
itemTable[RG_BRONZE_SCALE].SetCustomDrawFunc(Randomizer_DrawBronzeScale);
|
itemTable[RG_BRONZE_SCALE].SetCustomDrawFunc(Randomizer_DrawBronzeScale);
|
||||||
|
|
||||||
|
itemTable[RG_POWER_BRACELET] = Item(RG_POWER_BRACELET, Text{ "Power Bracelet", TODO_TRANSLATE, TODO_TRANSLATE }, ITEMTYPE_ITEM, GI_BRACELET, true, LOGIC_NONE, RHT_NONE, RG_POWER_BRACELET, OBJECT_GI_BRACELET, GID_BRACELET, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
||||||
|
itemTable[RG_POWER_BRACELET].SetCustomDrawFunc(Randomizer_DrawPowerBracelet);
|
||||||
|
|
||||||
itemTable[RG_BOMBCHU_BAG] = Item(RG_BOMBCHU_BAG, Text{ "Bombchu Bag", "Sac de Missiles Teigneux", "Krabbelminentasche" }, ITEMTYPE_ITEM, RG_BOMBCHU_BAG, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_BAG, RG_BOMBCHU_BAG, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
itemTable[RG_BOMBCHU_BAG] = Item(RG_BOMBCHU_BAG, Text{ "Bombchu Bag", "Sac de Missiles Teigneux", "Krabbelminentasche" }, ITEMTYPE_ITEM, RG_BOMBCHU_BAG, true, LOGIC_BOMBCHUS, RHT_BOMBCHU_BAG, RG_BOMBCHU_BAG, OBJECT_GI_BOMB_2, GID_BOMBCHU, TEXT_RANDOMIZER_CUSTOM_ITEM, 0x80, CHEST_ANIM_LONG, ITEM_CATEGORY_MAJOR, MOD_RANDOMIZER);
|
||||||
itemTable[RG_BOMBCHU_BAG].SetCustomDrawFunc(Randomizer_DrawBombchuBag);
|
itemTable[RG_BOMBCHU_BAG].SetCustomDrawFunc(Randomizer_DrawBombchuBag);
|
||||||
|
|
||||||
|
|
|
@ -2395,6 +2395,11 @@ void Logic::Reset(bool resetSaveContext /*= true*/) {
|
||||||
SetRandoInf(RAND_INF_CAN_SWIM, true);
|
SetRandoInf(RAND_INF_CAN_SWIM, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If we're not shuffling grab, we start with it
|
||||||
|
if (ctx->GetOption(RSK_SHUFFLE_GRAB).Is(false)) {
|
||||||
|
SetRandoInf(RAND_INF_CAN_GRAB, true);
|
||||||
|
}
|
||||||
|
|
||||||
// If we're not shuffling child's wallet, we start with it
|
// If we're not shuffling child's wallet, we start with it
|
||||||
if (ctx->GetOption(RSK_SHUFFLE_CHILD_WALLET).Is(false)) {
|
if (ctx->GetOption(RSK_SHUFFLE_CHILD_WALLET).Is(false)) {
|
||||||
SetRandoInf(RAND_INF_HAS_WALLET, true);
|
SetRandoInf(RAND_INF_HAS_WALLET, true);
|
||||||
|
|
|
@ -246,11 +246,12 @@ void Settings::CreateOptionDescriptions() {
|
||||||
"This will require finding the buttons before being able to use them in songs.";
|
"This will require finding the buttons before being able to use them in songs.";
|
||||||
|
|
||||||
mOptionDescriptions[RSK_SHUFFLE_SWIM] =
|
mOptionDescriptions[RSK_SHUFFLE_SWIM] =
|
||||||
"Shuffles the ability to Swim into the item pool.\n"
|
"Shuffles the ability to Swim into the item pool as a progressive upgrade before Silver Scale.\n"
|
||||||
"The ability to swim has to be found as an item (you can still be underwater if you use iron boots).\n"
|
"The ability to swim has to be found as an item (you can still be underwater with iron boots).\n"
|
||||||
"\n"
|
"\n"
|
||||||
"If you enter a water entrance without swim you will be respawned on land to prevent infinite death loops.\n"
|
"If you enter a water entrance without swim you will be respawned on land to prevent infinite death loops.\n"
|
||||||
"If you void out in Water Temple you will immediately be kicked out to prevent a softlock.";
|
"If you void out in Water Temple you will immediately be kicked out to prevent a softlock.";
|
||||||
|
mOptionDescriptions[RSK_SHUFFLE_GRAB] = "Shuffle the ability to grab as a progressive upgrade before Goron Bracelet.";
|
||||||
mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG] = "Shuffles the Weird Egg from Malon in to the item pool. Enabling "
|
mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG] = "Shuffles the Weird Egg from Malon in to the item pool. Enabling "
|
||||||
"\"Skip Child Zelda\" disables this feature.\n"
|
"\"Skip Child Zelda\" disables this feature.\n"
|
||||||
"\n"
|
"\n"
|
||||||
|
|
|
@ -5715,6 +5715,8 @@ void Randomizer::CreateCustomMessages() {
|
||||||
GIMESSAGE(RG_BRONZE_SCALE, ITEM_SCALE_SILVER, "You got the %rBronze Scale%w!&The power of buoyancy is yours!",
|
GIMESSAGE(RG_BRONZE_SCALE, ITEM_SCALE_SILVER, "You got the %rBronze Scale%w!&The power of buoyancy is yours!",
|
||||||
"Du hast die %rBronzene Schuppe%w&erhalten! Die Fähigkeit zu&Schwimmen ist nun dein!",
|
"Du hast die %rBronzene Schuppe%w&erhalten! Die Fähigkeit zu&Schwimmen ist nun dein!",
|
||||||
"Vous obtenez l'%rÉcaille de Bronze%w!&Le pouvoir de la flottabilité est&à vous!"),
|
"Vous obtenez l'%rÉcaille de Bronze%w!&Le pouvoir de la flottabilité est&à vous!"),
|
||||||
|
GIMESSAGE(RG_POWER_BRACELET, ITEM_BRACELET, "You got the %rPower Bracelet%w!&Wimp no more!",
|
||||||
|
TODO_TRANSLATE, TODO_TRANSLATE),
|
||||||
GIMESSAGE(RG_FISHING_POLE, ITEM_FISHING_POLE, "You found a lost %rFishing Pole%w!&Time to hit the pond!",
|
GIMESSAGE(RG_FISHING_POLE, ITEM_FISHING_POLE, "You found a lost %rFishing Pole%w!&Time to hit the pond!",
|
||||||
"Du hast eine verlorene %rAngelrute%w&gefunden!&Zeit, im Teich&zu angeln!",
|
"Du hast eine verlorene %rAngelrute%w&gefunden!&Zeit, im Teich&zu angeln!",
|
||||||
"Vous obtenez une %rCanne à pêche%w&perdue!&Il est temps d'aller à %gl'étang%w!"),
|
"Vous obtenez une %rCanne à pêche%w&perdue!&Il est temps d'aller à %gl'étang%w!"),
|
||||||
|
@ -5827,6 +5829,7 @@ extern "C" u8 Return_Item_Entry(GetItemEntry itemEntry, u8 returnItem);
|
||||||
std::map<RandomizerGet, RandomizerInf> randomizerGetToRandInf = {
|
std::map<RandomizerGet, RandomizerInf> randomizerGetToRandInf = {
|
||||||
{ RG_FISHING_POLE, RAND_INF_FISHING_POLE_FOUND },
|
{ RG_FISHING_POLE, RAND_INF_FISHING_POLE_FOUND },
|
||||||
{ RG_BRONZE_SCALE, RAND_INF_CAN_SWIM },
|
{ RG_BRONZE_SCALE, RAND_INF_CAN_SWIM },
|
||||||
|
{ RG_POWER_BRACELET, RAND_INF_CAN_GRAB },
|
||||||
{ RG_QUIVER_INF, RAND_INF_HAS_INFINITE_QUIVER },
|
{ RG_QUIVER_INF, RAND_INF_HAS_INFINITE_QUIVER },
|
||||||
{ RG_BOMB_BAG_INF, RAND_INF_HAS_INFINITE_BOMB_BAG },
|
{ RG_BOMB_BAG_INF, RAND_INF_HAS_INFINITE_BOMB_BAG },
|
||||||
{ RG_BULLET_BAG_INF, RAND_INF_HAS_INFINITE_BULLET_BAG },
|
{ RG_BULLET_BAG_INF, RAND_INF_HAS_INFINITE_BULLET_BAG },
|
||||||
|
|
|
@ -4008,6 +4008,7 @@ typedef enum {
|
||||||
RG_HINT,
|
RG_HINT,
|
||||||
RG_TYCOON_WALLET,
|
RG_TYCOON_WALLET,
|
||||||
RG_BRONZE_SCALE,
|
RG_BRONZE_SCALE,
|
||||||
|
RG_POWER_BRACELET,
|
||||||
RG_CHILD_WALLET,
|
RG_CHILD_WALLET,
|
||||||
RG_BOMBCHU_BAG,
|
RG_BOMBCHU_BAG,
|
||||||
RG_QUIVER_INF,
|
RG_QUIVER_INF,
|
||||||
|
@ -5204,7 +5205,6 @@ typedef enum {
|
||||||
RHT_OCARINA_C_DOWN_BUTTON,
|
RHT_OCARINA_C_DOWN_BUTTON,
|
||||||
RHT_OCARINA_C_LEFT_BUTTON,
|
RHT_OCARINA_C_LEFT_BUTTON,
|
||||||
RHT_OCARINA_C_RIGHT_BUTTON,
|
RHT_OCARINA_C_RIGHT_BUTTON,
|
||||||
RHT_BRONZE_SCALE,
|
|
||||||
RHT_FISHING_POLE,
|
RHT_FISHING_POLE,
|
||||||
RHT_SKELETON_KEY,
|
RHT_SKELETON_KEY,
|
||||||
RHT_EPONA,
|
RHT_EPONA,
|
||||||
|
@ -5773,6 +5773,7 @@ typedef enum {
|
||||||
RSK_SHUFFLE_OCARINA,
|
RSK_SHUFFLE_OCARINA,
|
||||||
RSK_SHUFFLE_OCARINA_BUTTONS,
|
RSK_SHUFFLE_OCARINA_BUTTONS,
|
||||||
RSK_SHUFFLE_SWIM,
|
RSK_SHUFFLE_SWIM,
|
||||||
|
RSK_SHUFFLE_GRAB,
|
||||||
RSK_STARTING_DEKU_SHIELD,
|
RSK_STARTING_DEKU_SHIELD,
|
||||||
RSK_STARTING_KOKIRI_SWORD,
|
RSK_STARTING_KOKIRI_SWORD,
|
||||||
RSK_STARTING_MASTER_SWORD,
|
RSK_STARTING_MASTER_SWORD,
|
||||||
|
|
|
@ -1001,6 +1001,7 @@ DEFINE_RAND_INF(RAND_INF_SPIRIT_TEMPLE_MQ_BEAMOS_SMALL_CRATE)
|
||||||
DEFINE_RAND_INF(RAND_INF_CAUGHT_LOACH)
|
DEFINE_RAND_INF(RAND_INF_CAUGHT_LOACH)
|
||||||
|
|
||||||
DEFINE_RAND_INF(RAND_INF_CAN_SWIM)
|
DEFINE_RAND_INF(RAND_INF_CAN_SWIM)
|
||||||
|
DEFINE_RAND_INF(RAND_INF_CAN_GRAB)
|
||||||
|
|
||||||
DEFINE_RAND_INF(RAND_INF_HAS_WALLET)
|
DEFINE_RAND_INF(RAND_INF_HAS_WALLET)
|
||||||
|
|
||||||
|
|
|
@ -258,6 +258,10 @@ extern "C" void Randomizer_InitSaveFile() {
|
||||||
Flags_SetRandomizerInf(RAND_INF_CAN_SWIM);
|
Flags_SetRandomizerInf(RAND_INF_CAN_SWIM);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Randomizer_GetSettingValue(RSK_SHUFFLE_GRAB) == RO_GENERIC_OFF) {
|
||||||
|
Flags_SetRandomizerInf(RAND_INF_CAN_GRAB);
|
||||||
|
}
|
||||||
|
|
||||||
if (Randomizer_GetSettingValue(RSK_SHUFFLE_CHILD_WALLET) == RO_GENERIC_OFF) {
|
if (Randomizer_GetSettingValue(RSK_SHUFFLE_CHILD_WALLET) == RO_GENERIC_OFF) {
|
||||||
Flags_SetRandomizerInf(RAND_INF_HAS_WALLET);
|
Flags_SetRandomizerInf(RAND_INF_HAS_WALLET);
|
||||||
}
|
}
|
||||||
|
|
|
@ -212,6 +212,7 @@ void Settings::CreateOptions() {
|
||||||
OPT_BOOL(RSK_SHUFFLE_OCARINA, "Shuffle Ocarinas", CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), mOptionDescriptions[RSK_SHUFFLE_OCARINA]);
|
OPT_BOOL(RSK_SHUFFLE_OCARINA, "Shuffle Ocarinas", CVAR_RANDOMIZER_SETTING("ShuffleOcarinas"), mOptionDescriptions[RSK_SHUFFLE_OCARINA]);
|
||||||
OPT_BOOL(RSK_SHUFFLE_OCARINA_BUTTONS, "Shuffle Ocarina Buttons", CVAR_RANDOMIZER_SETTING("ShuffleOcarinaButtons"), mOptionDescriptions[RSK_SHUFFLE_OCARINA_BUTTONS]);
|
OPT_BOOL(RSK_SHUFFLE_OCARINA_BUTTONS, "Shuffle Ocarina Buttons", CVAR_RANDOMIZER_SETTING("ShuffleOcarinaButtons"), mOptionDescriptions[RSK_SHUFFLE_OCARINA_BUTTONS]);
|
||||||
OPT_BOOL(RSK_SHUFFLE_SWIM, "Shuffle Swim", CVAR_RANDOMIZER_SETTING("ShuffleSwim"), mOptionDescriptions[RSK_SHUFFLE_SWIM]);
|
OPT_BOOL(RSK_SHUFFLE_SWIM, "Shuffle Swim", CVAR_RANDOMIZER_SETTING("ShuffleSwim"), mOptionDescriptions[RSK_SHUFFLE_SWIM]);
|
||||||
|
OPT_BOOL(RSK_SHUFFLE_GRAB, "Shuffle Grab", CVAR_RANDOMIZER_SETTING("ShuffleGrab"), mOptionDescriptions[RSK_SHUFFLE_GRAB]);
|
||||||
OPT_BOOL(RSK_SHUFFLE_WEIRD_EGG, "Shuffle Weird Egg", CVAR_RANDOMIZER_SETTING("ShuffleWeirdEgg"), mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG]);
|
OPT_BOOL(RSK_SHUFFLE_WEIRD_EGG, "Shuffle Weird Egg", CVAR_RANDOMIZER_SETTING("ShuffleWeirdEgg"), mOptionDescriptions[RSK_SHUFFLE_WEIRD_EGG]);
|
||||||
OPT_BOOL(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD, "Shuffle Gerudo Membership Card", CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), mOptionDescriptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]);
|
OPT_BOOL(RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD, "Shuffle Gerudo Membership Card", CVAR_RANDOMIZER_SETTING("ShuffleGerudoToken"), mOptionDescriptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD]);
|
||||||
OPT_U8(RSK_SHUFFLE_POTS, "Shuffle Pots", {"Off", "Dungeons", "Overworld", "All Pots"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShufflePots"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_POTS_OFF);
|
OPT_U8(RSK_SHUFFLE_POTS, "Shuffle Pots", {"Off", "Dungeons", "Overworld", "All Pots"}, OptionCategory::Setting, CVAR_RANDOMIZER_SETTING("ShufflePots"), mOptionDescriptions[RSK_SHUFFLE_POTS], WidgetType::Combobox, RO_SHUFFLE_POTS_OFF);
|
||||||
|
@ -1241,6 +1242,7 @@ void Settings::CreateOptions() {
|
||||||
&mOptions[RSK_SHUFFLE_OCARINA],
|
&mOptions[RSK_SHUFFLE_OCARINA],
|
||||||
&mOptions[RSK_SHUFFLE_OCARINA_BUTTONS],
|
&mOptions[RSK_SHUFFLE_OCARINA_BUTTONS],
|
||||||
&mOptions[RSK_SHUFFLE_SWIM],
|
&mOptions[RSK_SHUFFLE_SWIM],
|
||||||
|
&mOptions[RSK_SHUFFLE_GRAB],
|
||||||
&mOptions[RSK_SHUFFLE_WEIRD_EGG],
|
&mOptions[RSK_SHUFFLE_WEIRD_EGG],
|
||||||
&mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD],
|
&mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD],
|
||||||
&mOptions[RSK_SHUFFLE_FISHING_POLE],
|
&mOptions[RSK_SHUFFLE_FISHING_POLE],
|
||||||
|
@ -1519,6 +1521,7 @@ void Settings::CreateOptions() {
|
||||||
&mOptions[RSK_SHUFFLE_OCARINA],
|
&mOptions[RSK_SHUFFLE_OCARINA],
|
||||||
&mOptions[RSK_SHUFFLE_OCARINA_BUTTONS],
|
&mOptions[RSK_SHUFFLE_OCARINA_BUTTONS],
|
||||||
&mOptions[RSK_SHUFFLE_SWIM],
|
&mOptions[RSK_SHUFFLE_SWIM],
|
||||||
|
&mOptions[RSK_SHUFFLE_GRAB],
|
||||||
&mOptions[RSK_SHUFFLE_WEIRD_EGG],
|
&mOptions[RSK_SHUFFLE_WEIRD_EGG],
|
||||||
&mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD],
|
&mOptions[RSK_SHUFFLE_GERUDO_MEMBERSHIP_CARD],
|
||||||
&mOptions[RSK_SHUFFLE_MERCHANTS],
|
&mOptions[RSK_SHUFFLE_MERCHANTS],
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "z_obj_oshihiki.h"
|
#include "z_obj_oshihiki.h"
|
||||||
#include "overlays/actors/ovl_Obj_Switch/z_obj_switch.h"
|
#include "overlays/actors/ovl_Obj_Switch/z_obj_switch.h"
|
||||||
#include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
|
#include "objects/gameplay_dangeon_keep/gameplay_dangeon_keep.h"
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
#include "soh/ResourceManagerHelpers.h"
|
#include "soh/ResourceManagerHelpers.h"
|
||||||
|
|
||||||
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
|
#define FLAGS ACTOR_FLAG_UPDATE_CULLING_DISABLED
|
||||||
|
@ -111,7 +112,7 @@ void ObjOshihiki_RotateXZ(Vec3f* out, Vec3f* in, f32 sn, f32 cs) {
|
||||||
s32 ObjOshihiki_StrongEnough(ObjOshihiki* this) {
|
s32 ObjOshihiki_StrongEnough(ObjOshihiki* this) {
|
||||||
s32 strength;
|
s32 strength;
|
||||||
|
|
||||||
if (this->cantMove) {
|
if (GameInteractor_Should(VB_PREVENT_STRENGTH, this->cantMove)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
strength = Player_GetStrength();
|
strength = Player_GetStrength();
|
||||||
|
|
|
@ -5574,8 +5574,8 @@ void func_8083A0F4(PlayState* play, Player* this) {
|
||||||
} else if ((interactActorId == ACTOR_EN_ISHI) && ((interactRangeActor->params & 0xF) == 1)) {
|
} else if ((interactActorId == ACTOR_EN_ISHI) && ((interactRangeActor->params & 0xF) == 1)) {
|
||||||
Player_SetupAction(play, this, Player_Action_80846260, 0);
|
Player_SetupAction(play, this, Player_Action_80846260, 0);
|
||||||
anim = &gPlayerAnim_link_silver_carry;
|
anim = &gPlayerAnim_link_silver_carry;
|
||||||
} else if (((interactActorId == ACTOR_EN_BOMBF) || (interactActorId == ACTOR_EN_KUSA)) &&
|
} else if (GameInteractor_Should(VB_PREVENT_STRENGTH, ((interactActorId == ACTOR_EN_BOMBF) || (interactActorId == ACTOR_EN_KUSA)) &&
|
||||||
(Player_GetStrength() <= PLAYER_STR_NONE)) {
|
(Player_GetStrength() <= PLAYER_STR_NONE))) {
|
||||||
Player_SetupAction(play, this, Player_Action_80846408, 0);
|
Player_SetupAction(play, this, Player_Action_80846408, 0);
|
||||||
this->actor.world.pos.x =
|
this->actor.world.pos.x =
|
||||||
(Math_SinS(interactRangeActor->yawTowardsPlayer) * 20.0f) + interactRangeActor->world.pos.x;
|
(Math_SinS(interactRangeActor->yawTowardsPlayer) * 20.0f) + interactRangeActor->world.pos.x;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue