From b13d3678a9b09ba5dd8a58a7ab441d1e09ee5b77 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Wed, 31 Jan 2024 15:20:57 -0500 Subject: Added sunwarp access support --- src/game_data.cpp | 44 ++++++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 18 deletions(-) (limited to 'src/game_data.cpp') diff --git a/src/game_data.cpp b/src/game_data.cpp index 8f237b0..dd6e924 100644 --- a/src/game_data.cpp +++ b/src/game_data.cpp @@ -58,6 +58,9 @@ struct GameData { std::map ap_id_by_color_; + std::vector pilgrimage_; + std::vector pilgrimage_with_sunwarps_; + bool loaded_area_data_ = false; std::set malconfigured_areas_; @@ -125,6 +128,10 @@ struct GameData { exit_obj.painting = entrance_it.second["painting"].as(); } + if (entrance_it.second["sunwarp"]) { + exit_obj.sunwarp = entrance_it.second["sunwarp"].as(); + } + rooms_[from_room_id].exits.push_back(exit_obj); break; } @@ -144,6 +151,10 @@ struct GameData { exit_obj.painting = option["painting"].as(); } + if (option["sunwarp"]) { + exit_obj.sunwarp = option["sunwarp"].as(); + } + rooms_[from_room_id].exits.push_back(exit_obj); } @@ -576,31 +587,20 @@ struct GameData { } // Set up fake pilgrimage. - int fake_pilgrim_panel_id = - AddOrGetPanel("Starting Room", "!! Fake Pilgrimage Panel"); - Panel &fake_pilgrim_panel_obj = panels_[fake_pilgrim_panel_id]; - fake_pilgrim_panel_obj.non_counting = true; - for (const auto &config_node : pilgrimage_config) { - fake_pilgrim_panel_obj.required_doors.push_back( - AddOrGetDoor(config_node["room"].as(), - config_node["door"].as())); + int door_id = AddOrGetDoor(config_node["room"].as(), + config_node["door"].as()); + if (config_node["sunwarp"] && config_node["sunwarp"].as()) { + pilgrimage_with_sunwarps_.push_back(door_id); + } + pilgrimage_.push_back(door_id); } - int fake_pilgrim_door_id = - AddOrGetDoor("Starting Room", "!! Fake Pilgrimage Door"); - Door &fake_pilgrim_door_obj = doors_[fake_pilgrim_door_id]; - fake_pilgrim_door_obj.panels.push_back(fake_pilgrim_panel_id); - fake_pilgrim_door_obj.skip_location = true; - fake_pilgrim_door_obj.skip_item = true; - fake_pilgrim_door_obj.is_event = true; - int starting_room_id = AddOrGetRoom("Starting Room"); Room &starting_room_obj = rooms_[starting_room_id]; - starting_room_obj.panels.push_back(fake_pilgrim_panel_id); starting_room_obj.exits.push_back( Exit{.destination_room = AddOrGetRoom("Pilgrim Antechamber"), - .door = fake_pilgrim_door_id}); + .pilgrimage = true}); // Report errors. for (const std::string &area : malconfigured_areas_) { @@ -694,3 +694,11 @@ const std::vector &GD_GetAchievementPanels() { int GD_GetItemIdForColor(LingoColor color) { return GetState().ap_id_by_color_.at(color); } + +const std::vector &GD_GetPilgrimageDoors(bool include_sunwarps) { + if (include_sunwarps) { + return GetState().pilgrimage_with_sunwarps_; + } else { + return GetState().pilgrimage_; + } +} -- cgit 1.4.1