From 3b415b3f5f182238da9ed83e0b2b07fb07044e04 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Fri, 6 Feb 2026 13:03:32 -0500 Subject: Annotated RTE rooms for most maps --- tools/validator/human_processor.cpp | 16 ++++++++++++++++ tools/validator/main.cpp | 4 +++- tools/validator/structs.h | 4 ++++ tools/validator/validator.cpp | 21 +++++++++++++++++++++ 4 files changed, 44 insertions(+), 1 deletion(-) (limited to 'tools/validator') diff --git a/tools/validator/human_processor.cpp b/tools/validator/human_processor.cpp index ffa9765..d6fcfa6 100644 --- a/tools/validator/human_processor.cpp +++ b/tools/validator/human_processor.cpp @@ -74,6 +74,8 @@ class HumanProcessor { MapInfo& map_info = info_.maps[current_map_name]; auto metadata = ReadMessageFromFile(path.string()); + map_info.definitions.push_back(metadata); + for (const std::string& path : metadata.excluded_nodes()) { map_info.game_nodes[path].uses++; } @@ -92,6 +94,15 @@ class HumanProcessor { map_info.malformed_worldport_entrance = metadata.worldport_entrance(); } } + + if (metadata.has_rte_room()) { + RoomIdentifier room_identifier; + room_identifier.set_map(current_map_name); + room_identifier.set_name(metadata.rte_room()); + + RoomInfo& room_info = info_.rooms[room_identifier]; + room_info.map_rtes_referenced_by.push_back(current_map_name); + } } void ProcessRooms(std::filesystem::path path, @@ -617,6 +628,11 @@ class HumanProcessor { port_info.has_id = true; } } + + if (map.has_rte()) { + MapInfo& map_info = info_.maps[map_name]; + map_info.has_rte_id = true; + } } for (const auto& [tag, id] : ids.special()) { diff --git a/tools/validator/main.cpp b/tools/validator/main.cpp index 1a72e9a..6139e95 100644 --- a/tools/validator/main.cpp +++ b/tools/validator/main.cpp @@ -21,7 +21,9 @@ void Run(const std::string& mapdir, const std::string& repodir) { int main(int argc, char** argv) { if (argc != 3) { std::cout << "Incorrect argument count." << std::endl; - std::cout << "Usage: validator [path to map directory] [path to Lingo 2 repository]" << std::endl; + std::cout << "Usage: validator [path to map directory] [path to Lingo 2 " + "repository]" + << std::endl; return 1; } diff --git a/tools/validator/structs.h b/tools/validator/structs.h index 62974a8..81a0e8f 100644 --- a/tools/validator/structs.h +++ b/tools/validator/structs.h @@ -28,6 +28,9 @@ struct GameNodeInfo { struct MapInfo { std::map game_nodes; + std::vector definitions; + bool has_rte_id = false; + std::optional malformed_worldport_entrance; }; @@ -37,6 +40,7 @@ struct RoomInfo { std::vector doors_referenced_by; std::vector panels_referenced_by; std::vector connections_referenced_by; + std::vector map_rtes_referenced_by; }; struct DoorInfo { diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index fe36be7..e9fbb74 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp @@ -1,5 +1,6 @@ #include "validator.h" +#include #include #include "proto/human.pb.h" @@ -74,6 +75,22 @@ class Validator { std::cout << "The worldport entrance for map " << map_name << " is malformed." << std::endl; } + + if (map_info.has_rte_id) { + if (!std::any_of( + map_info.definitions.begin(), map_info.definitions.end(), + [](const HumanMap& h_map) { return h_map.has_rte_room(); })) { + std::cout << "Map " << map_name << " has an RTE ID but no RTE room." + << std::endl; + } + } else { + if (std::any_of( + map_info.definitions.begin(), map_info.definitions.end(), + [](const HumanMap& h_map) { return h_map.has_rte_room(); })) { + std::cout << "Map " << map_name << " has an RTE room but no RTE ID." + << std::endl; + } + } } void ValidateRoom(const RoomIdentifier& room_identifier, @@ -99,6 +116,10 @@ class Validator { std::cout << " CONNECTION " << connection.ShortDebugString() << std::endl; } + + for (const std::string& map_name : room_info.map_rtes_referenced_by) { + std::cout << " MAP RTE " << map_name << std::endl; + } } else if (room_info.definitions.size() > 1) { std::cout << "Room " << room_identifier.ShortDebugString() << " was defined multiple times." << std::endl; -- cgit 1.4.1