From 7a4ca989ba2354f3d221e7a687c3f2f52585e6fa Mon Sep 17 00:00:00 2001 From: Ted John Date: Fri, 6 Jan 2017 12:24:40 +0000 Subject: [PATCH] Add beginnings of vehicle importing --- src/openrct2/rct1.h | 35 ++++++++++++++++++++++++++++++++ src/openrct2/rct1/S4Importer.cpp | 28 +++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/src/openrct2/rct1.h b/src/openrct2/rct1.h index 4216a4dfd9..4afa5da472 100644 --- a/src/openrct2/rct1.h +++ b/src/openrct2/rct1.h @@ -213,6 +213,40 @@ typedef struct rct1_unk_sprite { uint8 var_71; } rct1_unk_sprite; +typedef struct rct1_vehicle { + uint8 sprite_identifier; // 0x00 + uint8 is_child; // 0x01 + uint16 next_in_quadrant; // 0x02 + uint16 next; // 0x04 + uint16 previous; // 0x06 + uint8 linked_list_type_offset; // 0x08 Valid values are SPRITE_LINKEDLIST_OFFSET_... + // Height from center of sprite to bottom + uint8 sprite_height_negative; // 0x09 + uint16 sprite_index; // 0x0A + uint16 flags; // 0x0C + sint16 x; // 0x0E + sint16 y; // 0x10 + sint16 z; // 0x12 + // Width from center of sprite to edge + uint8 sprite_width; // 0x14 + // Height from center of sprite to top + uint8 sprite_height_positive; // 0x15 + sint16 sprite_left; // 0x16 + sint16 sprite_top; // 0x18 + sint16 sprite_right; // 0x1A + sint16 sprite_bottom; // 0x1C + uint8 sprite_direction; // 0x1E + uint8 vehicle_sprite_type; // 0x1F + uint8 bank_rotation; // 0x20 + uint8 pad_21[3]; + sint32 remaining_distance; // 0x24 + sint32 velocity; // 0x28 + sint32 acceleration; // 0x2C + uint8 ride; // 0x30 + uint8 vehicle_type; // 0x31 + rct_vehicle_colour colours; // 0x32 +} rct1_vehicle; + typedef struct rct1_peep { uint8 sprite_identifier; // 0x00 uint8 misc_identifier; // 0x01 @@ -405,6 +439,7 @@ enum RCT1_PEEP_SPRITE_TYPE { typedef union rct1_sprite { uint8 pad_00[0x100]; rct1_unk_sprite unknown; + rct1_vehicle vehicle; rct1_peep peep; rct_litter litter; rct_balloon balloon; diff --git a/src/openrct2/rct1/S4Importer.cpp b/src/openrct2/rct1/S4Importer.cpp index 0e7aae7e7c..ff205e6c4e 100644 --- a/src/openrct2/rct1/S4Importer.cpp +++ b/src/openrct2/rct1/S4Importer.cpp @@ -786,11 +786,39 @@ private: void ImportSprites() { + ImportVehicles(); ImportPeeps(); ImportLitter(); ImportMiscSprites(); } + void ImportVehicles() + { + for (int i = 0; i < RCT1_MAX_SPRITES; i++) + { + if (_s4.sprites[i].unknown.sprite_identifier == SPRITE_IDENTIFIER_VEHICLE) + { + rct1_vehicle * srcVehicle = &_s4.sprites[i].vehicle; + if (srcVehicle->x != (sint16)0x8000) + { + rct_vehicle * vehicle = (rct_vehicle *)create_sprite(SPRITE_IDENTIFIER_VEHICLE); + move_sprite_to_list((rct_sprite *)vehicle, SPRITE_LIST_VEHICLE * 2); + + ImportVehicle(vehicle, srcVehicle); + } + } + } + } + + void ImportVehicle(rct_vehicle * dst, rct1_vehicle * src) + { + dst->sprite_identifier = SPRITE_IDENTIFIER_VEHICLE; + dst->ride = src->ride; + + sprite_move(src->x, src->y, src->z, (rct_sprite *)dst); + invalidate_sprite_2((rct_sprite *)dst); + } + void ImportPeeps() { for (size_t i = 0; i < RCT1_MAX_SPRITES; i++)