mirror of
https://github.com/HarbourMasters/Shipwright.git
synced 2024-12-13 11:42:19 -05:00
VBify Ruto (#4602)
This commit is contained in:
parent
4edb83e2f3
commit
bbe3bb72b6
@ -735,14 +735,14 @@ typedef enum {
|
|||||||
#define INFTABLE_12A 0x12A
|
#define INFTABLE_12A 0x12A
|
||||||
#define INFTABLE_138 0x138
|
#define INFTABLE_138 0x138
|
||||||
#define INFTABLE_139 0x139
|
#define INFTABLE_139 0x139
|
||||||
#define INFTABLE_140 0x140
|
#define INFTABLE_140 0x140 // Left her on blue switch in fork room (causes her to spawn in fork room)
|
||||||
#define INFTABLE_RUTO_IN_JJ_MEET_RUTO 0x141
|
#define INFTABLE_RUTO_IN_JJ_MEET_RUTO 0x141 // Jumped down hole from hole room
|
||||||
#define INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME 0x142
|
#define INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME 0x142 // in the basement
|
||||||
#define INFTABLE_143 0x143
|
#define INFTABLE_143 0x143 // Sat down in basement (causes her to get upset if this is set when actor is spawned)
|
||||||
#define INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE 0x144
|
#define INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE 0x144 // Entered the room with the sapphire
|
||||||
#define INFTABLE_145 0x145
|
#define INFTABLE_145 0x145 // Thrown to sapphire (not kidnapped yet)
|
||||||
#define INFTABLE_146 0x146
|
#define INFTABLE_146 0x146 // Kidnapped
|
||||||
#define INFTABLE_147 0x147
|
#define INFTABLE_147 0x147 // Brought ruto back up to holes room, causes her to spawn in holes room instead of basement
|
||||||
#define INFTABLE_160 0x160
|
#define INFTABLE_160 0x160
|
||||||
#define INFTABLE_161 0x161
|
#define INFTABLE_161 0x161
|
||||||
#define INFTABLE_162 0x162
|
#define INFTABLE_162 0x162
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/OTRGlobals.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "src/overlays/actors/ovl_Bg_Bdan_Objects/z_bg_bdan_objects.h"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adjusts the behavior of the elevator to start near the bottom if you are entering the room from the bottom
|
||||||
|
*/
|
||||||
|
void MoveJabuJabuElevator_Register() {
|
||||||
|
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnActorInit>(ACTOR_BG_BDAN_OBJECTS, [](void* actorRef) {
|
||||||
|
Player* player = GET_PLAYER(gPlayState);
|
||||||
|
BgBdanObjects* bgBdanObjects = static_cast<BgBdanObjects*>(actorRef);
|
||||||
|
|
||||||
|
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (bgBdanObjects->dyna.actor.params == 1) {
|
||||||
|
if (player->actor.world.pos.y < -500.0f) {
|
||||||
|
bgBdanObjects->timer = 220;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
@ -0,0 +1,93 @@
|
|||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor.h"
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
#include "soh/OTRGlobals.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include "overlays/actors/ovl_En_Ru1/z_en_ru1.h"
|
||||||
|
#include "assets/objects/object_ru1/object_ru1.h"
|
||||||
|
|
||||||
|
Actor* func_80AEB124(PlayState* play);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SkipChildRutoInteractions_Register() {
|
||||||
|
// Skips the Child Ruto introduction cutscene, where she drops down into the hole in Jabu-Jabu's Belly
|
||||||
|
REGISTER_VB_SHOULD(VB_PLAY_CHILD_RUTO_INTRO, {
|
||||||
|
EnRu1* enRu1 = va_arg(args, EnRu1*);
|
||||||
|
|
||||||
|
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_MEET_RUTO);
|
||||||
|
Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME);
|
||||||
|
Flags_SetInfTable(INFTABLE_143);
|
||||||
|
enRu1->drawConfig = 1;
|
||||||
|
enRu1->actor.world.pos.x = 127.0f;
|
||||||
|
enRu1->actor.world.pos.y = -340.0f;
|
||||||
|
enRu1->actor.world.pos.z = -3041.0f;
|
||||||
|
enRu1->actor.shape.rot.y = enRu1->actor.world.rot.y = -5098;
|
||||||
|
|
||||||
|
if (*should) {
|
||||||
|
Animation_Change(&enRu1->skelAnime, (AnimationHeader*)&gRutoChildTurnAroundAnim, 1.0f, 0,
|
||||||
|
Animation_GetLastFrame((void*)&gRutoChildTurnAroundAnim), ANIMMODE_ONCE, -8.0f);
|
||||||
|
enRu1->action = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
*should = false;
|
||||||
|
});
|
||||||
|
|
||||||
|
// Skips a short dialogue sequence where Ruto tells you to throw her to the Sapphire
|
||||||
|
REGISTER_VB_SHOULD(VB_RUTO_WANT_TO_BE_TOSSED_TO_SAPPHIRE, {
|
||||||
|
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*should) {
|
||||||
|
Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE);
|
||||||
|
*should = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Prevents Ruto from running to the Sapphire when she wants to be tossed to it, instead she just stands up and waits for link to get closer
|
||||||
|
REGISTER_VB_SHOULD(VB_RUTO_RUN_TO_SAPPHIRE, {
|
||||||
|
EnRu1* enRu1 = va_arg(args, EnRu1*);
|
||||||
|
DynaPolyActor* dynaPolyActor = va_arg(args, DynaPolyActor*);
|
||||||
|
|
||||||
|
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*should) {
|
||||||
|
enRu1->unk_28C = (BgBdanObjects*)dynaPolyActor;
|
||||||
|
Flags_SetInfTable(INFTABLE_145);
|
||||||
|
Flags_SetSwitch(gPlayState, 0x02);
|
||||||
|
Flags_SetSwitch(gPlayState, 0x1F);
|
||||||
|
enRu1->action = 42;
|
||||||
|
Animation_Change(&enRu1->skelAnime, (AnimationHeader*)&gRutoChildWait2Anim, 1.0f, 0,
|
||||||
|
Animation_GetLastFrame((void*)&gRutoChildWait2Anim), ANIMMODE_LOOP, -8.0f);
|
||||||
|
enRu1->unk_28C->cameraSetting = 1;
|
||||||
|
Actor* sapphire = func_80AEB124(gPlayState);
|
||||||
|
if (sapphire != NULL) {
|
||||||
|
Actor_Kill(sapphire);
|
||||||
|
}
|
||||||
|
enRu1->actor.room = gPlayState->roomCtx.curRoom.num;
|
||||||
|
*should = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// This overrides the behavior that causes Ruto to get upset at you before sitting back down again when INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME is set
|
||||||
|
GameInteractor::Instance->RegisterGameHookForID<GameInteractor::OnActorInit>(ACTOR_EN_RU1, [](void* actorRef) {
|
||||||
|
EnRu1* enRu1 = static_cast<EnRu1*>(actorRef);
|
||||||
|
if (!CVarGetInteger(CVAR_ENHANCEMENT("TimeSavers.SkipMiscInteractions"), IS_RANDO)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (enRu1->action == 22) {
|
||||||
|
enRu1->action = 27;
|
||||||
|
enRu1->drawConfig = 1;
|
||||||
|
enRu1->actor.flags |= ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_FRIENDLY;
|
||||||
|
Animation_Change(&enRu1->skelAnime, (AnimationHeader*)&gRutoChildSittingAnim, 1.0f, 0.0f,
|
||||||
|
Animation_GetLastFrame((void*)&gRutoChildSittingAnim), ANIMMODE_LOOP, 0.0f);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
@ -10,7 +10,9 @@ void TimeSavers_Register() {
|
|||||||
SkipZeldaFleeingCastle_Register();
|
SkipZeldaFleeingCastle_Register();
|
||||||
SkipIntro_Register();
|
SkipIntro_Register();
|
||||||
// SkipMiscInteractions
|
// SkipMiscInteractions
|
||||||
|
MoveJabuJabuElevator_Register();
|
||||||
MoveMidoInKokiriForest_Register();
|
MoveMidoInKokiriForest_Register();
|
||||||
|
SkipChildRutoInteractions_Register();
|
||||||
FasterHeavyBlockLift_Register();
|
FasterHeavyBlockLift_Register();
|
||||||
FasterRupeeAccumulator_Register();
|
FasterRupeeAccumulator_Register();
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,9 @@ void TimeSavers_Register();
|
|||||||
void SkipZeldaFleeingCastle_Register();
|
void SkipZeldaFleeingCastle_Register();
|
||||||
void SkipIntro_Register();
|
void SkipIntro_Register();
|
||||||
// SkipMiscInteractions
|
// SkipMiscInteractions
|
||||||
|
void MoveJabuJabuElevator_Register();
|
||||||
void MoveMidoInKokiriForest_Register();
|
void MoveMidoInKokiriForest_Register();
|
||||||
|
void SkipChildRutoInteractions_Register();
|
||||||
void FasterHeavyBlockLift_Register();
|
void FasterHeavyBlockLift_Register();
|
||||||
void FasterRupeeAccumulator_Register();
|
void FasterRupeeAccumulator_Register();
|
||||||
|
|
||||||
|
@ -343,6 +343,19 @@ typedef enum {
|
|||||||
VB_GIVE_RANDO_FISHING_PRIZE,
|
VB_GIVE_RANDO_FISHING_PRIZE,
|
||||||
VB_PLAY_THROW_ANIMATION,
|
VB_PLAY_THROW_ANIMATION,
|
||||||
VB_INFLICT_VOID_DAMAGE,
|
VB_INFLICT_VOID_DAMAGE,
|
||||||
|
// Vanilla condition: Close enough & various cutscene checks
|
||||||
|
// Opt: *EnRu1
|
||||||
|
VB_PLAY_CHILD_RUTO_INTRO,
|
||||||
|
// Vanilla condition: !INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE && in the big okto room
|
||||||
|
// Opt: *EnRu1
|
||||||
|
VB_RUTO_WANT_TO_BE_TOSSED_TO_SAPPHIRE,
|
||||||
|
// Vanilla condition: Landed on the platform in the big okto room
|
||||||
|
// Opt: *EnRu1
|
||||||
|
VB_RUTO_RUN_TO_SAPPHIRE,
|
||||||
|
// Vanilla condition: !Flags_GetInfTable(INFTABLE_145)
|
||||||
|
// Opt: *EnRu1
|
||||||
|
VB_RUTO_BE_CONSIDERED_NOT_KIDNAPPED,
|
||||||
|
|
||||||
|
|
||||||
/*** Give Items ***/
|
/*** Give Items ***/
|
||||||
|
|
||||||
|
@ -1552,6 +1552,12 @@ void RandomizerOnVanillaBehaviorHandler(GIVanillaBehavior id, bool* should, va_l
|
|||||||
*should = false;
|
*should = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
// We need to override the vanilla behavior here because the player might sequence break and get Ruto kidnapped before accessing other
|
||||||
|
// checks that require Ruto. So if she's kidnapped we allow her to spawn again
|
||||||
|
case VB_RUTO_BE_CONSIDERED_NOT_KIDNAPPED: {
|
||||||
|
*should = !Flags_GetInfTable(INFTABLE_145) || Flags_GetInfTable(INFTABLE_146);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case VB_FREEZE_ON_SKULL_TOKEN:
|
case VB_FREEZE_ON_SKULL_TOKEN:
|
||||||
case VB_TRADE_TIMER_ODD_MUSHROOM:
|
case VB_TRADE_TIMER_ODD_MUSHROOM:
|
||||||
case VB_TRADE_TIMER_FROG:
|
case VB_TRADE_TIMER_FROG:
|
||||||
|
@ -253,10 +253,11 @@ extern "C" void Randomizer_InitSaveFile() {
|
|||||||
// Flags_SetInfTable(INFTABLE_CHILD_MALON_SAID_EPONA_WAS_AFRAID_OF_YOU);
|
// Flags_SetInfTable(INFTABLE_CHILD_MALON_SAID_EPONA_WAS_AFRAID_OF_YOU);
|
||||||
// Flags_SetInfTable(INFTABLE_SPOKE_TO_INGO_ONCE_AS_ADULT);
|
// Flags_SetInfTable(INFTABLE_SPOKE_TO_INGO_ONCE_AS_ADULT);
|
||||||
|
|
||||||
|
// Now handled by cutscene skips
|
||||||
// Ruto already met in jabu and spawns down the hole immediately
|
// Ruto already met in jabu and spawns down the hole immediately
|
||||||
Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_MEET_RUTO);
|
// Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_MEET_RUTO);
|
||||||
Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME);
|
// Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_TALK_FIRST_TIME);
|
||||||
Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE);
|
// Flags_SetInfTable(INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE);
|
||||||
|
|
||||||
// Now handled by cutscene skips
|
// Now handled by cutscene skips
|
||||||
// Skip cutscenes before Nabooru fight
|
// Skip cutscenes before Nabooru fight
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
#include "objects/object_ru1/object_ru1.h"
|
#include "objects/object_ru1/object_ru1.h"
|
||||||
#include "vt.h"
|
#include "vt.h"
|
||||||
#include "soh/ResourceManagerHelpers.h"
|
#include "soh/ResourceManagerHelpers.h"
|
||||||
|
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
|
||||||
|
|
||||||
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_CAN_PRESS_SWITCH)
|
#define FLAGS (ACTOR_FLAG_TARGETABLE | ACTOR_FLAG_UPDATE_WHILE_CULLED | ACTOR_FLAG_CAN_PRESS_SWITCH)
|
||||||
|
|
||||||
@ -763,14 +764,6 @@ void func_80AEC2C0(EnRu1* this, PlayState* play) {
|
|||||||
func_80AEC070(this, play, something);
|
func_80AEC070(this, play, something);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convenience function used so that Ruto always spawns in Jabu in rando, even after she's been kidnapped
|
|
||||||
// Equivalent to !Flags_GetInfTable(INFTABLE_145) in vanilla
|
|
||||||
bool shouldSpawnRuto() {
|
|
||||||
// Flags_GetInfTable(INFTABLE_146) check is to prevent Ruto from spawning during the short period of time when
|
|
||||||
// she's on the Zora's Sapphire pedestal but hasn't been kidnapped yet (would result in multiple Rutos otherwise)
|
|
||||||
return !Flags_GetInfTable(INFTABLE_145) || (IS_RANDO && (Flags_GetInfTable(INFTABLE_146)));
|
|
||||||
}
|
|
||||||
|
|
||||||
void func_80AEC320(EnRu1* this, PlayState* play) {
|
void func_80AEC320(EnRu1* this, PlayState* play) {
|
||||||
s8 actorRoom;
|
s8 actorRoom;
|
||||||
|
|
||||||
@ -778,7 +771,10 @@ void func_80AEC320(EnRu1* this, PlayState* play) {
|
|||||||
func_80AEB264(this, &gRutoChildWait2Anim, 0, 0, 0);
|
func_80AEB264(this, &gRutoChildWait2Anim, 0, 0, 0);
|
||||||
this->action = 7;
|
this->action = 7;
|
||||||
EnRu1_SetMouthIndex(this, 1);
|
EnRu1_SetMouthIndex(this, 1);
|
||||||
} else if ((Flags_GetInfTable(INFTABLE_147)) && !Flags_GetInfTable(INFTABLE_140) && shouldSpawnRuto()) {
|
} else if (
|
||||||
|
Flags_GetInfTable(INFTABLE_147) && !Flags_GetInfTable(INFTABLE_140) &&
|
||||||
|
GameInteractor_Should(VB_RUTO_BE_CONSIDERED_NOT_KIDNAPPED, !Flags_GetInfTable(INFTABLE_145), this)
|
||||||
|
) {
|
||||||
if (!func_80AEB020(this, play)) {
|
if (!func_80AEB020(this, play)) {
|
||||||
func_80AEB264(this, &gRutoChildWait2Anim, 0, 0, 0);
|
func_80AEB264(this, &gRutoChildWait2Anim, 0, 0, 0);
|
||||||
actorRoom = this->actor.room;
|
actorRoom = this->actor.room;
|
||||||
@ -867,9 +863,9 @@ void func_80AEC780(EnRu1* this, PlayState* play) {
|
|||||||
s32 pad;
|
s32 pad;
|
||||||
Player* player = GET_PLAYER(play);
|
Player* player = GET_PLAYER(play);
|
||||||
|
|
||||||
if ((func_80AEC5FC(this, play)) && (!Play_InCsMode(play)) &&
|
if (GameInteractor_Should(VB_PLAY_CHILD_RUTO_INTRO, (func_80AEC5FC(this, play)) && (!Play_InCsMode(play)) &&
|
||||||
(!(player->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER))) &&
|
(!(player->stateFlags1 & (PLAYER_STATE1_HANGING_OFF_LEDGE | PLAYER_STATE1_CLIMBING_LEDGE | PLAYER_STATE1_CLIMBING_LADDER))) &&
|
||||||
(player->actor.bgCheckFlags & 1)) {
|
(player->actor.bgCheckFlags & 1), this)) {
|
||||||
|
|
||||||
play->csCtx.segment = &D_80AF0880;
|
play->csCtx.segment = &D_80AF0880;
|
||||||
gSaveContext.cutsceneTrigger = 1;
|
gSaveContext.cutsceneTrigger = 1;
|
||||||
@ -1183,8 +1179,11 @@ void func_80AED414(EnRu1* this, PlayState* play) {
|
|||||||
void func_80AED44C(EnRu1* this, PlayState* play) {
|
void func_80AED44C(EnRu1* this, PlayState* play) {
|
||||||
s8 actorRoom;
|
s8 actorRoom;
|
||||||
|
|
||||||
if ((Flags_GetInfTable(INFTABLE_RUTO_IN_JJ_MEET_RUTO)) && shouldSpawnRuto() && !Flags_GetInfTable(INFTABLE_140) &&
|
if (
|
||||||
!Flags_GetInfTable(INFTABLE_147)) {
|
Flags_GetInfTable(INFTABLE_RUTO_IN_JJ_MEET_RUTO) &&
|
||||||
|
GameInteractor_Should(VB_RUTO_BE_CONSIDERED_NOT_KIDNAPPED, !Flags_GetInfTable(INFTABLE_145), this) &&
|
||||||
|
!Flags_GetInfTable(INFTABLE_140) && !Flags_GetInfTable(INFTABLE_147)
|
||||||
|
) {
|
||||||
if (!func_80AEB020(this, play)) {
|
if (!func_80AEB020(this, play)) {
|
||||||
func_80AEB264(this, &gRutoChildWait2Anim, 0, 0, 0);
|
func_80AEB264(this, &gRutoChildWait2Anim, 0, 0, 0);
|
||||||
actorRoom = this->actor.room;
|
actorRoom = this->actor.room;
|
||||||
@ -1550,8 +1549,8 @@ s32 func_80AEE394(EnRu1* this, PlayState* play) {
|
|||||||
colCtx = &play->colCtx;
|
colCtx = &play->colCtx;
|
||||||
floorBgId = this->actor.floorBgId; // necessary match, can't move this out of this block unfortunately
|
floorBgId = this->actor.floorBgId; // necessary match, can't move this out of this block unfortunately
|
||||||
dynaPolyActor = DynaPoly_GetActor(colCtx, floorBgId);
|
dynaPolyActor = DynaPoly_GetActor(colCtx, floorBgId);
|
||||||
if (dynaPolyActor != NULL && dynaPolyActor->actor.id == ACTOR_BG_BDAN_OBJECTS &&
|
if (GameInteractor_Should(VB_RUTO_RUN_TO_SAPPHIRE, dynaPolyActor != NULL && dynaPolyActor->actor.id == ACTOR_BG_BDAN_OBJECTS &&
|
||||||
dynaPolyActor->actor.params == 0 && !Player_InCsMode(play) && play->msgCtx.msgLength == 0) {
|
dynaPolyActor->actor.params == 0 && !Player_InCsMode(play) && play->msgCtx.msgLength == 0, this, dynaPolyActor)) {
|
||||||
func_80AEE02C(this);
|
func_80AEE02C(this);
|
||||||
play->csCtx.segment = &D_80AF10A4;
|
play->csCtx.segment = &D_80AF10A4;
|
||||||
gSaveContext.cutsceneTrigger = 1;
|
gSaveContext.cutsceneTrigger = 1;
|
||||||
@ -1611,7 +1610,7 @@ s32 func_80AEE6D0(EnRu1* this, PlayState* play) {
|
|||||||
s32 pad;
|
s32 pad;
|
||||||
s8 curRoomNum = play->roomCtx.curRoom.num;
|
s8 curRoomNum = play->roomCtx.curRoom.num;
|
||||||
|
|
||||||
if (!Flags_GetInfTable(INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE) && (func_80AEB124(play) != 0)) {
|
if (GameInteractor_Should(VB_RUTO_WANT_TO_BE_TOSSED_TO_SAPPHIRE, !Flags_GetInfTable(INFTABLE_RUTO_IN_JJ_WANTS_TO_BE_TOSSED_TO_SAPPHIRE) && (func_80AEB124(play) != 0), this)) {
|
||||||
if (!Player_InCsMode(play)) {
|
if (!Player_InCsMode(play)) {
|
||||||
Animation_Change(&this->skelAnime, &gRutoChildSeesSapphireAnim, 1.0f, 0,
|
Animation_Change(&this->skelAnime, &gRutoChildSeesSapphireAnim, 1.0f, 0,
|
||||||
Animation_GetLastFrame(&gRutoChildSquirmAnim), ANIMMODE_LOOP, -8.0f);
|
Animation_GetLastFrame(&gRutoChildSquirmAnim), ANIMMODE_LOOP, -8.0f);
|
||||||
@ -2190,8 +2189,11 @@ void func_80AEFF40(EnRu1* this, PlayState* play) {
|
|||||||
void func_80AEFF94(EnRu1* this, PlayState* play) {
|
void func_80AEFF94(EnRu1* this, PlayState* play) {
|
||||||
s8 actorRoom;
|
s8 actorRoom;
|
||||||
|
|
||||||
if ((Flags_GetInfTable(INFTABLE_RUTO_IN_JJ_MEET_RUTO)) && (Flags_GetInfTable(INFTABLE_140)) && shouldSpawnRuto() &&
|
if (
|
||||||
(!(func_80AEB020(this, play)))) {
|
Flags_GetInfTable(INFTABLE_RUTO_IN_JJ_MEET_RUTO) && Flags_GetInfTable(INFTABLE_140) &&
|
||||||
|
GameInteractor_Should(VB_RUTO_BE_CONSIDERED_NOT_KIDNAPPED, !Flags_GetInfTable(INFTABLE_145), this) &&
|
||||||
|
(!(func_80AEB020(this, play)))
|
||||||
|
) {
|
||||||
func_80AEB264(this, &gRutoChildWait2Anim, 0, 0, 0);
|
func_80AEB264(this, &gRutoChildWait2Anim, 0, 0, 0);
|
||||||
actorRoom = this->actor.room;
|
actorRoom = this->actor.room;
|
||||||
this->action = 22;
|
this->action = 22;
|
||||||
|
Loading…
Reference in New Issue
Block a user