add randomizer startflags

This commit is contained in:
gymnast86
2026-04-10 17:20:34 -07:00
parent 3547c57de0
commit 87116b871b
14 changed files with 768 additions and 28 deletions
+14
View File
@@ -1268,6 +1268,10 @@ int dComIfGd_setShadow(u32 param_0, s8 param_1, J3DModel* param_2, cXyz* param_3
f32 param_5, f32 param_6, f32 param_7, cBgS_PolyInfo& param_8,
dKy_tevstr_c* param_9, s16 param_10, f32 param_11, TGXTexObj* param_12);
#if TARGET_PC
void dComIfGs_setupRandomizerSave();
#endif
inline dSv_info_c* dComIfGs_getSaveInfo() {
return &g_dComIfG_gameInfo.info;
}
@@ -1930,6 +1934,16 @@ inline u8 dComIfGs_getPalLanguage() {
return g_dComIfG_gameInfo.info.getPlayer().getConfig().getPalLanguage();
}
#if TARGET_PC
// Kinda hacky, but will do for now
inline void dComIfGs_onRegionFlag(int i_stageNo, int i_no) {
auto regionFlags = reinterpret_cast<u8*>(&g_dComIfG_gameInfo.info.getSavedata().getSave(i_stageNo).getBit());
const int offset = i_no / 8;
const int shift = i_no % 8;
regionFlags[offset] |= (0x80 >> shift);
}
#endif
inline BOOL dComIfGs_isSaveTbox(int i_stageNo, int i_no) {
return g_dComIfG_gameInfo.info.getSavedata().getSave(i_stageNo).getBit().isTbox(i_no);
}
+60
View File
@@ -25,6 +25,14 @@
#include <cstdio>
#include <cstring>
#include "dusk/logging.h"
#if TARGET_PC
#include "dusk/randomizer/randomizer.hpp"
#include "dusk/randomizer/utility/yaml.hpp"
#endif
void dComIfG_play_c::ct() {
mWindowNum = 0;
mParticle = NULL;
@@ -2273,6 +2281,58 @@ int dComIfGd_setShadow(u32 param_0, s8 param_1, J3DModel* param_2, cXyz* param_3
}
}
#if TARGET_PC
void dComIfGs_setupRandomizerSave() {
randomizer::Randomizer randomizer;
randomizer.Generate();
auto world = randomizer.GetWorlds()[0].get();
// Set starting flags
auto startFlags = LoadYAML(RANDO_DATA_PATH "startflags.yaml");
// Event Flags
for (const auto& flagNode : startFlags["EventFlags"]) {
if (flagNode.IsScalar()) {
const auto& flag = flagNode.as<u16>();
dComIfGs_onEventBit(flag);
} else if (flagNode.IsMap()) {
const auto& condition = flagNode.begin()->first.as<std::string>();
if (world->EvaluateSettingCondition(condition)) {
DuskLog.debug("Setting flags for {}", condition);
for (const auto& conditionalFlag : flagNode.begin()->second) {
const auto& flag = conditionalFlag.as<u16>();
dComIfGs_onEventBit(flag);
}
}
}
}
// Region Flags
for (const auto& regionNode : startFlags["RegionFlags"]) {
const auto& region = regionNode.first.as<std::string>();
const auto& index = regionNode.second["Index"].as<int>();
const auto& flags = regionNode.second["Flags"];
DuskLog.debug("Setting region flags for {}", region);
// This seems kinda scuffed so maybe we change it later
for (const auto& flagNode : flags) {
if (flagNode.IsScalar()) {
const auto& flag = flagNode.as<int>();
dComIfGs_onRegionFlag(index, flag);
} else if (flagNode.IsMap()) {
const auto& condition = flagNode.begin()->first.as<std::string>();
if (world->EvaluateSettingCondition(condition)) {
for (const auto& conditionalFlag : flagNode.begin()->second) {
const auto& flag = conditionalFlag.as<int>();
dComIfGs_onRegionFlag(index, flag);
}
}
}
}
}
DuskLog.debug("Created Rando Save");
}
#endif
void dComIfGs_gameStart() {
dComIfGp_offEnableNextStage();
+1 -1
View File
@@ -1535,6 +1535,7 @@ void dFile_select_c::nameInput2() {
case 2:
dComIfGs_setHorseName(mpName->getInputStrPtr());
mIsSelectEnd = true;
dComIfGs_setupRandomizerSave();
mDataSelProc = DATASELPROC_NEXT_MODE_WAIT;
}
}
@@ -5601,4 +5602,3 @@ void dFile_select3D_c::calcViewMtx(Mtx param_0) {
cXyz pos2(0.0f, 1.0f, 0.0f);
cMtx_lookAt(param_0, &pos1, &cXyz::Zero, &pos2, 0);
}
@@ -81,6 +81,15 @@
- Dungeon: description
- All: description
- Name: Ilia Memory Quest
Default Option: Vanilla
Options:
- Vanilla: description
- Letter: description
- Invoice: description
- Statue: description
- Charm: description
- Name: Item Scarcity
Default Option: Vanilla
Options:
@@ -251,6 +260,27 @@
- "Off": description
- "On": description
- Name: Active Goron Mines Magnets
Tracker Important: True
Default Option: "Off"
Options:
- "Off": description
- "On": description
- Name: Lower Hyrule Castle Chandelier
Tracker Important: True
Default Option: "Off"
Options:
- "Off": description
- "On": description
- Name: Skip Bridge Donation
Tracker Important: True
Default Option: "Off"
Options:
- "Off": description
- "On": description
######################
# Additional Settings#
######################
+604
View File
@@ -0,0 +1,604 @@
# Flag values taken from: https://github.com/lunarsoap5/Randomizer-Web-Generator-1/blob/development/Generator/Assets/Flags.cs
EventFlags:
- 0x0382 # Gave wooden sword to Talo. Talked to squirrel outside link's house
- 0x0629 # Tame Epona, KB1 trigger activated, Warped Kakariko Bridge Back.
- 0x0F40 # Talked to Doctor for the first time.
- 0x1208 # Can use Sera's Shop.
- 0x1410 # Put Bo outside, ready to wrestle
- 0x0A2F # Bridge of Eldin Stolen, KB1 defeated, KB1 started
- 0x0F68 # Bridge of Eldin Warped Back, forced text when entering dr. clinic, talked to dr before giving invoice
- 0x4088 # Saved monkey from puppets, Visited Gerudo Desert for the first time.
- 0x4118 # Talked to Fado after Faron and Eldin Twilight
- 0x07A0 # Watched Colin CS after KB1, talked to Bo before sumo
- 0x2020 # Master Sword Story Progression
- 0x2010 # Arbiters Grounds Story Progression
- 0x2C10 # Raised the mirror in the Mirror Chamber
- 0x1B38 # Skip Monkey Escort
- 0x1C20 # Talked to Bo after opening boots chest.
- 0x5F20 # Shad leaves sanctuary.
- 0xF701 # Add 256 Rupees to Charlo.
- 0xF8F4 # Add 244 Rupees to Charlo.
- 0x6001 # Talked to Fyer after Lanayru Twilight
- 0x3880 # Talked to Jovani after defeating Poe.
- 0x2208 # Talked to Yeto on top of the mountain after clearing SPR
- 0x3B40 # Won Snowboard race against Yeto.
- 0x2F80 # Talked to Goron outside East Castle Town
- 0x1C10 # Win Sumo round 1 against Bo
- 0x3902 # Released first caught fish in Ordon Day 2
- 0x1002 # Talked to Jaggle after climbing vines.
- 0x0B20 # Talked to Yeta in Snowpeak for the first time
- 0x4308 # Senses unlocked
- 0x4610 # Rode Epona back to Link's House
- 0x0C10 # Midna accompanies Wolf
- Skip_Prologue == On:
- 0x0404 # Talked to Uli Day 1.
- 0x4510 # Saved Talo
- 0x4A60 # Completed Ordon Day 1 and Finished Sword Training.
- 0x1601 # Completed Ordon Day 2.
- 0x1580 # Watched CS for Goats 2 Done.
- Faron_Twilight_Cleared == On:
- 0x057F # Midna Charge Unlocked, Finished Sewers, Met Zelda in swers, Midna cut prison chain, watched sewers intro CS, Escaped Cell in Sewers.
- 0x0610 # Cleared Faron Twilight
- 0x0C08 # Sword and shield removed from wolf's back.
- Eldin_Twilight_Cleared == On:
- 0x0708 # Cleared Eldin Twilight
- 0x0604 # Map Warping unlocked.
- Lanayru_Twilight_Cleared == On:
- 0x0880 # Zora's Domain Thawed.
- 0x0C02 # Lanayru Twilight Story Flag.
- 0x0A10 # Defeated Kargarok Rider at Lake (allows player to howl for Kargorok.);
- Skip_Minor_Cutscenes == On:
- 0x0140 # Talked to Yeto First Time.
- 0x0390 # Jaggle Calls out to Link, talked to Squirrel as Wolf in Ordon.
- 0x06C0 # CS After beating Ordon Shadow, CS after entering Faron Twilight.
- 0x0702 # First Time Talking to Gor Coron in Sumo Hall
- 0x1501 # Talked to Agitha for the first time.
- 0x2001 # Talked to Telma for the first time.
- 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.
- 0x3806 # Hena cabin first time CS, talked to Hena first time.
- 0x3A01 # Talked to Ralis in Graveyard for the first time.
- 0x4002 # Agreed to help Rusl after Snowpeak Ruins.
- 0x4205 # Watched post-ToT Ooccoo CS. Watched Cutscene with Rusl in North Faron Woods.
- 0x4508 # Allows postman letters to show up in inventory.
- 0x4A10 # Saw Talo in cage CS.
- 0x3E02 # City Ooccoo CS watched.
- 0x5940 # Met Postman for the first time.
- 0x5D40 # Midna text after Kargarok flight.
- 0x2502 # Watched cutscene with Yeto on top of mountain
- Faron_Woods_Logic == Open:
- 0x0602 # Forest Temple Story Flag
- 0x0C40 # Talked to Farone after clearing Forest Temple
- 0x5E10 # Midna text after Forest Temple completed
- Skip_Midna's_Desparate_Hour == On:
- 0x0C01 # Midna's Desperate Hour started.
- 0x1E08 # Midna's Deseperate Hour Completed.
- Small_Keys == Keysy:
- 0x0850 # Zora Escort started and completed.
- 0x0480 # Told Yeta about pumpkin.
- 0x0003 # Yeto put pumpkin and cheese in soup.
- 0x1460 # Snowpeak Ruins North and West doors unlocked.
- 0x0120 # Told Yeta about cheese
- Hyrule_Castle_Requirements == Open:
- 0x4208 # Remove Castle Barrier
- Palace_of_Twilight_Requirements == Open:
- 0x2B08 # Mirror of Twilight Repaired.
- Goron_Mines_Entrance != Closed:
- 0x0706 # Talked to Gor Coron, Won Sumo against Gor Coron.
- Arbiters_Does_Not_Require_Bulblin_Camp == On:
- 0x0B40 # Escaped Burning Tent in Bulblin Camp.
- Snowpeak_Does_Not_Require_Reekfish_Scent == On:
- 0x6120 # Got the reekfish and smelled it (removes void in Snowpeak).
- City_Does_Not_Require_Filled_Skybook == On:
- 0x3B08 # Sky Cannon Repaired.
- Randomize_Starting_Spawn == On:
- 0x057A # Finished Sewers, Midna text after entering Faron Twilight, Met Zelda in sewers, Midna cut prison chain, Watched Sewers intro CS, Escaped cell in sewers.
- Ilia_Memory_Quest >= Letter:
- 0x2004 # ToT Story Progression Flag
- 0x0F80 # Renados Letter Check
- Ilia_Memory_Quest >= Statue:
- 0x2710 # Showed Invoice to Doctor
- 0x2F04 # Got Medicine Scent
- 0x2102 # Talked to Louise after Medicine Scent
- 0x2204 # Got Wooden Statue
- Ilia_Memory_Quest >= Charm:
- 0x2340 # Gave statue to Ilia
- 0x2E08 # HV barrier removed
- 0x2280 # Got Ilia's Charm
- Skip_Bridge_Donation == Off:
- 0xF901 # Add 256 Rupees to Malo Mart.
- 0xFAF4 # Add 244 Rupees to Malo Mart.
- Skip_Bridge_Donation == On:
- 0x2E20 # Bridge Fundraising completed.
RegionFlags:
Ordona Province:
Index: 0x00
Flags:
- 0x57 # Spider on Link's Ladder killed.
- 0x63 # Spawn the Chest in Link's House
- 0x7E # Midna jumps to Shop unlocked
- 0x6B # Ordon Spring Portal.
- 0x44 # Midna Text after Ordon Shield (Spawns sword)
- 0x46 # Midna Text after Ordon Sword
- 0x68 # Approach faron wall with Midna
- 0xA0 # Midna allows player to approach Faron Twilight Wall
- 0xBA # Explored area outside Link's house as wolf
- 0x61 # Defeated first bulblin outside link's house
- 0x62 # Defeated second bulblin outside link's house
- 0x60 # Defeated Hugo
- Skip_Minor_Cutscenes == On:
- 0x4A # Ordon Day 3 Intro CS.
- 0x4C # Knocked down Ordon bee nest CS.
- 0x4E # Ordon Ranch first time CS.
- 0x53 # Ilia spring CS watched.
- 0x54 # Ilia spring CS started.
- 0x55 # Ordon Village first time CS.
- 0x56 # Ilia spring CS trigger.
- 0x68 # Approach Faron Twilgiht with Midna CS.
- 0x6E # Enter shield house as wolf CS.
- 0x75 # Midna text after hearing Bo and Jaggle talk about the shield.
- 0x7C # Midna text before jumping to Ordon Shop roof.
- 0x7D # Rusl talking to Uli during wolf night CS.
- 0xB8 # Enter Ordon Village as wolf CS.
Hyrule Castle Sewers and Rooftops:
Index: 0x01
Flags:
- Skip_Minor_Cutscenes == On:
- 0x42 # Midna text after first gate in sewers.
- 0x43 # Midna text after exiting to rooftops.
- 0x51 # Zelda tower intro CS.
- 0x57 # Outside top door intro CS.
- 0x5A # Went to the otherside of the fence in sewers CS.
- 0x5B # Top of stairway intro CS.
- 0x5C # Stairway intro CS.
- 0x7B # Midna text when approaching the rooftop guard.
Faron Woods:
Index: 0x02
Flags:
- 0x63 # Trill lets you shop at his store.
- 0x48 # Talked to Coro after bugs
- 0x60 # Got Lantern Back from Monkey
- 0x61 # Saw bugs move in Coro's house
- 0x7D # Talked to Midna about Coro spirit
- 0x4E # Saved Monkey from Puppets.
- 0x62 # Midna text before jumping to lost woods
- 0x95 # Midna text after warping to North Faron for bridge.
- 0xBF # Burned First cobweb in faron cave
- 0xBE # Burned second cobweb in faron cave
- Skip_Minor_Cutscenes == On:
- 0x74 # Faron intro CS.
- 0x77 # See Faron Light Spirit from afar CS.
- 0x7C # Entered mist area as human.
- Faron_Twilight_Cleared == On:
- 0x46 # Midna jump 1 mist area.
- 0x47 # Midna jump 1 mist area.
- 0x98 # South Faron Portal.
- Small_Keys == Keysy:
- 0x53 # Coro gate unlocked.
- 0x4B # North Faron Gate Unlocked.
Kakariko and Death Mountain:
Index: 0x03
Flags:
- 0xB9 # Barnes sells water bombs.
- 0xB3 # Colin Rescued CS (Malo Mart is Open).
- 0xA4 # Barnes Sells Bombs.
- 0x42 # Big Rock fell at DMT
- 0xA7 # Unlock Jumps to top of Sanctuary
- 0x9A # Kakariko Village intro CS.
- 0x54 # Custom flag. Sets the sign in Kak Malo mart slot 1 to appear.
- 0x99 # Remove wooden shield from Kak Malo Mart counter.
- Skip_Minor_Cutscenes == On:
- 0x49 # Death mountain intro CS.
- 0x83 # Kakariko Graveyard intro CS.
- 0x8C # Midna text after Meteor fell.
- Eldin_Twilight_Cleared == On:
- 0x14 # Collected Tear From Bomb Storage
- 0x1A # Collected Tear From Bomb Storage
- 0x1B # Collected Tear From Bomb Storage
- 0x67 # Ant house entered from top
- 0x64 # Ant house box pushed
- 0x5E # Defeated Ant house Tears of Light bug
- 0x1E # Collected Tear from Ant house
- 0xBD # Done Midna jumps in ant house.
- Small_Keys == Keysy:
- 0xBA # Followed Rutella to graveyard.
- 0xB6 # Started Rutella escort.
- Goron_Mines_Entrance == Open:
- 0x79 # moved death mountain rock to exit
- 0x8F # moved death mountain rock to hot spring water
- 0xB0 # Goron lets you enter elevator in sumo hall
- Ilia_Memory_Quest >= Charm:
- 0x70 # Darbus destroyed HV rocks
Lake Hylia and Zoras Domain:
Index: 0x04
Flags:
- Skip_Minor_Cutscenes == On:
- 0x58 # Talked to Rutella in Lanayru Twilight.
- 0x5F # Zora's domain intro CS twilight.
- 0x67 # Midna text after jumping to Lake from burning bridge.
- 0x6B # Zora's Domain exit flood water cutscene.
- 0x72 # Midna text after arriving at frozen Upper Zora River.
- 0x91 # Midna text after frozen Zora Domain intro CS.
- 0xB0 # Watched CS of Ooccoo running to Sky Cannon.
- Lanayru_Twilight_Cleared == On:
- 0x7F # Lake Hylia has water on Lake Hylia Map.
- Skip_Midna's_Desparate_Hour == On:
- 0x51 # Set flag for MDH Cutscene in Lake Hylia
- Lakebed_Does_Not_Require_Water_Bombs == On:
- 0x70 # Blew up rock in front of lakebed CS.
- 0x78 # Blew up rock in front of lakebed.
# Not sure what Index 5 is
Hyrule Field:
Index: 0x06
Flags:
- 0x4C # Bridge of Eldin Warped back CS.
- 0x7E # Kakariko Gorge placed CS
- 0x83 # Set the flag for the Ganon Barriers in Hyrule Field during Eldin Twilight.
- Skip_Minor_Cutscenes == On:
- 0x68 # Midna text after warping Gorge bridge.
- 0x7C # Midna text after Lanayru Field twilight CS.
- 0x72 # Faron Field intro CS.
- 0x40 # Twilight Lanayru Field intro CS.
- 0x4F # Cutscene of gate outside Kakariko Village.
- 0xB3 # Midna text after entering Lanayru Twilight.
- 0xB4 # Midna text when seeing Lanayru Twilight from far away.
- 0xB6 # Midna text after entering Eldin Twilight.
- 0xB7 # Midna text when seeing Eldin Twilight from far away.
- Lanayru_Twilight_Cleared == On:
- 0x58 # Lake Hylia has water on Hyrule Field Map
- Ilia_Memory_Quest >= Charm:
- 0x43 # Remove HV rocks from Hyrule field
- Skip_Bridge_Donation == On:
- 0x44 # East Castle Town Bridge
Lost Woods and Sacred Grove:
Index: 0x07
Flags:
- 0x58 # Sacred Grove MS Pedestal Map
- Skip_Minor_Cutscenes == On:
- 0x42 # Midna text after pushing block shortcut as human after Grove 2.
- 0x43 # cs after pushing block human
- 0x44 # Lost Woods intro CS.
- Temple_of_Time_Sword_Requirement == None:
- 0x49 # Stairs to Temple of time created.
- 0x4A # Struck master sword pedestal with sword.
- 0x4B # Stairs and window appear and work properly (Past).
- 0xBC # Statue in present is gone.
- Sacred_Grove_Does_Not_Require_Skull_Kid == On:
- 0xB6 # Skull Kid - Human defeated.
- 0xB7 # Lost Woods Turns to day after defeating Skull Kid - Human
- 0x5B # Block pushed down
- 0x42 # Midna text after block pushed down
- 0x43 # cs after pushing block human
Snowpeak Province:
Index: 0x08
Flags:
- Skip_Minor_Cutscenes == On:
- 0x45 # Snowpeak Summit intro CS.
- 0x5E # Midna text outside SPR.
- 0x5F # Snowpeak intro CS.
- Snowpeak_Does_Not_Require_Reekfish_Scent == On:
- 0x49 # Snowpeak summit cs.
- 0x45 # Snowpeak Summit intro CS.
Castle Town:
Index: 0x09
Flags:
- 0x40 # Original Jovani Poe killed. It is replaced with a custom actor.
- 0x76 # Jovani Chest CS 2
- 0x7F # Open Chest to Jovani
- 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:
- 0x55 # STAR Tent intro CS.
- 0x7D # Jovani House intro CS.
- Ilia_Memory_Quest >= Statue:
- 0x56 # Remove invisible wall from Doctor
Gerudo Desert:
Index: 0x0A
Flags:
- 0x99 # Desert Entrance CS.
- 0x20 # Set Freestanding key flag.
- 0x7F # Mirror Raised Cutscene Flag (Places Boar at desert entrance)
- Skip_Minor_Cutscenes == On:
- 0x53 # Mirror Chamber Intro CS.
- Arbiters_Does_Not_Require_Bulblin_Camp == On:
- 0x43 # Explored part 9 of the Bulblin camp area
- 0x44 # Explored part 8 of the Bulblin camp area
- 0x45 # Explored part 7 of the Bulblin camp area
- 0x46 # Explored part 6 of the Bulblin camp area
- 0x47 # Explored part 5 of the Bulblin camp area
- 0x4C # Explored part 2 of the Bulblin camp area
- 0x4D # Explored part 4 of the Bulblin camp area
- 0x4E # Explored part 3 of the Bulblin camp area
Forest Temple:
Index: 0x10
Flags:
- 0x49 # FT Ook Bridge Destroyed
- Skip_Minor_Cutscenes == On:
- 0x41 # Midna text after getting Boomerang.
- 0x42 # Midna text after Ook breaks the bridge.
- 0x47 # Midna text after freeing first monkey.
- 0x49 # Bridge before Ook broken.
- 0x56 # Bokoblins spot Link in windless bridge room.
- 0x57 # Turned bridge in windless bridge room.
- 0x72 # West Tile Worm room intro CS.
- 0x76 # Second monkey room intro CS.
- 0x7C # Big Baba room intro CS.
- 0x7D # Midna text in room before boss room.
- 0x7E # Midna text after saving monkey after defeating Ook.
- 0x85 # Midna text after opening hanging chest.
- 0x83 # East outside room intro CS.
- 0xB6 # Forest Temple intro CS.
- Small_Keys == Keysy:
- 0x54 # Unlocked door to Second Monkey.
- 0x58 # Unlock windless bridge east door.
- 0x61 # Opened big baba monkey cage.
- 0x74 # Opened tile worm monkey cage.
- Big_Keys == Keysy:
- 0x48 # Unlocked Forest Temple Boss Door.
- 0xED # Got Forest Temple Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Forest Temple Compass.
- 0xEF # Got Forest Temple Dungeon Map.
Goron Mines:
Index: 0x11
Flags:
- Skip_Minor_Cutscenes == On:
- 0x43 # Cut rope of door in outside room CS.
- 0x44 # Pressed second button of the main magnet room of the second floor CS trigger.
- 0x45 # Pressed third button in entrance room CS.
- 0x46 # Pressed second button in entrance room CS.
- 0x47 # Cut rope of door in Toadpoli room CS.
- 0x4A # Pressed first button of the main magnet room on the second floor CS.
- 0x68 # Pressed outside magnet switch for first time CS.
- 0x72 # Main magnet room intro CS.
- 0x73 # Main magnet room intro CS trigger.
- 0x7A # Outside room intro CS.
- 0x80 # Room after Bow chest intro CS.
- 0x81 # Pulled Beamos in outside room CS.
- 0x84 # Open gate in Toadpoli room CS.
- 0x85 # Pressed second button in Toadpoli room CS.
- 0x88 # Magnet maze room intro CS.
- 0x8A # Goron Mines intro CS.
- 0x8B # Pressed first button in entrance room CS.
- 0x8C # Open gate in entrance room CS.
- 0xBC # Main magnet room second floor intro CS.
- 0xBD # Main magnet room second floor intro CS trigger.
- 0xBE # Hit crystal switch in room after bow chest CS.
- 0xBF # Room after Bow chest intro CS trigger.
- Small_Keys == Keysy:
- 0x60 # Unlock north door in toadpoli room.
- 0x62 # Unlock west locked door in main magnet room.
- 0x6C # Unlock east outside door.
- Big_Keys == Keysy:
- 0x48 # Unlocked Goron Mines Boss Door.
- 0xED # Got Goron Mines Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Goron Mines Compass.
- 0xEF # Got Goron Mines Dungeon Map.
- Active_Goron_Mines_Magnets == On:
- 0xBB # activated magnet from water before first elder
- 0x8F # activated ceiling maze magnet after first elder
- 0x5B # activated main magnet room 1st magnet
- 0x4A # watched main magnet room 1st magnet cs
- 0x61 # activated main magnet room 2nd magnet
- 0x44 # watched main magnet room 2nd magnet cs
- 0x9E # crystal switch room 1st Iron Boots switch pressed
- 0x83 # crystal switch room 1st Iron Boots switch cs shown
- 0x82 # crystal switch room 1st magnet active
- 0x9F # crystal switch room 2nd Iron Boots switch pressed
- 0x85 # crystal switch room 2nd Iron Boots switch cs shown
- 0x86 # crystal switch room 2nd magnet active
- 0x54 # activated outside room magnet
- 0x68 # watched outside room magnet cs
- 0x8d # activated east wing dodongo room magnet
# Note: the final magnet is not activated because there is a
# softlock when you exit the main magnet room through the top door
# as wolf while the gate beyond the door in the Dodongo room is not
# open. Alternatively if we do open this gate, it leads to much
# more complicated logic and some jank where you can walk through
# Dangoro while he sits there (and the gate covering the door
# animation is also a bit jank). Also you can die during the
# Dangoro fight to appear on the north side of his arena. There are
# too many nuances for it to be reasonable for glitchless logic,
# and also every small key door would require 3 keys.
Lakebed Temple:
Index: 0x12
Flags:
- Skip_Minor_Cutscenes == On:
- 0x46 # Midna Stalactite text in second room.
- 0x7E # Horizontal wheel is turning in east room CS.
- 0x7F # Horizontal wheel is turning in east room CS trigger.
- 0xA5 # Central room intro CS.
- 0xA6 # South bridge to main room intro CS.
- 0xA7 # Lakebed Temple intro CS.
- 0xAA # Rotate staircase main room CS.
- 0xB4 # East water supply Chu Worm CS.
- Small_Keys == Keysy:
- 0x6B # Unlock east door main room 2F.
- 0x7B # Unlocked door in second east room 2F.
- 0x7C # Unlocked door before Deku Toad.
- Big_Keys == Keysy:
- 0x8A # Unlocked Lakebed Temple Boss Door.
- 0xED # Got Lakebed Temple Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Lakebed Temple Compass.
- 0xEF # Got Lakebed Temple Dungeon Map.
Arbiters Grounds:
Index: 0x13
Flags:
- Skip_Minor_Cutscenes == On:
- 0x5A # Turn walls in third room Basement second floor CS.
- 0x73 # Arbiters Grounds intro CS.
- 0x94 # Risen tracks on pilar before boss CS.
- Small_Keys == Keysy:
- 0x78 # Unlocked door in second east room 2F.
- 0x84 # Unlocked door in elevator room 2B.
- 0x85 # Unlocked door in first room.
- 0x92 # Unlocked door in first east room 1F.
- 0x99 # Unlocked door in fourth east room.
- Big_Keys == Keysy:
- 0x47 # Unlocked Arbiter's Grounds Boss Door.
- 0xED # Got Arbiter's Grounds Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Arbiter's Grounds Compass.
- 0xEF # Got Arbiter's Grounds Dungeon Map.
Snowpeak Ruins:
Index: 0x14
Flags:
- Skip_Minor_Cutscenes == On:
- 0x83 # First Floor Northwest room intro CS.
- 0xA1 # Midna text after finding Bedroom Key.
- 0xA7 # Snowpeak Ruins intro CS.
- 0xAA # Freezard in cage CS.
- 0xAC # Courtyard intro CS.
- 0xAE # Pumpkin room intro CS.
- 0xB2 # Midna text after getting Cheese.
- 0xB4 # Midna text after getting Pumpkin.
- Small_Keys == Keysy:
- 0x4D # Unlock North lobby door.
- 0x4C # Unlock West lobby door.
- 0x6F # Unlock door in southeast room 2F.
- 0x73 # Unlock door in east outside hallway.
- 0x74 # Unlock west door in courtyard.
- 0x70 # Unlock door to lobby from Freezard room.
- Big_Keys == Keysy:
- 0x57 # Unlocked Snowpeak Ruins Boss Door.
- 0xED # Got Snowpeak Ruins Big Key.
- 0x56 # Watched CS of Yeta entering boss room.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Snowpeak Ruins Compass.
- 0xEF # Got Snowpeak Ruins Dungeon Map.
Temple of Time:
Index: 0x15
Flags:
- Skip_Minor_Cutscenes == On:
- 0x40 # Midna text telling you to use your senses on the missing statue.
- 0x41 # Midna text after using senses on missing statue.
- 0x4A # Temple of Time intro CS.
- 0x4B # Scales of Time room intro CS.
- 0x4C # CS after changing the balance on the scales for the first time.
- 0x4D # CS trigger after changing the balance on the scales for the first time.
- 0x90 # Pressed button in room 1 for the first time CS.
- 0x91 # Pressed the button on the seventh floor for the first time CS.
- 0x94 # Pressed the button on the fifth floor for the first time CS.
- 0x95 # Pressed buttons on third floor for the first time CS.
- 0x96 # Pressed the button on the second floor for the first time CS.
- 0x54 # statue getting possessed for the first time cs
- Small_Keys == Keysy:
- 0x44 # Unlock door in room 1.
- 0x42 # Unlock door in room 6 on 8F.
- 0x43 # Unlock door in 5F.
- Big_Keys == Keysy:
- 0x7F # Unlocked Temple of Time Boss Door.
- 0xED # Got Temple of Time Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Temple of Time Compass.
- 0xEF # Got Temple of Time Dungeon Map.
- Open_Door_of_Time == On:
- 0x59 # deactivate statue slot in room 1 (opens door and deactivates statue)
- 0x80 # open big door in room 1 cs part 2
- 0x81 # open big door in room 1 cs part 1
- 0xBC # big door in room 1 opens
- 0xBE # open big door in room 1 cs part 1 trigger
- 0xBD # open big door in room 1 cs part 2 trigger
- 0xBF # statue placed in slot in room 1
City in the Sky:
Index: 0x16
Flags:
- Skip_Minor_Cutscenes == On:
- 0x64 # North wing main room intro CS.
- 0x65 # East wing fan room second floor intro CS.
- 0x66 # Went beyond first gate outside shop intro CS.
- 0x67 # City in The Sky intro CS.
- 0x6E # East bridge extended CS.
- Small_Keys == Keysy:
- 0x59 # Unlock east bridge door.
- Big_Keys == Keysy:
- 0x58 # Unlocked City in The Sky Boss Door.
- 0xED # Got City in The Sky Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got City in The Sky Compass.
- 0xEF # Got City in The Sky Dungeon Map.
Palace of Twilight:
Index: 0x17
Flags:
- Skip_Minor_Cutscenes == On:
- 0x4D # Phantom Zant 1 CS.
- 0x66 # Midna text when west hand steals sol.
- 0x6F # Midna text about black fog in west room.
- 0x70 # Midna text after finding west sol.
- 0x72 # Midna text trigger when seeing a Twili for the first time.
- 0x78 # Midna text when seeing a Twili for the first time.
- 0x79 # Midna text after Light Sword cutscene.
- 0x95 # Midna text after re-entering west wing after sol was stolen.
- 0x9E # Midna text at dungeon entrance.
- 0xB3 # Watched east wing second room stairs CS.
- Small_Keys == Keysy:
- 0x57 # Unlock door in north room 3.
- 0x58 # Unlock door in east room 2.
- 0x59 # Unlock door in west room 2.
- 0x6C # Unlock door in north room 2.
- 0x7A # Unlock door in norht room 1.
- 0x7B # Unlock door in east room 1.
- 0x7C # Unlock door in west room 1.
- Big_Keys == Keysy:
- 0x56 # Unlocked Palace of Twilight Boss Door.
- 0xED # Got Palace of Twilight Big Key.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Palace of Twilight Compass.
- 0xEF # Got Palace of Twilight Dungeon Map.
Hyrule Castle:
Index: 0x18
Flags:
- Skip_Minor_Cutscenes == On:
- 0x4F # Hyrule Castle Graveyard intro CS.
- 0x8C # East garden intro CS.
- 0x8D # East garden intro CS trigger.
- 0x77 # Midna text at the east end of the east garden.
- 0x82 # South garden intro CS.
- 0x99 # Double Darknut room intro CS
- 0xA4 # Midna text after Owl Statue chest in graveyard.
- 0xB7 # Lit southeast torch in second floor north room for the first time CS.
- 0xB8 # Lit northeast torch in second floor north room for the first time CS.
- Small_Keys == Keysy:
- 0x93 # Unlock door outside 3F.
- 0xB0 # Unlock treasure room door.
- 0xA3 # Unlock door in south garden.
- Maps_and_Compasses == Start_With:
- 0xEE # Got Hyrule Castle Compass.
- 0xEF # Got Hyrule Castle Dungeon Map.
- Lower_Hyrule_Castle_Chandelier == On:
- 0x6F # watched double Dinalfos cs 1
- 0x70 # watched double Dinalfos cs 2
- 0x85 # watched focus on lowered chandelier cs
- 0x9D # lower the main hall chandelier
- 0xAF # defeated double Dinalfos (opens gates both sides)
@@ -32,7 +32,7 @@
Goron Mines Main Magnet Room Bottom Chest: Nothing
Exits:
Goron Mines Magnet Ceiling Room Lower: Goron_Mines_Small_Key or Small_Keys == Keysy
Goron Mines Central Magnet Room Center Tower: "'Can_Activate_Central_Tower_Magnet'"
Goron Mines Central Magnet Room Center Tower: (Active_Goron_Mines_Magnets == On and Iron_Boots) or 'Can_Activate_Central_Tower_Magnet'
Goron Mines Entrance Room Near Central Magnet Room: Nothing
- Name: Goron Mines Central Magnet Room Center Tower
@@ -333,4 +333,4 @@
Goron Mines Fyrus Heart Container: Can_Defeat_Fyrus
Goron Mines Dungeon Reward: Can_Defeat_Fyrus
Exits:
Lower Kakariko Village: Can_Defeat_Fyrus
Lower Kakariko Village: Can_Defeat_Fyrus
@@ -76,6 +76,7 @@
Exits:
Hyrule Castle Main Hall Near Entrance: Can_Defeat_Bokoblin and Can_Defeat_Lizalfos
Hyrule Castle Main Hall Near First Darknut Room: Double_Clawshots
Hyrule Castle Main Hall Near Double Dinalfos Room: Double_Clawshots and Lower_Hyrule_Castle_Chandelier == On
- Name: Hyrule Castle Main Hall Near First Darknut Room
Region: Hyrule Castle
@@ -211,4 +212,4 @@
- Name: Hyrule Castle Throne Room
Region: Hyrule Castle
Locations:
Defeat Ganondorf: Master_Sword and Wolf_Link and Ending_Blow
Defeat Ganondorf: Master_Sword and Wolf_Link and Ending_Blow
@@ -199,13 +199,13 @@
Twilight: Eldin
Can Transform: If Transform Anywhere
Events:
Can Buy Wooden Shield: "'Can_Farm_Lots_of_Rupees'"
Can Fund Malo Mart: "'Can_Farm_Lots_of_Rupees'"
Can Buy Wooden Shield: Not_Twilight and 'Can_Farm_Lots_of_Rupees'
Can Fund Malo Mart: Not_Twilight and Can_Complete_Lanayru_Twilight and 'Can_Farm_Lots_of_Rupees'
Locations:
Kakariko Village Malo Mart Hylian Shield: "'Can_Farm_Lots_of_Rupees'"
Kakariko Village Malo Mart Hawkeye: "'Can_Farm_Lots_of_Rupees'"
Kakariko Village Malo Mart Red Potion: "'Can_Farm_Lots_of_Rupees'"
Kakariko Village Malo Mart Wooden Shield: "'Can_Farm_Lots_of_Rupees'"
Kakariko Village Malo Mart Hylian Shield: Not_Twilight and 'Can_Farm_Lots_of_Rupees'
Kakariko Village Malo Mart Hawkeye: Not_Twilight and 'Can_Farm_Lots_of_Rupees'
Kakariko Village Malo Mart Red Potion: Not_Twilight and 'Can_Farm_Lots_of_Rupees'
Kakariko Village Malo Mart Wooden Shield: Not_Twilight and 'Can_Farm_Lots_of_Rupees'
Kakariko Malo Mart Twilit Insect: Can_Defeat_Eldin_Twilit_Insect
Exits:
Lower Kakariko Village: Nothing
@@ -447,7 +447,7 @@
Twilight: Eldin
Can Warp: True
Events:
Can Finish Goron Springwater Rush: "'Can_Start_Springwater_Rush' and 'Can_Fund_Malo_Mart'"
Can Finish Goron Springwater Rush: "'Can_Start_Springwater_Rush' and (Skip_Bridge_Donation == On or 'Can_Fund_Malo_Mart')"
Locations:
Eldin Field Bomb Rock Chest: Can_Smash
Bridge of Eldin Owl Statue Chest: Restored_Dominion_Rod
@@ -457,8 +457,8 @@
Bridge of Eldin Male Phasmid: Clawshot or Gale_Boomerang
Eldin Field Hint Sign: Nothing
Exits:
# Only allow logical access to the other side if we've already been there
Eldin Field Near Castle Town: "'Can_Access_Eldin_Field_Near_Castle_Town'"
# Only allow logical access to the other side if we've already been there or the bridge donation is skipped
Eldin Field Near Castle Town: Skip_Bridge_Donation == On or 'Can_Access_Eldin_Field_Near_Castle_Town'
Eldin Field Bomskit Grotto: Can_Dig
Eldin Field Water Bomb Fish Grotto: Can_Dig
Eldin Field North of Bridge: Nothing
@@ -472,7 +472,7 @@
Can Warp: True
Exits:
Outside Castle Town East: Nothing
Eldin Field: "'Can_Fund_Malo_Mart'"
Eldin Field: Skip_Bridge_Donation == On or 'Can_Fund_Malo_Mart'
- Name: Eldin Field Bomskit Grotto
Locations:
+13 -2
View File
@@ -190,7 +190,8 @@ namespace randomizer::logic::requirement
// and the three components individually
auto& chBefore = logicStr[pos - 1];
auto& chAfter = logicStr[pos + 1];
if (chBefore != '!' && chAfter != '!' && chBefore != '=' && chAfter != '=')
if (chBefore != '!' && chAfter != '!' && chBefore != '=' && chAfter != '=' &&
chBefore != '>' && chAfter != '>' && chBefore != '<' && chAfter != '<')
{
splitLogicStr.push_back(logicStr.substr(0, pos));
logicStr.erase(0, pos + 1);
@@ -270,10 +271,12 @@ namespace randomizer::logic::requirement
}
// Then a setting...
else if (randomizer::utility::str::Contains(argStr, "!=", "=="))
else if (randomizer::utility::str::Contains(argStr, "!=", "==", ">=", "<="))
{
bool equalComparison = randomizer::utility::str::Contains(argStr, "==");
bool notEqualComparison = randomizer::utility::str::Contains(argStr, "!=");
bool gteComparison = randomizer::utility::str::Contains(argStr, ">=");
bool lteComparison = randomizer::utility::str::Contains(argStr, "<=");
// Split up the comparison using the second comparison character (which will always be '=')
auto compPos = argStr.rfind('=');
@@ -289,6 +292,14 @@ namespace randomizer::logic::requirement
else if (notEqualComparison)
{
result = world->Setting(settingName) != optionName.c_str();
}
else if (gteComparison)
{
result = world->Setting(settingName) >= optionName.c_str();
}
else if (lteComparison)
{
result = world->Setting(settingName) <= optionName.c_str();
}
if (result == true)
+10
View File
@@ -490,6 +490,16 @@ namespace randomizer::logic::world
}
}
bool World::EvaluateSettingCondition(const std::string& condition)
{
auto req = randomizer::logic::requirement::ParseRequirementString(condition, this, true);
if (req._type == requirement::Type::NOTHING)
{
return true;
}
return false;
}
void World::GenerateItemPools()
{
LOG_TO_DEBUG("Now building item pools");
+1
View File
@@ -60,6 +60,7 @@ namespace randomizer::logic::world
void BuildLocationTable();
void LoadLogicMacros();
void LoadWorldGraph();
bool EvaluateSettingCondition(const std::string& condition);
/**
* @brief Generate the main item pool and starting item pool for this world.
+9 -12
View File
@@ -38,28 +38,25 @@ FetchContent_Declare(
GIT_REPOSITORY https://github.com/jbeder/yaml-cpp.git
GIT_TAG yaml-cpp-0.9.0
)
FetchContent_MakeAvailable(yaml-cpp)
message(STATUS "randomizer: Fetching base64pp")
FetchContent_Declare(
base64pp
GIT_REPOSITORY https://github.com/matheusgomes28/base64pp.git
GIT_TAG v0.2.0-rc0
base64pp
GIT_REPOSITORY https://github.com/matheusgomes28/base64pp.git
GIT_TAG v0.2.0-rc0
)
FetchContent_MakeAvailable(base64pp)
message(STATUS "randomizer: Fetching zlib-ng")
FetchContent_Declare(
zlib-ng
GIT_REPOSITORY https://github.com/zlib-ng/zlib-ng.git
GIT_TAG 2.3.3
zlib-ng
GIT_REPOSITORY https://github.com/zlib-ng/zlib-ng.git
GIT_TAG 2.3.3
)
FetchContent_MakeAvailable(zlib-ng)
FetchContent_MakeAvailable(yaml-cpp base64pp zlib-ng)
string(LENGTH "${CMAKE_SOURCE_DIR}/" SOURCE_PATH_SIZE)
set(GAME_COMPILE_DEFS ${GAME_COMPILE_DEFS} SOURCE_PATH_SIZE=${SOURCE_PATH_SIZE})
set(GAME_LIBS ${GAME_LIBS} yaml-cpp::yaml-cpp zlib base64pp)
make_directory("${CMAKE_BINARY_DIR}/randomizer")
file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/randomizer")
# Put data files together for easier manipulation
# file(COPY "${CMAKE_SOURCE_DIR}/src/dusk/randomizer/data/" DESTINATION "${CMAKE_BINARY_DIR}/randomizer/data/" REGEX "^.*example.*$" EXCLUDE) # World, macros, and location info
+11
View File
@@ -154,6 +154,17 @@ namespace randomizer::seedgen::settings
return this->_currentOptionIndex >= optionNameIndex;
}
bool Setting::operator<=(const char* optionName) const
{
int optionNameIndex = this->GetInfo()->GetIndexOfOption(optionName);
if (optionNameIndex == -1)
{
throw std::runtime_error(std::string("\"") + optionName + "\" is not a valid option for setting \"" +
this->GetInfo()->GetName() + "\"");
}
return this->_currentOptionIndex <= optionNameIndex;
}
void Settings::InsertSetting(const std::string& settingName, Setting setting)
{
this->_map.emplace(settingName, setting);
+1
View File
@@ -142,6 +142,7 @@ namespace randomizer::seedgen::settings
bool operator==(const char* optionName) const;
bool operator!=(const char* optionName) const;
bool operator>=(const char* optionName) const;
bool operator<=(const char* optionName) const;
template<class... Types>
bool IsAnyOf(Types... optionNames)