diff options
author | Star Rauchenberger <fefferburbia@gmail.com> | 2025-08-10 12:42:36 -0400 |
---|---|---|
committer | Star Rauchenberger <fefferburbia@gmail.com> | 2025-08-10 12:42:36 -0400 |
commit | 21e334efcda30845f0d95b274fba7bb3f6f04004 (patch) | |
tree | b88a5ea9eeabecff7845ab158cf78f4c035db3df /tools | |
parent | e1d1b6e1f51b2152373be73ea59900ee410e33d2 (diff) | |
download | lingo2-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')
-rw-r--r-- | tools/datapacker/container.cpp | 40 | ||||
-rw-r--r-- | tools/datapacker/container.h | 8 | ||||
-rw-r--r-- | tools/datapacker/main.cpp | 43 |
3 files changed, 91 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 | ||
249 | uint64_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 | |||
249 | uint64_t Container::FindOrAddDoor(std::optional<std::string> map_name, | 289 | uint64_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) { |
diff --git a/tools/datapacker/container.h b/tools/datapacker/container.h index 652a025..7ee5b5b 100644 --- a/tools/datapacker/container.h +++ b/tools/datapacker/container.h | |||
@@ -46,6 +46,12 @@ class Container { | |||
46 | std::optional<std::string> map_fallback, | 46 | std::optional<std::string> map_fallback, |
47 | std::optional<std::string> room_fallback); | 47 | std::optional<std::string> room_fallback); |
48 | 48 | ||
49 | uint64_t FindOrAddKeyholder(std::optional<std::string> map_name, | ||
50 | std::optional<std::string> room_name, | ||
51 | std::string keyholder_name, | ||
52 | std::optional<std::string> map_fallback, | ||
53 | std::optional<std::string> room_fallback); | ||
54 | |||
49 | uint64_t FindOrAddDoor(std::optional<std::string> map_name, | 55 | uint64_t FindOrAddDoor(std::optional<std::string> map_name, |
50 | std::string door_name, | 56 | std::string door_name, |
51 | std::optional<std::string> map_fallback); | 57 | std::optional<std::string> map_fallback); |
@@ -69,6 +75,8 @@ class Container { | |||
69 | std::map<std::string, uint64_t> letter_id_by_name_; | 75 | std::map<std::string, uint64_t> letter_id_by_name_; |
70 | std::map<std::string, std::map<std::string, std::map<std::string, uint64_t>>> | 76 | std::map<std::string, std::map<std::string, std::map<std::string, uint64_t>>> |
71 | mastery_id_by_map_room_mastery_names_; | 77 | mastery_id_by_map_room_mastery_names_; |
78 | std::map<std::string, std::map<std::string, std::map<std::string, uint64_t>>> | ||
79 | keyholder_id_by_map_room_keyholder_names_; | ||
72 | std::map<std::string, std::map<std::string, uint64_t>> | 80 | std::map<std::string, std::map<std::string, uint64_t>> |
73 | door_id_by_map_door_names_; | 81 | door_id_by_map_door_names_; |
74 | }; | 82 | }; |
diff --git a/tools/datapacker/main.cpp b/tools/datapacker/main.cpp index 260ab62..7e7f7f7 100644 --- a/tools/datapacker/main.cpp +++ b/tools/datapacker/main.cpp | |||
@@ -109,6 +109,11 @@ class DataPacker { | |||
109 | room.add_masteries( | 109 | room.add_masteries( |
110 | ProcessMastery(h_mastery, current_map_name, room.name())); | 110 | ProcessMastery(h_mastery, current_map_name, room.name())); |
111 | } | 111 | } |
112 | |||
113 | for (const HumanKeyholder& h_keyholder : h_room.keyholders()) { | ||
114 | room.add_keyholders( | ||
115 | ProcessKeyholder(h_keyholder, current_map_name, room.name())); | ||
116 | } | ||
112 | } | 117 | } |
113 | 118 | ||
114 | uint64_t ProcessPanel(const HumanPanel& h_panel, | 119 | uint64_t ProcessPanel(const HumanPanel& h_panel, |
@@ -176,6 +181,10 @@ class DataPacker { | |||
176 | painting.set_enter_only(h_painting.enter_only()); | 181 | painting.set_enter_only(h_painting.enter_only()); |
177 | } | 182 | } |
178 | 183 | ||
184 | if (h_painting.has_exit_only()) { | ||
185 | painting.set_exit_only(h_painting.exit_only()); | ||
186 | } | ||
187 | |||
179 | if (h_painting.has_required_door()) { | 188 | if (h_painting.has_required_door()) { |
180 | std::optional<std::string> map_name = | 189 | std::optional<std::string> map_name = |
181 | h_painting.required_door().has_map() | 190 | h_painting.required_door().has_map() |
@@ -238,6 +247,20 @@ class DataPacker { | |||
238 | return mastery_id; | 247 | return mastery_id; |
239 | } | 248 | } |
240 | 249 | ||
250 | uint64_t ProcessKeyholder(const HumanKeyholder& h_keyholder, | ||
251 | const std::string& current_map_name, | ||
252 | const std::string& current_room_name) { | ||
253 | uint64_t keyholder_id = container_.FindOrAddKeyholder( | ||
254 | current_map_name, current_room_name, h_keyholder.name(), std::nullopt, | ||
255 | std::nullopt); | ||
256 | Keyholder& keyholder = | ||
257 | *container_.all_objects().mutable_keyholders(keyholder_id); | ||
258 | |||
259 | keyholder.set_path(h_keyholder.path()); | ||
260 | |||
261 | return keyholder_id; | ||
262 | } | ||
263 | |||
241 | void ProcessDoorsFile(std::filesystem::path path, | 264 | void ProcessDoorsFile(std::filesystem::path path, |
242 | const std::string& current_map_name) { | 265 | const std::string& current_map_name) { |
243 | if (!std::filesystem::exists(path)) { | 266 | if (!std::filesystem::exists(path)) { |
@@ -292,6 +315,26 @@ class DataPacker { | |||
292 | } | 315 | } |
293 | } | 316 | } |
294 | 317 | ||
318 | for (const KeyholderIdentifier& ki : h_door.keyholders()) { | ||
319 | KeyholderAnswer* answer = door.add_keyholders(); | ||
320 | |||
321 | std::optional<std::string> map_name = | ||
322 | ki.has_map() ? std::optional<std::string>(ki.map()) : std::nullopt; | ||
323 | answer->set_keyholder(container_.FindOrAddKeyholder( | ||
324 | map_name, ki.room(), ki.name(), current_map_name, std::nullopt)); | ||
325 | |||
326 | if (ki.has_key()) { | ||
327 | answer->set_key(ki.key()); | ||
328 | } | ||
329 | } | ||
330 | |||
331 | for (const RoomIdentifier& ri : h_door.rooms()) { | ||
332 | std::optional<std::string> map_name = | ||
333 | ri.has_map() ? std::optional<std::string>(ri.map()) : std::nullopt; | ||
334 | door.add_rooms( | ||
335 | container_.FindOrAddRoom(map_name, ri.name(), current_map_name)); | ||
336 | } | ||
337 | |||
295 | if (h_door.has_control_center_color()) { | 338 | if (h_door.has_control_center_color()) { |
296 | door.set_control_center_color(h_door.control_center_color()); | 339 | door.set_control_center_color(h_door.control_center_color()); |
297 | } | 340 | } |