mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2025-12-24 00:03:11 +01:00
Add more object source filters
This commit is contained in:
committed by
GitHub
parent
8f48da411f
commit
b4018d398c
@@ -4524,6 +4524,7 @@ STR_6214 :Skyscraper B
|
||||
STR_6215 :Construction
|
||||
STR_6216 :Operation
|
||||
STR_6217 :Ride / track availability
|
||||
STR_6218 :OpenRCT2 Official
|
||||
|
||||
#############
|
||||
# Scenarios #
|
||||
|
||||
@@ -40,35 +40,46 @@
|
||||
#include <openrct2-ui/interface/Widget.h>
|
||||
#include <openrct2-ui/windows/Window.h>
|
||||
|
||||
enum {
|
||||
FILTER_RCT2 = (1 << 0),
|
||||
FILTER_WW = (1 << 1),
|
||||
FILTER_TT = (1 << 2),
|
||||
FILTER_CUSTOM = (1 << 3),
|
||||
enum
|
||||
{
|
||||
FILTER_RCT1 = (1 << 0),
|
||||
FILTER_AA = (1 << 1),
|
||||
FILTER_LL = (1 << 2),
|
||||
FILTER_RCT2 = (1 << 3),
|
||||
FILTER_WW = (1 << 4),
|
||||
FILTER_TT = (1 << 5),
|
||||
FILTER_OO = (1 << 6),
|
||||
FILTER_CUSTOM = (1 << 7),
|
||||
|
||||
FILTER_RIDE_TRANSPORT = (1 << 5),
|
||||
FILTER_RIDE_GENTLE = (1 << 6),
|
||||
FILTER_RIDE_COASTER = (1 << 7),
|
||||
FILTER_RIDE_THRILL = (1 << 8),
|
||||
FILTER_RIDE_WATER = (1 << 9),
|
||||
FILTER_RIDE_STALL = (1 << 10),
|
||||
FILTER_RIDE_TRANSPORT = (1 << 8),
|
||||
FILTER_RIDE_GENTLE = (1 << 9),
|
||||
FILTER_RIDE_COASTER = (1 << 10),
|
||||
FILTER_RIDE_THRILL = (1 << 11),
|
||||
FILTER_RIDE_WATER = (1 << 12),
|
||||
FILTER_RIDE_STALL = (1 << 13),
|
||||
|
||||
FILTER_SELECTED = (1 << 12),
|
||||
FILTER_NONSELECTED = (1 << 13),
|
||||
FILTER_SELECTED = (1 << 14),
|
||||
FILTER_NONSELECTED = (1 << 15),
|
||||
|
||||
FILTER_RIDES = FILTER_RIDE_TRANSPORT | FILTER_RIDE_GENTLE | FILTER_RIDE_COASTER | FILTER_RIDE_THRILL | FILTER_RIDE_WATER | FILTER_RIDE_STALL,
|
||||
FILTER_ALL = FILTER_RIDES | FILTER_RCT2 | FILTER_WW | FILTER_TT | FILTER_CUSTOM | FILTER_SELECTED | FILTER_NONSELECTED,
|
||||
FILTER_ALL = FILTER_RIDES | FILTER_RCT1 | FILTER_AA | FILTER_LL | FILTER_RCT2 | FILTER_WW | FILTER_TT | FILTER_OO | FILTER_CUSTOM | FILTER_SELECTED | FILTER_NONSELECTED,
|
||||
};
|
||||
|
||||
static constexpr uint8 _numSourceGameItems = 8;
|
||||
|
||||
static uint32 _filter_flags;
|
||||
static uint16 _filter_object_counts[11];
|
||||
|
||||
static char _filter_string[MAX_PATH];
|
||||
|
||||
#define _FILTER_ALL ((_filter_flags & FILTER_ALL) == FILTER_ALL)
|
||||
#define _FILTER_RCT1 (_filter_flags & FILTER_RCT1)
|
||||
#define _FILTER_AA (_filter_flags & FILTER_AA)
|
||||
#define _FILTER_LL (_filter_flags & FILTER_LL)
|
||||
#define _FILTER_RCT2 (_filter_flags & FILTER_RCT2)
|
||||
#define _FILTER_WW (_filter_flags & FILTER_WW)
|
||||
#define _FILTER_TT (_filter_flags & FILTER_TT)
|
||||
#define _FILTER_OO (_filter_flags & FILTER_OO)
|
||||
#define _FILTER_CUSTOM (_filter_flags & FILTER_CUSTOM)
|
||||
#define _FILTER_SELECTED (_filter_flags & FILTER_SELECTED)
|
||||
#define _FILTER_NONSELECTED (_filter_flags & FILTER_NONSELECTED)
|
||||
@@ -251,9 +262,13 @@ enum {
|
||||
};
|
||||
|
||||
enum {
|
||||
DDIX_FILTER_RCT1,
|
||||
DDIX_FILTER_AA,
|
||||
DDIX_FILTER_LL,
|
||||
DDIX_FILTER_RCT2,
|
||||
DDIX_FILTER_WW,
|
||||
DDIX_FILTER_TT,
|
||||
DDIX_FILTER_OO,
|
||||
DDIX_FILTER_CUSTOM,
|
||||
DDIX_FILTER_SEPARATOR,
|
||||
DDIX_FILTER_SELECTED,
|
||||
@@ -505,7 +520,7 @@ static void window_editor_object_selection_mouseup(rct_window *w, rct_widgetinde
|
||||
case WIDX_FILTER_RIDE_TAB_WATER:
|
||||
case WIDX_FILTER_RIDE_TAB_STALL:
|
||||
_filter_flags &= ~FILTER_RIDES;
|
||||
_filter_flags |= (1 << (widgetIndex - WIDX_FILTER_RIDE_TAB_TRANSPORT + 5));
|
||||
_filter_flags |= (1 << (widgetIndex - WIDX_FILTER_RIDE_TAB_TRANSPORT + _numSourceGameItems));
|
||||
gConfigInterface.object_selection_filter_flags = _filter_flags;
|
||||
config_save_default();
|
||||
|
||||
@@ -575,23 +590,33 @@ static void window_editor_object_selection_resize(rct_window *w)
|
||||
|
||||
void window_editor_object_selection_mousedown(rct_window *w, rct_widgetindex widgetIndex, rct_widget* widget)
|
||||
{
|
||||
sint32 num_items;
|
||||
sint32 numSelectionItems = 0;
|
||||
|
||||
switch (widgetIndex) {
|
||||
case WIDX_FILTER_DROPDOWN:
|
||||
|
||||
num_items = 4;
|
||||
gDropdownItemsFormat[DDIX_FILTER_RCT1] = STR_TOGGLE_OPTION;
|
||||
gDropdownItemsFormat[DDIX_FILTER_AA] = STR_TOGGLE_OPTION;
|
||||
gDropdownItemsFormat[DDIX_FILTER_LL] = STR_TOGGLE_OPTION;
|
||||
gDropdownItemsFormat[DDIX_FILTER_RCT2] = STR_TOGGLE_OPTION;
|
||||
gDropdownItemsFormat[DDIX_FILTER_WW] = STR_TOGGLE_OPTION;
|
||||
gDropdownItemsFormat[DDIX_FILTER_TT] = STR_TOGGLE_OPTION;
|
||||
gDropdownItemsFormat[DDIX_FILTER_OO] = STR_TOGGLE_OPTION;
|
||||
gDropdownItemsFormat[DDIX_FILTER_CUSTOM] = STR_TOGGLE_OPTION;
|
||||
|
||||
gDropdownItemsArgs[DDIX_FILTER_RCT1] = STR_SCENARIO_CATEGORY_RCT1;
|
||||
gDropdownItemsArgs[DDIX_FILTER_AA] = STR_SCENARIO_CATEGORY_RCT1_AA;
|
||||
gDropdownItemsArgs[DDIX_FILTER_LL] = STR_SCENARIO_CATEGORY_RCT1_LL;
|
||||
gDropdownItemsArgs[DDIX_FILTER_RCT2] = STR_ROLLERCOASTER_TYCOON_2_DROPDOWN;
|
||||
gDropdownItemsArgs[DDIX_FILTER_WW] = STR_OBJECT_FILTER_WW;
|
||||
gDropdownItemsArgs[DDIX_FILTER_TT] = STR_OBJECT_FILTER_TT;
|
||||
gDropdownItemsArgs[DDIX_FILTER_OO] = STR_OBJECT_FILTER_OPENRCT2_OFFICIAL;
|
||||
gDropdownItemsArgs[DDIX_FILTER_CUSTOM] = STR_OBJECT_FILTER_CUSTOM;
|
||||
|
||||
// Track manager cannot select multiple, so only show selection filters if not in track manager
|
||||
if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER)) {
|
||||
num_items = 7;
|
||||
if (!(gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER))
|
||||
{
|
||||
numSelectionItems = 3;
|
||||
gDropdownItemsFormat[DDIX_FILTER_SEPARATOR] = 0;
|
||||
gDropdownItemsFormat[DDIX_FILTER_SELECTED] = STR_TOGGLE_OPTION;
|
||||
gDropdownItemsFormat[DDIX_FILTER_NONSELECTED] = STR_TOGGLE_OPTION;
|
||||
@@ -606,10 +631,10 @@ void window_editor_object_selection_mousedown(rct_window *w, rct_widgetindex wid
|
||||
widget->bottom - widget->top + 1,
|
||||
w->colours[widget->colour],
|
||||
DROPDOWN_FLAG_STAY_OPEN,
|
||||
num_items
|
||||
_numSourceGameItems + numSelectionItems
|
||||
);
|
||||
|
||||
for (sint32 i = 0; i < 4; i++)
|
||||
for (sint32 i = 0; i < _numSourceGameItems; i++)
|
||||
{
|
||||
if (_filter_flags & (1 << i))
|
||||
{
|
||||
@@ -922,7 +947,6 @@ static void window_editor_object_selection_paint(rct_window *w, rct_drawpixelinf
|
||||
rct_widget *widget;
|
||||
rct_object_entry *highlightedEntry;
|
||||
rct_string_id stringId;
|
||||
uint8 source;
|
||||
|
||||
/*if (w->selected_tab == WINDOW_OBJECT_SELECTION_PAGE_RIDE_VEHICLES_ATTRACTIONS) {
|
||||
gfx_fill_rect_inset(dpi,
|
||||
@@ -1058,13 +1082,7 @@ static void window_editor_object_selection_paint(rct_window *w, rct_drawpixelinf
|
||||
}
|
||||
|
||||
// Draw object source
|
||||
source = (highlightedEntry->flags & 0xF0) >> 4;
|
||||
switch (source) {
|
||||
case 8: stringId = STR_ROLLERCOASTER_TYCOON_2_DROPDOWN; break;
|
||||
case 1: stringId = STR_OBJECT_FILTER_WW; break;
|
||||
case 2: stringId = STR_OBJECT_FILTER_TT; break;
|
||||
default: stringId = STR_OBJECT_FILTER_CUSTOM; break;
|
||||
}
|
||||
stringId = object_manager_get_source_game_string(highlightedEntry);
|
||||
gfx_draw_string_right(dpi, stringId, nullptr, COLOUR_WHITE, w->x + w->width - 5, w->y + w->height - 3 - 12 - 14);
|
||||
|
||||
//
|
||||
@@ -1369,10 +1387,21 @@ static bool filter_source(const ObjectRepositoryItem * item)
|
||||
return true;
|
||||
|
||||
uint8 source = object_entry_get_source_game(&item->ObjectEntry);
|
||||
return (_FILTER_RCT2 && source == OBJECT_SOURCE_RCT2) ||
|
||||
return (_FILTER_RCT1 && source == OBJECT_SOURCE_RCT1) ||
|
||||
(_FILTER_AA && source == OBJECT_SOURCE_ADDED_ATTRACTIONS) ||
|
||||
(_FILTER_LL && source == OBJECT_SOURCE_LOOPY_LANDSCAPES) ||
|
||||
(_FILTER_RCT2 && source == OBJECT_SOURCE_RCT2) ||
|
||||
(_FILTER_WW && source == OBJECT_SOURCE_WACKY_WORLDS) ||
|
||||
(_FILTER_TT && source == OBJECT_SOURCE_TIME_TWISTER) ||
|
||||
(_FILTER_CUSTOM && source != OBJECT_SOURCE_RCT2 && source != OBJECT_SOURCE_WACKY_WORLDS && source != OBJECT_SOURCE_TIME_TWISTER);
|
||||
(_FILTER_OO && source == OBJECT_SOURCE_OPENRCT2_OFFICIAL) ||
|
||||
(_FILTER_CUSTOM &&
|
||||
source != OBJECT_SOURCE_RCT1 &&
|
||||
source != OBJECT_SOURCE_ADDED_ATTRACTIONS &&
|
||||
source != OBJECT_SOURCE_LOOPY_LANDSCAPES &&
|
||||
source != OBJECT_SOURCE_RCT2 &&
|
||||
source != OBJECT_SOURCE_WACKY_WORLDS &&
|
||||
source != OBJECT_SOURCE_TIME_TWISTER &&
|
||||
source != OBJECT_SOURCE_OPENRCT2_OFFICIAL);
|
||||
}
|
||||
|
||||
static bool filter_chunks(const ObjectRepositoryItem * item)
|
||||
@@ -1389,7 +1418,7 @@ static bool filter_chunks(const ObjectRepositoryItem * item)
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (_filter_flags & (1 << (gRideCategories[rideType] + 5)))
|
||||
if (_filter_flags & (1 << (gRideCategories[rideType] + _numSourceGameItems)))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
|
||||
@@ -296,7 +296,7 @@ namespace Config
|
||||
model->console_small_font = reader->GetBoolean("console_small_font", false);
|
||||
model->current_theme_preset = reader->GetCString("current_theme", "*RCT2");
|
||||
model->current_title_sequence_preset = reader->GetCString("current_title_sequence", "*OPENRCT2");
|
||||
model->object_selection_filter_flags = reader->GetSint32("object_selection_filter_flags", 0x7EF);
|
||||
model->object_selection_filter_flags = reader->GetSint32("object_selection_filter_flags", 0x3FFF);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3874,6 +3874,8 @@ enum {
|
||||
STR_CHEAT_GROUP_OPERATION = 6216,
|
||||
STR_CHEAT_GROUP_AVAILABILITY = 6217,
|
||||
|
||||
STR_OBJECT_FILTER_OPENRCT2_OFFICIAL = 6218,
|
||||
|
||||
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
|
||||
STR_COUNT = 32768
|
||||
};
|
||||
|
||||
@@ -50,7 +50,10 @@ void BannerObject::ReadLegacy(IReadObjectContext * context, IStream * stream)
|
||||
const rct_object_entry * objectEntry = object_list_find_by_name(identifier.c_str());
|
||||
static const rct_object_entry scgPathX = Object::GetScgPathXHeader();
|
||||
|
||||
if (objectEntry != nullptr && object_entry_get_source_game(objectEntry) != OBJECT_SOURCE_RCT2)
|
||||
if (objectEntry != nullptr &&
|
||||
(object_entry_get_source_game(objectEntry) == OBJECT_SOURCE_WACKY_WORLDS ||
|
||||
object_entry_get_source_game(objectEntry) == OBJECT_SOURCE_TIME_TWISTER ||
|
||||
object_entry_get_source_game(objectEntry) == OBJECT_SOURCE_CUSTOM))
|
||||
{
|
||||
SetPrimarySceneryGroup(&scgPathX);
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
*****************************************************************************/
|
||||
#pragma endregion
|
||||
|
||||
#include <algorithm>
|
||||
#include "../core/Memory.hpp"
|
||||
#include "../core/String.hpp"
|
||||
#include "../localisation/Language.h"
|
||||
@@ -21,7 +22,6 @@
|
||||
#include "Object.h"
|
||||
#include "ObjectLimits.h"
|
||||
|
||||
|
||||
Object::Object(const rct_object_entry &entry)
|
||||
{
|
||||
_objectEntry = entry;
|
||||
@@ -29,6 +29,23 @@ Object::Object(const rct_object_entry &entry)
|
||||
char name[DAT_NAME_LENGTH + 1] = { 0 };
|
||||
Memory::Copy(name, entry.name, DAT_NAME_LENGTH);
|
||||
_identifier = String::Duplicate(name);
|
||||
|
||||
if (IsRCT1Object())
|
||||
{
|
||||
SetSourceGame(OBJECT_SOURCE_RCT1);
|
||||
}
|
||||
else if (IsAAObject())
|
||||
{
|
||||
SetSourceGame(OBJECT_SOURCE_ADDED_ATTRACTIONS);
|
||||
}
|
||||
else if (IsLLObject())
|
||||
{
|
||||
SetSourceGame(OBJECT_SOURCE_LOOPY_LANDSCAPES);
|
||||
}
|
||||
else if (IsOpenRCT2OfficialObject())
|
||||
{
|
||||
SetSourceGame(OBJECT_SOURCE_OPENRCT2_OFFICIAL);
|
||||
}
|
||||
}
|
||||
|
||||
Object::~Object()
|
||||
@@ -78,6 +95,611 @@ rct_object_entry Object::CreateHeader(const char name[DAT_NAME_LENGTH + 1], uint
|
||||
return header;
|
||||
}
|
||||
|
||||
void Object::SetSourceGame(const uint8 sourceGame)
|
||||
{
|
||||
_objectEntry.flags &= 0x0F;
|
||||
_objectEntry.flags |= (sourceGame << 4);
|
||||
}
|
||||
|
||||
bool Object::IsRCT1Object()
|
||||
{
|
||||
static const char _rct1Objects[][9] =
|
||||
{
|
||||
"CLIFT1 ",
|
||||
"MONO1 ",
|
||||
"MONO2 ",
|
||||
"NRL ",
|
||||
"CTCAR ",
|
||||
"DODG1 ",
|
||||
"FWH1 ",
|
||||
"HHBUILD ",
|
||||
"HMAZE ",
|
||||
"HSKELT ",
|
||||
"MGR1 ",
|
||||
"OBS1 ",
|
||||
"RCR ",
|
||||
"SPCAR ",
|
||||
"SRINGS ",
|
||||
"TRUCK1 ",
|
||||
"AMT1 ",
|
||||
"ARRSW1 ",
|
||||
"ARRSW2 ",
|
||||
"BMVD ",
|
||||
"BOB1 ",
|
||||
"PTCT1 ",
|
||||
"RCKC ",
|
||||
"REVF1 ",
|
||||
"SKYTR ",
|
||||
"STEEP1 ",
|
||||
"STEEP2 ",
|
||||
"TOGST ",
|
||||
"WMMINE ",
|
||||
"WMOUSE ",
|
||||
"ZLDB ",
|
||||
"ZLOG ",
|
||||
"C3D ",
|
||||
"KART1 ",
|
||||
"SIMPOD ",
|
||||
"SSC1 ",
|
||||
"SWSH1 ",
|
||||
"SWSH2 ",
|
||||
"TOPSP1 ",
|
||||
"TWIST1 ",
|
||||
"BBOAT ",
|
||||
"CBOAT ",
|
||||
"DING1 ",
|
||||
"LFB1 ",
|
||||
"RAPBOAT ",
|
||||
"RBOAT ",
|
||||
"SWANS ",
|
||||
"TRIKE ",
|
||||
"BALLN ",
|
||||
"BURGB ",
|
||||
"CHPSH ",
|
||||
"CNDYF ",
|
||||
"DRNKS ",
|
||||
"ICECR1 ",
|
||||
"ICETST ",
|
||||
"INFOK ",
|
||||
"PIZZS ",
|
||||
"POPCS ",
|
||||
"SOUVS ",
|
||||
"TLT1 ",
|
||||
|
||||
// Small scenery
|
||||
"ALLSORT1",
|
||||
"ALLSORT2",
|
||||
"TAC ",
|
||||
"TAL ",
|
||||
"TAP ",
|
||||
"TAS ",
|
||||
"TAS1 ",
|
||||
"TAS2 ",
|
||||
"TAS3 ",
|
||||
"TAS4 ",
|
||||
"TB1 ",
|
||||
"TB2 ",
|
||||
"TBC ",
|
||||
"TBP ",
|
||||
"TBR ",
|
||||
"TBR1 ",
|
||||
"TBR2 ",
|
||||
"TBR3 ",
|
||||
"TBR4 ",
|
||||
"TBW ",
|
||||
"TCB ",
|
||||
"TCC ",
|
||||
"TCE ",
|
||||
"TCF ",
|
||||
"TCJ ",
|
||||
"TCL ",
|
||||
"TCO ",
|
||||
"TCRP ",
|
||||
"TCT ",
|
||||
"TCT1 ",
|
||||
"TCT2 ",
|
||||
"TCY ",
|
||||
"TDM ",
|
||||
"TEL ",
|
||||
"TEN ",
|
||||
"TEP ",
|
||||
"TERB ",
|
||||
"TERS ",
|
||||
"TES1 ",
|
||||
"TF1 ",
|
||||
"TF2 ",
|
||||
"TGHC ",
|
||||
"TGHC2 ",
|
||||
"TGS ",
|
||||
"TH1 ",
|
||||
"TH2 ",
|
||||
"THL ",
|
||||
"THRS ",
|
||||
"THT ",
|
||||
"TIC ",
|
||||
"TITC ",
|
||||
"TK1 ",
|
||||
"TK2 ",
|
||||
"TK3 ",
|
||||
"TK4 ",
|
||||
"TL0 ",
|
||||
"TL1 ",
|
||||
"TL2 ",
|
||||
"TL3 ",
|
||||
"TLC ",
|
||||
"TLP ",
|
||||
"TLY ",
|
||||
"TM0 ",
|
||||
"TM1 ",
|
||||
"TM2 ",
|
||||
"TM3 ",
|
||||
"TMBJ ",
|
||||
"TMC ",
|
||||
"TMG ",
|
||||
"TMJ ",
|
||||
"TML ",
|
||||
"TMO1 ",
|
||||
"TMO2 ",
|
||||
"TMO3 ",
|
||||
"TMO4 ",
|
||||
"TMO5 ",
|
||||
"TMP ",
|
||||
"TMS1 ",
|
||||
"TMW ",
|
||||
"TMZP ",
|
||||
"TNS ",
|
||||
"TP1 ",
|
||||
"TP2 ",
|
||||
"TPM ",
|
||||
"TQ1 ",
|
||||
"TQ2 ",
|
||||
"TR1 ",
|
||||
"TR2 ",
|
||||
"TRC ",
|
||||
"TRF ",
|
||||
"TRF2 ",
|
||||
"TRMS ",
|
||||
"TRWS ",
|
||||
"TS0 ",
|
||||
"TS1 ",
|
||||
"TS2 ",
|
||||
"TS3 ",
|
||||
"TS4 ",
|
||||
"TS5 ",
|
||||
"TS6 ",
|
||||
"TSB ",
|
||||
"TSC ",
|
||||
"TSD ",
|
||||
"TSH ",
|
||||
"TSH0 ",
|
||||
"TSH1 ",
|
||||
"TSH2 ",
|
||||
"TSH3 ",
|
||||
"TSH4 ",
|
||||
"TSH5 ",
|
||||
"TSP ",
|
||||
"TSQ ",
|
||||
"TST1 ",
|
||||
"TST2 ",
|
||||
"TST3 ",
|
||||
"TST4 ",
|
||||
"TST5 ",
|
||||
"TSTD ",
|
||||
"TT1 ",
|
||||
"TUS ",
|
||||
"TVL ",
|
||||
"TWH1 ",
|
||||
"TWH2 ",
|
||||
"TWN ",
|
||||
"TWP ",
|
||||
"TWW ",
|
||||
"TDF ",
|
||||
"TEF ",
|
||||
"TQF ",
|
||||
"TTF ",
|
||||
"TWF ",
|
||||
"TCK ",
|
||||
"TG1 ",
|
||||
"TG10 ",
|
||||
"TG11 ",
|
||||
"TG12 ",
|
||||
"TG13 ",
|
||||
"TG14 ",
|
||||
"TG15 ",
|
||||
"TG16 ",
|
||||
"TG17 ",
|
||||
"TG18 ",
|
||||
"TG19 ",
|
||||
"TG2 ",
|
||||
"TG20 ",
|
||||
"TG21 ",
|
||||
"TG3 ",
|
||||
"TG4 ",
|
||||
"TG5 ",
|
||||
"TG6 ",
|
||||
"TG7 ",
|
||||
"TG8 ",
|
||||
"TG9 ",
|
||||
|
||||
// Large Scenery
|
||||
"SCLN ",
|
||||
"SHS1 ",
|
||||
"SHS2 ",
|
||||
"SMH1 ",
|
||||
"SMH2 ",
|
||||
"SMN1 ",
|
||||
"SCOL ",
|
||||
"SMB ",
|
||||
"SPYR ",
|
||||
"SSPX ",
|
||||
|
||||
// Walls
|
||||
"WC3 ",
|
||||
"WBR1 ",
|
||||
"WBR2 ",
|
||||
"WBR3 ",
|
||||
"WBRG ",
|
||||
"WCH ",
|
||||
"WCHG ",
|
||||
"WCW1 ",
|
||||
"WCW2 ",
|
||||
"WEW ",
|
||||
"WFW1 ",
|
||||
"WFWG ",
|
||||
"WHG ",
|
||||
"WHGG ",
|
||||
"WMF ",
|
||||
"WMFG ",
|
||||
"WMW ",
|
||||
"WMWW ",
|
||||
"WPF ",
|
||||
"WPFG ",
|
||||
"WRW ",
|
||||
"WSW ",
|
||||
"WSW1 ",
|
||||
"WSW2 ",
|
||||
"WSWG ",
|
||||
|
||||
// Paths
|
||||
"PATHCRZY",
|
||||
"PATHDIRT",
|
||||
"ROAD ",
|
||||
"TARMAC ",
|
||||
|
||||
// Path additions
|
||||
"LAMP1 ",
|
||||
"LAMP2 ",
|
||||
"LAMP3 ",
|
||||
"LAMP4 ",
|
||||
"LITTER1 ",
|
||||
"BENCH1 ",
|
||||
"BENCHSTN",
|
||||
"JUMPFNT1",
|
||||
|
||||
// Scenery groups
|
||||
"SCGFENCE",
|
||||
"SCGGARDN",
|
||||
"SCGPATHX",
|
||||
"SCGSHRUB",
|
||||
"SCGTREES",
|
||||
|
||||
"SCGCLASS",
|
||||
"SCGEGYPT",
|
||||
"SCGMART ",
|
||||
"SCGMINE ",
|
||||
"SCGWOND ",
|
||||
|
||||
// Park entrance
|
||||
"PKENT1 ",
|
||||
|
||||
// Water
|
||||
"WTRCYAN ",
|
||||
};
|
||||
|
||||
for (const auto entry : _rct1Objects)
|
||||
{
|
||||
if (String::Equals(_identifier, entry))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Object::IsAAObject()
|
||||
{
|
||||
static const char _aaObjects[][9] =
|
||||
{
|
||||
// Rides / vehicles / stalls
|
||||
"BMFL ",
|
||||
"BMRB ",
|
||||
"BMSD ",
|
||||
"BMSU ",
|
||||
"CHBUILD ",
|
||||
"CIRCUS1 ",
|
||||
"CLIFT2 ",
|
||||
"FSAUC ",
|
||||
"GDROP1 ",
|
||||
"GOLF1 ",
|
||||
"GTC ",
|
||||
"HATST ",
|
||||
"HELICAR ",
|
||||
"HOTDS ",
|
||||
"MFT ",
|
||||
"MONBK ",
|
||||
"NRL2 ",
|
||||
"REVCAR ",
|
||||
"SFRIC1 ",
|
||||
"SMC1 ",
|
||||
"SMONO ",
|
||||
"SPBOAT ",
|
||||
"SQDST ",
|
||||
"TOFFS ",
|
||||
"UTCAR ",
|
||||
"UTCARR ",
|
||||
"VCR ",
|
||||
"VEKST ",
|
||||
"VREEL ",
|
||||
|
||||
// Small scenery
|
||||
"TBN ",
|
||||
"TBN1 ",
|
||||
"TDN4 ",
|
||||
"TDN5 ",
|
||||
"TDT1 ",
|
||||
"TDT2 ",
|
||||
"TDT3 ",
|
||||
"TGC1 ",
|
||||
"TGC2 ",
|
||||
"TGE1 ",
|
||||
"TGE2 ",
|
||||
"TGE3 ",
|
||||
"TGE4 ",
|
||||
"TGE5 ",
|
||||
"TGS1 ",
|
||||
"TGS2 ",
|
||||
"TGS3 ",
|
||||
"TGS4 ",
|
||||
"TJB1 ",
|
||||
"TJB2 ",
|
||||
"TJB3 ",
|
||||
"TJB4 ",
|
||||
"TJF ",
|
||||
"TJP1 ",
|
||||
"TJP2 ",
|
||||
"TJT1 ",
|
||||
"TJT2 ",
|
||||
"TJT3 ",
|
||||
"TJT4 ",
|
||||
"TJT5 ",
|
||||
"TJT6 ",
|
||||
"TMM1 ",
|
||||
"TMM2 ",
|
||||
"TMM3 ",
|
||||
|
||||
// Large scenery
|
||||
"SDN1 ",
|
||||
"SDN2 ",
|
||||
"SDN3 ",
|
||||
"SSK1 ",
|
||||
|
||||
// Walls
|
||||
"WALLGL16",
|
||||
"WBW ",
|
||||
"WGW2 ",
|
||||
"WJF ",
|
||||
"WPW1 ",
|
||||
"WPW2 ",
|
||||
"WWTW ",
|
||||
|
||||
// Banners
|
||||
"BN1 ",
|
||||
"BN2 ",
|
||||
"BN3 ",
|
||||
"BN4 ",
|
||||
"BN5 ",
|
||||
"BN6 ",
|
||||
|
||||
// Paths
|
||||
"PATHASH ",
|
||||
"PATHSPCE",
|
||||
"TARMACB ",
|
||||
"TARMACG ",
|
||||
|
||||
// Scenery groups
|
||||
"SCGABSTR",
|
||||
"SCGJUNGL",
|
||||
"SCGJURAS",
|
||||
"SCGSPOOK",
|
||||
};
|
||||
|
||||
for (const auto entry : _aaObjects)
|
||||
{
|
||||
if (String::Equals(_identifier, entry))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Object::IsLLObject()
|
||||
{
|
||||
static const char _llObjects[][9] =
|
||||
{
|
||||
// Rides / vehicles / stalls
|
||||
"AML1 ",
|
||||
"ARRT2 ",
|
||||
"CHCKS ",
|
||||
"COFFS ",
|
||||
"CSTBOAT ",
|
||||
"DOUGH ",
|
||||
"ENTERP ",
|
||||
"IVMC1 ",
|
||||
"JSKI ",
|
||||
"LEMST ",
|
||||
"NEMT ",
|
||||
"RFTBOAT ",
|
||||
"SLCFO ",
|
||||
"THCAR ",
|
||||
"TSHRT ",
|
||||
|
||||
// Small scenery
|
||||
"TCD ",
|
||||
"TCFS ",
|
||||
"TCN ",
|
||||
"TGG ",
|
||||
"TGH1 ",
|
||||
"TGH2 ",
|
||||
"TIG ",
|
||||
"TNSS ",
|
||||
"TOH1 ",
|
||||
"TOH2 ",
|
||||
"TOH3 ",
|
||||
"TOS ",
|
||||
"TOT1 ",
|
||||
"TOT2 ",
|
||||
"TOT3 ",
|
||||
"TOT4 ",
|
||||
"TRF3 ",
|
||||
"TRFS ",
|
||||
"TSC2 ",
|
||||
"TSCP ",
|
||||
"TSF1 ",
|
||||
"TSF2 ",
|
||||
"TSF3 ",
|
||||
"TSG ",
|
||||
"TSK ",
|
||||
"TSM ",
|
||||
"TSMP ",
|
||||
"TSNB ",
|
||||
"TSNC ",
|
||||
"TSP1 ",
|
||||
"TSP2 ",
|
||||
"TSPH ",
|
||||
"TTG ",
|
||||
|
||||
// Large scenery
|
||||
"SAH ",
|
||||
"SAH2 ",
|
||||
"SAH3 ",
|
||||
"SCT ",
|
||||
"SGP ",
|
||||
"SIP ",
|
||||
"SOB ",
|
||||
"SOH1 ",
|
||||
"SOH2 ",
|
||||
"SOH3 ",
|
||||
"SPG ",
|
||||
"SPS ",
|
||||
"SSH ",
|
||||
"SSR ",
|
||||
"SST ",
|
||||
"STB1 ",
|
||||
"STB2 ",
|
||||
"STG1 ",
|
||||
"STG2 ",
|
||||
"STH ",
|
||||
|
||||
// Walls
|
||||
"WC1 ",
|
||||
"WC10 ",
|
||||
"WC11 ",
|
||||
"WC12 ",
|
||||
"WC13 ",
|
||||
"WC14 ",
|
||||
"WC15 ",
|
||||
"WC16 ",
|
||||
"WC17 ",
|
||||
"WC18 ",
|
||||
"WC2 ",
|
||||
"WC4 ",
|
||||
"WC5 ",
|
||||
"WC6 ",
|
||||
"WC7 ",
|
||||
"WC8 ",
|
||||
"WC9 ",
|
||||
"WPW3 ",
|
||||
|
||||
// Banners
|
||||
"BN7 ",
|
||||
"BN8 ",
|
||||
"BN9 ",
|
||||
|
||||
// Path additions
|
||||
"BENCHSPC",
|
||||
"JUMPSNW1",
|
||||
"LITTERSP",
|
||||
|
||||
// Scenery groups
|
||||
"SCGHALLO",
|
||||
"SCGMEDIE",
|
||||
"SCGORIEN",
|
||||
"SCGSNOW ",
|
||||
"SCGSPACE",
|
||||
"SCGURBAN",
|
||||
|
||||
// Water
|
||||
"WTRORNG ",
|
||||
};
|
||||
|
||||
for (const auto entry : _llObjects)
|
||||
{
|
||||
if (String::Equals(_identifier, entry))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Object::IsOpenRCT2OfficialObject()
|
||||
{
|
||||
static const char _openRCT2OfficialObjects[][9] =
|
||||
{
|
||||
// Offical extended scenery set
|
||||
"XXBBBR01",
|
||||
"TTRFTL02",
|
||||
"TTRFTL03",
|
||||
"TTRFTL04",
|
||||
"TTRFTL07",
|
||||
"TTRFTL08",
|
||||
"TTPIRF02",
|
||||
"TTPIRF03",
|
||||
"TTPIRF04",
|
||||
"TTPIRF05",
|
||||
"TTPIRF07",
|
||||
"TTPIRF08",
|
||||
"MG-PRAR ",
|
||||
"TTRFWD01",
|
||||
"TTRFWD02",
|
||||
"TTRFWD03",
|
||||
"TTRFWD04",
|
||||
"TTRFWD05",
|
||||
"TTRFWD06",
|
||||
"TTRFWD07",
|
||||
"TTRFWD08",
|
||||
"TTRFGL01",
|
||||
"TTRFGL02",
|
||||
"TTRFGL03",
|
||||
"ACWW33 ",
|
||||
"ACWWF32 ",
|
||||
|
||||
// Official DLC
|
||||
"BIGPANDA",
|
||||
"LITTERPA",
|
||||
"PANDAGR ",
|
||||
"SCGPANDA",
|
||||
"WTRPINK ",
|
||||
"ZPANDA ",
|
||||
};
|
||||
|
||||
for (const auto entry : _openRCT2OfficialObjects)
|
||||
{
|
||||
if (String::Equals(_identifier, entry))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
#ifdef __WARN_SUGGEST_FINAL_METHODS__
|
||||
#pragma GCC diagnostic push
|
||||
|
||||
@@ -62,6 +62,10 @@ typedef enum
|
||||
OBJECT_SOURCE_CUSTOM,
|
||||
OBJECT_SOURCE_WACKY_WORLDS,
|
||||
OBJECT_SOURCE_TIME_TWISTER,
|
||||
OBJECT_SOURCE_OPENRCT2_OFFICIAL,
|
||||
OBJECT_SOURCE_RCT1,
|
||||
OBJECT_SOURCE_ADDED_ATTRACTIONS,
|
||||
OBJECT_SOURCE_LOOPY_LANDSCAPES,
|
||||
OBJECT_SOURCE_RCT2 = 8
|
||||
} OBJECT_SOURCE_GAME;
|
||||
|
||||
@@ -166,6 +170,12 @@ protected:
|
||||
std::string GetOverrideString(uint8 index) const;
|
||||
std::string GetString(uint8 index) const;
|
||||
|
||||
void SetSourceGame(const uint8 sourceGame);
|
||||
bool IsRCT1Object();
|
||||
bool IsAAObject();
|
||||
bool IsLLObject();
|
||||
bool IsOpenRCT2OfficialObject();
|
||||
|
||||
public:
|
||||
explicit Object(const rct_object_entry &entry);
|
||||
virtual ~Object();
|
||||
|
||||
@@ -232,15 +232,22 @@ public:
|
||||
|
||||
static rct_string_id GetObjectSourceGameString(const rct_object_entry * entry)
|
||||
{
|
||||
uint8 source = (entry->flags & 0xF0) >> 4;
|
||||
switch (source)
|
||||
switch (object_entry_get_source_game(entry))
|
||||
{
|
||||
case OBJECT_SOURCE_RCT1:
|
||||
return STR_SCENARIO_CATEGORY_RCT1;
|
||||
case OBJECT_SOURCE_ADDED_ATTRACTIONS:
|
||||
return STR_SCENARIO_CATEGORY_RCT1_AA;
|
||||
case OBJECT_SOURCE_LOOPY_LANDSCAPES:
|
||||
return STR_SCENARIO_CATEGORY_RCT1_LL;
|
||||
case OBJECT_SOURCE_RCT2:
|
||||
return STR_ROLLERCOASTER_TYCOON_2_DROPDOWN;
|
||||
case OBJECT_SOURCE_WACKY_WORLDS:
|
||||
return STR_OBJECT_FILTER_WW;
|
||||
case OBJECT_SOURCE_TIME_TWISTER:
|
||||
return STR_OBJECT_FILTER_TT;
|
||||
case OBJECT_SOURCE_OPENRCT2_OFFICIAL:
|
||||
return STR_OBJECT_FILTER_OPENRCT2_OFFICIAL;
|
||||
default:
|
||||
return STR_OBJECT_FILTER_CUSTOM;
|
||||
}
|
||||
|
||||
@@ -79,7 +79,7 @@ class ObjectFileIndex final : public FileIndex<ObjectRepositoryItem>
|
||||
{
|
||||
private:
|
||||
static constexpr uint32 MAGIC_NUMBER = 0x5844494F; // OIDX
|
||||
static constexpr uint16 VERSION = 16;
|
||||
static constexpr uint16 VERSION = 17;
|
||||
static constexpr auto PATTERN = "*.dat;*.pob";
|
||||
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user