mirror of
https://github.com/HarbourMasters/Shipwright
synced 2026-06-11 13:19:51 -04:00
Add the 2 "decoy" crates as NL crates (#6672)
This commit is contained in:
@@ -3004,6 +3004,12 @@ typedef enum {
|
||||
|
||||
// #### `result`
|
||||
// ```c
|
||||
// this->actor.floorHeight <= -10000.0f
|
||||
// ```
|
||||
// #### `args`
|
||||
// - `*EnItem00`
|
||||
VB_ITEM00_KILL,
|
||||
|
||||
// true
|
||||
// ```
|
||||
// #### `args`
|
||||
|
||||
@@ -1220,6 +1220,14 @@ std::map<RandomizerCheck, RandomizerInf> rcToRandomizerInf = {
|
||||
RC_GF_SOUTH_TARGET_WEST_CRATE,
|
||||
RAND_INF_GF_SOUTH_TARGET_WEST_CRATE,
|
||||
},
|
||||
{
|
||||
RC_GF_FAR_AWAY_CRATE_CHILD,
|
||||
RAND_INF_GF_FAR_AWAY_CRATE_CHILD,
|
||||
},
|
||||
{
|
||||
RC_GF_FAR_AWAY_CRATE_ADULT,
|
||||
RAND_INF_GF_FAR_AWAY_CRATE_ADULT,
|
||||
},
|
||||
{
|
||||
RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE,
|
||||
RAND_INF_TH_NEAR_KITCHEN_LEFTMOST_CRATE,
|
||||
|
||||
@@ -248,23 +248,22 @@ void ObjKibako2_RandomizerInit(void* actorRef) {
|
||||
Actor* actor = static_cast<Actor*>(actorRef);
|
||||
auto logicSetting = RAND_GET_OPTION(RSK_LOGIC_RULES);
|
||||
|
||||
// don't shuffle two OOB crates in GF and don't shuffle child GV/GF crates when not in no logic
|
||||
if (actor->id != ACTOR_OBJ_KIBAKO2 ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4051 &&
|
||||
(s16)actor->world.pos.z == -3429) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == -4571 &&
|
||||
(s16)actor->world.pos.z == -3429) ||
|
||||
(logicSetting.IsNot(RO_LOGIC_NO_LOGIC) &&
|
||||
((gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS && (s16)actor->world.pos.x == 3443 &&
|
||||
(s16)actor->world.pos.z == -4876) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -764 &&
|
||||
(s16)actor->world.pos.z == 148) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -860 &&
|
||||
(s16)actor->world.pos.z == -125) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -860 &&
|
||||
(s16)actor->world.pos.z == -150) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDO_VALLEY && (s16)actor->world.pos.x == -860 &&
|
||||
(s16)actor->world.pos.z == -90))))
|
||||
// don't shuffle the no logic crates when not in no logic
|
||||
if (actor->id != ACTOR_OBJ_KIBAKO2 || (logicSetting.IsNot(RO_LOGIC_NO_LOGIC) &&
|
||||
((gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS &&
|
||||
(s16)actor->world.pos.x == -4051 && (s16)actor->world.pos.z == -3429) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS &&
|
||||
(s16)actor->world.pos.x == -4571 && (s16)actor->world.pos.z == -3429) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS &&
|
||||
(s16)actor->world.pos.x == 3443 && (s16)actor->world.pos.z == -4876) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDO_VALLEY &&
|
||||
(s16)actor->world.pos.x == -764 && (s16)actor->world.pos.z == 148) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDO_VALLEY &&
|
||||
(s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -125) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDO_VALLEY &&
|
||||
(s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -150) ||
|
||||
(gPlayState->sceneNum == SCENE_GERUDO_VALLEY &&
|
||||
(s16)actor->world.pos.x == -860 && (s16)actor->world.pos.z == -90))))
|
||||
return;
|
||||
|
||||
ObjKibako2* crateActor = static_cast<ObjKibako2*>(actorRef);
|
||||
@@ -327,6 +326,17 @@ void RegisterShuffleCrates() {
|
||||
*should = true;
|
||||
}
|
||||
});
|
||||
|
||||
// Prevent the randomized items from the "decoy" crates from immediately despawning
|
||||
COND_VB_SHOULD(VB_ITEM00_KILL, shouldRegister, {
|
||||
if (RAND_GET_OPTION(RSK_LOGIC_RULES).Is(RO_LOGIC_NO_LOGIC) && gPlayState->sceneNum == SCENE_GERUDOS_FORTRESS) {
|
||||
EnItem00* item00 = va_arg(args, EnItem00*);
|
||||
|
||||
if (item00->actor.world.pos.x < -3500.0f) {
|
||||
*should &= item00->actor.world.pos.y < -10000.0f;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void Rando::StaticData::RegisterCrateLocations() {
|
||||
@@ -417,6 +427,8 @@ void Rando::StaticData::RegisterCrateLocations() {
|
||||
locationTable[RC_GV_CRATE_BRIDGE_3] = Location::NLCrate(RC_GV_CRATE_BRIDGE_3, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -150), "Near Bridge Crate 3", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_3));
|
||||
locationTable[RC_GV_CRATE_BRIDGE_4] = Location::NLCrate(RC_GV_CRATE_BRIDGE_4, RCQUEST_BOTH, RCAREA_GERUDO_VALLEY, SCENE_GERUDO_VALLEY, TWO_ACTOR_PARAMS(-860, -90), "Near Bridge Crate 4", RHT_CRATE_GERUDO_VALLEY, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GV_CRATE_BRIDGE_4));
|
||||
locationTable[RC_GF_NORTH_TARGET_CHILD_CRATE] = Location::NLCrate(RC_GF_NORTH_TARGET_CHILD_CRATE, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(3443, -4876), "North Target Child Crate", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_NORTH_TARGET_CHILD_CRATE));
|
||||
locationTable[RC_GF_FAR_AWAY_CRATE_CHILD] = Location::NLCrate(RC_GF_FAR_AWAY_CRATE_CHILD, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(-4571, -3429), "Far Away Crate Child", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAR_AWAY_CRATE_CHILD));
|
||||
locationTable[RC_GF_FAR_AWAY_CRATE_ADULT] = Location::NLCrate(RC_GF_FAR_AWAY_CRATE_ADULT, RCQUEST_BOTH, RCAREA_GERUDO_FORTRESS, SCENE_GERUDOS_FORTRESS, TWO_ACTOR_PARAMS(-4051, -3429), "Far Away Crate Adult", RHT_CRATE_GERUDOS_FORTRESS, RG_GREEN_RUPEE, SpoilerCollectionCheck::RandomizerInf(RAND_INF_GF_FAR_AWAY_CRATE_ADULT));
|
||||
|
||||
// MQ Crates
|
||||
// Randomizer Check Randomizer Check Quest Area Scene ID Params Short Name Hint Text Key Vanilla Spoiler Collection Check
|
||||
|
||||
@@ -258,6 +258,9 @@ void RegionTable_Init_GerudoFortress() {
|
||||
}, {
|
||||
//Locations
|
||||
LOCATION(RC_GF_GATE_EXIT_RECTANGLE_SIGN, logic->IsAdult && logic->CanRead()),
|
||||
// "Decoy" crates to look like the crate in wasteland
|
||||
LOCATION(RC_GF_FAR_AWAY_CRATE_CHILD, logic->IsChild && false),
|
||||
LOCATION(RC_GF_FAR_AWAY_CRATE_ADULT, logic->IsAdult && false),
|
||||
}, {
|
||||
//Exits
|
||||
ENTRANCE(RR_GF_OUTSKIRTS, logic->Get(LOGIC_GF_GATE_OPEN)),
|
||||
|
||||
@@ -1329,6 +1329,8 @@ RANDO_ENUM_ITEM(RC_GF_NORTH_TARGET_WEST_CRATE)
|
||||
RANDO_ENUM_ITEM(RC_GF_NORTH_TARGET_CHILD_CRATE)
|
||||
RANDO_ENUM_ITEM(RC_GF_SOUTH_TARGET_EAST_CRATE)
|
||||
RANDO_ENUM_ITEM(RC_GF_SOUTH_TARGET_WEST_CRATE)
|
||||
RANDO_ENUM_ITEM(RC_GF_FAR_AWAY_CRATE_CHILD)
|
||||
RANDO_ENUM_ITEM(RC_GF_FAR_AWAY_CRATE_ADULT)
|
||||
RANDO_ENUM_ITEM(RC_TH_NEAR_KITCHEN_LEFTMOST_CRATE)
|
||||
RANDO_ENUM_ITEM(RC_TH_NEAR_KITCHEN_MID_LEFT_CRATE)
|
||||
RANDO_ENUM_ITEM(RC_TH_NEAR_KITCHEN_MID_RIGHT_CRATE)
|
||||
|
||||
@@ -794,6 +794,8 @@ RANDO_ENUM_ITEM(RAND_INF_GF_NORTH_TARGET_WEST_CRATE)
|
||||
RANDO_ENUM_ITEM(RAND_INF_GF_NORTH_TARGET_CHILD_CRATE)
|
||||
RANDO_ENUM_ITEM(RAND_INF_GF_SOUTH_TARGET_EAST_CRATE)
|
||||
RANDO_ENUM_ITEM(RAND_INF_GF_SOUTH_TARGET_WEST_CRATE)
|
||||
RANDO_ENUM_ITEM(RAND_INF_GF_FAR_AWAY_CRATE_CHILD)
|
||||
RANDO_ENUM_ITEM(RAND_INF_GF_FAR_AWAY_CRATE_ADULT)
|
||||
RANDO_ENUM_ITEM(RAND_INF_TH_NEAR_KITCHEN_LEFTMOST_CRATE)
|
||||
RANDO_ENUM_ITEM(RAND_INF_TH_NEAR_KITCHEN_MID_LEFT_CRATE)
|
||||
RANDO_ENUM_ITEM(RAND_INF_TH_NEAR_KITCHEN_MID_RIGHT_CRATE)
|
||||
|
||||
@@ -823,7 +823,7 @@ void EnItem00_Update(Actor* thisx, PlayState* play) {
|
||||
if (sp3A || D_80157D94[0]) {
|
||||
Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 15.0f, 15.0f, 0x1D);
|
||||
|
||||
if (this->actor.floorHeight <= -10000.0f) {
|
||||
if (GameInteractor_Should(VB_ITEM00_KILL, this->actor.floorHeight <= -10000.0f, this)) {
|
||||
Actor_Kill(&this->actor);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user