1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 19:13:07 +01:00

Move RCT1 file version detection to its own function

This commit is contained in:
Gymnasiast
2015-08-19 20:34:26 +02:00
committed by Ted John
parent a28ba1d4d8
commit 2d3dfd8834
3 changed files with 19 additions and 10 deletions

View File

@@ -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;

View File

@@ -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;
}

View File

@@ -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