Skip to content

Commit

Permalink
Load banner entries from research and the map
Browse files Browse the repository at this point in the history
  • Loading branch information
Gymnasiast committed Feb 10, 2024
1 parent 7290168 commit 09fbe54
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 15 deletions.
15 changes: 15 additions & 0 deletions src/openrct2/rct1/RCT1.h
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,21 @@ namespace RCT1
Count,
};

enum class BannerType : uint8_t
{
Plain = 0,
Jungle,
Roman,
Egyptian,
Mine,
Jurassic,
Oriental,
Snow,
Space,

Null = 255,
};

#pragma pack(push, 1)
struct Entrance
{
Expand Down
54 changes: 39 additions & 15 deletions src/openrct2/rct1/S4Importer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ namespace RCT1
RCT12::EntryList _smallSceneryEntries;
RCT12::EntryList _largeSceneryEntries;
RCT12::EntryList _wallEntries;
RCT12::EntryList _bannerEntries;
RCT12::EntryList _pathEntries;
RCT12::EntryList _pathAdditionEntries;
RCT12::EntryList _sceneryGroupEntries;
Expand All @@ -110,6 +111,7 @@ namespace RCT1
ObjectEntryIndex _smallSceneryTypeToEntryMap[256]{};
ObjectEntryIndex _largeSceneryTypeToEntryMap[256]{};
ObjectEntryIndex _wallTypeToEntryMap[256]{};
ObjectEntryIndex _bannerTypeToEntryMap[9]{};
ObjectEntryIndex _pathTypeToEntryMap[24]{};
ObjectEntryIndex _pathAdditionTypeToEntryMap[16]{};
ObjectEntryIndex _sceneryThemeTypeToEntryMap[24]{};
Expand Down Expand Up @@ -349,6 +351,7 @@ namespace RCT1
std::fill(std::begin(_smallSceneryTypeToEntryMap), std::end(_smallSceneryTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_largeSceneryTypeToEntryMap), std::end(_largeSceneryTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_wallTypeToEntryMap), std::end(_wallTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_bannerTypeToEntryMap), std::end(_bannerTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_pathTypeToEntryMap), std::end(_pathTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_pathAdditionTypeToEntryMap), std::end(_pathAdditionTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
std::fill(std::begin(_sceneryThemeTypeToEntryMap), std::end(_sceneryThemeTypeToEntryMap), OBJECT_ENTRY_INDEX_NULL);
Expand All @@ -373,6 +376,7 @@ namespace RCT1
AddAvailableEntriesFromMap();
AddAvailableEntriesFromRides();
AddAvailableEntriesFromSceneryGroups();
AddAvailableEntriesFromBannerList();
AddEntryForWater();
}

Expand Down Expand Up @@ -560,7 +564,7 @@ namespace RCT1
case ObjectType::SmallScenery:
case ObjectType::LargeScenery:
case ObjectType::Walls:
case ObjectType::Paths:
case ObjectType::Banners:
case ObjectType::PathAdditions:
{
RCT12::EntryList* entries = GetEntryList(objectType);
Expand All @@ -586,6 +590,19 @@ namespace RCT1
}
}

void AddAvailableEntriesFromBannerList()
{
for (size_t i = 0; i < std::size(_s4.Banners); i++)
{
auto& banner = _s4.Banners[i];
auto type = static_cast<BannerType>(banner.Type);
if (type == BannerType::Null)
continue;

AddEntryForBanner(type);
}
}

void AddEntryForWater()
{
std::string_view entryName;
Expand Down Expand Up @@ -669,6 +686,18 @@ namespace RCT1
}
}

void AddEntryForBanner(BannerType bannerType)
{
assert(EnumValue(bannerType) < std::size(_bannerTypeToEntryMap));
if (_bannerTypeToEntryMap[EnumValue(bannerType)] == OBJECT_ENTRY_INDEX_NULL)
{
auto entryName = RCT1::GetBannerObject(bannerType);
auto entryIndex = _bannerEntries.GetOrAddEntry(entryName);

_bannerTypeToEntryMap[EnumValue(bannerType)] = entryIndex;
}
}

void AddEntryForPathSurface(ObjectEntryIndex pathType)
{
assert(pathType < std::size(_footpathSurfaceTypeToEntryMap));
Expand Down Expand Up @@ -1479,19 +1508,7 @@ namespace RCT1
AppendRequiredObjects(result, ObjectType::Paths, _pathEntries);
AppendRequiredObjects(result, ObjectType::PathAdditions, _pathAdditionEntries);
AppendRequiredObjects(result, ObjectType::SceneryGroup, _sceneryGroupEntries);
AppendRequiredObjects(
result, ObjectType::Banners,
std::vector<std::string>({
"rct2.footpath_banner.bn1",
"rct2.footpath_banner.bn2",
"rct2.footpath_banner.bn3",
"rct2.footpath_banner.bn4",
"rct2.footpath_banner.bn5",
"rct2.footpath_banner.bn6",
"rct2.footpath_banner.bn7",
"rct2.footpath_banner.bn8",
"rct2.footpath_banner.bn9",
}));
AppendRequiredObjects(result, ObjectType::Banners, _bannerEntries);
AppendRequiredObjects(result, ObjectType::ParkEntrance, std::vector<std::string>({ "rct2.park_entrance.pkent1" }));
AppendRequiredObjects(result, ObjectType::Water, _waterEntry);
AppendRequiredObjects(result, ObjectType::TerrainSurface, _terrainSurfaceEntries);
Expand Down Expand Up @@ -2389,7 +2406,12 @@ namespace RCT1

*dst = {};
dst->id = id;
dst->type = RCTEntryIndexToOpenRCT2EntryIndex(src->Type);
auto type = RCTEntryIndexToOpenRCT2EntryIndex(src->Type);
if (type < std::size(_bannerTypeToEntryMap))
type = _bannerTypeToEntryMap[type];
else
type = OBJECT_ENTRY_INDEX_NULL;
dst->type = type;

dst->flags = 0;
if (src->Flags & BANNER_FLAG_NO_ENTRY)
Expand Down Expand Up @@ -2442,6 +2464,8 @@ namespace RCT1
return &_largeSceneryEntries;
case ObjectType::Walls:
return &_wallEntries;
case ObjectType::Banners:
return &_bannerEntries;
case ObjectType::Paths:
return &_pathEntries;
case ObjectType::PathAdditions:
Expand Down
17 changes: 17 additions & 0 deletions src/openrct2/rct1/Tables.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1322,6 +1322,23 @@ namespace RCT1
return map[0];
}

std::string_view GetBannerObject(BannerType bannerType)
{
static constexpr const char * map[] =
{
"rct2.footpath_banner.bn1", // BannerType::Plain
"rct2.footpath_banner.bn2", // BannerType::Jungle
"rct2.footpath_banner.bn3", // BannerType::Roman
"rct2.footpath_banner.bn4", // BannerType::Egyptian
"rct2.footpath_banner.bn5", // BannerType::Mine
"rct2.footpath_banner.bn6", // BannerType::Jurassic
"rct2.footpath_banner.bn7", // BannerType::Oriental
"rct2.footpath_banner.bn8", // BannerType::Snow
"rct2.footpath_banner.bn9", // BannerType::Space
};
return map[EnumValue(bannerType)];
}

std::string_view GetPathSurfaceObject(uint8_t pathType)
{
static constexpr const char * map[] =
Expand Down
1 change: 1 addition & 0 deletions src/openrct2/rct1/Tables.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ namespace RCT1
*/
int32_t MapSlopedWall(uint8_t wallType);
std::string_view GetWallObject(uint8_t wallType);
std::string_view GetBannerObject(BannerType bannerType);
std::string_view GetPathSurfaceObject(uint8_t pathType);
std::string_view GetPathAddtionObject(uint8_t pathAdditionType);
std::string_view GetFootpathRailingsObject(uint8_t footpathRailingsType);
Expand Down

0 comments on commit 09fbe54

Please sign in to comment.