From efa0587b4399a45faecf5aa941ff75a40595a124 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Mon, 26 Feb 2024 19:15:20 -0500 Subject: Added real pilgrimage detection --- src/game_data.cpp | 103 ++++++++++++++++++------------------------------------ 1 file changed, 34 insertions(+), 69 deletions(-) (limited to 'src/game_data.cpp') diff --git a/src/game_data.cpp b/src/game_data.cpp index dd6e924..28ca598 100644 --- a/src/game_data.cpp +++ b/src/game_data.cpp @@ -58,9 +58,6 @@ 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_; @@ -69,8 +66,6 @@ struct GameData { YAML::LoadFile(GetAbsolutePath("assets/LL1.yaml")); YAML::Node areas_config = YAML::LoadFile(GetAbsolutePath("assets/areas.yaml")); - YAML::Node pilgrimage_config = - YAML::LoadFile(GetAbsolutePath("assets/pilgrimage.yaml")); YAML::Node ids_config = YAML::LoadFile(GetAbsolutePath("assets/ids.yaml")); auto init_color_id = [this, &ids_config](const std::string &color_name) { @@ -105,6 +100,34 @@ struct GameData { for (const auto &entrance_it : room_it.second["entrances"]) { int from_room_id = AddOrGetRoom(entrance_it.first.as()); + auto process_single_entrance = + [this, room_id, from_room_id](const YAML::Node &option) { + Exit exit_obj; + exit_obj.destination_room = room_id; + + if (option["door"]) { + std::string door_room = rooms_[room_id].name; + if (option["room"]) { + door_room = option["room"].as(); + } + exit_obj.door = AddOrGetDoor(door_room, option["door"].as()); + } + + if (option["painting"] && option["painting"].as()) { + exit_obj.type = EntranceType::kPainting; + } + + if (option["sunwarp"] && option["sunwarp"].as()) { + exit_obj.type = EntranceType::kSunwarp; + } + + if (option["warp"] && option["warp"].as()) { + exit_obj.type = EntranceType::kWarp; + } + + rooms_[from_room_id].exits.push_back(exit_obj); + }; + switch (entrance_it.second.Type()) { case YAML::NodeType::Scalar: { // This is just "true". @@ -112,50 +135,12 @@ struct GameData { break; } case YAML::NodeType::Map: { - Exit exit_obj; - exit_obj.destination_room = room_id; - - if (entrance_it.second["door"]) { - std::string door_room = rooms_[room_id].name; - if (entrance_it.second["room"]) { - door_room = entrance_it.second["room"].as(); - } - exit_obj.door = AddOrGetDoor( - door_room, entrance_it.second["door"].as()); - } - - if (entrance_it.second["painting"]) { - 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); + process_single_entrance(entrance_it.second); break; } case YAML::NodeType::Sequence: { for (const auto &option : entrance_it.second) { - Exit exit_obj; - exit_obj.destination_room = room_id; - - std::string door_room = rooms_[room_id].name; - if (option["room"]) { - door_room = option["room"].as(); - } - exit_obj.door = - AddOrGetDoor(door_room, option["door"].as()); - - if (option["painting"]) { - exit_obj.painting = option["painting"].as(); - } - - if (option["sunwarp"]) { - exit_obj.sunwarp = option["sunwarp"].as(); - } - - rooms_[from_room_id].exits.push_back(exit_obj); + process_single_entrance(option); } break; @@ -586,22 +571,6 @@ struct GameData { } } - // Set up fake pilgrimage. - for (const auto &config_node : pilgrimage_config) { - 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 starting_room_id = AddOrGetRoom("Starting Room"); - Room &starting_room_obj = rooms_[starting_room_id]; - starting_room_obj.exits.push_back( - Exit{.destination_room = AddOrGetRoom("Pilgrim Antechamber"), - .pilgrimage = true}); - // Report errors. for (const std::string &area : malconfigured_areas_) { std::ostringstream errstr; @@ -679,6 +648,10 @@ const std::vector &GD_GetDoors() { return GetState().doors_; } const Door &GD_GetDoor(int door_id) { return GetState().doors_.at(door_id); } +int GD_GetDoorByName(const std::string &name) { + return GetState().door_by_id_.at(name); +} + const Panel &GD_GetPanel(int panel_id) { return GetState().panels_.at(panel_id); } @@ -694,11 +667,3 @@ 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