From 931f0705ce651d593fe171096e352f99c4b360fb Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sun, 29 Sep 2024 15:05:55 +0200 Subject: [PATCH] Introduce PeepNamesObjects for 'real' names of peeps (#22758) * Add initial PeepNamesObject implementation * Add peep names object to default objects * Append peep names object to object list for older saves * Deduplicate AppendRequiredObjects functions * Remove built-in 'real name' tables * Increment park version; introduce kPeepNamesObjectsVersion * Update objects dependency to v1.4.8 --- CMakeLists.txt | 4 +- data/language/en-GB.txt | 2 + distribution/changelog.txt | 2 + openrct2.proj | 4 +- src/openrct2-ui/UiStringIds.h | 1 + .../windows/EditorObjectSelection.cpp | 1 + src/openrct2/Editor.cpp | 5 + src/openrct2/EditorObjectSelectionSession.cpp | 4 + src/openrct2/entity/Peep.cpp | 1 - src/openrct2/interface/InteractiveConsole.cpp | 1 + src/openrct2/libopenrct2.vcxproj | 4 +- src/openrct2/localisation/Formatting.cpp | 18 +- src/openrct2/localisation/StringIdType.h | 3 + src/openrct2/localisation/StringIds.h | 2 + src/openrct2/object/DefaultObjects.cpp | 3 + src/openrct2/object/DefaultObjects.h | 2 +- src/openrct2/object/ObjectFactory.cpp | 6 + src/openrct2/object/ObjectLimits.h | 1 + src/openrct2/object/ObjectList.cpp | 2 +- src/openrct2/object/ObjectTypes.cpp | 2 + src/openrct2/object/ObjectTypes.h | 3 +- src/openrct2/object/PeepNamesObject.cpp | 48 + src/openrct2/object/PeepNamesObject.h | 31 + src/openrct2/park/ParkFile.cpp | 7 + src/openrct2/park/ParkFile.h | 5 +- src/openrct2/peep/RealNames.cpp | 1044 ----------------- src/openrct2/peep/RealNames.h | 19 - src/openrct2/rct1/S4Importer.cpp | 16 +- src/openrct2/rct12/RCT12.cpp | 2 +- src/openrct2/rct12/RCT12.h | 1 + src/openrct2/rct2/S6Importer.cpp | 1 + 31 files changed, 148 insertions(+), 1097 deletions(-) create mode 100644 src/openrct2/object/PeepNamesObject.cpp create mode 100644 src/openrct2/object/PeepNamesObject.h delete mode 100644 src/openrct2/peep/RealNames.cpp delete mode 100644 src/openrct2/peep/RealNames.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 9bb8a42073..d18d9fc008 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,9 +68,9 @@ set(TITLE_SEQUENCE_VERSION "0.4.14") set(TITLE_SEQUENCE_URL "https://github.com/OpenRCT2/title-sequences/releases/download/v${TITLE_SEQUENCE_VERSION}/title-sequences.zip") set(TITLE_SEQUENCE_SHA1 "6c04781b959b468e1f65ec2d2f21f5aaa5e5724d") -set(OBJECTS_VERSION "1.4.7") +set(OBJECTS_VERSION "1.4.8") set(OBJECTS_URL "https://github.com/OpenRCT2/objects/releases/download/v${OBJECTS_VERSION}/objects.zip") -set(OBJECTS_SHA1 "322de669d4b277fceff0d3f123fbc54785dceb4d") +set(OBJECTS_SHA1 "405aef518945e617b2750be9128796daa70dba19") set(OPENSFX_VERSION "1.0.5") set(OPENSFX_URL "https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v${OPENSFX_VERSION}/opensound.zip") diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index a06436ce9c..3bacc3eb0c 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3746,6 +3746,8 @@ STR_6672 :Toggle between showing ‘real’ names of staff and staff numbers STR_6673 :Transparent # Used as part of a sentence (see https://github.com/OpenRCT2/OpenRCT2/issues/22072). STR_6674 :{MONTH}, Year {COMMA16} +STR_6675 :Peep Names +STR_6676 :At least one peep names object must be selected ############# # Scenarios # diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 4c02dbf80c..5a542c494b 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -4,6 +4,7 @@ - Feature: [#15642] Track design placement can now use construction modifier keys (ctrl/shift). - Feature: [#21521] [Plugin] Add hook 'park.guest.softcap.calculate' called before calculating the soft guest cap. - Feature: [#22694] Park graphs have tooltips and can be resized like finance graphs. +- Feature: [#22758] The table of ‘real’ peep names can now be changed using Peep Names objects. - Improved: [#22470] Android: automatically detect RCT2 installs in /sdcard/rct2. - Improved: [#22777] Add long flat-to-steep track pieces to the Wooden and Classic Wooden Roller Coasters. - Change: [#22494] Themes window now displays colours and checkboxes vertically. @@ -25,6 +26,7 @@ - Fix: [#22729] Invisibility settings persist after reloading OpenRCT2. - Fix: [#22734] Support clearance above steep Side-Friction track is too low. - Fix: [#22774] Fix entities leaving stale pixels on the screen when the framerate is uncapped. +- Fix: [objects#346] Invalid refund price for Brick Base Block scenery item. 0.4.14 (2024-09-01) ------------------------------------------------------------------------ diff --git a/openrct2.proj b/openrct2.proj index a98b5b9d6a..7007e7e651 100644 --- a/openrct2.proj +++ b/openrct2.proj @@ -45,8 +45,8 @@ 9984c1e317dcfb3aaf8e17f1db2ebb0f771e2373 https://github.com/OpenRCT2/title-sequences/releases/download/v0.4.14/title-sequences.zip 6c04781b959b468e1f65ec2d2f21f5aaa5e5724d - https://github.com/OpenRCT2/objects/releases/download/v1.4.7/objects.zip - 322de669d4b277fceff0d3f123fbc54785dceb4d + https://github.com/OpenRCT2/objects/releases/download/v1.4.8/objects.zip + 405aef518945e617b2750be9128796daa70dba19 https://github.com/OpenRCT2/OpenSoundEffects/releases/download/v1.0.5/opensound.zip b1b1f1b241d2cbff63a1889c4dc5a09bdf769bfb https://github.com/OpenRCT2/OpenMusic/releases/download/v1.6/openmusic.zip diff --git a/src/openrct2-ui/UiStringIds.h b/src/openrct2-ui/UiStringIds.h index af610d2f61..84cd447ec6 100644 --- a/src/openrct2-ui/UiStringIds.h +++ b/src/openrct2-ui/UiStringIds.h @@ -514,6 +514,7 @@ namespace OpenRCT2 STR_OBJECT_SELECTION_ONLY_STRINGID = 6655, STR_OBJECT_SELECTION_PATH_EXTRAS = 3190, STR_OBJECT_SELECTION_PATH_SIGNS = 3188, + STR_OBJECT_SELECTION_PEEP_NAMES = 6675, STR_OBJECT_SELECTION_RIDE_VEHICLES_ATTRACTIONS = 3184, STR_OBJECT_SELECTION_SCENERY_GROUPS = 3191, STR_OBJECT_SELECTION_SELECTION_SIZE = 3164, diff --git a/src/openrct2-ui/windows/EditorObjectSelection.cpp b/src/openrct2-ui/windows/EditorObjectSelection.cpp index 31734e4414..5a46c4b015 100644 --- a/src/openrct2-ui/windows/EditorObjectSelection.cpp +++ b/src/openrct2-ui/windows/EditorObjectSelection.cpp @@ -183,6 +183,7 @@ namespace OpenRCT2::Ui::Windows { STR_OBJECT_SELECTION_PARK_ENTRANCE, ObjectType::ParkEntrance, SPR_TAB_PARK, kEntrancesObjectSubTabs }, { STR_OBJECT_SELECTION_TERRAIN_SURFACES, ObjectType::TerrainSurface, SPR_G2_TAB_LAND, kTerrainObjectSubTabs }, { STR_OBJECT_SELECTION_MUSIC, ObjectType::Music, SPR_TAB_MUSIC_0, {} }, + { STR_OBJECT_SELECTION_PEEP_NAMES, ObjectType::PeepNames, SPR_TAB_GUESTS_0, {} }, }; // clang-format on diff --git a/src/openrct2/Editor.cpp b/src/openrct2/Editor.cpp index 1c8c6a6071..1c793b062d 100644 --- a/src/openrct2/Editor.cpp +++ b/src/openrct2/Editor.cpp @@ -435,6 +435,11 @@ namespace OpenRCT2::Editor return { ObjectType::TerrainEdge, STR_AT_LEAST_ONE_TERRAIN_EDGE_OBJECT_MUST_BE_SELECTED }; } + if (!EditorCheckObjectGroupAtLeastOneSelected(ObjectType::PeepNames)) + { + return { ObjectType::PeepNames, STR_AT_LEAST_ONE_PEEP_NAMES_OBJECT_MUST_BE_SELECTED }; + } + if (!isTrackDesignerManager) { if (!EditorCheckObjectGroupAtLeastOneSelected(ObjectType::ParkEntrance)) diff --git a/src/openrct2/EditorObjectSelectionSession.cpp b/src/openrct2/EditorObjectSelectionSession.cpp index 1c9be53784..ba4b925737 100644 --- a/src/openrct2/EditorObjectSelectionSession.cpp +++ b/src/openrct2/EditorObjectSelectionSession.cpp @@ -610,6 +610,10 @@ ResultWithMessage WindowEditorObjectSelectionSelectObject( // Replace old palette with newly selected palette immediately. ReplaceSelectedWaterPalette(item); } + else if (objectType == ObjectType::PeepNames) + { + PeepUpdateNames(); + } if (isMasterObject != 0 && !(flags & INPUT_FLAG_EDITOR_OBJECT_1)) { diff --git a/src/openrct2/entity/Peep.cpp b/src/openrct2/entity/Peep.cpp index 84e25d70b6..77d83bd47c 100644 --- a/src/openrct2/entity/Peep.cpp +++ b/src/openrct2/entity/Peep.cpp @@ -38,7 +38,6 @@ #include "../peep/GuestPathfinding.h" #include "../peep/PeepAnimationData.h" #include "../peep/PeepSpriteIds.h" -#include "../peep/RealNames.h" #include "../profiling/Profiling.h" #include "../ride/Ride.h" #include "../ride/RideData.h" diff --git a/src/openrct2/interface/InteractiveConsole.cpp b/src/openrct2/interface/InteractiveConsole.cpp index ce4fc8fe7e..eed0710626 100644 --- a/src/openrct2/interface/InteractiveConsole.cpp +++ b/src/openrct2/interface/InteractiveConsole.cpp @@ -1307,6 +1307,7 @@ constexpr std::array _objectTypeNames = { "Footpath Surface", "Footpath Railings", "Audio", + "Guest Names", }; static_assert(_objectTypeNames.size() == EnumValue(ObjectType::Count)); diff --git a/src/openrct2/libopenrct2.vcxproj b/src/openrct2/libopenrct2.vcxproj index 174819db6c..4c0af9968c 100644 --- a/src/openrct2/libopenrct2.vcxproj +++ b/src/openrct2/libopenrct2.vcxproj @@ -329,6 +329,7 @@ + @@ -389,7 +390,6 @@ - @@ -863,6 +863,7 @@ + @@ -987,7 +988,6 @@ - diff --git a/src/openrct2/localisation/Formatting.cpp b/src/openrct2/localisation/Formatting.cpp index d64e07c764..3fd3a6d143 100644 --- a/src/openrct2/localisation/Formatting.cpp +++ b/src/openrct2/localisation/Formatting.cpp @@ -9,10 +9,12 @@ #include "Formatting.h" +#include "../Context.h" #include "../Diagnostic.h" #include "../config/Config.h" #include "../core/String.hpp" -#include "../peep/RealNames.h" +#include "../object/ObjectManager.h" +#include "../object/PeepNamesObject.h" #include "../util/Util.h" #include "Currency.h" #include "FormatCodes.h" @@ -289,11 +291,15 @@ namespace OpenRCT2 { if (IsRealNameStringId(id)) { - auto realNameIndex = id - kRealNameStart; - ss << real_names[realNameIndex % std::size(real_names)]; - ss << ' '; - ss << real_name_initials[(realNameIndex >> 10) % std::size(real_name_initials)]; - ss << '.'; + auto& objManager = GetContext()->GetObjectManager(); + auto* peepNamesObj = static_cast(objManager.GetLoadedObject(ObjectType::PeepNames, 0)); + if (peepNamesObj != nullptr) + { + auto realNameIndex = id - kRealNameStart; + ss << peepNamesObj->GetGivenNameAt(realNameIndex); + ss << ' '; + ss << peepNamesObj->GetSurnameAt(realNameIndex >> 10); + } } } diff --git a/src/openrct2/localisation/StringIdType.h b/src/openrct2/localisation/StringIdType.h index 1537f842a3..329e7b2da0 100644 --- a/src/openrct2/localisation/StringIdType.h +++ b/src/openrct2/localisation/StringIdType.h @@ -15,3 +15,6 @@ using StringId = uint16_t; constexpr StringId STR_NONE = 0xFFFF; constexpr StringId STR_EMPTY = 0; + +constexpr uint16_t kRealNameStart = 0xA000; +constexpr uint16_t kRealNameEnd = 0xDFFF; diff --git a/src/openrct2/localisation/StringIds.h b/src/openrct2/localisation/StringIds.h index 1812de6b03..759052e089 100644 --- a/src/openrct2/localisation/StringIds.h +++ b/src/openrct2/localisation/StringIds.h @@ -1694,6 +1694,8 @@ enum : StringId STR_DATE_FORMAT_MY_SENTENCE = 6674, + STR_AT_LEAST_ONE_PEEP_NAMES_OBJECT_MUST_BE_SELECTED = 6676, + // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working /* MAX_STR_COUNT = 32768 */ // MAX_STR_COUNT - upper limit for number of strings, not the current count strings }; diff --git a/src/openrct2/object/DefaultObjects.cpp b/src/openrct2/object/DefaultObjects.cpp index 062173c309..4322e8b524 100644 --- a/src/openrct2/object/DefaultObjects.cpp +++ b/src/openrct2/object/DefaultObjects.cpp @@ -144,6 +144,9 @@ const std::string_view DefaultSelectedObjects[] = { "rct2.footpath_railings.concrete_green", "rct2.footpath_railings.space", "rct2.footpath_railings.wood", + + // Peep name objects + "rct2.peep_names.original", }; const std::string_view DesignerSelectedObjects[] = { diff --git a/src/openrct2/object/DefaultObjects.h b/src/openrct2/object/DefaultObjects.h index 5a35660d5c..98c9c814e0 100644 --- a/src/openrct2/object/DefaultObjects.h +++ b/src/openrct2/object/DefaultObjects.h @@ -12,5 +12,5 @@ #include "Object.h" extern const std::string_view MinimumRequiredObjects[2]; -extern const std::string_view DefaultSelectedObjects[114]; +extern const std::string_view DefaultSelectedObjects[115]; extern const std::string_view DesignerSelectedObjects[39]; diff --git a/src/openrct2/object/ObjectFactory.cpp b/src/openrct2/object/ObjectFactory.cpp index 11c052869b..d4b47fab8a 100644 --- a/src/openrct2/object/ObjectFactory.cpp +++ b/src/openrct2/object/ObjectFactory.cpp @@ -36,6 +36,7 @@ #include "ObjectLimits.h" #include "ObjectList.h" #include "PathAdditionObject.h" +#include "PeepNamesObject.h" #include "RideObject.h" #include "SceneryGroupObject.h" #include "SmallSceneryObject.h" @@ -384,6 +385,9 @@ namespace OpenRCT2::ObjectFactory case ObjectType::Audio: result = std::make_unique(); break; + case ObjectType::PeepNames: + result = std::make_unique(); + break; default: throw std::runtime_error("Invalid object type"); } @@ -424,6 +428,8 @@ namespace OpenRCT2::ObjectFactory return ObjectType::FootpathRailings; if (s == "audio") return ObjectType::Audio; + if (s == "peep_names") + return ObjectType::PeepNames; return ObjectType::None; } diff --git a/src/openrct2/object/ObjectLimits.h b/src/openrct2/object/ObjectLimits.h index 1e6ad74796..d8b9f599e7 100644 --- a/src/openrct2/object/ObjectLimits.h +++ b/src/openrct2/object/ObjectLimits.h @@ -31,5 +31,6 @@ constexpr uint16_t kMaxMusicObjects = 255; constexpr uint16_t kMaxFootpathSurfaceObjects = 255; constexpr uint16_t kMaxFootpathRailingsObjects = 255; constexpr uint16_t kMaxAudioObjects = 255; +constexpr uint16_t kMaxPeepNamesObjects = 1; constexpr uint8_t kDatNameLength = 8; diff --git a/src/openrct2/object/ObjectList.cpp b/src/openrct2/object/ObjectList.cpp index ab19fa80a1..59d50d887b 100644 --- a/src/openrct2/object/ObjectList.cpp +++ b/src/openrct2/object/ObjectList.cpp @@ -36,7 +36,7 @@ static constexpr std::array kObjectEntryG kMaxScenarioTextObjects, // scenario text kMaxTerrainSurfaceObjects, kMaxTerrainEdgeObjects, kMaxStationObjects, kMaxMusicObjects, kMaxFootpathSurfaceObjects, kMaxFootpathRailingsObjects, - kMaxAudioObjects, + kMaxAudioObjects, kMaxPeepNamesObjects, }; static_assert(std::size(kObjectEntryGroupCounts) == EnumValue(ObjectType::Count)); diff --git a/src/openrct2/object/ObjectTypes.cpp b/src/openrct2/object/ObjectTypes.cpp index af6aa715bd..3c704d9289 100644 --- a/src/openrct2/object/ObjectTypes.cpp +++ b/src/openrct2/object/ObjectTypes.cpp @@ -33,6 +33,7 @@ constexpr std::array kAllObjectTypes = { ObjectType::FootpathSurface, ObjectType::FootpathRailings, ObjectType::Audio, + ObjectType::PeepNames, }; static_assert(kAllObjectTypes.size() == EnumValue(ObjectType::Count)); @@ -43,6 +44,7 @@ static constexpr std::array kTransie ObjectType::Banners, ObjectType::Paths, ObjectType::PathAdditions, ObjectType::SceneryGroup, ObjectType::ParkEntrance, ObjectType::Water, ObjectType::TerrainSurface, ObjectType::TerrainEdge, ObjectType::Station, ObjectType::Music, ObjectType::FootpathSurface, ObjectType::FootpathRailings, + ObjectType::PeepNames, }; // Object types that cannot be saved in a park file. diff --git a/src/openrct2/object/ObjectTypes.h b/src/openrct2/object/ObjectTypes.h index da203123a8..d9c93f57dd 100644 --- a/src/openrct2/object/ObjectTypes.h +++ b/src/openrct2/object/ObjectTypes.h @@ -39,12 +39,13 @@ enum class ObjectType : uint8_t FootpathSurface, FootpathRailings, Audio, + PeepNames, Count, None = 255 }; -static constexpr size_t kNumTransientObjectTypes = 16; +static constexpr size_t kNumTransientObjectTypes = 17; static constexpr size_t kNumIntransientObjectTypes = 2; bool ObjectTypeIsTransient(ObjectType type); diff --git a/src/openrct2/object/PeepNamesObject.cpp b/src/openrct2/object/PeepNamesObject.cpp new file mode 100644 index 0000000000..16efcb49b7 --- /dev/null +++ b/src/openrct2/object/PeepNamesObject.cpp @@ -0,0 +1,48 @@ +/***************************************************************************** + * Copyright (c) 2014-2024 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#include "PeepNamesObject.h" + +#include "../Context.h" +#include "../PlatformEnvironment.h" +#include "../core/Json.hpp" + +using namespace OpenRCT2; + +void PeepNamesObject::Load() +{ +} + +void PeepNamesObject::Unload() +{ +} + +void PeepNamesObject::ReadJson(IReadObjectContext* context, json_t& root) +{ + Guard::Assert(root.is_object(), "PeepNamesObject::ReadJson expects parameter root to be an object"); + PopulateTablesFromJson(context, root); + + Guard::Assert(root["given_names"].is_array(), "PeepNamesObject::ReadJson expects given_names to be an array"); + _givenNames = root["given_names"].get>(); + std::sort(_givenNames.begin(), _givenNames.end()); + + Guard::Assert(root["surnames"].is_array(), "PeepNamesObject::ReadJson expects surnames to be an array"); + _surnames = root["surnames"].get>(); + std::sort(_surnames.begin(), _surnames.end()); +} + +std::string PeepNamesObject::GetGivenNameAt(size_t index) const +{ + return _givenNames[index % _givenNames.size()]; +} + +std::string PeepNamesObject::GetSurnameAt(size_t index) const +{ + return _surnames[index % _surnames.size()]; +} diff --git a/src/openrct2/object/PeepNamesObject.h b/src/openrct2/object/PeepNamesObject.h new file mode 100644 index 0000000000..fc3fa120b1 --- /dev/null +++ b/src/openrct2/object/PeepNamesObject.h @@ -0,0 +1,31 @@ +/***************************************************************************** + * Copyright (c) 2014-2024 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#pragma once + +#include "../core/IStream.hpp" +#include "Object.h" + +#include +#include + +class PeepNamesObject final : public Object +{ +private: + std::vector _givenNames; + std::vector _surnames; + +public: + void ReadJson(IReadObjectContext* context, json_t& root) override; + void Load() override; + void Unload() override; + + std::string GetGivenNameAt(size_t index) const; + std::string GetSurnameAt(size_t index) const; +}; diff --git a/src/openrct2/park/ParkFile.cpp b/src/openrct2/park/ParkFile.cpp index f1564f05dc..9b2e1980f3 100644 --- a/src/openrct2/park/ParkFile.cpp +++ b/src/openrct2/park/ParkFile.cpp @@ -373,6 +373,13 @@ namespace OpenRCT2 } } }); + + if (version < kPeepNamesObjectsVersion) + { + AppendRequiredObjects( + requiredObjects, ObjectType::PeepNames, std::vector({ "rct2.peep_names.original" })); + } + RequiredObjects = std::move(requiredObjects); } else diff --git a/src/openrct2/park/ParkFile.h b/src/openrct2/park/ParkFile.h index 602e508085..08cc0327ab 100644 --- a/src/openrct2/park/ParkFile.h +++ b/src/openrct2/park/ParkFile.h @@ -11,10 +11,10 @@ namespace OpenRCT2 struct GameState_t; // Current version that is saved. - constexpr uint32_t PARK_FILE_CURRENT_VERSION = 38; + constexpr uint32_t PARK_FILE_CURRENT_VERSION = 39; // The minimum version that is forwards compatible with the current version. - constexpr uint32_t PARK_FILE_MIN_VERSION = 38; + constexpr uint32_t PARK_FILE_MIN_VERSION = 39; // The minimum version that is backwards compatible with the current version. // If this is increased beyond 0, uncomment the checks in ParkFile.cpp and Context.cpp! @@ -30,6 +30,7 @@ namespace OpenRCT2 constexpr uint16_t kGigaCoasterInversions = 31; constexpr uint16_t kWoodenFlatToSteepVersion = 37; constexpr uint16_t k16BitParkHistoryVersion = 38; + constexpr uint16_t kPeepNamesObjectsVersion = 39; } // namespace OpenRCT2 class ParkFileExporter diff --git a/src/openrct2/peep/RealNames.cpp b/src/openrct2/peep/RealNames.cpp deleted file mode 100644 index 1214de0f8b..0000000000 --- a/src/openrct2/peep/RealNames.cpp +++ /dev/null @@ -1,1044 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2014-2024 OpenRCT2 developers - * - * For a complete list of all authors, please refer to contributors.md - * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 - * - * OpenRCT2 is licensed under the GNU General Public License version 3. - *****************************************************************************/ - -#include "RealNames.h" - -const char real_name_initials[] = { - 'B', 'C', 'D', 'F', 'G', 'H', 'J', 'K', 'L', 'M', 'N', 'P', 'R', 'S', 'T', 'W', -}; - -// clang-format off -// The peep sorter assumes this array is alphabetically ordered -const char *real_names[] = { - "Aaron", - "Abdul", - "Abraham", - "Abu", - "Adam", - "Adrian", - "Adriane", - "Aileen", - "Aisha", - "Akiko", - "Akira", - "Al", - "Alan", - "Alana", - "Albert", - "Alberta", - "Alec", - "Alesia", - "Alex", - "Alexa", - "Alexander", - "Alexandra", - "Alexis", - "Alf", - "Alfonso", - "Alfred", - "Ali", - "Alice", - "Alicia", - "Alison", - "Alistair", - "Allan", - "Allen", - "Allison", - "Allister", - "Alma", - "Alvin", - "Alyson", - "Amanda", - "Amber", - "Amilio", - "Amos", - "Amy", - "Ana", - "Anabel", - "Anastasia", - "Andie", - "Andrea", - "Andres", - "Andrew", - "Andy", - "Angel", - "Angela", - "Angelica", - "Angie", - "Angus", - "Anika", - "Ann", - "Anna", - "Anne", - "Annette", - "Annie", - "Annika", - "Anthony", - "Anton", - "Antonio", - "April", - "Archer", - "Archie", - "Arlene", - "Arnie", - "Arnold", - "Art", - "Arthur", - "Asaf", - "Ashley", - "Astrid", - "Aubrey", - "Austin", - "Austine", - "Avon", - "Avril", - "Axel", - "Aziz", - "Bailey", - "Barbara", - "Barney", - "Barry", - "Bart", - "Barton", - "Baxter", - "Beck", - "Becket", - "Becky", - "Belinda", - "Bella", - "Belle", - "Ben", - "Benjamin", - "Benny", - "Bernadette", - "Bernard", - "Bernard", - "Bernardette", - "Bernice", - "Bernice", - "Berty", - "Bess", - "Beth", - "Bethany", - "Bette", - "Betty", - "Bev", - "Beverley", - "Beverly", - "Bianca", - "Bill", - "Billie", - "Billy", - "Bjorn", - "Blaire", - "Blake", - "Blanche", - "Bo", - "Bob", - "Bobbie", - "Bobby", - "Bonnie", - "Boris", - "Brad", - "Bradley", - "Brady", - "Brandi", - "Brandon", - "Brandy", - "Brenda", - "Brendan", - "Brendon", - "Brent", - "Brett", - "Brian", - "Bridgit", - "Brigitte", - "Britney", - "Bruce", - "Bruno", - "Brutus", - "Bryan", - "Buck", - "Bucky", - "Bug", - "Burton", - "Byron", - "Cailin", - "Caitlyn", - "Cal", - "Caley", - "Callum", - "Calvin", - "Cameron", - "Camille", - "Campbell", - "Candy", - "Carl", - "Carla", - "Carlene", - "Carlos", - "Carmela", - "Carmen", - "Carol", - "Carole", - "Caroline", - "Carolyn", - "Carrie", - "Casey", - "Cassandra", - "Cassey", - "Cassie", - "Catherina", - "Catherine", - "Cathy", - "Caz", - "Cecelia", - "Cecil", - "Cecille", - "Ceilidh", - "Celeste", - "Chad", - "Charlene", - "Charles", - "Charlie", - "Charlotte", - "Chelsea", - "Cher", - "Cheri", - "Cheryll", - "Chip", - "Chloe", - "Chris", - "Christel", - "Christian", - "Christie", - "Christina", - "Christine", - "Christopher", - "Chuck", - "Cindy", - "Clair", - "Claire", - "Clara", - "Clarabell", - "Clark", - "Claude", - "Claudette", - "Claudia", - "Clayton", - "Cliff", - "Clifford", - "Clint", - "Clive", - "Clyde", - "Codey", - "Cody", - "Colin", - "Colleen", - "Connie", - "Coral", - "Corina", - "Craig", - "Curtis", - "Cynthia", - "Cyril", - "Daisy", - "Dale", - "Damien", - "Damon", - "Dan", - "Dana", - "Daniel", - "Danielle", - "Danni", - "Danny", - "Daphne", - "Darby", - "Darla", - "Darlene", - "Darrell", - "Darren", - "Darryl", - "Dave", - "David", - "Davie", - "Davis", - "Dawn", - "Dean", - "Debbie", - "Debby", - "Deborah", - "Debra", - "Debs", - "Deidre", - "Delores", - "Denise", - "Dennis", - "Denzel", - "Derek", - "Desmond", - "Diana", - "Diane", - "Dianna", - "Dick", - "Dillon", - "Dina", - "Dominic", - "Dominik", - "Don", - "Donald", - "Donna", - "Donovan", - "Doreen", - "Doris", - "Dorothy", - "Doug", - "Dougal", - "Douglas", - "Doyle", - "Drew", - "Duane", - "Dudley", - "Duncan", - "Dwight", - "Dylan", - "Earl", - "Ed", - "Eddie", - "Edgar", - "Edith", - "Edmond", - "Edward", - "Edwin", - "Edwina", - "Eileen", - "Elaine", - "Elina", - "Elisa", - "Elisabeth", - "Eliza", - "Elizabeth", - "Ella", - "Ellen", - "Elmer", - "Elsie", - "Emile", - "Emilio", - "Emily", - "Emma", - "Emmett", - "Enrique", - "Eric", - "Erica", - "Ericka", - "Erik", - "Erika", - "Erin", - "Erinn", - "Ernest", - "Esmeralda", - "Esta", - "Estella", - "Esther", - "Ethan", - "Eugene", - "Eva", - "Evan", - "Eve", - "Evelyn", - "Everett", - "Fabio", - "Falicia", - "Farah", - "Felicity", - "Felix", - "Fergus", - "Fernando", - "Fidelia", - "Finlay", - "Fiona", - "Fletcher", - "Flora", - "Florence", - "Floyd", - "Fly", - "Frances", - "Francesca", - "Francis", - "Francisco", - "Frank", - "Franklin", - "Franky", - "Fraser", - "Fred", - "Freda", - "Freddy", - "Fuzz", - "Gabriel", - "Gabriela", - "Gail", - "Garrett", - "Garth", - "Gary", - "Gavin", - "Gayle", - "Gene", - "Genevieve", - "Geoff", - "Geoffrey", - "George", - "Gerald", - "Geraldine", - "Gerard", - "Geri", - "Gerry", - "Gilbert", - "Gillian", - "Gina", - "Ginger", - "Giuseppe", - "Gladys", - "Glen", - "Glenda", - "Glenn", - "Gloria", - "Glyne", - "Goldie", - "Gordon", - "Grace", - "Graeme", - "Graham", - "Grant", - "Grayson", - "Greg", - "Gregor", - "Gregory", - "Gretchen", - "Gus", - "Guy", - "Gwen", - "Gwendoline", - "Hadrian", - "Hamish", - "Hank", - "Hannah", - "Hans", - "Harley", - "Harold", - "Harry", - "Harvey", - "Haseem", - "Hayley", - "Hazel", - "Heather", - "Hector", - "Heidi", - "Helen", - "Helena", - "Henri", - "Henry", - "Herbert", - "Herbie", - "Hermann", - "Hilda", - "Hollie", - "Holly", - "Homer", - "Horace", - "Howard", - "Hugh", - "Hugo", - "Iain", - "Ian", - "Imani", - "Imelda", - "Imran", - "Ingrid", - "Irene", - "Irma", - "Irving", - "Isaac", - "Isabella", - "Isabelle", - "Ishan", - "Isla", - "Ivan", - "Ivanna", - "Ivy", - "Izola", - "Jack", - "Jacob", - "Jacque", - "Jacqueline", - "Jacqui", - "Jake", - "Jakob", - "James", - "Jan", - "Jane", - "Janet", - "Janice", - "Jason", - "Jasper", - "Jay", - "Jayne", - "Jean", - "Jeanette", - "Jeff", - "Jeffrey", - "Jennifer", - "Jenny", - "Jeremy", - "Jerry", - "Jesse", - "Jessica", - "Jessie", - "Jessy", - "Jill", - "Jillian", - "Jim", - "Jimbo", - "Jimmy", - "Jo", - "Joan", - "Joann", - "Joanne", - "Jock", - "Jodi", - "Joe", - "Joel", - "Joelyn", - "Joey", - "Johan", - "John", - "Johnathan", - "Johnnie", - "Johnny", - "Jolynn", - "Jon", - "Jonah", - "Jonas", - "Jonathan", - "Joni", - "Jonny", - "Jordan", - "Jorge", - "Jose", - "Joseph", - "Josephine", - "Josh", - "Joshua", - "Joyce", - "Juan", - "Juana", - "Juanita", - "Judge", - "Judie", - "Judith", - "Judy", - "Julia", - "Julian", - "Julie", - "Juliette", - "Julio", - "Julius", - "June", - "Justin", - "Kaitlyn", - "Kaley", - "Kandice", - "Kara", - "Kareen", - "Karen", - "Karl", - "Karolyne", - "Karri", - "Kate", - "Katelyn", - "Katey", - "Katherine", - "Kathie", - "Kathleen", - "Kathryn", - "Kathy", - "Katie", - "Katrina", - "Katy", - "Katya", - "Kay", - "Keiko", - "Keith", - "Kelly", - "Kelsey", - "Ken", - "Kenneth", - "Kenny", - "Kerry", - "Kev", - "Kevin", - "Kieran", - "Kim", - "Kimberly", - "Kiriaki", - "Kirk", - "Klaus", - "Kris", - "Krista", - "Kristian", - "Kristy", - "Kurt", - "Kurtis", - "Kyle", - "Kylie", - "Laila", - "Lana", - "Lance", - "Larry", - "Lasse", - "Latisha", - "Laura", - "Lauren", - "Laurie", - "Lauryn", - "Lawrence", - "Leah", - "Lee", - "Leigh", - "Len", - "Lena", - "Lenore", - "Leo", - "Leon", - "Leonard", - "Leonardo", - "Leone", - "Leroy", - "Les", - "Lesley", - "Leslie", - "Lester", - "Lewis", - "Liam", - "Lillian", - "Lilly", - "Lily", - "Linda", - "Lindsay", - "Lindsey", - "Lisa", - "Lita", - "Logan", - "Lone", - "Loren", - "Loretta", - "Lori", - "Lorraine", - "Lottie", - "Louis", - "Louise", - "Lowell", - "Lucas", - "Lucy", - "Luis", - "Luke", - "Luther", - "Lydia", - "Lynn", - "Lynne", - "Lyssa", - "Mabel", - "Madeline", - "Maggie", - "Magnus", - "Mahamed", - "Malcolm", - "Mandy", - "Manuel", - "Marc", - "Marcela", - "Marci", - "Marcia", - "Marco", - "Marcus", - "Marcy", - "Margaret", - "Margarita", - "Maria", - "Mariah", - "Marian", - "Marianna", - "Marie", - "Marilyn", - "Marina", - "Marion", - "Marisa", - "Marissa", - "Marjorie", - "Mark", - "Markus", - "Marlene", - "Marlin", - "Marlon", - "Marshall", - "Martha", - "Martin", - "Martyn", - "Marvin", - "Mary", - "Mathew", - "Matt", - "Matthew", - "Maude", - "Maureen", - "Maurice", - "Mauricio", - "Mavis", - "Max", - "Maxine", - "May", - "Megan", - "Meghan", - "Mel", - "Melanie", - "Melany", - "Melinda", - "Melissa", - "Melody", - "Melvin", - "Mervin", - "Mhairi", - "Mia", - "Michael", - "Michelle", - "Mick", - "Mickey", - "Miguel", - "Mikael", - "Mike", - "Mikey", - "Miki", - "Mikko", - "Mildred", - "Millie", - "Milly", - "Milton", - "Miranda", - "Miriam", - "Mirriam", - "Mitchell", - "Mo", - "Molly", - "Monica", - "Monique", - "Monty", - "Morgan", - "Morris", - "Morten", - "Moses", - "Muriel", - "Murphy", - "Murray", - "Mustafa", - "Myles", - "Myrissa", - "Myrtle", - "Nadine", - "Nancy", - "Nanette", - "Naomi", - "Natalia", - "Natalie", - "Natasha", - "Nathan", - "Nathaniel", - "Neil", - "Nellie", - "Nelly", - "Nelson", - "Neville", - "Nicholas", - "Nichole", - "Nick", - "Nico", - "Nicola", - "Nicolas", - "Nicole", - "Nigel", - "Nikia", - "Nikki", - "Nina", - "Noah", - "Noel", - "Norma", - "Norman", - "Norris", - "Norvall", - "Olga", - "Olive", - "Oliver", - "Ollie", - "Omar", - "Oona", - "Orve", - "Orville", - "Oscar", - "Otto", - "Owen", - "Paisley", - "Pam", - "Pamela", - "Pandora", - "Pat", - "Patricia", - "Patrick", - "Patty", - "Paul", - "Paula", - "Pauline", - "Pedro", - "Peggy", - "Penelope", - "Penny", - "Perry", - "Pete", - "Peter", - "Phil", - "Philip", - "Phillip", - "Phyllis", - "Polly", - "Preston", - "Qasim", - "Quentin", - "Quinn", - "Rachel", - "Rae", - "Rafael", - "Raj", - "Raja", - "Ralph", - "Ramon", - "Randal", - "Raquel", - "Rashid", - "Raul", - "Ray", - "Raymond", - "Raymondo", - "Rebecca", - "Reg", - "Regina", - "Reginald", - "Reinhold", - "Rene", - "Reuben", - "Rex", - "Rhonda", - "Richard", - "Rick", - "Ricky", - "Rita", - "Robb", - "Robert", - "Roberta", - "Robin", - "Robina", - "Robyn", - "Robynne", - "Rock", - "Rockie", - "Rod", - "Rodney", - "Rodrigo", - "Roger", - "Roland", - "Rolf", - "Romeo", - "Ronald", - "Ronan", - "Ronnie", - "Rosalind", - "Rosanna", - "Rosanned", - "Rose", - "Rosemary", - "Rosetta", - "Rosie", - "Ross", - "Rosty", - "Roxanne", - "Roy", - "Ruben", - "Ruby", - "Russell", - "Ruth", - "Ryan", - "Sabrina", - "Sadie", - "Sally", - "Sam", - "Samantha", - "Sammy", - "Samuel", - "Sandra", - "Sandy", - "Sara", - "Sarah", - "Sasha", - "Saul", - "Scot", - "Scott", - "Sean", - "Sebastian", - "Sergio", - "Shakira", - "Shannon", - "Shari", - "Sharnell", - "Sharon", - "Sharyn", - "Shawn", - "Shelby", - "Shelley", - "Sherene", - "Sheri", - "Sherman", - "Sherry", - "Sheryl", - "Shirley", - "Shivani", - "Shona", - "Sian", - "Sid", - "Sidney", - "Simon", - "Sindy", - "Sinead", - "Sofia", - "Sonja", - "Sonny", - "Sonya", - "Sophia", - "Sophie", - "Spencer", - "Stacey", - "Stan", - "Stanley", - "Stefan", - "Stephanie", - "Stephen", - "Steve", - "Steven", - "Stewart", - "Stuart", - "Sue", - "Suki", - "Susan", - "Susana", - "Susanne", - "Susie", - "Suzanne", - "Sven", - "Sylvester", - "Sylvia", - "Tabatha", - "Tamara", - "Tammie", - "Tamsin", - "Tania", - "Tanya", - "Tara", - "Taylor", - "Ted", - "Teresa", - "Terrance", - "Terry", - "Tess", - "Tessa", - "Tex", - "Thelma", - "Theodore", - "Theresa", - "Thomas", - "Tiffany", - "Tiger", - "Tiko", - "Tillie", - "Tim", - "Timmy", - "Timothy", - "Tina", - "Toby", - "Todd", - "Tom", - "Tomaki", - "Tommy", - "Tonia", - "Tonie", - "Tony", - "Tracy", - "Travis", - "Trevor", - "Tricia", - "Trixie", - "Troy", - "Tucker", - "Tyler", - "Tyson", - "Ulysses", - "Uri", - "Val", - "Valerie", - "Vanessa", - "Vani", - "Vaughn", - "Velma", - "Vernon", - "Veronica", - "Vicki", - "Vicky", - "Victor", - "Victoria", - "Vijay", - "Vince", - "Vincent", - "Vinnie", - "Virginia", - "Viv", - "Vivian", - "Viviene", - "Wally", - "Walt", - "Walter", - "Walton", - "Wanda", - "Warren", - "Wayne", - "Wendell", - "Wendy", - "Wes", - "Wesley", - "Whitney", - "Will", - "William", - "Willie", - "Willis", - "Wilson", - "Winston", - "Wyatt", - "Xavier", - "Yasmin", - "Yogi", - "Ysabel", - "Yvonne", - "Zachary", - "Zachery", - "Zola", -}; -// clang-format on diff --git a/src/openrct2/peep/RealNames.h b/src/openrct2/peep/RealNames.h deleted file mode 100644 index 039b82dca2..0000000000 --- a/src/openrct2/peep/RealNames.h +++ /dev/null @@ -1,19 +0,0 @@ -/***************************************************************************** - * Copyright (c) 2014-2024 OpenRCT2 developers - * - * For a complete list of all authors, please refer to contributors.md - * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 - * - * OpenRCT2 is licensed under the GNU General Public License version 3. - *****************************************************************************/ - -#pragma once - -#include - -constexpr uint16_t kRealNameStart = 0xA000; -constexpr uint16_t kRealNameEnd = 0xDFFF; - -// Real name data -extern const char real_name_initials[16]; -extern const char* real_names[1024]; diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 7bd9df3621..86c8182601 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -1483,21 +1483,6 @@ namespace OpenRCT2::RCT1 } } - void AppendRequiredObjects(ObjectList& objectList, ObjectType objectType, const RCT12::EntryList& entryList) - { - AppendRequiredObjects(objectList, objectType, entryList.GetEntries()); - } - - void AppendRequiredObjects(ObjectList& objectList, ObjectType objectType, const std::vector& objectNames) - { - for (const auto& objectName : objectNames) - { - auto descriptor = ObjectEntryDescriptor(objectName); - descriptor.Type = objectType; - objectList.Add(descriptor); - } - } - ObjectList GetRequiredObjects() { ObjectList result; @@ -1515,6 +1500,7 @@ namespace OpenRCT2::RCT1 AppendRequiredObjects(result, ObjectType::TerrainEdge, _terrainEdgeEntries); AppendRequiredObjects(result, ObjectType::FootpathSurface, _footpathSurfaceEntries); AppendRequiredObjects(result, ObjectType::FootpathRailings, _footpathRailingsEntries); + AppendRequiredObjects(result, ObjectType::PeepNames, std::vector({ "rct2.peep_names.original" })); RCT12AddDefaultObjects(result); return result; } diff --git a/src/openrct2/rct12/RCT12.cpp b/src/openrct2/rct12/RCT12.cpp index d4552f839e..7cbcffd2c1 100644 --- a/src/openrct2/rct12/RCT12.cpp +++ b/src/openrct2/rct12/RCT12.cpp @@ -817,7 +817,7 @@ void RCT12AddDefaultObjects(ObjectList& objectList) } } -static void AppendRequiredObjects(ObjectList& objectList, ObjectType objectType, const std::vector& objectNames) +void AppendRequiredObjects(ObjectList& objectList, ObjectType objectType, const std::vector& objectNames) { for (const auto& objectName : objectNames) { diff --git a/src/openrct2/rct12/RCT12.h b/src/openrct2/rct12/RCT12.h index 39d55ad95e..8a1388bafe 100644 --- a/src/openrct2/rct12/RCT12.h +++ b/src/openrct2/rct12/RCT12.h @@ -914,6 +914,7 @@ std::string_view GetStationIdentifierFromStyle(uint8_t style); uint8_t GetStationStyleFromIdentifier(u8string_view identifier); std::optional GetStyleFromMusicIdentifier(std::string_view identifier); void RCT12AddDefaultObjects(ObjectList& objectList); +void AppendRequiredObjects(ObjectList& objectList, ObjectType objectType, const std::vector& objectNames); void AppendRequiredObjects(ObjectList& objectList, ObjectType objectType, const OpenRCT2::RCT12::EntryList& entryList); bool IsUserStringID(StringId stringId); diff --git a/src/openrct2/rct2/S6Importer.cpp b/src/openrct2/rct2/S6Importer.cpp index 085a87652f..ac442c1b06 100644 --- a/src/openrct2/rct2/S6Importer.cpp +++ b/src/openrct2/rct2/S6Importer.cpp @@ -1859,6 +1859,7 @@ namespace OpenRCT2::RCT2 AppendRequiredObjects(objectList, ObjectType::TerrainSurface, _terrainSurfaceEntries); AppendRequiredObjects(objectList, ObjectType::TerrainEdge, _terrainEdgeEntries); + AppendRequiredObjects(objectList, ObjectType::PeepNames, std::vector({ "rct2.peep_names.original" })); RCT12AddDefaultObjects(objectList); return objectList; }