mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2025-02-07 02:40:30 -05:00
parent
f6a583446b
commit
54b1505137
@ -212,6 +212,10 @@ typedef enum {
|
||||
// Opt: *BgDyYoseizo
|
||||
// Vanilla condition: see soh/src/overlays/actors/ovl_Bg_Dy_Yoseizo/z_bg_dy_yoseizo.c
|
||||
GI_VB_BE_ELIGIBLE_FOR_GREAT_FAIRY_REWARD,
|
||||
// Vanilla condition: see CheckCarpentersFreed in z_en_ge1 and z_en_ge2
|
||||
GI_VB_GERUDOS_BE_FRIENDLY,
|
||||
// Vanilla condition: switch
|
||||
GI_VB_GTG_GATE_BE_OPEN,
|
||||
|
||||
/*** Play Cutscenes ***/
|
||||
|
||||
@ -308,6 +312,8 @@ typedef enum {
|
||||
// Opt: *EnBomBowlPit
|
||||
GI_VB_GIVE_ITEM_FROM_BOMBCHU_BOWLING,
|
||||
|
||||
GI_VB_GIVE_ITEM_GERUDO_MEMBERSHIP_CARD,
|
||||
|
||||
GI_VB_GIVE_ITEM_FAIRY_OCARINA,
|
||||
GI_VB_GIVE_ITEM_WEIRD_EGG,
|
||||
GI_VB_GIVE_ITEM_LIGHT_ARROW,
|
||||
|
@ -20,7 +20,6 @@ typedef enum {
|
||||
SPOILER_CHK_INF_TABLE,
|
||||
SPOILER_CHK_FISH,
|
||||
SPOILER_CHK_MINIGAME,
|
||||
SPOILER_CHK_GERUDO_MEMBERSHIP_CARD,
|
||||
SPOILER_CHK_POE_POINTS,
|
||||
SPOILER_CHK_SHOP_ITEM,
|
||||
SPOILER_CHK_MASTER_SWORD,
|
||||
|
@ -31,6 +31,7 @@ extern "C" {
|
||||
#include "src/overlays/actors/ovl_En_Hy/z_en_hy.h"
|
||||
#include "src/overlays/actors/ovl_Obj_Comb/z_obj_comb.h"
|
||||
#include "src/overlays/actors/ovl_En_Bom_Bowl_Pit/z_en_bom_bowl_pit.h"
|
||||
#include "src/overlays/actors/ovl_En_Ge1/z_en_ge1.h"
|
||||
#include "adult_trade_shuffle.h"
|
||||
extern SaveContext gSaveContext;
|
||||
extern PlayState* gPlayState;
|
||||
@ -135,6 +136,13 @@ void RandomizerOnFlagSetHandler(int16_t flagType, int16_t flag) {
|
||||
}
|
||||
|
||||
void RandomizerOnSceneFlagSetHandler(int16_t sceneNum, int16_t flagType, int16_t flag) {
|
||||
if (RAND_GET_OPTION(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF &&
|
||||
sceneNum == SCENE_GERUDOS_FORTRESS &&
|
||||
flagType == FLAG_SCENE_SWITCH &&
|
||||
flag == 0x3A) {
|
||||
Flags_SetRandomizerInf(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN);
|
||||
}
|
||||
|
||||
RandomizerCheck rc = GetRandomizerCheckFromSceneFlag(sceneNum, flagType, flag);
|
||||
if (rc == RC_UNKNOWN_CHECK) return;
|
||||
|
||||
@ -964,6 +972,21 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, void
|
||||
}
|
||||
break;
|
||||
}
|
||||
case GI_VB_GERUDOS_BE_FRIENDLY: {
|
||||
*should = CHECK_QUEST_ITEM(QUEST_GERUDO_CARD);
|
||||
break;
|
||||
}
|
||||
case GI_VB_GTG_GATE_BE_OPEN: {
|
||||
if (Flags_GetRandomizerInf(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN)) {
|
||||
*should = true;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case GI_VB_GIVE_ITEM_GERUDO_MEMBERSHIP_CARD: {
|
||||
Flags_SetRandomizerInf(RAND_INF_GF_ITEM_FROM_LEADER_OF_FORTRESS);
|
||||
*should = false;
|
||||
break;
|
||||
}
|
||||
case GI_VB_TRADE_TIMER_ODD_MUSHROOM:
|
||||
case GI_VB_TRADE_TIMER_EYEDROPS:
|
||||
case GI_VB_TRADE_TIMER_FROG:
|
||||
@ -1275,6 +1298,15 @@ void RandomizerOnActorInitHandler(void* actorRef) {
|
||||
enExItem->actionFunc = (EnExItemActionFunc)EnExItem_WaitForObjectRandomized;
|
||||
}
|
||||
}
|
||||
|
||||
if (actor->id == ACTOR_EN_GE1) {
|
||||
EnGe1* enGe1 = static_cast<EnGe1*>(actorRef);
|
||||
auto ge1Type = enGe1->actor.params & 0xFF;
|
||||
if (ge1Type == GE1_TYPE_TRAINING_GROUNDS_GUARD &&
|
||||
Flags_GetRandomizerInf(RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN)) {
|
||||
enGe1->actionFunc = (EnGe1ActionFunc)EnGe1_SetNormalText;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RandomizerRegisterHooks() {
|
||||
|
@ -59,10 +59,6 @@ class SpoilerCollectionCheck {
|
||||
return SpoilerCollectionCheck(SPOILER_CHK_MINIGAME, 0x00, bit);
|
||||
}
|
||||
|
||||
static auto GerudoToken() {
|
||||
return SpoilerCollectionCheck(SPOILER_CHK_GERUDO_MEMBERSHIP_CARD, 0x00, 0x00);
|
||||
}
|
||||
|
||||
static auto BigPoePoints() {
|
||||
return SpoilerCollectionCheck(SPOILER_CHK_POE_POINTS, 0x00, 0x00);
|
||||
}
|
||||
|
@ -659,7 +659,7 @@ void Rando::StaticData::InitLocationTable() { //
|
||||
locationTable[RC_GF_HBA_1000_POINTS] = Location::Base(RC_GF_HBA_1000_POINTS, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GERUDO_FORTRESS, ACTOR_ID_MAX, SCENE_GERUDOS_FORTRESS, 0x00, 0x3E, "GF HBA 1000 Points", "GF HBA 1000 Points", RHT_GF_HBA_1000_POINTS, RG_PIECE_OF_HEART, {}, SpoilerCollectionCheck::InfTable(INFTABLE_190), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY, true);
|
||||
locationTable[RC_GF_HBA_1500_POINTS] = Location::Base(RC_GF_HBA_1500_POINTS, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GERUDO_FORTRESS, ACTOR_ID_MAX, SCENE_GERUDOS_FORTRESS, 0x00, 0x30, "GF HBA 1500 Points", "GF HBA 1500 Points", RHT_GF_HBA_1500_POINTS, RG_PROGRESSIVE_BOW, {}, SpoilerCollectionCheck::ItemGetInf(15), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY, true);
|
||||
// RandoTodo: Do we replace these with the RC_HIDEOUT keys or keep these?
|
||||
locationTable[RC_GF_GERUDO_MEMBERSHIP_CARD] = Location::Base(RC_GF_GERUDO_MEMBERSHIP_CARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GERUDO_FORTRESS, ACTOR_ID_MAX, SCENE_THIEVES_HIDEOUT, 0x00, 0x3A, "GF Gerudo Membership Card", "GF Gerudo Membership Card", RHT_GF_GERUDO_MEMBERSHIP_CARD, RG_GERUDO_MEMBERSHIP_CARD, {}, SpoilerCollectionCheck::GerudoToken(), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY, true);
|
||||
locationTable[RC_GF_GERUDO_MEMBERSHIP_CARD] = Location::Base(RC_GF_GERUDO_MEMBERSHIP_CARD, RCQUEST_BOTH, RCTYPE_STANDARD, RCAREA_GERUDO_FORTRESS, ACTOR_ID_MAX, SCENE_THIEVES_HIDEOUT, 0x00, 0x3A, "GF Gerudo Membership Card", "GF Gerudo Membership Card", RHT_GF_GERUDO_MEMBERSHIP_CARD, RG_GERUDO_MEMBERSHIP_CARD, {}, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_ITEM_FROM_LEADER_OF_FORTRESS), SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY, true);
|
||||
locationTable[RC_GF_NORTH_F1_CARPENTER] = Location::Collectable(RC_GF_NORTH_F1_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, RCAREA_GERUDO_FORTRESS, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3089, 0x0C, "GF North F1 Carpenter", "GF North F1 Carpenter", RHT_GF_NORTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, { Category::cVanillaGFSmallKey }, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY, true);
|
||||
locationTable[RC_GF_NORTH_F2_CARPENTER] = Location::Collectable(RC_GF_NORTH_F2_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, RCAREA_GERUDO_FORTRESS, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 2577, 0x0A, "GF North F2 Carpenter", "GF North F2 Carpenter", RHT_GF_NORTH_F2_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, { Category::cVanillaGFSmallKey }, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY, true);
|
||||
locationTable[RC_GF_SOUTH_F1_CARPENTER] = Location::Collectable(RC_GF_SOUTH_F1_CARPENTER, RCQUEST_BOTH, RCTYPE_GF_KEY, RCAREA_GERUDO_FORTRESS, ACTOR_EN_ITEM00, SCENE_THIEVES_HIDEOUT, 3601, 0x0E, "GF South F1 Carpenter", "GF South F1 Carpenter", RHT_GF_SOUTH_F1_CARPENTER, RG_GERUDO_FORTRESS_SMALL_KEY, { Category::cVanillaGFSmallKey }, SpoilerCollectionCheckGroup::GROUP_GERUDO_VALLEY, true);
|
||||
|
@ -426,8 +426,6 @@ bool HasItemBeenCollected(RandomizerCheck rc) {
|
||||
return Flags_GetRandomizerInf(OTRGlobals::Instance->gRandomizer->GetRandomizerInfFromCheck(rc));
|
||||
case SpoilerCollectionCheckType::SPOILER_CHK_EVENT_CHK_INF:
|
||||
return gSaveContext.eventChkInf[flag / 16] & (0x01 << flag % 16);
|
||||
case SpoilerCollectionCheckType::SPOILER_CHK_GERUDO_MEMBERSHIP_CARD:
|
||||
return CHECK_FLAG_ALL(gSaveContext.eventChkInf[0x09], 0x0F);
|
||||
case SpoilerCollectionCheckType::SPOILER_CHK_GOLD_SKULLTULA:
|
||||
return GET_GS_FLAGS(scene) & flag;
|
||||
case SpoilerCollectionCheckType::SPOILER_CHK_INF_TABLE:
|
||||
|
@ -293,6 +293,8 @@ typedef enum {
|
||||
RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_4,
|
||||
RAND_INF_MARKET_TREASURE_CHEST_GAME_KEY_5,
|
||||
|
||||
RAND_INF_GF_ITEM_FROM_LEADER_OF_FORTRESS,
|
||||
RAND_INF_GF_GTG_GATE_PERMANENTLY_OPEN,
|
||||
// If you add anything to this list, you need to update the size of randomizerInf in z64save.h to be ceil(RAND_INF_MAX / 16)
|
||||
|
||||
RAND_INF_MAX,
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
#include "z_bg_spot12_saku.h"
|
||||
#include "objects/object_spot12_obj/object_spot12_obj.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
|
||||
#define FLAGS 0
|
||||
|
||||
@ -58,15 +59,9 @@ void func_808B3420(BgSpot12Saku* this, PlayState* play, CollisionHeader* collisi
|
||||
void BgSpot12Saku_Init(Actor* thisx, PlayState* play) {
|
||||
BgSpot12Saku* this = (BgSpot12Saku*)thisx;
|
||||
|
||||
// If ER is on, force the gate to always use its permanent flag
|
||||
// (which it only uses in Child Gerudo Fortress in the vanilla game)
|
||||
if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF) {
|
||||
thisx->params = 0x0002;
|
||||
}
|
||||
|
||||
func_808B3420(this, play, &gGerudoFortressGTGShutterCol, DPM_UNK);
|
||||
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
|
||||
if (Flags_GetSwitch(play, this->dyna.actor.params & 0x3F)) {
|
||||
if (GameInteractor_Should(GI_VB_GTG_GATE_BE_OPEN, Flags_GetSwitch(play, this->dyna.actor.params & 0x3F), NULL)) {
|
||||
func_808B3714(this);
|
||||
} else {
|
||||
func_808B3550(this);
|
||||
@ -87,7 +82,7 @@ void func_808B3550(BgSpot12Saku* this) {
|
||||
}
|
||||
|
||||
void func_808B357C(BgSpot12Saku* this, PlayState* play) {
|
||||
if (Flags_GetSwitch(play, this->dyna.actor.params & 0x3F)) {
|
||||
if (GameInteractor_Should(GI_VB_GTG_GATE_BE_OPEN, Flags_GetSwitch(play, this->dyna.actor.params & 0x3F), NULL)) {
|
||||
func_808B35E4(this);
|
||||
this->timer = 20;
|
||||
OnePointCutscene_Init(play, 4170, -99, &this->dyna.actor, MAIN_CAM);
|
||||
@ -131,12 +126,6 @@ void func_808B37AC(BgSpot12Saku* this, PlayState* play) {
|
||||
void BgSpot12Saku_Update(Actor* thisx, PlayState* play) {
|
||||
BgSpot12Saku* this = (BgSpot12Saku*)thisx;
|
||||
|
||||
// If ER is on, when the guard opens the GtG gate its permanent flag will be set.
|
||||
if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_DUNGEON_ENTRANCES) != RO_DUNGEON_ENTRANCE_SHUFFLE_OFF &&
|
||||
Flags_GetSwitch(play, 0x3A)) {
|
||||
Flags_SetSwitch(play, 0x2);
|
||||
}
|
||||
|
||||
if (this->timer > 0) {
|
||||
this->timer--;
|
||||
}
|
||||
|
@ -134,7 +134,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
|
||||
case GE1_TYPE_GATE_OPERATOR:
|
||||
this->hairstyle = GE1_HAIR_STRAIGHT;
|
||||
|
||||
if (EnGe1_CheckCarpentersFreed()) {
|
||||
if (GameInteractor_Should(GI_VB_GERUDOS_BE_FRIENDLY, EnGe1_CheckCarpentersFreed(), NULL)) {
|
||||
this->actionFunc = EnGe1_CheckGate_GateOp;
|
||||
} else {
|
||||
this->actionFunc = EnGe1_WatchForPlayerFrontOnly;
|
||||
@ -144,7 +144,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
|
||||
case GE1_TYPE_NORMAL:
|
||||
this->hairstyle = GE1_HAIR_STRAIGHT;
|
||||
|
||||
if (EnGe1_CheckCarpentersFreed()) {
|
||||
if (GameInteractor_Should(GI_VB_GERUDOS_BE_FRIENDLY, EnGe1_CheckCarpentersFreed(), NULL)) {
|
||||
this->actionFunc = EnGe1_SetNormalText;
|
||||
} else {
|
||||
this->actionFunc = EnGe1_WatchForAndSensePlayer;
|
||||
@ -174,7 +174,7 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
|
||||
|
||||
if (gSaveContext.eventInf[0] & 0x100) {
|
||||
this->actionFunc = EnGe1_TalkAfterGame_Archery;
|
||||
} else if (EnGe1_CheckCarpentersFreed()) {
|
||||
} else if (GameInteractor_Should(GI_VB_GERUDOS_BE_FRIENDLY, EnGe1_CheckCarpentersFreed(), NULL)) {
|
||||
this->actionFunc = EnGe1_Wait_Archery;
|
||||
} else {
|
||||
this->actionFunc = EnGe1_WatchForPlayerFrontOnly;
|
||||
@ -184,13 +184,8 @@ void EnGe1_Init(Actor* thisx, PlayState* play) {
|
||||
case GE1_TYPE_TRAINING_GROUNDS_GUARD:
|
||||
this->hairstyle = GE1_HAIR_STRAIGHT;
|
||||
|
||||
if (EnGe1_CheckCarpentersFreed()) {
|
||||
// If the gtg gate is permanently open, don't let the gaurd charge to open it again
|
||||
if (IS_RANDO && gSaveContext.sceneFlags[93].swch & 0x00000004) {
|
||||
this->actionFunc = EnGe1_SetNormalText;
|
||||
} else {
|
||||
this->actionFunc = EnGe1_CheckForCard_GTGGuard;
|
||||
}
|
||||
if (GameInteractor_Should(GI_VB_GERUDOS_BE_FRIENDLY, EnGe1_CheckCarpentersFreed(), NULL)) {
|
||||
this->actionFunc = EnGe1_CheckForCard_GTGGuard;
|
||||
} else {
|
||||
this->actionFunc = EnGe1_WatchForPlayerFrontOnly;
|
||||
}
|
||||
@ -236,14 +231,6 @@ void EnGe1_SetAnimationIdle(EnGe1* this) {
|
||||
}
|
||||
|
||||
s32 EnGe1_CheckCarpentersFreed(void) {
|
||||
if (IS_RANDO) {
|
||||
if (CHECK_QUEST_ITEM(QUEST_GERUDO_CARD)) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
u16 carpenterFlags = gSaveContext.eventChkInf[9];
|
||||
if (!((carpenterFlags & 1) && (carpenterFlags & 2) && (carpenterFlags & 4) && (carpenterFlags & 8))) {
|
||||
return 0;
|
||||
|
@ -57,4 +57,6 @@ typedef struct EnGe1 {
|
||||
/* 0x02B8 */ EnGe1AnimFunc animFunc;
|
||||
} EnGe1; // size = 0x02BC
|
||||
|
||||
void EnGe1_SetNormalText(EnGe1* enGe1, PlayState* play);
|
||||
|
||||
#endif
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "vt.h"
|
||||
#include "objects/object_gla/object_gla.h"
|
||||
#include "soh/Enhancements/randomizer/randomizer_entrance.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
#include <assert.h>
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED)
|
||||
@ -139,14 +140,14 @@ void EnGe2_Init(Actor* thisx, PlayState* play) {
|
||||
switch (this->actor.params & 0xFF) {
|
||||
case GE2_TYPE_PATROLLING:
|
||||
EnGe2_ChangeAction(this, GE2_ACTION_WALK);
|
||||
if (EnGe2_CheckCarpentersFreed()) {
|
||||
if (GameInteractor_Should(GI_VB_GERUDOS_BE_FRIENDLY, EnGe2_CheckCarpentersFreed(), NULL)) {
|
||||
this->actor.update = EnGe2_UpdateFriendly;
|
||||
this->actor.targetMode = 6;
|
||||
}
|
||||
break;
|
||||
case GE2_TYPE_STATIONARY:
|
||||
EnGe2_ChangeAction(this, GE2_ACTION_STAND);
|
||||
if (EnGe2_CheckCarpentersFreed()) {
|
||||
if (GameInteractor_Should(GI_VB_GERUDOS_BE_FRIENDLY, EnGe2_CheckCarpentersFreed(), NULL)) {
|
||||
this->actor.update = EnGe2_UpdateFriendly;
|
||||
this->actor.targetMode = 6;
|
||||
}
|
||||
@ -227,14 +228,6 @@ s32 Ge2_DetectPlayerInUpdate(PlayState* play, EnGe2* this, Vec3f* pos, s16 yRot,
|
||||
}
|
||||
|
||||
s32 EnGe2_CheckCarpentersFreed(void) {
|
||||
if (IS_RANDO) {
|
||||
if (CHECK_QUEST_ITEM(QUEST_GERUDO_CARD)) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (CHECK_FLAG_ALL(gSaveContext.eventChkInf[EVENTCHKINF_CARPENTERS_FREE_INDEX] &
|
||||
(EVENTCHKINF_CARPENTERS_FREE_MASK_ALL | 0xF0),
|
||||
EVENTCHKINF_CARPENTERS_FREE_MASK_ALL)) {
|
||||
@ -467,16 +460,11 @@ void EnGe2_WaitLookAtPlayer(EnGe2* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void EnGe2_WaitTillCardGiven(EnGe2* this, PlayState* play) {
|
||||
if (Actor_HasParent(&this->actor, play)) {
|
||||
if (Actor_HasParent(&this->actor, play) || !GameInteractor_Should(GI_VB_GIVE_ITEM_GERUDO_MEMBERSHIP_CARD, true, NULL)) {
|
||||
this->actor.parent = NULL;
|
||||
this->actionFunc = EnGe2_SetActionAfterTalk;
|
||||
} else {
|
||||
if (!IS_RANDO) {
|
||||
Actor_OfferGetItem(&this->actor, play, GI_GERUDO_CARD, 10000.0f, 50.0f);
|
||||
} else {
|
||||
GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_GF_GERUDO_MEMBERSHIP_CARD, GI_GERUDO_CARD);
|
||||
GiveItemEntryFromActor(&this->actor, play, getItemEntry, 10000.0f, 50.0f);
|
||||
}
|
||||
Actor_OfferGetItem(&this->actor, play, GI_GERUDO_CARD, 10000.0f, 50.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -485,11 +473,8 @@ void EnGe2_GiveCard(EnGe2* this, PlayState* play) {
|
||||
Message_CloseTextbox(play);
|
||||
this->actor.flags &= ~ACTOR_FLAG_WILL_TALK;
|
||||
this->actionFunc = EnGe2_WaitTillCardGiven;
|
||||
if (!IS_RANDO) {
|
||||
if (GameInteractor_Should(GI_VB_GIVE_ITEM_GERUDO_MEMBERSHIP_CARD, true, NULL)) {
|
||||
Actor_OfferGetItem(&this->actor, play, GI_GERUDO_CARD, 10000.0f, 50.0f);
|
||||
} else {
|
||||
GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_GF_GERUDO_MEMBERSHIP_CARD, GI_GERUDO_CARD);
|
||||
GiveItemEntryFromActor(&this->actor, play, getItemEntry, 10000.0f, 50.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -620,7 +605,7 @@ void EnGe2_Update(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
EnGe2_MoveAndBlink(this, play);
|
||||
|
||||
if (EnGe2_CheckCarpentersFreed() && !(this->stateFlags & GE2_STATE_KO)) {
|
||||
if (GameInteractor_Should(GI_VB_GERUDOS_BE_FRIENDLY, EnGe2_CheckCarpentersFreed(), NULL) && !(this->stateFlags & GE2_STATE_KO)) {
|
||||
this->actor.update = EnGe2_UpdateFriendly;
|
||||
this->actor.targetMode = 6;
|
||||
}
|
||||
@ -645,7 +630,7 @@ void EnGe2_UpdateStunned(Actor* thisx, PlayState* play2) {
|
||||
}
|
||||
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
|
||||
|
||||
if (EnGe2_CheckCarpentersFreed()) {
|
||||
if (GameInteractor_Should(GI_VB_GERUDOS_BE_FRIENDLY, EnGe2_CheckCarpentersFreed(), NULL)) {
|
||||
this->actor.update = EnGe2_UpdateFriendly;
|
||||
this->actor.targetMode = 6;
|
||||
this->actor.colorFilterTimer = 0;
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
#include "z_en_ge3.h"
|
||||
#include "objects/object_geldb/object_geldb.h"
|
||||
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY | ACTOR_FLAG_UPDATE_WHILE_CULLED)
|
||||
|
||||
@ -140,16 +141,11 @@ void EnGe3_WaitLookAtPlayer(EnGe3* this, PlayState* play) {
|
||||
}
|
||||
|
||||
void EnGe3_WaitTillCardGiven(EnGe3* this, PlayState* play) {
|
||||
if (Actor_HasParent(&this->actor, play)) {
|
||||
if (Actor_HasParent(&this->actor, play) || !GameInteractor_Should(GI_VB_GIVE_ITEM_GERUDO_MEMBERSHIP_CARD, true, NULL)) {
|
||||
this->actor.parent = NULL;
|
||||
this->actionFunc = EnGe3_Wait;
|
||||
} else {
|
||||
if (!IS_RANDO) {
|
||||
Actor_OfferGetItem(&this->actor, play, GI_GERUDO_CARD, 10000.0f, 50.0f);
|
||||
} else {
|
||||
GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_GF_GERUDO_MEMBERSHIP_CARD, GI_GERUDO_CARD);
|
||||
GiveItemEntryFromActor(&this->actor, play, getItemEntry, 10000.0f, 50.0f);
|
||||
}
|
||||
Actor_OfferGetItem(&this->actor, play, GI_GERUDO_CARD, 10000.0f, 50.0f);
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,11 +154,8 @@ void EnGe3_GiveCard(EnGe3* this, PlayState* play) {
|
||||
Message_CloseTextbox(play);
|
||||
this->actor.flags &= ~ACTOR_FLAG_WILL_TALK;
|
||||
this->actionFunc = EnGe3_WaitTillCardGiven;
|
||||
if (!IS_RANDO) {
|
||||
if (GameInteractor_Should(GI_VB_GIVE_ITEM_GERUDO_MEMBERSHIP_CARD, true, NULL)) {
|
||||
Actor_OfferGetItem(&this->actor, play, GI_GERUDO_CARD, 10000.0f, 50.0f);
|
||||
} else {
|
||||
GetItemEntry getItemEntry = Randomizer_GetItemFromKnownCheck(RC_GF_GERUDO_MEMBERSHIP_CARD, GI_GERUDO_CARD);
|
||||
GiveItemEntryFromActor(&this->actor, play, getItemEntry, 10000.0f, 50.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user