From a752ab325cf46d35a90606a354775799977dccb0 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Thu, 4 Sep 2025 15:46:25 -0400 Subject: [Data] Strip unnecessary AP IDs This was causing issues in the client, specifically for The Ancient. --- tools/validator/human_processor.cpp | 66 +++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 2 deletions(-) (limited to 'tools/validator/human_processor.cpp') diff --git a/tools/validator/human_processor.cpp b/tools/validator/human_processor.cpp index 49e7578..5720ba9 100644 --- a/tools/validator/human_processor.cpp +++ b/tools/validator/human_processor.cpp @@ -13,6 +13,7 @@ #include #include "structs.h" +#include "util/ids_yaml_format.h" namespace com::fourisland::lingo2_archipelago { namespace { @@ -42,7 +43,7 @@ class HumanProcessor { ProcessConnectionsFile(datadir_path / "connections.txtpb", std::nullopt); ProcessMaps(datadir_path); ProcessProgressivesFile(datadir_path / "progressives.txtpb"); - ProcessIdsFile(datadir_path / "ids.txtpb"); + ProcessIdsFile(datadir_path / "ids.yaml"); } private: @@ -510,7 +511,68 @@ class HumanProcessor { } void ProcessIdsFile(std::filesystem::path path) { - // Ignore this for now. + auto ids = ReadIdsFromYaml(path.string()); + + DoorIdentifier di; + PanelIdentifier pi; + KeyholderIdentifier ki; + + for (const auto& [map_name, map] : ids.maps()) { + di.set_map(map_name); + pi.set_map(map_name); + ki.set_map(map_name); + + for (const auto& [door_name, ap_id] : map.doors()) { + di.set_name(door_name); + + DoorInfo& door_info = info_.doors[di]; + door_info.has_id = true; + } + + for (const auto& [room_name, room] : map.rooms()) { + pi.set_room(room_name); + ki.set_room(room_name); + + for (const auto& [panel_name, ap_id] : room.panels()) { + pi.set_name(panel_name); + + PanelInfo& panel_info = info_.panels[pi]; + panel_info.has_id = true; + } + + for (const auto& [mastery_name, ap_id] : room.masteries()) { + // TODO: Mastery + } + + for (const auto& [keyholder_name, ap_id] : room.keyholders()) { + ki.set_name(keyholder_name); + + KeyholderInfo& keyholder_info = info_.keyholders[ki]; + keyholder_info.has_id = true; + } + } + } + + for (const auto& [tag, id] : ids.special()) { + // TODO: Specials + } + + for (const auto& [letter_name, ap_id] : ids.letters()) { + LetterIdentifier li = + std::make_tuple(letter_name[0], letter_name[1] == '2'); + LetterInfo& letter_info = info_.letters[li]; + letter_info.has_id = true; + } + + for (const auto& [ending_name, ap_id] : ids.endings()) { + EndingInfo& ending_info = info_.endings[ending_name]; + ending_info.has_id = true; + } + + for (const auto& [prog_name, ap_id] : ids.progressives()) { + ProgressiveInfo& prog_info = info_.progressives[prog_name]; + prog_info.has_id = true; + } } std::string mapdir_; -- cgit 1.4.1