From 4c1dc83759d15b7f9f8aaddf580d2147f43fb845 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sun, 19 Oct 2025 11:25:51 -0400 Subject: Annotate "worldport entrances" --- tools/datapacker/main.cpp | 7 +++++++ tools/validator/human_processor.cpp | 11 +++++++++++ tools/validator/structs.h | 3 +++ tools/validator/validator.cpp | 12 ++++++++++-- 4 files changed, 31 insertions(+), 2 deletions(-) (limited to 'tools') diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index e807d74..9b487e4 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp @@ -91,6 +91,13 @@ class DataPacker { if (metadata.has_display_name()) { map.set_display_name(metadata.display_name()); } + + if (metadata.has_worldport_entrance()) { + map.set_worldport_entrance(container_.FindOrAddPort( + metadata.worldport_entrance().map(), + metadata.worldport_entrance().room(), + metadata.worldport_entrance().name(), map_name, std::nullopt)); + } } void ProcessRooms(std::filesystem::path path, diff --git a/tools/validator/human_processor.cpp b/tools/validator/human_processor.cpp index 2c978bf..de80db0 100644 --- a/tools/validator/human_processor.cpp +++ b/tools/validator/human_processor.cpp @@ -77,6 +77,17 @@ class HumanProcessor { for (const std::string& path : metadata.excluded_nodes()) { map_info.game_nodes[path].uses++; } + + if (metadata.has_worldport_entrance()) { + auto port_identifier = GetCompletePortIdentifier( + metadata.worldport_entrance(), current_map_name, std::nullopt); + if (port_identifier) { + PortInfo& port_info = info_.ports[*port_identifier]; + port_info.map_worldport_entrances.push_back(current_map_name); + } else { + map_info.malformed_worldport_entrance = metadata.worldport_entrance(); + } + } } void ProcessRooms(std::filesystem::path path, diff --git a/tools/validator/structs.h b/tools/validator/structs.h index d1d45f2..a6787cf 100644 --- a/tools/validator/structs.h +++ b/tools/validator/structs.h @@ -27,6 +27,8 @@ struct GameNodeInfo { struct MapInfo { std::map game_nodes; + + std::optional malformed_worldport_entrance; }; struct RoomInfo { @@ -57,6 +59,7 @@ struct PortInfo { std::vector connections_referenced_by; std::vector target_connections_referenced_by; + std::vector map_worldport_entrances; }; struct PaintingInfo { diff --git a/tools/validator/validator.cpp b/tools/validator/validator.cpp index 93efdc6..c048bab 100644 --- a/tools/validator/validator.cpp +++ b/tools/validator/validator.cpp @@ -69,6 +69,11 @@ class Validator { << " is not defined in the game file." << std::endl; } } + + if (map_info.malformed_worldport_entrance) { + std::cout << "The worldport entrance for map " << map_name + << " is malformed." << std::endl; + } } void ValidateRoom(const RoomIdentifier& room_identifier, @@ -253,6 +258,10 @@ class Validator { std::cout << " CONNECTION " << connection.ShortDebugString() << std::endl; } + + for (const std::string& map_name : port_info.map_worldport_entrances) { + std::cout << " MAP (worldport_entrance) " << map_name << std::endl; + } } else if (port_info.definitions.size() > 1) { std::cout << "Port " << port_identifier.ShortDebugString() << " was defined multiple times." << std::endl; @@ -283,8 +292,7 @@ class Validator { } if (!port.has_rotation()) { std::cout << "Port " << port_identifier.ShortDebugString() - << " is shuffleable and missing a rotation." - << std::endl; + << " is shuffleable and missing a rotation." << std::endl; } } } -- cgit 1.4.1