/** * * rct2: 0x006D4295 */ void vehicle_visual_splash_boats_or_water_coaster(sint32 x, sint32 imageDirection, sint32 y, sint32 z, rct_vehicle *vehicle, const rct_ride_entry_vehicle *vehicleEntry) { if (vehicle->is_child) { vehicle = GET_VEHICLE(vehicle->prev_vehicle_on_ride); } else { vehicle = GET_VEHICLE(vehicle->next_vehicle_on_ride); } g_currently_drawn_item = vehicle; imageDirection = ((get_current_rotation() * 8) + vehicle->sprite_direction) & 0x1F; gUnk9DE568 = vehicle->x; gUnk9DE56C = vehicle->y; vehicle_paint(vehicle, imageDirection); }
static rct_vehicle *get_first_vehicle(rct_ride *ride) { if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK) { uint16 vehicleSpriteIndex = ride->vehicles[0]; if (vehicleSpriteIndex != SPRITE_INDEX_NULL) { return GET_VEHICLE(vehicleSpriteIndex); } } return NULL; }
static void paint_swinging_inverter_ship_structure(rct_ride * ride, uint8 direction, sint8 axisOffset, uint16 height) { rct_map_element * savedMapElement = g_currently_drawn_item; rct_ride_entry * rideType = get_ride_entry(ride->subtype); rct_vehicle * vehicle = NULL; sint8 xOffset = !(direction & 1) ? axisOffset : 0; sint8 yOffset = (direction & 1) ? axisOffset : 0; if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride->vehicles[0] != SPRITE_INDEX_NULL) { vehicle = GET_VEHICLE(ride->vehicles[0]); gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; g_currently_drawn_item = vehicle; } uint32 vehicleImageId = rideType->vehicles[0].base_image_id + swinging_inverter_ship_base_sprite_offset[direction]; if (vehicle != NULL) { sint32 rotation = (sint8) vehicle->vehicle_sprite_type; if (rotation != 0) { vehicleImageId = rideType->vehicles[0].base_image_id + swinging_inverter_ship_animating_base_sprite_offset[direction]; if (direction & 2) { rotation = -rotation; } if (rotation < 0) { rotation += 72; } vehicleImageId += (rotation - 1) << 1; } } uint32 colourFlags = gTrackColours[SCHEME_MISC]; if (colourFlags == 0x20000000) { colourFlags = ride->vehicle_colours[0].body_colour << 19 | ride->vehicle_colours[0].trim_colour << 24 | 0xA0000000; } swinging_inverter_ship_bound_box boundBox = swinging_inverter_ship_bounds[direction]; vehicleImageId = vehicleImageId | colourFlags; uint32 frameImageId = swinging_inverter_ship_frame_sprites[direction] | gTrackColours[SCHEME_TRACK]; if (direction & 2) { sub_98197C(vehicleImageId, xOffset, yOffset, boundBox.length_x, boundBox.length_y, 127, height, boundBox.offset_x, boundBox.offset_y, height, get_current_rotation()); sub_98199C(frameImageId, xOffset, yOffset, boundBox.length_x, boundBox.length_y, 127, height, boundBox.offset_x, boundBox.offset_y, height, get_current_rotation()); } else { sub_98197C(frameImageId, xOffset, yOffset, boundBox.length_x, boundBox.length_y, 127, height, boundBox.offset_x, boundBox.offset_y, height, get_current_rotation()); sub_98199C(vehicleImageId, xOffset, yOffset, boundBox.length_x, boundBox.length_y, 127, height, boundBox.offset_x, boundBox.offset_y, height, get_current_rotation()); } g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; }
/** * rct2: 0x0076F72C */ static void paint_haunted_house_structure(paint_session * session, uint8 rideIndex, uint8 direction, sint8 xOffset, sint8 yOffset, uint8 part, uint16 height) { const rct_tile_element * savedTileElement = static_cast<const rct_tile_element *>(session->CurrentlyDrawnItem); uint8 frameNum = 0; Ride * ride = get_ride(rideIndex); rct_ride_entry * rideEntry = get_ride_entry(ride->subtype); uint32 baseImageId = rideEntry->vehicles[0].base_image_id; if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride->vehicles[0] != SPRITE_INDEX_NULL) { session->InteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; rct_vehicle * vehicle = GET_VEHICLE(ride->vehicles[0]); session->CurrentlyDrawnItem = vehicle; frameNum = vehicle->vehicle_sprite_type; } uint32 imageId = (baseImageId + direction) | session->TrackColours[SCHEME_MISC]; haunted_house_bound_box boundBox = haunted_house_data[part]; sub_98197C( session, imageId, xOffset, yOffset, boundBox.length_x, boundBox.length_y, 127, height, boundBox.offset_x, boundBox.offset_y, height); rct_drawpixelinfo * dpi = session->Unk140E9A8; if (dpi->zoom_level == 0 && frameNum != 0) { switch (direction) { case 0: imageId = baseImageId + 3 + frameNum; break; case 1: imageId = baseImageId + 21 + frameNum; break; case 2: imageId = baseImageId + 39 + frameNum; break; case 3: imageId = baseImageId + 57 + frameNum; break; } imageId = imageId | session->TrackColours[SCHEME_MISC]; sub_98199C( session, imageId, xOffset, yOffset, boundBox.length_x, boundBox.length_y, 127, height, boundBox.offset_x, boundBox.offset_y, height); } session->CurrentlyDrawnItem = savedTileElement; session->InteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; }
/** rct2: 0x00768A3B */ static void paint_space_rings_structure(rct_ride * ride, uint8 direction, uint32 segment, sint32 height) { rct_map_element * savedMapElement = g_currently_drawn_item; uint32 vehicleIndex = (segment - direction) & 0x3; if (ride->num_stations == 0 || vehicleIndex < ride->num_vehicles) { rct_ride_entry * ride_type = get_ride_entry(ride->subtype); rct_vehicle * vehicle = NULL; sint32 frameNum = direction; uint32 baseImageId = ride_type->vehicles[0].base_image_id; if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride->vehicles[0] != SPRITE_INDEX_NULL) { gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; vehicle = GET_VEHICLE(ride->vehicles[vehicleIndex]); g_currently_drawn_item = vehicle; frameNum += (sint8) vehicle->vehicle_sprite_type * 4; } uint32 imageColourFlags = gTrackColours[SCHEME_MISC]; if ((ride->colour_scheme_type & 3) != RIDE_COLOUR_SCHEME_DIFFERENT_PER_TRAIN) { vehicleIndex = 0; } if (imageColourFlags == IMAGE_TYPE_REMAP) { imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(ride->vehicle_colours[vehicleIndex].body_colour, ride->vehicle_colours[0].trim_colour); } uint32 imageId = (baseImageId + frameNum) | imageColourFlags; sub_98197C(imageId, 0, 0, 20, 20, 23, height, -10, -10, height, get_current_rotation()); if (vehicle != NULL && vehicle->num_peeps > 0) { rct_peep * rider = GET_PEEP(vehicle->peep[0]); imageColourFlags = SPRITE_ID_PALETTE_COLOUR_2(rider->tshirt_colour, rider->trousers_colour); imageId = ((baseImageId & 0x7FFFF) + 352 + frameNum) | imageColourFlags; sub_98199C(imageId, 0, 0, 20, 20, 23, height, -10, -10, height, get_current_rotation()); } } g_currently_drawn_item = savedMapElement; gPaintInteractionType = VIEWPORT_INTERACTION_ITEM_RIDE; }
/** * * rct2: 0x0076750D */ static void top_spin_paint_vehicle( paint_session * session, sint8 al, sint8 cl, uint8 rideIndex, uint8 direction, sint32 height, const rct_tile_element * tileElement) { uint16 boundBoxOffsetX, boundBoxOffsetY, boundBoxOffsetZ; // As we will be drawing a vehicle we need to backup the tileElement that // is assigned to the drawings. const rct_tile_element * curTileElement = static_cast<const rct_tile_element *>(session->CurrentlyDrawnItem); height += 3; Ride * ride = get_ride(rideIndex); rct_ride_entry * rideEntry = get_ride_entry(ride->subtype); rct_vehicle * vehicle = nullptr; uint8 seatRotation = 0; sint8 armRotation = 0; if (ride->lifecycle_flags & RIDE_LIFECYCLE_ON_TRACK && ride->vehicles[0] != SPRITE_INDEX_NULL) { vehicle = GET_VEHICLE(ride->vehicles[0]); session->InteractionType = VIEWPORT_INTERACTION_ITEM_SPRITE; session->CurrentlyDrawnItem = vehicle; armRotation = vehicle->vehicle_sprite_type; seatRotation = vehicle->bank_rotation; } boundBoxOffsetX = al + 16; boundBoxOffsetY = cl + 16; boundBoxOffsetZ = height; // di uint8 lengthX = 24; // si uint8 lengthY = 24; uint32 image_id = session->TrackColours[SCHEME_MISC]; if (image_id == IMAGE_TYPE_REMAP) { image_id = SPRITE_ID_PALETTE_COLOUR_2(ride->track_colour_main[0], ride->track_colour_supports[0]); } image_id += (direction & 1) << 1; image_id += rideEntry->vehicles[0].base_image_id; // Left back bottom support image_id += 572; sub_98197C(session, image_id, al, cl, lengthX, lengthY, 90, height, boundBoxOffsetX, boundBoxOffsetY, boundBoxOffsetZ); image_id = session->TrackColours[SCHEME_MISC]; if (image_id == IMAGE_TYPE_REMAP) { image_id = SPRITE_ID_PALETTE_COLOUR_2(ride->track_colour_main[0], ride->track_colour_additional[0]); } sint32 var_1F = armRotation; if (direction & 2) { var_1F = -var_1F; if (var_1F != 0) var_1F += 48; } image_id += var_1F; image_id += (direction & 1) * 48; image_id += rideEntry->vehicles[0].base_image_id; // Left hand arm image_id += 380; sub_98199C(session, image_id, al, cl, lengthX, lengthY, 90, height, boundBoxOffsetX, boundBoxOffsetY, boundBoxOffsetZ); uint32 seatImageId; if (vehicle != nullptr && vehicle->restraints_position >= 64) { // Open Restraints image_id = (vehicle->restraints_position - 64) >> 6; image_id += direction * 3; image_id += rideEntry->vehicles[0].base_image_id; image_id += 64; seatImageId = image_id; }