From c672cb920b2a9aa857c48b49e6aeffa521243123 Mon Sep 17 00:00:00 2001 From: Ted John Date: Wed, 6 Jul 2016 20:19:33 +0100 Subject: [PATCH] read ride objects field by field This will help with x64 port --- src/object/RideObject.cpp | 84 +++++++++++++++++++++++++++++++++++++-- src/object/RideObject.h | 2 +- 2 files changed, 81 insertions(+), 5 deletions(-) diff --git a/src/object/RideObject.cpp b/src/object/RideObject.cpp index 6904fcc7b9..4d91204d03 100644 --- a/src/object/RideObject.cpp +++ b/src/object/RideObject.cpp @@ -45,10 +45,38 @@ RideObject::~RideObject() void RideObject::ReadLegacy(IReadObjectContext * context, IStream * stream) { - stream->Read(&_legacyType); - _legacyType.name = 0; - _legacyType.description = 0; - _legacyType.images_offset = 0; + stream->Seek(8, STREAM_SEEK_CURRENT); + _legacyType.flags = stream->ReadValue(); + for (int i = 0; i < 3; i++) + { + _legacyType.ride_type[i] = stream->ReadValue(); + } + _legacyType.min_cars_in_train = stream->ReadValue(); + _legacyType.max_cars_in_train = stream->ReadValue(); + _legacyType.cars_per_flat_ride = stream->ReadValue(); + _legacyType.zero_cars = stream->ReadValue(); + _legacyType.tab_vehicle = stream->ReadValue(); + _legacyType.default_vehicle = stream->ReadValue(); + _legacyType.front_vehicle = stream->ReadValue(); + _legacyType.second_vehicle = stream->ReadValue(); + _legacyType.rear_vehicle = stream->ReadValue(); + _legacyType.third_vehicle = stream->ReadValue(); + _legacyType.pad_019 = stream->ReadValue(); + for (int i = 0; i < 4; i++) + { + rct_ride_entry_vehicle * entry = &_legacyType.vehicles[i]; + ReadLegacyVehicle(context, stream, entry); + } + stream->Seek(4, STREAM_SEEK_CURRENT); + _legacyType.excitement_multipler = stream->ReadValue(); + _legacyType.intensity_multipler = stream->ReadValue(); + _legacyType.nausea_multipler = stream->ReadValue(); + _legacyType.max_height = stream->ReadValue(); + _legacyType.enabledTrackPieces = stream->ReadValue(); + _legacyType.category[0] = stream->ReadValue(); + _legacyType.category[1] = stream->ReadValue(); + _legacyType.shop_item = stream->ReadValue(); + _legacyType.shop_item_secondary = stream->ReadValue(); GetStringTable()->Read(context, stream, OBJ_STRING_ID_NAME); GetStringTable()->Read(context, stream, OBJ_STRING_ID_DESCRIPTION); @@ -363,3 +391,51 @@ void RideObject::SetRepositoryItem(ObjectRepositoryItem * item) const } item->RideFlags = flags; } + +void RideObject::ReadLegacyVehicle(IReadObjectContext * context, IStream * stream, rct_ride_entry_vehicle * vehicle) +{ + vehicle->rotation_frame_mask = stream->ReadValue(); + vehicle->var_02 = stream->ReadValue(); + vehicle->var_03 = stream->ReadValue(); + vehicle->spacing = stream->ReadValue(); + vehicle->car_friction = stream->ReadValue(); + vehicle->tab_height = stream->ReadValue(); + vehicle->num_seats = stream->ReadValue(); + vehicle->sprite_flags = stream->ReadValue(); + vehicle->sprite_width = stream->ReadValue(); + vehicle->sprite_height_negative = stream->ReadValue(); + vehicle->sprite_height_positive = stream->ReadValue(); + vehicle->var_11 = stream->ReadValue(); + vehicle->flags_a = stream->ReadValue(); + vehicle->flags_b = stream->ReadValue(); + vehicle->var_16 = stream->ReadValue(); + stream->Seek(4, STREAM_SEEK_CURRENT); + vehicle->var_1C = stream->ReadValue(); + vehicle->var_20 = stream->ReadValue(); + vehicle->var_24 = stream->ReadValue(); + vehicle->var_28 = stream->ReadValue(); + vehicle->var_2C = stream->ReadValue(); + vehicle->var_30 = stream->ReadValue(); + vehicle->var_34 = stream->ReadValue(); + vehicle->var_38 = stream->ReadValue(); + vehicle->var_3C = stream->ReadValue(); + vehicle->var_40 = stream->ReadValue(); + vehicle->var_44 = stream->ReadValue(); + vehicle->var_48 = stream->ReadValue(); + vehicle->var_4C = stream->ReadValue(); + vehicle->no_vehicle_images = stream->ReadValue(); + vehicle->no_seating_rows = stream->ReadValue(); + vehicle->spinning_inertia = stream->ReadValue(); + vehicle->spinning_friction = stream->ReadValue(); + vehicle->friction_sound_id = stream->ReadValue(); + vehicle->var_58 = stream->ReadValue(); + vehicle->sound_range = stream->ReadValue(); + vehicle->var_5A = stream->ReadValue(); + vehicle->powered_acceleration = stream->ReadValue(); + vehicle->powered_max_speed = stream->ReadValue(); + vehicle->car_visual = stream->ReadValue(); + vehicle->effect_visual = stream->ReadValue(); + vehicle->draw_order = stream->ReadValue(); + vehicle->special_frames = stream->ReadValue(); + stream->Seek(4, STREAM_SEEK_CURRENT); +} diff --git a/src/object/RideObject.h b/src/object/RideObject.h index 02c4094ea4..70d9b81b60 100644 --- a/src/object/RideObject.h +++ b/src/object/RideObject.h @@ -48,5 +48,5 @@ public: void SetRepositoryItem(ObjectRepositoryItem * item) const; private: - + void ReadLegacyVehicle(IReadObjectContext * context, IStream * stream, rct_ride_entry_vehicle * vehicle); };