Import more fields, name mechanic flags, fix booster behaviour

This commit is contained in:
Gymnasiast 2017-01-24 23:51:22 +01:00 committed by Ted John
parent 39d413b781
commit d476176d73
6 changed files with 63 additions and 22 deletions

View File

@ -4650,7 +4650,7 @@ static bool peep_update_fixing_sub_state_11(bool firstRun, rct_peep *peep, rct_r
peep_update_action(&tmp_x, &tmp_y, &tmp_xy_distance, peep);
if (peep->action_frame == 0x28) {
ride->mechanic_status = 4;
ride->mechanic_status = RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES;
ride->window_invalidate_flags |= RIDE_INVALIDATE_RIDE_MAINTENANCE;
}

View File

@ -157,11 +157,29 @@ typedef struct rct1_ride {
uint8 popularity_time_out;
uint8 popularity_next;
uint8 num_riders;
uint8 unk_10C[36];
sint16 build_date;
money16 upkeep_cost;
uint8 unk_134[15];
uint8 breakdown_reason;
uint8 music_tune_id; // 0x10C
uint8 slide_in_use; // 0x10D
union {
uint16 slide_peep; // 0x10E
uint16 maze_tiles; // 0x10E
};
uint8 pad_110[0xE];
uint8 slide_peep_t_shirt_colour;// 0x11E
uint8 pad_11F[0x7];
uint8 spiral_slide_progress; // 0x126
uint8 pad_127[0x9];
sint16 build_date; // 0x130
money16 upkeep_cost; // 0x131
uint16 race_winner; // 0x132
uint8 unk_134[2];
uint32 music_position; // 0x138
uint8 breakdown_reason_pending; // 0x13C
uint8 mechanic_status; // 0x13D
uint16 mechanic; // 0x13E
uint8 inspection_station; // 0x140
uint8 broken_vehicle; // 0x141
uint8 broken_car; // 0x142
uint8 breakdown_reason; // 0x143
uint8 unk_144[2];
uint16 reliability;
uint8 unreliability_factor;

View File

@ -675,6 +675,13 @@ private:
dst->reliability = src->reliability;
dst->unreliability_factor = src->unreliability_factor;
dst->breakdown_reason = src->breakdown_reason;
dst->mechanic_status = src->mechanic_status;
dst->mechanic = src->mechanic;
dst->breakdown_reason = src->breakdown_reason;
dst->breakdown_reason_pending = src->breakdown_reason_pending;
dst->inspection_station = src->inspection_station;
//dst->broken_car?
//dst->broken_vehicle?
// Measurement data
dst->excitement = src->excitement;
@ -714,6 +721,11 @@ private:
dst->current_test_segment = src->current_test_segment;
dst->current_test_station = 0xFF;
dst->average_speed_test_timeout = src->average_speed_test_timeout;
dst->slide_in_use = src->slide_in_use;
dst->slide_peep_t_shirt_colour = RCT1::GetColour(src->slide_peep_t_shirt_colour);
dst->spiral_slide_progress = src->spiral_slide_progress;
// Doubles as slide_peep
dst->maze_tiles = src->maze_tiles;
// Finance / customers
dst->upkeep_cost = src->upkeep_cost;
@ -1311,14 +1323,31 @@ private:
void FixRidePeepLinks(rct_ride * ride, const uint16 * spriteIndexMap)
{
uint16 originalSpriteIndex;
for (int i = 0; i < RCT1_MAX_STATIONS; i++)
{
uint16 originalSpriteIndex = ride->last_peep_in_queue[i];
originalSpriteIndex = ride->last_peep_in_queue[i];
if (originalSpriteIndex != SPRITE_INDEX_NULL)
{
ride->last_peep_in_queue[i] = spriteIndexMap[originalSpriteIndex];
}
}
originalSpriteIndex = ride->mechanic;
if (originalSpriteIndex != SPRITE_INDEX_NULL)
{
ride->mechanic = spriteIndexMap[originalSpriteIndex];
}
if (ride->type == RIDE_TYPE_SPIRAL_SLIDE)
{
originalSpriteIndex = ride->slide_peep;
if (originalSpriteIndex != SPRITE_INDEX_NULL && spriteIndexMap[originalSpriteIndex] < RCT1_MAX_SPRITES)
{
ride->slide_peep = spriteIndexMap[originalSpriteIndex];
}
}
}
void FixPeepNextInQueue(rct_peep * peep, const uint16 * spriteIndexMap)

View File

@ -2498,7 +2498,7 @@ static void ride_breakdown_status_update(sint32 rideIndex)
if (
!(ride->not_fixed_timeout & 15) &&
ride->mechanic_status != RIDE_MECHANIC_STATUS_FIXING &&
ride->mechanic_status != RIDE_MECHANIC_STATUS_4
ride->mechanic_status != RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES
) {
set_format_arg(0, rct_string_id, ride->name);
set_format_arg(2, uint32, ride->name_arguments);
@ -2702,8 +2702,8 @@ rct_peep *ride_get_assigned_mechanic(rct_ride *ride)
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN) {
if (
ride->mechanic_status == RIDE_MECHANIC_STATUS_HEADING ||
ride->mechanic_status == 3 ||
ride->mechanic_status == 4
ride->mechanic_status == RIDE_MECHANIC_STATUS_FIXING ||
ride->mechanic_status == RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES
) {
rct_peep *peep = &(get_sprite(ride->mechanic)->peep);
if (peep_is_mechanic(peep))

View File

@ -662,7 +662,7 @@ enum {
RIDE_MECHANIC_STATUS_CALLING,
RIDE_MECHANIC_STATUS_HEADING,
RIDE_MECHANIC_STATUS_FIXING,
RIDE_MECHANIC_STATUS_4
RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES
};
enum {

View File

@ -3344,7 +3344,7 @@ static void vehicle_update_arriving(rct_vehicle* vehicle)
if (ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN &&
ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE &&
ride->inspection_station == vehicle->current_station &&
ride->mechanic_status != RIDE_MECHANIC_STATUS_4
ride->mechanic_status != RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES
) {
unkF64E35 = 0;
}
@ -7492,7 +7492,7 @@ loc_6DAEB9:
if (!(
ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN &&
ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE &&
ride->mechanic_status == RIDE_MECHANIC_STATUS_4
ride->mechanic_status == RIDE_MECHANIC_STATUS_HAS_FIXED_STATION_BRAKES
)) {
regs.eax = vehicle->brake_speed << 16;
if (regs.eax < _vehicleVelocityF64E08) {
@ -7507,15 +7507,9 @@ loc_6DAEB9:
}
}
else if (trackType == TRACK_ELEM_BOOSTER && ride->type != RIDE_TYPE_WILD_MOUSE) {
if (!(
ride->lifecycle_flags & RIDE_LIFECYCLE_BROKEN_DOWN &&
ride->breakdown_reason_pending == BREAKDOWN_BRAKES_FAILURE &&
ride->mechanic_status == RIDE_MECHANIC_STATUS_4
)) {
regs.eax = (vehicle->brake_speed << 16);
if (regs.eax > _vehicleVelocityF64E08) {
vehicle->acceleration = RideProperties[ride->type].acceleration << 16; //_vehicleVelocityF64E08 * 1.2;
}
regs.eax = (vehicle->brake_speed << 16);
if (regs.eax > _vehicleVelocityF64E08) {
vehicle->acceleration = RideProperties[ride->type].acceleration << 16; //_vehicleVelocityF64E08 * 1.2;
}
}