diff --git a/src/hoi4_world/characters/hoi4_characters_converter.cpp b/src/hoi4_world/characters/hoi4_characters_converter.cpp index b862b6a7..2776ec16 100644 --- a/src/hoi4_world/characters/hoi4_characters_converter.cpp +++ b/src/hoi4_world/characters/hoi4_characters_converter.cpp @@ -88,7 +88,8 @@ std::pair ConvertCountryLeader(const std::map primary_culture_ids; std::set primary_cultures; std::optional last_election; - std::int64_t head_of_state_id = 0; + int head_of_state_id = 0; std::vector character_ids; std::vector ig_ids; std::set puppets; @@ -121,7 +121,7 @@ class Country [[nodiscard]] const std::set& GetPrimaryCultures() const { return primary_cultures_; } [[nodiscard]] const std::set& GetPrimaryCultureIds() const { return primary_culture_ids_; } [[nodiscard]] const std::optional& GetLastElection() const { return last_election_; } - [[nodiscard]] std::int64_t GetHeadOfStateId() const { return head_of_state_id_; } + [[nodiscard]] int GetHeadOfStateId() const { return head_of_state_id_; } [[nodiscard]] const std::vector& GetCharacterIds() const { return character_ids_; } [[nodiscard]] const std::vector& GetInterestGroupIds() const { return ig_ids_; } [[nodiscard]] const std::set& GetPuppets() const { return puppets_; } @@ -171,7 +171,7 @@ class Country std::set primary_cultures_; std::set primary_culture_ids_; // Resolve to culture name before HoI std::optional last_election_; - std::int64_t head_of_state_id_ = 0; + int head_of_state_id_ = 0; std::vector character_ids_; std::vector ig_ids_; std::set puppets_; diff --git a/src/vic3_world/countries/vic3_country_importer.cpp b/src/vic3_world/countries/vic3_country_importer.cpp index eb6f212c..ed9d33dd 100644 --- a/src/vic3_world/countries/vic3_country_importer.cpp +++ b/src/vic3_world/countries/vic3_country_importer.cpp @@ -100,7 +100,15 @@ vic3::CountryImporter::CountryImporter() } }); country_parser_.registerKeyword("ruler", [this](std::istream& input_stream) { - options_.head_of_state_id = commonItems::getLlong(input_stream); + const int64_t temp_number = commonItems::getLlong(input_stream); + if (temp_number == 4294967295) + { + options_.head_of_state_id = -1; + } + else + { + options_.head_of_state_id = static_cast(temp_number); + } }); country_parser_.registerKeyword("dead", [this](std::istream& input_stream) { diff --git a/src/vic3_world/countries/vic3_country_importer_tests.cpp b/src/vic3_world/countries/vic3_country_importer_tests.cpp index 269dd6cc..5801a6d8 100644 --- a/src/vic3_world/countries/vic3_country_importer_tests.cpp +++ b/src/vic3_world/countries/vic3_country_importer_tests.cpp @@ -78,6 +78,21 @@ TEST(Vic3WorldCountriesCountryImporter, ItemsCanBeInput) } +TEST(Vic3WorldCountriesCountryImporter, LongSentinelValueMapsToNegativeOne) +{ + std::stringstream input; + input << "={\n"; + input << "\tcapital=4294967295\n"; + input << "\truler=4294967295\n"; + input << "}"; + const auto country = CountryImporter{}.ImportCountry(42, input, {}); + + EXPECT_TRUE(country.has_value()); + EXPECT_EQ(country.value_or(Country({})).GetCapitalState(), std::optional(-1)); + EXPECT_EQ(country.value_or(Country({})).GetHeadOfStateId(), -1); +} + + TEST(Vic3WorldCountriesCountryImporter, Pre1_5DynamicsCanBeImported) { std::stringstream input;