diff options
| author | Star Rauchenberger <fefferburbia@gmail.com> | 2023-09-17 12:42:46 -0400 |
|---|---|---|
| committer | Star Rauchenberger <fefferburbia@gmail.com> | 2023-09-17 12:42:46 -0400 |
| commit | 8e89e198830a0908ddd8f4c91cbc2bff08b0b32c (patch) | |
| tree | 67d5135dd589cda0be6ad206dec8534b32a88bc3 /src/game_data.cpp | |
| parent | 28c8c9c06981503ed86a0292c63c75b1b6784191 (diff) | |
| download | lingo-ap-tracker-8e89e198830a0908ddd8f4c91cbc2bff08b0b32c.tar.gz lingo-ap-tracker-8e89e198830a0908ddd8f4c91cbc2bff08b0b32c.tar.bz2 lingo-ap-tracker-8e89e198830a0908ddd8f4c91cbc2bff08b0b32c.zip | |
Use hardcoded AP ids now
Diffstat (limited to 'src/game_data.cpp')
| -rw-r--r-- | src/game_data.cpp | 113 |
1 files changed, 108 insertions, 5 deletions
| diff --git a/src/game_data.cpp b/src/game_data.cpp index 06eb80a..f51d7ac 100644 --- a/src/game_data.cpp +++ b/src/game_data.cpp | |||
| @@ -30,7 +30,10 @@ LingoColor GetColorForString(const std::string &str) { | |||
| 30 | } else if (str == "purple") { | 30 | } else if (str == "purple") { |
| 31 | return LingoColor::kPurple; | 31 | return LingoColor::kPurple; |
| 32 | } else { | 32 | } else { |
| 33 | std::cout << "Invalid color: " << str << std::endl; | 33 | std::ostringstream errmsg; |
| 34 | errmsg << "Invalid color: " << str; | ||
| 35 | TrackerLog(errmsg.str()); | ||
| 36 | |||
| 34 | return LingoColor::kNone; | 37 | return LingoColor::kNone; |
| 35 | } | 38 | } |
| 36 | } | 39 | } |
| @@ -52,6 +55,8 @@ struct GameData { | |||
| 52 | 55 | ||
| 53 | std::vector<int> achievement_panels_; | 56 | std::vector<int> achievement_panels_; |
| 54 | 57 | ||
| 58 | std::map<LingoColor, int> ap_id_by_color_; | ||
| 59 | |||
| 55 | bool loaded_area_data_ = false; | 60 | bool loaded_area_data_ = false; |
| 56 | std::set<std::string> malconfigured_areas_; | 61 | std::set<std::string> malconfigured_areas_; |
| 57 | 62 | ||
| @@ -59,6 +64,31 @@ struct GameData { | |||
| 59 | YAML::Node lingo_config = YAML::LoadFile("assets/LL1.yaml"); | 64 | YAML::Node lingo_config = YAML::LoadFile("assets/LL1.yaml"); |
| 60 | YAML::Node areas_config = YAML::LoadFile("assets/areas.yaml"); | 65 | YAML::Node areas_config = YAML::LoadFile("assets/areas.yaml"); |
| 61 | YAML::Node pilgrimage_config = YAML::LoadFile("assets/pilgrimage.yaml"); | 66 | YAML::Node pilgrimage_config = YAML::LoadFile("assets/pilgrimage.yaml"); |
| 67 | YAML::Node ids_config = YAML::LoadFile("assets/ids.yaml"); | ||
| 68 | |||
| 69 | auto init_color_id = [this, &ids_config](const std::string &color_name) { | ||
| 70 | if (ids_config["special_items"] && | ||
| 71 | ids_config["special_items"][color_name]) { | ||
| 72 | std::string input_name = color_name; | ||
| 73 | input_name[0] = std::tolower(input_name[0]); | ||
| 74 | ap_id_by_color_[GetColorForString(input_name)] = | ||
| 75 | ids_config["special_items"][color_name].as<int>(); | ||
| 76 | } else { | ||
| 77 | std::ostringstream errmsg; | ||
| 78 | errmsg << "Missing AP item ID for color " << color_name; | ||
| 79 | TrackerLog(errmsg.str()); | ||
| 80 | } | ||
| 81 | }; | ||
| 82 | |||
| 83 | init_color_id("Black"); | ||
| 84 | init_color_id("Red"); | ||
| 85 | init_color_id("Blue"); | ||
| 86 | init_color_id("Yellow"); | ||
| 87 | init_color_id("Green"); | ||
| 88 | init_color_id("Orange"); | ||
| 89 | init_color_id("Purple"); | ||
| 90 | init_color_id("Brown"); | ||
| 91 | init_color_id("Gray"); | ||
| 62 | 92 | ||
| 63 | rooms_.reserve(lingo_config.size() * 2); | 93 | rooms_.reserve(lingo_config.size() * 2); |
| 64 | 94 | ||
| @@ -225,6 +255,17 @@ struct GameData { | |||
| 225 | if (panel_it.second["non_counting"]) { | 255 | if (panel_it.second["non_counting"]) { |
| 226 | panel_obj.non_counting = panel_it.second["non_counting"].as<bool>(); | 256 | panel_obj.non_counting = panel_it.second["non_counting"].as<bool>(); |
| 227 | } | 257 | } |
| 258 | |||
| 259 | if (ids_config["panels"] && ids_config["panels"][room_obj.name] && | ||
| 260 | ids_config["panels"][room_obj.name][panel_obj.name]) { | ||
| 261 | panel_obj.ap_location_id = | ||
| 262 | ids_config["panels"][room_obj.name][panel_obj.name].as<int>(); | ||
| 263 | } else { | ||
| 264 | std::ostringstream errmsg; | ||
| 265 | errmsg << "Missing AP location ID for panel " << room_obj.name | ||
| 266 | << " - " << panel_obj.name; | ||
| 267 | TrackerLog(errmsg.str()); | ||
| 268 | } | ||
| 228 | } | 269 | } |
| 229 | } | 270 | } |
| 230 | 271 | ||
| @@ -272,8 +313,34 @@ struct GameData { | |||
| 272 | door_obj.item_name = room_obj.name + " - " + door_obj.name; | 313 | door_obj.item_name = room_obj.name + " - " + door_obj.name; |
| 273 | } | 314 | } |
| 274 | 315 | ||
| 316 | if (!door_it.second["skip_item"] && !door_it.second["event"]) { | ||
| 317 | if (ids_config["doors"] && ids_config["doors"][room_obj.name] && | ||
| 318 | ids_config["doors"][room_obj.name][door_obj.name] && | ||
| 319 | ids_config["doors"][room_obj.name][door_obj.name]["item"]) { | ||
| 320 | door_obj.ap_item_id = | ||
| 321 | ids_config["doors"][room_obj.name][door_obj.name]["item"] | ||
| 322 | .as<int>(); | ||
| 323 | } else { | ||
| 324 | std::ostringstream errmsg; | ||
| 325 | errmsg << "Missing AP item ID for door " << room_obj.name << " - " | ||
| 326 | << door_obj.name; | ||
| 327 | TrackerLog(errmsg.str()); | ||
| 328 | } | ||
| 329 | } | ||
| 330 | |||
| 275 | if (door_it.second["group"]) { | 331 | if (door_it.second["group"]) { |
| 276 | door_obj.group_name = door_it.second["group"].as<std::string>(); | 332 | door_obj.group_name = door_it.second["group"].as<std::string>(); |
| 333 | |||
| 334 | if (ids_config["door_groups"] && | ||
| 335 | ids_config["door_groups"][door_obj.group_name]) { | ||
| 336 | door_obj.group_ap_item_id = | ||
| 337 | ids_config["door_groups"][door_obj.group_name].as<int>(); | ||
| 338 | } else { | ||
| 339 | std::ostringstream errmsg; | ||
| 340 | errmsg << "Missing AP item ID for door group " | ||
| 341 | << door_obj.group_name; | ||
| 342 | TrackerLog(errmsg.str()); | ||
| 343 | } | ||
| 277 | } | 344 | } |
| 278 | 345 | ||
| 279 | if (door_it.second["location_name"]) { | 346 | if (door_it.second["location_name"]) { |
| @@ -282,18 +349,34 @@ struct GameData { | |||
| 282 | } else if (!door_it.second["skip_location"] && | 349 | } else if (!door_it.second["skip_location"] && |
| 283 | !door_it.second["event"]) { | 350 | !door_it.second["event"]) { |
| 284 | if (has_external_panels) { | 351 | if (has_external_panels) { |
| 285 | std::cout | 352 | std::ostringstream errmsg; |
| 353 | errmsg | ||
| 286 | << room_obj.name << " - " << door_obj.name | 354 | << room_obj.name << " - " << door_obj.name |
| 287 | << " has panels from other rooms but does not have an " | 355 | << " has panels from other rooms but does not have an " |
| 288 | "explicit " | 356 | "explicit " |
| 289 | "location name and is not marked skip_location or event" | 357 | "location name and is not marked skip_location or event"; |
| 290 | << std::endl; | 358 | TrackerLog(errmsg.str()); |
| 291 | } | 359 | } |
| 292 | 360 | ||
| 293 | door_obj.location_name = | 361 | door_obj.location_name = |
| 294 | room_obj.name + " - " + hatkirby::implode(panel_names, ", "); | 362 | room_obj.name + " - " + hatkirby::implode(panel_names, ", "); |
| 295 | } | 363 | } |
| 296 | 364 | ||
| 365 | if (!door_it.second["skip_location"] && !door_it.second["event"]) { | ||
| 366 | if (ids_config["doors"] && ids_config["doors"][room_obj.name] && | ||
| 367 | ids_config["doors"][room_obj.name][door_obj.name] && | ||
| 368 | ids_config["doors"][room_obj.name][door_obj.name]["location"]) { | ||
| 369 | door_obj.ap_location_id = | ||
| 370 | ids_config["doors"][room_obj.name][door_obj.name]["location"] | ||
| 371 | .as<int>(); | ||
| 372 | } else { | ||
| 373 | std::ostringstream errmsg; | ||
| 374 | errmsg << "Missing AP location ID for door " << room_obj.name | ||
| 375 | << " - " << door_obj.name; | ||
| 376 | TrackerLog(errmsg.str()); | ||
| 377 | } | ||
| 378 | } | ||
| 379 | |||
| 297 | if (door_it.second["include_reduce"]) { | 380 | if (door_it.second["include_reduce"]) { |
| 298 | door_obj.exclude_reduce = | 381 | door_obj.exclude_reduce = |
| 299 | !door_it.second["include_reduce"].as<bool>(); | 382 | !door_it.second["include_reduce"].as<bool>(); |
| @@ -330,6 +413,18 @@ struct GameData { | |||
| 330 | std::string progressive_item_name = | 413 | std::string progressive_item_name = |
| 331 | progression_it.first.as<std::string>(); | 414 | progression_it.first.as<std::string>(); |
| 332 | 415 | ||
| 416 | int progressive_item_id = -1; | ||
| 417 | if (ids_config["progression"] && | ||
| 418 | ids_config["progression"][progressive_item_name]) { | ||
| 419 | progressive_item_id = | ||
| 420 | ids_config["progression"][progressive_item_name].as<int>(); | ||
| 421 | } else { | ||
| 422 | std::ostringstream errmsg; | ||
| 423 | errmsg << "Missing AP item ID for progressive item " | ||
| 424 | << progressive_item_name; | ||
| 425 | TrackerLog(errmsg.str()); | ||
| 426 | } | ||
| 427 | |||
| 333 | int index = 1; | 428 | int index = 1; |
| 334 | for (const auto &stage : progression_it.second) { | 429 | for (const auto &stage : progression_it.second) { |
| 335 | int door_id = -1; | 430 | int door_id = -1; |
| @@ -342,7 +437,9 @@ struct GameData { | |||
| 342 | } | 437 | } |
| 343 | 438 | ||
| 344 | doors_[door_id].progressives.push_back( | 439 | doors_[door_id].progressives.push_back( |
| 345 | {.item_name = progressive_item_name, .quantity = index}); | 440 | {.item_name = progressive_item_name, |
| 441 | .ap_item_id = progressive_item_id, | ||
| 442 | .quantity = index}); | ||
| 346 | index++; | 443 | index++; |
| 347 | } | 444 | } |
| 348 | } | 445 | } |
| @@ -393,6 +490,7 @@ struct GameData { | |||
| 393 | map_area.locations.push_back( | 490 | map_area.locations.push_back( |
| 394 | {.name = panel.name, | 491 | {.name = panel.name, |
| 395 | .ap_location_name = room_name + " - " + panel.name, | 492 | .ap_location_name = room_name + " - " + panel.name, |
| 493 | .ap_location_id = panel.ap_location_id, | ||
| 396 | .room = panel.room, | 494 | .room = panel.room, |
| 397 | .panels = {panel.id}, | 495 | .panels = {panel.id}, |
| 398 | .classification = classification}); | 496 | .classification = classification}); |
| @@ -436,6 +534,7 @@ struct GameData { | |||
| 436 | // room field should be the original room ID | 534 | // room field should be the original room ID |
| 437 | map_area.locations.push_back({.name = section_name, | 535 | map_area.locations.push_back({.name = section_name, |
| 438 | .ap_location_name = door.location_name, | 536 | .ap_location_name = door.location_name, |
| 537 | .ap_location_id = door.ap_location_id, | ||
| 439 | .room = door.room, | 538 | .room = door.room, |
| 440 | .panels = door.panels, | 539 | .panels = door.panels, |
| 441 | .classification = classification}); | 540 | .classification = classification}); |
| @@ -564,3 +663,7 @@ int GD_GetRoomForPainting(const std::string &painting_id) { | |||
| 564 | const std::vector<int> &GD_GetAchievementPanels() { | 663 | const std::vector<int> &GD_GetAchievementPanels() { |
| 565 | return GetState().achievement_panels_; | 664 | return GetState().achievement_panels_; |
| 566 | } | 665 | } |
| 666 | |||
| 667 | int GD_GetItemIdForColor(LingoColor color) { | ||
| 668 | return GetState().ap_id_by_color_.at(color); | ||
| 669 | } | ||
