about summary refs log tree commit diff stats
path: root/tools/validator
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2026-02-06 13:45:01 -0500
committerStar Rauchenberger <fefferburbia@gmail.com>2026-02-06 13:45:01 -0500
commit27a1d63608cc370cdf491ae08c70c74f76956367 (patch)
tree3e1dbbfedc130e17eb8b0da575671e8f99c98a1e /tools/validator
parentbde801d654ce6ddc41f703e55adfcc33b3f3104e (diff)
parent2a3916c1c58e033b06042d5d5413ea85cd94babf (diff)
downloadlingo2-archipelago-27a1d63608cc370cdf491ae08c70c74f76956367.tar.gz
lingo2-archipelago-27a1d63608cc370cdf491ae08c70c74f76956367.tar.bz2
lingo2-archipelago-27a1d63608cc370cdf491ae08c70c74f76956367.zip
Merge branch 'main' of fourisland.com:/srv/git/lingo2-archipelago
Diffstat (limited to 'tools/validator')
-rw-r--r--tools/validator/human_processor.cpp16
-rw-r--r--tools/validator/main.cpp4
-rw-r--r--tools/validator/structs.h4
-rw-r--r--tools/validator/validator.cpp21
4 files changed, 44 insertions, 1 deletions
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 {
74 MapInfo& map_info = info_.maps[current_map_name]; 74 MapInfo& map_info = info_.maps[current_map_name];
75 75
76 auto metadata = ReadMessageFromFile<HumanMap>(path.string()); 76 auto metadata = ReadMessageFromFile<HumanMap>(path.string());
77 map_info.definitions.push_back(metadata);
78
77 for (const std::string& path : metadata.excluded_nodes()) { 79 for (const std::string& path : metadata.excluded_nodes()) {
78 map_info.game_nodes[path].uses++; 80 map_info.game_nodes[path].uses++;
79 } 81 }
@@ -92,6 +94,15 @@ class HumanProcessor {
92 map_info.malformed_worldport_entrance = metadata.worldport_entrance(); 94 map_info.malformed_worldport_entrance = metadata.worldport_entrance();
93 } 95 }
94 } 96 }
97
98 if (metadata.has_rte_room()) {
99 RoomIdentifier room_identifier;
100 room_identifier.set_map(current_map_name);
101 room_identifier.set_name(metadata.rte_room());
102
103 RoomInfo& room_info = info_.rooms[room_identifier];
104 room_info.map_rtes_referenced_by.push_back(current_map_name);
105 }
95 } 106 }
96 107
97 void ProcessRooms(std::filesystem::path path, 108 void ProcessRooms(std::filesystem::path path,
@@ -617,6 +628,11 @@ class HumanProcessor {
617 port_info.has_id = true; 628 port_info.has_id = true;
618 } 629 }
619 } 630 }
631
632 if (map.has_rte()) {
633 MapInfo& map_info = info_.maps[map_name];
634 map_info.has_rte_id = true;
635 }
620 } 636 }
621 637
622 for (const auto& [tag, id] : ids.special()) { 638 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) {
21int main(int argc, char** argv) { 21int main(int argc, char** argv) {
22 if (argc != 3) { 22 if (argc != 3) {
23 std::cout << "Incorrect argument count." << std::endl; 23 std::cout << "Incorrect argument count." << std::endl;
24 std::cout << "Usage: validator [path to map directory] [path to Lingo 2 repository]" << std::endl; 24 std::cout << "Usage: validator [path to map directory] [path to Lingo 2 "
25 "repository]"
26 << std::endl;
25 return 1; 27 return 1;
26 } 28 }
27 29
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 {
28struct MapInfo { 28struct MapInfo {
29 std::map<std::string, GameNodeInfo> game_nodes; 29 std::map<std::string, GameNodeInfo> game_nodes;
30 30
31 std::vector<HumanMap> definitions;
32 bool has_rte_id = false;
33
31 std::optional<PortIdentifier> malformed_worldport_entrance; 34 std::optional<PortIdentifier> malformed_worldport_entrance;
32}; 35};
33 36
@@ -37,6 +40,7 @@ struct RoomInfo {
37 std::vector<DoorIdentifier> doors_referenced_by; 40 std::vector<DoorIdentifier> doors_referenced_by;
38 std::vector<PanelIdentifier> panels_referenced_by; 41 std::vector<PanelIdentifier> panels_referenced_by;
39 std::vector<HumanConnection> connections_referenced_by; 42 std::vector<HumanConnection> connections_referenced_by;
43 std::vector<std::string> map_rtes_referenced_by;
40}; 44};
41 45
42struct DoorInfo { 46struct 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 @@
1#include "validator.h" 1#include "validator.h"
2 2
3#include <algorithm>
3#include <iostream> 4#include <iostream>
4 5
5#include "proto/human.pb.h" 6#include "proto/human.pb.h"
@@ -74,6 +75,22 @@ class Validator {
74 std::cout << "The worldport entrance for map " << map_name 75 std::cout << "The worldport entrance for map " << map_name
75 << " is malformed." << std::endl; 76 << " is malformed." << std::endl;
76 } 77 }
78
79 if (map_info.has_rte_id) {
80 if (!std::any_of(
81 map_info.definitions.begin(), map_info.definitions.end(),
82 [](const HumanMap& h_map) { return h_map.has_rte_room(); })) {
83 std::cout << "Map " << map_name << " has an RTE ID but no RTE room."
84 << std::endl;
85 }
86 } else {
87 if (std::any_of(
88 map_info.definitions.begin(), map_info.definitions.end(),
89 [](const HumanMap& h_map) { return h_map.has_rte_room(); })) {
90 std::cout << "Map " << map_name << " has an RTE room but no RTE ID."
91 << std::endl;
92 }
93 }
77 } 94 }
78 95
79 void ValidateRoom(const RoomIdentifier& room_identifier, 96 void ValidateRoom(const RoomIdentifier& room_identifier,
@@ -99,6 +116,10 @@ class Validator {
99 std::cout << " CONNECTION " << connection.ShortDebugString() 116 std::cout << " CONNECTION " << connection.ShortDebugString()
100 << std::endl; 117 << std::endl;
101 } 118 }
119
120 for (const std::string& map_name : room_info.map_rtes_referenced_by) {
121 std::cout << " MAP RTE " << map_name << std::endl;
122 }
102 } else if (room_info.definitions.size() > 1) { 123 } else if (room_info.definitions.size() > 1) {
103 std::cout << "Room " << room_identifier.ShortDebugString() 124 std::cout << "Room " << room_identifier.ShortDebugString()
104 << " was defined multiple times." << std::endl; 125 << " was defined multiple times." << std::endl;