Close #12395: Refactor PeepItem to use strong enum (#13311)

* refactor: integrated PEEP_ITEM into SHOP_ITEM

* refactor: converted merged enum to flag

Only former occurrences of PEEP_ITEM

* cleanUp: code cleaned after merging

* refactor: converted ShopItem to strong enum

code reformatting

* refactor: ShopItem enum items renamed

code formatted

* refactor: new getter and setter functions for Item...Flags

* refactor: replaced all occurrences of ItemStandardFlags

with appropriate getter and setter functions.
COMPARE_FIELD macro needs to be commented out or the flag has to stay public.

* refactor: all occurrences of ItemExtraFlags replaced

with proper function calls. COMPARE_FIELD macro issue not resolved.

* refactor: introduced new variable for unified item flags

* refactor: adapted accessor functions

accessor functions were modified to accommodate both standard and extra ShopItem flags

* refactor: ItemExtraFlags accessor functions are replaced

with general functions

* refactor: reverted to original uint32_t flag variables

* refactor: implemented suggested changes

* refactor: integrate additional comments

* refactor: incorporated requested changes

* refactor: incorporated requested changes

added static_cast<PeepThoughtType> in lines 1572 and 1590
This commit is contained in:
Łukasz Pękalski 2020-12-04 01:15:59 +01:00 committed by GitHub
parent 8ce924bd64
commit 3de233c796
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
111 changed files with 743 additions and 738 deletions

View File

@ -1092,7 +1092,7 @@ static void window_finances_marketing_paint(rct_window* w, rct_drawpixelinfo* dp
break;
}
case ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE:
ft.Add<rct_string_id>(ShopItems[campaign->ShopItemType].Naming.Plural);
ft.Add<rct_string_id>(GetShopItemDescriptor(campaign->ShopItemType).Naming.Plural);
break;
default:
{

View File

@ -1839,15 +1839,15 @@ void window_guest_inventory_update(rct_window* w)
}
}
static std::pair<rct_string_id, Formatter> window_guest_inventory_format_item(Peep* peep, int32_t item)
static std::pair<rct_string_id, Formatter> window_guest_inventory_format_item(Peep* peep, ShopItem item)
{
auto& park = OpenRCT2::GetContext()->GetGameState()->GetPark();
auto parkName = park.Name.c_str();
// Default arguments
auto ft = Formatter();
ft.Add<uint32_t>(ShopItems[item].Image);
ft.Add<rct_string_id>(ShopItems[item].Naming.Display);
ft.Add<uint32_t>(GetShopItemDescriptor(item).Image);
ft.Add<rct_string_id>(GetShopItemDescriptor(item).Naming.Display);
ft.Add<rct_string_id>(STR_STRING);
ft.Add<const char*>(parkName);
@ -1855,11 +1855,11 @@ static std::pair<rct_string_id, Formatter> window_guest_inventory_format_item(Pe
Ride* ride{};
switch (item)
{
case SHOP_ITEM_BALLOON:
case ShopItem::Balloon:
ft.Rewind();
ft.Add<uint32_t>(SPRITE_ID_PALETTE_COLOUR_1(peep->BalloonColour) | ShopItems[item].Image);
ft.Add<uint32_t>(SPRITE_ID_PALETTE_COLOUR_1(peep->BalloonColour) | GetShopItemDescriptor(item).Image);
break;
case SHOP_ITEM_PHOTO:
case ShopItem::Photo:
ride = get_ride(peep->Photo1RideRef);
if (ride != nullptr)
{
@ -1869,11 +1869,11 @@ static std::pair<rct_string_id, Formatter> window_guest_inventory_format_item(Pe
}
break;
case SHOP_ITEM_UMBRELLA:
case ShopItem::Umbrella:
ft.Rewind();
ft.Add<uint32_t>(SPRITE_ID_PALETTE_COLOUR_1(peep->UmbrellaColour) | ShopItems[item].Image);
ft.Add<uint32_t>(SPRITE_ID_PALETTE_COLOUR_1(peep->UmbrellaColour) | GetShopItemDescriptor(item).Image);
break;
case SHOP_ITEM_VOUCHER:
case ShopItem::Voucher:
switch (peep->VoucherType)
{
case VOUCHER_TYPE_PARK_ENTRY_FREE:
@ -1904,19 +1904,19 @@ static std::pair<rct_string_id, Formatter> window_guest_inventory_format_item(Pe
ft.Rewind();
ft.Increment(6);
ft.Add<rct_string_id>(STR_PEEP_INVENTORY_VOUCHER_FOOD_OR_DRINK_FREE);
ft.Add<rct_string_id>(ShopItems[peep->VoucherShopItem].Naming.Singular);
ft.Add<rct_string_id>(GetShopItemDescriptor(peep->VoucherShopItem).Naming.Singular);
break;
}
break;
case SHOP_ITEM_HAT:
case ShopItem::Hat:
ft.Rewind();
ft.Add<uint32_t>(SPRITE_ID_PALETTE_COLOUR_1(peep->HatColour) | ShopItems[item].Image);
ft.Add<uint32_t>(SPRITE_ID_PALETTE_COLOUR_1(peep->HatColour) | GetShopItemDescriptor(item).Image);
break;
case SHOP_ITEM_TSHIRT:
case ShopItem::TShirt:
ft.Rewind();
ft.Add<uint32_t>(SPRITE_ID_PALETTE_COLOUR_1(peep->TshirtColour) | ShopItems[item].Image);
ft.Add<uint32_t>(SPRITE_ID_PALETTE_COLOUR_1(peep->TshirtColour) | GetShopItemDescriptor(item).Image);
break;
case SHOP_ITEM_PHOTO2:
case ShopItem::Photo2:
ride = get_ride(peep->Photo2RideRef);
if (ride != nullptr)
{
@ -1925,7 +1925,7 @@ static std::pair<rct_string_id, Formatter> window_guest_inventory_format_item(Pe
ride->FormatNameTo(ft);
}
break;
case SHOP_ITEM_PHOTO3:
case ShopItem::Photo3:
ride = get_ride(peep->Photo3RideRef);
if (ride != nullptr)
{
@ -1934,7 +1934,7 @@ static std::pair<rct_string_id, Formatter> window_guest_inventory_format_item(Pe
ride->FormatNameTo(ft);
}
break;
case SHOP_ITEM_PHOTO4:
case ShopItem::Photo4:
ride = get_ride(peep->Photo4RideRef);
if (ride != nullptr)
{
@ -1943,6 +1943,9 @@ static std::pair<rct_string_id, Formatter> window_guest_inventory_format_item(Pe
ride->FormatNameTo(ft);
}
break;
default:
// This switch handles only items visible in peep window
break;
}
return std::make_pair(STR_GUEST_ITEM_FORMAT, ft);
@ -1979,7 +1982,7 @@ void window_guest_inventory_paint(rct_window* w, rct_drawpixelinfo* dpi)
gfx_draw_string_left(dpi, STR_CARRYING, nullptr, COLOUR_BLACK, screenCoords);
screenCoords.y += 10;
for (int32_t item = 0; item < SHOP_ITEM_COUNT; item++)
for (ShopItem item = ShopItem::Balloon; item < ShopItem::Count; item++)
{
if (screenCoords.y >= maxY)
break;

View File

@ -152,9 +152,9 @@ static void window_new_campaign_get_shop_items()
{
for (const auto itemType : rideEntry->shop_item)
{
if (itemType != SHOP_ITEM_NONE && ShopItems[itemType].IsFoodOrDrink())
if (itemType != ShopItem::None && GetShopItemDescriptor(itemType).IsFoodOrDrink())
{
items |= 1ULL << itemType;
items |= EnumToFlag(itemType);
}
}
}

View File

@ -4812,7 +4812,7 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi)
//
auto rideEntry = ride->GetRideEntry();
if (rideEntry == nullptr || rideEntry->shop_item[0] == SHOP_ITEM_NONE)
if (rideEntry == nullptr || rideEntry->shop_item[0] == ShopItem::None)
{
auto screenCoords = w->windowPos + ScreenCoordsXY{ widget->left, widget->top };
@ -4846,8 +4846,8 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi)
auto screenCoords = w->windowPos
+ ScreenCoordsXY{ (widget->left + widget->right) / 2 - 8, (widget->bottom + widget->top) / 2 - 6 };
uint8_t shopItem = rideEntry->shop_item[1] == SHOP_ITEM_NONE ? rideEntry->shop_item[0] : rideEntry->shop_item[1];
int32_t spriteIndex = ShopItems[shopItem].Image;
ShopItem shopItem = rideEntry->shop_item[1] == ShopItem::None ? rideEntry->shop_item[0] : rideEntry->shop_item[1];
int32_t spriteIndex = GetShopItemDescriptor(shopItem).Image;
spriteIndex |= SPRITE_ID_PALETTE_COLOUR_1(ride->track_colour[0].main);
gfx_draw_sprite(dpi, spriteIndex, screenCoords, 0);
@ -6155,22 +6155,21 @@ static void window_ride_graphs_scrollpaint(rct_window* w, rct_drawpixelinfo* dpi
static utf8 _moneyInputText[MONEY_STRING_MAXLENGTH];
static void update_same_price_throughout_flags(uint32_t shop_item)
static void update_same_price_throughout_flags(ShopItem shop_item)
{
uint64_t newFlags;
if (ShopItems[shop_item].IsPhoto())
if (GetShopItemDescriptor(shop_item).IsPhoto())
{
newFlags = gSamePriceThroughoutPark;
newFlags ^= (1ULL << SHOP_ITEM_PHOTO) | (1ULL << SHOP_ITEM_PHOTO2) | (1ULL << SHOP_ITEM_PHOTO3)
| (1ULL << SHOP_ITEM_PHOTO4);
newFlags ^= EnumsToFlags(ShopItem::Photo, ShopItem::Photo2, ShopItem::Photo3, ShopItem::Photo4);
auto parkSetParameter = ParkSetParameterAction(ParkParameter::SamePriceInPark, newFlags);
GameActions::Execute(&parkSetParameter);
}
else
{
newFlags = gSamePriceThroughoutPark;
newFlags ^= (1ULL << shop_item);
newFlags ^= EnumToFlag(shop_item);
auto parkSetParameter = ParkSetParameterAction(ParkParameter::SamePriceInPark, newFlags);
GameActions::Execute(&parkSetParameter);
}
@ -6186,10 +6185,10 @@ static void window_ride_income_toggle_primary_price(rct_window* w)
if (ride == nullptr)
return;
uint32_t shop_item;
ShopItem shop_item;
if (ride->type == RIDE_TYPE_TOILETS)
{
shop_item = SHOP_ITEM_ADMISSION;
shop_item = ShopItem::Admission;
}
else
{
@ -6197,7 +6196,7 @@ static void window_ride_income_toggle_primary_price(rct_window* w)
if (rideEntry != nullptr)
{
shop_item = rideEntry->shop_item[0];
if (shop_item == 0xFFFF)
if (shop_item == ShopItem::None)
return;
}
else
@ -6227,7 +6226,7 @@ static void window_ride_income_toggle_secondary_price(rct_window* w)
return;
auto shop_item = rideEntry->shop_item[1];
if (shop_item == SHOP_ITEM_NONE)
if (shop_item == ShopItem::None)
shop_item = RideTypeDescriptors[ride->type].PhotoItem;
update_same_price_throughout_flags(shop_item);
@ -6306,7 +6305,7 @@ static bool window_ride_income_can_modify_primary_price(rct_window* w)
auto rideEntry = ride->GetRideEntry();
return park_ride_prices_unlocked() || ride->type == RIDE_TYPE_TOILETS
|| (rideEntry != nullptr && rideEntry->shop_item[0] != SHOP_ITEM_NONE);
|| (rideEntry != nullptr && rideEntry->shop_item[0] != ShopItem::None);
}
/**
@ -6503,7 +6502,7 @@ static void window_ride_income_invalidate(rct_window* w)
window_ride_income_widgets[WIDX_PRIMARY_PRICE].tooltip = STR_NONE;
// If ride prices are locked, do not allow setting the price, unless we're dealing with a shop or toilet.
if (!park_ride_prices_unlocked() && rideEntry->shop_item[0] == SHOP_ITEM_NONE && ride->type != RIDE_TYPE_TOILETS)
if (!park_ride_prices_unlocked() && rideEntry->shop_item[0] == ShopItem::None && ride->type != RIDE_TYPE_TOILETS)
{
w->disabled_widgets |= (1 << WIDX_PRIMARY_PRICE);
window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].tooltip = STR_RIDE_INCOME_ADMISSION_PAY_FOR_ENTRY_TIP;
@ -6522,28 +6521,29 @@ static void window_ride_income_invalidate(rct_window* w)
if (ridePrimaryPrice == 0)
window_ride_income_widgets[WIDX_PRIMARY_PRICE].text = STR_FREE;
uint8_t primaryItem = SHOP_ITEM_ADMISSION;
if (ride->type == RIDE_TYPE_TOILETS || ((primaryItem = rideEntry->shop_item[0]) != SHOP_ITEM_NONE))
ShopItem primaryItem = ShopItem::Admission;
if (ride->type == RIDE_TYPE_TOILETS || ((primaryItem = rideEntry->shop_item[0]) != ShopItem::None))
{
window_ride_income_widgets[WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK].type = WindowWidgetType::Checkbox;
if (shop_item_has_common_price(primaryItem))
w->pressed_widgets |= (1 << WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK);
window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].text = ShopItems[primaryItem].Naming.PriceLabel;
window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].text = GetShopItemDescriptor(primaryItem).Naming.PriceLabel;
}
// Get secondary item
auto secondaryItem = RideTypeDescriptors[ride->type].PhotoItem;
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO))
{
if ((secondaryItem = rideEntry->shop_item[1]) != SHOP_ITEM_NONE)
if ((secondaryItem = rideEntry->shop_item[1]) != ShopItem::None)
{
window_ride_income_widgets[WIDX_SECONDARY_PRICE_LABEL].text = ShopItems[secondaryItem].Naming.PriceLabel;
window_ride_income_widgets[WIDX_SECONDARY_PRICE_LABEL].text = GetShopItemDescriptor(secondaryItem)
.Naming.PriceLabel;
}
}
if (secondaryItem == SHOP_ITEM_NONE)
if (secondaryItem == ShopItem::None)
{
// Hide secondary item widgets
window_ride_income_widgets[WIDX_SECONDARY_PRICE_LABEL].type = WindowWidgetType::Empty;
@ -6585,7 +6585,7 @@ static void window_ride_income_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
rct_string_id stringId;
money32 profit, costPerHour;
int32_t primaryItem, secondaryItem;
ShopItem primaryItem, secondaryItem;
WindowDrawWidgets(w, dpi);
window_ride_draw_tab_images(dpi, w);
@ -6604,12 +6604,12 @@ static void window_ride_income_paint(rct_window* w, rct_drawpixelinfo* dpi)
// Primary item profit / loss per item sold
primaryItem = rideEntry->shop_item[0];
if (primaryItem != SHOP_ITEM_NONE)
if (primaryItem != ShopItem::None)
{
profit = ride->price[0];
stringId = STR_PROFIT_PER_ITEM_SOLD;
profit -= ShopItems[primaryItem].Cost;
profit -= GetShopItemDescriptor(primaryItem).Cost;
if (profit < 0)
{
profit *= -1;
@ -6625,12 +6625,12 @@ static void window_ride_income_paint(rct_window* w, rct_drawpixelinfo* dpi)
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO))
secondaryItem = rideEntry->shop_item[1];
if (secondaryItem != SHOP_ITEM_NONE)
if (secondaryItem != ShopItem::None)
{
profit = ride->price[1];
stringId = STR_PROFIT_PER_ITEM_SOLD;
profit -= ShopItems[secondaryItem].Cost;
profit -= GetShopItemDescriptor(secondaryItem).Cost;
if (profit < 0)
{
profit *= -1;
@ -6795,7 +6795,7 @@ static void window_ride_customer_invalidate(rct_window* w)
*/
static void window_ride_customer_paint(rct_window* w, rct_drawpixelinfo* dpi)
{
uint8_t shopItem;
ShopItem shopItem;
int16_t popularity, satisfaction, queueTime;
int32_t customersPerHour;
rct_string_id stringId;
@ -6863,10 +6863,10 @@ static void window_ride_customer_paint(rct_window* w, rct_drawpixelinfo* dpi)
// Primary shop items sold
shopItem = ride->GetRideEntry()->shop_item[0];
if (shopItem != SHOP_ITEM_NONE)
if (shopItem != ShopItem::None)
{
auto ft = Formatter();
ft.Add<rct_string_id>(ShopItems[shopItem].Naming.Plural);
ft.Add<rct_string_id>(GetShopItemDescriptor(shopItem).Naming.Plural);
ft.Add<uint32_t>(ride->no_primary_items_sold);
gfx_draw_string_left(dpi, STR_ITEMS_SOLD, ft.Data(), COLOUR_BLACK, screenCoords);
screenCoords.y += LIST_ROW_HEIGHT;
@ -6875,10 +6875,10 @@ static void window_ride_customer_paint(rct_window* w, rct_drawpixelinfo* dpi)
// Secondary shop items sold / on-ride photos sold
shopItem = (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? RideTypeDescriptors[ride->type].PhotoItem
: ride->GetRideEntry()->shop_item[1];
if (shopItem != SHOP_ITEM_NONE)
if (shopItem != ShopItem::None)
{
auto ft = Formatter();
ft.Add<rct_string_id>(ShopItems[shopItem].Naming.Plural);
ft.Add<rct_string_id>(GetShopItemDescriptor(shopItem).Naming.Plural);
ft.Add<uint32_t>(ride->no_secondary_items_sold);
gfx_draw_string_left(dpi, STR_ITEMS_SOLD, ft.Data(), COLOUR_BLACK, screenCoords);
screenCoords.y += LIST_ROW_HEIGHT;

View File

@ -77,7 +77,7 @@ public:
}
else if (campaign.Type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE)
{
campaign.ShopItemType = _item;
campaign.ShopItemType = ShopItem(_item);
}
marketing_new_campaign(campaign);

View File

@ -213,7 +213,7 @@ public:
ride->price[i] = RideTypeDescriptors[ride->type].DefaultPrices[i];
}
if (rideEntry->shop_item[0] == SHOP_ITEM_NONE)
if (rideEntry->shop_item[0] == ShopItem::None)
{
if (!park_ride_prices_unlocked())
{
@ -222,11 +222,11 @@ public:
}
else
{
ride->price[0] = ShopItems[rideEntry->shop_item[0]].DefaultPrice;
ride->price[0] = GetShopItemDescriptor(rideEntry->shop_item[0]).DefaultPrice;
}
if (rideEntry->shop_item[1] != SHOP_ITEM_NONE)
if (rideEntry->shop_item[1] != ShopItem::None)
{
ride->price[1] = ShopItems[rideEntry->shop_item[1]].DefaultPrice;
ride->price[1] = GetShopItemDescriptor(rideEntry->shop_item[1]).DefaultPrice;
}
if (gScenarioObjective.Type == OBJECTIVE_BUILD_THE_BEST)
@ -236,7 +236,7 @@ public:
if (ride->type == RIDE_TYPE_TOILETS)
{
if (shop_item_has_common_price(SHOP_ITEM_ADMISSION))
if (shop_item_has_common_price(ShopItem::Admission))
{
money32 price = ride_get_common_price(ride);
if (price != MONEY32_UNDEFINED)
@ -248,7 +248,7 @@ public:
for (auto i = 0; i < NUM_SHOP_ITEMS_PER_RIDE; i++)
{
if (rideEntry->shop_item[i] != SHOP_ITEM_NONE)
if (rideEntry->shop_item[i] != ShopItem::None)
{
if (shop_item_has_common_price(rideEntry->shop_item[i]))
{
@ -262,9 +262,9 @@ public:
}
// Set the on-ride photo price, whether the ride has one or not (except shops).
if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP) && shop_item_has_common_price(SHOP_ITEM_PHOTO))
if (!ride_type_has_flag(ride->type, RIDE_TYPE_FLAG_IS_SHOP) && shop_item_has_common_price(ShopItem::Photo))
{
money32 price = shop_item_get_common_price(ride, SHOP_ITEM_PHOTO);
money32 price = shop_item_get_common_price(ride, ShopItem::Photo);
if (price != MONEY32_UNDEFINED)
{
ride->price[1] = static_cast<money16>(price);

View File

@ -174,41 +174,41 @@ private:
}
// remove any free voucher for this ride from peep
if (peep->ItemStandardFlags & PEEP_ITEM_VOUCHER)
if (peep->HasItem(ShopItem::Voucher))
{
if (peep->VoucherType == VOUCHER_TYPE_RIDE_FREE && peep->VoucherRideId == _rideIndex)
{
peep->ItemStandardFlags &= ~(PEEP_ITEM_VOUCHER);
peep->RemoveItem(ShopItem::Voucher);
}
}
// remove any photos of this ride from peep
if (peep->ItemStandardFlags & PEEP_ITEM_PHOTO)
if (peep->HasItem(ShopItem::Photo))
{
if (peep->Photo1RideRef == _rideIndex)
{
peep->ItemStandardFlags &= ~PEEP_ITEM_PHOTO;
peep->RemoveItem(ShopItem::Photo);
}
}
if (peep->ItemExtraFlags & PEEP_ITEM_PHOTO2)
if (peep->HasItem(ShopItem::Photo2))
{
if (peep->Photo2RideRef == _rideIndex)
{
peep->ItemExtraFlags &= ~PEEP_ITEM_PHOTO2;
peep->RemoveItem(ShopItem::Photo2);
}
}
if (peep->ItemExtraFlags & PEEP_ITEM_PHOTO3)
if (peep->HasItem(ShopItem::Photo3))
{
if (peep->Photo3RideRef == _rideIndex)
{
peep->ItemExtraFlags &= ~PEEP_ITEM_PHOTO3;
peep->RemoveItem(ShopItem::Photo3);
}
}
if (peep->ItemExtraFlags & PEEP_ITEM_PHOTO4)
if (peep->HasItem(ShopItem::Photo4))
{
if (peep->Photo4RideRef == _rideIndex)
{
peep->ItemExtraFlags &= ~PEEP_ITEM_PHOTO4;
peep->RemoveItem(ShopItem::Photo4);
}
}

View File

@ -104,14 +104,14 @@ public:
res->Position = { location, tile_element_height(location) };
}
uint32_t shopItem;
ShopItem shopItem;
if (_primaryPrice)
{
shopItem = SHOP_ITEM_ADMISSION;
shopItem = ShopItem::Admission;
if (ride->type != RIDE_TYPE_TOILETS)
{
shopItem = rideEntry->shop_item[0];
if (shopItem == SHOP_ITEM_NONE)
if (shopItem == ShopItem::None)
{
ride->price[0] = _price;
window_invalidate_by_class(WC_RIDE);
@ -129,7 +129,7 @@ public:
else
{
shopItem = rideEntry->shop_item[1];
if (shopItem == SHOP_ITEM_NONE)
if (shopItem == ShopItem::None)
{
shopItem = RideTypeDescriptors[ride->type].PhotoItem;
if ((ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) == 0)
@ -155,13 +155,13 @@ public:
}
private:
void RideSetCommonPrice(int32_t shopItem) const
void RideSetCommonPrice(ShopItem shopItem) const
{
for (auto& ride : GetRideManager())
{
auto invalidate = false;
auto rideEntry = get_ride_entry(ride.subtype);
if (ride.type == RIDE_TYPE_TOILETS && shopItem == SHOP_ITEM_ADMISSION)
if (ride.type == RIDE_TYPE_TOILETS && shopItem == ShopItem::Admission)
{
if (ride.price[0] != _price)
{
@ -181,7 +181,7 @@ private:
{
// If the shop item is the same or an on-ride photo
if (rideEntry->shop_item[1] == shopItem
|| (rideEntry->shop_item[1] == SHOP_ITEM_NONE && ShopItems[shopItem].IsPhoto()))
|| (rideEntry->shop_item[1] == ShopItem::None && GetShopItemDescriptor(shopItem).IsPhoto()))
{
if (ride.price[1] != _price)
{

View File

@ -620,15 +620,15 @@ private:
peep->CashInPocket = MONEY(1000, 00);
break;
case OBJECT_PARK_MAP:
peep->ItemStandardFlags |= PEEP_ITEM_MAP;
peep->GiveItem(ShopItem::Map);
break;
case OBJECT_BALLOON:
peep->ItemStandardFlags |= PEEP_ITEM_BALLOON;
peep->GiveItem(ShopItem::Balloon);
peep->BalloonColour = scenario_rand_max(COLOUR_COUNT - 1);
peep->UpdateSpriteType();
break;
case OBJECT_UMBRELLA:
peep->ItemStandardFlags |= PEEP_ITEM_UMBRELLA;
peep->GiveItem(ShopItem::Umbrella);
peep->UmbrellaColour = scenario_rand_max(COLOUR_COUNT - 1);
peep->UpdateSpriteType();
break;

View File

@ -293,7 +293,7 @@ static bool award_is_deserved_best_food(int32_t activeAwardTypes)
uint32_t shops = 0;
uint32_t uniqueShops = 0;
uint32_t shopTypes = 0;
uint64_t shopTypes = 0;
for (const auto& ride : GetRideManager())
{
if (ride.status != RIDE_STATUS_OPEN)
@ -305,9 +305,9 @@ static bool award_is_deserved_best_food(int32_t activeAwardTypes)
auto rideEntry = get_ride_entry(ride.subtype);
if (rideEntry != nullptr)
{
if (!(shopTypes & (1ULL << rideEntry->shop_item[0])))
if (!(shopTypes & EnumToFlag(rideEntry->shop_item[0])))
{
shopTypes |= (1ULL << rideEntry->shop_item[0]);
shopTypes |= EnumToFlag(rideEntry->shop_item[0]);
uniqueShops++;
}
}
@ -337,7 +337,7 @@ static bool award_is_deserved_worst_food(int32_t activeAwardTypes)
uint32_t shops = 0;
uint32_t uniqueShops = 0;
uint32_t shopTypes = 0;
uint64_t shopTypes = 0;
for (const auto& ride : GetRideManager())
{
if (ride.status != RIDE_STATUS_OPEN)
@ -349,9 +349,9 @@ static bool award_is_deserved_worst_food(int32_t activeAwardTypes)
auto rideEntry = ride.GetRideEntry();
if (rideEntry != nullptr)
{
if (!(shopTypes & (1ULL << rideEntry->shop_item[0])))
if (!(shopTypes & EnumToFlag(rideEntry->shop_item[0])))
{
shopTypes |= (1ULL << rideEntry->shop_item[0]);
shopTypes |= EnumToFlag(rideEntry->shop_item[0]);
uniqueShops++;
}
}

View File

@ -14,6 +14,7 @@
#include "../config/Config.h"
#include "../interface/Window.h"
#include "../localisation/Localisation.h"
#include "../peep/Peep.h"
#include "../ride/Ride.h"
#include "../ride/RideData.h"
#include "../ride/ShopItem.h"
@ -82,7 +83,7 @@ static void marketing_raise_finished_notification(const MarketingCampaign& campa
}
else if (campaign.Type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE)
{
ft.Add<rct_string_id>(ShopItems[campaign.ShopItemType].Naming.Plural);
ft.Add<rct_string_id>(GetShopItemDescriptor(campaign.ShopItemType).Naming.Plural);
}
News::AddItemToQueue(News::ItemType::Money, MarketingCampaignNames[campaign.Type][2], 0, ft);
@ -135,22 +136,22 @@ void marketing_set_guest_campaign(Peep* peep, int32_t campaignType)
switch (campaign->Type)
{
case ADVERTISING_CAMPAIGN_PARK_ENTRY_FREE:
peep->ItemStandardFlags |= PEEP_ITEM_VOUCHER;
peep->GiveItem(ShopItem::Voucher);
peep->VoucherType = VOUCHER_TYPE_PARK_ENTRY_FREE;
break;
case ADVERTISING_CAMPAIGN_RIDE_FREE:
peep->ItemStandardFlags |= PEEP_ITEM_VOUCHER;
peep->GiveItem(ShopItem::Voucher);
peep->VoucherType = VOUCHER_TYPE_RIDE_FREE;
peep->VoucherRideId = campaign->RideId;
peep->GuestHeadingToRideId = campaign->RideId;
peep->GuestIsLostCountdown = 240;
break;
case ADVERTISING_CAMPAIGN_PARK_ENTRY_HALF_PRICE:
peep->ItemStandardFlags |= PEEP_ITEM_VOUCHER;
peep->GiveItem(ShopItem::Voucher);
peep->VoucherType = VOUCHER_TYPE_PARK_ENTRY_HALF_PRICE;
break;
case ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE:
peep->ItemStandardFlags |= PEEP_ITEM_VOUCHER;
peep->GiveItem(ShopItem::Voucher);
peep->VoucherType = VOUCHER_TYPE_FOOD_OR_DRINK_FREE;
peep->VoucherShopItem = campaign->ShopItemType;
break;
@ -198,7 +199,7 @@ bool marketing_is_campaign_type_applicable(int32_t campaignType)
{
for (auto& item : rideEntry->shop_item)
{
if (ShopItems[item].IsFoodOrDrink())
if (GetShopItemDescriptor(item).IsFoodOrDrink())
{
return true;
}

View File

@ -83,8 +83,8 @@ void RideObject::ReadLegacy(IReadObjectContext* context, IStream* stream)
_legacyType.max_height = stream->ReadValue<uint8_t>();
// Skipping a uint64_t for the enabled track pieces and two uint8_ts for the categories.
stream->Seek(10, STREAM_SEEK_CURRENT);
_legacyType.shop_item[0] = stream->ReadValue<uint8_t>();
_legacyType.shop_item[1] = stream->ReadValue<uint8_t>();
_legacyType.shop_item[0] = static_cast<ShopItem>(stream->ReadValue<uint8_t>());
_legacyType.shop_item[1] = static_cast<ShopItem>(stream->ReadValue<uint8_t>());
GetStringTable().Read(context, stream, ObjectStringID::NAME);
GetStringTable().Read(context, stream, ObjectStringID::DESCRIPTION);
@ -557,7 +557,7 @@ void RideObject::ReadJson(IReadObjectContext* context, json_t& root)
// This needs to be set for both shops/facilities _and_ regular rides.
for (auto& item : _legacyType.shop_item)
{
item = SHOP_ITEM_NONE;
item = ShopItem::None;
}
auto carColours = Json::AsArray(properties["carColours"]);
@ -584,7 +584,7 @@ void RideObject::ReadJson(IReadObjectContext* context, json_t& root)
for (size_t i = 0; i < numShopItems; i++)
{
auto shopItem = ParseShopItem(Json::GetString(rideSells[i]));
if (shopItem == SHOP_ITEM_NONE)
if (shopItem == ShopItem::None)
{
context->LogWarning(ObjectError::InvalidProperty, "Unknown shop item");
}
@ -1037,47 +1037,47 @@ uint8_t RideObject::ParseRideCategory(const std::string& s)
return (result != LookupTable.end()) ? result->second : static_cast<uint8_t>(RIDE_CATEGORY_TRANSPORT);
}
uint8_t RideObject::ParseShopItem(const std::string& s)
ShopItem RideObject::ParseShopItem(const std::string& s)
{
static const std::unordered_map<std::string, uint8_t> LookupTable{
{ "burger", SHOP_ITEM_BURGER },
{ "chips", SHOP_ITEM_CHIPS },
{ "ice_cream", SHOP_ITEM_ICE_CREAM },
{ "candyfloss", SHOP_ITEM_CANDYFLOSS },
{ "pizza", SHOP_ITEM_PIZZA },
{ "popcorn", SHOP_ITEM_POPCORN },
{ "hot_dog", SHOP_ITEM_HOT_DOG },
{ "tentacle", SHOP_ITEM_TENTACLE },
{ "toffee_apple", SHOP_ITEM_TOFFEE_APPLE },
{ "doughnut", SHOP_ITEM_DOUGHNUT },
{ "chicken", SHOP_ITEM_CHICKEN },
{ "pretzel", SHOP_ITEM_PRETZEL },
{ "funnel_cake", SHOP_ITEM_FUNNEL_CAKE },
{ "beef_noodles", SHOP_ITEM_BEEF_NOODLES },
{ "fried_rice_noodles", SHOP_ITEM_FRIED_RICE_NOODLES },
{ "wonton_soup", SHOP_ITEM_WONTON_SOUP },
{ "meatball_soup", SHOP_ITEM_MEATBALL_SOUP },
{ "sub_sandwich", SHOP_ITEM_SUB_SANDWICH },
{ "cookie", SHOP_ITEM_COOKIE },
{ "roast_sausage", SHOP_ITEM_ROAST_SAUSAGE },
{ "drink", SHOP_ITEM_DRINK },
{ "coffee", SHOP_ITEM_COFFEE },
{ "lemonade", SHOP_ITEM_LEMONADE },
{ "chocolate", SHOP_ITEM_CHOCOLATE },
{ "iced_tea", SHOP_ITEM_ICED_TEA },
{ "fruit_juice", SHOP_ITEM_FRUIT_JUICE },
{ "soybean_milk", SHOP_ITEM_SOYBEAN_MILK },
{ "sujeonggwa", SHOP_ITEM_SUJEONGGWA },
{ "balloon", SHOP_ITEM_BALLOON },
{ "toy", SHOP_ITEM_TOY },
{ "map", SHOP_ITEM_MAP },
{ "photo", SHOP_ITEM_PHOTO },
{ "umbrella", SHOP_ITEM_UMBRELLA },
{ "voucher", SHOP_ITEM_VOUCHER },
{ "hat", SHOP_ITEM_HAT },
{ "tshirt", SHOP_ITEM_TSHIRT },
{ "sunglasses", SHOP_ITEM_SUNGLASSES },
static const std::unordered_map<std::string, ShopItem> LookupTable{
{ "burger", ShopItem::Burger },
{ "chips", ShopItem::Chips },
{ "ice_cream", ShopItem::IceCream },
{ "candyfloss", ShopItem::Candyfloss },
{ "pizza", ShopItem::Pizza },
{ "popcorn", ShopItem::Popcorn },
{ "hot_dog", ShopItem::HotDog },
{ "tentacle", ShopItem::Tentacle },
{ "toffee_apple", ShopItem::ToffeeApple },
{ "doughnut", ShopItem::Doughnut },
{ "chicken", ShopItem::Chicken },
{ "pretzel", ShopItem::Pretzel },
{ "funnel_cake", ShopItem::FunnelCake },
{ "beef_noodles", ShopItem::BeefNoodles },
{ "fried_rice_noodles", ShopItem::FriedRiceNoodles },
{ "wonton_soup", ShopItem::WontonSoup },
{ "meatball_soup", ShopItem::MeatballSoup },
{ "sub_sandwich", ShopItem::SubSandwich },
{ "cookie", ShopItem::Cookie },
{ "roast_sausage", ShopItem::RoastSausage },
{ "drink", ShopItem::Drink },
{ "coffee", ShopItem::Coffee },
{ "lemonade", ShopItem::Lemonade },
{ "chocolate", ShopItem::Chocolate },
{ "iced_tea", ShopItem::IcedTea },
{ "fruit_juice", ShopItem::FruitJuice },
{ "soybean_milk", ShopItem::SoybeanMilk },
{ "sujeonggwa", ShopItem::SuJeongGwa },
{ "balloon", ShopItem::Balloon },
{ "toy", ShopItem::Toy },
{ "map", ShopItem::Map },
{ "photo", ShopItem::Photo },
{ "umbrella", ShopItem::Umbrella },
{ "voucher", ShopItem::Voucher },
{ "hat", ShopItem::Hat },
{ "tshirt", ShopItem::TShirt },
{ "sunglasses", ShopItem::Sunglasses },
};
auto result = LookupTable.find(s);
return (result != LookupTable.end()) ? result->second : static_cast<uint8_t>(SHOP_ITEM_NONE);
return (result != LookupTable.end()) ? result->second : ShopItem::None;
}

View File

@ -61,6 +61,6 @@ private:
static bool IsRideTypeShopOrFacility(uint8_t rideType);
static uint8_t ParseRideType(const std::string& s);
static uint8_t ParseRideCategory(const std::string& s);
static uint8_t ParseShopItem(const std::string& s);
static ShopItem ParseShopItem(const std::string& s);
static colour_t ParseColour(const std::string& s);
};

View File

@ -156,118 +156,118 @@ static constexpr const ride_rating NauseaMaximumThresholds[] = {
/** rct2: 0x0097EFCC */
static constexpr const uint8_t item_standard_litter[32] = {
LITTER_TYPE_RUBBISH, // PEEP_ITEM_BALLOON
LITTER_TYPE_RUBBISH, // PEEP_ITEM_TOY
LITTER_TYPE_RUBBISH, // PEEP_ITEM_MAP
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PHOTO
LITTER_TYPE_RUBBISH, // PEEP_ITEM_UMBRELLA
LITTER_TYPE_RUBBISH, // PEEP_ITEM_DRINK
LITTER_TYPE_RUBBISH, // PEEP_ITEM_BURGER
LITTER_TYPE_RUBBISH, // PEEP_ITEM_CHIPS
LITTER_TYPE_RUBBISH, // PEEP_ITEM_ICE_CREAM
LITTER_TYPE_RUBBISH, // PEEP_ITEM_CANDYFLOSS
LITTER_TYPE_EMPTY_CAN, // PEEP_ITEM_EMPTY_CAN
LITTER_TYPE_RUBBISH, // PEEP_ITEM_RUBBISH
LITTER_TYPE_EMPTY_BURGER_BOX, // PEEP_ITEM_EMPTY_BURGER_BOX
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PIZZA
LITTER_TYPE_RUBBISH, // PEEP_ITEM_VOUCHER
LITTER_TYPE_RUBBISH, // PEEP_ITEM_POPCORN
LITTER_TYPE_RUBBISH, // PEEP_ITEM_HOT_DOG
LITTER_TYPE_RUBBISH, // PEEP_ITEM_TENTACLE
LITTER_TYPE_RUBBISH, // PEEP_ITEM_HAT
LITTER_TYPE_RUBBISH, // PEEP_ITEM_TOFFEE_APPLE
LITTER_TYPE_RUBBISH, // PEEP_ITEM_TSHIRT
LITTER_TYPE_RUBBISH, // PEEP_ITEM_DOUGHNUT
LITTER_TYPE_RUBBISH, // PEEP_ITEM_COFFEE
LITTER_TYPE_EMPTY_CUP, // PEEP_ITEM_EMPTY_CUP
LITTER_TYPE_EMPTY_BOX, // PEEP_ITEM_CHICKEN
LITTER_TYPE_EMPTY_BOTTLE, // PEEP_ITEM_LEMONADE
LITTER_TYPE_EMPTY_BOX, // PEEP_ITEM_EMPTY_BOX
LITTER_TYPE_EMPTY_BOTTLE, // PEEP_ITEM_EMPTY_BOTTLE
LITTER_TYPE_RUBBISH, // ShopItem::Balloon
LITTER_TYPE_RUBBISH, // ShopItem::Toy
LITTER_TYPE_RUBBISH, // ShopItem::Map
LITTER_TYPE_RUBBISH, // ShopItem::Photo
LITTER_TYPE_RUBBISH, // ShopItem::Umbrella
LITTER_TYPE_RUBBISH, // ShopItem::Drink
LITTER_TYPE_RUBBISH, // ShopItem::Burger
LITTER_TYPE_RUBBISH, // ShopItem::Chips
LITTER_TYPE_RUBBISH, // ShopItem::IceCream
LITTER_TYPE_RUBBISH, // ShopItem::Candyfloss
LITTER_TYPE_EMPTY_CAN, // ShopItem::EmptyCan
LITTER_TYPE_RUBBISH, // ShopItem::Rubbish
LITTER_TYPE_EMPTY_BURGER_BOX, // ShopItem::EmptyBurgerBox
LITTER_TYPE_RUBBISH, // ShopItem::Pizza
LITTER_TYPE_RUBBISH, // ShopItem::Voucher
LITTER_TYPE_RUBBISH, // ShopItem::Popcorn
LITTER_TYPE_RUBBISH, // ShopItem::HotDog
LITTER_TYPE_RUBBISH, // ShopItem::Tentacle
LITTER_TYPE_RUBBISH, // ShopItem::Hat
LITTER_TYPE_RUBBISH, // ShopItem::ToffeeApple
LITTER_TYPE_RUBBISH, // ShopItem::TShirt
LITTER_TYPE_RUBBISH, // ShopItem::Doughnut
LITTER_TYPE_RUBBISH, // ShopItem::Coffee
LITTER_TYPE_EMPTY_CUP, // ShopItem::EmptyCup
LITTER_TYPE_EMPTY_BOX, // ShopItem::Chicken
LITTER_TYPE_EMPTY_BOTTLE, // ShopItem::Lemonade
LITTER_TYPE_EMPTY_BOX, // ShopItem::EmptyBox
LITTER_TYPE_EMPTY_BOTTLE, // ShopItem::EmptyBottle
};
/** rct2: 0x0097EFE8 */
static constexpr const uint8_t item_extra_litter[32] = {
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PHOTO2
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PHOTO3
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PHOTO4
LITTER_TYPE_RUBBISH, // PEEP_ITEM_PRETZEL
LITTER_TYPE_RUBBISH, // PEEP_ITEM_CHOCOLATE
LITTER_TYPE_RUBBISH, // PEEP_ITEM_ICED_TEA
LITTER_TYPE_RUBBISH, // PEEP_ITEM_FUNNEL_CAKE
LITTER_TYPE_RUBBISH, // PEEP_ITEM_SUNGLASSES
LITTER_TYPE_RUBBISH, // PEEP_ITEM_BEEF_NOODLES
LITTER_TYPE_RUBBISH, // PEEP_ITEM_FRIED_RICE_NOODLES
LITTER_TYPE_RUBBISH, // PEEP_ITEM_WONTON_SOUP
LITTER_TYPE_RUBBISH, // PEEP_ITEM_MEATBALL_SOUP
LITTER_TYPE_RUBBISH, // PEEP_ITEM_FRUIT_JUICE
LITTER_TYPE_RUBBISH, // PEEP_ITEM_SOYBEAN_MILK
LITTER_TYPE_RUBBISH, // PEEP_ITEM_SU_JONGKWA
LITTER_TYPE_RUBBISH, // PEEP_ITEM_SUB_SANDWICH
LITTER_TYPE_RUBBISH, // PEEP_ITEM_COOKIE
LITTER_TYPE_EMPTY_BOWL_RED, // PEEP_ITEM_EMPTY_BOWL_RED
LITTER_TYPE_EMPTY_DRINK_CARTON, // PEEP_ITEM_EMPTY_DRINK_CARTON
LITTER_TYPE_EMPTY_JUICE_CUP, // PEEP_ITEM_EMPTY_JUICE_CUP
LITTER_TYPE_RUBBISH, // PEEP_ITEM_ROAST_SAUSAGE
LITTER_TYPE_EMPTY_BOWL_BLUE, // PEEP_ITEM_EMPTY_BOWL_BLUE
LITTER_TYPE_RUBBISH, // ShopItem::Photo2
LITTER_TYPE_RUBBISH, // ShopItem::Photo3
LITTER_TYPE_RUBBISH, // ShopItem::Photo4
LITTER_TYPE_RUBBISH, // ShopItem::Pretzel
LITTER_TYPE_RUBBISH, // ShopItem::Chocolate
LITTER_TYPE_RUBBISH, // ShopItem::IcedTea
LITTER_TYPE_RUBBISH, // ShopItem::FunnelCake
LITTER_TYPE_RUBBISH, // ShopItem::Sunglasses
LITTER_TYPE_RUBBISH, // ShopItem::BeefNoodles
LITTER_TYPE_RUBBISH, // ShopItem::FriedRiceNoodles
LITTER_TYPE_RUBBISH, // ShopItem::WontonSoup
LITTER_TYPE_RUBBISH, // ShopItem::MeatballSoup
LITTER_TYPE_RUBBISH, // ShopItem::FruitJuice
LITTER_TYPE_RUBBISH, // ShopItem::SoybeanMilk
LITTER_TYPE_RUBBISH, // ShopItem::SuJeongGwa
LITTER_TYPE_RUBBISH, // ShopItem::SubSandwich
LITTER_TYPE_RUBBISH, // ShopItem::Cookie
LITTER_TYPE_EMPTY_BOWL_RED, // ShopItem::EmptyBowlRed
LITTER_TYPE_EMPTY_DRINK_CARTON, // ShopItem::EmptyDrinkCarton
LITTER_TYPE_EMPTY_JUICE_CUP, // ShopItem::EmptyJuiceCup
LITTER_TYPE_RUBBISH, // ShopItem::RoastSausage
LITTER_TYPE_EMPTY_BOWL_BLUE, // ShopItem::EmptyBowlBlue
};
/** rct2: 0x009822F4, 0x00982310 */
static constexpr const uint8_t item_consumption_time[] = {
0, // SHOP_ITEM_BALLOON
0, // SHOP_ITEM_TOY
0, // SHOP_ITEM_MAP
0, // SHOP_ITEM_PHOTO
0, // SHOP_ITEM_UMBRELLA
100, // SHOP_ITEM_DRINK
150, // SHOP_ITEM_BURGER
120, // SHOP_ITEM_CHIPS
60, // SHOP_ITEM_ICE_CREAM
50, // SHOP_ITEM_CANDYFLOSS
0, // SHOP_ITEM_EMPTY_CAN
0, // SHOP_ITEM_RUBBISH
0, // SHOP_ITEM_EMPTY_BURGER_BOX
150, // SHOP_ITEM_PIZZA
0, // SHOP_ITEM_VOUCHER
75, // SHOP_ITEM_POPCORN
133, // SHOP_ITEM_HOT_DOG
110, // SHOP_ITEM_TENTACLE
0, // SHOP_ITEM_HAT
50, // SHOP_ITEM_TOFFEE_APPLE
0, // SHOP_ITEM_TSHIRT
80, // SHOP_ITEM_DOUGHNUT
90, // SHOP_ITEM_COFFEE
0, // SHOP_ITEM_EMPTY_CUP
170, // SHOP_ITEM_CHICKEN
115, // SHOP_ITEM_LEMONADE
0, // SHOP_ITEM_EMPTY_BOX
0, // SHOP_ITEM_EMPTY_BOTTLE
0, // ShopItem::Balloon
0, // ShopItem::Toy
0, // ShopItem::Map
0, // ShopItem::Photo
0, // ShopItem::Umbrella
100, // ShopItem::Drink
150, // ShopItem::Burger
120, // ShopItem::Chips
60, // ShopItem::IceCream
50, // ShopItem::Candyfloss
0, // ShopItem::EmptyCan
0, // ShopItem::Rubbish
0, // ShopItem::EmptyBurgerBox
150, // ShopItem::Pizza
0, // ShopItem::Voucher
75, // ShopItem::Popcorn
133, // ShopItem::HotDog
110, // ShopItem::Tentacle
0, // ShopItem::Hat
50, // ShopItem::ToffeeApple
0, // ShopItem::TShirt
80, // ShopItem::Doughnut
90, // ShopItem::Coffee
0, // ShopItem::EmptyCup
170, // ShopItem::Chicken
115, // ShopItem::Lemonade
0, // ShopItem::EmptyBox
0, // ShopItem::EmptyBottle
0xFF, // UNUSED
0xFF, // UNUSED
0xFF, // UNUSED
0xFF, // UNUSED
0, // SHOP_ITEM_PHOTO2
0, // SHOP_ITEM_PHOTO3
0, // SHOP_ITEM_PHOTO4
70, // SHOP_ITEM_PRETZEL
85, // SHOP_ITEM_CHOCOLATE
95, // SHOP_ITEM_ICED_TEA
90, // SHOP_ITEM_FUNNEL_CAKE
0, // SHOP_ITEM_SUNGLASSES
130, // SHOP_ITEM_BEEF_NOODLES
120, // SHOP_ITEM_FRIED_RICE_NOODLES
100, // SHOP_ITEM_WONTON_SOUP
110, // SHOP_ITEM_MEATBALL_SOUP
110, // SHOP_ITEM_FRUIT_JUICE
90, // SHOP_ITEM_SOYBEAN_MILK
100, // SHOP_ITEM_SU_JONGKWA
130, // SHOP_ITEM_SUB_SANDWICH
75, // SHOP_ITEM_COOKIE
0, // SHOP_ITEM_EMPTY_BOWL_RED
0, // SHOP_ITEM_EMPTY_DRINK_CARTON
0, // SHOP_ITEM_EMPTY_JUICE_CUP
115, // SHOP_ITEM_ROAST_SAUSAGE
0 // SHOP_ITEM_EMPTY_BOWL_BLUE
0, // ShopItem::Photo2
0, // ShopItem::Photo3
0, // ShopItem::Photo4
70, // ShopItem::Pretzel
85, // ShopItem::Chocolate
95, // ShopItem::IcedTea
90, // ShopItem::FunnelCake
0, // ShopItem::Sunglasses
130, // ShopItem::BeefNoodles
120, // ShopItem::FriedRiceNoodles
100, // ShopItem::WontonSoup
110, // ShopItem::MeatballSoup
110, // ShopItem::FruitJuice
90, // ShopItem::SoybeanMilk
100, // ShopItem::SHOP_ITEM_SU_JONGKWA
130, // ShopItem::SubSandwich
75, // ShopItem::Cookie
0, // ShopItem::EmptyBowlRed
0, // ShopItem::EmptyDrinkCarton
0, // ShopItem::EmptyJuiceCup
115, // ShopItem::RoastSausage
0 // ShopItem::EmptyBowlBlue
};
/** rct2: 009823AC */
@ -292,60 +292,60 @@ static constexpr const PeepThoughtType crowded_thoughts[] = {
/** rct2: 0x00982326 */
static constexpr const uint8_t peep_item_containers[] = {
0xFF, // PEEP_ITEM_BALLOON
0xFF, // PEEP_ITEM_TOY
0xFF, // PEEP_ITEM_MAP
0xFF, // PEEP_ITEM_PHOTO
0xFF, // PEEP_ITEM_UMBRELLA
SHOP_ITEM_EMPTY_CAN, // PEEP_ITEM_DRINK
SHOP_ITEM_EMPTY_BURGER_BOX, // PEEP_ITEM_BURGER
SHOP_ITEM_RUBBISH, // PEEP_ITEM_CHIPS
0xFF, // PEEP_ITEM_ICE_CREAM
0xFF, // PEEP_ITEM_CANDYFLOSS
0xFF, // PEEP_ITEM_EMPTY_CAN
0xFF, // PEEP_ITEM_RUBBISH
0xFF, // PEEP_ITEM_EMPTY_BURGER_BOX
SHOP_ITEM_RUBBISH, // PEEP_ITEM_PIZZA
0xFF, // PEEP_ITEM_VOUCHER
SHOP_ITEM_RUBBISH, // PEEP_ITEM_POPCORN
0xFF, // PEEP_ITEM_HOT_DOG
0xFF, // PEEP_ITEM_TENTACLE
0xFF, // PEEP_ITEM_HAT
0xFF, // PEEP_ITEM_TOFFEE_APPLE
0xFF, // PEEP_ITEM_TSHIRT
0xFF, // PEEP_ITEM_DOUGHNUT
SHOP_ITEM_EMPTY_CUP, // PEEP_ITEM_COFFEE
0xFF, // PEEP_ITEM_EMPTY_CUP
SHOP_ITEM_EMPTY_BOX, // PEEP_ITEM_CHICKEN
SHOP_ITEM_EMPTY_BOTTLE, // PEEP_ITEM_LEMONADE
0xFF, // PEEP_ITEM_EMPTY_BOX
0xFF, // PEEP_ITEM_EMPTY_BOTTLE
0xFF, // ShopItem::Balloon
0xFF, // ShopItem::Toy
0xFF, // ShopItem::Map
0xFF, // ShopItem::Photo
0xFF, // ShopItem::Umbrella
EnumValue(ShopItem::EmptyCan), // ShopItem::Drink
EnumValue(ShopItem::EmptyBurgerBox), // ShopItem::Burger
EnumValue(ShopItem::Rubbish), // ShopItem::Chips
0xFF, // ShopItem::IceCream
0xFF, // ShopItem::Candyfloss
0xFF, // ShopItem::EmptyCan
0xFF, // ShopItem::Rubbish
0xFF, // ShopItem::EmptyBurgerBox
EnumValue(ShopItem::Rubbish), // ShopItem::Pizza
0xFF, // ShopItem::Voucher
EnumValue(ShopItem::Rubbish), // ShopItem::Popcorn
0xFF, // ShopItem::HotDog
0xFF, // ShopItem::Tentacle
0xFF, // ShopItem::Hat
0xFF, // ShopItem::ToffeeApple
0xFF, // ShopItem::TShirt
0xFF, // ShopItem::Doughnut
EnumValue(ShopItem::EmptyCup), // ShopItem::Coffee
0xFF, // ShopItem::EmptyCup
EnumValue(ShopItem::EmptyBox), // ShopItem::Chicken
EnumValue(ShopItem::EmptyBottle), // ShopItem::Lemonade
0xFF, // ShopItem::EmptyBox
0xFF, // ShopItem::EmptyBottle
};
/** rct2: 0x00982342 */
static constexpr const uint8_t peep_extra_item_containers[] = {
0xFF, // PEEP_ITEM_PHOTO2
0xFF, // PEEP_ITEM_PHOTO3
0xFF, // PEEP_ITEM_PHOTO4
0xFF, // PEEP_ITEM_PRETZEL
SHOP_ITEM_EMPTY_CUP, // PEEP_ITEM_CHOCOLATE
SHOP_ITEM_EMPTY_CUP, // PEEP_ITEM_ICED_TEA
0xFF, // PEEP_ITEM_FUNNEL_CAKE
0xFF, // PEEP_ITEM_SUNGLASSES
SHOP_ITEM_EMPTY_BOWL_BLUE, // PEEP_ITEM_BEEF_NOODLES
SHOP_ITEM_EMPTY_BOWL_BLUE, // PEEP_ITEM_FRIED_RICE_NOODLES
SHOP_ITEM_EMPTY_BOWL_RED, // PEEP_ITEM_WONTON_SOUP
SHOP_ITEM_EMPTY_BOWL_RED, // PEEP_ITEM_MEATBALL_SOUP
SHOP_ITEM_EMPTY_JUICE_CUP, // PEEP_ITEM_FRUIT_JUICE
SHOP_ITEM_EMPTY_DRINK_CARTON, // PEEP_ITEM_SOYBEAN_MILK
SHOP_ITEM_EMPTY_DRINK_CARTON, // PEEP_ITEM_SU_JONGKWA
0xFF, // PEEP_ITEM_SUB_SANDWICH
0xFF, // PEEP_ITEM_COOKIE
0xFF, // PEEP_ITEM_EMPTY_BOWL_RED
0xFF, // PEEP_ITEM_EMPTY_DRINK_CARTON
0xFF, // PEEP_ITEM_EMPTY_JUICE_CUP
0xFF, // PEEP_ITEM_ROAST_SAUSAGE
0xFF, // PEEP_ITEM_EMPTY_BOWL_BLUE
0xFF, // ShopItem::Photo2
0xFF, // ShopItem::Photo3
0xFF, // ShopItem::Photo4
0xFF, // ShopItem::Pretzel
EnumValue(ShopItem::EmptyCup), // ShopItem::Chocolate
EnumValue(ShopItem::EmptyCup), // ShopItem::IcedTea
0xFF, // ShopItem::FunnelCake
0xFF, // ShopItem::Sunglasses
EnumValue(ShopItem::EmptyBowlBlue), // ShopItem::BeefNoodles
EnumValue(ShopItem::EmptyBowlBlue), // ShopItem::FriedRiceNoodles
EnumValue(ShopItem::EmptyBowlRed), // ShopItem::WontonSoup
EnumValue(ShopItem::EmptyBowlRed), // ShopItem::MeatballSoup
EnumValue(ShopItem::EmptyJuiceCup), // ShopItem::FruitJuice
EnumValue(ShopItem::EmptyDrinkCarton), // ShopItem::SoybeanMilk
EnumValue(ShopItem::EmptyDrinkCarton), // ShopItem::SuJeongGwa
0xFF, // ShopItem::SubSandwich
0xFF, // ShopItem::Cookie
0xFF, // ShopItem::EmptyBowlRed
0xFF, // ShopItem::EmptyDrinkCarton
0xFF, // ShopItem::EmptyJuiceCup
0xFF, // ShopItem::RoastSausage
0xFF, // EmptyBowlBlue
};
static constexpr const char *gPeepEasterEggNames[] = {
@ -448,10 +448,10 @@ void Guest::GivePassingPeepsPurpleClothes(Guest* passingPeep)
void Guest::GivePassingPeepsPizza(Guest* passingPeep)
{
if ((passingPeep->ItemStandardFlags & PEEP_ITEM_PIZZA))
if (passingPeep->HasItem(ShopItem::Pizza))
return;
passingPeep->ItemStandardFlags |= PEEP_ITEM_PIZZA;
passingPeep->GiveItem(ShopItem::Pizza);
int32_t peepDirection = (sprite_direction >> 3) ^ 2;
int32_t otherPeepOppositeDirection = passingPeep->sprite_direction >> 3;
@ -487,10 +487,10 @@ void Guest::GivePassingPeepsIceCream(Guest* passingPeep)
{
if (this == passingPeep)
return;
if (passingPeep->ItemStandardFlags & PEEP_ITEM_ICE_CREAM)
if (passingPeep->HasItem(ShopItem::IceCream))
return;
passingPeep->ItemStandardFlags |= PEEP_ITEM_ICE_CREAM;
passingPeep->GiveItem(ShopItem::IceCream);
passingPeep->UpdateSpriteType();
}
@ -766,12 +766,12 @@ void Guest::loc_68FA89()
int32_t chosen_food = bitscanforward(HasFoodStandardFlag());
if (chosen_food != -1)
{
ItemStandardFlags &= ~(1 << chosen_food);
RemoveItem(static_cast<ShopItem>(chosen_food));
uint8_t discard_container = peep_item_containers[chosen_food];
if (discard_container != 0xFF)
{
ItemStandardFlags |= (1 << discard_container);
GiveItem(static_cast<ShopItem>(discard_container));
}
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
@ -782,14 +782,11 @@ void Guest::loc_68FA89()
chosen_food = bitscanforward(HasFoodExtraFlag());
if (chosen_food != -1)
{
ItemExtraFlags &= ~(1 << chosen_food);
RemoveItem(static_cast<ShopItem>(chosen_food + 32));
uint8_t discard_container = peep_extra_item_containers[chosen_food];
if (discard_container != 0xFF)
{
if (discard_container >= 32)
ItemExtraFlags |= (1 << (discard_container - 32));
else
ItemStandardFlags |= (1 << discard_container);
GiveItem(static_cast<ShopItem>(discard_container));
}
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
@ -1002,7 +999,7 @@ void Guest::Tick128UpdateGuest(int32_t index)
}
}
if ((scenario_rand() & 0xFFFF) <= ((ItemStandardFlags & PEEP_ITEM_MAP) ? 8192U : 2184U))
if ((scenario_rand() & 0xFFFF) <= ((HasItem(ShopItem::Map)) ? 8192U : 2184U))
{
PickRideToGoOn();
}
@ -1326,44 +1323,22 @@ void Guest::UpdateSitting()
}
}
bool Guest::HasItem(int32_t peepItem) const
{
if (peepItem < 32)
{
return ItemStandardFlags & (1u << peepItem);
}
else
{
return ItemExtraFlags & (1u << (peepItem - 32));
}
}
int32_t Guest::HasFoodStandardFlag() const
{
return ItemStandardFlags
& (PEEP_ITEM_DRINK | PEEP_ITEM_BURGER | PEEP_ITEM_CHIPS | PEEP_ITEM_ICE_CREAM | PEEP_ITEM_CANDYFLOSS | PEEP_ITEM_PIZZA
| PEEP_ITEM_POPCORN | PEEP_ITEM_HOT_DOG | PEEP_ITEM_TENTACLE | PEEP_ITEM_TOFFEE_APPLE | PEEP_ITEM_DOUGHNUT
| PEEP_ITEM_COFFEE | PEEP_ITEM_CHICKEN | PEEP_ITEM_LEMONADE);
return GetItemFlags()
& EnumsToFlags(
ShopItem::Drink, ShopItem::Burger, ShopItem::Chips, ShopItem::IceCream, ShopItem::Candyfloss, ShopItem::Pizza,
ShopItem::Popcorn, ShopItem::HotDog, ShopItem::Tentacle, ShopItem::ToffeeApple, ShopItem::Doughnut,
ShopItem::Coffee, ShopItem::Chicken, ShopItem::Lemonade);
}
int32_t Guest::HasFoodExtraFlag() const
{
return ItemExtraFlags
& (PEEP_ITEM_PRETZEL | PEEP_ITEM_CHOCOLATE | PEEP_ITEM_ICED_TEA | PEEP_ITEM_FUNNEL_CAKE | PEEP_ITEM_BEEF_NOODLES
| PEEP_ITEM_FRIED_RICE_NOODLES | PEEP_ITEM_WONTON_SOUP | PEEP_ITEM_MEATBALL_SOUP | PEEP_ITEM_FRUIT_JUICE
| PEEP_ITEM_SOYBEAN_MILK | PEEP_ITEM_SU_JONGKWA | PEEP_ITEM_SUB_SANDWICH | PEEP_ITEM_COOKIE
| PEEP_ITEM_ROAST_SAUSAGE);
}
bool Guest::HasDrinkStandardFlag() const
{
return ItemStandardFlags & (PEEP_ITEM_DRINK | PEEP_ITEM_COFFEE | PEEP_ITEM_LEMONADE);
}
bool Guest::HasDrinkExtraFlag() const
{
return ItemExtraFlags
& (PEEP_ITEM_CHOCOLATE | PEEP_ITEM_ICED_TEA | PEEP_ITEM_FRUIT_JUICE | PEEP_ITEM_SOYBEAN_MILK | PEEP_ITEM_SU_JONGKWA);
return GetItemFlags()
& EnumsToFlags(
ShopItem::Pretzel, ShopItem::Chocolate, ShopItem::IcedTea, ShopItem::FunnelCake, ShopItem::BeefNoodles,
ShopItem::FriedRiceNoodles, ShopItem::WontonSoup, ShopItem::MeatballSoup, ShopItem::FruitJuice,
ShopItem::SoybeanMilk, ShopItem::SuJeongGwa, ShopItem::SubSandwich, ShopItem::Cookie, ShopItem::RoastSausage);
}
/**
@ -1372,20 +1347,24 @@ bool Guest::HasDrinkExtraFlag() const
*/
bool Guest::HasDrink() const
{
return HasDrinkStandardFlag() || HasDrinkExtraFlag();
return GetItemFlags()
& EnumsToFlags(
ShopItem::Drink, ShopItem::Coffee, ShopItem::Lemonade, ShopItem::Chocolate, ShopItem::IcedTea,
ShopItem::FruitJuice, ShopItem::SoybeanMilk, ShopItem::SuJeongGwa);
}
int32_t Guest::HasEmptyContainerStandardFlag() const
{
return ItemStandardFlags
& (PEEP_ITEM_EMPTY_CAN | PEEP_ITEM_EMPTY_BURGER_BOX | PEEP_ITEM_EMPTY_CUP | PEEP_ITEM_RUBBISH | PEEP_ITEM_EMPTY_BOX
| PEEP_ITEM_EMPTY_BOTTLE);
return GetItemFlags()
& EnumsToFlags(
ShopItem::EmptyCan, ShopItem::EmptyBurgerBox, ShopItem::EmptyCup, ShopItem::Rubbish, ShopItem::EmptyBox,
ShopItem::EmptyBottle);
}
int32_t Guest::HasEmptyContainerExtraFlag() const
{
return ItemExtraFlags
& (PEEP_ITEM_EMPTY_BOWL_RED | PEEP_ITEM_EMPTY_DRINK_CARTON | PEEP_ITEM_EMPTY_JUICE_CUP | PEEP_ITEM_EMPTY_BOWL_BLUE);
return GetItemFlags()
& EnumsToFlags(ShopItem::EmptyBowlRed, ShopItem::EmptyDrinkCarton, ShopItem::EmptyJuiceCup, ShopItem::EmptyBowlBlue);
}
bool Guest::HasEmptyContainer() const
@ -1485,27 +1464,26 @@ void Guest::CheckCantFindExit()
*
* rct2: 0x0069AF1E
*/
bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
bool Guest::DecideAndBuyItem(Ride* ride, ShopItem shopItem, money32 price)
{
money32 itemValue;
bool hasVoucher = false;
bool isRainingAndUmbrella = shopItem == SHOP_ITEM_UMBRELLA && climate_is_raining();
bool isRainingAndUmbrella = shopItem == ShopItem::Umbrella && climate_is_raining();
if ((ItemStandardFlags & PEEP_ITEM_VOUCHER) && (VoucherType == VOUCHER_TYPE_FOOD_OR_DRINK_FREE)
&& (VoucherShopItem == shopItem))
if ((HasItem(ShopItem::Voucher)) && (VoucherType == VOUCHER_TYPE_FOOD_OR_DRINK_FREE) && (VoucherShopItem == shopItem))
{
hasVoucher = true;
}
if (HasItem(shopItem))
{
InsertNewThought(PEEP_THOUGHT_TYPE_ALREADY_GOT, shopItem);
InsertNewThought(PEEP_THOUGHT_TYPE_ALREADY_GOT, EnumValue(shopItem));
return false;
}
if (ShopItems[shopItem].IsFoodOrDrink())
if (GetShopItemDescriptor(shopItem).IsFoodOrDrink())
{
int32_t food = -1;
if ((food = HasFoodStandardFlag()) != 0)
@ -1522,31 +1500,31 @@ bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
return false;
}
if ((shopItem == SHOP_ITEM_BALLOON || shopItem == SHOP_ITEM_ICE_CREAM || shopItem == SHOP_ITEM_CANDYFLOSS
|| shopItem == SHOP_ITEM_SUNGLASSES)
if ((shopItem == ShopItem::Balloon || shopItem == ShopItem::IceCream || shopItem == ShopItem::Candyfloss
|| shopItem == ShopItem::Sunglasses)
&& climate_is_raining())
{
return false;
}
if ((shopItem == SHOP_ITEM_SUNGLASSES || shopItem == SHOP_ITEM_ICE_CREAM) && gClimateCurrent.Temperature < 12)
if ((shopItem == ShopItem::Sunglasses || shopItem == ShopItem::IceCream) && gClimateCurrent.Temperature < 12)
{
return false;
}
if (ShopItems[shopItem].IsFood() && (Hunger > 75))
if (GetShopItemDescriptor(shopItem).IsFood() && (Hunger > 75))
{
InsertNewThought(PEEP_THOUGHT_TYPE_NOT_HUNGRY, PEEP_THOUGHT_ITEM_NONE);
return false;
}
if (ShopItems[shopItem].IsDrink() && (Thirst > 75))
if (GetShopItemDescriptor(shopItem).IsDrink() && (Thirst > 75))
{
InsertNewThought(PEEP_THOUGHT_TYPE_NOT_THIRSTY, PEEP_THOUGHT_ITEM_NONE);
return false;
}
if (!isRainingAndUmbrella && (shopItem != SHOP_ITEM_MAP) && ShopItems[shopItem].IsSouvenir() && !hasVoucher)
if (!isRainingAndUmbrella && (shopItem != ShopItem::Map) && GetShopItemDescriptor(shopItem).IsSouvenir() && !hasVoucher)
{
if (((scenario_rand() & 0x7F) + 0x73) > Happiness || GuestNumRides < 3)
return false;
@ -1563,17 +1541,17 @@ bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
}
if (price > CashInPocket)
{
InsertNewThought(PEEP_THOUGHT_TYPE_CANT_AFFORD, shopItem);
InsertNewThought(PEEP_THOUGHT_TYPE_CANT_AFFORD, EnumValue(shopItem));
return false;
}
}
if (gClimateCurrent.Temperature >= 21)
itemValue = ShopItems[shopItem].HotValue;
itemValue = GetShopItemDescriptor(shopItem).HotValue;
else if (gClimateCurrent.Temperature <= 11)
itemValue = ShopItems[shopItem].ColdValue;
itemValue = GetShopItemDescriptor(shopItem).ColdValue;
else
itemValue = ShopItems[shopItem].BaseValue;
itemValue = GetShopItemDescriptor(shopItem).BaseValue;
if (itemValue < price)
{
@ -1592,8 +1570,9 @@ bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
{
// "I'm not paying that much for x"
PeepThoughtType thought_type = static_cast<PeepThoughtType>(
(shopItem >= 32 ? (PEEP_THOUGHT_TYPE_PHOTO2_MUCH + (shopItem - 32))
: (PEEP_THOUGHT_TYPE_BALLOON_MUCH + shopItem)));
shopItem >= ShopItem::Photo2
? PEEP_THOUGHT_TYPE_PHOTO2_MUCH + static_cast<uint8_t>(shopItem - ShopItem::Photo2)
: PEEP_THOUGHT_TYPE_BALLOON_MUCH + static_cast<uint8_t>(shopItem));
InsertNewThought(thought_type, ride->id);
return false;
}
@ -1610,8 +1589,9 @@ bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
{
// "This x is a really good value"
PeepThoughtType thought_item = static_cast<PeepThoughtType>(
(shopItem >= 32 ? (PEEP_THOUGHT_TYPE_PHOTO2 + (shopItem - 32))
: (PEEP_THOUGHT_TYPE_BALLOON + shopItem)));
shopItem >= ShopItem::Photo2
? PEEP_THOUGHT_TYPE_PHOTO2 + static_cast<uint8_t>(shopItem - ShopItem::Photo2)
: PEEP_THOUGHT_TYPE_BALLOON + static_cast<uint8_t>(shopItem));
InsertNewThought(thought_item, ride->id);
}
}
@ -1623,11 +1603,11 @@ bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
// reset itemValue for satisfaction calculation
if (gClimateCurrent.Temperature >= 21)
itemValue = ShopItems[shopItem].HotValue;
itemValue = GetShopItemDescriptor(shopItem).HotValue;
else if (gClimateCurrent.Temperature <= 11)
itemValue = ShopItems[shopItem].ColdValue;
itemValue = GetShopItemDescriptor(shopItem).ColdValue;
else
itemValue = ShopItems[shopItem].BaseValue;
itemValue = GetShopItemDescriptor(shopItem).BaseValue;
itemValue -= price;
uint8_t satisfaction = 0;
if (itemValue > -8)
@ -1645,39 +1625,36 @@ bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
// The peep has now decided to buy the item (or, specifically, has not been
// dissuaded so far).
if (shopItem >= 32)
ItemExtraFlags |= (1u << (shopItem - 32));
else
ItemStandardFlags |= (1u << shopItem);
GiveItem(shopItem);
if (shopItem == SHOP_ITEM_TSHIRT)
if (shopItem == ShopItem::TShirt)
TshirtColour = ride->track_colour[0].main;
if (shopItem == SHOP_ITEM_HAT)
if (shopItem == ShopItem::Hat)
HatColour = ride->track_colour[0].main;
if (shopItem == SHOP_ITEM_BALLOON)
if (shopItem == ShopItem::Balloon)
BalloonColour = ride->track_colour[0].main;
if (shopItem == SHOP_ITEM_UMBRELLA)
if (shopItem == ShopItem::Umbrella)
UmbrellaColour = ride->track_colour[0].main;
if (shopItem == SHOP_ITEM_MAP)
if (shopItem == ShopItem::Map)
ResetPathfindGoal();
uint16_t consumptionTime = item_consumption_time[shopItem];
uint16_t consumptionTime = item_consumption_time[EnumValue(shopItem)];
TimeToConsume = std::min((TimeToConsume + consumptionTime), 255);
if (shopItem == SHOP_ITEM_PHOTO)
if (shopItem == ShopItem::Photo)
Photo1RideRef = ride->id;
if (shopItem == SHOP_ITEM_PHOTO2)
if (shopItem == ShopItem::Photo2)
Photo2RideRef = ride->id;
if (shopItem == SHOP_ITEM_PHOTO3)
if (shopItem == ShopItem::Photo3)
Photo3RideRef = ride->id;
if (shopItem == SHOP_ITEM_PHOTO4)
if (shopItem == ShopItem::Photo4)
Photo4RideRef = ride->id;
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
@ -1686,52 +1663,52 @@ bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
{
auto ft = Formatter();
FormatNameTo(ft);
ft.Add<rct_string_id>(ShopItems[shopItem].Naming.Indefinite);
ft.Add<rct_string_id>(GetShopItemDescriptor(shopItem).Naming.Indefinite);
if (gConfigNotifications.guest_bought_item)
{
News::AddItemToQueue(News::ItemType::PeepOnRide, STR_PEEP_TRACKING_NOTIFICATION_BOUGHT_X, sprite_index, ft);
}
}
if (ShopItems[shopItem].IsFood())
if (GetShopItemDescriptor(shopItem).IsFood())
AmountOfFood++;
if (ShopItems[shopItem].IsDrink())
if (GetShopItemDescriptor(shopItem).IsDrink())
AmountOfDrinks++;
if (ShopItems[shopItem].IsSouvenir())
if (GetShopItemDescriptor(shopItem).IsSouvenir())
AmountOfSouvenirs++;
money16* expend_type = &PaidOnSouvenirs;
ExpenditureType expenditure = ExpenditureType::ShopStock;
if (ShopItems[shopItem].IsFood())
if (GetShopItemDescriptor(shopItem).IsFood())
{
expend_type = &PaidOnFood;
expenditure = ExpenditureType::FoodDrinkStock;
}
if (ShopItems[shopItem].IsDrink())
if (GetShopItemDescriptor(shopItem).IsDrink())
{
expend_type = &PaidOnDrink;
expenditure = ExpenditureType::FoodDrinkStock;
}
if (!(gParkFlags & PARK_FLAGS_NO_MONEY))
finance_payment(ShopItems[shopItem].Cost, expenditure);
finance_payment(GetShopItemDescriptor(shopItem).Cost, expenditure);
// Sets the expenditure type to *_FOODDRINK_SALES or *_SHOP_SALES appropriately.
expenditure = static_cast<ExpenditureType>(static_cast<int32_t>(expenditure) - 1);
if (hasVoucher)
{
ItemStandardFlags &= ~PEEP_ITEM_VOUCHER;
RemoveItem(ShopItem::Voucher);
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
}
else if (!(gParkFlags & PARK_FLAGS_NO_MONEY))
{
SpendMoney(*expend_type, price, expenditure);
}
ride->total_profit += (price - ShopItems[shopItem].Cost);
ride->total_profit += (price - GetShopItemDescriptor(shopItem).Cost);
ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_INCOME;
ride->cur_num_customers++;
ride->total_customers++;
@ -1869,7 +1846,7 @@ void Guest::PickRideToGoOn()
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_ACTION;
// Make peep look at their map if they have one
if (ItemStandardFlags & PEEP_ITEM_MAP)
if (HasItem(ShopItem::Map))
{
ReadMap();
}
@ -1907,7 +1884,7 @@ std::bitset<MAX_RIDES> Guest::FindRidesToGoOn()
// FIX Originally checked for a toy, likely a mistake and should be a map,
// but then again this seems to only allow the peep to go on
// rides they haven't been on before.
if (ItemStandardFlags & PEEP_ITEM_MAP)
if (HasItem(ShopItem::Map))
{
// Consider rides that peep hasn't been on yet
for (auto& ride : GetRideManager())
@ -2424,8 +2401,7 @@ void Guest::ReadMap()
static bool peep_has_voucher_for_free_ride(Peep* peep, Ride* ride)
{
return peep->ItemStandardFlags & PEEP_ITEM_VOUCHER && peep->VoucherType == VOUCHER_TYPE_RIDE_FREE
&& peep->VoucherRideId == ride->id;
return peep->HasItem(ShopItem::Voucher) && peep->VoucherType == VOUCHER_TYPE_RIDE_FREE && peep->VoucherRideId == ride->id;
}
/**
@ -2646,7 +2622,7 @@ static void peep_update_ride_at_entrance_try_leave(Guest* peep)
static bool peep_check_ride_price_at_entrance(Guest* peep, Ride* ride, money32 ridePrice)
{
if ((peep->ItemStandardFlags & PEEP_ITEM_VOUCHER) && peep->VoucherType == VOUCHER_TYPE_RIDE_FREE
if ((peep->HasItem(ShopItem::Voucher)) && peep->VoucherType == VOUCHER_TYPE_RIDE_FREE
&& peep->VoucherRideId == peep->CurrentRide)
return true;
@ -3169,7 +3145,7 @@ template<typename T> static void peep_head_for_nearest_ride(Guest* peep, bool co
}
std::bitset<MAX_RIDES> rideConsideration;
if (!considerOnlyCloseRides && (peep->ItemStandardFlags & PEEP_ITEM_MAP))
if (!considerOnlyCloseRides && (peep->HasItem(ShopItem::Map)))
{
// Consider all rides in the park
for (const auto& ride : GetRideManager())
@ -3426,7 +3402,7 @@ void Guest::UpdateBuying()
{
return;
}
if (ride_type->shop_item[1] != SHOP_ITEM_NONE)
if (ride_type->shop_item[1] != ShopItem::None)
{
money16 price = ride->price[1];
@ -3437,7 +3413,7 @@ void Guest::UpdateBuying()
}
}
if (!item_bought && ride_type->shop_item[0] != SHOP_ITEM_NONE)
if (!item_bought && ride_type->shop_item[0] != ShopItem::None)
{
money16 price = ride->price[0];
@ -3864,10 +3840,9 @@ void Guest::UpdateRideFreeVehicleEnterRide(Ride* ride)
money16 ridePrice = ride_get_price(ride);
if (ridePrice != 0)
{
if ((ItemStandardFlags & PEEP_ITEM_VOUCHER) && (VoucherType == VOUCHER_TYPE_RIDE_FREE)
&& (VoucherRideId == CurrentRide))
if ((HasItem(ShopItem::Voucher)) && (VoucherType == VOUCHER_TYPE_RIDE_FREE) && (VoucherRideId == CurrentRide))
{
ItemStandardFlags &= ~PEEP_ITEM_VOUCHER;
RemoveItem(ShopItem::Voucher);
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
}
else
@ -4420,7 +4395,7 @@ void Guest::UpdateRideInExit()
if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO)
{
uint8_t secondaryItem = RideTypeDescriptors[ride->type].PhotoItem;
ShopItem secondaryItem = RideTypeDescriptors[ride->type].PhotoItem;
if (DecideAndBuyItem(ride, secondaryItem, ride->price[1]))
{
ride->no_secondary_items_sold++;
@ -5357,7 +5332,7 @@ void Guest::UpdateWalking()
if (pos_stnd != 32)
{
ItemStandardFlags &= ~(1u << pos_stnd);
RemoveItem(static_cast<ShopItem>(pos_stnd));
litterType = item_standard_litter[pos_stnd];
}
else
@ -5366,7 +5341,7 @@ void Guest::UpdateWalking()
for (int32_t container = HasEmptyContainerExtraFlag(); pos_extr < 32; pos_extr++)
if (container & (1u << pos_extr))
break;
ItemExtraFlags &= ~(1u << pos_extr);
RemoveItem(static_cast<ShopItem>(pos_extr + 32) + ShopItem::Photo2);
litterType = item_extra_litter[pos_extr];
}
@ -5930,7 +5905,7 @@ void Guest::UpdateUsingBin()
// switched to scenario_rand as it is more reliable
if ((scenario_rand() & 7) == 0)
space_left_in_bin--;
ItemStandardFlags &= ~(1 << cur_container);
RemoveItem(static_cast<ShopItem>(cur_container));
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
UpdateSpriteType();
continue;
@ -5941,7 +5916,7 @@ void Guest::UpdateUsingBin()
int32_t litterY = y + (scenario_rand() & 7) - 3;
litter_create({ litterX, litterY, z, static_cast<Direction>(scenario_rand() & 3) }, litterType);
ItemStandardFlags &= ~(1 << cur_container);
RemoveItem(static_cast<ShopItem>(cur_container));
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
UpdateSpriteType();
@ -5963,7 +5938,7 @@ void Guest::UpdateUsingBin()
// switched to scenario_rand as it is more reliable
if ((scenario_rand() & 7) == 0)
space_left_in_bin--;
ItemExtraFlags &= ~(1 << cur_container);
RemoveItem(static_cast<ShopItem>(cur_container) + ShopItem::Photo2);
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
UpdateSpriteType();
@ -5975,7 +5950,7 @@ void Guest::UpdateUsingBin()
int32_t litterY = y + (scenario_rand() & 7) - 3;
litter_create({ litterX, litterY, z, static_cast<Direction>(scenario_rand() & 3) }, litterType);
ItemExtraFlags &= ~(1 << cur_container);
RemoveItem(static_cast<ShopItem>(cur_container) + ShopItem::Photo2);
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
UpdateSpriteType();
@ -6797,44 +6772,44 @@ void Guest::SetSpriteType(PeepSpriteType new_sprite_type)
struct item_pref_t
{
uint8_t type; // 0 for standard, 1 for extra
uint32_t item; // And this with the relevant flags
uint64_t item; // And this with the relevant flags
PeepSpriteType sprite_type;
};
// clang-format off
static item_pref_t item_order_preference[] = {
{ 0, PEEP_ITEM_ICE_CREAM, PeepSpriteType::IceCream },
{ 0, PEEP_ITEM_CHIPS, PeepSpriteType::Chips },
{ 0, PEEP_ITEM_PIZZA, PeepSpriteType::Pizza },
{ 0, PEEP_ITEM_BURGER, PeepSpriteType::Burger },
{ 0, PEEP_ITEM_DRINK, PeepSpriteType::Drink },
{ 0, PEEP_ITEM_COFFEE, PeepSpriteType::Coffee },
{ 0, PEEP_ITEM_CHICKEN, PeepSpriteType::Chicken },
{ 0, PEEP_ITEM_LEMONADE, PeepSpriteType::Lemonade },
{ 0, PEEP_ITEM_CANDYFLOSS, PeepSpriteType::Candyfloss },
{ 0, PEEP_ITEM_POPCORN, PeepSpriteType::Popcorn },
{ 0, PEEP_ITEM_HOT_DOG, PeepSpriteType::HotDog },
{ 0, PEEP_ITEM_TENTACLE, PeepSpriteType::Tentacle },
{ 0, PEEP_ITEM_TOFFEE_APPLE, PeepSpriteType::ToffeeApple },
{ 0, PEEP_ITEM_DOUGHNUT, PeepSpriteType::Doughnut },
{ 1, PEEP_ITEM_PRETZEL, PeepSpriteType::Pretzel },
{ 1, PEEP_ITEM_COOKIE, PeepSpriteType::Pretzel },
{ 1, PEEP_ITEM_CHOCOLATE, PeepSpriteType::Coffee },
{ 1, PEEP_ITEM_ICED_TEA, PeepSpriteType::Coffee },
{ 1, PEEP_ITEM_FUNNEL_CAKE, PeepSpriteType::FunnelCake },
{ 1, PEEP_ITEM_BEEF_NOODLES, PeepSpriteType::Noodles },
{ 1, PEEP_ITEM_FRIED_RICE_NOODLES, PeepSpriteType::Noodles },
{ 1, PEEP_ITEM_WONTON_SOUP, PeepSpriteType::Soup },
{ 1, PEEP_ITEM_MEATBALL_SOUP, PeepSpriteType::Soup },
{ 1, PEEP_ITEM_FRUIT_JUICE, PeepSpriteType::Juice },
{ 1, PEEP_ITEM_SOYBEAN_MILK, PeepSpriteType::SuJongkwa },
{ 1, PEEP_ITEM_SU_JONGKWA, PeepSpriteType::SuJongkwa },
{ 1, PEEP_ITEM_SUB_SANDWICH, PeepSpriteType::Sandwich },
{ 1, PEEP_ITEM_ROAST_SAUSAGE, PeepSpriteType::Sausage },
{ 0, PEEP_ITEM_BALLOON, PeepSpriteType::Balloon },
{ 0, PEEP_ITEM_HAT, PeepSpriteType::Hat },
{ 1, PEEP_ITEM_SUNGLASSES, PeepSpriteType::Sunglasses },
{ 0xFF, 0xFFFFFFFF, PeepSpriteType::Invalid }
{ 0, EnumToFlag(ShopItem::IceCream), PeepSpriteType::IceCream },
{ 0, EnumToFlag(ShopItem::Chips), PeepSpriteType::Chips },
{ 0, EnumToFlag(ShopItem::Pizza), PeepSpriteType::Pizza },
{ 0, EnumToFlag(ShopItem::Burger), PeepSpriteType::Burger },
{ 0, EnumToFlag(ShopItem::Drink), PeepSpriteType::Drink },
{ 0, EnumToFlag(ShopItem::Coffee), PeepSpriteType::Coffee },
{ 0, EnumToFlag(ShopItem::Chicken), PeepSpriteType::Chicken },
{ 0, EnumToFlag(ShopItem::Lemonade), PeepSpriteType::Lemonade },
{ 0, EnumToFlag(ShopItem::Candyfloss), PeepSpriteType::Candyfloss },
{ 0, EnumToFlag(ShopItem::Popcorn), PeepSpriteType::Popcorn },
{ 0, EnumToFlag(ShopItem::HotDog), PeepSpriteType::HotDog },
{ 0, EnumToFlag(ShopItem::Tentacle), PeepSpriteType::Tentacle },
{ 0, EnumToFlag(ShopItem::ToffeeApple), PeepSpriteType::ToffeeApple },
{ 0, EnumToFlag(ShopItem::Doughnut), PeepSpriteType::Doughnut },
{ 1, EnumToFlag(ShopItem::Pretzel), PeepSpriteType::Pretzel },
{ 1, EnumToFlag(ShopItem::Cookie), PeepSpriteType::Pretzel },
{ 1, EnumToFlag(ShopItem::Chocolate), PeepSpriteType::Coffee },
{ 1, EnumToFlag(ShopItem::IcedTea), PeepSpriteType::Coffee },
{ 1, EnumToFlag(ShopItem::FunnelCake), PeepSpriteType::FunnelCake },
{ 1, EnumToFlag(ShopItem::BeefNoodles), PeepSpriteType::Noodles },
{ 1, EnumToFlag(ShopItem::FriedRiceNoodles), PeepSpriteType::Noodles },
{ 1, EnumToFlag(ShopItem::WontonSoup), PeepSpriteType::Soup },
{ 1, EnumToFlag(ShopItem::MeatballSoup), PeepSpriteType::Soup },
{ 1, EnumToFlag(ShopItem::FruitJuice), PeepSpriteType::Juice },
{ 1, EnumToFlag(ShopItem::SoybeanMilk), PeepSpriteType::SuJongkwa },
{ 1, EnumToFlag(ShopItem::SuJeongGwa), PeepSpriteType::SuJongkwa },
{ 1, EnumToFlag(ShopItem::SubSandwich), PeepSpriteType::Sandwich },
{ 1, EnumToFlag(ShopItem::RoastSausage), PeepSpriteType::Sausage },
{ 0, EnumToFlag(ShopItem::Balloon), PeepSpriteType::Balloon },
{ 0, EnumToFlag(ShopItem::Hat), PeepSpriteType::Hat },
{ 1, EnumToFlag(ShopItem::Sunglasses), PeepSpriteType::Sunglasses },
{ 0xFF, 0xFFFFFFFFFFFFFFFF, PeepSpriteType::Invalid }
};
// clang-format on
@ -6856,11 +6831,11 @@ void Guest::UpdateSpriteType()
}
create_balloon({ x, y, z + 9 }, BalloonColour, isBalloonPopped);
}
ItemStandardFlags &= ~PEEP_ITEM_BALLOON;
RemoveItem(ShopItem::Balloon);
WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
}
if (climate_is_raining() && (ItemStandardFlags & PEEP_ITEM_UMBRELLA) && x != LOCATION_NULL)
if (climate_is_raining() && (HasItem(ShopItem::Umbrella)) && x != LOCATION_NULL)
{
CoordsXY loc = { x, y };
if (map_is_location_valid(loc.ToTileStart()))
@ -6887,15 +6862,7 @@ void Guest::UpdateSpriteType()
{
if (item_pref->type == 0)
{
if (ItemStandardFlags & item_pref->item)
{
SetSpriteType(item_pref->sprite_type);
return;
}
}
else
{
if (ItemExtraFlags & item_pref->item)
if (GetItemFlags() & item_pref->item)
{
SetSpriteType(item_pref->sprite_type);
return;

View File

@ -501,7 +501,7 @@ static uint8_t peep_pathfind_get_max_number_junctions(Peep* peep)
return 8;
}
if (peep->ItemStandardFlags & PEEP_ITEM_MAP)
if (peep->HasItem(ShopItem::Map))
return 7;
if (peep->PeepFlags & PEEP_FLAGS_LEAVING_PARK)
@ -2120,7 +2120,7 @@ int32_t guest_path_finding(Guest* peep)
/* If there are still multiple directions to choose from,
* peeps with maps will randomly read the map: probability of doing so
* is much higher when heading for a ride or the park exit. */
if (peep->ItemStandardFlags & PEEP_ITEM_MAP)
if (peep->HasItem(ShopItem::Map))
{
// If at least 2 directions consult map
if (bitcount(edges) >= 2)

View File

@ -1712,8 +1712,7 @@ Peep* Peep::Generate(const CoordsXYZ& coords)
peep->CashSpent = 0;
peep->ParkEntryTime = -1;
peep->ResetPathfindGoal();
peep->ItemStandardFlags = 0;
peep->ItemExtraFlags = 0;
peep->RemoveAllItems();
peep->GuestHeadingToRideId = RIDE_ID_NULL;
peep->LitterCount = 0;
peep->DisgustingCount = 0;
@ -2546,18 +2545,18 @@ static void peep_interact_with_entrance(Peep* peep, const CoordsXYE& coords, uin
money16 entranceFee = park_get_entrance_fee();
if (entranceFee != 0)
{
if (peep->ItemStandardFlags & PEEP_ITEM_VOUCHER)
if (peep->HasItem(ShopItem::Voucher))
{
if (peep->VoucherType == VOUCHER_TYPE_PARK_ENTRY_HALF_PRICE)
{
entranceFee /= 2;
peep->ItemStandardFlags &= ~PEEP_ITEM_VOUCHER;
peep->RemoveItem(ShopItem::Voucher);
peep->WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
}
else if (peep->VoucherType == VOUCHER_TYPE_PARK_ENTRY_FREE)
{
entranceFee = 0;
peep->ItemStandardFlags &= ~PEEP_ITEM_VOUCHER;
peep->RemoveItem(ShopItem::Voucher);
peep->WindowInvalidateFlags |= PEEP_INVALIDATE_PEEP_INVENTORY;
}
}
@ -3264,9 +3263,9 @@ void decrement_guests_heading_for_park()
static void peep_release_balloon(Guest* peep, int16_t spawn_height)
{
if (peep->ItemStandardFlags & PEEP_ITEM_BALLOON)
if (peep->HasItem(ShopItem::Balloon))
{
peep->ItemStandardFlags &= ~PEEP_ITEM_BALLOON;
peep->RemoveItem(ShopItem::Balloon);
if (peep->SpriteType == PeepSpriteType::Balloon && peep->x != LOCATION_NULL)
{
@ -3329,3 +3328,62 @@ void Peep::RemoveFromRide()
}
StateReset();
}
uint64_t Peep::GetItemFlags(bool bit32Flag, bool ExtraItem) const
{
if (bit32Flag)
{
if (ExtraItem)
return ItemExtraFlags;
return ItemStandardFlags;
}
uint64_t ItemFlag = ItemExtraFlags;
return ItemStandardFlags | (ItemFlag << 32);
}
void Peep::SetItemFlags(uint32_t ItemFlag, bool ExtraItem)
{
if (ExtraItem)
{
ItemExtraFlags = ItemFlag;
return;
}
ItemStandardFlags = ItemFlag;
}
void Peep::RemoveAllItems()
{
ItemStandardFlags = 0;
ItemExtraFlags = 0;
}
void Peep::RemoveItem(ShopItem item)
{
// TODO: Join up standard and extra flags into a `uint64_t` to remove this if for the extra flags
if (EnumValue(item) > EnumValue(ShopItem::Admission))
{
ItemExtraFlags &= ~(1 << (EnumValue(item) - EnumValue(ShopItem::Photo2)));
}
else
{
ItemStandardFlags &= ~EnumToFlag(item);
}
}
void Peep::GiveItem(ShopItem item)
{
// TODO: Join up standard and extra flags into a `uint64_t` to remove this if for the extra flags
if (EnumValue(item) > EnumValue(ShopItem::Admission))
{
ItemExtraFlags |= (1 << (EnumValue(item) - EnumValue(ShopItem::Photo2)));
}
else
{
ItemStandardFlags |= EnumToFlag(item);
}
}
bool Peep::HasItem(ShopItem peepItem) const
{
return GetItemFlags() & EnumToFlag(peepItem);
}

View File

@ -418,63 +418,6 @@ enum class PeepNauseaTolerance : uint8_t
High
};
enum PeepItem
{
// ItemStandardFlags
PEEP_ITEM_BALLOON = (1 << 0),
PEEP_ITEM_TOY = (1 << 1),
PEEP_ITEM_MAP = (1 << 2),
PEEP_ITEM_PHOTO = (1 << 3),
PEEP_ITEM_UMBRELLA = (1 << 4),
PEEP_ITEM_DRINK = (1 << 5),
PEEP_ITEM_BURGER = (1 << 6),
PEEP_ITEM_CHIPS = (1 << 7),
PEEP_ITEM_ICE_CREAM = (1 << 8),
PEEP_ITEM_CANDYFLOSS = (1 << 9),
PEEP_ITEM_EMPTY_CAN = (1 << 10),
PEEP_ITEM_RUBBISH = (1 << 11),
PEEP_ITEM_EMPTY_BURGER_BOX = (1 << 12),
PEEP_ITEM_PIZZA = (1 << 13),
PEEP_ITEM_VOUCHER = (1 << 14),
PEEP_ITEM_POPCORN = (1 << 15),
PEEP_ITEM_HOT_DOG = (1 << 16),
PEEP_ITEM_TENTACLE = (1 << 17),
PEEP_ITEM_HAT = (1 << 18),
PEEP_ITEM_TOFFEE_APPLE = (1 << 19),
PEEP_ITEM_TSHIRT = (1 << 20),
PEEP_ITEM_DOUGHNUT = (1 << 21),
PEEP_ITEM_COFFEE = (1 << 22),
PEEP_ITEM_EMPTY_CUP = (1 << 23),
PEEP_ITEM_CHICKEN = (1 << 24),
PEEP_ITEM_LEMONADE = (1 << 25),
PEEP_ITEM_EMPTY_BOX = (1 << 26),
PEEP_ITEM_EMPTY_BOTTLE = (1 << 27),
// ItemExtraFlags
PEEP_ITEM_PHOTO2 = (1 << 0),
PEEP_ITEM_PHOTO3 = (1 << 1),
PEEP_ITEM_PHOTO4 = (1 << 2),
PEEP_ITEM_PRETZEL = (1 << 3),
PEEP_ITEM_CHOCOLATE = (1 << 4),
PEEP_ITEM_ICED_TEA = (1 << 5),
PEEP_ITEM_FUNNEL_CAKE = (1 << 6),
PEEP_ITEM_SUNGLASSES = (1 << 7),
PEEP_ITEM_BEEF_NOODLES = (1 << 8),
PEEP_ITEM_FRIED_RICE_NOODLES = (1 << 9),
PEEP_ITEM_WONTON_SOUP = (1 << 10),
PEEP_ITEM_MEATBALL_SOUP = (1 << 11),
PEEP_ITEM_FRUIT_JUICE = (1 << 12),
PEEP_ITEM_SOYBEAN_MILK = (1 << 13),
PEEP_ITEM_SU_JONGKWA = (1 << 14),
PEEP_ITEM_SUB_SANDWICH = (1 << 15),
PEEP_ITEM_COOKIE = (1 << 16),
PEEP_ITEM_EMPTY_BOWL_RED = (1 << 17),
PEEP_ITEM_EMPTY_DRINK_CARTON = (1 << 18),
PEEP_ITEM_EMPTY_JUICE_CUP = (1 << 19),
PEEP_ITEM_ROAST_SAUSAGE = (1 << 20),
PEEP_ITEM_EMPTY_BOWL_BLUE = (1 << 21),
};
enum class PeepSpriteType : uint8_t
{
Normal = 0,
@ -817,6 +760,12 @@ public: // Peep
// Reset the peep's stored goal, which means they will forget any stored pathfinding history
// on the next peep_pathfind_choose_direction call.
void ResetPathfindGoal();
uint64_t GetItemFlags(bool bit32Flag = false, bool ExtraItem = false) const;
void SetItemFlags(uint32_t ItemFlag, bool ExtraItem = false);
void RemoveAllItems();
void RemoveItem(ShopItem item);
void GiveItem(ShopItem item);
bool HasItem(ShopItem peepItem) const;
// TODO: Make these private again when done refactoring
public: // Peep
@ -838,7 +787,6 @@ struct Guest : Peep
public:
void UpdateGuest();
void Tick128UpdateGuest(int32_t index);
bool HasItem(int32_t peepItem) const;
bool HasFood() const;
bool HasDrink() const;
bool HasEmptyContainer() const;
@ -866,14 +814,12 @@ public:
int32_t GetParkEntryTime() const;
int32_t HasFoodStandardFlag() const;
int32_t HasFoodExtraFlag() const;
bool HasDrinkStandardFlag() const;
bool HasDrinkExtraFlag() const;
int32_t HasEmptyContainerStandardFlag() const;
int32_t HasEmptyContainerExtraFlag() const;
void CheckIfLost();
void CheckCantFindRide();
void CheckCantFindExit();
bool DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price);
bool DecideAndBuyItem(Ride* ride, ShopItem shopItem, money32 price);
void SetSpriteType(PeepSpriteType new_sprite_type);
void HandleEasterEggName();
int32_t GetEasterEggNameId() const;

View File

@ -1568,7 +1568,7 @@ private:
dst->FavouriteRideRating = 0;
}
dst->ItemStandardFlags = src->item_standard_flags;
dst->SetItemFlags(src->item_standard_flags, 0);
if (dst->AssignedPeepType == PeepType::Guest)
{
@ -1861,7 +1861,7 @@ private:
}
else if (campaign.Type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE)
{
campaign.ShopItemType = _s4.marketing_assoc[i];
campaign.ShopItemType = ShopItem(_s4.marketing_assoc[i]);
}
gMarketingCampaigns.push_back(campaign);
}

View File

@ -936,7 +936,7 @@ void S6Exporter::ExportMarketingCampaigns()
}
else if (campaign.Type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE)
{
_s6.campaign_ride_index[campaign.Type] = campaign.ShopItemType;
_s6.campaign_ride_index[campaign.Type] = EnumValue(campaign.ShopItemType);
}
}
}
@ -1173,7 +1173,7 @@ void S6Exporter::ExportSpritePeep(RCT2SpritePeep* dst, const Peep* src)
{
dst->ride_types_been_on[i] = src->RideTypesBeenOn[i];
}
dst->item_extra_flags = src->ItemExtraFlags;
dst->item_extra_flags = src->GetItemFlags(true, true);
dst->photo2_ride_ref = OpenRCT2RideIdToRCT12RideId(src->Photo2RideRef);
dst->photo3_ride_ref = OpenRCT2RideIdToRCT12RideId(src->Photo3RideRef);
dst->photo4_ride_ref = OpenRCT2RideIdToRCT12RideId(src->Photo4RideRef);
@ -1245,7 +1245,7 @@ void S6Exporter::ExportSpritePeep(RCT2SpritePeep* dst, const Peep* src)
dst->hat_colour = src->HatColour;
dst->favourite_ride = OpenRCT2RideIdToRCT12RideId(src->FavouriteRide);
dst->favourite_ride_rating = src->FavouriteRideRating;
dst->item_standard_flags = src->ItemStandardFlags;
dst->item_standard_flags = src->GetItemFlags(true);
}
void S6Exporter::ExportSpriteMisc(RCT12SpriteBase* cdst, const SpriteBase* csrc)

View File

@ -1290,7 +1290,7 @@ public:
}
else if (campaign.Type == ADVERTISING_CAMPAIGN_FOOD_OR_DRINK_FREE)
{
campaign.ShopItemType = _s6.campaign_ride_index[i];
campaign.ShopItemType = ShopItem(_s6.campaign_ride_index[i]);
}
gMarketingCampaigns.push_back(campaign);
}
@ -1468,7 +1468,7 @@ public:
{
dst->RideTypesBeenOn[i] = src->ride_types_been_on[i];
}
dst->ItemExtraFlags = src->item_extra_flags;
dst->SetItemFlags(src->item_extra_flags, 1);
dst->Photo2RideRef = RCT12RideIdToOpenRCT2RideId(src->photo2_ride_ref);
dst->Photo3RideRef = RCT12RideIdToOpenRCT2RideId(src->photo3_ride_ref);
dst->Photo4RideRef = RCT12RideIdToOpenRCT2RideId(src->photo4_ride_ref);
@ -1540,7 +1540,7 @@ public:
dst->HatColour = src->hat_colour;
dst->FavouriteRide = RCT12RideIdToOpenRCT2RideId(src->favourite_ride);
dst->FavouriteRideRating = src->favourite_ride_rating;
dst->ItemStandardFlags = src->item_standard_flags;
dst->SetItemFlags(src->item_standard_flags, 0);
}
void ImportSpriteMisc(SpriteBase* cdst, const RCT12SpriteBase* csrc)

View File

@ -273,7 +273,7 @@ size_t Ride::GetNumPrices() const
{
result++;
}
else if (rideEntry->shop_item[1] != SHOP_ITEM_NONE)
else if (rideEntry->shop_item[1] != ShopItem::None)
{
result++;
}
@ -389,20 +389,20 @@ money32 Ride::CalculateIncomePerHour() const
money32 customersPerHour = ride_customers_per_hour(this);
money32 priceMinusCost = ride_get_price(this);
int32_t currentShopItem = entry->shop_item[0];
if (currentShopItem != SHOP_ITEM_NONE)
ShopItem currentShopItem = entry->shop_item[0];
if (currentShopItem != ShopItem::None)
{
priceMinusCost -= ShopItems[currentShopItem].Cost;
priceMinusCost -= GetShopItemDescriptor(currentShopItem).Cost;
}
currentShopItem = (lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? RideTypeDescriptors[type].PhotoItem
: entry->shop_item[1];
if (currentShopItem != SHOP_ITEM_NONE)
if (currentShopItem != ShopItem::None)
{
const money16 shopItemProfit = price[1] - ShopItems[currentShopItem].Cost;
const money16 shopItemProfit = price[1] - GetShopItemDescriptor(currentShopItem).Cost;
if (ShopItems[currentShopItem].IsPhoto())
if (GetShopItemDescriptor(currentShopItem).IsPhoto())
{
const int32_t rideTicketsSold = total_customers - no_secondary_items_sold;
@ -419,7 +419,7 @@ money32 Ride::CalculateIncomePerHour() const
priceMinusCost += shopItemProfit;
}
if (entry->shop_item[0] != SHOP_ITEM_NONE)
if (entry->shop_item[0] != ShopItem::None)
priceMinusCost /= 2;
}

View File

@ -17,6 +17,7 @@
#include "../world/Map.h"
#include "RideRatings.h"
#include "RideTypes.h"
#include "ShopItem.h"
#include "Vehicle.h"
#include <limits>
@ -125,7 +126,7 @@ struct rct_ride_entry
int8_t intensity_multiplier;
int8_t nausea_multiplier;
uint8_t max_height;
uint8_t shop_item[NUM_SHOP_ITEMS_PER_RIDE];
ShopItem shop_item[NUM_SHOP_ITEMS_PER_RIDE];
rct_string_id capacity;
void* obj;

View File

@ -342,7 +342,7 @@ constexpr const RideTypeDescriptor DummyRTD =
SET_FIELD(BuildCosts, { 0, 0, 1 }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 0),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { static_cast<uint32_t>(SPR_NONE), static_cast<uint32_t>(SPR_NONE) }),

View File

@ -13,70 +13,85 @@
#include "../localisation/StringIds.h"
#include "../sprites.h"
ShopItem& operator++(ShopItem& d, int)
{
return d = (d == ShopItem::Count) ? ShopItem::Balloon : ShopItem(static_cast<uint8_t>(d) + 1);
}
ShopItem operator+(const ShopItem& lhs, const ShopItem& rhs)
{
return ShopItem(EnumValue(lhs) + EnumValue(rhs));
}
ShopItem operator-(const ShopItem& lhs, const ShopItem& rhs)
{
return ShopItem(EnumValue(lhs) - EnumValue(rhs));
}
uint64_t gSamePriceThroughoutPark;
// clang-format off
/** rct2: 0x00982164 (cost, base value, hot and cold value); 0x00982358 (default price) */
const ShopItemDescriptor ShopItems[SHOP_ITEM_COUNT] = {
const ShopItemDescriptor ShopItems[EnumValue(ShopItem::Count)] = {
// Item, Cost, Base value, Hot value, Cold value, Default price, Image, Price label, Singular, Plural, Indefinite, Display (in guest inventory)
/* SHOP_ITEM_BALLOON */ { 3, 14, 14, 14, MONEY(0, 90), SPR_SHOP_ITEM_BALLOON, { STR_SHOP_ITEM_PRICE_LABEL_BALLOON, STR_SHOP_ITEM_SINGULAR_BALLOON, STR_SHOP_ITEM_PLURAL_BALLOON, STR_SHOP_ITEM_INDEFINITE_BALLOON, STR_SHOP_ITEM_DISPLAY_BALLOON }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_TOY */ { 15, 30, 30, 30, MONEY(2, 50), SPR_SHOP_ITEM_TOY, { STR_SHOP_ITEM_PRICE_LABEL_CUDDLY_TOY, STR_SHOP_ITEM_SINGULAR_CUDDLY_TOY, STR_SHOP_ITEM_PLURAL_CUDDLY_TOY, STR_SHOP_ITEM_INDEFINITE_CUDDLY_TOY, STR_SHOP_ITEM_DISPLAY_CUDDLY_TOY }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_MAP */ { 1, 7, 7, 8, MONEY(0, 60), SPR_SHOP_ITEM_MAP, { STR_SHOP_ITEM_PRICE_LABEL_PARK_MAP, STR_SHOP_ITEM_SINGULAR_PARK_MAP, STR_SHOP_ITEM_PLURAL_PARK_MAP, STR_SHOP_ITEM_INDEFINITE_PARK_MAP, STR_SHOP_ITEM_DISPLAY_PARK_MAP }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_PHOTO */ { 2, 30, 30, 30, MONEY(0, 00), SPR_SHOP_ITEM_PHOTO, { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, SHOP_ITEM_FLAG_IS_PHOTO | SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_UMBRELLA */ { 20, 35, 25, 50, MONEY(2, 50), SPR_SHOP_ITEM_UMBRELLA, { STR_SHOP_ITEM_PRICE_LABEL_UMBRELLA, STR_SHOP_ITEM_SINGULAR_UMBRELLA, STR_SHOP_ITEM_PLURAL_UMBRELLA, STR_SHOP_ITEM_INDEFINITE_UMBRELLA, STR_SHOP_ITEM_DISPLAY_UMBRELLA }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_DRINK */ { 3, 12, 20, 10, MONEY(1, 20), SPR_SHOP_ITEM_DRINK, { STR_SHOP_ITEM_PRICE_LABEL_DRINK, STR_SHOP_ITEM_SINGULAR_DRINK, STR_SHOP_ITEM_PLURAL_DRINK, STR_SHOP_ITEM_INDEFINITE_DRINK, STR_SHOP_ITEM_DISPLAY_DRINK }, SHOP_ITEM_FLAG_IS_DRINK },
/* SHOP_ITEM_BURGER */ { 5, 19, 19, 22, MONEY(1, 50), SPR_SHOP_ITEM_BURGER, { STR_SHOP_ITEM_PRICE_LABEL_BURGER, STR_SHOP_ITEM_SINGULAR_BURGER, STR_SHOP_ITEM_PLURAL_BURGER, STR_SHOP_ITEM_INDEFINITE_BURGER, STR_SHOP_ITEM_DISPLAY_BURGER }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_CHIPS */ { 4, 16, 16, 18, MONEY(1, 50), SPR_SHOP_ITEM_CHIPS, { STR_SHOP_ITEM_PRICE_LABEL_CHIPS, STR_SHOP_ITEM_SINGULAR_CHIPS, STR_SHOP_ITEM_PLURAL_CHIPS, STR_SHOP_ITEM_INDEFINITE_CHIPS, STR_SHOP_ITEM_DISPLAY_CHIPS }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_ICE_CREAM */ { 4, 10, 15, 6, MONEY(0, 90), SPR_SHOP_ITEM_ICE_CREAM, { STR_SHOP_ITEM_PRICE_LABEL_ICE_CREAM, STR_SHOP_ITEM_SINGULAR_ICE_CREAM, STR_SHOP_ITEM_PLURAL_ICE_CREAM, STR_SHOP_ITEM_INDEFINITE_ICE_CREAM, STR_SHOP_ITEM_DISPLAY_ICE_CREAM }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_CANDYFLOSS */ { 3, 9, 9, 6, MONEY(0, 80), SPR_SHOP_ITEM_CANDYFLOSS, { STR_SHOP_ITEM_PRICE_LABEL_CANDYFLOSS, STR_SHOP_ITEM_SINGULAR_CANDYFLOSS, STR_SHOP_ITEM_PLURAL_CANDYFLOSS, STR_SHOP_ITEM_INDEFINITE_CANDYFLOSS, STR_SHOP_ITEM_DISPLAY_CANDYFLOSS }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_EMPTY_CAN */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_CAN, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_CAN, STR_SHOP_ITEM_SINGULAR_EMPTY_CAN, STR_SHOP_ITEM_PLURAL_EMPTY_CAN, STR_SHOP_ITEM_INDEFINITE_EMPTY_CAN, STR_SHOP_ITEM_DISPLAY_EMPTY_CAN }, 0 },
/* SHOP_ITEM_RUBBISH */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_RUBBISH, { STR_SHOP_ITEM_PRICE_LABEL_RUBBISH, STR_SHOP_ITEM_SINGULAR_RUBBISH, STR_SHOP_ITEM_PLURAL_RUBBISH, STR_SHOP_ITEM_INDEFINITE_RUBBISH, STR_SHOP_ITEM_DISPLAY_RUBBISH }, 0 },
/* SHOP_ITEM_EMPTY_BURGER_BOX */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_BURGER_BOX, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BURGER_BOX, STR_SHOP_ITEM_SINGULAR_EMPTY_BURGER_BOX, STR_SHOP_ITEM_PLURAL_EMPTY_BURGER_BOX, STR_SHOP_ITEM_INDEFINITE_EMPTY_BURGER_BOX, STR_SHOP_ITEM_DISPLAY_EMPTY_BURGER_BOX }, 0 },
/* SHOP_ITEM_PIZZA */ { 6, 21, 21, 25, MONEY(1, 60), SPR_SHOP_ITEM_PIZZA, { STR_SHOP_ITEM_PRICE_LABEL_PIZZA, STR_SHOP_ITEM_SINGULAR_PIZZA, STR_SHOP_ITEM_PLURAL_PIZZA, STR_SHOP_ITEM_INDEFINITE_PIZZA, STR_SHOP_ITEM_DISPLAY_PIZZA }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_VOUCHER */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_VOUCHER, { STR_SHOP_ITEM_PRICE_LABEL_VOUCHER, STR_SHOP_ITEM_SINGULAR_VOUCHER, STR_SHOP_ITEM_PLURAL_VOUCHER, STR_SHOP_ITEM_INDEFINITE_VOUCHER, STR_SHOP_ITEM_DISPLAY_VOUCHER }, 0 },
/* SHOP_ITEM_POPCORN */ { 5, 13, 13, 11, MONEY(1, 20), SPR_SHOP_ITEM_POPCORN, { STR_SHOP_ITEM_PRICE_LABEL_POPCORN, STR_SHOP_ITEM_SINGULAR_POPCORN, STR_SHOP_ITEM_PLURAL_POPCORN, STR_SHOP_ITEM_INDEFINITE_POPCORN, STR_SHOP_ITEM_DISPLAY_POPCORN }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_HOT_DOG */ { 5, 17, 17, 20, MONEY(1, 00), SPR_SHOP_ITEM_HOT_DOG, { STR_SHOP_ITEM_PRICE_LABEL_HOT_DOG, STR_SHOP_ITEM_SINGULAR_HOT_DOG, STR_SHOP_ITEM_PLURAL_HOT_DOG, STR_SHOP_ITEM_INDEFINITE_HOT_DOG, STR_SHOP_ITEM_DISPLAY_HOT_DOG }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_TENTACLE */ { 11, 22, 20, 18, MONEY(1, 50), SPR_SHOP_ITEM_TENTACLE, { STR_SHOP_ITEM_PRICE_LABEL_TENTACLE, STR_SHOP_ITEM_SINGULAR_TENTACLE, STR_SHOP_ITEM_PLURAL_TENTACLE, STR_SHOP_ITEM_INDEFINITE_TENTACLE, STR_SHOP_ITEM_DISPLAY_TENTACLE }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_HAT */ { 9, 27, 32, 24, MONEY(1, 50), SPR_SHOP_ITEM_HAT, { STR_SHOP_ITEM_PRICE_LABEL_HAT, STR_SHOP_ITEM_SINGULAR_HAT, STR_SHOP_ITEM_PLURAL_HAT, STR_SHOP_ITEM_INDEFINITE_HAT, STR_SHOP_ITEM_DISPLAY_HAT }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_TOFFEE_APPLE */ { 4, 10, 10, 10, MONEY(0, 70), SPR_SHOP_ITEM_TOFFEE_APPLE, { STR_SHOP_ITEM_PRICE_LABEL_TOFFEE_APPLE, STR_SHOP_ITEM_SINGULAR_TOFFEE_APPLE, STR_SHOP_ITEM_PLURAL_TOFFEE_APPLE, STR_SHOP_ITEM_INDEFINITE_TOFFEE_APPLE, STR_SHOP_ITEM_DISPLAY_TOFFEE_APPLE }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_TSHIRT */ { 20, 37, 37, 37, MONEY(3, 00), SPR_SHOP_ITEM_TSHIRT, { STR_SHOP_ITEM_PRICE_LABEL_T_SHIRT, STR_SHOP_ITEM_SINGULAR_T_SHIRT, STR_SHOP_ITEM_PLURAL_T_SHIRT, STR_SHOP_ITEM_INDEFINITE_T_SHIRT, STR_SHOP_ITEM_DISPLAY_T_SHIRT }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_DOUGHNUT */ { 4, 8, 7, 10, MONEY(0, 70), SPR_SHOP_ITEM_DOUGHNUT, { STR_SHOP_ITEM_PRICE_LABEL_DOUGHNUT, STR_SHOP_ITEM_SINGULAR_DOUGHNUT, STR_SHOP_ITEM_PLURAL_DOUGHNUT, STR_SHOP_ITEM_INDEFINITE_DOUGHNUT, STR_SHOP_ITEM_DISPLAY_DOUGHNUT }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_COFFEE */ { 3, 11, 15, 20, MONEY(1, 20), SPR_SHOP_ITEM_COFFEE, { STR_SHOP_ITEM_PRICE_LABEL_COFFEE, STR_SHOP_ITEM_SINGULAR_COFFEE, STR_SHOP_ITEM_PLURAL_COFFEE, STR_SHOP_ITEM_INDEFINITE_COFFEE, STR_SHOP_ITEM_DISPLAY_COFFEE }, SHOP_ITEM_FLAG_IS_DRINK },
/* SHOP_ITEM_EMPTY_CUP */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_CUP, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_CUP, STR_SHOP_ITEM_SINGULAR_EMPTY_CUP, STR_SHOP_ITEM_PLURAL_EMPTY_CUP, STR_SHOP_ITEM_INDEFINITE_EMPTY_CUP, STR_SHOP_ITEM_DISPLAY_EMPTY_CUP }, 0 },
/* SHOP_ITEM_CHICKEN */ { 5, 19, 19, 22, MONEY(1, 50), SPR_SHOP_ITEM_CHICKEN, { STR_SHOP_ITEM_PRICE_LABEL_FRIED_CHICKEN, STR_SHOP_ITEM_SINGULAR_FRIED_CHICKEN, STR_SHOP_ITEM_PLURAL_FRIED_CHICKEN, STR_SHOP_ITEM_INDEFINITE_FRIED_CHICKEN, STR_SHOP_ITEM_DISPLAY_FRIED_CHICKEN }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_LEMONADE */ { 4, 11, 21, 10, MONEY(1, 20), SPR_SHOP_ITEM_LEMONADE, { STR_SHOP_ITEM_PRICE_LABEL_LEMONADE, STR_SHOP_ITEM_SINGULAR_LEMONADE, STR_SHOP_ITEM_PLURAL_LEMONADE, STR_SHOP_ITEM_INDEFINITE_LEMONADE, STR_SHOP_ITEM_DISPLAY_LEMONADE }, SHOP_ITEM_FLAG_IS_DRINK },
/* SHOP_ITEM_EMPTY_BOX */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_BOX, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOX, STR_SHOP_ITEM_SINGULAR_EMPTY_BOX, STR_SHOP_ITEM_PLURAL_EMPTY_BOX, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOX, STR_SHOP_ITEM_DISPLAY_EMPTY_BOX }, 0 },
/* SHOP_ITEM_EMPTY_BOTTLE */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_BOTTLE, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOTTLE, STR_SHOP_ITEM_SINGULAR_EMPTY_BOTTLE, STR_SHOP_ITEM_PLURAL_EMPTY_BOTTLE, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOTTLE, STR_SHOP_ITEM_DISPLAY_EMPTY_BOTTLE }, 0 },
/* ShopItem::Balloon */ { 3, 14, 14, 14, MONEY(0, 90), SPR_SHOP_ITEM_BALLOON, { STR_SHOP_ITEM_PRICE_LABEL_BALLOON, STR_SHOP_ITEM_SINGULAR_BALLOON, STR_SHOP_ITEM_PLURAL_BALLOON, STR_SHOP_ITEM_INDEFINITE_BALLOON, STR_SHOP_ITEM_DISPLAY_BALLOON }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::Toy */ { 15, 30, 30, 30, MONEY(2, 50), SPR_SHOP_ITEM_TOY, { STR_SHOP_ITEM_PRICE_LABEL_CUDDLY_TOY, STR_SHOP_ITEM_SINGULAR_CUDDLY_TOY, STR_SHOP_ITEM_PLURAL_CUDDLY_TOY, STR_SHOP_ITEM_INDEFINITE_CUDDLY_TOY, STR_SHOP_ITEM_DISPLAY_CUDDLY_TOY }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::Map */ { 1, 7, 7, 8, MONEY(0, 60), SPR_SHOP_ITEM_MAP, { STR_SHOP_ITEM_PRICE_LABEL_PARK_MAP, STR_SHOP_ITEM_SINGULAR_PARK_MAP, STR_SHOP_ITEM_PLURAL_PARK_MAP, STR_SHOP_ITEM_INDEFINITE_PARK_MAP, STR_SHOP_ITEM_DISPLAY_PARK_MAP }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::Photo */ { 2, 30, 30, 30, MONEY(0, 00), SPR_SHOP_ITEM_PHOTO, { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, SHOP_ITEM_FLAG_IS_PHOTO | SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::Umbrella */ { 20, 35, 25, 50, MONEY(2, 50), SPR_SHOP_ITEM_UMBRELLA, { STR_SHOP_ITEM_PRICE_LABEL_UMBRELLA, STR_SHOP_ITEM_SINGULAR_UMBRELLA, STR_SHOP_ITEM_PLURAL_UMBRELLA, STR_SHOP_ITEM_INDEFINITE_UMBRELLA, STR_SHOP_ITEM_DISPLAY_UMBRELLA }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::Drink */ { 3, 12, 20, 10, MONEY(1, 20), SPR_SHOP_ITEM_DRINK, { STR_SHOP_ITEM_PRICE_LABEL_DRINK, STR_SHOP_ITEM_SINGULAR_DRINK, STR_SHOP_ITEM_PLURAL_DRINK, STR_SHOP_ITEM_INDEFINITE_DRINK, STR_SHOP_ITEM_DISPLAY_DRINK }, SHOP_ITEM_FLAG_IS_DRINK },
/* ShopItem::Burger */ { 5, 19, 19, 22, MONEY(1, 50), SPR_SHOP_ITEM_BURGER, { STR_SHOP_ITEM_PRICE_LABEL_BURGER, STR_SHOP_ITEM_SINGULAR_BURGER, STR_SHOP_ITEM_PLURAL_BURGER, STR_SHOP_ITEM_INDEFINITE_BURGER, STR_SHOP_ITEM_DISPLAY_BURGER }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::Chips */ { 4, 16, 16, 18, MONEY(1, 50), SPR_SHOP_ITEM_CHIPS, { STR_SHOP_ITEM_PRICE_LABEL_CHIPS, STR_SHOP_ITEM_SINGULAR_CHIPS, STR_SHOP_ITEM_PLURAL_CHIPS, STR_SHOP_ITEM_INDEFINITE_CHIPS, STR_SHOP_ITEM_DISPLAY_CHIPS }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::IceCream */ { 4, 10, 15, 6, MONEY(0, 90), SPR_SHOP_ITEM_ICE_CREAM, { STR_SHOP_ITEM_PRICE_LABEL_ICE_CREAM, STR_SHOP_ITEM_SINGULAR_ICE_CREAM, STR_SHOP_ITEM_PLURAL_ICE_CREAM, STR_SHOP_ITEM_INDEFINITE_ICE_CREAM, STR_SHOP_ITEM_DISPLAY_ICE_CREAM }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::Candyfloss */ { 3, 9, 9, 6, MONEY(0, 80), SPR_SHOP_ITEM_CANDYFLOSS, { STR_SHOP_ITEM_PRICE_LABEL_CANDYFLOSS, STR_SHOP_ITEM_SINGULAR_CANDYFLOSS, STR_SHOP_ITEM_PLURAL_CANDYFLOSS, STR_SHOP_ITEM_INDEFINITE_CANDYFLOSS, STR_SHOP_ITEM_DISPLAY_CANDYFLOSS }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::EmptyCan */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_CAN, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_CAN, STR_SHOP_ITEM_SINGULAR_EMPTY_CAN, STR_SHOP_ITEM_PLURAL_EMPTY_CAN, STR_SHOP_ITEM_INDEFINITE_EMPTY_CAN, STR_SHOP_ITEM_DISPLAY_EMPTY_CAN }, 0 },
/* ShopItem::Rubbish */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_RUBBISH, { STR_SHOP_ITEM_PRICE_LABEL_RUBBISH, STR_SHOP_ITEM_SINGULAR_RUBBISH, STR_SHOP_ITEM_PLURAL_RUBBISH, STR_SHOP_ITEM_INDEFINITE_RUBBISH, STR_SHOP_ITEM_DISPLAY_RUBBISH }, 0 },
/* ShopItem::EmptyBurgerBox */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_BURGER_BOX, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BURGER_BOX, STR_SHOP_ITEM_SINGULAR_EMPTY_BURGER_BOX, STR_SHOP_ITEM_PLURAL_EMPTY_BURGER_BOX, STR_SHOP_ITEM_INDEFINITE_EMPTY_BURGER_BOX, STR_SHOP_ITEM_DISPLAY_EMPTY_BURGER_BOX }, 0 },
/* ShopItem::Pizza */ { 6, 21, 21, 25, MONEY(1, 60), SPR_SHOP_ITEM_PIZZA, { STR_SHOP_ITEM_PRICE_LABEL_PIZZA, STR_SHOP_ITEM_SINGULAR_PIZZA, STR_SHOP_ITEM_PLURAL_PIZZA, STR_SHOP_ITEM_INDEFINITE_PIZZA, STR_SHOP_ITEM_DISPLAY_PIZZA }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::Voucher */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_VOUCHER, { STR_SHOP_ITEM_PRICE_LABEL_VOUCHER, STR_SHOP_ITEM_SINGULAR_VOUCHER, STR_SHOP_ITEM_PLURAL_VOUCHER, STR_SHOP_ITEM_INDEFINITE_VOUCHER, STR_SHOP_ITEM_DISPLAY_VOUCHER }, 0 },
/* ShopItem::Popcorn */ { 5, 13, 13, 11, MONEY(1, 20), SPR_SHOP_ITEM_POPCORN, { STR_SHOP_ITEM_PRICE_LABEL_POPCORN, STR_SHOP_ITEM_SINGULAR_POPCORN, STR_SHOP_ITEM_PLURAL_POPCORN, STR_SHOP_ITEM_INDEFINITE_POPCORN, STR_SHOP_ITEM_DISPLAY_POPCORN }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::HotDog */ { 5, 17, 17, 20, MONEY(1, 00), SPR_SHOP_ITEM_HOT_DOG, { STR_SHOP_ITEM_PRICE_LABEL_HOT_DOG, STR_SHOP_ITEM_SINGULAR_HOT_DOG, STR_SHOP_ITEM_PLURAL_HOT_DOG, STR_SHOP_ITEM_INDEFINITE_HOT_DOG, STR_SHOP_ITEM_DISPLAY_HOT_DOG }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::Tentacle */ { 11, 22, 20, 18, MONEY(1, 50), SPR_SHOP_ITEM_TENTACLE, { STR_SHOP_ITEM_PRICE_LABEL_TENTACLE, STR_SHOP_ITEM_SINGULAR_TENTACLE, STR_SHOP_ITEM_PLURAL_TENTACLE, STR_SHOP_ITEM_INDEFINITE_TENTACLE, STR_SHOP_ITEM_DISPLAY_TENTACLE }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::Hat */ { 9, 27, 32, 24, MONEY(1, 50), SPR_SHOP_ITEM_HAT, { STR_SHOP_ITEM_PRICE_LABEL_HAT, STR_SHOP_ITEM_SINGULAR_HAT, STR_SHOP_ITEM_PLURAL_HAT, STR_SHOP_ITEM_INDEFINITE_HAT, STR_SHOP_ITEM_DISPLAY_HAT }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::ToffeeApple */ { 4, 10, 10, 10, MONEY(0, 70), SPR_SHOP_ITEM_TOFFEE_APPLE, { STR_SHOP_ITEM_PRICE_LABEL_TOFFEE_APPLE, STR_SHOP_ITEM_SINGULAR_TOFFEE_APPLE, STR_SHOP_ITEM_PLURAL_TOFFEE_APPLE, STR_SHOP_ITEM_INDEFINITE_TOFFEE_APPLE, STR_SHOP_ITEM_DISPLAY_TOFFEE_APPLE }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::TShirt */ { 20, 37, 37, 37, MONEY(3, 00), SPR_SHOP_ITEM_TSHIRT, { STR_SHOP_ITEM_PRICE_LABEL_T_SHIRT, STR_SHOP_ITEM_SINGULAR_T_SHIRT, STR_SHOP_ITEM_PLURAL_T_SHIRT, STR_SHOP_ITEM_INDEFINITE_T_SHIRT, STR_SHOP_ITEM_DISPLAY_T_SHIRT }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::Doughnut */ { 4, 8, 7, 10, MONEY(0, 70), SPR_SHOP_ITEM_DOUGHNUT, { STR_SHOP_ITEM_PRICE_LABEL_DOUGHNUT, STR_SHOP_ITEM_SINGULAR_DOUGHNUT, STR_SHOP_ITEM_PLURAL_DOUGHNUT, STR_SHOP_ITEM_INDEFINITE_DOUGHNUT, STR_SHOP_ITEM_DISPLAY_DOUGHNUT }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::Coffee */ { 3, 11, 15, 20, MONEY(1, 20), SPR_SHOP_ITEM_COFFEE, { STR_SHOP_ITEM_PRICE_LABEL_COFFEE, STR_SHOP_ITEM_SINGULAR_COFFEE, STR_SHOP_ITEM_PLURAL_COFFEE, STR_SHOP_ITEM_INDEFINITE_COFFEE, STR_SHOP_ITEM_DISPLAY_COFFEE }, SHOP_ITEM_FLAG_IS_DRINK },
/* ShopItem::EmptyCup */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_CUP, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_CUP, STR_SHOP_ITEM_SINGULAR_EMPTY_CUP, STR_SHOP_ITEM_PLURAL_EMPTY_CUP, STR_SHOP_ITEM_INDEFINITE_EMPTY_CUP, STR_SHOP_ITEM_DISPLAY_EMPTY_CUP }, 0 },
/* ShopItem::Chicken */ { 5, 19, 19, 22, MONEY(1, 50), SPR_SHOP_ITEM_CHICKEN, { STR_SHOP_ITEM_PRICE_LABEL_FRIED_CHICKEN, STR_SHOP_ITEM_SINGULAR_FRIED_CHICKEN, STR_SHOP_ITEM_PLURAL_FRIED_CHICKEN, STR_SHOP_ITEM_INDEFINITE_FRIED_CHICKEN, STR_SHOP_ITEM_DISPLAY_FRIED_CHICKEN }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::Lemonade */ { 4, 11, 21, 10, MONEY(1, 20), SPR_SHOP_ITEM_LEMONADE, { STR_SHOP_ITEM_PRICE_LABEL_LEMONADE, STR_SHOP_ITEM_SINGULAR_LEMONADE, STR_SHOP_ITEM_PLURAL_LEMONADE, STR_SHOP_ITEM_INDEFINITE_LEMONADE, STR_SHOP_ITEM_DISPLAY_LEMONADE }, SHOP_ITEM_FLAG_IS_DRINK },
/* ShopItem::EmptyBox */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_BOX, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOX, STR_SHOP_ITEM_SINGULAR_EMPTY_BOX, STR_SHOP_ITEM_PLURAL_EMPTY_BOX, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOX, STR_SHOP_ITEM_DISPLAY_EMPTY_BOX }, 0 },
/* ShopItem::EmptyBottle */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_BOTTLE, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOTTLE, STR_SHOP_ITEM_SINGULAR_EMPTY_BOTTLE, STR_SHOP_ITEM_PLURAL_EMPTY_BOTTLE, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOTTLE, STR_SHOP_ITEM_DISPLAY_EMPTY_BOTTLE }, 0 },
/* 28 */ { 0, 0, 0, 0, MONEY(0, 00), 0, { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, 0 },
/* 29 */ { 0, 0, 0, 0, MONEY(0, 00), 0, { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, 0 },
/* 30 */ { 0, 0, 0, 0, MONEY(0, 00), 0, { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, 0 },
/* SHOP_ITEM_ADMISSION */ { 0, 0, 0, 0, MONEY(0, 00), 0, { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, 0 },
/* SHOP_ITEM_PHOTO2 */ { 2, 30, 30, 30, MONEY(0, 00), SPR_SHOP_ITEM_PHOTO2, { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, SHOP_ITEM_FLAG_IS_PHOTO | SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_PHOTO3 */ { 2, 30, 30, 30, MONEY(0, 00), SPR_SHOP_ITEM_PHOTO3, { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, SHOP_ITEM_FLAG_IS_PHOTO | SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_PHOTO4 */ { 2, 30, 30, 30, MONEY(0, 00), SPR_SHOP_ITEM_PHOTO4, { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, SHOP_ITEM_FLAG_IS_PHOTO | SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_PRETZEL */ { 5, 11, 11, 11, MONEY(1, 10), SPR_SHOP_ITEM_PRETZEL, { STR_SHOP_ITEM_PRICE_LABEL_PRETZEL, STR_SHOP_ITEM_SINGULAR_PRETZEL, STR_SHOP_ITEM_PLURAL_PRETZEL, STR_SHOP_ITEM_INDEFINITE_PRETZEL, STR_SHOP_ITEM_DISPLAY_PRETZEL }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_CHOCOLATE */ { 4, 13, 13, 20, MONEY(1, 20), SPR_SHOP_ITEM_CHOCOLATE, { STR_SHOP_ITEM_PRICE_LABEL_HOT_CHOCOLATE, STR_SHOP_ITEM_SINGULAR_HOT_CHOCOLATE, STR_SHOP_ITEM_PLURAL_HOT_CHOCOLATE, STR_SHOP_ITEM_INDEFINITE_HOT_CHOCOLATE, STR_SHOP_ITEM_DISPLAY_HOT_CHOCOLATE }, SHOP_ITEM_FLAG_IS_DRINK },
/* SHOP_ITEM_ICED_TEA */ { 3, 10, 20, 10, MONEY(1, 10), SPR_SHOP_ITEM_ICED_TEA, { STR_SHOP_ITEM_PRICE_LABEL_ICED_TEA, STR_SHOP_ITEM_SINGULAR_ICED_TEA, STR_SHOP_ITEM_PLURAL_ICED_TEA, STR_SHOP_ITEM_INDEFINITE_ICED_TEA, STR_SHOP_ITEM_DISPLAY_ICED_TEA }, SHOP_ITEM_FLAG_IS_DRINK },
/* SHOP_ITEM_FUNNEL_CAKE */ { 5, 13, 11, 14, MONEY(1, 20), SPR_SHOP_ITEM_FUNNEL_CAKE, { STR_SHOP_ITEM_PRICE_LABEL_FUNNEL_CAKE, STR_SHOP_ITEM_SINGULAR_FUNNEL_CAKE, STR_SHOP_ITEM_PLURAL_FUNNEL_CAKE, STR_SHOP_ITEM_INDEFINITE_FUNNEL_CAKE, STR_SHOP_ITEM_DISPLAY_FUNNEL_CAKE }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_SUNGLASSES */ { 8, 15, 20, 12, MONEY(1, 50), SPR_SHOP_ITEM_SUNGLASSES, { STR_SHOP_ITEM_PRICE_LABEL_SUNGLASSES, STR_SHOP_ITEM_SINGULAR_SUNGLASSES, STR_SHOP_ITEM_PLURAL_SUNGLASSES, STR_SHOP_ITEM_INDEFINITE_SUNGLASSES, STR_SHOP_ITEM_DISPLAY_SUNGLASSES }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* SHOP_ITEM_BEEF_NOODLES */ { 7, 17, 17, 20, MONEY(1, 50), SPR_SHOP_ITEM_BEEF_NOODLES, { STR_SHOP_ITEM_PRICE_LABEL_BEEF_NOODLES, STR_SHOP_ITEM_SINGULAR_BEEF_NOODLES, STR_SHOP_ITEM_PLURAL_BEEF_NOODLES, STR_SHOP_ITEM_INDEFINITE_BEEF_NOODLES, STR_SHOP_ITEM_DISPLAY_BEEF_NOODLES }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_FRIED_RICE_NOODLES */ { 6, 17, 17, 20, MONEY(1, 50), SPR_SHOP_ITEM_FRIED_RICE_NOODLES, { STR_SHOP_ITEM_PRICE_LABEL_FRIED_RICE_NOODLES, STR_SHOP_ITEM_SINGULAR_FRIED_RICE_NOODLES, STR_SHOP_ITEM_PLURAL_FRIED_RICE_NOODLES, STR_SHOP_ITEM_INDEFINITE_FRIED_RICE_NOODLES, STR_SHOP_ITEM_DISPLAY_FRIED_RICE_NOODLES }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_WONTON_SOUP */ { 4, 13, 13, 15, MONEY(1, 50), SPR_SHOP_ITEM_WONTON_SOUP, { STR_SHOP_ITEM_PRICE_LABEL_WONTON_SOUP, STR_SHOP_ITEM_SINGULAR_WONTON_SOUP, STR_SHOP_ITEM_PLURAL_WONTON_SOUP, STR_SHOP_ITEM_INDEFINITE_WONTON_SOUP, STR_SHOP_ITEM_DISPLAY_WONTON_SOUP }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_MEATBALL_SOUP */ { 5, 14, 14, 16, MONEY(1, 50), SPR_SHOP_ITEM_MEATBALL_SOUP, { STR_SHOP_ITEM_PRICE_LABEL_MEATBALL_SOUP, STR_SHOP_ITEM_SINGULAR_MEATBALL_SOUP, STR_SHOP_ITEM_PLURAL_MEATBALL_SOUP, STR_SHOP_ITEM_INDEFINITE_MEATBALL_SOUP, STR_SHOP_ITEM_DISPLAY_MEATBALL_SOUP }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_FRUIT_JUICE */ { 4, 11, 19, 11, MONEY(1, 20), SPR_SHOP_ITEM_FRUIT_JUICE, { STR_SHOP_ITEM_PRICE_LABEL_FRUIT_JUICE, STR_SHOP_ITEM_SINGULAR_FRUIT_JUICE, STR_SHOP_ITEM_PLURAL_FRUIT_JUICE, STR_SHOP_ITEM_INDEFINITE_FRUIT_JUICE, STR_SHOP_ITEM_DISPLAY_FRUIT_JUICE }, SHOP_ITEM_FLAG_IS_DRINK },
/* SHOP_ITEM_SOYBEAN_MILK */ { 4, 10, 14, 10, MONEY(1, 20), SPR_SHOP_ITEM_SOYBEAN_MILK, { STR_SHOP_ITEM_PRICE_LABEL_SOYBEAN_MILK, STR_SHOP_ITEM_SINGULAR_SOYBEAN_MILK, STR_SHOP_ITEM_PLURAL_SOYBEAN_MILK, STR_SHOP_ITEM_INDEFINITE_SOYBEAN_MILK, STR_SHOP_ITEM_DISPLAY_SOYBEAN_MILK }, SHOP_ITEM_FLAG_IS_DRINK },
/* SHOP_ITEM_SUJEONGGWA */ { 3, 11, 14, 11, MONEY(1, 20), SPR_SHOP_ITEM_SUJEONGGWA, { STR_SHOP_ITEM_PRICE_LABEL_SUJONGKWA, STR_SHOP_ITEM_SINGULAR_SUJONGKWA, STR_SHOP_ITEM_PLURAL_SUJONGKWA, STR_SHOP_ITEM_INDEFINITE_SUJONGKWA, STR_SHOP_ITEM_DISPLAY_SUJONGKWA }, SHOP_ITEM_FLAG_IS_DRINK },
/* SHOP_ITEM_SUB_SANDWICH */ { 5, 19, 19, 17, MONEY(1, 50), SPR_SHOP_ITEM_SUB_SANDWICH, { STR_SHOP_ITEM_PRICE_LABEL_SUB_SANDWICH, STR_SHOP_ITEM_SINGULAR_SUB_SANDWICH, STR_SHOP_ITEM_PLURAL_SUB_SANDWICH, STR_SHOP_ITEM_INDEFINITE_SUB_SANDWICH, STR_SHOP_ITEM_DISPLAY_SUB_SANDWICH }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_COOKIE */ { 4, 8, 8, 8, MONEY(0, 70), SPR_SHOP_ITEM_COOKIE, { STR_SHOP_ITEM_PRICE_LABEL_COOKIE, STR_SHOP_ITEM_SINGULAR_COOKIE, STR_SHOP_ITEM_PLURAL_COOKIE, STR_SHOP_ITEM_INDEFINITE_COOKIE, STR_SHOP_ITEM_DISPLAY_COOKIE }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_EMPTY_BOWL_RED */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_BOWL_RED, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOWL_RED, STR_SHOP_ITEM_SINGULAR_EMPTY_BOWL_RED, STR_SHOP_ITEM_PLURAL_EMPTY_BOWL_RED, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOWL_RED, STR_SHOP_ITEM_DISPLAY_EMPTY_BOWL_RED }, 0 },
/* SHOP_ITEM_EMPTY_DRINK_CARTON */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_DRINK_CARTON, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_SINGULAR_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_PLURAL_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_INDEFINITE_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_DISPLAY_EMPTY_DRINK_CARTON }, 0 },
/* SHOP_ITEM_EMPTY_JUICE_CUP */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_JUICE_CUP, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_JUICE_CUP, STR_SHOP_ITEM_SINGULAR_EMPTY_JUICE_CUP, STR_SHOP_ITEM_PLURAL_EMPTY_JUICE_CUP, STR_SHOP_ITEM_INDEFINITE_EMPTY_JUICE_CUP, STR_SHOP_ITEM_DISPLAY_EMPTY_JUICE_CUP }, 0 },
/* SHOP_ITEM_ROAST_SAUSAGE */ { 5, 16, 16, 20, MONEY(1, 50), SPR_SHOP_ITEM_ROAST_SAUSAGE, { STR_SHOP_ITEM_PRICE_LABEL_ROAST_SAUSAGE, STR_SHOP_ITEM_SINGULAR_ROAST_SAUSAGE, STR_SHOP_ITEM_PLURAL_ROAST_SAUSAGE, STR_SHOP_ITEM_INDEFINITE_ROAST_SAUSAGE, STR_SHOP_ITEM_DISPLAY_ROAST_SAUSAGE }, SHOP_ITEM_FLAG_IS_FOOD },
/* SHOP_ITEM_EMPTY_BOWL_BLUE */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_BOWL_BLUE, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_SINGULAR_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_PLURAL_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_DISPLAY_EMPTY_BOWL_BLUE }, 0 },
/* ShopItem::Admission */ { 0, 0, 0, 0, MONEY(0, 00), 0, { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE }, 0 },
/* ShopItem::Photo2 */ { 2, 30, 30, 30, MONEY(0, 00), SPR_SHOP_ITEM_PHOTO2, { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, SHOP_ITEM_FLAG_IS_PHOTO | SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::Photo3 */ { 2, 30, 30, 30, MONEY(0, 00), SPR_SHOP_ITEM_PHOTO3, { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, SHOP_ITEM_FLAG_IS_PHOTO | SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::Photo4 */ { 2, 30, 30, 30, MONEY(0, 00), SPR_SHOP_ITEM_PHOTO4, { STR_SHOP_ITEM_PRICE_LABEL_ON_RIDE_PHOTO, STR_SHOP_ITEM_SINGULAR_ON_RIDE_PHOTO, STR_SHOP_ITEM_PLURAL_ON_RIDE_PHOTO, STR_SHOP_ITEM_INDEFINITE_ON_RIDE_PHOTO, STR_SHOP_ITEM_DISPLAY_ON_RIDE_PHOTO }, SHOP_ITEM_FLAG_IS_PHOTO | SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::Pretzel */ { 5, 11, 11, 11, MONEY(1, 10), SPR_SHOP_ITEM_PRETZEL, { STR_SHOP_ITEM_PRICE_LABEL_PRETZEL, STR_SHOP_ITEM_SINGULAR_PRETZEL, STR_SHOP_ITEM_PLURAL_PRETZEL, STR_SHOP_ITEM_INDEFINITE_PRETZEL, STR_SHOP_ITEM_DISPLAY_PRETZEL }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::Chocolate */ { 4, 13, 13, 20, MONEY(1, 20), SPR_SHOP_ITEM_CHOCOLATE, { STR_SHOP_ITEM_PRICE_LABEL_HOT_CHOCOLATE, STR_SHOP_ITEM_SINGULAR_HOT_CHOCOLATE, STR_SHOP_ITEM_PLURAL_HOT_CHOCOLATE, STR_SHOP_ITEM_INDEFINITE_HOT_CHOCOLATE, STR_SHOP_ITEM_DISPLAY_HOT_CHOCOLATE }, SHOP_ITEM_FLAG_IS_DRINK },
/* ShopItem::IcedTea */ { 3, 10, 20, 10, MONEY(1, 10), SPR_SHOP_ITEM_ICED_TEA, { STR_SHOP_ITEM_PRICE_LABEL_ICED_TEA, STR_SHOP_ITEM_SINGULAR_ICED_TEA, STR_SHOP_ITEM_PLURAL_ICED_TEA, STR_SHOP_ITEM_INDEFINITE_ICED_TEA, STR_SHOP_ITEM_DISPLAY_ICED_TEA }, SHOP_ITEM_FLAG_IS_DRINK },
/* ShopItem::FunnelCake */ { 5, 13, 11, 14, MONEY(1, 20), SPR_SHOP_ITEM_FUNNEL_CAKE, { STR_SHOP_ITEM_PRICE_LABEL_FUNNEL_CAKE, STR_SHOP_ITEM_SINGULAR_FUNNEL_CAKE, STR_SHOP_ITEM_PLURAL_FUNNEL_CAKE, STR_SHOP_ITEM_INDEFINITE_FUNNEL_CAKE, STR_SHOP_ITEM_DISPLAY_FUNNEL_CAKE }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::Sunglasses */ { 8, 15, 20, 12, MONEY(1, 50), SPR_SHOP_ITEM_SUNGLASSES, { STR_SHOP_ITEM_PRICE_LABEL_SUNGLASSES, STR_SHOP_ITEM_SINGULAR_SUNGLASSES, STR_SHOP_ITEM_PLURAL_SUNGLASSES, STR_SHOP_ITEM_INDEFINITE_SUNGLASSES, STR_SHOP_ITEM_DISPLAY_SUNGLASSES }, SHOP_ITEM_FLAG_IS_SOUVENIR },
/* ShopItem::BeefNoodles */ { 7, 17, 17, 20, MONEY(1, 50), SPR_SHOP_ITEM_BEEF_NOODLES, { STR_SHOP_ITEM_PRICE_LABEL_BEEF_NOODLES, STR_SHOP_ITEM_SINGULAR_BEEF_NOODLES, STR_SHOP_ITEM_PLURAL_BEEF_NOODLES, STR_SHOP_ITEM_INDEFINITE_BEEF_NOODLES, STR_SHOP_ITEM_DISPLAY_BEEF_NOODLES }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::FriedRiceNoodles */ { 6, 17, 17, 20, MONEY(1, 50), SPR_SHOP_ITEM_FRIED_RICE_NOODLES, { STR_SHOP_ITEM_PRICE_LABEL_FRIED_RICE_NOODLES, STR_SHOP_ITEM_SINGULAR_FRIED_RICE_NOODLES, STR_SHOP_ITEM_PLURAL_FRIED_RICE_NOODLES, STR_SHOP_ITEM_INDEFINITE_FRIED_RICE_NOODLES, STR_SHOP_ITEM_DISPLAY_FRIED_RICE_NOODLES }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::WontonSoup */ { 4, 13, 13, 15, MONEY(1, 50), SPR_SHOP_ITEM_WONTON_SOUP, { STR_SHOP_ITEM_PRICE_LABEL_WONTON_SOUP, STR_SHOP_ITEM_SINGULAR_WONTON_SOUP, STR_SHOP_ITEM_PLURAL_WONTON_SOUP, STR_SHOP_ITEM_INDEFINITE_WONTON_SOUP, STR_SHOP_ITEM_DISPLAY_WONTON_SOUP }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::MeatballSoup */ { 5, 14, 14, 16, MONEY(1, 50), SPR_SHOP_ITEM_MEATBALL_SOUP, { STR_SHOP_ITEM_PRICE_LABEL_MEATBALL_SOUP, STR_SHOP_ITEM_SINGULAR_MEATBALL_SOUP, STR_SHOP_ITEM_PLURAL_MEATBALL_SOUP, STR_SHOP_ITEM_INDEFINITE_MEATBALL_SOUP, STR_SHOP_ITEM_DISPLAY_MEATBALL_SOUP }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::FruitJuice */ { 4, 11, 19, 11, MONEY(1, 20), SPR_SHOP_ITEM_FRUIT_JUICE, { STR_SHOP_ITEM_PRICE_LABEL_FRUIT_JUICE, STR_SHOP_ITEM_SINGULAR_FRUIT_JUICE, STR_SHOP_ITEM_PLURAL_FRUIT_JUICE, STR_SHOP_ITEM_INDEFINITE_FRUIT_JUICE, STR_SHOP_ITEM_DISPLAY_FRUIT_JUICE }, SHOP_ITEM_FLAG_IS_DRINK },
/* ShopItem::SoybeanMilk */ { 4, 10, 14, 10, MONEY(1, 20), SPR_SHOP_ITEM_SOYBEAN_MILK, { STR_SHOP_ITEM_PRICE_LABEL_SOYBEAN_MILK, STR_SHOP_ITEM_SINGULAR_SOYBEAN_MILK, STR_SHOP_ITEM_PLURAL_SOYBEAN_MILK, STR_SHOP_ITEM_INDEFINITE_SOYBEAN_MILK, STR_SHOP_ITEM_DISPLAY_SOYBEAN_MILK }, SHOP_ITEM_FLAG_IS_DRINK },
/* ShopItem::SuJeongGwa */ { 3, 11, 14, 11, MONEY(1, 20), SPR_SHOP_ITEM_SUJEONGGWA, { STR_SHOP_ITEM_PRICE_LABEL_SUJONGKWA, STR_SHOP_ITEM_SINGULAR_SUJONGKWA, STR_SHOP_ITEM_PLURAL_SUJONGKWA, STR_SHOP_ITEM_INDEFINITE_SUJONGKWA, STR_SHOP_ITEM_DISPLAY_SUJONGKWA }, SHOP_ITEM_FLAG_IS_DRINK },
/* ShopItem::SubSandwich */ { 5, 19, 19, 17, MONEY(1, 50), SPR_SHOP_ITEM_SUB_SANDWICH, { STR_SHOP_ITEM_PRICE_LABEL_SUB_SANDWICH, STR_SHOP_ITEM_SINGULAR_SUB_SANDWICH, STR_SHOP_ITEM_PLURAL_SUB_SANDWICH, STR_SHOP_ITEM_INDEFINITE_SUB_SANDWICH, STR_SHOP_ITEM_DISPLAY_SUB_SANDWICH }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::Cookie */ { 4, 8, 8, 8, MONEY(0, 70), SPR_SHOP_ITEM_COOKIE, { STR_SHOP_ITEM_PRICE_LABEL_COOKIE, STR_SHOP_ITEM_SINGULAR_COOKIE, STR_SHOP_ITEM_PLURAL_COOKIE, STR_SHOP_ITEM_INDEFINITE_COOKIE, STR_SHOP_ITEM_DISPLAY_COOKIE }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::EmptyBowlRed */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_BOWL_RED, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOWL_RED, STR_SHOP_ITEM_SINGULAR_EMPTY_BOWL_RED, STR_SHOP_ITEM_PLURAL_EMPTY_BOWL_RED, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOWL_RED, STR_SHOP_ITEM_DISPLAY_EMPTY_BOWL_RED }, 0 },
/* ShopItem::EmptyDrinkCarton */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_DRINK_CARTON, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_SINGULAR_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_PLURAL_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_INDEFINITE_EMPTY_DRINK_CARTON, STR_SHOP_ITEM_DISPLAY_EMPTY_DRINK_CARTON }, 0 },
/* ShopItem::EmptyJuiceCup */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_JUICE_CUP, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_JUICE_CUP, STR_SHOP_ITEM_SINGULAR_EMPTY_JUICE_CUP, STR_SHOP_ITEM_PLURAL_EMPTY_JUICE_CUP, STR_SHOP_ITEM_INDEFINITE_EMPTY_JUICE_CUP, STR_SHOP_ITEM_DISPLAY_EMPTY_JUICE_CUP }, 0 },
/* ShopItem::RoastSausage */ { 5, 16, 16, 20, MONEY(1, 50), SPR_SHOP_ITEM_ROAST_SAUSAGE, { STR_SHOP_ITEM_PRICE_LABEL_ROAST_SAUSAGE, STR_SHOP_ITEM_SINGULAR_ROAST_SAUSAGE, STR_SHOP_ITEM_PLURAL_ROAST_SAUSAGE, STR_SHOP_ITEM_INDEFINITE_ROAST_SAUSAGE, STR_SHOP_ITEM_DISPLAY_ROAST_SAUSAGE }, SHOP_ITEM_FLAG_IS_FOOD },
/* ShopItem::EmptyBowlBlue */ { 0, 0, 0, 0, MONEY(0, 00), SPR_SHOP_ITEM_EMPTY_BOWL_BLUE, { STR_SHOP_ITEM_PRICE_LABEL_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_SINGULAR_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_PLURAL_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_INDEFINITE_EMPTY_BOWL_BLUE, STR_SHOP_ITEM_DISPLAY_EMPTY_BOWL_BLUE }, 0 },
};
// clang-format on
money32 shop_item_get_common_price(Ride* forRide, const int32_t shopItem)
money32 shop_item_get_common_price(Ride* forRide, const ShopItem shopItem)
{
for (const auto& ride : GetRideManager())
{
@ -95,7 +110,7 @@ money32 shop_item_get_common_price(Ride* forRide, const int32_t shopItem)
{
return ride.price[1];
}
if (ShopItems[shopItem].IsPhoto() && (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO))
if (GetShopItemDescriptor(shopItem).IsPhoto() && (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO))
{
return ride.price[1];
}
@ -105,9 +120,9 @@ money32 shop_item_get_common_price(Ride* forRide, const int32_t shopItem)
return MONEY32_UNDEFINED;
}
bool shop_item_has_common_price(const int32_t shopItem)
bool shop_item_has_common_price(const ShopItem shopItem)
{
return (gSamePriceThroughoutPark & (1ULL << shopItem)) != 0;
return (gSamePriceThroughoutPark & EnumToFlag(shopItem)) != 0;
}
bool ShopItemDescriptor::HasFlag(const uint16_t flag) const
@ -139,3 +154,8 @@ bool ShopItemDescriptor::IsPhoto() const
{
return HasFlag(SHOP_ITEM_FLAG_IS_PHOTO);
}
ShopItemDescriptor GetShopItemDescriptor(ShopItem item)
{
return ShopItems[EnumValue(item)];
}

View File

@ -10,68 +10,75 @@
#pragma once
#include "../common.h"
using ShopItemIndex = uint8_t;
#include "../util/Util.h"
struct Ride;
enum
enum class ShopItem : uint8_t
{
SHOP_ITEM_BALLOON,
SHOP_ITEM_TOY,
SHOP_ITEM_MAP,
SHOP_ITEM_PHOTO,
SHOP_ITEM_UMBRELLA,
SHOP_ITEM_DRINK,
SHOP_ITEM_BURGER,
SHOP_ITEM_CHIPS,
SHOP_ITEM_ICE_CREAM,
SHOP_ITEM_CANDYFLOSS,
SHOP_ITEM_EMPTY_CAN,
SHOP_ITEM_RUBBISH,
SHOP_ITEM_EMPTY_BURGER_BOX,
SHOP_ITEM_PIZZA,
SHOP_ITEM_VOUCHER,
SHOP_ITEM_POPCORN,
SHOP_ITEM_HOT_DOG,
SHOP_ITEM_TENTACLE,
SHOP_ITEM_HAT,
SHOP_ITEM_TOFFEE_APPLE,
SHOP_ITEM_TSHIRT,
SHOP_ITEM_DOUGHNUT,
SHOP_ITEM_COFFEE,
SHOP_ITEM_EMPTY_CUP,
SHOP_ITEM_CHICKEN,
SHOP_ITEM_LEMONADE,
SHOP_ITEM_EMPTY_BOX,
SHOP_ITEM_EMPTY_BOTTLE = 27,
SHOP_ITEM_ADMISSION = 31,
SHOP_ITEM_PHOTO2 = 32,
SHOP_ITEM_PHOTO3,
SHOP_ITEM_PHOTO4,
SHOP_ITEM_PRETZEL,
SHOP_ITEM_CHOCOLATE,
SHOP_ITEM_ICED_TEA,
SHOP_ITEM_FUNNEL_CAKE,
SHOP_ITEM_SUNGLASSES,
SHOP_ITEM_BEEF_NOODLES,
SHOP_ITEM_FRIED_RICE_NOODLES,
SHOP_ITEM_WONTON_SOUP,
SHOP_ITEM_MEATBALL_SOUP,
SHOP_ITEM_FRUIT_JUICE,
SHOP_ITEM_SOYBEAN_MILK,
SHOP_ITEM_SUJEONGGWA,
SHOP_ITEM_SUB_SANDWICH,
SHOP_ITEM_COOKIE,
SHOP_ITEM_EMPTY_BOWL_RED,
SHOP_ITEM_EMPTY_DRINK_CARTON,
SHOP_ITEM_EMPTY_JUICE_CUP,
SHOP_ITEM_ROAST_SAUSAGE,
SHOP_ITEM_EMPTY_BOWL_BLUE,
SHOP_ITEM_COUNT = 56,
SHOP_ITEM_NONE = 255
Balloon,
Toy,
Map,
Photo,
Umbrella,
Drink,
Burger,
Chips,
IceCream,
Candyfloss,
EmptyCan,
Rubbish,
EmptyBurgerBox,
Pizza,
Voucher,
Popcorn,
HotDog,
Tentacle,
Hat,
ToffeeApple,
TShirt,
Doughnut,
Coffee,
EmptyCup,
Chicken,
Lemonade,
EmptyBox,
EmptyBottle = 27,
Admission = 31,
Photo2 = 32,
Photo3,
Photo4,
Pretzel,
Chocolate,
IcedTea,
FunnelCake,
Sunglasses,
BeefNoodles,
FriedRiceNoodles,
WontonSoup,
MeatballSoup,
FruitJuice,
SoybeanMilk,
SuJeongGwa,
SubSandwich,
Cookie,
EmptyBowlRed,
EmptyDrinkCarton,
EmptyJuiceCup,
RoastSausage,
EmptyBowlBlue,
Count = 56,
None = 255
};
ShopItem& operator++(ShopItem& d, int);
ShopItem operator+(const ShopItem& lhs, const ShopItem& rhs);
ShopItem operator-(const ShopItem& lhs, const ShopItem& rhs);
using ShopItemIndex = ShopItem;
struct ShopItemStrings
{
rct_string_id PriceLabel; // Balloon price:
@ -108,8 +115,10 @@ enum
SHOP_ITEM_FLAG_IS_PHOTO = (1 << 3),
};
extern const ShopItemDescriptor ShopItems[SHOP_ITEM_COUNT];
extern const ShopItemDescriptor ShopItems[EnumValue(ShopItem::Count)];
extern uint64_t gSamePriceThroughoutPark;
money32 shop_item_get_common_price(Ride* forRide, const int32_t shopItem);
bool shop_item_has_common_price(const int32_t shopItem);
money32 shop_item_get_common_price(Ride* forRide, const ShopItem shopItem);
bool shop_item_has_common_price(const ShopItem shopItem);
ShopItemDescriptor GetShopItemDescriptor(ShopItem item);

View File

@ -41,7 +41,7 @@ constexpr const RideTypeDescriptor AirPoweredVerticalCoasterRTD =
SET_FIELD(BuildCosts, { 200, 0, 45, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK_STYLE_2),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 70),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_WHITE, COLOUR_BRIGHT_RED, COLOUR_DARK_BROWN },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor BobsleighCoasterRTD =
SET_FIELD(BuildCosts, { 80, 5, 45, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 75),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_WHITE, COLOUR_BRIGHT_RED, COLOUR_WHITE },

View File

@ -46,7 +46,7 @@ constexpr const RideTypeDescriptor ClassicMiniRollerCoasterRTD =
SET_FIELD(BuildCosts, { 45, 4, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 60),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_YELLOW, COLOUR_YELLOW, COLOUR_SATURATED_BROWN },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor CompactInvertedCoasterRTD =
SET_FIELD(BuildCosts, { 100, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_TECHNO),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 80),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_YELLOW, COLOUR_BRIGHT_YELLOW, COLOUR_BRIGHT_RED },

View File

@ -48,7 +48,7 @@ constexpr const RideTypeDescriptor CorkscrewRollerCoasterRTD =
SET_FIELD(BuildCosts, { 105, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 100),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BORDEAUX_RED, COLOUR_BORDEAUX_RED, COLOUR_BLACK },

View File

@ -45,7 +45,7 @@ constexpr const RideTypeDescriptor FlyingRollerCoasterRTD =
SET_FIELD(BuildCosts, { 125, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 100),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_OLIVE_GREEN, COLOUR_OLIVE_GREEN, COLOUR_TEAL },
@ -85,7 +85,7 @@ constexpr const RideTypeDescriptor FlyingRollerCoasterAltRTD =
SET_FIELD(BuildCosts, { 125, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 100),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_OLIVE_GREEN, COLOUR_OLIVE_GREEN, COLOUR_TEAL },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor GigaCoasterRTD =
SET_FIELD(BuildCosts, { 120, 5, 55, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK_STYLE_3),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 120),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED, COLOUR_WHITE },

View File

@ -42,7 +42,7 @@ constexpr const RideTypeDescriptor HeartlineTwisterCoasterRTD =
SET_FIELD(BuildCosts, { 135, 7, 30, }),
SET_FIELD(DefaultPrices, { 15, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_TECHNO),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 35),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_WHITE, COLOUR_LIGHT_BLUE, COLOUR_WHITE },

View File

@ -41,7 +41,7 @@ constexpr const RideTypeDescriptor HybridCoasterRTD =
SET_FIELD(BuildCosts, { 110, 7, 55}),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK_STYLE_2),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 120),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_LIGHT_ORANGE, COLOUR_LIGHT_ORANGE, COLOUR_DARK_BROWN},

View File

@ -47,7 +47,7 @@ constexpr const RideTypeDescriptor HyperTwisterRTD =
SET_FIELD(BuildCosts, { 120, 5, 55, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 120),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_YELLOW, COLOUR_YELLOW, COLOUR_BORDEAUX_RED },

View File

@ -46,7 +46,7 @@ constexpr const RideTypeDescriptor HypercoasterRTD =
SET_FIELD(BuildCosts, { 105, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 100),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BORDEAUX_RED, COLOUR_BORDEAUX_RED, COLOUR_BLACK },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor InvertedHairpinCoasterRTD =
SET_FIELD(BuildCosts, { 67, 4, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK_STYLE_2),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 55),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_YELLOW, COLOUR_BRIGHT_YELLOW, COLOUR_BRIGHT_RED },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor InvertedImpulseCoasterRTD =
SET_FIELD(BuildCosts, { 125, 5, 25, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 75),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_YELLOW, COLOUR_BRIGHT_YELLOW, COLOUR_BRIGHT_RED },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor InvertedRollerCoasterRTD =
SET_FIELD(BuildCosts, { 110, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_TECHNO),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 100),
SET_FIELD(ColourPresets,TRACK_COLOUR_PRESETS(
{ COLOUR_BORDEAUX_RED, COLOUR_BORDEAUX_RED, COLOUR_BLACK },

View File

@ -47,7 +47,7 @@ constexpr const RideTypeDescriptor JuniorRollerCoasterRTD =
SET_FIELD(BuildCosts, { 45, 4, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 60),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_YELLOW, COLOUR_YELLOW, COLOUR_SATURATED_BROWN },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor LIMLaunchedRollerCoasterRTD =
SET_FIELD(BuildCosts, { 95, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 55),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_GREEN, COLOUR_BRIGHT_GREEN, COLOUR_WHITE },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor LayDownRollerCoasterRTD =
SET_FIELD(BuildCosts, { 107, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 100),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED, COLOUR_YELLOW },
@ -81,7 +81,7 @@ constexpr const RideTypeDescriptor LayDownRollerCoasterAltRTD =
SET_FIELD(BuildCosts, { 107, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 100),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED, COLOUR_YELLOW },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor LoopingRollerCoasterRTD =
SET_FIELD(BuildCosts, { 90, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 95),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_LIGHT_BROWN, COLOUR_LIGHT_BROWN, COLOUR_BLACK },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor MineRideRTD =
SET_FIELD(BuildCosts, { 85, 4, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_WILD_WEST),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 70),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_BROWN, COLOUR_DARK_BROWN, COLOUR_BLACK },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor MineTrainCoasterRTD =
SET_FIELD(BuildCosts, { 82, 6, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_WILD_WEST),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 85),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_BROWN, COLOUR_GREY, COLOUR_DARK_BROWN },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor MiniRollerCoasterRTD =
SET_FIELD(BuildCosts, { 65, 4, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 60),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_GREY, COLOUR_GREY, COLOUR_DARK_BROWN },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor MiniSuspendedCoasterRTD =
SET_FIELD(BuildCosts, { 60, 5, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_WILD_WEST),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 50),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BLACK, COLOUR_BLACK, COLOUR_SATURATED_BROWN },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor MultiDimensionRollerCoasterRTD =
SET_FIELD(BuildCosts, { 180, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK_STYLE_3),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 100),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_PINK, COLOUR_YELLOW, COLOUR_YELLOW },
@ -82,7 +82,7 @@ constexpr const RideTypeDescriptor MultiDimensionRollerCoasterAltRTD =
SET_FIELD(BuildCosts, { 180, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK_STYLE_3),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 100),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_PINK, COLOUR_YELLOW, COLOUR_YELLOW },

View File

@ -41,7 +41,7 @@ constexpr const RideTypeDescriptor ReverseFreefallCoasterRTD =
SET_FIELD(BuildCosts, { 200, 0, 45, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 70),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_GREEN, COLOUR_YELLOW, COLOUR_DARK_GREEN },

View File

@ -42,7 +42,7 @@ constexpr const RideTypeDescriptor ReverserRollerCoasterRTD =
SET_FIELD(BuildCosts, { 55, 6, 37, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_TECHNO),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO3),
SET_FIELD(PhotoItem, ShopItem::Photo3),
SET_FIELD(BonusValue, 65),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_BROWN, COLOUR_LIGHT_BROWN, COLOUR_DARK_BROWN },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor SideFrictionRollerCoasterRTD =
SET_FIELD(BuildCosts, { 55, 6, 37, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO3),
SET_FIELD(PhotoItem, ShopItem::Photo3),
SET_FIELD(BonusValue, 65),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_WHITE, COLOUR_DARK_BROWN, COLOUR_WHITE },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor SpinningWildMouseRTD =
SET_FIELD(BuildCosts, { 55, 4, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 55),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_YELLOW },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor SpiralRollerCoasterRTD =
SET_FIELD(BuildCosts, { 70, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK_STYLE_3),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 85),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BORDEAUX_RED, COLOUR_BORDEAUX_RED, COLOUR_DARK_GREEN },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor StandUpRollerCoasterRTD =
SET_FIELD(BuildCosts, { 100, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_TECHNO),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 90),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED, COLOUR_BLACK },

View File

@ -46,7 +46,7 @@ constexpr const RideTypeDescriptor SteelWildMouseRTD =
SET_FIELD(BuildCosts, { 55, 4, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 55),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_YELLOW },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor SteeplechaseRTD =
SET_FIELD(BuildCosts, { 57, 4, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 60),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_LIGHT_BLUE, COLOUR_LIGHT_BLUE, COLOUR_BLACK },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor SuspendedSwingingCoasterRTD =
SET_FIELD(BuildCosts, { 95, 5, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO2),
SET_FIELD(PhotoItem, ShopItem::Photo2),
SET_FIELD(BonusValue, 90),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_OLIVE_GREEN, COLOUR_OLIVE_GREEN, COLOUR_LIGHT_BROWN },

View File

@ -51,7 +51,7 @@ constexpr const RideTypeDescriptor TwisterRollerCoasterRTD =
SET_FIELD(BuildCosts, { 120, 5, 55, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 120),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_YELLOW, COLOUR_YELLOW, COLOUR_BORDEAUX_RED },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor VerticalDropCoasterRTD =
SET_FIELD(BuildCosts, { 120, 5, 42, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 95),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BLACK, COLOUR_GREY, COLOUR_BLACK },

View File

@ -42,7 +42,7 @@ constexpr const RideTypeDescriptor VirginiaReelRTD =
SET_FIELD(BuildCosts, { 53, 6, 25, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO3),
SET_FIELD(PhotoItem, ShopItem::Photo3),
SET_FIELD(BonusValue, 50),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_SATURATED_BROWN, COLOUR_GREY, COLOUR_SATURATED_BROWN },

View File

@ -45,7 +45,7 @@ constexpr const RideTypeDescriptor WaterCoasterRTD =
SET_FIELD(BuildCosts, { 55, 4, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_WATER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO4),
SET_FIELD(PhotoItem, ShopItem::Photo4),
SET_FIELD(BonusValue, 60),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_GREEN, COLOUR_DARK_GREEN, COLOUR_BLACK },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor WoodenRollerCoasterRTD =
SET_FIELD(BuildCosts, { 75, 7, 50, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_WILD_WEST),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO3),
SET_FIELD(PhotoItem, ShopItem::Photo3),
SET_FIELD(BonusValue, 105),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BORDEAUX_RED, COLOUR_BLACK, COLOUR_WHITE },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor WoodenWildMouseRTD =
SET_FIELD(BuildCosts, { 50, 6, 40, }),
SET_FIELD(DefaultPrices, { 20, 20 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_WILD_WEST),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO3),
SET_FIELD(PhotoItem, ShopItem::Photo3),
SET_FIELD(BonusValue, 55),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_RED, COLOUR_BRIGHT_RED, COLOUR_WHITE },

View File

@ -47,7 +47,7 @@ constexpr const RideTypeDescriptor CarRideRTD =
SET_FIELD(BuildCosts, { 25, 5, 30, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 50),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_SATURATED_BROWN, COLOUR_SATURATED_BROWN, COLOUR_GREY },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor CircusRTD =
SET_FIELD(BuildCosts, { 125, 2, 1, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_CIRCUS_SHOW),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 39),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor CrookedHouseRTD =
SET_FIELD(BuildCosts, { 65, 2, 1, }),
SET_FIELD(DefaultPrices, { 10, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 22),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_RED, COLOUR_BLACK, COLOUR_GREY },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor DodgemsRTD =
SET_FIELD(BuildCosts, { 55, 2, 1, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_DODGEMS_BEAT),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 35),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_RED, COLOUR_SATURATED_BROWN, COLOUR_SATURATED_BROWN },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor FerrisWheelRTD =
SET_FIELD(BuildCosts, { 225, 2, 1, }),
SET_FIELD(DefaultPrices, { 10, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 45),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BLACK, COLOUR_BLACK, COLOUR_BLACK },

View File

@ -45,7 +45,7 @@ constexpr const RideTypeDescriptor FlyingSaucersRTD =
SET_FIELD(BuildCosts, { 70, 4, 1, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 35),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_PURPLE, COLOUR_GREY, COLOUR_BLACK },

View File

@ -46,7 +46,7 @@ constexpr const RideTypeDescriptor GhostTrainRTD =
SET_FIELD(BuildCosts, { 26, 5, 30, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_HORROR),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 50),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_GREEN, COLOUR_BORDEAUX_RED, COLOUR_BLACK },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor HauntedHouseRTD =
SET_FIELD(BuildCosts, { 85, 2, 1, }),
SET_FIELD(DefaultPrices, { 10, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_HORROR),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 22),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -42,7 +42,7 @@ constexpr const RideTypeDescriptor MazeRTD =
SET_FIELD(BuildCosts, { 55, 2, 8, }),
SET_FIELD(DefaultPrices, { 10, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 40),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_GREY, COLOUR_GREY, COLOUR_GREY },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor MerryGoRoundRTD =
SET_FIELD(BuildCosts, { 115, 2, 1, }),
SET_FIELD(DefaultPrices, { 10, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_FAIRGROUND_ORGAN),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 45),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor MiniGolfRTD =
SET_FIELD(BuildCosts, { 50, 7, 20, }),
SET_FIELD(DefaultPrices, { 10, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 23),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_SATURATED_GREEN, COLOUR_DARK_BROWN, COLOUR_BLACK },

View File

@ -46,7 +46,7 @@ constexpr const RideTypeDescriptor MiniHelicoptersRTD =
SET_FIELD(BuildCosts, { 25, 5, 30, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 45),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_PURPLE, COLOUR_YELLOW, COLOUR_DARK_PURPLE },

View File

@ -45,7 +45,7 @@ constexpr const RideTypeDescriptor MonorailCyclesRTD =
SET_FIELD(BuildCosts, { 20, 5, 30, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 45),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_BROWN, COLOUR_GREY, COLOUR_DARK_BROWN },

View File

@ -46,7 +46,7 @@ constexpr const RideTypeDescriptor MonsterTrucksRTD =
SET_FIELD(BuildCosts, { 25, 5, 30, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 50),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_SATURATED_BROWN, COLOUR_SATURATED_BROWN, COLOUR_GREY },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor ObservationTowerRTD =
SET_FIELD(BuildCosts, { 37, 0, 4, }),
SET_FIELD(DefaultPrices, { 10, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 45),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_RED, COLOUR_BLACK, COLOUR_GREY },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor SpaceRingsRTD =
SET_FIELD(BuildCosts, { 72, 2, 1, }),
SET_FIELD(DefaultPrices, { 5, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 30),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor SpiralSlideRTD =
SET_FIELD(BuildCosts, { 165, 2, 1, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 40),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_RED, COLOUR_YELLOW, COLOUR_DARK_BROWN },

View File

@ -41,7 +41,7 @@ constexpr const RideTypeDescriptor CashMachineRTD =
SET_FIELD(BuildCosts, { 400, 0, 1, }),
SET_FIELD(DefaultPrices, { 0, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 5),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -42,7 +42,7 @@ constexpr const RideTypeDescriptor DrinkStallRTD =
SET_FIELD(BuildCosts, { 500, 0, 1, }),
SET_FIELD(DefaultPrices, { 0, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 15),
SET_FIELD(ColourPresets, DEFAULT_STALL_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -42,7 +42,7 @@ constexpr const RideTypeDescriptor FirstAidRTD =
SET_FIELD(BuildCosts, { 500, 0, 1, }),
SET_FIELD(DefaultPrices, { 0, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 5),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -42,7 +42,7 @@ constexpr const RideTypeDescriptor FoodStallRTD =
SET_FIELD(BuildCosts, { 600, 0, 1, }),
SET_FIELD(DefaultPrices, { 0, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 15),
SET_FIELD(ColourPresets, DEFAULT_STALL_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -42,7 +42,7 @@ constexpr const RideTypeDescriptor InformationKioskRTD =
SET_FIELD(BuildCosts, { 500, 0, 1, }),
SET_FIELD(DefaultPrices, { 0, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 15),
SET_FIELD(ColourPresets, DEFAULT_STALL_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -42,7 +42,7 @@ constexpr const RideTypeDescriptor ShopRTD =
SET_FIELD(BuildCosts, { 400, 0, 1, }),
SET_FIELD(DefaultPrices, { 0, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 15),
SET_FIELD(ColourPresets, DEFAULT_STALL_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -42,7 +42,7 @@ constexpr const RideTypeDescriptor ToiletsRTD =
SET_FIELD(BuildCosts, { 450, 0, 1, }),
SET_FIELD(DefaultPrices, { 0, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 5),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor CinemaRTD =
SET_FIELD(BuildCosts, { 140, 2, 1, }),
SET_FIELD(DefaultPrices, { 20, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 45),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor EnterpriseRTD =
SET_FIELD(BuildCosts, { 100, 2, 1, }),
SET_FIELD(DefaultPrices, { 20, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK_STYLE_2),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 45),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor GoKartsRTD =
SET_FIELD(BuildCosts, { 62, 4, 20, }),
SET_FIELD(DefaultPrices, { 20, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_TECHNO),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 55),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BORDEAUX_RED, COLOUR_BORDEAUX_RED, COLOUR_DARK_BROWN },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor LaunchedFreefallRTD =
SET_FIELD(BuildCosts, { 50, 0, 4, }),
SET_FIELD(DefaultPrices, { 20, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_TECHNO),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 65),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_WHITE, COLOUR_BRIGHT_RED, COLOUR_LIGHT_PURPLE },

View File

@ -45,7 +45,7 @@ constexpr const RideTypeDescriptor MagicCarpetRTD =
SET_FIELD(BuildCosts, { 198, 2, 1, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_EGYPTIAN),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 35),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_PURPLE, COLOUR_WHITE, COLOUR_BLACK },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor MotionSimulatorRTD =
SET_FIELD(BuildCosts, { 220, 2, 1, }),
SET_FIELD(DefaultPrices, { 20, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 45),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -45,7 +45,7 @@ constexpr const RideTypeDescriptor RotoDropRTD =
SET_FIELD(BuildCosts, { 55, 0, 4, }),
SET_FIELD(DefaultPrices, { 20, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_ROCK),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 45),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BORDEAUX_RED, COLOUR_YELLOW, COLOUR_GREY },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor SwingingInverterShipRTD =
SET_FIELD(BuildCosts, { 212, 2, 1, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_TECHNO),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 35),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BORDEAUX_RED, COLOUR_YELLOW, COLOUR_BLACK },

View File

@ -45,7 +45,7 @@ constexpr const RideTypeDescriptor SwingingShipRTD =
SET_FIELD(BuildCosts, { 155, 2, 1, }),
SET_FIELD(DefaultPrices, { 15, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_PIRATES),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 35),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_DARK_BROWN, COLOUR_DARK_BROWN, COLOUR_BLACK },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor TopSpinRTD =
SET_FIELD(BuildCosts, { 145, 2, 1, }),
SET_FIELD(DefaultPrices, { 20, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_TECHNO),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 55),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BRIGHT_RED, COLOUR_YELLOW, COLOUR_YELLOW },

View File

@ -43,7 +43,7 @@ constexpr const RideTypeDescriptor TwistRTD =
SET_FIELD(BuildCosts, { 90, 2, 1, }),
SET_FIELD(DefaultPrices, { 10, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_GENTLE),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 40),
SET_FIELD(ColourPresets, DEFAULT_FLAT_RIDE_COLOUR_PRESET),
SET_FIELD(ColourPreview, { 0, 0 }),

View File

@ -45,7 +45,7 @@ constexpr const RideTypeDescriptor ChairliftRTD =
SET_FIELD(BuildCosts, { 65, 1, 30, }),
SET_FIELD(DefaultPrices, { 10, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 55),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BORDEAUX_RED, COLOUR_BORDEAUX_RED, COLOUR_GREY },

View File

@ -44,7 +44,7 @@ constexpr const RideTypeDescriptor LiftRTD =
SET_FIELD(BuildCosts, { 39, 0, 4, }),
SET_FIELD(DefaultPrices, { 10, 0 }),
SET_FIELD(DefaultMusic, MUSIC_STYLE_SUMMER),
SET_FIELD(PhotoItem, SHOP_ITEM_PHOTO),
SET_FIELD(PhotoItem, ShopItem::Photo),
SET_FIELD(BonusValue, 45),
SET_FIELD(ColourPresets, TRACK_COLOUR_PRESETS(
{ COLOUR_BORDEAUX_RED, COLOUR_BORDEAUX_RED, COLOUR_GREY },

Some files were not shown because too many files have changed in this diff Show More