Compare commits

..

5 Commits

Author SHA1 Message Date
jdflyer b0e2f7915c Entrance Randomizer: Fix edge cases 2026-08-26 00:03:43 -06:00
gymnast86 a9e26784fb fix not clearing previously active seed data when starting a new file 2026-08-25 22:48:09 -07:00
gymnast86 24614615de fix shad dominion rod seed generation failure 2026-08-25 20:34:38 -07:00
gymnast86 9e99db03c4 fix saving and starting with sky characters 2026-08-25 01:49:07 -07:00
gymnast86 af82f701d2 shad dominion rod check 2026-08-25 01:48:46 -07:00
13 changed files with 68 additions and 29 deletions
@@ -1553,24 +1553,23 @@
Parameters: "F01F"
State: -1
# Leave Disabled for now: The Spawn point changes based on progression
# - Type: Interior
# Forward:
# Connection: Castle Town West -> Castle Town STAR Game
# Stage: 74
# Room: 7
# Spawn: 3
# Spawn Type: "10"
# Parameters: "F090"
# State: -1
# Return:
# Connection: Castle Town STAR Game -> Castle Town West
# Stage: 53
# Room: 2
# Spawn: 1
# Spawn Type: "10"
# Parameters: "F01F"
# State: -1
- Type: Interior
Forward:
Connection: Castle Town West -> Castle Town STAR Game
Stage: 74
Room: 7
Spawn: 3
Spawn Type: "10"
Parameters: "F090"
State: -1
Return:
Connection: Castle Town STAR Game -> Castle Town West
Stage: 53
Room: 2
Spawn: 1
Spawn Type: "10"
Parameters: "F01F"
State: -1
- Type: Interior
Entrance Couple Tag: Castle Town Goron House
@@ -71,6 +71,13 @@
parameters: 0x00000032
next: Kakariko Malo Mart Wooden Shield Sold Out
# Patch Shad's flow to set the custom flag for receiving his item
- index: 0x946
type: event
event: set event flag
parameters: 0x0333
next: 0xFFFF
#3: # zel_03.bmg
4: # zel_04.bmg - Castle Town
# Patch Charlo to check for 100 rupees instead of 30
@@ -1509,6 +1509,18 @@
- Ilia Memory Reward
Event Flag: 0x5E04
- Name: Shad Dominion Rod
Original Item: Progressive Dominion Rod
Categories:
- Overworld
- Npc
- Kakariko Village
- ARC
Metadata:
Name Lookup:
- Shad Dominion Rod
Event Flag: 0x6308
- Name: Rutelas Blessing
Original Item: Zora Armor
Categories:
@@ -642,7 +642,7 @@
- Name: Back Slice as Sword
Default Option: "Off"
Options:
- "Off": "Back Slicing without a sword cannot be logically required to do damage."
- "Off": "Back Slicing without a sword can be logically required to do damage."
- "On": "Back Slicing without a sword can be logically required to do damage."
- Name: Ball and Chain Webs
@@ -59,7 +59,6 @@ EventFlags:
- 0x5E10 # Midna text after beating Forest Temple.
- 0x1D40 # Listened to Fyer at drained lake.
- 0x2201 # Plumm initial CS watched.
- 0x2310 # STAR initial CS watched.
- 0x2602 # Talked to Yeto on Snowpeak.
- 0x2840 # Used Ooccoo for the first time.
- 0x3704 # Postman twilight text.
@@ -73,6 +72,8 @@ EventFlags:
- 0x5940 # Met Postman for the first time.
- 0x5D40 # Midna text after Kargarok flight.
- 0x2502 # Watched cutscene with Yeto on top of mountain
- Skip_Minor_Cutscenes == On or Randomize_Interior_Entrances == On:
- 0x2310 # STAR initial CS watched.
- Faron_Woods_Logic == Open:
- 0x0602 # Forest Temple Story Flag
- 0x0C40 # Talked to Farone after clearing Forest Temple
@@ -305,8 +306,9 @@ RegionFlags:
- 0x7E # Jovani Chest CS
- 0x50 # Set flag for Midna breaking Barrier CS.
- 0xBC # Spawn Gengle by default as his actor interferes with the poe soul
- Skip_Minor_Cutscenes == On:
- Skip_Minor_Cutscenes == On or Randomize_Interior_Entrances == On:
- 0x55 # STAR Tent intro CS.
- Skip_Minor_Cutscenes == On:
- 0x7D # Jovani House intro CS.
- Ilia_Memory_Quest >= Statue:
- 0x56 # Remove invisible wall from Doctor
@@ -168,6 +168,7 @@
- Name: Kakariko Renados Sanctuary Basement
Twilight: Eldin
Locations:
Shad Dominion Rod: Progressive_Sky_Book and Can_Complete_Eldin_Twilight
Sanctuary Basement Twilit Insect 1: Can_Defeat_Eldin_Twilit_Insect
Sanctuary Basement Twilit Insect 2: Can_Defeat_Eldin_Twilit_Insect
Sanctuary Basement Twilit Insect 3: Can_Defeat_Eldin_Twilit_Insect
@@ -299,10 +299,10 @@ namespace randomizer::logic::item_pool
itemPool.erase("Gerudo Desert Bulblin Camp Key");
}
// Remove sky book characters if we're starting with the sky canon open
// Remove all but 1 sky book characters if we're starting with the sky canon open
if (world->Setting("City Does Not Require Filled Skybook") == "On")
{
itemPool.erase("Progressive Sky Book");
itemPool["Progressive Sky Book"] = 1;
}
// Remove Small Keys if we're playing without them
@@ -679,10 +679,6 @@ namespace randomizer::logic::world
(this->Setting("Big Keys") == "Keysy" && originalItem->IsBigKey()) ||
(this->Setting("Maps and Compasses") == "Start With" &&
(originalItem->IsDungeonMap() || originalItem->IsCompass())))) ||
// Sky Characters are not randomized, but City in the Sky doesn't require Sky Book Characters (Sky characters
// shouldn't exist)
(this->Setting("Sky Characters") == "Off" && this->Setting("City Does Not Require Filled Skybook") == "On" &&
location->HasCategories("Sky Character")) ||
// We're starting with a shop item, but shop items aren't randomized
(this->Setting("Shop Items") == "Off" && location->HasCategories("Shop") &&
utility::container::ElementInContainer(this->_startingItemPool, originalItem)))
-2
View File
@@ -135,7 +135,6 @@ DEFINE_HOOK(&daNpc_Bans_c::isDelete, daNpc_Bans_c__isDelete);
DEFINE_HOOK(&daNpc_Fairy_c::AppearDemoCall, daNpc_Fairy_c__AppearDemoCall);
DEFINE_HOOK(&daNpcShad_c::Create, daNpcShad_c__Create);
DEFINE_HOOK(&daNpcShad_c::wait_type1, daNpcShad_c__wait_type1);
DEFINE_HOOK(&daNpc_Yelia_c::cutTakeWoodStatue, daNpc_Yelia_c__cutTakeWoodStatue);
@@ -3366,7 +3365,6 @@ ModResult uninstall() {
mods::hook::uninstall<daNpc_Fairy_c__AppearDemoCall>(svc_hook);
mods::hook::uninstall<daNpcShad_c__Create>(svc_hook);
mods::hook::uninstall<daNpcShad_c__wait_type1>(svc_hook);
mods::hook::uninstall<daNpc_Yelia_c__cutTakeWoodStatue>(svc_hook);
@@ -914,6 +914,19 @@ void randomizer_checkAndOverrideEntranceData(const char*& stageName, s8& roomNo,
lastMode = (lastMode&0xFFFFFFF0);
}
// Check if we are going through a randomized entrance with epona, reset the lastMode
// Todo: Create a list of entrances where epona is allowed and don't reset the lastMode if
// Epona can be rode there
if ((lastMode&0xF) == 2 || (lastMode&0xF) == 8) {
lastMode = (lastMode&0xFFFFFFF0);
}
// Override the spawn link will go to if we are going through the Telma's bar entrance during
// Lanayru twilight. The door is ajar in this layer, so going through the normal spawn doesn't work.
if (!dComIfGs_isDarkClearLV(2) && newOverride.stageId == 53 && roomNo == 3 && pointNo == 1) {
pointNo = 30;
}
// mods::log::info("New Stage:{}, {}, {}, {}",stageName,roomNo,pointNo,mapLayer);
}
}
+4
View File
@@ -404,11 +404,14 @@ ModResult onNewSave(void*, ModError*) {
if (hash.empty())
return MOD_ERROR;
deactivateSeed();
if (!activateSeed(hash.c_str()))
return MOD_ERROR;
svc_mng.save->set_blob(svc_mng.mod_ctx, kSeedHashBlobName, hash.data(), hash.size());
setAncientDocumentNum(0);
setupRandomizerFile();
saveAncientDocumentNum();
return MOD_OK;
}
@@ -439,6 +442,7 @@ ModResult onSaveLoaded(void*, ModError*) {
void onSaveWritten(ModContext*, uint32_t, void*) {
const std::string hash = randomizer_GetContext().mHash;
svc_mng.save->set_blob(svc_mng.mod_ctx, kSeedHashBlobName, hash.data(), hash.size());
saveAncientDocumentNum();
}
TextureReplacementHandle logoTexHandle{};
+1
View File
@@ -547,6 +547,7 @@ std::string nameLookupOverride(const std::string& locationName) {
{"Sacred Grove Pedestal Master Sword", ITEM_CHECK_MASTER_SWORD},
{"Sacred Grove Pedestal Shadow Crystal", ITEM_CHECK_SHADOW_CRYSTAL},
{"Sera Shop Slingshot", "shop:R_SP01:75"},
{"Shad Dominion Rod", ITEM_CHECK_SHAD_DOMINION_ROD},
{"Skybook From Impaz", ITEM_CHECK_SKYBOOK},
{"Snowboard Racing Prize", ITEM_CHECK_SNOWBOARD_REWARD},
{"Snowpeak Ruins Dungeon Reward", ITEM_CHECK_DUNGEON_REWARD_SNOWPEAK},
+6
View File
@@ -120,6 +120,12 @@ constexpr std::array kMessageChecks{
.vanillaItem = dItemNo_HORSE_FLUTE_e,
.enqueueAtDisplay = false,
},
MessageCheck{
.group = 2,
.messageId = 6531,
.name = ITEM_CHECK_SHAD_DOMINION_ROD,
.vanillaItem = dItemNo_COPY_ROD_2_e,
}
};
std::unordered_map<LoadedMod*, ModItemChecks> s_modChecks;