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