From 9ca8681ca5f134d65eaa4b5ae68d57ba67fe98d6 Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Sat, 9 Aug 2025 11:51:20 -0400 Subject: Added support for masteries Also assigned IDs for the_butterfly, as well as already configured letters. --- tools/datapacker/container.cpp | 77 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) (limited to 'tools/datapacker/container.cpp') diff --git a/tools/datapacker/container.cpp b/tools/datapacker/container.cpp index ead3818..29fa1a5 100644 --- a/tools/datapacker/container.cpp +++ b/tools/datapacker/container.cpp @@ -1,5 +1,9 @@ #include "container.h" +#include + +#include "util/naming.h" + namespace com::fourisland::lingo2_archipelago { uint64_t Container::FindOrAddMap(std::string map_name) { @@ -169,6 +173,79 @@ uint64_t Container::FindOrAddPanel(std::optional map_name, } } +uint64_t Container::FindOrAddLetter(std::string key, bool double_) { + std::string letter_name = GetLetterName(key, double_); + + auto it = letter_id_by_name_.find(letter_name); + if (it == letter_id_by_name_.end()) { + uint64_t new_id = all_objects_.letters_size(); + Letter* letter = all_objects_.add_letters(); + letter->set_id(new_id); + letter->set_key(key); + + if (double_) { + letter->set_double_(double_); + } + + letter_id_by_name_[letter_name] = new_id; + + return new_id; + } else { + return it->second; + } +} + +uint64_t Container::FindLetterByName(std::string letter_name) { + auto it = letter_id_by_name_.find(letter_name); + if (it == letter_id_by_name_.end()) { + std::cout << "Could not find letter by name: " << letter_name << std::endl; + exit(2); + } else { + return it->second; + } +} + +uint64_t Container::FindOrAddMastery(std::optional map_name, + std::optional room_name, + std::string mastery_name, + std::optional map_fallback, + std::optional room_fallback) { + if (!map_name) { + if (!map_fallback) { + std::cout << "No map name provided for " << mastery_name << std::endl; + map_name = "global"; + } else { + map_name = map_fallback; + } + } + + if (!room_name) { + if (!room_fallback) { + std::cout << "No room name provided for " << mastery_name << std::endl; + room_name = "global"; + } else { + room_name = room_fallback; + } + } + + auto& room_container = + mastery_id_by_map_room_mastery_names_[*map_name][*room_name]; + auto it = room_container.find(mastery_name); + if (it == room_container.end()) { + uint64_t new_id = all_objects_.masteries_size(); + Mastery* mastery = all_objects_.add_masteries(); + mastery->set_id(new_id); + mastery->set_room_id(FindOrAddRoom(map_name, *room_name, std::nullopt)); + mastery->set_name(mastery_name); + + room_container[mastery_name] = new_id; + + return new_id; + } else { + return it->second; + } +} + uint64_t Container::FindOrAddDoor(std::optional map_name, std::string door_name, std::optional map_fallback) { -- cgit 1.4.1