2016-05-04 19:24:41 +02:00
|
|
|
#pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
|
2014-04-06 18:45:09 +02:00
|
|
|
/*****************************************************************************
|
|
|
|
* OpenRCT2, an open source clone of Roller Coaster Tycoon 2.
|
|
|
|
*
|
2016-05-04 19:24:41 +02:00
|
|
|
* 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
|
2014-04-06 18:45:09 +02:00
|
|
|
*
|
|
|
|
* 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.
|
2016-05-04 19:24:41 +02:00
|
|
|
*
|
|
|
|
* A full copy of the GNU General Public License can be found in licence.txt
|
2014-04-06 18:45:09 +02:00
|
|
|
*****************************************************************************/
|
2016-05-04 19:24:41 +02:00
|
|
|
#pragma endregion
|
2014-04-06 18:45:09 +02:00
|
|
|
|
|
|
|
#ifndef _SCENARIO_H_
|
|
|
|
#define _SCENARIO_H_
|
|
|
|
|
2016-09-17 21:59:55 +02:00
|
|
|
#include "addresses.h"
|
2015-06-15 22:56:26 +02:00
|
|
|
#include "common.h"
|
|
|
|
#include "management/award.h"
|
2016-05-09 23:11:56 +02:00
|
|
|
#include "management/finance.h"
|
2015-06-15 22:56:26 +02:00
|
|
|
#include "management/news_item.h"
|
|
|
|
#include "management/research.h"
|
|
|
|
#include "ride/ride.h"
|
2016-08-14 15:47:53 +02:00
|
|
|
#include "ride/ride_ratings.h"
|
2014-05-24 23:14:42 +02:00
|
|
|
#include "object.h"
|
2015-06-08 00:12:17 +02:00
|
|
|
#include "platform/platform.h"
|
2015-06-15 22:56:26 +02:00
|
|
|
#include "world/banner.h"
|
|
|
|
#include "world/map.h"
|
2016-05-07 17:20:10 +02:00
|
|
|
#include "world/map_animation.h"
|
2015-06-15 22:56:26 +02:00
|
|
|
#include "world/sprite.h"
|
2014-04-06 18:45:09 +02:00
|
|
|
|
2016-06-02 23:22:08 +02:00
|
|
|
#pragma pack(push, 1)
|
2014-04-10 04:23:12 +02:00
|
|
|
/**
|
|
|
|
* SV6/SC6 header chunk
|
|
|
|
* size: 0x20
|
|
|
|
*/
|
2016-05-12 23:57:40 +02:00
|
|
|
typedef struct rct_s6_header {
|
2014-04-10 04:23:12 +02:00
|
|
|
uint16 type; // 0x00
|
|
|
|
uint16 num_packed_objects; // 0x02
|
|
|
|
uint32 version; // 0x04
|
|
|
|
uint32 magic_number; // 0x08
|
|
|
|
uint8 pad_0C[0x14];
|
2016-06-02 23:22:08 +02:00
|
|
|
} rct_s6_header;
|
2016-06-03 10:54:44 +02:00
|
|
|
assert_struct_size(rct_s6_header, 0x20);
|
2014-04-10 04:23:12 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* SC6 information chunk
|
|
|
|
* size: 0x198
|
|
|
|
*/
|
2016-05-12 23:57:40 +02:00
|
|
|
typedef struct rct_s6_info {
|
2015-10-15 23:16:27 +02:00
|
|
|
uint8 editor_step;
|
2014-04-10 04:23:12 +02:00
|
|
|
uint8 category; // 0x01
|
|
|
|
uint8 objective_type; // 0x02
|
|
|
|
uint8 objective_arg_1; // 0x03
|
|
|
|
sint32 objective_arg_2; // 0x04
|
|
|
|
sint16 objective_arg_3; // 0x08
|
|
|
|
uint8 pad_00A[0x3E];
|
|
|
|
char name[64]; // 0x48
|
|
|
|
char details[256]; // 0x88
|
2014-05-24 23:14:42 +02:00
|
|
|
rct_object_entry entry; // 0x188
|
2016-06-02 23:22:08 +02:00
|
|
|
} rct_s6_info;
|
2016-06-03 10:54:44 +02:00
|
|
|
assert_struct_size(rct_s6_info, 0x198);
|
2014-04-10 04:23:12 +02:00
|
|
|
|
2015-12-11 16:38:37 +01:00
|
|
|
/**
|
2014-05-24 00:52:13 +02:00
|
|
|
* Scenario scores file header.
|
|
|
|
* size: 0x10
|
|
|
|
*/
|
2016-05-12 23:57:40 +02:00
|
|
|
typedef struct rct_scenario_scores_header {
|
2014-05-24 00:52:13 +02:00
|
|
|
uint32 var_0;
|
|
|
|
uint32 var_4;
|
|
|
|
uint32 var_8;
|
|
|
|
uint32 scenario_count; // 0x0C
|
2016-06-02 23:22:08 +02:00
|
|
|
} rct_scenario_scores_header;
|
2016-06-03 10:54:44 +02:00
|
|
|
assert_struct_size(rct_scenario_scores_header, 16);
|
2014-04-10 04:23:12 +02:00
|
|
|
|
2016-05-12 23:57:40 +02:00
|
|
|
typedef enum scenario_source {
|
2015-12-29 17:20:40 +01:00
|
|
|
SCENARIO_SOURCE_RCT1,
|
|
|
|
SCENARIO_SOURCE_RCT1_AA,
|
|
|
|
SCENARIO_SOURCE_RCT1_LL,
|
|
|
|
SCENARIO_SOURCE_RCT2,
|
|
|
|
SCENARIO_SOURCE_RCT2_WW,
|
|
|
|
SCENARIO_SOURCE_RCT2_TT,
|
2015-12-27 17:37:18 +01:00
|
|
|
SCENARIO_SOURCE_REAL,
|
|
|
|
SCENARIO_SOURCE_OTHER
|
|
|
|
} scenario_source;
|
|
|
|
|
2014-04-06 18:45:09 +02:00
|
|
|
/**
|
|
|
|
* Scenario basic structure, mainly for scenario select
|
|
|
|
* size: 0x02B0
|
|
|
|
*/
|
2016-05-12 23:57:40 +02:00
|
|
|
typedef struct rct_scenario_basic {
|
2014-04-06 18:45:09 +02:00
|
|
|
char path[256]; // 0x0000
|
|
|
|
uint8 category; // 0x0100
|
|
|
|
uint8 pad_0101[0x1F];
|
2014-04-10 04:23:12 +02:00
|
|
|
sint8 objective_type; // 0x0120
|
|
|
|
sint8 objective_arg_1; // 0x0121
|
|
|
|
sint32 objective_arg_2; // 0x0122
|
|
|
|
sint16 objective_arg_3; // 0x0126
|
2014-04-06 18:45:09 +02:00
|
|
|
char name[64]; // 0x0128
|
|
|
|
char details[256]; // 0x0168
|
2014-04-10 04:23:12 +02:00
|
|
|
sint32 flags; // 0x0268
|
2016-10-12 13:36:30 +02:00
|
|
|
money32 company_value; // 0x026C
|
2014-04-10 04:23:12 +02:00
|
|
|
char completed_by[64]; // 0x0270
|
2015-12-31 03:59:08 +01:00
|
|
|
// uint8 source_game; // new in OpenRCT2
|
|
|
|
// sint16 source_index; // new in OpenRCT2
|
2016-06-02 23:22:08 +02:00
|
|
|
} rct_scenario_basic;
|
2016-06-03 10:54:44 +02:00
|
|
|
assert_struct_size(rct_scenario_basic, 0x02B0);
|
2014-04-06 18:45:09 +02:00
|
|
|
|
2016-05-12 23:57:40 +02:00
|
|
|
typedef struct rct_stex_entry {
|
2015-03-07 10:44:34 +01:00
|
|
|
rct_string_id scenario_name; // 0x00
|
|
|
|
rct_string_id park_name; // 0x02
|
|
|
|
rct_string_id details; // 0x04
|
|
|
|
uint8 var_06;
|
2016-06-02 23:22:08 +02:00
|
|
|
} rct_stex_entry;
|
2016-06-03 10:54:44 +02:00
|
|
|
assert_struct_size(rct_stex_entry, 7);
|
2014-12-11 00:07:11 +01:00
|
|
|
|
2015-03-07 10:44:34 +01:00
|
|
|
#define g_stexEntries ((rct_stex_entry**)object_entry_groups[OBJECT_TYPE_SCENARIO_TEXT].chunks)
|
|
|
|
|
2015-06-15 22:56:26 +02:00
|
|
|
// This will be useful for backwards compatibility
|
2016-05-12 23:57:40 +02:00
|
|
|
typedef struct rct_s6_data {
|
2014-05-28 01:05:11 +02:00
|
|
|
// SC6[0]
|
|
|
|
rct_s6_header header;
|
|
|
|
|
|
|
|
// SC6[1]
|
|
|
|
rct_s6_info info;
|
|
|
|
|
|
|
|
// SC6[2]
|
|
|
|
// packed objects
|
|
|
|
|
|
|
|
// SC6[3]
|
|
|
|
rct_object_entry objects[721];
|
|
|
|
|
|
|
|
// SC6[4]
|
|
|
|
uint16 elapsed_months;
|
|
|
|
uint16 current_day;
|
2016-05-07 17:20:10 +02:00
|
|
|
uint32 scenario_ticks;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint32 scenario_srand_0;
|
|
|
|
uint32 scenario_srand_1;
|
|
|
|
|
|
|
|
// SC6[5]
|
|
|
|
rct_map_element map_elements[0x30000];
|
|
|
|
|
|
|
|
// SC6[6]
|
2016-09-10 22:50:13 +02:00
|
|
|
uint32 next_free_map_element_pointer_index;
|
2014-05-28 01:05:11 +02:00
|
|
|
rct_sprite sprites[10000];
|
2016-05-09 01:08:03 +02:00
|
|
|
uint16 sprite_lists_head[6];
|
|
|
|
uint16 sprite_lists_count[6];
|
2015-06-15 22:56:26 +02:00
|
|
|
rct_string_id park_name;
|
|
|
|
uint8 pad_013573D6[2];
|
|
|
|
uint32 park_name_args;
|
|
|
|
money32 initial_cash;
|
2014-05-28 01:05:11 +02:00
|
|
|
money32 current_loan;
|
|
|
|
uint32 park_flags;
|
|
|
|
money16 park_entrance_fee;
|
2016-05-07 17:20:10 +02:00
|
|
|
uint16 rct1_park_entrance_x;
|
|
|
|
uint16 rct1_park_entrance_y;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 pad_013573EE[2];
|
2016-05-07 17:20:10 +02:00
|
|
|
uint8 rct1_park_entrance_z;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 pad_013573F1;
|
2014-05-28 01:05:11 +02:00
|
|
|
rct2_peep_spawn peep_spawns[2];
|
|
|
|
uint8 guest_count_change_modifier;
|
2014-12-11 20:39:14 +01:00
|
|
|
uint8 current_research_level;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint8 pad_01357400[4];
|
2016-05-10 01:00:59 +02:00
|
|
|
uint32 researched_ride_types[8];
|
|
|
|
uint32 researched_ride_entries[8];
|
|
|
|
uint32 researched_track_types_a[128];
|
|
|
|
uint32 researched_track_types_b[128];
|
2014-05-28 01:05:11 +02:00
|
|
|
|
|
|
|
// SC6[7]
|
|
|
|
uint16 guests_in_park;
|
|
|
|
uint16 guests_heading_for_park;
|
|
|
|
|
|
|
|
// Ignored in scenario
|
2016-05-09 23:11:56 +02:00
|
|
|
money32 expenditure_table[224];
|
2015-10-12 22:18:14 +02:00
|
|
|
|
2014-05-28 01:05:11 +02:00
|
|
|
// SC6[8]
|
|
|
|
uint16 last_guests_in_park;
|
|
|
|
uint8 pad_01357BCA[3];
|
|
|
|
uint8 handyman_colour;
|
|
|
|
uint8 mechanic_colour;
|
|
|
|
uint8 security_colour;
|
|
|
|
|
|
|
|
// Ignored in scenario
|
2016-05-11 20:18:59 +02:00
|
|
|
uint32 researched_scenery_items[56];
|
2014-05-28 01:05:11 +02:00
|
|
|
|
|
|
|
// SC6[9]
|
|
|
|
uint16 park_rating;
|
|
|
|
|
|
|
|
// Ignored in scenario
|
|
|
|
uint8 park_rating_history[32];
|
|
|
|
uint8 guests_in_park_history[32];
|
|
|
|
|
|
|
|
// SC6[10]
|
2014-10-08 00:42:17 +02:00
|
|
|
uint8 active_research_types;
|
|
|
|
uint8 research_progress_stage;
|
2016-05-07 17:20:10 +02:00
|
|
|
uint32 last_researched_item_subject;
|
|
|
|
uint8 pad_01357CF8[1000];
|
2014-12-11 20:39:14 +01:00
|
|
|
uint32 next_research_item;
|
2014-10-08 00:42:17 +02:00
|
|
|
uint16 research_progress;
|
|
|
|
uint8 next_research_category;
|
|
|
|
uint8 next_research_expected_day;
|
|
|
|
uint8 next_research_expected_month;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 guest_initial_happiness;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint16 park_size;
|
|
|
|
uint16 guest_generation_probability;
|
|
|
|
uint16 total_ride_value;
|
2014-12-11 20:39:14 +01:00
|
|
|
money32 maximum_loan;
|
|
|
|
money16 guest_initial_cash;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 guest_initial_hunger;
|
|
|
|
uint8 guest_initial_thirst;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint8 objective_type;
|
|
|
|
uint8 objective_year;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 pad_013580FA[2];
|
2014-05-28 01:05:11 +02:00
|
|
|
money32 objective_currency;
|
|
|
|
uint16 objective_guests;
|
|
|
|
uint8 campaign_weeks_left[20];
|
|
|
|
uint8 campaign_ride_index[22];
|
|
|
|
|
|
|
|
// Ignored in scenario
|
|
|
|
money32 balance_history[128];
|
|
|
|
|
|
|
|
// SC6[11]
|
2014-08-31 13:01:50 +02:00
|
|
|
money32 current_expenditure;
|
|
|
|
money32 current_profit;
|
2016-05-11 20:41:20 +02:00
|
|
|
uint32 weekly_profit_average_dividend;
|
|
|
|
uint16 weekly_profit_average_divisor;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint8 pad_0135833A[2];
|
|
|
|
|
|
|
|
// Ignored in scenario
|
2014-12-11 20:39:14 +01:00
|
|
|
money32 weekly_profit_history[128];
|
2015-06-15 22:56:26 +02:00
|
|
|
|
|
|
|
// SC6[12]
|
2014-05-28 01:05:11 +02:00
|
|
|
money32 park_value;
|
2015-06-15 22:56:26 +02:00
|
|
|
|
|
|
|
// Ignored in scenario
|
2014-05-28 01:05:11 +02:00
|
|
|
money32 park_value_history[128];
|
|
|
|
|
2015-06-15 22:56:26 +02:00
|
|
|
// SC6[13]
|
2014-05-28 01:05:11 +02:00
|
|
|
money32 completed_company_value;
|
|
|
|
uint32 total_admissions;
|
|
|
|
money32 income_from_admissions;
|
|
|
|
money32 company_value;
|
2016-05-11 22:15:43 +02:00
|
|
|
uint8 peep_warning_throttle[16];
|
2016-09-04 19:17:37 +02:00
|
|
|
rct_award awards[MAX_AWARDS];
|
2015-06-15 22:56:26 +02:00
|
|
|
money16 land_price;
|
|
|
|
money16 construction_rights_price;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint16 word_01358774;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 pad_01358776[2];
|
2016-05-11 23:30:06 +02:00
|
|
|
uint32 cd_key;
|
|
|
|
uint8 pad_0135877C[64];
|
2016-05-02 21:06:14 +02:00
|
|
|
uint32 game_version_number;
|
2016-05-11 23:30:06 +02:00
|
|
|
money32 completed_company_value_record;
|
2016-05-02 21:06:14 +02:00
|
|
|
uint32 loan_hash;
|
|
|
|
uint16 ride_count;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 pad_013587CA[6];
|
2016-09-04 16:36:39 +02:00
|
|
|
money32 historical_profit;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 pad_013587D4[4];
|
2014-12-11 20:39:14 +01:00
|
|
|
char scenario_completed_name[32];
|
2014-05-28 01:05:11 +02:00
|
|
|
money32 cash;
|
|
|
|
uint8 pad_013587FC[50];
|
2016-09-04 16:44:59 +02:00
|
|
|
uint16 park_rating_casualty_penalty;
|
2015-06-13 19:58:58 +02:00
|
|
|
uint16 map_size_units;
|
|
|
|
uint16 map_size_minus_2;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint16 map_size;
|
2015-06-13 19:58:58 +02:00
|
|
|
uint16 map_max_xy;
|
2016-05-02 21:06:14 +02:00
|
|
|
uint32 same_price_throughout;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint16 suggested_max_guests;
|
2015-06-08 22:35:09 +02:00
|
|
|
uint16 park_rating_warning_days;
|
2016-05-08 19:11:44 +02:00
|
|
|
uint8 last_entrance_style;
|
2015-03-31 14:06:34 +02:00
|
|
|
uint8 rct1_water_colour;
|
|
|
|
uint8 pad_01358842[2];
|
2014-12-11 20:39:14 +01:00
|
|
|
rct_research_item research_items[500];
|
2016-09-10 19:21:05 +02:00
|
|
|
uint16 map_base_z;
|
2014-05-28 01:05:11 +02:00
|
|
|
char scenario_name[64];
|
2016-03-13 16:33:38 +01:00
|
|
|
char scenario_description[256];
|
2014-12-11 20:39:14 +01:00
|
|
|
uint8 current_interest_rate;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 pad_0135934B;
|
2016-05-02 21:06:14 +02:00
|
|
|
uint32 same_price_throughout_extended;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint16 park_entrance_x[4];
|
|
|
|
uint16 park_entrance_y[4];
|
|
|
|
uint16 park_entrance_z[4];
|
2015-06-08 22:35:09 +02:00
|
|
|
uint8 park_entrance_direction[4];
|
2015-10-12 22:18:14 +02:00
|
|
|
char scenario_filename[256];
|
2015-06-08 22:35:09 +02:00
|
|
|
uint8 saved_expansion_pack_names[3256];
|
2015-06-15 22:56:26 +02:00
|
|
|
rct_banner banners[250];
|
2014-05-28 01:05:11 +02:00
|
|
|
char custom_strings[0x8000];
|
|
|
|
uint32 game_ticks_1;
|
|
|
|
rct_ride rides[255];
|
2016-05-07 17:20:10 +02:00
|
|
|
uint16 saved_age;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint16 saved_view_x;
|
|
|
|
uint16 saved_view_y;
|
2016-05-09 00:16:25 +02:00
|
|
|
uint8 saved_view_zoom;
|
|
|
|
uint8 saved_view_rotation;
|
2016-08-20 23:38:50 +02:00
|
|
|
rct_map_animation map_animations[2000];
|
2015-03-22 02:19:23 +01:00
|
|
|
uint16 num_map_animations;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 pad_0138B582[2];
|
2016-08-14 15:47:53 +02:00
|
|
|
rct_ride_rating_calc_data ride_ratings_calc_data;
|
2016-05-07 23:47:29 +02:00
|
|
|
uint8 pad_0138B5D0[60];
|
2016-05-07 17:20:10 +02:00
|
|
|
rct_ride_measurement ride_measurements[8];
|
2015-06-15 22:56:26 +02:00
|
|
|
uint32 next_guest_index;
|
|
|
|
uint16 grass_and_scenery_tilepos;
|
2016-05-11 23:30:06 +02:00
|
|
|
uint32 patrol_areas[204 * 128];
|
2016-05-07 17:20:10 +02:00
|
|
|
uint8 staff_modes[204];
|
2016-05-11 23:30:06 +02:00
|
|
|
uint8 pad_13CA73E;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 pad_13CA73F;
|
2014-05-28 01:05:11 +02:00
|
|
|
uint8 byte_13CA740;
|
2016-05-07 17:20:10 +02:00
|
|
|
uint8 pad_13CA741;
|
2016-09-12 18:27:21 +02:00
|
|
|
uint8 byte_13CA742[4]; // unused
|
2014-05-28 01:05:11 +02:00
|
|
|
uint8 climate;
|
|
|
|
uint8 pad_013CA747;
|
|
|
|
uint16 climate_update_timer;
|
|
|
|
uint8 current_weather;
|
|
|
|
uint8 next_weather;
|
|
|
|
uint8 temperature;
|
|
|
|
uint8 next_temperature;
|
|
|
|
uint8 current_weather_effect;
|
|
|
|
uint8 next_weather_effect;
|
|
|
|
uint8 current_weather_gloom;
|
|
|
|
uint8 next_weather_gloom;
|
|
|
|
uint8 current_rain_level;
|
|
|
|
uint8 next_rain_level;
|
2016-09-03 17:03:35 +02:00
|
|
|
rct_news_item news_items[MAX_NEWS_ITEMS];
|
2016-05-07 17:20:10 +02:00
|
|
|
uint8 pad_13CE730[64];
|
|
|
|
uint32 rct1_scenario_flags;
|
2016-04-24 15:00:26 +02:00
|
|
|
uint16 wide_path_tile_loop_x;
|
|
|
|
uint16 wide_path_tile_loop_y;
|
2015-06-15 22:56:26 +02:00
|
|
|
uint8 pad_13CE778[434];
|
2016-06-02 23:22:08 +02:00
|
|
|
} rct_s6_data;
|
2016-06-03 10:54:44 +02:00
|
|
|
assert_struct_size(rct_s6_data, 0x46b44a);
|
2016-06-02 23:22:08 +02:00
|
|
|
#pragma pack(pop)
|
2014-05-28 01:05:11 +02:00
|
|
|
|
2014-04-10 04:23:12 +02:00
|
|
|
enum {
|
|
|
|
SCENARIO_FLAGS_VISIBLE = (1 << 0),
|
|
|
|
SCENARIO_FLAGS_COMPLETED = (1 << 1),
|
|
|
|
SCENARIO_FLAGS_SIXFLAGS = (1 << 2)
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
S6_TYPE_SAVEDGAME,
|
|
|
|
S6_TYPE_SCENARIO
|
|
|
|
};
|
|
|
|
|
2014-11-26 01:51:26 +01:00
|
|
|
#define S6_RCT2_VERSION 120001
|
|
|
|
#define S6_MAGIC_NUMBER 0x00031144
|
|
|
|
|
2014-04-10 04:23:12 +02:00
|
|
|
enum {
|
2016-01-02 21:40:24 +01:00
|
|
|
// RCT2 categories (keep order)
|
2014-04-10 04:23:12 +02:00
|
|
|
SCENARIO_CATEGORY_BEGINNER,
|
|
|
|
SCENARIO_CATEGORY_CHALLENGING,
|
|
|
|
SCENARIO_CATEGORY_EXPERT,
|
|
|
|
SCENARIO_CATEGORY_REAL,
|
2016-01-02 21:40:24 +01:00
|
|
|
SCENARIO_CATEGORY_OTHER,
|
|
|
|
|
|
|
|
// OpenRCT2 categories
|
|
|
|
SCENARIO_CATEGORY_DLC,
|
|
|
|
SCENARIO_CATEGORY_BUILD_YOUR_OWN,
|
|
|
|
|
|
|
|
SCENARIO_CATEGORY_COUNT
|
2014-04-10 04:23:12 +02:00
|
|
|
};
|
|
|
|
|
2014-04-09 12:16:35 +02:00
|
|
|
enum {
|
|
|
|
OBJECTIVE_NONE,
|
|
|
|
OBJECTIVE_GUESTS_BY,
|
|
|
|
OBJECTIVE_PARK_VALUE_BY,
|
|
|
|
OBJECTIVE_HAVE_FUN,
|
|
|
|
OBJECTIVE_BUILD_THE_BEST,
|
|
|
|
OBJECTIVE_10_ROLLERCOASTERS,
|
|
|
|
OBJECTIVE_GUESTS_AND_RATING,
|
|
|
|
OBJECTIVE_MONTHLY_RIDE_INCOME,
|
|
|
|
OBJECTIVE_10_ROLLERCOASTERS_LENGTH,
|
|
|
|
OBJECTIVE_FINISH_5_ROLLERCOASTERS,
|
|
|
|
OBJECTIVE_REPLAY_LOAN_AND_PARK_VALUE,
|
|
|
|
OBJECTIVE_MONTHLY_FOOD_INCOME
|
|
|
|
};
|
|
|
|
|
2016-01-02 21:40:24 +01:00
|
|
|
extern const rct_string_id ScenarioCategoryStringIds[SCENARIO_CATEGORY_COUNT];
|
|
|
|
|
2016-06-19 23:19:38 +02:00
|
|
|
#if defined(NO_RCT2)
|
|
|
|
extern uint32 gScenarioTicks;
|
|
|
|
#else
|
2016-05-09 00:20:42 +02:00
|
|
|
#define gScenarioTicks RCT2_GLOBAL(RCT2_ADDRESS_SCENARIO_TICKS, uint32)
|
2016-06-19 23:19:38 +02:00
|
|
|
#endif
|
|
|
|
extern uint32 gScenarioSrand0;
|
|
|
|
extern uint32 gScenarioSrand1;
|
|
|
|
|
|
|
|
extern uint8 gScenarioObjectiveType;
|
|
|
|
extern uint8 gScenarioObjectiveYear;
|
|
|
|
extern uint16 gScenarioObjectiveNumGuests;
|
|
|
|
extern money32 gScenarioObjectiveCurrency;
|
|
|
|
|
|
|
|
extern uint16 gScenarioParkRatingWarningDays;
|
|
|
|
extern money32 gScenarioCompletedCompanyValue;
|
|
|
|
extern money32 gScenarioCompanyValueRecord;
|
2016-04-23 19:07:07 +02:00
|
|
|
|
2016-09-10 19:30:53 +02:00
|
|
|
extern rct_s6_info gS6Info;
|
2016-09-04 15:58:04 +02:00
|
|
|
extern char gScenarioName[64];
|
|
|
|
extern char gScenarioDetails[256];
|
|
|
|
extern char gScenarioCompletedBy[32];
|
2015-11-11 22:37:26 +01:00
|
|
|
extern char gScenarioSavePath[MAX_PATH];
|
2016-09-11 00:01:42 +02:00
|
|
|
extern char gScenarioExpansionPacks[3256];
|
2015-08-19 21:54:25 +02:00
|
|
|
extern int gFirstTimeSave;
|
2016-09-04 16:01:49 +02:00
|
|
|
extern uint16 gSavedAge;
|
2016-03-13 16:43:03 +01:00
|
|
|
extern uint32 gLastAutoSaveTick;
|
2015-06-08 00:12:17 +02:00
|
|
|
|
2016-05-08 02:22:32 +02:00
|
|
|
extern const char *_scenarioFileName;
|
|
|
|
|
2015-12-31 23:11:36 +01:00
|
|
|
bool scenario_load_basic(const char *path, rct_s6_header *header, rct_s6_info *info);
|
2014-09-08 20:58:15 +02:00
|
|
|
int scenario_load(const char *path);
|
|
|
|
int scenario_load_and_play_from_path(const char *path);
|
2015-07-14 19:18:10 +02:00
|
|
|
void scenario_begin();
|
2014-05-01 19:15:02 +02:00
|
|
|
void scenario_update();
|
2014-11-02 02:41:00 +01:00
|
|
|
unsigned int scenario_rand();
|
2015-06-14 09:08:28 +02:00
|
|
|
unsigned int scenario_rand_max(unsigned int max);
|
2014-11-25 03:05:48 +01:00
|
|
|
int scenario_prepare_for_save();
|
2015-07-05 06:36:25 +02:00
|
|
|
int scenario_save(SDL_RWops* rw, int flags);
|
2016-05-08 17:02:00 +02:00
|
|
|
void scenario_remove_trackless_rides(rct_s6_data *s6);
|
2016-05-08 02:22:32 +02:00
|
|
|
void scenario_fix_ghosts(rct_s6_data *s6);
|
2015-02-22 19:24:19 +01:00
|
|
|
void scenario_set_filename(const char *value);
|
2015-02-21 03:04:33 +01:00
|
|
|
void scenario_failure();
|
|
|
|
void scenario_success();
|
2014-11-30 03:17:01 +01:00
|
|
|
void scenario_success_submit_name(const char *name);
|
2015-10-03 14:18:43 +02:00
|
|
|
void scenario_autosave_check();
|
2014-04-06 18:45:09 +02:00
|
|
|
|
2014-04-21 11:27:48 +02:00
|
|
|
#endif
|