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;
}