mirror of https://github.com/OpenRCT2/OpenRCT2.git
Merge remote-tracking branch 'remotes/remote/ride-window'
This commit is contained in:
commit
1856cedaa6
|
@ -107,6 +107,8 @@
|
|||
|
||||
#define RCT2_ADDRESS_RUN_INTRO_TICK_PART 0x009AC319
|
||||
|
||||
#define RCT2_ADDRESS_RIDE_ENTRIES 0x009ACFA4
|
||||
|
||||
#define RCT2_ADDRESS_INSTALLED_OBJECT_LIST 0x009ADAE8
|
||||
|
||||
#define RCT2_ADDRESS_CURRENT_SOUND_DEVICE 0x009AF280
|
||||
|
|
14
src/award.c
14
src/award.c
|
@ -474,10 +474,12 @@ static int award_is_deserved_best_custom_designed_rides(int awardType, int activ
|
|||
}
|
||||
|
||||
/** At least 5 colourful rides and more than half of the rides are colourful. */
|
||||
const uint8 dazzling_ride_colours[] = { 5, 14, 20, 30 };
|
||||
static int award_is_deserved_most_dazzling_ride_colours(int awardType, int activeAwardTypes)
|
||||
{
|
||||
int i, countedRides, colourfulRides;
|
||||
int i, j, countedRides, colourfulRides;
|
||||
rct_ride *ride;
|
||||
uint8 mainTrackColour;
|
||||
|
||||
if (activeAwardTypes & (1 << PARK_AWARD_MOST_DISAPPOINTING))
|
||||
return 0;
|
||||
|
@ -489,8 +491,14 @@ static int award_is_deserved_most_dazzling_ride_colours(int awardType, int activ
|
|||
continue;
|
||||
|
||||
countedRides++;
|
||||
if (ride->var_1BC == 5 || ride->var_1BC == 14 || ride->var_1BC == 20 || ride->var_1BC == 30)
|
||||
colourfulRides++;
|
||||
|
||||
mainTrackColour = ride->track_colour_main[0];
|
||||
for (j = 0; j < countof(dazzling_ride_colours); j++) {
|
||||
if (mainTrackColour == dazzling_ride_colours[j]) {
|
||||
colourfulRides++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (colourfulRides >= 5 && colourfulRides >= countedRides - colourfulRides);
|
||||
|
|
|
@ -130,7 +130,7 @@ void finance_pay_ride_upkeep()
|
|||
if (ride->status != RIDE_STATUS_CLOSED && !(RCT2_GLOBAL(RCT2_ADDRESS_PARK_FLAGS, uint32) & PARK_FLAGS_NO_MONEY)) {
|
||||
sint16 upkeep = ride->upkeep_cost;
|
||||
if (upkeep != -1) {
|
||||
ride->var_154 -= upkeep;
|
||||
ride->total_profit -= upkeep;
|
||||
ride->var_14D |= 2;
|
||||
finance_payment(upkeep, RCT2_EXPENDITURE_TYPE_RIDE_UPKEEP);
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ enum GAME_COMMAND {
|
|||
GAME_COMMAND_7,
|
||||
GAME_COMMAND_SET_RIDE_OPEN, // 8
|
||||
GAME_COMMAND_9,
|
||||
GAME_COMMAND_10,
|
||||
GAME_COMMAND_SET_RIDE_NAME,
|
||||
GAME_COMMAND_11,
|
||||
GAME_COMMAND_12,
|
||||
GAME_COMMAND_13,
|
||||
|
|
|
@ -212,7 +212,7 @@ void news_item_get_subject_location(int type, int subject, int *x, int *y, int *
|
|||
}
|
||||
|
||||
// Find the first car of the train peep is on
|
||||
vehicle = &(g_sprite_list[ride->train_car_map[peep->current_train]]).vehicle;
|
||||
vehicle = &(g_sprite_list[ride->vehicles[peep->current_train]]).vehicle;
|
||||
// Find the actual car peep is on
|
||||
for (i = 0; i < peep->current_car; i++)
|
||||
vehicle = &(g_sprite_list[vehicle->next_vehicle_on_train]).vehicle;
|
||||
|
|
|
@ -395,7 +395,7 @@ static int park_calculate_guest_generation_probability()
|
|||
continue;
|
||||
if (!(ride->lifecycle_flags & RIDE_LIFECYCLE_TESTED))
|
||||
continue;
|
||||
if (ride->var_0E4 < 0x2580000)
|
||||
if (ride->length[0] < (600 << 16))
|
||||
continue;
|
||||
if (ride->excitement < RIDE_RATING(6,00))
|
||||
continue;
|
||||
|
|
10
src/peep.c
10
src/peep.c
|
@ -27,6 +27,7 @@
|
|||
#include "ride.h"
|
||||
#include "sprite.h"
|
||||
#include "sprites.h"
|
||||
#include "staff.h"
|
||||
#include "window.h"
|
||||
|
||||
static void peep_update(rct_peep *peep);
|
||||
|
@ -716,3 +717,12 @@ int peep_check_cheatcode(int index, rct_peep *peep)
|
|||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int peep_is_mechanic(rct_peep *peep)
|
||||
{
|
||||
return (
|
||||
peep->sprite_identifier == SPRITE_IDENTIFIER_PEEP &&
|
||||
peep->type == PEEP_TYPE_STAFF &&
|
||||
peep->staff_type == STAFF_TYPE_MECHANIC
|
||||
);
|
||||
}
|
||||
|
|
|
@ -457,6 +457,6 @@ void get_arguments_from_thought(rct_peep_thought thought, uint32* argument_1, ui
|
|||
int get_peep_face_sprite_small(rct_peep *peep);
|
||||
int get_peep_face_sprite_large(rct_peep *peep);
|
||||
int peep_check_cheatcode(int index, rct_peep *peep);
|
||||
|
||||
int peep_is_mechanic(rct_peep *peep);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -84,7 +84,7 @@ typedef fixed32_1dp money32;
|
|||
// would write FIXED_2DP(3,65)
|
||||
#define FIXED_XDP(x, whole, fraction) ((whole) * (10 * x) + (fraction))
|
||||
#define FIXED_1DP(whole, fraction) FIXED_XDP(1, whole, fraction)
|
||||
#define FIXED_2DP(whole, fraction) FIXED_XDP(2, whole, fraction)
|
||||
#define FIXED_2DP(whole, fraction) FIXED_XDP(10, whole, fraction)
|
||||
|
||||
// Construct a money value in the format MONEY(10,70) to represent 10.70. Fractional part must be two digits.
|
||||
#define MONEY(whole, fraction) ((whole) * 10 + ((fraction) / 10))
|
||||
|
|
135
src/ride.c
135
src/ride.c
|
@ -23,6 +23,7 @@
|
|||
#include "game.h"
|
||||
#include "map.h"
|
||||
#include "news_item.h"
|
||||
#include "staff.h"
|
||||
#include "sprite.h"
|
||||
#include "ride.h"
|
||||
#include "scenario.h"
|
||||
|
@ -476,6 +477,118 @@ int ride_try_construct(rct_map_element *trackMapElement)
|
|||
return 1;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006AF561
|
||||
*/
|
||||
void ride_get_status(int rideIndex, int *formatSecondary, int *argument)
|
||||
{
|
||||
rct_ride *ride = &g_ride_list[rideIndex];
|
||||
|
||||
if (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED) {
|
||||
*formatSecondary = STR_CRASHED;
|
||||
return;
|
||||
}
|
||||
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) {
|
||||
*formatSecondary = STR_BROKEN_DOWN;
|
||||
return;
|
||||
}
|
||||
if (ride->status == RIDE_STATUS_CLOSED) {
|
||||
*formatSecondary = STR_CLOSED;
|
||||
return;
|
||||
}
|
||||
if (ride->status == RIDE_STATUS_TESTING) {
|
||||
*formatSecondary = STR_TEST_RUN;
|
||||
return;
|
||||
}
|
||||
rct_peep *peep = GET_PEEP(ride->race_winner);
|
||||
if (ride->mode == RIDE_MODE_RACE && !(ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) && ride->race_winner != 0xFFFF && peep->sprite_identifier == SPRITE_IDENTIFIER_PEEP) {
|
||||
if (peep->name_string_idx == STR_GUEST) {
|
||||
*argument = peep->id;
|
||||
*formatSecondary = STR_RACE_WON_BY_GUEST;
|
||||
} else {
|
||||
*argument = peep->name_string_idx;
|
||||
*formatSecondary = STR_RACE_WON_BY;
|
||||
}
|
||||
} else {
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x20000)) {
|
||||
*argument = ride->num_riders;
|
||||
*formatSecondary = STR_PERSON_ON_RIDE;
|
||||
if(*argument != 1)
|
||||
*formatSecondary = STR_PEOPLE_ON_RIDE;
|
||||
|
||||
} else {
|
||||
*formatSecondary = STR_OPEN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rct_peep *ride_get_assigned_mechanic(rct_ride *ride)
|
||||
{
|
||||
rct_peep *peep;
|
||||
|
||||
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) {
|
||||
if (
|
||||
ride->mechanic_status == RIDE_MECHANIC_STATUS_HEADING ||
|
||||
ride->mechanic_status == 3 ||
|
||||
ride->mechanic_status == 4
|
||||
) {
|
||||
peep = &(g_sprite_list[ride->mechanic].peep);
|
||||
if (peep_is_mechanic(peep))
|
||||
return peep;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int ride_get_total_length(rct_ride *ride)
|
||||
{
|
||||
int i, totalLength = 0;
|
||||
for (i = 0; i < ride->num_stations; i++)
|
||||
totalLength += ride->length[i];
|
||||
return totalLength;
|
||||
}
|
||||
|
||||
int ride_can_have_multiple_circuits(rct_ride *ride)
|
||||
{
|
||||
if (!(RCT2_GLOBAL(0x0097D4F2 + (ride->type * 8), uint16) & 0x200))
|
||||
return 0;
|
||||
|
||||
// Only allow circuit or launch modes
|
||||
if (
|
||||
ride->mode != RIDE_MODE_CONTINUOUS_CIRCUIT &&
|
||||
ride->mode != RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE &&
|
||||
ride->mode != RIDE_MODE_POWERED_LAUNCH
|
||||
) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Must have no more than one vehicle and one station
|
||||
if (ride->num_vehicles > 1 || ride->num_stations > 1)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
track_colour ride_get_track_colour(rct_ride *ride, int colourScheme)
|
||||
{
|
||||
track_colour result;
|
||||
result.main = ride->track_colour_main[colourScheme];
|
||||
result.additional = ride->track_colour_additional[colourScheme];
|
||||
result.supports = ride->track_colour_supports[colourScheme];
|
||||
return result;
|
||||
}
|
||||
|
||||
vehicle_colour ride_get_vehicle_colour(rct_ride *ride, int vehicleIndex)
|
||||
{
|
||||
vehicle_colour result;
|
||||
result.main = ride->vehicle_colours[vehicleIndex] & 0xFF;
|
||||
result.additional_1 = ride->vehicle_colours[vehicleIndex] >> 8;
|
||||
result.additional_2 = ride->vehicle_colours_extended[vehicleIndex];
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006AC988
|
||||
|
@ -487,10 +600,10 @@ void ride_init_vehicle_speed(rct_ride *ride)
|
|||
int ecx = -1;
|
||||
while (1) {
|
||||
ecx++;
|
||||
if (ecx >= ride->var_0C8) {
|
||||
if (ecx >= ride->num_vehicles) {
|
||||
break;
|
||||
}
|
||||
rct_vehicle *vehicle = &g_sprite_list[ride->train_car_map[ecx]].vehicle;
|
||||
rct_vehicle *vehicle = &g_sprite_list[ride->vehicles[ecx]].vehicle;
|
||||
vehicle->var_48 &= (1 << 6);
|
||||
uint8 r = scenario_rand();
|
||||
r = 0xC;
|
||||
|
@ -523,3 +636,21 @@ void ride_init_vehicle_speed(rct_ride *ride)
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
rct_ride_type *ride_get_entry(rct_ride *ride)
|
||||
{
|
||||
return GET_RIDE_ENTRY(ride->subtype);
|
||||
}
|
||||
|
||||
uint8 *get_ride_entry_indices_for_ride_type(uint8 rideType)
|
||||
{
|
||||
uint8 *typeToRideEntryIndexMap = (uint8*)0x009E32F8;
|
||||
uint8 *entryIndexList = typeToRideEntryIndexMap;
|
||||
while (rideType > 0) {
|
||||
do {
|
||||
entryIndexList++;
|
||||
} while (*(entryIndexList - 1) != 255);
|
||||
rideType--;
|
||||
}
|
||||
return entryIndexList;
|
||||
}
|
258
src/ride.h
258
src/ride.h
|
@ -22,6 +22,7 @@
|
|||
#define _RIDE_H_
|
||||
|
||||
#include "map.h"
|
||||
#include "peep.h"
|
||||
#include "rct2.h"
|
||||
#include "string_ids.h"
|
||||
|
||||
|
@ -49,15 +50,22 @@ typedef struct {
|
|||
uint32 var_008;
|
||||
uint8 var_00C;
|
||||
uint8 var_00D;
|
||||
uint8 pad_00E[0x5];
|
||||
uint8 pad_00E;
|
||||
uint8 var_00F;
|
||||
uint8 var_010;
|
||||
uint8 var_011;
|
||||
uint8 var_012;
|
||||
uint8 var_013;
|
||||
uint8 pad_014[0x19E];
|
||||
sint8 excitement_multipler; // 0x1B2
|
||||
sint8 intensity_multipler; // 0x1B3
|
||||
sint8 nausea_multipler; // 0x1B4
|
||||
uint8 pad_1B5[0x09];
|
||||
uint8 pad_1B5;
|
||||
uint32 var_1B6;
|
||||
uint8 pad_1BA[0x04];
|
||||
uint8 category[2]; // 0x1BE
|
||||
uint8 shop_item; // 0x1C0
|
||||
uint8 shop_item_secondary; // 0x1C1
|
||||
} rct_ride_type;
|
||||
|
||||
/**
|
||||
|
@ -72,7 +80,7 @@ typedef struct {
|
|||
uint16 pad_002;
|
||||
uint8 mode; // 0x004
|
||||
uint8 colour_scheme_type; // 0x005
|
||||
uint16 car_colours[32]; // 0x006
|
||||
uint16 vehicle_colours[32]; // 0x006
|
||||
uint8 pad_046[0x03];
|
||||
// 0 = closed, 1 = open, 2 = test
|
||||
uint8 status; // 0x049
|
||||
|
@ -81,32 +89,38 @@ typedef struct {
|
|||
uint16 overall_view; // 0x050 00XX = X, XX00 = Y (* 32 + 16)
|
||||
uint16 station_starts[4]; // 0x052
|
||||
uint8 station_heights[4]; // 0x05A
|
||||
uint8 pad_05E[4];
|
||||
uint8 var_62[4];
|
||||
uint8 pad_66[4];
|
||||
uint8 pad_05E[0xC];
|
||||
uint16 entrances[4]; // 0x06A
|
||||
uint16 exits[4]; // 0x072
|
||||
uint8 pad_07A[0x0C];
|
||||
uint16 train_car_map[1]; // 0x086 Points to the first car in the train
|
||||
uint8 pad_088[0x3F];
|
||||
uint16 vehicles[32]; // 0x086 Points to the first car in the train
|
||||
uint8 depart_flags; // 0x0C6
|
||||
|
||||
// Not sure if these should be uint or sint.
|
||||
uint8 var_0C7;
|
||||
uint8 var_0C8; // Number of train cars?
|
||||
uint8 var_0C9;
|
||||
|
||||
uint8 pad_0CA[0x06];
|
||||
uint8 num_stations; // 0x0C7
|
||||
uint8 num_vehicles; // 0x0C8
|
||||
uint8 num_cars_per_train; // 0x0C9
|
||||
uint8 pad_0CA[0x2];
|
||||
uint8 var_0CC;
|
||||
uint8 var_0CD;
|
||||
uint8 min_waiting_time; // 0x0CE
|
||||
uint8 max_waiting_time; // 0x0CF
|
||||
uint8 var_0D0;
|
||||
uint8 pad_0D1[0x13];
|
||||
sint32 var_0E4;
|
||||
sint32 var_0E8;
|
||||
sint32 var_0EC;
|
||||
sint32 var_0F0;
|
||||
uint8 pad_0F4[0x20];
|
||||
uint8 var_114;
|
||||
// Track length? Number of track segments?
|
||||
uint8 var_115;
|
||||
uint8 pad_116[0x0E];
|
||||
uint8 pad_0D1[0x7];
|
||||
sint32 max_speed; // 0x0D8
|
||||
sint32 average_speed; // 0x0DC
|
||||
uint8 pad_0E0[0x4];
|
||||
sint32 length[4]; // 0x0E4
|
||||
uint16 time[4]; // 0x0F4
|
||||
fixed16_2dp max_positive_vertical_g; // 0x0FC
|
||||
fixed16_2dp max_negative_vertical_g; // 0x0FE
|
||||
fixed16_2dp max_lateral_g; // 0x100
|
||||
uint8 pad_102[0x12];
|
||||
uint8 inversions; // 0x114 (???X XXXX) holes for mini golf
|
||||
uint8 drops; // 0x115 (??XX XXXX)
|
||||
uint8 pad_116;
|
||||
uint8 highest_drop_height; // 0x117
|
||||
uint8 pad_118[0x0C];
|
||||
sint16 var_124;
|
||||
sint16 var_126;
|
||||
sint16 var_128;
|
||||
|
@ -119,61 +133,81 @@ typedef struct {
|
|||
sint16 var_136;
|
||||
money16 price; // 0x138
|
||||
uint8 pad_13A[0x06];
|
||||
sint16 excitement; // 0x140
|
||||
sint16 intensity; // 0x142
|
||||
uint16 nausea; // 0x144
|
||||
ride_rating excitement; // 0x140
|
||||
ride_rating intensity; // 0x142
|
||||
ride_rating nausea; // 0x144
|
||||
uint16 reliability; // 0x146
|
||||
uint16 pad_148;
|
||||
uint16 var_14A;
|
||||
uint8 pad_14C;
|
||||
uint8 var_14D;
|
||||
uint8 pad_14E[0x06];
|
||||
uint32 var_154;
|
||||
uint8 pad_14E[0x02];
|
||||
uint32 total_customers; // 0x150
|
||||
money32 total_profit; // 0x154
|
||||
uint16 var_158;
|
||||
uint8 pad_15A;
|
||||
uint8 num_riders; // 0x15B
|
||||
uint8 pad_15C[0x24];
|
||||
uint16 build_date;
|
||||
sint16 upkeep_cost; // 0x182
|
||||
sint16 build_date; // 0x180
|
||||
money16 upkeep_cost; // 0x182
|
||||
uint16 race_winner; // 0x184
|
||||
uint8 pad_186[0x06];
|
||||
uint8 var_18C;
|
||||
uint8 pad_18D[0x09];
|
||||
uint8 mechanic_status; // 0x18D
|
||||
uint16 mechanic; // 0x18E
|
||||
uint8 pad_190[0x03];
|
||||
uint8 breakdown_reason; // 0x193
|
||||
money16 price_secondary; // 0x194
|
||||
uint16 var_196;
|
||||
// used in computing excitement, nausea, etc
|
||||
uint8 var_198;
|
||||
uint8 var_199;
|
||||
uint8 pad_19A[0x14];
|
||||
uint8 inspection_interval; // 0x19A
|
||||
uint8 last_inspection; // 0x19B
|
||||
uint8 pad_19C[0x8];
|
||||
uint32 var_1A4;
|
||||
uint8 pad_1A8[6];
|
||||
uint8 var_1AE;
|
||||
uint8 connected_message_throttle;
|
||||
uint32 pad_1B0;
|
||||
sint32 profit; // 0x1B4
|
||||
uint8 connected_message_throttle; // 0x1AF
|
||||
money32 income_per_hour; // 0x1B0
|
||||
money32 profit; // 0x1B4
|
||||
uint8 queue_time[4]; // 0x1B8
|
||||
uint8 var_1BC;
|
||||
uint8 pad_1BD[0xD];
|
||||
uint16 var_1CA;
|
||||
uint8 var_1CC;
|
||||
uint8 var_1CD;
|
||||
uint8 track_colour_main[4]; // 0x1BC
|
||||
uint8 track_colour_additional[4]; // 0x1C0
|
||||
uint8 track_colour_supports[4]; // 0x1C4
|
||||
uint8 music; // 0x1C8
|
||||
uint8 entrance_style; // 0x1C9
|
||||
uint8 pad_1CA[0x02];
|
||||
uint8 num_block_brakes; // 0x1CC
|
||||
uint8 lift_hill_speed; // 0x1CD
|
||||
uint16 guests_favourite; // 0x1CE
|
||||
uint32 lifecycle_flags; // 0x1D0
|
||||
uint8 var_1D4;
|
||||
uint8 pad_1D5[0x1F];
|
||||
// Example value for wild mouse ride is d5 (before it's been constructed)
|
||||
// I tried searching the IDA file for "1F4" but couldn't find places where
|
||||
// this is written to.
|
||||
uint16 var_1F4;
|
||||
uint8 pad_1F6[0x0a];
|
||||
uint8 vehicle_colours_extended[32]; // 0x1D4
|
||||
uint16 total_air_time; // 0x1F4
|
||||
uint8 pad_1F6;
|
||||
uint8 num_circuits; // 0x1F7
|
||||
uint8 pad_1F8[0x8];
|
||||
uint16 queue_length[4]; // 0x200
|
||||
uint8 pad_208[0x58];
|
||||
} rct_ride;
|
||||
|
||||
#define RIDE_MEASUREMENT_MAX_ITEMS 4800
|
||||
|
||||
/**
|
||||
* Ride measurement structure.
|
||||
* size: 0x04B0C
|
||||
*/
|
||||
typedef struct {
|
||||
uint8 var_00;
|
||||
uint8 pad_01[0x4B0B];
|
||||
uint8 var_01;
|
||||
uint8 pad_02[4];
|
||||
uint16 num_items; // 0x0006
|
||||
uint16 current_item; // 0x0008
|
||||
uint16 var_0A;
|
||||
sint8 vertical[RIDE_MEASUREMENT_MAX_ITEMS]; // 0x000C
|
||||
sint8 lateral[RIDE_MEASUREMENT_MAX_ITEMS]; // 0x12CC
|
||||
uint8 velocity[RIDE_MEASUREMENT_MAX_ITEMS]; // 0x258C
|
||||
uint8 altitude[RIDE_MEASUREMENT_MAX_ITEMS]; // 0x384C
|
||||
} rct_ride_measurement;
|
||||
|
||||
enum {
|
||||
|
@ -184,7 +218,7 @@ enum {
|
|||
|
||||
// Constants used by the lifecycle_flags property at 0x1D0
|
||||
enum {
|
||||
RIDE_LIFECYCLE_ON_TRACK = 1,
|
||||
RIDE_LIFECYCLE_ON_TRACK = 1 << 0,
|
||||
RIDE_LIFECYCLE_TESTED = 1 << 1,
|
||||
RIDE_LIFECYCLE_TEST_IN_PROGRESS = 1 << 2,
|
||||
RIDE_LIFECYCLE_NO_RAW_STATS = 1 << 3,
|
||||
|
@ -194,13 +228,14 @@ enum {
|
|||
RIDE_LIFECYCLE_BROKEN_DOWN = 1 << 7,
|
||||
|
||||
RIDE_LIFECYCLE_CRASHED = 1 << 10,
|
||||
|
||||
RIDE_LIFECYCLE_11 = 1 << 11,
|
||||
RIDE_LIFECYCLE_EVER_BEEN_OPENED = 1 << 12,
|
||||
RIDE_LIFECYCLE_MUSIC = 1 << 13,
|
||||
RIDE_LIFECYCLE_INDESTRUCTIBLE = 1 << 14,
|
||||
RIDE_LIFECYCLE_INDESTRUCTIBLE_TRACK = 1 << 15,
|
||||
|
||||
RIDE_LIFECYCLE_CABLE_LIFT = 1 << 17
|
||||
RIDE_LIFECYCLE_CABLE_LIFT = 1 << 17,
|
||||
RIDE_LIFECYCLE_19 = 1 << 19
|
||||
};
|
||||
|
||||
enum {
|
||||
|
@ -305,9 +340,9 @@ enum {
|
|||
};
|
||||
|
||||
enum {
|
||||
RIDE_MODE_NORMAL = 0,
|
||||
RIDE_MODE_NORMAL,
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT,
|
||||
RIDE_MODE_REVERSE_INCLINED_SHUTTLE,
|
||||
RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE,
|
||||
RIDE_MODE_POWERED_LAUNCH, // RCT1 style?
|
||||
RIDE_MODE_SHUTTLE,
|
||||
RIDE_MODE_BOAT_HIRE,
|
||||
|
@ -328,7 +363,7 @@ enum {
|
|||
RIDE_MODE_3D_FILM_MOUSE_TAILS,
|
||||
RIDE_MODE_SPACE_RINGS,
|
||||
RIDE_MODE_BEGINNERS,
|
||||
RIDE_MODE_LIM_POWERED_LAUNCH, // 0x17
|
||||
RIDE_MODE_LIM_POWERED_LAUNCH,
|
||||
RIDE_MODE_FILM_THRILL_RIDERS,
|
||||
RIDE_MODE_3D_FILM_STORM_CHASERS,
|
||||
RIDE_MODE_3D_FILM_SPACE_RAIDERS,
|
||||
|
@ -340,7 +375,7 @@ enum {
|
|||
RIDE_MODE_CROOKED_HOUSE,
|
||||
RIDE_MODE_FREEFALL_DROP,
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED,
|
||||
RIDE_MODE_POWERED_LAUNCH2, // 0x23. RCT2 style?
|
||||
RIDE_MODE_POWERED_LAUNCH_35, // RCT2 style?
|
||||
RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED
|
||||
};
|
||||
|
||||
|
@ -359,6 +394,109 @@ enum {
|
|||
RIDE_GROUP_SHOP
|
||||
};
|
||||
|
||||
enum {
|
||||
MUSIC_STYLE_DODGEMS_BEAT,
|
||||
MUSIC_STYLE_FAIRGROUND_ORGAN,
|
||||
MUSIC_STYLE_ROMAN_FANFARE,
|
||||
MUSIC_STYLE_ORIENTAL,
|
||||
MUSIC_STYLE_MARTIAN,
|
||||
MUSIC_STYLE_JUNGLE_DRUMS,
|
||||
MUSIC_STYLE_EGYPTIAN,
|
||||
MUSIC_STYLE_TOYLAND,
|
||||
MUSIC_STYLE_8,
|
||||
MUSIC_STYLE_SPACE,
|
||||
MUSIC_STYLE_HORROR,
|
||||
MUSIC_STYLE_TECHNO,
|
||||
MUSIC_STYLE_GENTLE,
|
||||
MUSIC_STYLE_SUMMER,
|
||||
MUSIC_STYLE_WATER,
|
||||
MUSIC_STYLE_WILD_WEST,
|
||||
MUSIC_STYLE_JURASSIC,
|
||||
MUSIC_STYLE_ROCK,
|
||||
MUSIC_STYLE_RAGTIME,
|
||||
MUSIC_STYLE_FANTASY,
|
||||
MUSIC_STYLE_ROCK_STYLE_2,
|
||||
MUSIC_STYLE_ICE,
|
||||
MUSIC_STYLE_SNOW,
|
||||
MUSIC_STYLE_CUSTOM_MUSIC_1,
|
||||
MUSIC_STYLE_CUSTOM_MUSIC_2,
|
||||
MUSIC_STYLE_MEDIEVAL,
|
||||
MUSIC_STYLE_URBAN,
|
||||
MUSIC_STYLE_ORGAN,
|
||||
MUSIC_STYLE_MECHANICAL,
|
||||
MUSIC_STYLE_MODERN,
|
||||
MUSIC_STYLE_PIRATES,
|
||||
MUSIC_STYLE_ROCK_STYLE_3,
|
||||
MUSIC_STYLE_CANDY_STYLE
|
||||
};
|
||||
|
||||
enum {
|
||||
BREAKDOWN_NONE = 255,
|
||||
BREAKDOWN_SAFETY_CUT_OUT = 0,
|
||||
BREAKDOWN_RESTRAINTS_STUCK_CLOSED,
|
||||
BREAKDOWN_RESTRAINTS_STUCK_OPEN,
|
||||
BREAKDOWN_DOORS_STUCK_CLOSED,
|
||||
BREAKDOWN_DOORS_STUCK_OPEN,
|
||||
BREAKDOWN_VEHICLE_MALFUNCTION,
|
||||
BREAKDOWN_BRAKES_FAILURE,
|
||||
BREAKDOWN_CONTROL_FAILURE
|
||||
};
|
||||
|
||||
enum {
|
||||
RIDE_MECHANIC_STATUS_CALLING = 1,
|
||||
RIDE_MECHANIC_STATUS_HEADING = 2,
|
||||
RIDE_MECHANIC_STATUS_FIXING = 3,
|
||||
};
|
||||
|
||||
enum {
|
||||
RIDE_DEPART_WAIT_FOR_LOAD_MASK = 7,
|
||||
RIDE_DEPART_WAIT_FOR_LOAD = 1 << 3,
|
||||
RIDE_DEPART_LEAVE_WHEN_ANOTHER_ARRIVES = 1 << 4,
|
||||
RIDE_DEPART_SYNCHRONISE_WITH_ADJACENT_STATIONS = 1 << 5,
|
||||
RIDE_DEPART_WAIT_FOR_MINIMUM_LENGTH = 1 << 6,
|
||||
RIDE_DEPART_WAIT_FOR_MAXIMUM_LENGTH = 1 << 7
|
||||
};
|
||||
|
||||
enum {
|
||||
RIDE_COLOUR_SCHEME_MAIN,
|
||||
RIDE_COLOUR_SCHEME_ADDITIONAL_1,
|
||||
RIDE_COLOUR_SCHEME_ADDITIONAL_2,
|
||||
RIDE_COLOUR_SCHEME_ADDITIONAL_3
|
||||
};
|
||||
|
||||
enum {
|
||||
VEHICLE_COLOUR_SCHEME_SAME,
|
||||
VEHICLE_COLOUR_SCHEME_PER_TRAIN,
|
||||
VEHICLE_COLOUR_SCHEME_PER_VEHICLE
|
||||
};
|
||||
|
||||
enum {
|
||||
RIDE_ENTRANCE_STYLE_PLAIN,
|
||||
RIDE_ENTRANCE_STYLE_WOODEN,
|
||||
RIDE_ENTRANCE_STYLE_CANVAS_TENT,
|
||||
RIDE_ENTRANCE_STYLE_CASTLE_GREY,
|
||||
RIDE_ENTRANCE_STYLE_CASTLE_BROWN,
|
||||
RIDE_ENTRANCE_STYLE_JUNGLE,
|
||||
RIDE_ENTRANCE_STYLE_LOG_CABIN,
|
||||
RIDE_ENTRANCE_STYLE_CLASSICAL_ROMAN,
|
||||
RIDE_ENTRANCE_STYLE_ABSTRACT,
|
||||
RIDE_ENTRANCE_STYLE_SNOW_ICE,
|
||||
RIDE_ENTRANCE_STYLE_PAGODA,
|
||||
RIDE_ENTRANCE_STYLE_SPACE
|
||||
};
|
||||
|
||||
typedef struct {
|
||||
uint8 main;
|
||||
uint8 additional;
|
||||
uint8 supports;
|
||||
} track_colour;
|
||||
|
||||
typedef struct {
|
||||
uint8 main;
|
||||
uint8 additional_1;
|
||||
uint8 additional_2;
|
||||
} vehicle_colour;
|
||||
|
||||
#define MAX_RIDES 255
|
||||
|
||||
#define MAX_RIDE_MEASUREMENTS 8
|
||||
|
@ -373,6 +511,7 @@ extern rct_ride* g_ride_list;
|
|||
/** Helper macros until rides are stored in this module. */
|
||||
#define GET_RIDE(x) (&g_ride_list[x])
|
||||
#define GET_RIDE_MEASUREMENT(x) (&(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_MEASUREMENTS, rct_ride_measurement)[x]))
|
||||
#define GET_RIDE_ENTRY(x) RCT2_ADDRESS(RCT2_ADDRESS_RIDE_ENTRIES, rct_ride_type*)[x]
|
||||
|
||||
/**
|
||||
* Helper macro loop for enumerating through all the non null rides.
|
||||
|
@ -394,6 +533,13 @@ rct_map_element *sub_6CAF80(int rideIndex, int *outX, int *outY);
|
|||
rct_map_element *ride_find_track_gap(rct_map_element *startTrackElement, int *outX, int *outY);
|
||||
void ride_construct_new(int list_item);
|
||||
int ride_try_construct(rct_map_element *trackMapElement);
|
||||
void ride_init_vehicle_speed(rct_ride *ride);
|
||||
void ride_get_status(int rideIndex, int *formatSecondary, int *argument);
|
||||
rct_peep *ride_get_assigned_mechanic(rct_ride *ride);
|
||||
int ride_get_total_length(rct_ride *ride);
|
||||
int ride_can_have_multiple_circuits(rct_ride *ride);
|
||||
track_colour ride_get_track_colour(rct_ride *ride, int colourScheme);
|
||||
vehicle_colour ride_get_vehicle_colour(rct_ride *ride, int vehicleIndex);
|
||||
rct_ride_type *ride_get_entry(rct_ride *ride);
|
||||
uint8 *get_ride_entry_indices_for_ride_type(uint8 rideType);
|
||||
|
||||
#endif
|
||||
|
|
189
src/ride_data.c
189
src/ride_data.c
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include <stdbool.h>
|
||||
#include "rct2.h"
|
||||
#include "ride.h"
|
||||
#include "ride_data.h"
|
||||
|
||||
const bool hasRunningTrack[0x60] = {
|
||||
|
@ -584,3 +585,191 @@ const uint8 rideUnknownData3[0x60] = {
|
|||
10, // 58 Mine Ride
|
||||
10, // 59 LIM Launched Roller Coaster
|
||||
};
|
||||
|
||||
const rct_ride_name_convention RideNameConvention[96] = {
|
||||
{ 1229, 1243, 1257, 0 }, // 00 Spiral Roller coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 01 Stand Up Coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 02 Suspended Swinging
|
||||
{ 1229, 1243, 1257, 0 }, // 03 Inverted
|
||||
{ 1229, 1243, 1257, 0 }, // 04 Steel Mini Coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 05 Mini Railroad
|
||||
{ 1229, 1243, 1257, 0 }, // 06 Monorail
|
||||
{ 1264, 1243, 1257, 0 }, // 07 Mini Suspended Coaster
|
||||
{ 1236, 1250, 1250, 0 }, // 08 Bumper Boats
|
||||
{ 1264, 1243, 1257, 0 }, // 09 Wooden Wild Mine/Mouse
|
||||
{ 1264, 1243, 1257, 0 }, // 0a Steeplechase/Motorbike/Soap Box Derby
|
||||
{ 1264, 1243, 1257, 0 }, // 0b Car Ride
|
||||
{ 1264, 1243, 1257, 0 }, // 0c Launched Freefall
|
||||
{ 1229, 1243, 1257, 0 }, // 0d Bobsleigh Coaster
|
||||
{ 1292, 1243, 1257, 0 }, // 0e Observation Tower
|
||||
{ 1229, 1243, 1257, 0 }, // 0f Looping Roller Coaster
|
||||
{ 1236, 1243, 1257, 0 }, // 10 Dinghy Slide
|
||||
{ 1229, 1243, 1257, 0 }, // 11 Mine Train Coaster
|
||||
{ 1264, 1243, 1257, 0 }, // 12 Chairlift
|
||||
{ 1229, 1243, 1257, 0 }, // 13 Corkscrew Roller Coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 14 Maze
|
||||
{ 1229, 1271, 1257, 0 }, // 15 Spiral Slide
|
||||
{ 1264, 1243, 1257, 0 }, // 16 Go Karts
|
||||
{ 1236, 1243, 1257, 0 }, // 17 Log Flume
|
||||
{ 1236, 1243, 1257, 0 }, // 18 River Rapids
|
||||
{ 1264, 1271, 1257, 0 }, // 19 Bumper Cars
|
||||
{ 1285, 1278, 1257, 0 }, // 1a Pirate Ship
|
||||
{ 1285, 1278, 1257, 0 }, // 1b Swinging Inverter Ship
|
||||
{ 1264, 1271, 1257, 0 }, // 1c Food Stall
|
||||
{ 1264, 1271, 1257, 0 }, // 1d (none)
|
||||
{ 1264, 1271, 1257, 0 }, // 1e Drink Stall
|
||||
{ 1264, 1271, 1257, 0 }, // 1f (none)
|
||||
{ 1264, 1271, 1257, 0 }, // 20 Shop (all types)
|
||||
{ 1264, 1278, 1257, 0 }, // 21 Merry Go Round
|
||||
{ 1264, 1271, 1257, 0 }, // 22 Balloon Stall (maybe)
|
||||
{ 1264, 1271, 1257, 0 }, // 23 Information Kiosk
|
||||
{ 1264, 1271, 1257, 0 }, // 24 Bathroom
|
||||
{ 1299, 1278, 1257, 0 }, // 25 Ferris Wheel
|
||||
{ 1264, 1278, 1257, 0 }, // 26 Motion Simulator
|
||||
{ 1271, 1278, 1257, 0 }, // 27 3D Cinema
|
||||
{ 1264, 1278, 1257, 0 }, // 28 Gravitron
|
||||
{ 1306, 1278, 1257, 0 }, // 29 Space Rings
|
||||
{ 1264, 1243, 1257, 0 }, // 2a Reverse Freefall Coaster
|
||||
{ 1292, 1243, 1257, 0 }, // 2b Elevator
|
||||
{ 1229, 1243, 1257, 0 }, // 2c Vertical Drop Roller Coaster
|
||||
{ 1264, 1271, 1257, 0 }, // 2d ATM
|
||||
{ 1278, 1278, 1257, 0 }, // 2e Twist
|
||||
{ 1271, 1278, 1257, 0 }, // 2f Haunted House
|
||||
{ 1264, 1271, 1257, 0 }, // 30 First Aid
|
||||
{ 1271, 1278, 1257, 0 }, // 31 Circus Show
|
||||
{ 1264, 1243, 1257, 0 }, // 32 Ghost Train
|
||||
{ 1229, 1243, 1257, 0 }, // 33 Twister Roller Coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 34 Wooden Roller Coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 35 Side-Friction Roller Coaster
|
||||
{ 1264, 1243, 1257, 0 }, // 36 Wild Mouse
|
||||
{ 1229, 1243, 1257, 0 }, // 37 Multi Dimension Coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 38 (none)
|
||||
{ 1229, 1243, 1257, 0 }, // 39 Flying Roller Coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 3a (none)
|
||||
{ 1264, 1243, 1257, 0 }, // 3b Virginia Reel
|
||||
{ 1236, 1243, 1257, 0 }, // 3c Splash Boats
|
||||
{ 1264, 1243, 1257, 0 }, // 3d Mini Helicopters
|
||||
{ 1229, 1243, 1257, 0 }, // 3e Lay-down Roller Coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 3f Suspended Monorail
|
||||
{ 1229, 1243, 1257, 0 }, // 40 (none)
|
||||
{ 1264, 1243, 1257, 0 }, // 41 Reverser Roller Coaster
|
||||
{ 1264, 1243, 1257, 0 }, // 42 Heartline Twister Roller Coaster
|
||||
{ 1313, 1320, 1257, 0 }, // 43 Mini Golf
|
||||
{ 1229, 1243, 1257, 0 }, // 44 Giga Coaster
|
||||
{ 1264, 1243, 1257, 0 }, // 45 Roto-Drop
|
||||
{ 1264, 1271, 1257, 0 }, // 46 Flying Saucers
|
||||
{ 1271, 1278, 1257, 0 }, // 47 Crooked House
|
||||
{ 1264, 1243, 1257, 0 }, // 48 Monorail Cycles
|
||||
{ 1229, 1243, 1257, 0 }, // 49 Compact Inverted Coaster
|
||||
{ 1236, 1243, 1257, 0 }, // 4a Water Coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 4b Air Powered Vertical Coaster
|
||||
{ 1264, 1243, 1257, 0 }, // 4c Inverted Hairpin Coaster
|
||||
{ 1264, 1278, 1257, 0 }, // 4d Magic Carpet
|
||||
{ 1236, 1243, 1250, 0 }, // 4e Submarine Ride
|
||||
{ 1236, 1243, 1257, 0 }, // 4f River Rafts
|
||||
{ 1264, 1271, 1257, 0 }, // 50 (none)
|
||||
{ 1299, 1278, 1257, 0 }, // 51 Enterprise
|
||||
{ 1264, 1271, 1257, 0 }, // 52 (none)
|
||||
{ 1264, 1271, 1257, 0 }, // 53 (none)
|
||||
{ 1264, 1271, 1257, 0 }, // 54 (none)
|
||||
{ 1229, 1243, 1257, 0 }, // 55 (none)
|
||||
{ 1229, 1243, 1257, 0 }, // 56 Inverted Impulse Coaster
|
||||
{ 1264, 1243, 1257, 0 }, // 57 Mini Roller Coaster
|
||||
{ 1229, 1243, 1257, 0 }, // 58 Mine Ride
|
||||
{ 1264, 1243, 1257, 0 }, // 59 LIM Launched Roller Coaster
|
||||
{ 1229, 1243, 1257, 0 }
|
||||
};
|
||||
|
||||
const uint8 RideAvailableModes[] = {
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 00 Spiral Roller coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 01 Stand Up Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 02 Suspended Swinging
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 03 Inverted
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 04 Steel Mini Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_SHUTTLE, 0xFF, // 05 Mini Railroad
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_SHUTTLE, 0xFF, // 06 Monorail
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 07 Mini Suspended Coaster
|
||||
RIDE_MODE_BOAT_HIRE, 0xFF, // 08 Bumper Boats
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 09 Wooden Wild Mine/Mouse
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 0A Steeplechase/Motorbike/Soap Box Derby
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 0B Car Ride
|
||||
RIDE_MODE_UPWARD_LAUNCH, RIDE_MODE_DOWNWARD_LAUNCH, 0xFF, // 0C Launched Freefall
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 0D Bobsleigh Coaster
|
||||
RIDE_MODE_ROTATING_LIFT, 0xFF, // 0E Observation Tower
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE, RIDE_MODE_POWERED_LAUNCH, 0xFF, // 0F Looping Roller Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 10 Dinghy Slide
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 11 Mine Train Coaster
|
||||
RIDE_MODE_STATION_TO_STATION, 0xFF, // 12 Chairlift
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0x23, 2, 0xFF, // 13 Corkscrew Roller Coaster
|
||||
RIDE_MODE_MAZE, 0xFF, // 14 Maze
|
||||
RIDE_MODE_SINGLE_RIDE_PER_ADMISSION, RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION, 0xFF, // 15 Spiral Slide
|
||||
RIDE_MODE_RACE, RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 16 Go Karts
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 17 Log Flume
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 18 River Rapids
|
||||
RIDE_MODE_BUMPERCAR, 0xFF, // 19 Bumper Cars
|
||||
RIDE_MODE_SWING, 0xFF, // 1A Pirate Ship
|
||||
RIDE_MODE_SWING, 0xFF, // 1B Swinging Inverter Ship
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 1C Food Stall
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 1D (none)
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 1E Drink Stall
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 1F (none)
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 20 Shop (all types)
|
||||
RIDE_MODE_ROTATION, 0xFF, // 21 Merry Go Round
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 22 Balloon Stall (maybe)
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 23 Information Kiosk
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 24 Bathroom
|
||||
RIDE_MODE_FORWARD_ROTATION, RIDE_MODE_BACKWARD_ROTATION, 0xFF, // 25 Ferris Wheel
|
||||
RIDE_MODE_FILM_AVENGING_AVIATORS, RIDE_MODE_FILM_THRILL_RIDERS, 0xFF, // 26 Motion Simulator
|
||||
RIDE_MODE_3D_FILM_MOUSE_TAILS, RIDE_MODE_3D_FILM_STORM_CHASERS, RIDE_MODE_3D_FILM_SPACE_RAIDERS, 0xFF, // 27 3D Cinema
|
||||
RIDE_MODE_BEGINNERS, RIDE_MODE_INTENSE, RIDE_MODE_BERSERK, 0xFF, // 28 Gravitron
|
||||
RIDE_MODE_SPACE_RINGS, 0xFF, // 29 Space Rings
|
||||
RIDE_MODE_LIM_POWERED_LAUNCH, 0xFF, // 2A Reverse Freefall Coaster
|
||||
RIDE_MODE_SHUTTLE, 0xFF, // 2B Elevator
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 2C Vertical Drop Roller Coaster
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 2D ATM
|
||||
RIDE_MODE_ROTATION, 0xFF, // 2E Twist
|
||||
RIDE_MODE_HAUNTED_HOUSE, 0xFF, // 2F Haunted House
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 30 First Aid
|
||||
RIDE_MODE_CIRCUS_SHOW, 0xFF, // 31 Circus Show
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 32 Ghost Train
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 33 Twister Roller Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 34 Wooden Roller Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 35 Side-Friction Roller Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 36 Wild Mouse
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 37 Multi Dimension Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 38 (none)
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 39 Flying Roller Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 3A (none)
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 3B Virginia Reel
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 3C Splash Boats
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 3D Mini Helicopters
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 3E Lay-down Roller Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_SHUTTLE, 0xFF, // 3F Suspended Monorail
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 40 (none)
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 41 Reverser Roller Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 42 Heartline Twister Roller Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 43 Mini Golf
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 44 Giga Coaster
|
||||
RIDE_MODE_FREEFALL_DROP, 0xFF, // 45 Roto-Drop
|
||||
RIDE_MODE_BUMPERCAR, 0xFF, // 46 Flying Saucers
|
||||
RIDE_MODE_CROOKED_HOUSE, 0xFF, // 47 Crooked House
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 48 Monorail Cycles
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 2, 0xFF, // 49 Compact Inverted Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 4A Water Coaster
|
||||
RIDE_MODE_POWERED_LAUNCH, 0xFF, // 4B Air Powered Vertical Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 4C Inverted Hairpin Coaster
|
||||
RIDE_MODE_SWING, 0xFF, // 4D Magic Carpet
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 4E Submarine Ride
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 4F River Rafts
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 50 (none)
|
||||
RIDE_MODE_ROTATION, 0xFF, // 51 Enterprise
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 52 (none)
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 53 (none)
|
||||
RIDE_MODE_SHOP_STALL, 0xFF, // 54 (none)
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 55 (none)
|
||||
RIDE_MODE_POWERED_LAUNCH, 0xFF, // 56 Inverted Impulse Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 57 Mini Roller Coaster
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, 0xFF, // 58 Mine Ride
|
||||
RIDE_MODE_CONTINUOUS_CIRCUIT, RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED, 0xFF, // 59 LIM Launched Roller Coaster
|
||||
RIDE_MODE_POWERED_LAUNCH_35, RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED, 0xFF // 60 (none)
|
||||
};
|
|
@ -23,6 +23,14 @@
|
|||
|
||||
#include <stdbool.h>
|
||||
#include "rct2.h"
|
||||
#include "string_ids.h"
|
||||
|
||||
typedef struct {
|
||||
rct_string_id vehicle_name;
|
||||
rct_string_id structure_name;
|
||||
rct_string_id station_name;
|
||||
rct_string_id unk_name;
|
||||
} rct_ride_name_convention;
|
||||
|
||||
extern const bool hasRunningTrack[0x60];
|
||||
extern const uint8 initialUpkeepCosts[0x60];
|
||||
|
@ -32,4 +40,7 @@ extern const uint8 rideUnknownData1[0x60];
|
|||
extern const bool rideUnknownData2[0x60];
|
||||
extern const uint8 rideUnknownData3[0x60];
|
||||
|
||||
extern const rct_ride_name_convention RideNameConvention[96];
|
||||
extern const uint8 RideAvailableModes[];
|
||||
|
||||
#endif
|
|
@ -56,9 +56,9 @@ void crooked_house_excitement(rct_ride *ride)
|
|||
ride->var_14D |= 2;
|
||||
|
||||
// clear all bits except lowest 5
|
||||
ride->var_114 &= 0x1f;
|
||||
ride->inversions &= 0x1F;
|
||||
// set 6th,7th,8th bits
|
||||
ride->var_114 |= 0xE0;
|
||||
ride->inversions |= 0xE0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -75,27 +75,22 @@ uint16 compute_upkeep(rct_ride *ride)
|
|||
uint16 upkeep = initialUpkeepCosts[ride->type];
|
||||
|
||||
uint16 trackCost = costPerTrackPiece[ride->type];
|
||||
uint8 dl = ride->var_115;
|
||||
uint8 dl = ride->drops;
|
||||
|
||||
dl = dl >> 6;
|
||||
dl = dl & 3;
|
||||
upkeep += trackCost * dl;
|
||||
|
||||
uint32 cuml = ride->var_0E4;
|
||||
cuml += ride->var_0E8;
|
||||
cuml += ride->var_0EC;
|
||||
cuml += ride->var_0F0;
|
||||
cuml = cuml >> 0x10;
|
||||
uint32 totalLength = (ride->length[0] + ride->length[1] + ride->length[2] + ride->length[3]) >> 16;
|
||||
|
||||
// The data originally here was 20's and 0's. The 20's all represented
|
||||
// rides that had tracks. The 0's were fixed rides like crooked house or
|
||||
// bumper cars.
|
||||
// Data source is 0x0097E3AC
|
||||
if (hasRunningTrack[ride->type]) {
|
||||
cuml = cuml * 20;
|
||||
totalLength *= 20;
|
||||
}
|
||||
cuml = cuml >> 0x0A;
|
||||
upkeep += (uint16)cuml;
|
||||
upkeep += (uint16)(totalLength >> 10);
|
||||
|
||||
if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_RIDE_PHOTO) {
|
||||
// The original code read from a table starting at 0x0097E3AE and
|
||||
|
@ -130,24 +125,24 @@ uint16 compute_upkeep(rct_ride *ride)
|
|||
// various variables set on the ride itself.
|
||||
|
||||
// https://gist.github.com/kevinburke/e19b803cd2769d96c540
|
||||
upkeep += rideUnknownData1[ride->type] * ride->var_0C8;
|
||||
upkeep += rideUnknownData1[ride->type] * ride->num_vehicles;
|
||||
|
||||
// either set to 3 or 0, extra boosts for some rides including mini golf
|
||||
if (rideUnknownData2[ride->type]) {
|
||||
upkeep += 3 * ride->var_0C9;
|
||||
upkeep += 3 * ride->num_cars_per_train;
|
||||
}
|
||||
|
||||
// slight upkeep boosts for some rides - 5 for mini railroad, 10 for log
|
||||
// flume/rapids, 10 for roller coaster, 28 for giga coaster
|
||||
upkeep += rideUnknownData3[ride->type] * ride->var_0C7;
|
||||
upkeep += rideUnknownData3[ride->type] * ride->num_stations;
|
||||
|
||||
if (ride->mode == RIDE_MODE_REVERSE_INCLINED_SHUTTLE) {
|
||||
if (ride->mode == RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE) {
|
||||
upkeep += 30;
|
||||
} else if (ride->mode == RIDE_MODE_POWERED_LAUNCH) {
|
||||
upkeep += 160;
|
||||
} else if (ride->mode == RIDE_MODE_LIM_POWERED_LAUNCH) {
|
||||
upkeep += 320;
|
||||
} else if (ride->mode == RIDE_MODE_POWERED_LAUNCH2 ||
|
||||
} else if (ride->mode == RIDE_MODE_POWERED_LAUNCH_35 ||
|
||||
ride->mode == RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED) {
|
||||
upkeep += 220;
|
||||
}
|
||||
|
@ -184,7 +179,7 @@ rating_tuple per_ride_rating_adjustments(rct_ride *ride, ride_rating excitement,
|
|||
// more detail: https://gist.github.com/kevinburke/d951e74e678b235eef3e
|
||||
uint16 ridetype_var = RCT2_GLOBAL(0x0097D4F2 + ride->type * 8, uint16);
|
||||
if (ridetype_var & 0x80) {
|
||||
uint16 ax = ride->var_1F4;
|
||||
uint16 ax = ride->total_air_time;
|
||||
if (rideType->var_008 & 0x800) {
|
||||
// 65e86e
|
||||
ax = ax - 96;
|
||||
|
@ -244,7 +239,7 @@ ride_rating apply_intensity_penalty(ride_rating excitement, ride_rating intensit
|
|||
*/
|
||||
void sub_655FD6(rct_ride *ride)
|
||||
{
|
||||
uint8 al = ride->var_1CD;
|
||||
uint8 al = ride->lift_hill_speed;
|
||||
// No idea what this address is; maybe like compensation of some kind? The
|
||||
// maximum possible value?
|
||||
// List of ride names/values is here:
|
||||
|
|
|
@ -419,13 +419,7 @@ void scenario_objective8_check()
|
|||
ride->status == RIDE_STATUS_OPEN &&
|
||||
ride->excitement >= RIDE_RATING(7,00) && type_already_counted[subtype_id] == 0){
|
||||
|
||||
// this calculates the length, no idea why it's done so complicated though.
|
||||
uint8 limit = ride->var_0C7;
|
||||
uint32 sum = 0;
|
||||
for (int j = 0; j < limit; ++j) {
|
||||
sum += ((uint32*)&ride->var_0E4)[j];
|
||||
}
|
||||
if ((sum >> 16) > (uint32)objective_length) {
|
||||
if ((ride_get_total_length(ride) >> 16) > objective_length) {
|
||||
type_already_counted[subtype_id]++;
|
||||
rcs++;
|
||||
}
|
||||
|
|
|
@ -44,6 +44,8 @@ enum {
|
|||
|
||||
SPR_RESIZE = 5058,
|
||||
|
||||
SPR_CONSTRUCTION = 5164,
|
||||
SPR_DEMOLISH = 5165,
|
||||
SPR_HEARING_VIEWPORT = 5166,
|
||||
SPR_LOCATE = 5167,
|
||||
SPR_RENAME = 5168,
|
||||
|
|
363
src/string_ids.h
363
src/string_ids.h
|
@ -252,6 +252,20 @@ enum {
|
|||
STR_LOWER_COST_AMOUNT = 985,
|
||||
STR_COST_AMOUNT = 986,
|
||||
|
||||
STR_CONSTRUCTION = 990,
|
||||
|
||||
STR_DEMOLISH_RIDE_TIP = 992,
|
||||
|
||||
STR_OVERALL_VIEW = 996,
|
||||
STR_VIEW_SELECTION = 997,
|
||||
|
||||
STR_CANT_OPEN = 1002,
|
||||
STR_CANT_TEST = 1003,
|
||||
STR_CANT_CLOSE = 1004,
|
||||
STR_CANT_START_CONSTRUCTION_ON = 1005,
|
||||
STR_MUST_BE_CLOSED_FIRST = 1006,
|
||||
STR_UNABLE_TO_CREATE_ENOUGH_VEHICLES = 1007,
|
||||
STR_OPEN_CLOSE_OR_TEST_RIDE = 1008,
|
||||
STR_OPEN_OR_CLOSE_ALL_RIDES = 1009,
|
||||
STR_OPEN_OR_CLOSE_PARK_TIP = 1010,
|
||||
STR_CLOSE_ALL = 1011,
|
||||
|
@ -259,6 +273,8 @@ enum {
|
|||
STR_CLOSE_PARK = 1013,
|
||||
STR_OPEN_PARK = 1014,
|
||||
|
||||
STR_CANT_CHANGE_OPERATING_MODE = 1017,
|
||||
|
||||
STR_LOCATE_SUBJECT_TIP = 1027,
|
||||
|
||||
STR_LOAD_GAME_DIALOG_TITLE = 1036,
|
||||
|
@ -268,6 +284,99 @@ enum {
|
|||
STR_RCT2_LANDSCAPE_FILE = 1045,
|
||||
|
||||
STR_RIDES_IN_PARK_TIP = 1053,
|
||||
STR_NAME_RIDE_TIP = 1054,
|
||||
|
||||
STR_RIDE_ATTRACTION_NAME = 1057,
|
||||
STR_ENTER_NEW_NAME_FOR_THIS_RIDE_ATTRACTION = 1058,
|
||||
STR_CANT_RENAME_RIDE_ATTRACTION = 1059,
|
||||
STR_INVALID_RIDE_ATTRACTION_NAME = 1060,
|
||||
|
||||
STR_RIDE_MODE_START = 1061,
|
||||
STR_RIDE_MODE_NORMAL = STR_RIDE_MODE_START + 0,
|
||||
STR_RIDE_MODE_CONTINUOUS_CIRCUIT = STR_RIDE_MODE_START + 1,
|
||||
STR_RIDE_MODE_REVERSE_INCLINE_LAUNCHED_SHUTTLE = STR_RIDE_MODE_START + 2,
|
||||
STR_RIDE_MODE_POWERED_LAUNCH = STR_RIDE_MODE_START + 3,
|
||||
STR_RIDE_MODE_SHUTTLE = STR_RIDE_MODE_START + 4,
|
||||
STR_RIDE_MODE_BOAT_HIRE = STR_RIDE_MODE_START + 5,
|
||||
STR_RIDE_MODE_UPWARD_LAUNCH = STR_RIDE_MODE_START + 6,
|
||||
STR_RIDE_MODE_ROTATING_LIFT = STR_RIDE_MODE_START + 7,
|
||||
STR_RIDE_MODE_STATION_TO_STATION = STR_RIDE_MODE_START + 8,
|
||||
STR_RIDE_MODE_SINGLE_RIDE_PER_ADMISSION = STR_RIDE_MODE_START + 9,
|
||||
STR_RIDE_MODE_UNLIMITED_RIDES_PER_ADMISSION = STR_RIDE_MODE_START + 10,
|
||||
STR_RIDE_MODE_MAZE = STR_RIDE_MODE_START + 11,
|
||||
STR_RIDE_MODE_RACE = STR_RIDE_MODE_START + 12,
|
||||
STR_RIDE_MODE_BUMPER_CAR = STR_RIDE_MODE_START + 13,
|
||||
STR_RIDE_MODE_SWING = STR_RIDE_MODE_START + 14,
|
||||
STR_RIDE_MODE_SHOP_STALL = STR_RIDE_MODE_START + 15,
|
||||
STR_RIDE_MODE_ROTATION = STR_RIDE_MODE_START + 16,
|
||||
STR_RIDE_MODE_FORWARD_ROTATION = STR_RIDE_MODE_START + 17,
|
||||
STR_RIDE_MODE_BACKWARD_ROTATION = STR_RIDE_MODE_START + 18,
|
||||
STR_RIDE_MODE_FILM_AVENGING_AVIATORS = STR_RIDE_MODE_START + 19,
|
||||
STR_RIDE_MODE_3D_FILM_MOUSE_TAILS = STR_RIDE_MODE_START + 20,
|
||||
STR_RIDE_MODE_SPACE_RINGS = STR_RIDE_MODE_START + 21,
|
||||
STR_RIDE_MODE_BEGINNERS = STR_RIDE_MODE_START + 22,
|
||||
STR_RIDE_MODE_LIM_POWERED_LAUNCH = STR_RIDE_MODE_START + 23,
|
||||
STR_RIDE_MODE_FILM_THRILL_RIDERS = STR_RIDE_MODE_START + 24,
|
||||
STR_RIDE_MODE_3D_FILM_STORM_CHASERS = STR_RIDE_MODE_START + 25,
|
||||
STR_RIDE_MODE_3D_FILM_SPACE_RAIDERS = STR_RIDE_MODE_START + 26,
|
||||
STR_RIDE_MODE_INTENSE = STR_RIDE_MODE_START + 27,
|
||||
STR_RIDE_MODE_BERSERK = STR_RIDE_MODE_START + 28,
|
||||
STR_RIDE_MODE_HAUNTED_HOUSE = STR_RIDE_MODE_START + 29,
|
||||
STR_RIDE_MODE_CIRCUS_SHOW = STR_RIDE_MODE_START + 30,
|
||||
STR_RIDE_MODE_DOWNWARD_LAUNCH = STR_RIDE_MODE_START + 31,
|
||||
STR_RIDE_MODE_CROOKED_HOUSE = STR_RIDE_MODE_START + 32,
|
||||
STR_RIDE_MODE_FREEFALL_DROP = STR_RIDE_MODE_START + 33,
|
||||
STR_RIDE_MODE_CONTINUOUS_CIRCUIT_BLOCK_SECTIONED = STR_RIDE_MODE_START + 34,
|
||||
STR_RIDE_MODE_POWERED_LAUNCH_35 = STR_RIDE_MODE_START + 35,
|
||||
STR_RIDE_MODE_POWERED_LAUNCH_BLOCK_SECTIONED_MODE = STR_RIDE_MODE_START + 36,
|
||||
|
||||
STR_MOVING_TO_END_OF = 1098,
|
||||
STR_WAITING_FOR_PASSENGERS_AT = 1099,
|
||||
STR_WAITING_TO_DEPART = 1100,
|
||||
STR_DEPARTING = 1101,
|
||||
STR_TRAVELLING_AT_0 = 1102,
|
||||
STR_ARRIVING_AT = 1103,
|
||||
STR_UNLOADING_PASSENGERS_AT = 1104,
|
||||
STR_TRAVELLING_AT_1 = 1105,
|
||||
STR_CRASHING = 1106,
|
||||
STR_CRASHED_0 = 1107,
|
||||
STR_TRAVELLING_AT_2 = 1108,
|
||||
STR_SWINGING = 1109,
|
||||
STR_ROTATING_0 = 1110,
|
||||
STR_ROTATING_1 = 1111,
|
||||
STR_OPERATING_0 = 1112,
|
||||
STR_SHOWING_FILM = 1113,
|
||||
STR_ROTATING_2 = 1114,
|
||||
STR_OPERATING_1 = 1115,
|
||||
STR_OPERATING_2 = 1116,
|
||||
STR_DOING_CIRCUS_SHOW = 1117,
|
||||
STR_OPERATING_3 = 1118,
|
||||
STR_WAITING_FOR_CABLE_LIFT = 1119,
|
||||
STR_TRAVELLING_AT_3 = 1120,
|
||||
STR_STOPPING_0 = 1121,
|
||||
STR_WAITING_FOR_PASSENGERS = 1122,
|
||||
STR_WAITING_TO_START = 1123,
|
||||
STR_STARTING = 1124,
|
||||
STR_OPERATING = 1125,
|
||||
STR_STOPPING_1 = 1126,
|
||||
STR_UNLOADING_PASSENGERS = 1127,
|
||||
STR_STOPPED_BY_BLOCK_BRAKES = 1128,
|
||||
STR_ALL_VEHICLES_IN_SAME_COLOURS = 1129,
|
||||
STR_DIFFERENT_COLOURS_PER = 1130,
|
||||
STR_DIFFERENT_COLOURS_PER_VEHICLE = 1131,
|
||||
|
||||
STR_SELECT_MAIN_COLOUR_TIP = 1136,
|
||||
STR_SELECT_ADDITIONAL_COLOUR_1_TIP = 1137,
|
||||
STR_SELECT_ADDITIONAL_COLOUR_2_TIP = 1138,
|
||||
STR_SELECT_SUPPORT_STRUCTURE_COLOUR_TIP = 1139,
|
||||
STR_SELECT_VEHICLE_COLOUR_SCHEME_TIP = 1140,
|
||||
STR_SELECT_VEHICLE_TO_MODIFY_TIP = 1141,
|
||||
|
||||
STR_QUARTER_LOAD = 1148,
|
||||
STR_HALF_LOAD = 1149,
|
||||
STR_THREE_QUARTER_LOAD = 1150,
|
||||
STR_FULL_LOAD = 1151,
|
||||
STR_ANY_LOAD = 1152,
|
||||
|
||||
STR_PLACE_SCENERY_TIP = 1159,
|
||||
STR_ADJUST_WATER_TIP = 1160,
|
||||
|
@ -305,10 +414,24 @@ enum {
|
|||
STR_QUEUE_PEOPLE = 1203,
|
||||
STR_QUEUE_TIME_LABEL = 1204,
|
||||
STR_QUEUE_TIME_PLURAL_LABEL = 1205,
|
||||
STR_WAIT_FOR = 1206,
|
||||
|
||||
STR_LEAVE_IF_ANOTHER_TRAIN_ARRIVES = 1207,
|
||||
STR_LEAVE_IF_ANOTHER_BOAT_ARRIVES = 1208,
|
||||
STR_WAIT_FOR_PASSENGERS_BEFORE_DEPARTING_TIP = 1209,
|
||||
STR_LEAVE_IF_ANOTHER_VEHICLE_ARRIVES_TIP = 1210,
|
||||
STR_MINIMUM_WAITING_TIME = 1211,
|
||||
STR_MAXIMUM_WAITING_TIME = 1212,
|
||||
STR_MINIMUM_LENGTH_BEFORE_DEPARTING_TIP = 1213,
|
||||
STR_MAXIMUM_LENGTH_BEFORE_DEPARTING_TIP = 1214,
|
||||
STR_SYNCHRONISE_WITH_ADJACENT_STATIONS = 1215,
|
||||
STR_SYNCHRONISE_WITH_ADJACENT_STATIONS_TIP = 1216,
|
||||
|
||||
STR_NUMERIC_UP = 1218,
|
||||
STR_NUMERIC_DOWN = 1219,
|
||||
|
||||
STR_EXIT_ONLY = 1220,
|
||||
STR_NO_ENTRANCE = 1221,
|
||||
STR_NO_EXIT = 1222,
|
||||
STR_TRANSPORT_RIDES_TIP = 1223,
|
||||
STR_GENTLE_RIDES_TIP = 1224,
|
||||
STR_ROLLER_COASTERS_TIP = 1225,
|
||||
|
@ -317,13 +440,47 @@ enum {
|
|||
STR_SHOPS_STALLS_TIP = 1228,
|
||||
|
||||
STR_ROTATE_OBJECTS_90 = 1327,
|
||||
STR_LAUNCH_SPEED = 1329,
|
||||
STR_LAUNCH_SPEED_TIP = 1330,
|
||||
|
||||
STR_NO_TEST_RESULTS_YET = 1339,
|
||||
STR_MAX_SPEED = 1340,
|
||||
STR_RIDE_TIME = 1341,
|
||||
STR_RIDE_LENGTH = 1344,
|
||||
STR_AVERAGE_SPEED = 1347,
|
||||
STR_MAX_POSITIVE_VERTICAL_G = 1348,
|
||||
STR_MAX_POSITIVE_VERTICAL_G_RED = 1349,
|
||||
STR_MAX_NEGATIVE_VERTICAL_G = 1350,
|
||||
STR_MAX_NEGATIVE_VERTICAL_G_RED = 1351,
|
||||
STR_MAX_LATERAL_G = 1352,
|
||||
STR_MAX_LATERAL_G_RED = 1353,
|
||||
STR_HIGHEST_DROP_HEIGHT = 1354,
|
||||
STR_DROPS = 1355,
|
||||
STR_INVERSIONS = 1356,
|
||||
STR_HOLES = 1357,
|
||||
STR_TOTAL_AIR_TIME = 1358,
|
||||
STR_QUEUE_TIME_MINUTE = 1359,
|
||||
STR_QUEUE_TIME_MINUTES = 1360,
|
||||
|
||||
STR_VIEW_OF_RIDE_ATTRACTION_TIP = 1392,
|
||||
STR_VEHICLE_DETAILS_AND_OPTIONS_TIP = 1393,
|
||||
STR_OPERATING_OPTIONS_TIP = 1394,
|
||||
STR_MAINTENANCE_OPTIONS_TIP = 1395,
|
||||
STR_COLOUR_SCHEME_OPTIONS_TIP = 1396,
|
||||
STR_SOUND_AND_MUSIC_OPTIONS_TIP = 1397,
|
||||
STR_MEASUREMENTS_AND_TEST_DATA_TIP = 1398,
|
||||
STR_GRAPHS_TIP = 1399,
|
||||
|
||||
STR_BUILD_THIS = 1407,
|
||||
STR_COST_LABEL = 1408,
|
||||
|
||||
STR_LOGGING_DATA_FROM_TIP = 1422,
|
||||
STR_QUEUE_LINE_PATH_TIP = 1423,
|
||||
STR_FOOTPATH_TIP = 1424,
|
||||
|
||||
STR_CUSTOMERS_PER_HOUR = 1427,
|
||||
STR_RIDE_INCOME_ADMISSION_PRICE = 1428,
|
||||
|
||||
STR_FREE = 1430,
|
||||
STR_WALKING = 1431,
|
||||
STR_HEADING_FOR = 1432,
|
||||
|
@ -348,14 +505,36 @@ enum {
|
|||
|
||||
STR_STAFF = 1468,
|
||||
|
||||
STR_SPEED = 1471,
|
||||
STR_SPEED_TIP = 1472,
|
||||
|
||||
STR_EXCITEMENT_RATING = 1473,
|
||||
STR_EXCITEMENT_RATING_NOT_YET_AVAILABLE = 1474,
|
||||
STR_INTENSITY_RATING = 1475,
|
||||
STR_INTENSITY_RATING_NOT_YET_AVAILABLE = 1476,
|
||||
STR_INTENSITY_RATING_RED = 1477,
|
||||
STR_NAUSEA_RATING = 1478,
|
||||
STR_NAUSEA_RATING_NOT_YET_AVAILABLE = 1479,
|
||||
|
||||
STR_THOUGHT_START = 1480,
|
||||
|
||||
STR_CONSTRUCT_FOOTPATH_ON_LAND_TIP = 1655,
|
||||
STR_CONSTRUCT_BRIDGE_OR_TUNNEL_FOOTPATH_TIP = 1656,
|
||||
|
||||
STR_SATISFACTION_UNKNOWN = 1668,
|
||||
STR_SATISFACTION_PERCENT = 1669,
|
||||
STR_TOTAL_CUSTOMERS = 1670,
|
||||
STR_TOTAL_PROFIT = 1671,
|
||||
|
||||
STR_POPULARITY_UNKNOWN = 1677,
|
||||
STR_POPULARITY_PERCENT = 1678,
|
||||
|
||||
STR_GUESTS_TIP = 1693,
|
||||
STR_STAFF_TIP = 1694,
|
||||
|
||||
STR_INCOME_AND_COSTS_TIP = 1695,
|
||||
STR_CUSTOMER_INFORMATION_TIP = 1696,
|
||||
|
||||
STR_TOO_MANY_PEOPLE_IN_GAME = 1699,
|
||||
STR_HIRE_HANDYMAN = 1700,
|
||||
STR_HIRE_MECHANIC = 1701,
|
||||
|
@ -376,12 +555,25 @@ enum {
|
|||
STR_CANT_OPEN_PARK = 1723,
|
||||
STR_CANT_CLOSE_PARK = 1724,
|
||||
|
||||
STR_NUMBER_OF_LAPS = 1734,
|
||||
STR_NUMBER_OF_LAPS_TIP = 1735,
|
||||
|
||||
STR_RACE_WON_BY_GUEST = 1739,
|
||||
STR_RACE_WON_BY = 1740,
|
||||
|
||||
STR_MAX_PEOPLE_ON_RIDE = 1742,
|
||||
STR_MAX_PEOPLE_ON_RIDE_TIP = 1743,
|
||||
|
||||
STR_TIME_LIMIT = 1747,
|
||||
STR_TIME_LIMIT_TIP = 1748,
|
||||
|
||||
STR_INDIVIDUAL_GUESTS_TIP = 1752,
|
||||
STR_SUMMARISED_GUESTS_TIP = 1753,
|
||||
STR_ADMISSION_PRICE = 1756,
|
||||
STR_RELIABILITY_LABEL_1757 = 1757,
|
||||
|
||||
STR_NUMBER_OF_SWINGS = 1769,
|
||||
STR_NUMBER_OF_SWINGS_TIP = 1770,
|
||||
|
||||
STR_OFF = 1775,
|
||||
STR_ON = 1776,
|
||||
|
@ -394,6 +586,18 @@ enum {
|
|||
STR_FIXING_RIDE = 1794,
|
||||
STR_ANSWERING_RADIO_CALL = 1795,
|
||||
|
||||
STR_SAFETY_CUT_OUT = 1800,
|
||||
STR_RESTRAINTS_STUCK_CLOSED = 1801,
|
||||
STR_RESTRAINTS_STUCK_OPEN = 1802,
|
||||
STR_DOORS_STUCK_CLOSED = 1803,
|
||||
STR_DOORS_STUCK_OPEN = 1804,
|
||||
STR_VEHICLE_MALFUNCTION = 1805,
|
||||
STR_BRAKES_FAILURE = 1806,
|
||||
STR_CONTROL_FAILURE = 1807,
|
||||
|
||||
STR_LAST_BREAKDOWN = 1808,
|
||||
STR_CURRENT_BREAKDOWN = 1809,
|
||||
|
||||
STR_ACTIONS = 1814,
|
||||
STR_THOUGHTS = STR_ACTIONS + 1,
|
||||
STR_INFORMATION_TYPE_TIP = 1816,
|
||||
|
@ -404,6 +608,10 @@ enum {
|
|||
STR_GUESTS_FILTER_THINKING = STR_GUESTS_FILTER + 1,
|
||||
STR_GUESTS_FILTER_THINKING_ABOUT = STR_GUESTS_FILTER + 2,
|
||||
|
||||
STR_SHOW_GUESTS_THOUGHTS_ABOUT_THIS_RIDE_ATTRACTION_TIP = 1823,
|
||||
STR_SHOW_GUESTS_ON_THIS_RIDE_ATTRACTION_TIP = 1824,
|
||||
STR_SHOW_GUESTS_QUEUING_FOR_THIS_RIDE_ATTRACTION_TIP = 1825,
|
||||
|
||||
STR_STATUS = 1826,
|
||||
STR_POPULARITY = 1827,
|
||||
STR_SATISFACTION = 1828,
|
||||
|
@ -425,6 +633,18 @@ enum {
|
|||
STR_RIDE_LIST_INFORMATION_TYPE_TIP = 1844,
|
||||
STR_NUM_GUESTS = 1846,
|
||||
|
||||
STR_PLAY_MUSIC = 1849,
|
||||
STR_SELECT_MUSIC_TIP = 1850,
|
||||
STR_RUNNING_COST_PER_HOUR = 1851,
|
||||
STR_RUNNING_COST_UNKNOWN = 1852,
|
||||
STR_BUILT_THIS_YEAR = 1853,
|
||||
STR_BUILT_LAST_YEAR = 1854,
|
||||
STR_BUILT_YEARS_AGO = 1855,
|
||||
|
||||
STR_PROFIT_PER_ITEM_SOLD = 1856,
|
||||
STR_LOSS_PER_ITEM_SOLD = 1857,
|
||||
STR_COST_PER_MONTH = 1858,
|
||||
|
||||
STR_HANDYMAN_PLURAL = 1859,
|
||||
STR_MECHANIC_PLURAL = 1860,
|
||||
STR_SECURITY_GUARD_PLURAL = 1861,
|
||||
|
@ -435,8 +655,32 @@ enum {
|
|||
STR_ENTERTAINER_SINGULAR = 1866,
|
||||
STR_STAFF_LIST_COUNTER = 1867,
|
||||
|
||||
STR_NUMBER_OF_ROTATIONS = 1869,
|
||||
STR_NUMBER_OF_ROTATIONS_TIP = 1870,
|
||||
|
||||
STR_INCOME_PER_HOUR = 1873,
|
||||
STR_PROFIT_PER_HOUR = 1874,
|
||||
|
||||
STR_INSPECT_RIDES = 1876,
|
||||
STR_FIX_RIDES = 1877,
|
||||
STR_INSPECTION = 1878,
|
||||
|
||||
STR_EVERY_10_MINUTES = 1879,
|
||||
STR_EVERY_20_MINUTES = 1880,
|
||||
STR_EVERY_30_MINUTES = 1881,
|
||||
STR_EVERY_45_MINUTES = 1882,
|
||||
STR_EVERY_HOUR = 1883,
|
||||
STR_EVERY_2_HOURS = 1884,
|
||||
STR_NEVER = 1885,
|
||||
|
||||
STR_INSPECTING_RIDE = 1886,
|
||||
|
||||
STR_TIME_SINCE_LAST_INSPECTION_MINUTES = 1887,
|
||||
STR_TIME_SINCE_LAST_INSPECTION_MORE_THAN_4_HOURS = 1888,
|
||||
STR_DOWN_TIME_LABEL_1889 = 1889,
|
||||
STR_SELECT_HOW_OFTEN_A_MECHANIC_SHOULD_CHECK_THIS_RIDE = 1890,
|
||||
|
||||
STR_ITEMS_SOLD = 1894,
|
||||
STR_BUILD_RIDE_TIP = 1895,
|
||||
STR_FINANCES_SUMMARY_EXPENDITURE_INCOME = 1896,
|
||||
STR_FINANCES_SUMMARY_RIDE_CONSTRUCTION = 1897,
|
||||
|
@ -481,6 +725,16 @@ enum {
|
|||
STR_MARKETING = 1953,
|
||||
STR_RESEARCH_FUNDING = 1954,
|
||||
|
||||
STR_NUMBER_OF_CIRCUITS = 1955,
|
||||
STR_NUMBER_OF_CIRCUITS_TIP = 1956,
|
||||
|
||||
STR_ON_RIDE_PHOTO_PRICE = 1963,
|
||||
|
||||
STR_MAIN_COLOUR_SCHEME = 2971,
|
||||
STR_ALTERNATIVE_COLOUR_SCHEME_1 = 2972,
|
||||
STR_ALTERNATIVE_COLOUR_SCHEME_2 = 2973,
|
||||
STR_ALTERNATIVE_COLOUR_SCHEME_3 = 2974,
|
||||
|
||||
STR_ITEM_START = 1988,
|
||||
STR_ITEM_SINGULAR_START = 2044,
|
||||
STR_ITEM2_START = 2090,
|
||||
|
@ -609,12 +863,12 @@ enum {
|
|||
STR_LOW = 2369,
|
||||
STR_AVERAGE = 2370,
|
||||
STR_HIGH = 2371,
|
||||
//STR_LOW = 2372,
|
||||
STR_MEDIUM = 2373,
|
||||
//STR_HIGH = 2374,
|
||||
STR_VERY_HIGH = 2375,
|
||||
STR_EXTREME = 2376,
|
||||
STR_ULTRA_EXTREME = 2377,
|
||||
STR_RATING_LOW = 2372,
|
||||
STR_RATING_MEDIUM = 2373,
|
||||
STR_RATING_HIGH = 2374,
|
||||
STR_RATING_VERY_HIGH = 2375,
|
||||
STR_RATING_EXTREME = 2376,
|
||||
STR_RATING_ULTRA_EXTREME = 2377,
|
||||
|
||||
STR_ADJUST_SMALLER_LAND_TIP = 2378,
|
||||
STR_ADJUST_LARGER_LAND_TIP = 2379,
|
||||
|
@ -709,6 +963,13 @@ enum {
|
|||
STR_RESEARCH_NEW_SHOPS_AND_STALLS = 2475,
|
||||
STR_RESEARCH_NEW_SCENERY_AND_THEMING = 2476,
|
||||
|
||||
STR_SELECT_OPERATING_MODE = 2477,
|
||||
|
||||
STR_SHOW_GRAPH_OF_VELOCITY_AGAINST_TIME_TIP = 2478,
|
||||
STR_SHOW_GRAPH_OF_ALTITUDE_AGAINST_TIME_TIP = 2479,
|
||||
STR_SHOW_GRAPH_OF_VERTICAL_ACCELERATION_AGAINST_TIME_TIP = 2480,
|
||||
STR_SHOW_GRAPH_OF_LATERAL_ACCELERATION_AGAINST_TIME_TIP = 2481,
|
||||
|
||||
STR_PROFIT_PER_WEEK_AND_PARK_VALUE_TIP = 2482,
|
||||
STR_FINANCES_WEEKLY_PROFIT_POSITIVE = 2483,
|
||||
STR_FINANCES_WEEKLY_PROFIT_LOSS = 2484,
|
||||
|
@ -808,19 +1069,83 @@ enum {
|
|||
STR_LICENCE_AGREEMENT_NOTICE_1 = 2969,
|
||||
STR_LICENCE_AGREEMENT_NOTICE_2 = 2970,
|
||||
|
||||
STR_COLOUR_SCHEME_TO_CHANGE_TIP = 2975,
|
||||
STR_PAINT_INDIVIDUAL_AREA_TIP = 2976,
|
||||
|
||||
STR_UNABLE_TO_LOAD_FILE = 3010,
|
||||
STR_FILE_CONTAINS_INVALID_DATA = 3011,
|
||||
|
||||
STR_MUSIC_STYLE_START = 3012,
|
||||
STR_DODGEMS_BEAT_STYLE = STR_MUSIC_STYLE_START + 0,
|
||||
STR_FAIRGROUND_ORGAN_STYLE = STR_MUSIC_STYLE_START + 1,
|
||||
STR_ROMAN_FANFARE_STYLE = STR_MUSIC_STYLE_START + 2,
|
||||
STR_ORIENTAL_STYLE = STR_MUSIC_STYLE_START + 3,
|
||||
STR_MARTIAN_STYLE = STR_MUSIC_STYLE_START + 4,
|
||||
STR_JUNGLE_DRUMS_STYLE = STR_MUSIC_STYLE_START + 5,
|
||||
STR_EGYPTIAN_STYLE = STR_MUSIC_STYLE_START + 6,
|
||||
STR_TOYLAND_STYLE = STR_MUSIC_STYLE_START + 7,
|
||||
// STR_??? = STR_MUSIC_STYLE_START + 8,
|
||||
STR_SPACE_STYLE = STR_MUSIC_STYLE_START + 9,
|
||||
STR_HORROR_STYLE = STR_MUSIC_STYLE_START + 10,
|
||||
STR_TECHNO_STYLE = STR_MUSIC_STYLE_START + 11,
|
||||
STR_GENTLE_STYLE = STR_MUSIC_STYLE_START + 12,
|
||||
STR_SUMMER_STYLE = STR_MUSIC_STYLE_START + 13,
|
||||
STR_WATER_STYLE = STR_MUSIC_STYLE_START + 14,
|
||||
STR_WILD_WEST_STYLE = STR_MUSIC_STYLE_START + 15,
|
||||
STR_JURASSIC_STYLE = STR_MUSIC_STYLE_START + 16,
|
||||
STR_ROCK_STYLE = STR_MUSIC_STYLE_START + 17,
|
||||
STR_RAGTIME_STYLE = STR_MUSIC_STYLE_START + 18,
|
||||
STR_FANTASY_STYLE = STR_MUSIC_STYLE_START + 19,
|
||||
STR_ROCK_STYLE_2 = STR_MUSIC_STYLE_START + 20,
|
||||
STR_ICE_STYLE = STR_MUSIC_STYLE_START + 21,
|
||||
STR_SNOW_STYLE = STR_MUSIC_STYLE_START + 22,
|
||||
STR_CUSTOM_MUSIC_1 = STR_MUSIC_STYLE_START + 23,
|
||||
STR_CUSTOM_MUSIC_2 = STR_MUSIC_STYLE_START + 24,
|
||||
STR_MEDIEVAL_STYLE = STR_MUSIC_STYLE_START + 25,
|
||||
STR_URBAN_STYLE = STR_MUSIC_STYLE_START + 26,
|
||||
STR_ORGAN_STYLE = STR_MUSIC_STYLE_START + 27,
|
||||
STR_MECHANICAL_STYLE = STR_MUSIC_STYLE_START + 28,
|
||||
STR_MODERN_STYLE = STR_MUSIC_STYLE_START + 29,
|
||||
STR_PIRATES_STYLE = STR_MUSIC_STYLE_START + 30,
|
||||
STR_ROCK_STYLE_3 = STR_MUSIC_STYLE_START + 31,
|
||||
STR_CANDY_STYLE = STR_MUSIC_STYLE_START + 32,
|
||||
|
||||
STR_SELECT_MUSIC_STYLE_TIP = 3045,
|
||||
|
||||
STR_WHITE = 3055,
|
||||
STR_TRANSLUCENT = 3056,
|
||||
STR_CONSTRUCTION_MARKER = 3057,
|
||||
|
||||
STR_BRICK_WALLS = 3058,
|
||||
STR_HEDGES = 3059,
|
||||
STR_ICE_BLOCKS = 3060,
|
||||
STR_WOODEN_FENCES = 3061,
|
||||
|
||||
STR_BEGINNER_PARKS = 3064,
|
||||
STR_CHALLENGING_PARKS = STR_BEGINNER_PARKS + 1,
|
||||
STR_EXPERT_PARKS = STR_BEGINNER_PARKS + 2,
|
||||
STR_REAL_PARKS = STR_BEGINNER_PARKS + 3,
|
||||
STR_OTHER_PARKS = STR_BEGINNER_PARKS + 4,
|
||||
|
||||
STR_SAME_PRICE_THROUGHOUT_PARK = 3071,
|
||||
STR_SAME_PRICE_THROUGHOUT_PARK_TIP = 3072,
|
||||
|
||||
STR_PLAIN_ENTRANCE = 3078,
|
||||
STR_WOODEN_ENTRANCE = 3079,
|
||||
STR_CANVAS_TENT_ENTRANCE = 3080,
|
||||
STR_CASTLE_ENTRANCE_GREY = 3081,
|
||||
STR_CASTLE_ENTRANCE_BROWN = 3082,
|
||||
STR_JUNGLE_ENTRANCE = 3083,
|
||||
STR_LOG_CABIN_ENTRANCE = 3084,
|
||||
STR_CLASSICAL_ROMAN_ENTRANCE = 3085,
|
||||
STR_ABSTRACT_ENTRANCE = 3086,
|
||||
STR_SNOW_ICE_ENTRANCE = 3087,
|
||||
STR_PAGODA_ENTRANCE = 3088,
|
||||
STR_SPACE_ENTRANCE = 3089,
|
||||
|
||||
STR_SELECT_STYLE_OF_ENTRANCE_EXIT_STATION_TIP = 3090,
|
||||
STR_SELECT_LIFT_HILL_CHAIN_SPEED_TIP = 3097,
|
||||
|
||||
STR_SELECT_COLOUR = 3099,
|
||||
STR_SELECT_SECONDARY_COLOUR = 3100,
|
||||
STR_SELECT_TERNARY_COLOUR = 3101,
|
||||
|
@ -828,6 +1153,30 @@ enum {
|
|||
STR_LIST_RIDES_TIP = 3104,
|
||||
STR_LIST_SHOPS_AND_STALLS_TIP = 3105,
|
||||
STR_LIST_KIOSKS_AND_FACILITIES_TIP = 3106,
|
||||
STR_CLOSE_RIDE = 3107,
|
||||
STR_TEST_RIDE = 3108,
|
||||
STR_OPEN_RIDE = 3109,
|
||||
STR_BLOCK_SECTIONS = 3110,
|
||||
|
||||
STR_SAVE_TRACK_DESIGN = 3115,
|
||||
STR_SAVE_TRACK_DESIGN_NOT_POSSIBLE = 3116,
|
||||
|
||||
STR_CALLING_MECHANIC = 3117,
|
||||
STR_MEHCANIC_IS_HEADING_FOR_THE_RIDE = 3118,
|
||||
STR_MEHCANIC_IS_FIXING_THE_RIDE = 3119,
|
||||
STR_LOCATE_NEAREST_AVAILABLE_MECHANIC_TIP = 3120,
|
||||
|
||||
STR_FAVOURITE_RIDE_OF_GUEST = 3122,
|
||||
STR_FAVOURITE_RIDE_OF_GUESTS = 3123,
|
||||
|
||||
STR_SAVE_TRACK_DESIGN_ITEM = 3128,
|
||||
STR_SAVE_TRACK_DESIGN_WITH_SCENERY_ITEM = 3129,
|
||||
STR_DESIGN_SAVE = 3130,
|
||||
STR_DESIGN_CANCEL = 3131,
|
||||
STR_CLICK_ITEMS_OF_SCENERY_TO_SELECT = 3132,
|
||||
|
||||
STR_SELECT_NEARBY_SCENERY = 3137,
|
||||
STR_RESET_SELECTION = 3138,
|
||||
|
||||
STR_SCROLL_LEFT_TIP = 3145,
|
||||
STR_SCROLL_RIGHT_TIP = STR_SCROLL_LEFT_TIP + 1,
|
||||
|
|
|
@ -89,7 +89,7 @@ void sub_6BB9FF(rct_vehicle* vehicle)
|
|||
v18 = 64;
|
||||
}
|
||||
i->var_4 = (sint16)(((v15.both / v18) - 0x8000) >> 4);
|
||||
sint32 v19 = vehicle->var_28;
|
||||
sint32 v19 = vehicle->velocity;
|
||||
|
||||
int testaddr = (vehicle->var_31 * 0x65);
|
||||
testaddr += (int)RCT2_ADDRESS(0x009ACFA4, rct_ride_type*)[vehicle->var_D6];
|
||||
|
@ -138,7 +138,7 @@ int sub_6BC2F3(rct_vehicle* vehicle)
|
|||
do {
|
||||
result += vehicle_temp->var_46;
|
||||
} while (vehicle_temp->next_vehicle_on_train != (uint16)-1 && (vehicle_temp = GET_VEHICLE(vehicle_temp->next_vehicle_on_train)));
|
||||
sint32 v4 = vehicle->var_28;
|
||||
sint32 v4 = vehicle->velocity;
|
||||
if (v4 < 0) {
|
||||
v4 = -v4;
|
||||
}
|
||||
|
|
|
@ -48,20 +48,23 @@ typedef struct {
|
|||
rct_widthheight view; // 0x1A
|
||||
uint16 var_1E;
|
||||
uint8 pad_20[0x08];
|
||||
sint32 var_28;
|
||||
sint32 velocity; // 0x28
|
||||
uint8 pad_2C[0x04];
|
||||
uint8 ride; // 0x30
|
||||
uint8 var_31;
|
||||
uint8 pad_32[0x02];
|
||||
uint16 var_34;
|
||||
uint8 pad_36[0x08];
|
||||
sint16 var_36;
|
||||
uint8 pad_38[0x06];
|
||||
uint16 next_vehicle_on_train; // 0x3E
|
||||
uint32 var_40;
|
||||
uint16 var_44;
|
||||
uint16 var_46;
|
||||
uint16 var_48;
|
||||
uint8 pad_4A[0x06];
|
||||
uint8 var_50;
|
||||
uint8 pad_4A;
|
||||
uint8 var_4B;
|
||||
uint8 pad_4C[0x4];
|
||||
uint8 status;
|
||||
uint8 var_51;
|
||||
uint16 peep; // 0x52
|
||||
uint8 pad_54[0x2C];
|
||||
|
@ -84,6 +87,40 @@ typedef struct {
|
|||
uint8 var_D6;
|
||||
} rct_vehicle;
|
||||
|
||||
enum {
|
||||
VEHICLE_STATUS_MOVING_TO_END_OF_STATION,
|
||||
VEHICLE_STATUS_WAITING_FOR_PASSENGERS,
|
||||
VEHICLE_STATUS_WAITING_TO_DEPART,
|
||||
VEHICLE_STATUS_DEPARTING,
|
||||
VEHICLE_STATUS_TRAVELLING,
|
||||
VEHICLE_STATUS_ARRIVING,
|
||||
VEHICLE_STATUS_UNLOADING_PASSENGERS,
|
||||
VEHICLE_STATUS_TRAVELLING_07,
|
||||
VEHICLE_STATUS_CRASHING,
|
||||
VEHICLE_STATUS_CRASHED,
|
||||
VEHICLE_STATUS_TRAVELLING_0A,
|
||||
VEHICLE_STATUS_SWINGING,
|
||||
VEHICLE_STATUS_ROTATING,
|
||||
VEHICLE_STATUS_ROTATING_0D,
|
||||
VEHICLE_STATUS_OPERATING,
|
||||
VEHICLE_STATUS_SHOWING_FILM,
|
||||
VEHICLE_STATUS_ROTATING_10,
|
||||
VEHICLE_STATUS_OPERATING_11,
|
||||
VEHICLE_STATUS_OPERATING_12,
|
||||
VEHICLE_STATUS_DOING_CIRCUS_SHOW,
|
||||
VEHICLE_STATUS_OPERATING_13,
|
||||
VEHICLE_STATUS_WAITING_FOR_CABLE_LIFT,
|
||||
VEHICLE_STATUS_TRAVELLING_15,
|
||||
VEHICLE_STATUS_STOPPING,
|
||||
VEHICLE_STATUS_WAITING_FOR_PASSENGERS_17,
|
||||
VEHICLE_STATUS_WAITING_TO_START,
|
||||
VEHICLE_STATUS_STARTING,
|
||||
VEHICLE_STATUS_OPERATING_1A,
|
||||
VEHICLE_STATUS_STOPPING_1B,
|
||||
VEHICLE_STATUS_UNLOADING_PASSENGERS_1C,
|
||||
VEHICLE_STATUS_STOPPED_BY_BLOCK_BRAKES
|
||||
};
|
||||
|
||||
void vehicle_update_all();
|
||||
int sub_6BC2F3(rct_vehicle* vehicle);
|
||||
void sub_6BB9FF(rct_vehicle* vehicle);
|
||||
|
|
|
@ -1576,13 +1576,13 @@ void RCT2_CALLPROC_WE_MOUSE_DOWN(int address, int widgetIndex, rct_window*w, rc
|
|||
}
|
||||
|
||||
/* Based on rct2: 0x6987ED and another version from window_park */
|
||||
void window_align_tabs( rct_window *w, uint8 start_tab_id, uint8 end_tab_id )
|
||||
void window_align_tabs(rct_window *w, uint8 start_tab_id, uint8 end_tab_id)
|
||||
{
|
||||
int x = w->widgets[start_tab_id].left;
|
||||
int i, x = w->widgets[start_tab_id].left;
|
||||
int tab_width = w->widgets[start_tab_id].right - w->widgets[start_tab_id].left;
|
||||
|
||||
for (int i = start_tab_id; i < end_tab_id; ++i){
|
||||
if ( !(w->disabled_widgets & (1LL << i)) ){
|
||||
for (i = start_tab_id; i <= end_tab_id; i++) {
|
||||
if (!(w->disabled_widgets & (1LL << i))) {
|
||||
w->widgets[i].left = x;
|
||||
w->widgets[i].right = x + tab_width;
|
||||
x += tab_width + 1;
|
||||
|
|
16
src/window.h
16
src/window.h
|
@ -158,8 +158,9 @@ typedef struct{
|
|||
} map_variables;
|
||||
|
||||
typedef struct {
|
||||
sint16 var_480;
|
||||
sint16 view;
|
||||
sint32 var_482;
|
||||
sint32 var_486;
|
||||
} ride_variables;
|
||||
|
||||
typedef struct {
|
||||
|
@ -343,6 +344,7 @@ enum {
|
|||
WC_SAVE_PROMPT = 14,
|
||||
WC_RIDE_LIST = 15,
|
||||
WC_CONSTRUCT_RIDE = 16,
|
||||
WC_DEMOLISH_RIDE_PROMPT = 17,
|
||||
WC_SCENERY = 18,
|
||||
WC_OPTIONS = 19,
|
||||
WC_FOOTPATH = 20,
|
||||
|
@ -514,6 +516,12 @@ void RCT2_CALLPROC_WE_MOUSE_DOWN(int address, int widgetIndex, rct_window*w, rct
|
|||
__asm mov widgetIndex, dx \
|
||||
__asm mov w, esi
|
||||
|
||||
#define window_textinput_get_registers(w, widgetIndex, result, text) \
|
||||
__asm mov result, cl \
|
||||
__asm mov widgetIndex, dx \
|
||||
__asm mov w, esi \
|
||||
__asm mov text, edi
|
||||
|
||||
#define window_paint_get_registers(w, dpi) \
|
||||
__asm mov w, esi \
|
||||
__asm mov dpi, edi
|
||||
|
@ -547,6 +555,12 @@ void RCT2_CALLPROC_WE_MOUSE_DOWN(int address, int widgetIndex, rct_window*w, rct
|
|||
__asm__ ( "mov %["#widgetIndex"], dx " : [widgetIndex] "+m" (widgetIndex) ); \
|
||||
__asm__ ( "mov %["#w"], esi " : [w] "+m" (w) );
|
||||
|
||||
#define window_textinput_get_registers(w, widgetIndex, result, text) \
|
||||
__asm__ ( "mov %[result], cl " : [result] "+m" (result) ); \
|
||||
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) ); \
|
||||
__asm__ ( "mov %[w], esi " : [w] "+m" (w) ); \
|
||||
__asm__ ( "mov %[text], edi " : [text] "+m" (text) );
|
||||
|
||||
#define window_paint_get_registers(w, dpi) \
|
||||
__asm__ ( "mov %["#w"], esi " : [w] "+m" (w) ); \
|
||||
__asm__ ( "mov %["#dpi"], edi " : [dpi] "+m" (dpi) );
|
||||
|
|
|
@ -44,13 +44,13 @@ static rct_widget window_dropdown_widgets[] = {
|
|||
{ WIDGETS_END },
|
||||
};
|
||||
|
||||
int _dropdown_num_items;
|
||||
int _dropdown_num_columns;
|
||||
int _dropdown_num_rows;
|
||||
int _dropdown_item_width;
|
||||
int _dropdown_item_height;
|
||||
int _dropdown_highlighted_index;
|
||||
|
||||
int gDropdownNumItems;
|
||||
uint16 gDropdownItemsFormat[64];
|
||||
sint64 gDropdownItemsArgs[64];
|
||||
// Replaces 0x009DED38
|
||||
|
@ -149,7 +149,7 @@ void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colo
|
|||
_dropdown_item_height = flags & 0x3F;
|
||||
|
||||
// Set the widgets
|
||||
_dropdown_num_items = num_items;
|
||||
gDropdownNumItems = num_items;
|
||||
_dropdown_num_rows = num_items;
|
||||
window_dropdown_widgets[WIDX_BACKGROUND].bottom = _dropdown_item_height * num_items + 3;
|
||||
window_dropdown_widgets[WIDX_BACKGROUND].right = _dropdown_item_width + 3;
|
||||
|
@ -175,7 +175,7 @@ void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colo
|
|||
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_STATE, sint8) = INPUT_STATE_DROPDOWN_ACTIVE;
|
||||
|
||||
// Copy the following properties until all use of it is decompiled
|
||||
RCT2_GLOBAL(0x009DEBA0, sint16) = _dropdown_num_items;
|
||||
RCT2_GLOBAL(0x009DEBA0, sint16) = gDropdownNumItems;
|
||||
RCT2_GLOBAL(0x009DED44, sint32) = _dropdown_num_columns;
|
||||
RCT2_GLOBAL(0x009DED48, sint32) = _dropdown_num_rows;
|
||||
RCT2_GLOBAL(0x009DED40, sint32) = _dropdown_item_width;
|
||||
|
@ -216,10 +216,10 @@ void window_dropdown_show_image(int x, int y, int extray, uint8 colour, uint8 fl
|
|||
// Set and calculate num items, rows and columns
|
||||
_dropdown_item_width = itemWidth;
|
||||
_dropdown_item_height = itemHeight;
|
||||
_dropdown_num_items = numItems;
|
||||
gDropdownNumItems = numItems;
|
||||
_dropdown_num_columns = numColumns;
|
||||
_dropdown_num_rows = _dropdown_num_items / _dropdown_num_columns;
|
||||
if (_dropdown_num_items % _dropdown_num_columns != 0)
|
||||
_dropdown_num_rows = gDropdownNumItems / _dropdown_num_columns;
|
||||
if (gDropdownNumItems % _dropdown_num_columns != 0)
|
||||
_dropdown_num_rows++;
|
||||
|
||||
// Calculate position and size
|
||||
|
@ -253,7 +253,7 @@ void window_dropdown_show_image(int x, int y, int extray, uint8 colour, uint8 fl
|
|||
RCT2_GLOBAL(RCT2_ADDRESS_INPUT_STATE, sint8) = INPUT_STATE_DROPDOWN_ACTIVE;
|
||||
|
||||
// Copy the following properties until all use of it is decompiled
|
||||
RCT2_GLOBAL(0x009DEBA0, sint16) = _dropdown_num_items;
|
||||
RCT2_GLOBAL(0x009DEBA0, sint16) = gDropdownNumItems;
|
||||
RCT2_GLOBAL(0x009DED44, sint32) = _dropdown_num_columns;
|
||||
RCT2_GLOBAL(0x009DED48, sint32) = _dropdown_num_rows;
|
||||
RCT2_GLOBAL(0x009DED40, sint32) = _dropdown_item_width;
|
||||
|
@ -278,7 +278,7 @@ static void window_dropdown_paint()
|
|||
_dropdown_highlighted_index = RCT2_GLOBAL(0x009DEBA2, sint16);
|
||||
{
|
||||
int i, cell_x, cell_y, l, t, r, b, item, image, colour;
|
||||
for (i = 0; i < _dropdown_num_items; i++) {
|
||||
for (i = 0; i < gDropdownNumItems; i++) {
|
||||
cell_x = i % _dropdown_num_columns;
|
||||
cell_y = i / _dropdown_num_columns;
|
||||
|
||||
|
@ -379,3 +379,16 @@ int dropdown_index_from_point(int x, int y, rct_window* w){
|
|||
|
||||
return dropdown_index;
|
||||
}
|
||||
|
||||
/**
|
||||
* rct2: 0x006ED43D
|
||||
* al: dropdown colour
|
||||
* ah: selected colour
|
||||
* esi: window
|
||||
* edi: widget
|
||||
* ebp: unknown
|
||||
*/
|
||||
void window_dropdown_show_colour(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour)
|
||||
{
|
||||
RCT2_CALLPROC_X(0x006ED43D, (selectedColour << 8) | dropdownColour, 0, 0, 0, (int)w, (int)widget, 0xFFFFFFFF);
|
||||
}
|
||||
|
|
|
@ -27,6 +27,7 @@
|
|||
|
||||
extern int gAppropriateImageDropdownItemsPerRow[];
|
||||
|
||||
extern int gDropdownNumItems;
|
||||
extern uint16 gDropdownItemsFormat[64];
|
||||
extern sint64 gDropdownItemsArgs[64];
|
||||
extern uint32 gDropdownItemsChecked;
|
||||
|
@ -36,5 +37,6 @@ void window_dropdown_show_text_custom_width(int x, int y, int extray, uint8 colo
|
|||
void window_dropdown_show_image(int x, int y, int extray, uint8 colour, uint8 flags, int numItems, int itemWidth, int itemHeight, int numColumns);
|
||||
void window_dropdown_close();
|
||||
int dropdown_index_from_point(int x, int y, rct_window* w);
|
||||
void window_dropdown_show_colour(rct_window *w, rct_widget *widget, uint8 dropdownColour, uint8 selectedColour);
|
||||
|
||||
#endif
|
|
@ -279,19 +279,6 @@ void window_new_ride_init_vars() {
|
|||
RCT2_GLOBAL(RCT2_ADDRESS_WINDOW_RIDE_LIST_INFORMATION_TYPE, uint8) = 0;
|
||||
}
|
||||
|
||||
uint8 *get_ride_entry_indices_for_ride_type(uint8 rideType)
|
||||
{
|
||||
uint8 *typeToRideEntryIndexMap = (uint8*)0x009E32F8;
|
||||
uint8 *entryIndexList = typeToRideEntryIndexMap;
|
||||
while (rideType > 0) {
|
||||
do {
|
||||
entryIndexList++;
|
||||
} while (*(entryIndexList - 1) != 255);
|
||||
rideType--;
|
||||
}
|
||||
return entryIndexList;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006B6F3E
|
||||
|
|
|
@ -866,30 +866,7 @@ static void window_park_entrance_textinput()
|
|||
rct_window *w;
|
||||
char *text;
|
||||
|
||||
#ifdef _MSC_VER
|
||||
__asm mov result, cl
|
||||
#else
|
||||
__asm__ ( "mov %[result], cl " : [result] "+m" (result) );
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
__asm mov widgetIndex, dx
|
||||
#else
|
||||
__asm__ ( "mov %[widgetIndex], dx " : [widgetIndex] "+m" (widgetIndex) );
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
__asm mov w, esi
|
||||
#else
|
||||
__asm__ ( "mov %[w], esi " : [w] "+m" (w) );
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
__asm mov text, edi
|
||||
#else
|
||||
__asm__ ( "mov %[text], edi " : [text] "+m" (text) );
|
||||
#endif
|
||||
|
||||
window_textinput_get_registers(w, widgetIndex, result, text);
|
||||
|
||||
if (widgetIndex == WIDX_RENAME) {
|
||||
if (result) {
|
||||
|
|
|
@ -717,7 +717,7 @@ void window_peep_viewport_init(rct_window* w){
|
|||
|
||||
rct_ride* ride = &(RCT2_ADDRESS(RCT2_ADDRESS_RIDE_LIST, rct_ride)[peep->current_ride]);
|
||||
if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK){
|
||||
rct_vehicle* train = GET_VEHICLE(ride->train_car_map[peep->current_train]);
|
||||
rct_vehicle* train = GET_VEHICLE(ride->vehicles[peep->current_train]);
|
||||
int car = peep->current_car;
|
||||
|
||||
for (; car != 0; car--){
|
||||
|
@ -1379,6 +1379,33 @@ void window_peep_stats_invalidate(){
|
|||
window_align_tabs(w, WIDX_TAB_1, WIDX_TAB_6);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x0066ECC1
|
||||
*
|
||||
* ebp: colour, contains flag 0x80000000 for blinking
|
||||
*/
|
||||
void window_peep_stats_bars_paint(int value, int x, int y, rct_window *w, rct_drawpixelinfo *dpi, int colour){
|
||||
//RCT2_CALLPROC_X(0x6974FC, value, 0, x, y, (int)w, (int)dpi, colour);
|
||||
|
||||
value *= 0x76;
|
||||
value >>= 8;
|
||||
|
||||
gfx_fill_rect_inset(dpi, x + 0x3A, y + 1, x + 0x3A + 0x79, y + 9, w->colours[1], 0x30);
|
||||
|
||||
int blink_flag = colour & (1 << 0x1F); //0x80000000
|
||||
colour &= ~(1 << 0x1F);
|
||||
if (!blink_flag ||
|
||||
RCT2_GLOBAL(0x009DEA6E, uint8) != 0 ||
|
||||
(RCT2_GLOBAL(RCT2_ADDRESS_CURRENT_TICKS, uint32) & 8) == 0)
|
||||
{
|
||||
if (value <= 2)
|
||||
return;
|
||||
gfx_fill_rect_inset(dpi, x + 0x3C, y + 2, x + 0x3C + value - 1, y + 8, colour, 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* rct2: 0x0069711D */
|
||||
void window_peep_stats_paint(){
|
||||
rct_window *w;
|
||||
|
@ -1412,7 +1439,7 @@ void window_peep_stats_paint(){
|
|||
if (happiness < 50){
|
||||
ebp |= 0x80000000;
|
||||
}
|
||||
RCT2_CALLPROC_X(0x6974FC, happiness, (int)peep, x, y, (int)w, (int)dpi, ebp);
|
||||
window_peep_stats_bars_paint(happiness, x, y, w, dpi, ebp);
|
||||
|
||||
//Energy
|
||||
y += 10;
|
||||
|
@ -1424,7 +1451,7 @@ void window_peep_stats_paint(){
|
|||
ebp |= 0x80000000;
|
||||
}
|
||||
if (energy < 10)energy = 10;
|
||||
RCT2_CALLPROC_X(0x6974FC, energy, (int)peep, x, y, (int)w, (int)dpi, ebp);
|
||||
window_peep_stats_bars_paint(energy, x, y, w, dpi, ebp);
|
||||
|
||||
//Hunger
|
||||
y += 10;
|
||||
|
@ -1443,7 +1470,7 @@ void window_peep_stats_paint(){
|
|||
if (hunger > 170){
|
||||
ebp |= 0x80000000;
|
||||
}
|
||||
RCT2_CALLPROC_X(0x6974FC, hunger, (int)peep, x, y, (int)w, (int)dpi, ebp);
|
||||
window_peep_stats_bars_paint(hunger, x, y, w, dpi, ebp);
|
||||
|
||||
//Thirst
|
||||
y += 10;
|
||||
|
@ -1462,7 +1489,7 @@ void window_peep_stats_paint(){
|
|||
if (thirst > 170){
|
||||
ebp |= 0x80000000;
|
||||
}
|
||||
RCT2_CALLPROC_X(0x6974FC, thirst, (int)peep, x, y, (int)w, (int)dpi, ebp);
|
||||
window_peep_stats_bars_paint(thirst, x, y, w, dpi, ebp);
|
||||
|
||||
//Nausea
|
||||
y += 10;
|
||||
|
@ -1478,7 +1505,7 @@ void window_peep_stats_paint(){
|
|||
if (nausea > 120){
|
||||
ebp |= 0x80000000;
|
||||
}
|
||||
RCT2_CALLPROC_X(0x6974FC, nausea, (int)peep, x, y, (int)w, (int)dpi, ebp);
|
||||
window_peep_stats_bars_paint(nausea, x, y, w, dpi, ebp);
|
||||
|
||||
//Bathroom
|
||||
y += 10;
|
||||
|
@ -1496,7 +1523,7 @@ void window_peep_stats_paint(){
|
|||
if (bathroom > 160){
|
||||
ebp |= 0x80000000;
|
||||
}
|
||||
RCT2_CALLPROC_X(0x6974FC, bathroom, (int)peep, x, y, (int)w, (int)dpi, ebp);
|
||||
window_peep_stats_bars_paint(bathroom, x, y, w, dpi, ebp);
|
||||
|
||||
// Time in park
|
||||
y += 11;
|
||||
|
|
5532
src/window_ride.c
5532
src/window_ride.c
File diff suppressed because it is too large
Load Diff
|
@ -432,52 +432,6 @@ static void window_ride_list_paint()
|
|||
window_ride_list_draw_tab_images(dpi, w);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006AF561
|
||||
*/
|
||||
static void ride_get_status(int rideIndex, int *formatSecondary, int *argument)
|
||||
{
|
||||
rct_ride *ride = &g_ride_list[rideIndex];
|
||||
|
||||
if (ride->lifecycle_flags & RIDE_LIFECYCLE_CRASHED) {
|
||||
*formatSecondary = STR_CRASHED;
|
||||
return;
|
||||
}
|
||||
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) {
|
||||
*formatSecondary = STR_BROKEN_DOWN;
|
||||
return;
|
||||
}
|
||||
if (ride->status == RIDE_STATUS_CLOSED) {
|
||||
*formatSecondary = STR_CLOSED;
|
||||
return;
|
||||
}
|
||||
if (ride->status == RIDE_STATUS_TESTING) {
|
||||
*formatSecondary = STR_TEST_RUN;
|
||||
return;
|
||||
}
|
||||
rct_peep *peep = GET_PEEP(ride->race_winner);
|
||||
if (ride->mode == RIDE_MODE_RACE && !(ride->lifecycle_flags & RIDE_LIFECYCLE_PASS_STATION_NO_STOPPING) && ride->race_winner != 0xFFFF && peep->sprite_identifier == SPRITE_IDENTIFIER_PEEP) {
|
||||
if (peep->name_string_idx == STR_GUEST) {
|
||||
*argument = peep->id;
|
||||
*formatSecondary = STR_RACE_WON_BY_GUEST;
|
||||
} else {
|
||||
*argument = peep->name_string_idx;
|
||||
*formatSecondary = STR_RACE_WON_BY;
|
||||
}
|
||||
} else {
|
||||
if (!(RCT2_GLOBAL(RCT2_ADDRESS_RIDE_FLAGS + ride->type * 8, uint32) & 0x20000)) {
|
||||
*argument = ride->num_riders;
|
||||
*formatSecondary = STR_PERSON_ON_RIDE;
|
||||
if(*argument != 1)
|
||||
*formatSecondary = STR_PEOPLE_ON_RIDE;
|
||||
|
||||
} else {
|
||||
*formatSecondary = STR_OPEN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* rct2: 0x006B3240
|
||||
|
|
Loading…
Reference in New Issue