From 2d3dfd8834d6bd429d69068c704142b35f80c066 Mon Sep 17 00:00:00 2001 From: Gymnasiast Date: Wed, 19 Aug 2015 20:34:26 +0200 Subject: [PATCH] Move RCT1 file version detection to its own function --- src/rct1.c | 6 ++++-- src/util/sawyercoding.c | 22 ++++++++++++++-------- src/util/sawyercoding.h | 1 + 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/rct1.c b/src/rct1.c index 5a7f29de9c..0fe69bf9e4 100644 --- a/src/rct1.c +++ b/src/rct1.c @@ -2044,6 +2044,8 @@ static void rct1_import_map_elements(rct1_s4 *s4) static void rct1_import_ride(rct1_s4 *s4, rct_ride *dst, rct1_ride *src) { + int gameVersion = sawyercoding_detect_rct1_version(s4->game_version) & FILE_VERSION_MASK; + rct_ride_type *rideEntry; memset(dst, 0, sizeof(rct_ride)); @@ -2112,7 +2114,7 @@ static void rct1_import_ride(rct1_s4 *s4, rct_ride *dst, rct1_ride *src) // Colours dst->colour_scheme_type = src->colour_scheme; - if (s4->game_version < 110000) { + if (gameVersion == FILE_VERSION_RCT1) { dst->track_colour_main[0] = RCT1ColourConversionTable[src->track_primary_colour]; dst->track_colour_additional[0] = RCT1ColourConversionTable[src->track_secondary_colour]; dst->track_colour_supports[0] = RCT1ColourConversionTable[src->track_support_colour]; @@ -2124,7 +2126,7 @@ static void rct1_import_ride(rct1_s4 *s4, rct_ride *dst, rct1_ride *src) } } - if(s4->game_version < 120000 && dst->type == RIDE_TYPE_MERRY_GO_ROUND) { + if(gameVersion < FILE_VERSION_RCT1_LL && dst->type == RIDE_TYPE_MERRY_GO_ROUND) { // The merry-go-round in pre-LL versions was always yellow with red dst->vehicle_colours[0].body_colour = 18; dst->vehicle_colours[0].trim_colour = 28; diff --git a/src/util/sawyercoding.c b/src/util/sawyercoding.c index 1a6ba9b15d..847fb79efc 100644 --- a/src/util/sawyercoding.c +++ b/src/util/sawyercoding.c @@ -483,14 +483,20 @@ int sawyercoding_detect_file_type(const uint8 *src, size_t length) actualChecksum = rol32(actualChecksum, 3); } - switch (checksum - actualChecksum) { - case +108156: return FILE_VERSION_RCT1 | FILE_TYPE_SV4; - case -108156: return FILE_VERSION_RCT1 | FILE_TYPE_SC4; - case +110001: return FILE_VERSION_RCT1_AA | FILE_TYPE_SV4; - case -110001: return FILE_VERSION_RCT1_AA | FILE_TYPE_SC4; - case +120001: return FILE_VERSION_RCT1_LL | FILE_TYPE_SV4; - case -120001: return FILE_VERSION_RCT1_LL | FILE_TYPE_SC4; - } + return sawyercoding_detect_rct1_version(checksum - actualChecksum); +} + +int sawyercoding_detect_rct1_version(int gameVersion) +{ + int fileType = (gameVersion) > 0 ? FILE_TYPE_SV4 : FILE_TYPE_SC4; + gameVersion=abs(gameVersion); + + if (gameVersion >= 108000 && gameVersion < 110000) + return (FILE_VERSION_RCT1 | fileType); + else if (gameVersion >= 110000 && gameVersion < 120000) + return (FILE_VERSION_RCT1_AA | fileType); + else if (gameVersion >= 120000 && gameVersion < 130000) + return (FILE_VERSION_RCT1_LL | fileType); return -1; } diff --git a/src/util/sawyercoding.h b/src/util/sawyercoding.h index 80e3c756ed..2b737c6980 100644 --- a/src/util/sawyercoding.h +++ b/src/util/sawyercoding.h @@ -59,5 +59,6 @@ size_t sawyercoding_encode_td6(const uint8 *src, uint8 *dst, size_t length); int sawyercoding_validate_track_checksum(const uint8* src, size_t length); int sawyercoding_detect_file_type(const uint8 *src, size_t length); +int sawyercoding_detect_rct1_version(int gameVersion); #endif