diff --git a/src/openrct2/core/DataSerialiserTraits.h b/src/openrct2/core/DataSerialiserTraits.h index 85789c8157..f12e9b7a6e 100644 --- a/src/openrct2/core/DataSerialiserTraits.h +++ b/src/openrct2/core/DataSerialiserTraits.h @@ -596,7 +596,89 @@ template<> struct DataSerializerTraits static void log(IStream* stream, const TrackDesignTrackElement& val) { char msg[128] = {}; - snprintf(msg, sizeof(msg), "TrackDesignElement(type = %d, flags = %d)", val.type, val.flags); + snprintf(msg, sizeof(msg), "TrackDesignTrackElement(type = %d, flags = %d)", val.type, val.flags); stream->Write(msg, strlen(msg)); } }; + +template<> struct DataSerializerTraits +{ + static void encode(IStream* stream, const TrackDesignMazeElement& val) + { + uint32_t temp = ByteSwapBE(val.all); + stream->Write(&temp); + } + static void decode(IStream* stream, TrackDesignMazeElement& val) + { + uint32_t temp; + stream->Read(&temp); + val.all = ByteSwapBE(temp); + } + static void log(IStream* stream, const TrackDesignMazeElement& val) + { + char msg[128] = {}; + snprintf(msg, sizeof(msg), "TrackDesignMazeElement(all = %d)", val.all); + stream->Write(msg, strlen(msg)); + } +}; + +template<> struct DataSerializerTraits +{ + static void encode(IStream* stream, const TrackDesignEntranceElement& val) + { + stream->Write(&val.x); + stream->Write(&val.y); + stream->Write(&val.z); + stream->Write(&val.direction); + stream->Write(&val.isExit); + } + static void decode(IStream* stream, TrackDesignEntranceElement& val) + { + stream->Read(&val.x); + stream->Read(&val.y); + stream->Read(&val.z); + stream->Read(&val.direction); + stream->Read(&val.isExit); + } + static void log(IStream* stream, const TrackDesignEntranceElement& val) + { + char msg[128] = {}; + snprintf(msg, sizeof(msg), "TrackDesignEntranceElement(x = %d, y = %d, z = %d, dir = %d, isExit = %d)", val.x, val.y, val.z, val.direction, val.isExit); + stream->Write(msg, strlen(msg)); + } +}; + +template<> struct DataSerializerTraits +{ + static void encode(IStream* stream, const TrackDesignSceneryElement& val) + { + stream->Write(&val.x); + stream->Write(&val.y); + stream->Write(&val.z); + stream->Write(&val.flags); + stream->Write(&val.primary_colour); + stream->Write(&val.secondary_colour); + DataSerializerTraits s; + s.encode(stream, val.scenery_object); + } + static void decode(IStream* stream, TrackDesignSceneryElement& val) + { + stream->Read(&val.x); + stream->Read(&val.y); + stream->Read(&val.z); + stream->Read(&val.flags); + stream->Read(&val.primary_colour); + stream->Read(&val.secondary_colour); + DataSerializerTraits s; + s.decode(stream, val.scenery_object); + } + static void log(IStream* stream, const TrackDesignSceneryElement& val) + { + char msg[128] = {}; + snprintf( + msg, sizeof(msg), "TrackDesignSceneryElement(x = %d, y = %d, z = %d, flags = %d, colour1 = %d, colour2 = %d)", val.x, val.y, val.z, + val.flags, val.primary_colour, val.secondary_colour); + stream->Write(msg, strlen(msg)); + stream->WriteArray(val.scenery_object.name, 8); + } +}; diff --git a/src/openrct2/ride/TrackDesign.cpp b/src/openrct2/ride/TrackDesign.cpp index 99dbce56d1..b1df2afe88 100644 --- a/src/openrct2/ride/TrackDesign.cpp +++ b/src/openrct2/ride/TrackDesign.cpp @@ -603,10 +603,10 @@ void TrackDesign::Serialise(DataSerialiser& stream) stream << DS_TAG(lift_hill_speed); stream << DS_TAG(num_circuits); - //stream << DS_TAG(maze_elements); + stream << DS_TAG(maze_elements); stream << DS_TAG(track_elements); - //stream << DS_TAG(entrance_elements); - //stream << DS_TAG(scenery_elements); + stream << DS_TAG(entrance_elements); + stream << DS_TAG(scenery_elements); stream << DS_TAG(name); }