/***************************************************************************** * Copyright (c) 2014 Ted John * OpenRCT2, an open source clone of Roller Coaster Tycoon 2. * * This file is part of OpenRCT2. * * OpenRCT2 is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * You should have received a copy of the GNU General Public License * along with this program. If not, see . *****************************************************************************/ #include "addresses.h" #include "config.h" #include "rct1.h" #include "util/sawyercoding.h" #include "util/util.h" bool rct1_read_sc4(const char *path, rct1_s4 *s4) { uint8 *buffer, *decodedBuffer; long length, decodedLength; bool success; if (!readentirefile(path, (void**)&buffer, (int*)&length)) { RCT2_GLOBAL(RCT2_ADDRESS_ERROR_TYPE, uint8) = 255; RCT2_GLOBAL(RCT2_ADDRESS_ERROR_STRING_ID, uint16) = 3011; return 0; } int fileType = sawyercoding_detect_file_type(buffer, length); decodedBuffer = malloc(sizeof(rct1_s4)); decodedLength = (fileType & FILE_VERSION_MASK) == FILE_VERSION_RCT1 ? sawyercoding_decode_sv4(buffer, decodedBuffer, length) : sawyercoding_decode_sc4(buffer, decodedBuffer, length); if (decodedLength == sizeof(rct1_s4)) { memcpy(s4, decodedBuffer, sizeof(rct1_s4)); success = true; } else { success = false; } free(buffer); free(decodedBuffer); return success; } bool rct1_read_sv4(const char *path, rct1_s4 *s4) { uint8 *buffer, *decodedBuffer; long length, decodedLength; bool success; if (!readentirefile(path, (void**)&buffer, (int*)&length)) { RCT2_GLOBAL(RCT2_ADDRESS_ERROR_TYPE, uint8) = 255; RCT2_GLOBAL(RCT2_ADDRESS_ERROR_STRING_ID, uint16) = 3011; return 0; } decodedBuffer = malloc(sizeof(rct1_s4)); decodedLength = sawyercoding_decode_sv4(buffer, decodedBuffer, length); if (decodedLength == sizeof(rct1_s4)) { memcpy(s4, decodedBuffer, sizeof(rct1_s4)); success = true; } else { success = false; } free(buffer); free(decodedBuffer); return success; } bool rideTypeShouldLoseSeparateFlag(rct_ride_entry *rideEntry) { if (!gConfigInterface.select_by_track_type) { return false; } bool remove_flag = true; for (int j = 0; j < 3; j++) { if (ride_type_has_flag(rideEntry->ride_type[j], RIDE_TYPE_FLAG_FLAT_RIDE)) { remove_flag = false; } if (rideEntry->ride_type[j] == RIDE_TYPE_MAZE || rideEntry->ride_type[j] == RIDE_TYPE_MINI_GOLF) { remove_flag = false; } } return remove_flag; } const uint8 gRideCategories[] = { 2, // Spiral Roller coaster 2, // Stand Up Coaster 2, // Suspended Swinging 2, // Inverted 2, // Steel Mini Coaster 0, // Mini Railroad 0, // Monorail 2, // Mini Suspended Coaster 4, // Boat ride 2, // Wooden Wild Mine/Mouse 2, // Steeplechase/Motorbike/Soap Box Derby 1, // Car Ride 3, // Launched Freefall 2, // Bobsleigh Coaster 1, // Observation Tower 2, // Looping Roller Coaster 4, // Dinghy Slide 2, // Mine Train Coaster 0, // Chairlift 2, // Corkscrew Roller Coaster 1, // Maze 1, // Spiral Slide 3, // Go Karts 4, // Log Flume 4, // River Rapids 1, // Dodgems 3, // Pirate Ship 3, // Swinging Inverter Ship 5, // Food Stall 255, // (none) 5, // Drink Stall 255, // (none) 5, // Shop (all types) 1, // Merry Go Round 5, // Balloon Stall (maybe) 5, // Information Kiosk 5, // Bathroom 1, // Ferris Wheel 3, // Motion Simulator 3, // 3D Cinema 3, // Top Spin 1, // Space Rings 2, // Reverse Freefall Coaster 0, // Elevator 2, // Vertical Drop Roller Coaster 5, // ATM 3, // Twist 1, // Haunted House 5, // First Aid 1, // Circus Show 1, // Ghost Train 2, // Twister Roller Coaster 2, // Wooden Roller Coaster 2, // Side-Friction Roller Coaster 2, // Wild Mouse 2, // Multi Dimension Coaster 255, // (none) 2, // Flying Roller Coaster 255, // (none) 2, // Virginia Reel 4, // Splash Boats 1, // Mini Helicopters 2, // Lay-down Roller Coaster 0, // Suspended Monorail 255, // (none) 2, // Reverser Roller Coaster 2, // Heartline Twister Roller Coaster 1, // Mini Golf 2, // Giga Coaster 3, // Roto-Drop 1, // Flying Saucers 1, // Crooked House 1, // Monorail Cycles 2, // Compact Inverted Coaster 2, // Water Coaster 2, // Air Powered Vertical Coaster 2, // Inverted Hairpin Coaster 3, // Magic Carpet 4, // Submarine Ride 4, // River Rafts 255, // (none) 3, // Enterprise 255, // (none) 255, // (none) 255, // (none) 255, // (none) 2, // Inverted Impulse Coaster 2, // Mini Roller Coaster 2, // Mine Ride 255, //59 Unknown Ride 2 // LIM Launched Roller Coaster };