OpenRCT2/src/rct1.c

191 lines
5.0 KiB
C

#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
/*****************************************************************************
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
*
* OpenRCT2 is the work of many authors, a full list can be found in contributors.md
* For more information, visit https://github.com/OpenRCT2/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.
*
* A full copy of the GNU General Public License can be found in licence.txt
*****************************************************************************/
#pragma endregion
#include "config.h"
#include "game.h"
#include "localisation/string_ids.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;
size_t length, decodedLength;
bool success;
if (!readentirefile(path, (void**)&buffer, &length)) {
gErrorType = ERROR_TYPE_FILE_LOAD;
gErrorStringId = STR_FILE_CONTAINS_INVALID_DATA;
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, sizeof(rct1_s4)) :
sawyercoding_decode_sc4(buffer, decodedBuffer, length, sizeof(rct1_s4));
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;
size_t length, decodedLength;
bool success;
if (!readentirefile(path, (void**)&buffer, &length)) {
gErrorType = ERROR_TYPE_FILE_LOAD;
gErrorStringId = STR_FILE_CONTAINS_INVALID_DATA;
return 0;
}
decodedBuffer = malloc(sizeof(rct1_s4));
decodedLength = sawyercoding_decode_sv4(buffer, decodedBuffer, length, sizeof(rct1_s4));
if (decodedLength == sizeof(rct1_s4)) {
memcpy(s4, decodedBuffer, sizeof(rct1_s4));
success = true;
} else {
success = false;
}
free(buffer);
free(decodedBuffer);
return success;
}
bool rideTypeShouldLoseSeparateFlag(const 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
};