summary refs log tree commit diff stats
path: root/tools/datapacker/container.cpp
diff options
context:
space:
mode:
authorStar Rauchenberger <fefferburbia@gmail.com>2025-08-10 12:42:36 -0400
committerStar Rauchenberger <fefferburbia@gmail.com>2025-08-10 12:42:36 -0400
commit21e334efcda30845f0d95b274fba7bb3f6f04004 (patch)
treeb88a5ea9eeabecff7845ab158cf78f4c035db3df /tools/datapacker/container.cpp
parente1d1b6e1f51b2152373be73ea59900ee410e33d2 (diff)
downloadlingo2-archipelago-21e334efcda30845f0d95b274fba7bb3f6f04004.tar.gz
lingo2-archipelago-21e334efcda30845f0d95b274fba7bb3f6f04004.tar.bz2
lingo2-archipelago-21e334efcda30845f0d95b274fba7bb3f6f04004.zip
Assigned IDs for the_congruent
Keyholders are packed now. Doors can rely on keyholders and rooms.
Paintings can be exit only.
Diffstat (limited to 'tools/datapacker/container.cpp')
-rw-r--r--tools/datapacker/container.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/tools/datapacker/container.cpp b/tools/datapacker/container.cpp index 29fa1a5..bb58ec5 100644 --- a/tools/datapacker/container.cpp +++ b/tools/datapacker/container.cpp
@@ -246,6 +246,46 @@ uint64_t Container::FindOrAddMastery(std::optional<std::string> map_name,
246 } 246 }
247} 247}
248 248
249uint64_t Container::FindOrAddKeyholder(
250 std::optional<std::string> map_name, std::optional<std::string> room_name,
251 std::string keyholder_name, std::optional<std::string> map_fallback,
252 std::optional<std::string> room_fallback) {
253 if (!map_name) {
254 if (!map_fallback) {
255 std::cout << "No map name provided for " << keyholder_name << std::endl;
256 map_name = "global";
257 } else {
258 map_name = map_fallback;
259 }
260 }
261
262 if (!room_name) {
263 if (!room_fallback) {
264 std::cout << "No room name provided for " << keyholder_name << std::endl;
265 room_name = "global";
266 } else {
267 room_name = room_fallback;
268 }
269 }
270
271 auto& room_container =
272 keyholder_id_by_map_room_keyholder_names_[*map_name][*room_name];
273 auto it = room_container.find(keyholder_name);
274 if (it == room_container.end()) {
275 uint64_t new_id = all_objects_.keyholders_size();
276 Keyholder* keyholder = all_objects_.add_keyholders();
277 keyholder->set_id(new_id);
278 keyholder->set_room_id(FindOrAddRoom(map_name, *room_name, std::nullopt));
279 keyholder->set_name(keyholder_name);
280
281 room_container[keyholder_name] = new_id;
282
283 return new_id;
284 } else {
285 return it->second;
286 }
287}
288
249uint64_t Container::FindOrAddDoor(std::optional<std::string> map_name, 289uint64_t Container::FindOrAddDoor(std::optional<std::string> map_name,
250 std::string door_name, 290 std::string door_name,
251 std::optional<std::string> map_fallback) { 291 std::optional<std::string> map_fallback) {