1 #ifndef SCENARIO_DATA_H
2 #define SCENARIO_DATA_H
3 
4 #include "map/point.h"
5 #include "scenario/types.h"
6 
7 #include <stdint.h>
8 
9 #define MAX_REQUESTS 20
10 #define MAX_INVASIONS 20
11 #define MAX_DEMAND_CHANGES 20
12 #define MAX_PRICE_CHANGES 20
13 
14 #define MAX_HERD_POINTS 4
15 #define MAX_FISH_POINTS 8
16 #define MAX_INVASION_POINTS 8
17 
18 #define MAX_ALLOWED_BUILDINGS 50
19 
20 #define MAX_PLAYER_NAME 32
21 #define MAX_SCENARIO_NAME 65
22 #define MAX_BRIEF_DESCRIPTION 64
23 #define MAX_BRIEFING 522
24 
25 enum {
26     EVENT_NOT_STARTED = 0,
27     EVENT_IN_PROGRESS = 1,
28     EVENT_FINISHED = 2
29 };
30 
31 enum {
32     ALLOWED_BUILDING_NONE = 0,
33     ALLOWED_BUILDING_FARMS = 1,
34     ALLOWED_BUILDING_RAW_MATERIALS = 2,
35     ALLOWED_BUILDING_WORKSHOPS = 3,
36     ALLOWED_BUILDING_ROAD = 4,
37     ALLOWED_BUILDING_WALL = 5,
38     ALLOWED_BUILDING_AQUEDUCT = 6,
39     ALLOWED_BUILDING_HOUSING = 7,
40     ALLOWED_BUILDING_AMPHITHEATER = 8,
41     ALLOWED_BUILDING_THEATER = 9,
42     ALLOWED_BUILDING_HIPPODROME = 10,
43     ALLOWED_BUILDING_COLOSSEUM = 11,
44     ALLOWED_BUILDING_GLADIATOR_SCHOOL = 12,
45     ALLOWED_BUILDING_LION_HOUSE = 13,
46     ALLOWED_BUILDING_ACTOR_COLONY = 14,
47     ALLOWED_BUILDING_CHARIOT_MAKER = 15,
48     ALLOWED_BUILDING_GARDENS = 16,
49     ALLOWED_BUILDING_PLAZA = 17,
50     ALLOWED_BUILDING_STATUES = 18,
51     ALLOWED_BUILDING_DOCTOR = 19,
52     ALLOWED_BUILDING_HOSPITAL = 20,
53     ALLOWED_BUILDING_BATHHOUSE = 21,
54     ALLOWED_BUILDING_BARBER = 22,
55     ALLOWED_BUILDING_SCHOOL = 23,
56     ALLOWED_BUILDING_ACADEMY = 24,
57     ALLOWED_BUILDING_LIBRARY = 25,
58     ALLOWED_BUILDING_PREFECTURE = 26,
59     ALLOWED_BUILDING_FORT = 27,
60     ALLOWED_BUILDING_GATEHOUSE = 28,
61     ALLOWED_BUILDING_TOWER = 29,
62     ALLOWED_BUILDING_SMALL_TEMPLES = 30,
63     ALLOWED_BUILDING_LARGE_TEMPLES = 31,
64     ALLOWED_BUILDING_MARKET = 32,
65     ALLOWED_BUILDING_GRANARY = 33,
66     ALLOWED_BUILDING_WAREHOUSE = 34,
67     ALLOWED_BUILDING_TRIUMPHAL_ARCH = 35,
68     ALLOWED_BUILDING_DOCK = 36,
69     ALLOWED_BUILDING_WHARF = 37,
70     ALLOWED_BUILDING_GOVERNOR_HOME = 38,
71     ALLOWED_BUILDING_ENGINEERS_POST = 39,
72     ALLOWED_BUILDING_SENATE = 40,
73     ALLOWED_BUILDING_FORUM = 41,
74     ALLOWED_BUILDING_WELL = 42,
75     ALLOWED_BUILDING_ORACLE = 43,
76     ALLOWED_BUILDING_MISSION_POST = 44,
77     ALLOWED_BUILDING_BRIDGE = 45,
78     ALLOWED_BUILDING_BARRACKS = 46,
79     ALLOWED_BUILDING_MILITARY_ACADEMY = 47,
80     ALLOWED_BUILDING_MONUMENTS = 48,
81 };
82 
83 struct win_criteria_t {
84     int enabled;
85     int goal;
86 };
87 
88 typedef struct {
89     int year;
90     int resource;
91     int amount;
92     int deadline_years;
93     int can_comply_dialog_shown;
94     int favor;
95     int month;
96     int state;
97     int visible;
98     int months_to_comply;
99 } request_t;
100 
101 typedef struct {
102     int year;
103     int type;
104     int amount;
105     int from;
106     int attack_type;
107     int month;
108 } invasion_t;
109 
110 typedef struct {
111     int year;
112     int month;
113     int resource;
114     int amount;
115     int is_rise;
116 } price_change_t;
117 
118 typedef struct {
119     int year;
120     int month;
121     int resource;
122     int route_id;
123     int is_rise;
124 } demand_change_t;
125 
126 extern struct scenario_t {
127     uint8_t scenario_name[MAX_SCENARIO_NAME];
128 
129     int start_year;
130     int climate;
131     int player_rank;
132 
133     int initial_funds;
134     int rescue_loan;
135 
136     int rome_supplies_wheat;
137     int image_id;
138     uint8_t brief_description[MAX_BRIEF_DESCRIPTION];
139     uint8_t briefing[MAX_BRIEFING];
140     int enemy_id;
141     int is_open_play;
142     int open_play_scenario_id;
143 
144     struct {
145         struct win_criteria_t population;
146         struct win_criteria_t culture;
147         struct win_criteria_t prosperity;
148         struct win_criteria_t peace;
149         struct win_criteria_t favor;
150         struct {
151             int enabled;
152             int years;
153         } time_limit;
154         struct {
155             int enabled;
156             int years;
157         } survival_time;
158         int milestone25_year;
159         int milestone50_year;
160         int milestone75_year;
161     } win_criteria;
162 
163     struct {
164         int id;
165         int is_expanded;
166         int expansion_year;
167         int distant_battle_roman_travel_months;
168         int distant_battle_enemy_travel_months;
169     } empire;
170 
171     request_t requests[MAX_REQUESTS];
172 
173     demand_change_t demand_changes[MAX_DEMAND_CHANGES];
174 
175     price_change_t price_changes[MAX_DEMAND_CHANGES];
176 
177     invasion_t invasions[MAX_INVASIONS];
178 
179     struct {
180         int severity;
181         int year;
182     } earthquake;
183 
184     struct {
185         int year;
186         int enabled;
187     } emperor_change;
188 
189     struct {
190         int year;
191         int enabled;
192     } gladiator_revolt;
193 
194     struct {
195         int sea_trade_problem;
196         int land_trade_problem;
197         int raise_wages;
198         int lower_wages;
199         int contaminated_water;
200         int iron_mine_collapse;
201         int clay_pit_flooded;
202     } random_events;
203 
204     struct {
205         int width;
206         int height;
207         int grid_start;
208         int grid_border_size;
209     } map;
210     int flotsam_enabled;
211     map_point entry_point;
212     map_point exit_point;
213     map_point river_entry_point;
214     map_point river_exit_point;
215     map_point earthquake_point;
216     map_point herd_points[MAX_HERD_POINTS];
217     map_point fishing_points[MAX_FISH_POINTS];
218     map_point invasion_points[MAX_INVASION_POINTS];
219 
220     short allowed_buildings[MAX_ALLOWED_BUILDINGS];
221 
222     struct {
223         int hut;
224         int meeting;
225         int crops;
226     } native_images;
227 
228     struct { // used to be stored in the settings file
229         int campaign_rank;
230         int campaign_mission;
231         int is_custom;
232         int starting_favor;
233         int starting_personal_savings;
234         uint8_t player_name[MAX_PLAYER_NAME];
235         /** Temp storage for carrying over player name to next campaign mission */
236         uint8_t campaign_player_name[MAX_PLAYER_NAME];
237     } settings;
238 
239     int is_saved;
240 } scenario;
241 
242 #endif // SCENARIO_DATA_H
243