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:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user