summary refs log tree commit diff stats
path: root/tools/datapacker
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-08-20 15:03:18 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-08-20 15:03:18 -0400
commitd77c73397b684faa55f0e95484ac89ca68bde1ad (patch)
tree84fd35d342b69a9765d8f94473b56998d26e323d /tools/datapacker
parent53ad8e2f3e5fcf9cf9d5d4628498557e0f5500e8 (diff)
downloadlingo2-archipelago-d77c73397b684faa55f0e95484ac89ca68bde1ad.tar.gz
lingo2-archipelago-d77c73397b684faa55f0e95484ac89ca68bde1ad.tar.bz2
lingo2-archipelago-d77c73397b684faa55f0e95484ac89ca68bde1ad.zip
Added "endings" object type
Diffstat (limited to 'tools/datapacker')
-rw-r--r--tools/datapacker/container.cpp16
-rw-r--r--tools/datapacker/container.h3
-rw-r--r--tools/datapacker/main.cpp22
3 files changed, 41 insertions, 0 deletions
diff --git a/tools/datapacker/container.cpp b/tools/datapacker/container.cpp index ffcb75a..0d3417e 100644 --- a/tools/datapacker/container.cpp +++ b/tools/datapacker/container.cpp
@@ -205,6 +205,22 @@ uint64_t Container::FindLetterByName(std::string letter_name) {
205 } 205 }
206} 206}
207 207
208uint64_t Container::FindOrAddEnding(std::string ending_name) {
209 auto it = ending_id_by_name_.find(ending_name);
210 if (it == ending_id_by_name_.end()) {
211 uint64_t new_id = all_objects_.endings_size();
212 Ending* ending = all_objects_.add_endings();
213 ending->set_id(new_id);
214 ending->set_name(ending_name);
215
216 ending_id_by_name_[ending_name] = new_id;
217
218 return new_id;
219 } else {
220 return it->second;
221 }
222}
223
208uint64_t Container::FindOrAddMastery(std::optional<std::string> map_name, 224uint64_t Container::FindOrAddMastery(std::optional<std::string> map_name,
209 std::optional<std::string> room_name, 225 std::optional<std::string> room_name,
210 std::string mastery_name, 226 std::string mastery_name,
diff --git a/tools/datapacker/container.h b/tools/datapacker/container.h index e1a84d8..68f5875 100644 --- a/tools/datapacker/container.h +++ b/tools/datapacker/container.h
@@ -40,6 +40,8 @@ class Container {
40 40
41 uint64_t FindLetterByName(std::string letter_name); 41 uint64_t FindLetterByName(std::string letter_name);
42 42
43 uint64_t FindOrAddEnding(std::string ending_name);
44
43 uint64_t FindOrAddMastery(std::optional<std::string> map_name, 45 uint64_t FindOrAddMastery(std::optional<std::string> map_name,
44 std::optional<std::string> room_name, 46 std::optional<std::string> room_name,
45 std::string mastery_name, 47 std::string mastery_name,
@@ -79,6 +81,7 @@ class Container {
79 keyholder_id_by_map_room_keyholder_names_; 81 keyholder_id_by_map_room_keyholder_names_;
80 std::map<std::string, std::map<std::string, uint64_t>> 82 std::map<std::string, std::map<std::string, uint64_t>>
81 door_id_by_map_door_names_; 83 door_id_by_map_door_names_;
84 std::map<std::string, uint64_t> ending_id_by_name_;
82}; 85};
83 86
84} // namespace com::fourisland::lingo2_archipelago 87} // namespace com::fourisland::lingo2_archipelago
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 0beb304..c5a90e9 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp
@@ -115,6 +115,10 @@ class DataPacker {
115 room.add_keyholders( 115 room.add_keyholders(
116 ProcessKeyholder(h_keyholder, current_map_name, room.name())); 116 ProcessKeyholder(h_keyholder, current_map_name, room.name()));
117 } 117 }
118
119 for (const HumanEnding& h_ending : h_room.endings()) {
120 room.add_endings(ProcessEnding(h_ending, current_map_name, room.name()));
121 }
118 } 122 }
119 123
120 uint64_t ProcessPanel(const HumanPanel& h_panel, 124 uint64_t ProcessPanel(const HumanPanel& h_panel,
@@ -266,6 +270,19 @@ class DataPacker {
266 return keyholder_id; 270 return keyholder_id;
267 } 271 }
268 272
273 uint64_t ProcessEnding(const HumanEnding& h_ending,
274 const std::string& current_map_name,
275 const std::string& current_room_name) {
276 uint64_t ending_id = container_.FindOrAddEnding(h_ending.name());
277 Ending& ending = *container_.all_objects().mutable_endings(ending_id);
278
279 ending.set_room_id(container_.FindOrAddRoom(
280 current_map_name, current_room_name, std::nullopt));
281 ending.set_path(h_ending.path());
282
283 return ending_id;
284 }
285
269 void ProcessDoorsFile(std::filesystem::path path, 286 void ProcessDoorsFile(std::filesystem::path path,
270 const std::string& current_map_name) { 287 const std::string& current_map_name) {
271 if (!std::filesystem::exists(path)) { 288 if (!std::filesystem::exists(path)) {
@@ -526,6 +543,11 @@ class DataPacker {
526 uint64_t letter_id = container_.FindLetterByName(letter_name); 543 uint64_t letter_id = container_.FindLetterByName(letter_name);
527 container_.all_objects().mutable_letters(letter_id)->set_ap_id(ap_id); 544 container_.all_objects().mutable_letters(letter_id)->set_ap_id(ap_id);
528 } 545 }
546
547 for (const auto& [ending_name, ap_id] : ids.endings()) {
548 uint64_t ending_id = container_.FindOrAddEnding(ending_name);
549 container_.all_objects().mutable_endings(ending_id)->set_ap_id(ap_id);
550 }
529 } 551 }
530 552
531 std::string mapdir_; 553 std::string mapdir_;