Merge pull request #11724 from Gymnasiast/refactor/shop-item

Refactor shop items
This commit is contained in:
Michael Steenbeek 2020-05-11 20:10:34 +02:00 committed by GitHub
commit 89011b105f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 219 additions and 304 deletions

View File

@ -172,8 +172,8 @@ static void window_new_campaign_get_shop_items()
auto rideEntry = ride.GetRideEntry(); auto rideEntry = ride.GetRideEntry();
if (rideEntry != nullptr) if (rideEntry != nullptr)
{ {
auto itemType = rideEntry->shop_item; auto itemType = rideEntry->shop_item[0];
if (itemType != SHOP_ITEM_NONE && shop_item_is_food_or_drink(itemType)) if (itemType != SHOP_ITEM_NONE && ShopItems[itemType].IsFoodOrDrink())
{ {
items |= 1ULL << itemType; items |= 1ULL << itemType;
} }

View File

@ -5019,7 +5019,7 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi)
// //
auto rideEntry = ride->GetRideEntry(); auto rideEntry = ride->GetRideEntry();
if (rideEntry == nullptr || rideEntry->shop_item == SHOP_ITEM_NONE) if (rideEntry == nullptr || rideEntry->shop_item[0] == SHOP_ITEM_NONE)
{ {
int32_t x = w->windowPos.x + widget->left; int32_t x = w->windowPos.x + widget->left;
int32_t y = w->windowPos.y + widget->top; int32_t y = w->windowPos.y + widget->top;
@ -5053,8 +5053,7 @@ static void window_ride_colour_paint(rct_window* w, rct_drawpixelinfo* dpi)
int32_t x = w->windowPos.x + (widget->left + widget->right) / 2 - 8; int32_t x = w->windowPos.x + (widget->left + widget->right) / 2 - 8;
int32_t y = w->windowPos.y + (widget->bottom + widget->top) / 2 - 6; int32_t y = w->windowPos.y + (widget->bottom + widget->top) / 2 - 6;
uint8_t shopItem = rideEntry->shop_item_secondary == SHOP_ITEM_NONE ? rideEntry->shop_item uint8_t shopItem = rideEntry->shop_item[1] == SHOP_ITEM_NONE ? rideEntry->shop_item[0] : rideEntry->shop_item[1];
: rideEntry->shop_item_secondary;
int32_t spriteIndex = ShopItems[shopItem].Image; int32_t spriteIndex = ShopItems[shopItem].Image;
spriteIndex |= SPRITE_ID_PALETTE_COLOUR_1(ride->track_colour[0].main); spriteIndex |= SPRITE_ID_PALETTE_COLOUR_1(ride->track_colour[0].main);
@ -6349,7 +6348,7 @@ static void update_same_price_throughout_flags(uint32_t shop_item)
{ {
uint64_t newFlags; uint64_t newFlags;
if (shop_item_is_photo(shop_item)) if (ShopItems[shop_item].IsPhoto())
{ {
newFlags = gSamePriceThroughoutPark; newFlags = gSamePriceThroughoutPark;
newFlags ^= (1ULL << SHOP_ITEM_PHOTO) | (1ULL << SHOP_ITEM_PHOTO2) | (1ULL << SHOP_ITEM_PHOTO3) newFlags ^= (1ULL << SHOP_ITEM_PHOTO) | (1ULL << SHOP_ITEM_PHOTO2) | (1ULL << SHOP_ITEM_PHOTO3)
@ -6386,7 +6385,7 @@ static void window_ride_income_toggle_primary_price(rct_window* w)
auto rideEntry = get_ride_entry(ride->subtype); auto rideEntry = get_ride_entry(ride->subtype);
if (rideEntry != nullptr) if (rideEntry != nullptr)
{ {
shop_item = rideEntry->shop_item; shop_item = rideEntry->shop_item[0];
if (shop_item == 0xFFFF) if (shop_item == 0xFFFF)
return; return;
} }
@ -6398,7 +6397,7 @@ static void window_ride_income_toggle_primary_price(rct_window* w)
update_same_price_throughout_flags(shop_item); update_same_price_throughout_flags(shop_item);
auto rideSetPriceAction = RideSetPriceAction(w->number, ride->price, true); auto rideSetPriceAction = RideSetPriceAction(w->number, ride->price[0], true);
GameActions::Execute(&rideSetPriceAction); GameActions::Execute(&rideSetPriceAction);
} }
@ -6416,13 +6415,13 @@ static void window_ride_income_toggle_secondary_price(rct_window* w)
if (rideEntry == nullptr) if (rideEntry == nullptr)
return; return;
auto shop_item = rideEntry->shop_item_secondary; auto shop_item = rideEntry->shop_item[1];
if (shop_item == SHOP_ITEM_NONE) if (shop_item == SHOP_ITEM_NONE)
shop_item = RideTypeDescriptors[ride->type].PhotoItem; shop_item = RideTypeDescriptors[ride->type].PhotoItem;
update_same_price_throughout_flags(shop_item); update_same_price_throughout_flags(shop_item);
auto rideSetPriceAction = RideSetPriceAction(w->number, ride->price_secondary, false); auto rideSetPriceAction = RideSetPriceAction(w->number, ride->price[1], false);
GameActions::Execute(&rideSetPriceAction); GameActions::Execute(&rideSetPriceAction);
} }
@ -6445,7 +6444,7 @@ static void window_ride_income_increase_primary_price(rct_window* w)
if (ride == nullptr) if (ride == nullptr)
return; return;
money16 price = ride->price; money16 price = ride->price[0];
if (price < MONEY(20, 00)) if (price < MONEY(20, 00))
price++; price++;
@ -6465,7 +6464,7 @@ static void window_ride_income_decrease_primary_price(rct_window* w)
if (ride == nullptr) if (ride == nullptr)
return; return;
money16 price = ride->price; money16 price = ride->price[0];
if (price > MONEY(0, 00)) if (price > MONEY(0, 00))
price--; price--;
@ -6478,7 +6477,7 @@ static money16 window_ride_income_get_secondary_price(rct_window* w)
if (ride == nullptr) if (ride == nullptr)
return 0; return 0;
money16 price = ride->price_secondary; money16 price = ride->price[1];
return price; return price;
} }
@ -6496,7 +6495,7 @@ static bool window_ride_income_can_modify_primary_price(rct_window* w)
auto rideEntry = ride->GetRideEntry(); auto rideEntry = ride->GetRideEntry();
return park_ride_prices_unlocked() || ride->type == RIDE_TYPE_TOILETS return park_ride_prices_unlocked() || ride->type == RIDE_TYPE_TOILETS
|| (rideEntry != nullptr && rideEntry->shop_item != SHOP_ITEM_NONE); || (rideEntry != nullptr && rideEntry->shop_item[0] != SHOP_ITEM_NONE);
} }
/** /**
@ -6558,7 +6557,7 @@ static void window_ride_income_mouseup(rct_window* w, rct_widgetindex widgetInde
auto ride = get_ride(w->number); auto ride = get_ride(w->number);
if (ride != nullptr) if (ride != nullptr)
{ {
money_to_string(static_cast<money32>(ride->price), _moneyInputText, MONEY_STRING_MAXLENGTH, true); money_to_string(static_cast<money32>(ride->price[0]), _moneyInputText, MONEY_STRING_MAXLENGTH, true);
window_text_input_raw_open( window_text_input_raw_open(
w, WIDX_PRIMARY_PRICE, STR_ENTER_NEW_VALUE, STR_ENTER_NEW_VALUE, _moneyInputText, MONEY_STRING_MAXLENGTH); w, WIDX_PRIMARY_PRICE, STR_ENTER_NEW_VALUE, STR_ENTER_NEW_VALUE, _moneyInputText, MONEY_STRING_MAXLENGTH);
} }
@ -6690,7 +6689,7 @@ static void window_ride_income_invalidate(rct_window* w)
window_ride_income_widgets[WIDX_PRIMARY_PRICE].tooltip = STR_NONE; 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 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 == SHOP_ITEM_NONE && ride->type != RIDE_TYPE_TOILETS) if (!park_ride_prices_unlocked() && rideEntry->shop_item[0] == SHOP_ITEM_NONE && ride->type != RIDE_TYPE_TOILETS)
{ {
w->disabled_widgets |= (1 << WIDX_PRIMARY_PRICE); w->disabled_widgets |= (1 << WIDX_PRIMARY_PRICE);
window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].tooltip = STR_RIDE_INCOME_ADMISSION_PAY_FOR_ENTRY_TIP; window_ride_income_widgets[WIDX_PRIMARY_PRICE_LABEL].tooltip = STR_RIDE_INCOME_ADMISSION_PAY_FOR_ENTRY_TIP;
@ -6708,7 +6707,7 @@ static void window_ride_income_invalidate(rct_window* w)
window_ride_income_widgets[WIDX_PRIMARY_PRICE].text = STR_FREE; window_ride_income_widgets[WIDX_PRIMARY_PRICE].text = STR_FREE;
uint8_t primaryItem = SHOP_ITEM_ADMISSION; uint8_t primaryItem = SHOP_ITEM_ADMISSION;
if (ride->type == RIDE_TYPE_TOILETS || ((primaryItem = rideEntry->shop_item) != SHOP_ITEM_NONE)) if (ride->type == RIDE_TYPE_TOILETS || ((primaryItem = rideEntry->shop_item[0]) != SHOP_ITEM_NONE))
{ {
window_ride_income_widgets[WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK].type = WWT_CHECKBOX; window_ride_income_widgets[WIDX_PRIMARY_PRICE_SAME_THROUGHOUT_PARK].type = WWT_CHECKBOX;
@ -6722,7 +6721,7 @@ static void window_ride_income_invalidate(rct_window* w)
auto secondaryItem = RideTypeDescriptors[ride->type].PhotoItem; auto secondaryItem = RideTypeDescriptors[ride->type].PhotoItem;
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO)) if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO))
{ {
if ((secondaryItem = rideEntry->shop_item_secondary) != SHOP_ITEM_NONE) if ((secondaryItem = rideEntry->shop_item[1]) != SHOP_ITEM_NONE)
{ {
window_ride_income_widgets[WIDX_SECONDARY_PRICE_LABEL].text = ShopItems[secondaryItem].Naming.PriceLabel; window_ride_income_widgets[WIDX_SECONDARY_PRICE_LABEL].text = ShopItems[secondaryItem].Naming.PriceLabel;
} }
@ -6753,8 +6752,8 @@ static void window_ride_income_invalidate(rct_window* w)
// Set secondary item price // Set secondary item price
window_ride_income_widgets[WIDX_SECONDARY_PRICE].text = STR_RIDE_SECONDARY_PRICE_VALUE; window_ride_income_widgets[WIDX_SECONDARY_PRICE].text = STR_RIDE_SECONDARY_PRICE_VALUE;
set_format_arg(10, money32, ride->price_secondary); set_format_arg(10, money32, ride->price[1]);
if (ride->price_secondary == 0) if (ride->price[1] == 0)
window_ride_income_widgets[WIDX_SECONDARY_PRICE].text = STR_FREE; window_ride_income_widgets[WIDX_SECONDARY_PRICE].text = STR_FREE;
} }
@ -6787,10 +6786,10 @@ static void window_ride_income_paint(rct_window* w, rct_drawpixelinfo* dpi)
y = w->windowPos.y + window_ride_income_widgets[WIDX_PAGE_BACKGROUND].top + 33; y = w->windowPos.y + window_ride_income_widgets[WIDX_PAGE_BACKGROUND].top + 33;
// Primary item profit / loss per item sold // Primary item profit / loss per item sold
primaryItem = rideEntry->shop_item; primaryItem = rideEntry->shop_item[0];
if (primaryItem != SHOP_ITEM_NONE) if (primaryItem != SHOP_ITEM_NONE)
{ {
profit = ride->price; profit = ride->price[0];
stringId = STR_PROFIT_PER_ITEM_SOLD; stringId = STR_PROFIT_PER_ITEM_SOLD;
profit -= ShopItems[primaryItem].Cost; profit -= ShopItems[primaryItem].Cost;
@ -6807,11 +6806,11 @@ static void window_ride_income_paint(rct_window* w, rct_drawpixelinfo* dpi)
// Secondary item profit / loss per item sold // Secondary item profit / loss per item sold
secondaryItem = RideTypeDescriptors[ride->type].PhotoItem; secondaryItem = RideTypeDescriptors[ride->type].PhotoItem;
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO)) if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO))
secondaryItem = rideEntry->shop_item_secondary; secondaryItem = rideEntry->shop_item[1];
if (secondaryItem != SHOP_ITEM_NONE) if (secondaryItem != SHOP_ITEM_NONE)
{ {
profit = ride->price_secondary; profit = ride->price[1];
stringId = STR_PROFIT_PER_ITEM_SOLD; stringId = STR_PROFIT_PER_ITEM_SOLD;
profit -= ShopItems[secondaryItem].Cost; profit -= ShopItems[secondaryItem].Cost;
@ -7045,7 +7044,7 @@ static void window_ride_customer_paint(rct_window* w, rct_drawpixelinfo* dpi)
} }
// Primary shop items sold // Primary shop items sold
shopItem = ride->GetRideEntry()->shop_item; shopItem = ride->GetRideEntry()->shop_item[0];
if (shopItem != SHOP_ITEM_NONE) if (shopItem != SHOP_ITEM_NONE)
{ {
set_format_arg(0, rct_string_id, ShopItems[shopItem].Naming.Plural); set_format_arg(0, rct_string_id, ShopItems[shopItem].Naming.Plural);
@ -7056,7 +7055,7 @@ static void window_ride_customer_paint(rct_window* w, rct_drawpixelinfo* dpi)
// Secondary shop items sold / on-ride photos sold // Secondary shop items sold / on-ride photos sold
shopItem = (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? RideTypeDescriptors[ride->type].PhotoItem shopItem = (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? RideTypeDescriptors[ride->type].PhotoItem
: ride->GetRideEntry()->shop_item_secondary; : ride->GetRideEntry()->shop_item[1];
if (shopItem != SHOP_ITEM_NONE) if (shopItem != SHOP_ITEM_NONE)
{ {
set_format_arg(0, rct_string_id, ShopItems[shopItem].Naming.Plural); set_format_arg(0, rct_string_id, ShopItems[shopItem].Naming.Plural);

View File

@ -201,32 +201,37 @@ public:
ride->num_customers_timeout = 0; ride->num_customers_timeout = 0;
ride->chairlift_bullwheel_rotation = 0; ride->chairlift_bullwheel_rotation = 0;
ride->price = 0; for (auto& price : ride->price)
ride->price_secondary = 0; {
price = 0;
}
if (!(gParkFlags & PARK_FLAGS_NO_MONEY)) if (!(gParkFlags & PARK_FLAGS_NO_MONEY))
{ {
ride->price = RideData4[ride->type].price; for (auto i = 0; i < NUM_SHOP_ITEMS_PER_RIDE; i++)
ride->price_secondary = RideData4[ride->type].price_secondary; {
ride->price[i] = RideData4[ride->type].price[i];
}
if (rideEntry->shop_item == SHOP_ITEM_NONE) if (rideEntry->shop_item[0] == SHOP_ITEM_NONE)
{ {
if (!park_ride_prices_unlocked()) if (!park_ride_prices_unlocked())
{ {
ride->price = 0; ride->price[0] = 0;
} }
} }
else else
{ {
ride->price = ShopItems[rideEntry->shop_item].DefaultPrice; ride->price[0] = ShopItems[rideEntry->shop_item[0]].DefaultPrice;
} }
if (rideEntry->shop_item_secondary != SHOP_ITEM_NONE) if (rideEntry->shop_item[1] != SHOP_ITEM_NONE)
{ {
ride->price_secondary = ShopItems[rideEntry->shop_item_secondary].DefaultPrice; ride->price[1] = ShopItems[rideEntry->shop_item[1]].DefaultPrice;
} }
if (gScenarioObjectiveType == OBJECTIVE_BUILD_THE_BEST) if (gScenarioObjectiveType == OBJECTIVE_BUILD_THE_BEST)
{ {
ride->price = 0; ride->price[0] = 0;
} }
if (ride->type == RIDE_TYPE_TOILETS) if (ride->type == RIDE_TYPE_TOILETS)
@ -236,31 +241,22 @@ public:
money32 price = ride_get_common_price(ride); money32 price = ride_get_common_price(ride);
if (price != MONEY32_UNDEFINED) if (price != MONEY32_UNDEFINED)
{ {
ride->price = static_cast<money16>(price); ride->price[0] = static_cast<money16>(price);
} }
} }
} }
if (rideEntry->shop_item != SHOP_ITEM_NONE) for (auto i = 0; i < NUM_SHOP_ITEMS_PER_RIDE; i++)
{ {
if (shop_item_has_common_price(rideEntry->shop_item)) if (rideEntry->shop_item[i] != SHOP_ITEM_NONE)
{ {
money32 price = shop_item_get_common_price(ride, rideEntry->shop_item); if (shop_item_has_common_price(rideEntry->shop_item[i]))
if (price != MONEY32_UNDEFINED)
{ {
ride->price = static_cast<money16>(price); money32 price = shop_item_get_common_price(ride, rideEntry->shop_item[i]);
} if (price != MONEY32_UNDEFINED)
} {
} ride->price[i] = static_cast<money16>(price);
}
if (rideEntry->shop_item_secondary != SHOP_ITEM_NONE)
{
if (shop_item_has_common_price(rideEntry->shop_item_secondary))
{
money32 price = shop_item_get_common_price(ride, rideEntry->shop_item_secondary);
if (price != MONEY32_UNDEFINED)
{
ride->price_secondary = static_cast<money16>(price);
} }
} }
} }
@ -271,7 +267,7 @@ public:
money32 price = shop_item_get_common_price(ride, SHOP_ITEM_PHOTO); money32 price = shop_item_get_common_price(ride, SHOP_ITEM_PHOTO);
if (price != MONEY32_UNDEFINED) if (price != MONEY32_UNDEFINED)
{ {
ride->price_secondary = static_cast<money16>(price); ride->price[1] = static_cast<money16>(price);
} }
} }
} }

View File

@ -112,10 +112,10 @@ public:
shopItem = SHOP_ITEM_ADMISSION; shopItem = SHOP_ITEM_ADMISSION;
if (ride->type != RIDE_TYPE_TOILETS) if (ride->type != RIDE_TYPE_TOILETS)
{ {
shopItem = rideEntry->shop_item; shopItem = rideEntry->shop_item[0];
if (shopItem == SHOP_ITEM_NONE) if (shopItem == SHOP_ITEM_NONE)
{ {
ride->price = _price; ride->price[0] = _price;
window_invalidate_by_class(WC_RIDE); window_invalidate_by_class(WC_RIDE);
return res; return res;
} }
@ -123,20 +123,20 @@ public:
// Check same price in park flags // Check same price in park flags
if (!shop_item_has_common_price(shopItem)) if (!shop_item_has_common_price(shopItem))
{ {
ride->price = _price; ride->price[0] = _price;
window_invalidate_by_class(WC_RIDE); window_invalidate_by_class(WC_RIDE);
return res; return res;
} }
} }
else else
{ {
shopItem = rideEntry->shop_item_secondary; shopItem = rideEntry->shop_item[1];
if (shopItem == SHOP_ITEM_NONE) if (shopItem == SHOP_ITEM_NONE)
{ {
shopItem = RideTypeDescriptors[ride->type].PhotoItem; shopItem = RideTypeDescriptors[ride->type].PhotoItem;
if ((ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) == 0) if ((ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) == 0)
{ {
ride->price_secondary = _price; ride->price[1] = _price;
window_invalidate_by_class(WC_RIDE); window_invalidate_by_class(WC_RIDE);
return res; return res;
} }
@ -144,7 +144,7 @@ public:
// Check same price in park flags // Check same price in park flags
if (!shop_item_has_common_price(shopItem)) if (!shop_item_has_common_price(shopItem))
{ {
ride->price_secondary = _price; ride->price[1] = _price;
window_invalidate_by_class(WC_RIDE); window_invalidate_by_class(WC_RIDE);
return res; return res;
} }
@ -165,29 +165,29 @@ private:
auto rideEntry = get_ride_entry(ride.subtype); auto rideEntry = get_ride_entry(ride.subtype);
if (ride.type == RIDE_TYPE_TOILETS && shopItem == SHOP_ITEM_ADMISSION) if (ride.type == RIDE_TYPE_TOILETS && shopItem == SHOP_ITEM_ADMISSION)
{ {
if (ride.price != _price) if (ride.price[0] != _price)
{ {
ride.price = _price; ride.price[0] = _price;
invalidate = true; invalidate = true;
} }
} }
else if (rideEntry != nullptr && rideEntry->shop_item == shopItem) else if (rideEntry != nullptr && rideEntry->shop_item[0] == shopItem)
{ {
if (ride.price != _price) if (ride.price[0] != _price)
{ {
ride.price = _price; ride.price[0] = _price;
invalidate = true; invalidate = true;
} }
} }
if (rideEntry != nullptr) if (rideEntry != nullptr)
{ {
// If the shop item is the same or an on-ride photo // If the shop item is the same or an on-ride photo
if (rideEntry->shop_item_secondary == shopItem if (rideEntry->shop_item[1] == shopItem
|| (rideEntry->shop_item_secondary == SHOP_ITEM_NONE && shop_item_is_photo(shopItem))) || (rideEntry->shop_item[1] == SHOP_ITEM_NONE && ShopItems[shopItem].IsPhoto()))
{ {
if (ride.price_secondary != _price) if (ride.price[1] != _price)
{ {
ride.price_secondary = _price; ride.price[1] = _price;
invalidate = true; invalidate = true;
} }
} }

View File

@ -320,9 +320,9 @@ static bool award_is_deserved_best_food(int32_t activeAwardTypes)
auto rideEntry = get_ride_entry(ride.subtype); auto rideEntry = get_ride_entry(ride.subtype);
if (rideEntry != nullptr) if (rideEntry != nullptr)
{ {
if (!(shopTypes & (1ULL << rideEntry->shop_item))) if (!(shopTypes & (1ULL << rideEntry->shop_item[0])))
{ {
shopTypes |= (1ULL << rideEntry->shop_item); shopTypes |= (1ULL << rideEntry->shop_item[0]);
uniqueShops++; uniqueShops++;
} }
} }
@ -366,9 +366,9 @@ static bool award_is_deserved_worst_food(int32_t activeAwardTypes)
auto rideEntry = ride.GetRideEntry(); auto rideEntry = ride.GetRideEntry();
if (rideEntry != nullptr) if (rideEntry != nullptr)
{ {
if (!(shopTypes & (1ULL << rideEntry->shop_item))) if (!(shopTypes & (1ULL << rideEntry->shop_item[0])))
{ {
shopTypes |= (1ULL << rideEntry->shop_item); shopTypes |= (1ULL << rideEntry->shop_item[0]);
uniqueShops++; uniqueShops++;
} }
} }

View File

@ -57,7 +57,7 @@ uint16_t marketing_get_campaign_guest_generation_probability(int32_t campaignTyp
case ADVERTISING_CAMPAIGN_RIDE_FREE: case ADVERTISING_CAMPAIGN_RIDE_FREE:
{ {
auto ride = get_ride(campaign->RideId); auto ride = get_ride(campaign->RideId);
if (ride == nullptr || ride->price < MONEY(0, 30)) if (ride == nullptr || ride->price[0] < MONEY(0, 30))
probability /= 8; probability /= 8;
break; break;
} }
@ -196,10 +196,12 @@ bool marketing_is_campaign_type_applicable(int32_t campaignType)
auto rideEntry = ride.GetRideEntry(); auto rideEntry = ride.GetRideEntry();
if (rideEntry != nullptr) if (rideEntry != nullptr)
{ {
if (shop_item_is_food_or_drink(rideEntry->shop_item) for (auto& item : rideEntry->shop_item)
|| shop_item_is_food_or_drink(rideEntry->shop_item_secondary))
{ {
return true; if (ShopItems[item].IsFoodOrDrink())
{
return true;
}
} }
} }
} }

View File

@ -62,8 +62,8 @@ void RideObject::ReadLegacy(IReadObjectContext* context, IStream* stream)
_legacyType.max_height = stream->ReadValue<uint8_t>(); _legacyType.max_height = stream->ReadValue<uint8_t>();
// Skipping a uint64_t for the enabled track pieces and two uint8_ts for the categories. // Skipping a uint64_t for the enabled track pieces and two uint8_ts for the categories.
stream->Seek(10, STREAM_SEEK_CURRENT); stream->Seek(10, STREAM_SEEK_CURRENT);
_legacyType.shop_item = stream->ReadValue<uint8_t>(); _legacyType.shop_item[0] = stream->ReadValue<uint8_t>();
_legacyType.shop_item_secondary = stream->ReadValue<uint8_t>(); _legacyType.shop_item[1] = stream->ReadValue<uint8_t>();
GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME); GetStringTable().Read(context, stream, OBJ_STRING_ID_NAME);
GetStringTable().Read(context, stream, OBJ_STRING_ID_DESCRIPTION); GetStringTable().Read(context, stream, OBJ_STRING_ID_DESCRIPTION);
@ -549,8 +549,10 @@ void RideObject::ReadJson(IReadObjectContext* context, const json_t* root)
_legacyType.max_height = ObjectJsonHelpers::GetInteger(properties, "maxHeight"); _legacyType.max_height = ObjectJsonHelpers::GetInteger(properties, "maxHeight");
// This needs to be set for both shops/facilities _and_ regular rides. // This needs to be set for both shops/facilities _and_ regular rides.
_legacyType.shop_item = SHOP_ITEM_NONE; for (auto& item : _legacyType.shop_item)
_legacyType.shop_item_secondary = SHOP_ITEM_NONE; {
item = SHOP_ITEM_NONE;
}
_presetColours = ReadJsonCarColours(json_object_get(properties, "carColours")); _presetColours = ReadJsonCarColours(json_object_get(properties, "carColours"));
@ -571,7 +573,8 @@ void RideObject::ReadJson(IReadObjectContext* context, const json_t* root)
// Shop item // Shop item
auto rideSells = ObjectJsonHelpers::GetJsonStringArray(json_object_get(json_object_get(root, "properties"), "sells")); auto rideSells = ObjectJsonHelpers::GetJsonStringArray(json_object_get(json_object_get(root, "properties"), "sells"));
for (size_t i = 0; i < rideSells.size(); i++) auto numShopItems = std::min(static_cast<size_t>(NUM_SHOP_ITEMS_PER_RIDE), rideSells.size());
for (size_t i = 0; i < numShopItems; i++)
{ {
auto shopItem = ParseShopItem(rideSells[i]); auto shopItem = ParseShopItem(rideSells[i]);
if (shopItem == SHOP_ITEM_NONE) if (shopItem == SHOP_ITEM_NONE)
@ -579,18 +582,7 @@ void RideObject::ReadJson(IReadObjectContext* context, const json_t* root)
context->LogWarning(OBJECT_ERROR_INVALID_PROPERTY, "Unknown shop item"); context->LogWarning(OBJECT_ERROR_INVALID_PROPERTY, "Unknown shop item");
} }
if (i == 0) _legacyType.shop_item[i] = ParseShopItem(rideSells[i]);
{
_legacyType.shop_item = ParseShopItem(rideSells[0]);
}
else if (i == 1)
{
_legacyType.shop_item_secondary = ParseShopItem(rideSells[1]);
}
else
{
// More than 2 shop items not supported yet!
}
} }
} }
else else

View File

@ -1493,7 +1493,7 @@ bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
return false; return false;
} }
if (shop_item_is_food_or_drink(shopItem)) if (ShopItems[shopItem].IsFoodOrDrink())
{ {
int32_t food = -1; int32_t food = -1;
if ((food = HasFoodStandardFlag()) != 0) if ((food = HasFoodStandardFlag()) != 0)
@ -1523,13 +1523,13 @@ bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
return false; return false;
} }
if (shop_item_is_food(shopItem) && (hunger > 75)) if (ShopItems[shopItem].IsFood() && (hunger > 75))
{ {
InsertNewThought(PEEP_THOUGHT_TYPE_NOT_HUNGRY, PEEP_THOUGHT_ITEM_NONE); InsertNewThought(PEEP_THOUGHT_TYPE_NOT_HUNGRY, PEEP_THOUGHT_ITEM_NONE);
return false; return false;
} }
if (shop_item_is_drink(shopItem) && (thirst > 75)) if (ShopItems[shopItem].IsDrink() && (thirst > 75))
{ {
InsertNewThought(PEEP_THOUGHT_TYPE_NOT_THIRSTY, PEEP_THOUGHT_ITEM_NONE); InsertNewThought(PEEP_THOUGHT_TYPE_NOT_THIRSTY, PEEP_THOUGHT_ITEM_NONE);
return false; return false;
@ -1538,7 +1538,7 @@ bool Guest::DecideAndBuyItem(Ride* ride, int32_t shopItem, money32 price)
if (shopItem == SHOP_ITEM_UMBRELLA && climate_is_raining()) if (shopItem == SHOP_ITEM_UMBRELLA && climate_is_raining())
goto loc_69B119; goto loc_69B119;
if ((shopItem != SHOP_ITEM_MAP) && shop_item_is_souvenir(shopItem) && !hasVoucher) if ((shopItem != SHOP_ITEM_MAP) && ShopItems[shopItem].IsSouvenir() && !hasVoucher)
{ {
if (((scenario_rand() & 0x7F) + 0x73) > happiness) if (((scenario_rand() & 0x7F) + 0x73) > happiness)
return false; return false;
@ -1695,25 +1695,25 @@ loc_69B221:
} }
} }
if (shop_item_is_food(shopItem)) if (ShopItems[shopItem].IsFood())
no_of_food++; no_of_food++;
if (shop_item_is_drink(shopItem)) if (ShopItems[shopItem].IsDrink())
no_of_drinks++; no_of_drinks++;
if (shop_item_is_souvenir(shopItem)) if (ShopItems[shopItem].IsSouvenir())
no_of_souvenirs++; no_of_souvenirs++;
money16* expend_type = &paid_on_souvenirs; money16* expend_type = &paid_on_souvenirs;
ExpenditureType expenditure = ExpenditureType::ShopStock; ExpenditureType expenditure = ExpenditureType::ShopStock;
if (shop_item_is_food(shopItem)) if (ShopItems[shopItem].IsFood())
{ {
expend_type = &paid_on_food; expend_type = &paid_on_food;
expenditure = ExpenditureType::FoodDrinkStock; expenditure = ExpenditureType::FoodDrinkStock;
} }
if (shop_item_is_drink(shopItem)) if (ShopItems[shopItem].IsDrink())
{ {
expend_type = &paid_on_drink; expend_type = &paid_on_drink;
expenditure = ExpenditureType::FoodDrinkStock; expenditure = ExpenditureType::FoodDrinkStock;
@ -3417,22 +3417,22 @@ void Guest::UpdateBuying()
{ {
return; return;
} }
if (ride_type->shop_item_secondary != SHOP_ITEM_NONE) if (ride_type->shop_item[1] != SHOP_ITEM_NONE)
{ {
money16 price = ride->price_secondary; money16 price = ride->price[1];
item_bought = DecideAndBuyItem(ride, ride_type->shop_item_secondary, price); item_bought = DecideAndBuyItem(ride, ride_type->shop_item[1], price);
if (item_bought) if (item_bought)
{ {
ride->no_secondary_items_sold++; ride->no_secondary_items_sold++;
} }
} }
if (!item_bought && ride_type->shop_item != SHOP_ITEM_NONE) if (!item_bought && ride_type->shop_item[0] != SHOP_ITEM_NONE)
{ {
money16 price = ride->price; money16 price = ride->price[0];
item_bought = DecideAndBuyItem(ride, ride_type->shop_item, price); item_bought = DecideAndBuyItem(ride, ride_type->shop_item[0], price);
if (item_bought) if (item_bought)
{ {
ride->no_primary_items_sold++; ride->no_primary_items_sold++;
@ -4398,7 +4398,7 @@ void Guest::UpdateRideInExit()
if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO)
{ {
uint8_t secondaryItem = RideTypeDescriptors[ride->type].PhotoItem; uint8_t secondaryItem = RideTypeDescriptors[ride->type].PhotoItem;
if (DecideAndBuyItem(ride, secondaryItem, ride->price_secondary)) if (DecideAndBuyItem(ride, secondaryItem, ride->price[1]))
{ {
ride->no_secondary_items_sold++; ride->no_secondary_items_sold++;
} }

View File

@ -2958,7 +2958,7 @@ static bool peep_interact_with_shop(Peep* peep, int16_t x, int16_t y, TileElemen
return true; return true;
} }
money16 cost = ride->price; money16 cost = ride->price[0];
if (cost != 0 && !(gParkFlags & PARK_FLAGS_NO_MONEY)) if (cost != 0 && !(gParkFlags & PARK_FLAGS_NO_MONEY))
{ {
ride->total_profit += cost; ride->total_profit += cost;

View File

@ -937,8 +937,8 @@ private:
// Finance / customers // Finance / customers
dst->upkeep_cost = src->upkeep_cost; dst->upkeep_cost = src->upkeep_cost;
dst->price = src->price; dst->price[0] = src->price;
dst->price_secondary = src->price_secondary; dst->price[1] = src->price_secondary;
dst->income_per_hour = src->income_per_hour; dst->income_per_hour = src->income_per_hour;
dst->total_customers = src->total_customers; dst->total_customers = src->total_customers;
dst->profit = src->profit; dst->profit = src->profit;

View File

@ -664,7 +664,7 @@ void S6Exporter::ExportRide(rct2_ride* dst, const Ride* src)
dst->num_customers[i] = src->num_customers[i]; dst->num_customers[i] = src->num_customers[i];
} }
dst->price = src->price; dst->price = src->price[0];
for (uint8_t i = 0; i < 2; i++) for (uint8_t i = 0; i < 2; i++)
{ {
@ -714,7 +714,7 @@ void S6Exporter::ExportRide(rct2_ride* dst, const Ride* src)
dst->broken_car = src->broken_car; dst->broken_car = src->broken_car;
dst->breakdown_reason = src->breakdown_reason; dst->breakdown_reason = src->breakdown_reason;
dst->price_secondary = src->price_secondary; dst->price_secondary = src->price[1];
dst->reliability = src->reliability; dst->reliability = src->reliability;
dst->unreliability_factor = src->unreliability_factor; dst->unreliability_factor = src->unreliability_factor;

View File

@ -657,7 +657,7 @@ public:
dst->num_customers[i] = src->num_customers[i]; dst->num_customers[i] = src->num_customers[i];
} }
dst->price = src->price; dst->price[0] = src->price;
for (uint8_t i = 0; i < 2; i++) for (uint8_t i = 0; i < 2; i++)
{ {
@ -708,7 +708,7 @@ public:
dst->broken_car = src->broken_car; dst->broken_car = src->broken_car;
dst->breakdown_reason = src->breakdown_reason; dst->breakdown_reason = src->breakdown_reason;
dst->price_secondary = src->price_secondary; dst->price[1] = src->price_secondary;
dst->reliability = src->reliability; dst->reliability = src->reliability;
dst->unreliability_factor = src->unreliability_factor; dst->unreliability_factor = src->unreliability_factor;

View File

@ -353,21 +353,21 @@ money32 Ride::CalculateIncomePerHour() const
money32 customersPerHour = ride_customers_per_hour(this); money32 customersPerHour = ride_customers_per_hour(this);
money32 priceMinusCost = ride_get_price(this); money32 priceMinusCost = ride_get_price(this);
int32_t currentShopItem = entry->shop_item; int32_t currentShopItem = entry->shop_item[0];
if (currentShopItem != SHOP_ITEM_NONE) if (currentShopItem != SHOP_ITEM_NONE)
{ {
priceMinusCost -= ShopItems[currentShopItem].Cost; priceMinusCost -= ShopItems[currentShopItem].Cost;
} }
currentShopItem = (lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? RideTypeDescriptors[type].PhotoItem currentShopItem = (lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) ? RideTypeDescriptors[type].PhotoItem
: entry->shop_item_secondary; : entry->shop_item[1];
if (currentShopItem != SHOP_ITEM_NONE) if (currentShopItem != SHOP_ITEM_NONE)
{ {
priceMinusCost += price_secondary; priceMinusCost += price[1];
priceMinusCost -= ShopItems[currentShopItem].Cost; priceMinusCost -= ShopItems[currentShopItem].Cost;
if (entry->shop_item != SHOP_ITEM_NONE) if (entry->shop_item[0] != SHOP_ITEM_NONE)
priceMinusCost /= 2; priceMinusCost /= 2;
} }
@ -5571,7 +5571,7 @@ money32 ride_get_common_price(Ride* forRide)
{ {
if (ride.type == forRide->type && &ride != forRide) if (ride.type == forRide->type && &ride != forRide)
{ {
return ride.price; return ride.price[0];
} }
} }
@ -7175,7 +7175,7 @@ money16 ride_get_price(const Ride* ride)
return 0; return 0;
} }
} }
return ride->price; return ride->price[0];
} }
/** /**

View File

@ -52,6 +52,8 @@ constexpr uint16_t const MAZE_CLEARANCE_HEIGHT = 4 * COORDS_Z_STEP;
constexpr const ObjectEntryIndex RIDE_ENTRY_INDEX_NULL = OBJECT_ENTRY_INDEX_NULL; constexpr const ObjectEntryIndex RIDE_ENTRY_INDEX_NULL = OBJECT_ENTRY_INDEX_NULL;
constexpr const uint8_t NUM_SHOP_ITEMS_PER_RIDE = 2;
#pragma pack(push, 1) #pragma pack(push, 1)
struct TrackColour struct TrackColour
{ {
@ -122,8 +124,7 @@ struct rct_ride_entry
int8_t intensity_multiplier; int8_t intensity_multiplier;
int8_t nausea_multiplier; int8_t nausea_multiplier;
uint8_t max_height; uint8_t max_height;
uint8_t shop_item; uint8_t shop_item[NUM_SHOP_ITEMS_PER_RIDE];
uint8_t shop_item_secondary;
rct_string_id capacity; rct_string_id capacity;
void* obj; void* obj;
@ -271,7 +272,7 @@ struct Ride
uint16_t num_customers_timeout; uint16_t num_customers_timeout;
// Customer count in the last 10 * 960 game ticks (sliding window) // Customer count in the last 10 * 960 game ticks (sliding window)
uint16_t num_customers[CUSTOMER_HISTORY_SIZE]; uint16_t num_customers[CUSTOMER_HISTORY_SIZE];
money16 price; money16 price[NUM_SHOP_ITEMS_PER_RIDE];
TileCoordsXYZ ChairliftBullwheelLocation[2]; TileCoordsXYZ ChairliftBullwheelLocation[2];
union union
{ {
@ -316,7 +317,6 @@ struct Ride
uint8_t broken_vehicle; uint8_t broken_vehicle;
uint8_t broken_car; uint8_t broken_car;
uint8_t breakdown_reason; uint8_t breakdown_reason;
money16 price_secondary;
union union
{ {
struct struct

View File

@ -56,8 +56,7 @@ struct RideNameConvention
struct rct_ride_data_4 struct rct_ride_data_4
{ {
uint8_t price; uint8_t price[NUM_SHOP_ITEMS_PER_RIDE];
uint8_t price_secondary;
uint8_t default_music; uint8_t default_music;
}; };

View File

@ -19,64 +19,64 @@ uint64_t gSamePriceThroughoutPark;
/** rct2: 0x00982164 (cost, base value, hot and cold value); 0x00982358 (default price) */ /** rct2: 0x00982164 (cost, base value, hot and cold value); 0x00982358 (default price) */
const ShopItemDescriptor ShopItems[SHOP_ITEM_COUNT] = { const ShopItemDescriptor ShopItems[SHOP_ITEM_COUNT] = {
// Item, Cost, Base value, Hot value, Cold value, Default price, Image, Price label, Singular, Plural, Indefinite, Display (in guest inventory) // 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_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_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_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_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_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_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_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_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_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_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 } }, /* 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 } }, /* 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 } }, /* 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_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 } }, /* 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_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_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_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_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_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_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_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_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 } }, /* 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_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_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 } }, /* 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 } }, /* 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 },
/* 28 */ { 0, 0, 0, 0, MONEY(0, 00), 0, { STR_NONE, STR_NONE, STR_NONE, STR_NONE, STR_NONE } }, /* 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 } }, /* 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 } }, /* 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 } }, /* 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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 } }, /* 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 } }, /* 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 } }, /* 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_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 } }, /* 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 },
}; };
// clang-format on // clang-format on
money32 shop_item_get_common_price(Ride* forRide, int32_t shopItem) money32 shop_item_get_common_price(Ride* forRide, const int32_t shopItem)
{ {
for (const auto& ride : GetRideManager()) for (const auto& ride : GetRideManager())
{ {
@ -87,17 +87,17 @@ money32 shop_item_get_common_price(Ride* forRide, int32_t shopItem)
{ {
continue; continue;
} }
if (rideEntry->shop_item == shopItem) if (rideEntry->shop_item[0] == shopItem)
{ {
return ride.price; return ride.price[0];
} }
if (rideEntry->shop_item_secondary == shopItem) if (rideEntry->shop_item[1] == shopItem)
{ {
return ride.price_secondary; return ride.price[1];
} }
if (shop_item_is_photo(shopItem) && (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO)) if (ShopItems[shopItem].IsPhoto() && (ride.lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO))
{ {
return ride.price_secondary; return ride.price[1];
} }
} }
} }
@ -105,121 +105,37 @@ money32 shop_item_get_common_price(Ride* forRide, int32_t shopItem)
return MONEY32_UNDEFINED; return MONEY32_UNDEFINED;
} }
bool shop_item_is_photo(int32_t shopItem) bool shop_item_has_common_price(const int32_t shopItem)
{
return (
shopItem == SHOP_ITEM_PHOTO || shopItem == SHOP_ITEM_PHOTO2 || shopItem == SHOP_ITEM_PHOTO3
|| shopItem == SHOP_ITEM_PHOTO4);
}
bool shop_item_has_common_price(int32_t shopItem)
{ {
return (gSamePriceThroughoutPark & (1ULL << shopItem)) != 0; return (gSamePriceThroughoutPark & (1ULL << shopItem)) != 0;
} }
bool shop_item_is_food_or_drink(int32_t shopItem) bool ShopItemDescriptor::HasFlag(const uint16_t flag) const
{ {
switch (shopItem) return (Flags & flag) != 0;
{
case SHOP_ITEM_DRINK:
case SHOP_ITEM_BURGER:
case SHOP_ITEM_CHIPS:
case SHOP_ITEM_ICE_CREAM:
case SHOP_ITEM_CANDYFLOSS:
case SHOP_ITEM_PIZZA:
case SHOP_ITEM_POPCORN:
case SHOP_ITEM_HOT_DOG:
case SHOP_ITEM_TENTACLE:
case SHOP_ITEM_TOFFEE_APPLE:
case SHOP_ITEM_DOUGHNUT:
case SHOP_ITEM_COFFEE:
case SHOP_ITEM_CHICKEN:
case SHOP_ITEM_LEMONADE:
case SHOP_ITEM_PRETZEL:
case SHOP_ITEM_CHOCOLATE:
case SHOP_ITEM_ICED_TEA:
case SHOP_ITEM_FUNNEL_CAKE:
case SHOP_ITEM_BEEF_NOODLES:
case SHOP_ITEM_FRIED_RICE_NOODLES:
case SHOP_ITEM_WONTON_SOUP:
case SHOP_ITEM_MEATBALL_SOUP:
case SHOP_ITEM_FRUIT_JUICE:
case SHOP_ITEM_SOYBEAN_MILK:
case SHOP_ITEM_SUJEONGGWA:
case SHOP_ITEM_SUB_SANDWICH:
case SHOP_ITEM_COOKIE:
case SHOP_ITEM_ROAST_SAUSAGE:
return true;
default:
return false;
}
} }
bool shop_item_is_food(int32_t shopItem) bool ShopItemDescriptor::IsFood() const
{ {
switch (shopItem) return HasFlag(SHOP_ITEM_FLAG_IS_FOOD);
{
case SHOP_ITEM_BURGER:
case SHOP_ITEM_CHIPS:
case SHOP_ITEM_ICE_CREAM:
case SHOP_ITEM_CANDYFLOSS:
case SHOP_ITEM_PIZZA:
case SHOP_ITEM_POPCORN:
case SHOP_ITEM_HOT_DOG:
case SHOP_ITEM_TENTACLE:
case SHOP_ITEM_TOFFEE_APPLE:
case SHOP_ITEM_DOUGHNUT:
case SHOP_ITEM_CHICKEN:
case SHOP_ITEM_PRETZEL:
case SHOP_ITEM_FUNNEL_CAKE:
case SHOP_ITEM_BEEF_NOODLES:
case SHOP_ITEM_FRIED_RICE_NOODLES:
case SHOP_ITEM_WONTON_SOUP:
case SHOP_ITEM_MEATBALL_SOUP:
case SHOP_ITEM_SUB_SANDWICH:
case SHOP_ITEM_COOKIE:
case SHOP_ITEM_ROAST_SAUSAGE:
return true;
default:
return false;
}
} }
bool shop_item_is_drink(int32_t shopItem) bool ShopItemDescriptor::IsDrink() const
{ {
switch (shopItem) return HasFlag(SHOP_ITEM_FLAG_IS_DRINK);
{
case SHOP_ITEM_DRINK:
case SHOP_ITEM_COFFEE:
case SHOP_ITEM_LEMONADE:
case SHOP_ITEM_CHOCOLATE:
case SHOP_ITEM_ICED_TEA:
case SHOP_ITEM_FRUIT_JUICE:
case SHOP_ITEM_SOYBEAN_MILK:
case SHOP_ITEM_SUJEONGGWA:
return true;
default:
return false;
}
} }
bool shop_item_is_souvenir(int32_t shopItem) bool ShopItemDescriptor::IsFoodOrDrink() const
{ {
switch (shopItem) return HasFlag(SHOP_ITEM_FLAG_IS_FOOD | SHOP_ITEM_FLAG_IS_DRINK);
{ }
case SHOP_ITEM_BALLOON:
case SHOP_ITEM_TOY: bool ShopItemDescriptor::IsSouvenir() const
case SHOP_ITEM_MAP: {
case SHOP_ITEM_PHOTO: return HasFlag(SHOP_ITEM_FLAG_IS_SOUVENIR);
case SHOP_ITEM_UMBRELLA: }
case SHOP_ITEM_HAT:
case SHOP_ITEM_TSHIRT: bool ShopItemDescriptor::IsPhoto() const
case SHOP_ITEM_PHOTO2: {
case SHOP_ITEM_PHOTO3: return HasFlag(SHOP_ITEM_FLAG_IS_PHOTO);
case SHOP_ITEM_PHOTO4:
case SHOP_ITEM_SUNGLASSES:
return true;
default:
return false;
}
} }

View File

@ -88,15 +88,26 @@ struct ShopItemDescriptor
money8 DefaultPrice; money8 DefaultPrice;
uint32_t Image; uint32_t Image;
ShopItemStrings Naming; ShopItemStrings Naming;
uint16_t Flags;
bool HasFlag(const uint16_t flag) const;
bool IsFood() const;
bool IsDrink() const;
bool IsFoodOrDrink() const;
bool IsSouvenir() const;
bool IsPhoto() const;
};
enum
{
SHOP_ITEM_FLAG_IS_FOOD = (1 << 0),
SHOP_ITEM_FLAG_IS_DRINK = (1 << 1),
SHOP_ITEM_FLAG_IS_SOUVENIR = (1 << 2),
SHOP_ITEM_FLAG_IS_PHOTO = (1 << 3),
}; };
extern const ShopItemDescriptor ShopItems[SHOP_ITEM_COUNT]; extern const ShopItemDescriptor ShopItems[SHOP_ITEM_COUNT];
extern uint64_t gSamePriceThroughoutPark; extern uint64_t gSamePriceThroughoutPark;
money32 shop_item_get_common_price(Ride* forRide, int32_t shopItem); money32 shop_item_get_common_price(Ride* forRide, const int32_t shopItem);
bool shop_item_is_photo(int32_t shopItem); bool shop_item_has_common_price(const int32_t shopItem);
bool shop_item_has_common_price(int32_t shopItem);
bool shop_item_is_food_or_drink(int32_t shopItem);
bool shop_item_is_food(int32_t shopItem);
bool shop_item_is_drink(int32_t shopItem);
bool shop_item_is_souvenir(int32_t shopItem);

View File

@ -887,7 +887,7 @@ namespace OpenRCT2::Scripting
auto entry = GetLegacyData(); auto entry = GetLegacyData();
if (entry != nullptr) if (entry != nullptr)
{ {
return entry->shop_item; return entry->shop_item[0];
} }
return 0; return 0;
} }
@ -897,7 +897,7 @@ namespace OpenRCT2::Scripting
auto entry = GetLegacyData(); auto entry = GetLegacyData();
if (entry != nullptr) if (entry != nullptr)
{ {
return entry->shop_item_secondary; return entry->shop_item[1];
} }
return 0; return 0;
} }

View File

@ -540,7 +540,7 @@ money16 Park::CalculateTotalRideValueForMoney() const
// Add ride value // Add ride value
if (ride.value != RIDE_VALUE_UNDEFINED) if (ride.value != RIDE_VALUE_UNDEFINED)
{ {
money16 rideValue = static_cast<money16>(ride.value - ride.price); money16 rideValue = static_cast<money16>(ride.value - ride.price[0]);
if (rideValue > 0) if (rideValue > 0)
{ {
totalRideValue += rideValue * 2; totalRideValue += rideValue * 2;