diff --git a/src/peep/peep.c b/src/peep/peep.c index 5efd35c057..8221763e45 100644 --- a/src/peep/peep.c +++ b/src/peep/peep.c @@ -1145,8 +1145,83 @@ void peep_update_ride_sub_state_1(rct_peep* peep){ if (RCT2_ADDRESS(RCT2_ADDRESS_RIDE_FLAGS, uint32)[ride->type * 2] &RIDE_TYPE_FLAG_13) { + sint16 x, y, z; + x = ride->entrances[peep->current_ride_station] & 0xFF; + y = ride->entrances[peep->current_ride_station] >> 8; + z = ride->station_heights[peep->current_ride_station]; + + rct_map_element* map_element = map_get_first_element_at(x, y); + for (;; map_element++){ + if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_ENTRANCE) + continue; + if (map_element->base_height == z) + break; + } + + uint8 direction_entrance = (map_element->type & MAP_ELEMENT_DIRECTION_MASK); + + if (ride->type == RIDE_TYPE_MAZE){ + peep->var_78 = direction_entrance + 1; + x *= 32; + y *= 32; + + x += RCT2_ADDRESS(0x993CCC, sint16)[direction_entrance * 2]; + y += RCT2_ADDRESS(0x993CCE, sint16)[direction_entrance * 2]; + + uint8 direction = direction_entrance * 4 + 11; + if (scenario_rand() & 0x40){ + direction += 4; + peep->var_78 += 2; + } + + direction &= 0xF; + peep->var_37 = direction; + peep->var_78 &= 3; + + x += RCT2_GLOBAL(0x981FD1 + direction, sint16); + y += RCT2_GLOBAL(0x981FD3 + direction, sint16); + + peep->destination_x = x; + peep->destination_y = y; + peep->destination_tolerence = 3; + + ride->var_120++; + RCT2_CALLPROC_X(0x00695444, 0, 0, 0, peep->current_ride, (int)peep, 0, 0); + peep->sub_state = 17; + return; + } + + x = ride->station_starts[peep->current_ride_station] & 0xFF; + y = ride->station_starts[peep->current_ride_station] >> 8; + + map_element = map_get_first_element_at(x, y); + for (;; map_element++){ + if (map_element_get_type(map_element) != MAP_ELEMENT_TYPE_TRACK) + continue; + if (map_element->base_height == z) + break; + } + + uint8 direction_track = map_element->type & MAP_ELEMENT_DIRECTION_MASK; + + peep->var_37 = (direction_entrance << 2) | (direction_track << 4); + + x *= 32; + y *= 32; + + sint8* edx = peep->var_37 * 2 + RCT2_ADDRESS(0x97E1BC, sint8*)[ride->type]; + + x += edx[0]; + y += edx[1]; + + peep->destination_x = x; + peep->destination_y = y; + peep->current_car = 0; + + ride->var_120++; + RCT2_CALLPROC_X(0x00695444, 0, 0, 0, peep->current_ride, (int)peep, 0, 0); + peep->sub_state = 14; return; - // 0x006924E1 } rct_vehicle* vehicle = GET_VEHICLE(ride->vehicles[peep->current_train]); diff --git a/src/ride/ride.h b/src/ride/ride.h index 4a8de7a1f0..a9f563f619 100644 --- a/src/ride/ride.h +++ b/src/ride/ride.h @@ -367,7 +367,7 @@ enum { RIDE_TYPE_MINI_SUSPENDED_COASTER, RIDE_TYPE_BUMPER_BOATS, RIDE_TYPE_WOODEN_WILD_MOUSE, - RIDE_TYPE_STEEPLECHASE, + RIDE_TYPE_STEEPLECHASE = 10, RIDE_TYPE_CAR_RIDE, RIDE_TYPE_LAUNCHED_FREEFALL, RIDE_TYPE_BOBSLEIGH_COASTER, @@ -377,7 +377,7 @@ enum { RIDE_TYPE_MINE_TRAIN_COASTER, RIDE_TYPE_CHAIRLIFT, RIDE_TYPE_CORKSCREW_ROLLER_COASTER, - RIDE_TYPE_MAZE, + RIDE_TYPE_MAZE = 20, RIDE_TYPE_SPIRAL_SLIDE, RIDE_TYPE_GO_KARTS, RIDE_TYPE_LOG_FLUME, @@ -387,7 +387,7 @@ enum { RIDE_TYPE_SWINGING_INVERTER_SHIP, RIDE_TYPE_FOOD_STALL, RIDE_TYPE_1D, - RIDE_TYPE_DRINK_STALL, + RIDE_TYPE_DRINK_STALL = 30, RIDE_TYPE_1F, RIDE_TYPE_SHOP, RIDE_TYPE_MERRY_GO_ROUND, @@ -397,7 +397,7 @@ enum { RIDE_TYPE_FERRIS_WHEEL, RIDE_TYPE_MOTION_SIMULATOR, RIDE_TYPE_3D_CINEMA, - RIDE_TYPE_TOP_SPIN, + RIDE_TYPE_TOP_SPIN = 40, RIDE_TYPE_SPACE_RINGS, RIDE_TYPE_REVERSE_FREEFALL_COASTER, RIDE_TYPE_ELEVATOR, @@ -407,7 +407,7 @@ enum { RIDE_TYPE_HAUNTED_HOUSE, RIDE_TYPE_FIRST_AID, RIDE_TYPE_CIRCUS_SHOW, - RIDE_TYPE_GHOST_TRAIN, + RIDE_TYPE_GHOST_TRAIN = 50, RIDE_TYPE_TWISTER_ROLLER_COASTER, RIDE_TYPE_WOODEN_ROLLER_COASTER, RIDE_TYPE_SIDE_FRICTION_ROLLER_COASTER, @@ -417,7 +417,7 @@ enum { RIDE_TYPE_FLYING_ROLLER_COASTER, RIDE_TYPE_3A, RIDE_TYPE_VIRGINIA_REEL, - RIDE_TYPE_SPLASH_BOATS, + RIDE_TYPE_SPLASH_BOATS = 60, RIDE_TYPE_MINI_HELICOPTERS, RIDE_TYPE_LAY_DOWN_ROLLER_COASTER, RIDE_TYPE_SUSPENDED_MONORAIL, @@ -427,7 +427,7 @@ enum { RIDE_TYPE_MINI_GOLF, RIDE_TYPE_GIGA_COASTER, RIDE_TYPE_ROTO_DROP, - RIDE_TYPE_FLYING_SAUCERS, + RIDE_TYPE_FLYING_SAUCERS = 70, RIDE_TYPE_CROOKED_HOUSE, RIDE_TYPE_MONORAIL_CYCLES, RIDE_TYPE_COMPACT_INVERTED_COASTER, @@ -437,7 +437,7 @@ enum { RIDE_TYPE_MAGIC_CARPET, RIDE_TYPE_SUBMARINE_RIDE, RIDE_TYPE_RIVER_RAFTS, - RIDE_TYPE_50, + RIDE_TYPE_50 = 80, RIDE_TYPE_ENTERPRISE, RIDE_TYPE_52, RIDE_TYPE_53, @@ -447,7 +447,7 @@ enum { RIDE_TYPE_MINI_ROLLER_COASTER, RIDE_TYPE_MINE_RIDE, RIDE_TYPE_LIM_LAUNCHED_ROLLER_COASTER, - RIDE_TYPE_90 + RIDE_TYPE_90 = 90 }; enum {