OpenRCT2/src/rct1.h

347 lines
10 KiB
C

/*****************************************************************************
* 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 <http://www.gnu.org/licenses/>.
*****************************************************************************/
#ifndef _RCT1_H_
#define _RCT1_H_
#include "management/award.h"
#include "management/news_item.h"
#include "management/research.h"
#include "rct2.h"
#include "ride/ride.h"
#include "world/banner.h"
#include "world/map.h"
#include "world/sprite.h"
typedef struct {
uint16 x;
uint16 y;
uint16 z;
uint8 direction;
} rct1_entrance;
/**
* RCT1,AA,LL scenario / saved game structure.
* size: 0x1F850C
*/
typedef struct {
uint16 month;
uint16 day;
uint32 ticks;
uint32 random_a;
uint32 random_b;
rct_map_element map_elements[0xC000];
uint32 unk_counter;
rct_sprite sprites[5000];
uint16 next_sprite_index;
uint16 first_vehicle_sprite_index;
uint16 first_peep_sprite_index;
uint16 first_duck_sprite_index;
uint16 first_litter_sprite_index;
uint16 first_oversized_ride_car_sprite_index;
uint16 sprites_available;
uint16 num_vehicle_sprites;
uint16 num_peep_sprites;
uint16 num_duck_sprites;
uint16 num_litter_sprites;
uint16 num_oversized_ride_car_sprites;
uint32 park_name_string_index;
uint32 unk_198830;
money32 cash;
money32 loan;
uint32 park_flags;
money16 park_entrance_fee;
rct1_entrance park_entrance;
uint8 unk_198849;
rct2_peep_spawn peep_spawn[2];
uint8 unk_198856;
uint8 research_level;
uint32 unk_198858;
uint8 available_rides[32];
uint8 available_vehicles[32];
uint32 ride_feature_1[128];
uint32 ride_feature_2[128];
uint16 guests_in_park;
uint16 unk_198C9E;
money32 expenditure[14 * 16];
uint32 guests_in_park_2;
uint8 unk_199024;
uint8 handman_colour;
uint8 mechanic_colour;
uint8 security_guard_colour;
uint8 available_scenery[128];
uint16 available_banners;
uint8 unk_1990AA[94];
uint16 park_rating;
uint8 park_rating_history[32];
uint8 guests_in_park_history[32];
uint8 research_priority;
uint8 research_progress;
uint8 last_research_item;
uint8 last_research_ride;
uint8 last_research_category;
uint8 last_research_flag;
rct_research_item research_items[200];
uint8 next_research_item;
uint8 next_research_ride;
uint8 next_research_category;
uint8 next_research_flag;
uint16 unk_19953C;
uint32 unk_19953E;
uint16 cheat_detection_land_owned;
uint16 unk_199544;
money16 median_recommended_park_entry_fee;
money32 max_loan;
money16 guest_initial_cash;
uint8 guest_initial_hunger;
uint8 guest_initial_thirst;
uint8 scenario_objective_type;
uint8 scenario_objective_years;
uint16 unk_199552;
money32 scenario_objective_currency;
uint16 scenario_objective_num_guests;
uint8 marketing_status[20];
uint8 marketing_assoc[20];
uint8 unk_199582[2];
money32 cash_history[128];
money32 total_expenditure;
money32 profit;
uint8 unk_199788[8];
money32 weekly_profit_history[128];
money32 park_value;
money32 park_value_history[128];
uint32 scenario_objective_score;
uint32 num_admissions;
money32 admission_total_income;
money32 company_value;
uint8 thought_timer[16];
rct_award awards[4];
money16 land_price;
money16 construction_rights_price;
uint16 unk_199BCC;
uint16 unk_199BCE;
uint32 unk_199BD0;
char username[64];
uint32 game_version;
money32 objective_completion_company_value;
uint32 finance_checksum;
uint16 num_rides;
uint16 cheat_detection_neg_num_rides;
uint16 cheat_detection_max_owned_tiles;
uint16 cheat_detection_neg_max_owned_tiles;
uint32 finance_checksum_3;
uint32 scenario_slot_index_checksum;
char scenario_winner[32];
uint32 finance_checksum_2;
char copyright_notice[40];
uint16 cheat_detection_sv6_sc4[4];
uint16 unk_199C84;
uint16 unk_199C86;
uint16 map_size_unk_a;
uint16 map_size_unk_b;
uint16 map_size;
uint16 map_size_unk_c;
uint32 same_price_flags;
uint16 unk_199C94;
uint8 unk_199C96[3];
uint8 water_colour;
uint16 unk_199C9A;
rct_research_item research_items_LL[180];
uint8 unk_19A020[5468];
rct_banner banners[100];
char string_table[32][1024];
uint32 game_time_counter;
rct_ride rides[255];
uint16 unk_game_time_counter;
uint16 view_x;
uint16 view_y;
uint8 view_zoom;
uint8 view_rotation;
uint8 animated_objects[6000];
uint32 num_animated_objects;
uint8 unk_1CADBC[12];
uint16 scrolling_text_step;
uint32 unk_1CADCA;
uint16 unk_1CADCE;
uint8 unk_1CADD0[116];
rct_ride_measurement ride_measurements[8];
uint32 next_guest_index;
uint16 game_counter_5;
uint8 patrol_areas[0x3C00];
uint8 unk_1F42AA[116];
uint8 unk_1F431E[4];
uint8 unk_1F4322[8];
uint8 climate;
uint8 unk_1F432B;
uint16 climate_timer;
uint8 weather;
uint8 target_weather;
uint8 temperature;
uint8 target_temperature;
uint8 thunder_frequency;
uint8 target_thunder_frequency;
uint8 weather_gloom;
uint8 target_weather_gloom;
uint8 rain;
uint8 target_rain;
rct_news_item messages[61];
char scenario_name[62];
uint16 scenario_slot_index;
uint32 scenario_flags;
uint8 unk_1F8358[432];
uint32 expansion_pack_checksum;
} rct1_s4;
enum {
RCT1_RIDE_TYPE_NULL = 255,
RCT1_RIDE_TYPE_WOODEN_ROLLER_COASTER = 0,
RCT1_RIDE_TYPE_STAND_UP_STEEL_ROLLER_COASTER,
RCT1_RIDE_TYPE_SUSPENDED_ROLLER_COASTER,
RCT1_RIDE_TYPE_INVERTED_ROLLER_COASTER,
RCT1_RIDE_TYPE_STEEL_MINI_ROLLER_COASTER,
RCT1_RIDE_TYPE_MINIATURE_RAILROAD,
RCT1_RIDE_TYPE_MONORAIL,
RCT1_RIDE_TYPE_SUSPENDED_SINGLE_RAIL_ROLLER_COASTER,
RCT1_RIDE_TYPE_BOAT_HIRE,
RCT1_RIDE_TYPE_WOODEN_CRAZY_RODENT_ROLLER_COASTER,
RCT1_RIDE_TYPE_SINGLE_RAIL_ROLLER_COASTER,
RCT1_RIDE_TYPE_CAR_RIDE,
RCT1_RIDE_TYPE_WHOA_BELLY,
RCT1_RIDE_TYPE_BOBSLED_ROLLER_COASTER,
RCT1_RIDE_TYPE_OBSERVATION_TOWER,
RCT1_RIDE_TYPE_STEEL_ROLLER_COASTER,
RCT1_RIDE_TYPE_WATER_SLIDE,
RCT1_RIDE_TYPE_MINE_TRAIN_ROLLER_COASTER,
RCT1_RIDE_TYPE_CHAIRLIFT,
RCT1_RIDE_TYPE_STEEL_CORKSCREW_ROLLER_COASTER,
RCT1_RIDE_TYPE_HEDGE_MAZE,
RCT1_RIDE_TYPE_SPIRAL_SLIDE,
RCT1_RIDE_TYPE_GO_KARTS,
RCT1_RIDE_TYPE_LOG_FLUME,
RCT1_RIDE_TYPE_RIVER_RAPIDS,
RCT1_RIDE_TYPE_BUMPER_CARS,
RCT1_RIDE_TYPE_SWINGING_SHIP,
RCT1_RIDE_TYPE_SWINGING_INVERTER_SHIP,
RCT1_RIDE_TYPE_ICE_CREAM_STALL,
RCT1_RIDE_TYPE_FRIES_STALL,
RCT1_RIDE_TYPE_DRINK_STALL,
RCT1_RIDE_TYPE_COTTON_CANDY_STALL,
RCT1_RIDE_TYPE_BURGER_BAR,
RCT1_RIDE_TYPE_MERRY_GO_ROUND,
RCT1_RIDE_TYPE_BALLOON_STALL,
RCT1_RIDE_TYPE_INFORMATION_KIOSK,
RCT1_RIDE_TYPE_BATHROOM,
RCT1_RIDE_TYPE_FERRIS_WHEEL,
RCT1_RIDE_TYPE_MOTION_SIMULATOR,
RCT1_RIDE_TYPE_3D_CINEMA,
RCT1_RIDE_TYPE_GRAVITRON,
RCT1_RIDE_TYPE_SPACE_RINGS,
RCT1_RIDE_TYPE_REVERSE_WHOA_BELLY_ROLLER_COASTER,
RCT1_RIDE_TYPE_SOUVENIR_STALL,
RCT1_RIDE_TYPE_VERTICAL_ROLLER_COASTER,
RCT1_RIDE_TYPE_PIZZA_STALL,
RCT1_RIDE_TYPE_SCRAMBLED_EGGS,
RCT1_RIDE_TYPE_HAUNTED_HOUSE,
RCT1_RIDE_TYPE_POPCORN_STALL,
RCT1_RIDE_TYPE_CIRCUS_SHOW,
RCT1_RIDE_TYPE_GHOST_TRAIN,
RCT1_RIDE_TYPE_STEEL_TWISTER_ROLLER_COASTER,
RCT1_RIDE_TYPE_WOODEN_TWISTER_ROLLER_COASTER,
RCT1_RIDE_TYPE_WOODEN_SIDE_FRICTION_ROLLER_COASTER,
RCT1_RIDE_TYPE_STEEL_WILD_MOUSE_ROLLER_COASTER,
RCT1_RIDE_TYPE_HOT_DOG_STALL,
RCT1_RIDE_TYPE_EXOTIC_SEA_FOOD_STALL,
RCT1_RIDE_TYPE_HAT_STALL,
RCT1_RIDE_TYPE_CANDY_APPLE_STAND,
RCT1_RIDE_TYPE_VIRGINIA_REEL,
RCT1_RIDE_TYPE_RIVER_RIDE,
RCT1_RIDE_TYPE_CYCLE_MONORAIL,
RCT1_RIDE_TYPE_FLYING_ROLLER_COASTER,
RCT1_RIDE_TYPE_SUSPENDED_MONORAIL,
RCT1_RIDE_TYPE_40,
RCT1_RIDE_TYPE_WOODEN_REVERSER_ROLLER_COASTER,
RCT1_RIDE_TYPE_HEARTLINE_TWISTER_ROLLER_COASTER,
RCT1_RIDE_TYPE_MINIATURE_GOLF,
RCT1_RIDE_TYPE_44,
RCT1_RIDE_TYPE_ROTO_DROP,
RCT1_RIDE_TYPE_FLYING_SAUCERS,
RCT1_RIDE_TYPE_CROOKED_HOUSE,
RCT1_RIDE_TYPE_CYCLE_RAILWAY,
RCT1_RIDE_TYPE_SUSPENDED_LOOPING_ROLLER_COASTER,
RCT1_RIDE_TYPE_WATER_COASTER,
RCT1_RIDE_TYPE_AIR_POWERED_VERTICAL_COASTER,
RCT1_RIDE_TYPE_INVERTED_WILD_MOUSE_COASTER,
RCT1_RIDE_TYPE_JET_SKIS,
RCT1_RIDE_TYPE_T_SHIRT_STALL,
RCT1_RIDE_TYPE_RAFT_RIDE,
RCT1_RIDE_TYPE_DOUGHNUT_SHOP,
RCT1_RIDE_TYPE_ENTERPRISE,
RCT1_RIDE_TYPE_COFFEE_SHOP,
RCT1_RIDE_TYPE_FRIED_CHICKEN_STALL,
RCT1_RIDE_TYPE_LEMONADE_STALL
};
typedef struct{
uint8 type; // 0x00
uint8 vehicle_type; // 0x01
uint32 special_track_flags; // 0x02
uint8 operating_mode; // 0x06
uint8 vehicle_colour_version; // 0x07 Vehicle colour type in first two bits, Version in bits 3,4
uint8 body_trim_colour[24]; // 0x08
uint8 track_spine_colour_rct1; // 0x20
uint8 track_rail_colour_rct1; // 0x21
uint8 track_support_colour_rct1; // 0x22
uint8 departure_control_flags; // 0x23
uint8 number_of_trains; // 0x24
uint8 cars_per_train; // 0x25
uint8 min_wait_time; // 0x26
uint8 max_wait_time; // 0x27
uint8 speed; // 0x28
uint8 max_speed; // 0x29
uint8 average_speed; // 0x2A
uint16 ride_length; // 0x2B
uint8 max_positive_vertical_g; // 0x2D
uint8 max_negitive_vertical_g; // 0x2E
uint8 max_lateral_g; // 0x2F
union {
uint8 inversions; // 0x30
uint8 holes; // 0x30
};
uint8 drops; // 0x31
uint8 highest_drop_height; // 0x32
uint8 excitement; // 0x33
uint8 intensity; // 0x34
uint8 nausea; // 0x35
uint8 pad_36[2];
union{
uint16 start_track_data_original; // 0x38
uint8 track_spine_colour[4]; // 0x38
};
uint8 track_rail_colour[4]; // 0x3C
union{
uint8 track_support_colour[4]; // 0x40
uint8 wall_type[4]; // 0x40
};
uint8 pad_41[0x83];
uint16 start_track_data_AA_CF; // 0xC4
}rct_track_td4; // Information based off RCTTechDepot
#endif