From 900355a291cd2c2452e909407a57d3e81d7ad85e Mon Sep 17 00:00:00 2001 From: Star Rauchenberger Date: Fri, 21 Mar 2025 12:51:05 -0400 Subject: Stopped using apclient get_item_name --- src/game_data.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) (limited to 'src/game_data.cpp') diff --git a/src/game_data.cpp b/src/game_data.cpp index a5af66b..7ce1fb6 100644 --- a/src/game_data.cpp +++ b/src/game_data.cpp @@ -44,6 +44,8 @@ struct GameData { std::map subway_item_by_painting_; std::map subway_item_by_sunwarp_; + std::map item_by_ap_id_; + bool loaded_area_data_ = false; std::set malconfigured_areas_; @@ -76,6 +78,14 @@ struct GameData { init_color_id("Brown"); init_color_id("Gray"); + if (ids_config["special_items"]) { + for (const auto& special_item_it : ids_config["special_items"]) + { + item_by_ap_id_[special_item_it.second.as()] = + special_item_it.first.as(); + } + } + rooms_.reserve(lingo_config.size() * 2); std::vector panel_location_ids; @@ -339,6 +349,9 @@ struct GameData { ids_config["doors"][rooms_[room_id].name] [doors_[door_id].name]["item"] .as(); + + item_by_ap_id_[doors_[door_id].ap_item_id] = + doors_[door_id].item_name; } else { TrackerLog(fmt::format("Missing AP item ID for door {} - {}", rooms_[room_id].name, @@ -355,6 +368,9 @@ struct GameData { doors_[door_id].group_ap_item_id = ids_config["door_groups"][doors_[door_id].group_name] .as(); + + item_by_ap_id_[doors_[door_id].group_ap_item_id] = + doors_[door_id].group_name; } else { TrackerLog(fmt::format("Missing AP item ID for door group {}", doors_[door_id].group_name)); @@ -418,21 +434,50 @@ struct GameData { int panel_door_id = AddOrGetPanelDoor(rooms_[room_id].name, panel_door_name); + std::map> panel_per_room; + int num_panels = 0; for (const auto &panel_node : panel_door_it.second["panels"]) { + num_panels++; + int panel_id = -1; if (panel_node.IsScalar()) { panel_id = AddOrGetPanel(rooms_[room_id].name, panel_node.as()); + + panel_per_room[rooms_[room_id].name].push_back( + panel_node.as()); } else { panel_id = AddOrGetPanel(panel_node["room"].as(), panel_node["panel"].as()); + + panel_per_room[panel_node["room"].as()].push_back( + panel_node["panel"].as()); } Panel &panel = panels_[panel_id]; panel.panel_door = panel_door_id; } + if (panel_door_it.second["item_name"]) { + panel_doors_[panel_door_id].item_name = + panel_door_it.second["item_name"].as(); + } else { + std::vector room_strs; + for (const auto &[room_str, panels_str] : panel_per_room) { + room_strs.push_back(fmt::format( + "{} - {}", room_str, hatkirby::implode(panels_str, ", "))); + } + + if (num_panels == 1) { + panel_doors_[panel_door_id].item_name = + fmt::format("{} (Panel)", room_strs[0]); + } else { + panel_doors_[panel_door_id].item_name = fmt::format( + "{} (Panels)", hatkirby::implode(room_strs, " and ")); + } + } + if (ids_config["panel_doors"] && ids_config["panel_doors"][rooms_[room_id].name] && ids_config["panel_doors"][rooms_[room_id].name] @@ -440,6 +485,9 @@ struct GameData { panel_doors_[panel_door_id].ap_item_id = ids_config["panel_doors"][rooms_[room_id].name][panel_door_name] .as(); + + item_by_ap_id_[panel_doors_[panel_door_id].ap_item_id] = + panel_doors_[panel_door_id].item_name; } else { TrackerLog(fmt::format("Missing AP item ID for panel door {} - {}", rooms_[room_id].name, panel_door_name)); @@ -453,6 +501,9 @@ struct GameData { ids_config["panel_groups"][panel_group]) { panel_doors_[panel_door_id].group_ap_item_id = ids_config["panel_groups"][panel_group].as(); + + item_by_ap_id_[panel_doors_[panel_door_id].group_ap_item_id] = + panel_group; } else { TrackerLog(fmt::format( "Missing AP item ID for panel door group {}", panel_group)); @@ -516,6 +567,8 @@ struct GameData { ids_config["progression"][progressive_item_name]) { progressive_item_id = ids_config["progression"][progressive_item_name].as(); + + item_by_ap_id_[progressive_item_id] = progressive_item_name; } else { TrackerLog(fmt::format("Missing AP item ID for progressive item {}", progressive_item_name)); @@ -1008,6 +1061,15 @@ int GD_GetSubwayItemForSunwarp(const SubwaySunwarp &sunwarp) { return GetState().subway_item_by_sunwarp_.at(sunwarp); } +std::string GD_GetItemName(int id) { + auto it = GetState().item_by_ap_id_.find(id); + if (it != GetState().item_by_ap_id_.end()) { + return it->second; + } else { + return "Unknown"; + } +} + LingoColor GetLingoColorForString(const std::string &str) { if (str == "black") { return LingoColor::kBlack; -- cgit 1.4.1