UFO: Alien Invasion
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
cp_campaign.h
Go to the documentation of this file.
1 
6 /*
7 Copyright (C) 2002-2020 UFO: Alien Invasion.
8 
9 This program is free software; you can redistribute it and/or
10 modify it under the terms of the GNU General Public License
11 as published by the Free Software Foundation; either version 2
12 of the License, or (at your option) any later version.
13 
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17 
18 See the GNU General Public License for more details.
19 
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23 
24 */
25 
26 #pragma once
27 
29 
30 class Employee;
31 #define MAX_CAMPAIGNS 16
32 
33 #include "cp_cgame_callbacks.h"
34 #include "cp_alien_interest.h"
35 #include "cp_rank.h"
36 #include "cp_save.h"
37 #include "cp_parse.h"
38 #include "cp_event.h"
39 #include "cp_ufopedia.h"
40 #include "cp_research.h"
41 #include "cp_radar.h"
42 #include "cp_aircraft.h"
43 #include "cp_base.h"
44 #include "cp_employee.h"
45 #include "cp_transfer.h"
46 #include "cp_nation.h"
47 #include "cp_installation.h"
48 #include "cp_produce.h"
49 #include "cp_uforecovery.h"
50 #include "cp_airfight.h"
51 #include "cp_messageoptions.h"
52 #include "cp_alienbase.h"
53 #include "cp_market.h"
54 #include "cp_statistics.h"
55 #include "cp_component.h"
56 
57 /* Maximum alien groups per alien team category */
58 #define MAX_ALIEN_GROUP_PER_CATEGORY 8
59 /* Maximum alien team category defined in scripts */
60 #define ALIENCATEGORY_MAX 64
61 #define MAX_PROJECTILESONGEOSCAPE 32
62 
66 #define HOURS_PER_ONE_INTEREST 24
67 
71 #define INITIAL_OVERALL_INTEREST 20
72 #define FINAL_OVERALL_INTEREST 400
73 
77 #define DELAY_BETWEEN_MISSION_SPAWNING 12
78 
83 #define EARLY_UFO_RUSH_INTEREST 50
84 
88 #define NON_OCCURRENCE_PROBABILITY 0.75
89 
91 typedef enum mapType_s {
96 
98 } mapType_t;
99 
105 typedef struct alienTeamGroup_s {
106  int idx;
118 
124 typedef struct alienTeamCategory_s {
125  char id[MAX_VAR];
136 
138 typedef struct battleParam_s {
141  char* param;
144  char civTeam[MAX_VAR];
145  bool day;
146  const char* zoneType;
148  struct nation_s* nation;
149  bool retriable;
150 } battleParam_t;
151 
153 typedef struct salary_s {
160 } salary_t;
161 
163 typedef struct campaign_s {
164  int idx;
165  char id[MAX_VAR];
166  char name[MAX_VAR];
168  int team;
172  char market[MAX_VAR];
176  char text[MAX_VAR];
177  char map[MAX_VAR];
178  int soldiers;
180  int workers;
181  int pilots;
182  int ugvs;
183  int credits;
184  int num;
185  signed int difficulty;
186  float minhappiness;
189  bool visible;
191  int basecost;
193  bool finished;
196  float produceRate;
197  float researchRate;
198  float healingRate;
206  float employeeRate;
210 } campaign_t;
211 
212 int CP_GetSalaryUpKeepBase(const salary_t* salary, const base_t* base);
213 
215 typedef enum mapAction_s {
219 } mapAction_t;
220 
222 typedef void (*missionResultFunction_t) (const struct missionResults_s* results);
223 
228 typedef struct ccs_s {
242  int credits;
246  bool startXVI;
247  float timer;
248  float frametime;
249 
250  struct {
256  } geoscape;
257 
258  /* == misc == */
263  /* how fast the game is running */
266 
267  /* already paid in this month? */
268  bool paid;
269 
270  /* == employees == */
271  /* A list of all phalanx employees (soldiers, scientists, workers, etc...) */
273 
274  /* == technologies == */
275  /* A list of all research-topics resp. the research-tree. */
278 
279  /* == bases == */
280  /* A list of _all_ bases ... even unbuilt ones. */
282  int numBases;
283 
284  /* a list of all templates for building bases */
287 
288  /* == aircraft == */
290 
291  /* == Alien bases == */
293 
294  /* == Nations == */
297 
298  /* == Cities == */
301 
302  /* Projectiles on geoscape (during fights) */
305 
306  /* == Transfers == */
308 
309  /* UFO components. */
312 
313  /* == stored UFOs == */
315 
316  /* Alien Team Package used during battle */
320  /* == ufopedia == */
321  /* A list of all UFOpaedia chapters. */
323  /* Total number of UFOpaedia chapters */
335 
336  /* == buildings in bases == */
337  /* A list of all possible unique buildings. */
340  /* A list of the building-list per base. (new buildings in a base get copied from buildingTypes) */
342  /* Total number of buildings per base. */
344 
345  /* == installations == */
346  /* A template for each possible installation with configurable values */
349 
350  /* A list of _all_ installations */
352 
353  /* UFOs on geoscape */
355  int numUFOs;
357  /* message categories */
360 
361  /* entries for message categories */
364 
365  /* == Ranks == */
366  /* Global list of all ranks defined in medals.ufo. */
368  /* The number of entries in the list above. */
369  int numRanks;
370 
371  /* cache for techdef technologies */
373 
374  /* cache for item technologies */
376 
379 
382 
388 
390 } ccs_t;
391 
392 typedef struct {
393  int x, y;
394 } screenPoint_t;
395 
396 extern ccs_t ccs;
397 extern const int DETECTION_INTERVAL;
398 extern cvar_t* cp_missiontest;
399 
400 #define MAX_CREDITS 10000000
401 
402 #include "../cgame.h"
403 extern const cgame_import_t* cgi;
404 
405 /* Campaign functions */
406 void CP_InitStartup(void);
407 campaign_t* CP_GetCampaign(const char* name);
408 void CP_CampaignInit(campaign_t* campaign, bool load);
409 void CP_ParseCampaignData(void);
410 void CP_ReadCampaignData(const campaign_t* campaign);
411 bool CP_IsRunning(void);
412 
413 void CP_CampaignRun(campaign_t* campaign, float secondsSinceLastFrame);
414 void CP_CheckLostCondition(const campaign_t* campaign);
415 void CP_EndCampaign(bool won);
416 
417 void CP_Shutdown(void);
418 void CP_ResetCampaignData(void);
419 
420 void CP_StartSelectedMission(void);
421 
422 /* Credits management */
423 bool CP_CheckCredits (int costs);
424 void CP_UpdateCredits(int credits);
425 
426 bool CP_OnGeoscape(void);
int base[MAX_EMPL]
Definition: cp_campaign.h:154
technology_t * objDefTechs[MAX_OBJDEFS]
Definition: cp_campaign.h:375
aircraft_t ufos[MAX_UFOONGEOSCAPE]
Definition: cp_campaign.h:354
int numCampaignEventDefinitions
Definition: cp_campaign.h:331
alienTeamCategory_t alienCategories[ALIENCATEGORY_MAX]
Definition: cp_campaign.h:317
msgCategory_t messageCategories[MAX_MESSAGECATEGORIES]
Definition: cp_campaign.h:358
base_t bases[MAX_BASES]
Definition: cp_campaign.h:281
const equipDef_t * marketDef
Definition: cp_campaign.h:174
bool defaultCampaign
Definition: cp_campaign.h:167
const equipDef_t * asymptoticMarketDef
Definition: cp_campaign.h:175
int numCampaignTriggerEvents
Definition: cp_campaign.h:334
#define MAX_UFOONGEOSCAPE
Definition: cp_radar.h:27
A building with all it's data.
Definition: cp_building.h:73
Header file for Aircraft and item components.
void CP_UpdateCredits(int credits)
Sets credits and update mn_credits cvar.
int numComponents
Definition: cp_campaign.h:311
#define MAX_CAMPAIGNS
Definition: cp_campaign.h:31
alien team category definition
Definition: cp_campaign.h:124
Nation definition.
Definition: cp_nation.h:44
int numUnreadMails
Definition: cp_campaign.h:325
#define MAX_PEDIACHAPTERS
Definition: cp_ufopedia.h:28
aircraft_t * selectedAircraft
Definition: cp_campaign.h:252
int civiliansKilled
Definition: cp_campaign.h:243
int numAlienCategories
Definition: cp_campaign.h:318
float debtInterest
Definition: cp_campaign.h:159
float liquidationRate
Definition: cp_campaign.h:199
bool CP_IsRunning(void)
Checks whether a campaign mode game is running.
Definition: cp_campaign.cpp:79
struct ccs_s::@1 geoscape
Describes a rank that a recruit can gain.
Definition: cp_rank.h:29
missionSpawnFunction_t missionSpawnCallback
Definition: cp_campaign.h:386
int numMsgCategories
Definition: cp_campaign.h:359
float researchRate
Definition: cp_campaign.h:197
This is a cvar definition. Cvars can be user modified and used in our menus e.g.
Definition: cvar.h:71
int aliensKilled
Definition: cp_campaign.h:244
cvar_t * cp_missiontest
Definition: cp_campaign.cpp:63
char market[MAX_VAR]
Definition: cp_campaign.h:172
void CP_EndCampaign(bool won)
Function to handle the campaign end.
Definition: cp_campaign.cpp:88
int numBuildingTemplates
Definition: cp_campaign.h:339
int baseUpkeep
Definition: cp_campaign.h:158
struct alienTeamGroup_s alienTeamGroup_t
alien team group definition.
rank_t ranks[MAX_RANKS]
Definition: cp_campaign.h:367
int initialInterest
Definition: cp_campaign.h:207
int numInstallationTemplates
Definition: cp_campaign.h:348
const teamDef_t * alienTeams[MAX_TEAMS_PER_MISSION]
Definition: cp_campaign.h:113
#define MAX_MESSAGECATEGORIES
int credits
Definition: cp_campaign.h:242
Header for single player market stuff.
#define MAX_TEAMDEFS
Definition: chr_shared.h:217
char firstBaseTemplate[MAX_VAR]
Definition: cp_campaign.h:192
int numNations
Definition: cp_campaign.h:296
Header for installation management related stuff.
enum mapType_s mapType_t
int numRanks
Definition: cp_campaign.h:369
installationTemplate_t installationTemplates[MAX_INSTALLATION_TEMPLATES]
Definition: cp_campaign.h:347
mapType_s
Definition: cp_campaign.h:91
int numChapters
Definition: cp_campaign.h:324
date_t date
Definition: cp_campaign.h:245
linkedList_t * transfers
Definition: cp_campaign.h:307
int lastInterestIncreaseDelay
Definition: cp_campaign.h:237
Defines some savefile structures.
bool paid
Definition: cp_campaign.h:268
char equipment[MAX_VAR]
Definition: cp_campaign.h:171
Header file for Transfer stuff.
char civTeam[MAX_VAR]
Definition: cp_campaign.h:144
void CP_InitStartup(void)
int gameTimeScale
Definition: cp_campaign.h:264
Header for research related stuff.
Nation code.
template for creating a base
Definition: cp_base.h:130
enum mapAction_s mapAction_t
mission definition
Definition: cp_missions.h:85
linkedList_t * equipment
Definition: cp_campaign.h:130
struct mission_s * selectedMission
Definition: cp_campaign.h:251
Header file for messageoptions related stuff.
int numProjectiles
Definition: cp_campaign.h:304
bool visible
Definition: cp_campaign.h:189
alienTeamGroup_t alienTeamGroups[MAX_ALIEN_GROUP_PER_CATEGORY]
Definition: cp_campaign.h:132
linkedList_t * initialCraft
Definition: cp_campaign.h:209
int numAircraftTemplates
Definition: cp_campaign.h:384
char text[MAX_VAR]
Definition: cp_campaign.h:176
int alienBaseInterest
Definition: cp_campaign.h:208
Header for geoscape event related stuff.
A base with all it's data.
Definition: cp_base.h:84
#define MAX_ASSEMBLIES
Definition: cp_component.h:28
technology_t * teamDefTechs[MAX_TEAMDEFS]
Definition: cp_campaign.h:372
void CP_ReadCampaignData(const campaign_t *campaign)
Definition: cp_parse.cpp:681
struct campaign_s campaign_t
aircraft_t * missionAircraft
Definition: cp_campaign.h:255
float timer
Definition: cp_campaign.h:247
float frametime
Definition: cp_campaign.h:248
const chrTemplate_t * alienChrTemplates[MAX_TEAMS_PER_MISSION]
Definition: cp_campaign.h:115
#define MAX_BUILDINGS
Definition: cp_base.h:34
Header file for UFOpaedia script interpreter.
char researched[MAX_VAR]
Definition: cp_campaign.h:169
struct mission_s * mission
Definition: cp_campaign.h:139
Header for employee related stuff.
equipDef_t eMission
Definition: cp_campaign.h:229
const int DETECTION_INTERVAL
delay between actions that must be executed independently of time scale
Definition: cp_campaign.cpp:74
components_t components[MAX_ASSEMBLIES]
Definition: cp_campaign.h:310
#define MAX_VAR
Definition: shared.h:36
int CP_GetSalaryUpKeepBase(const salary_t *salary, const base_t *base)
#define MAX_OBJDEFS
Definition: inv_shared.h:37
battleParam_t battleParameters
Definition: cp_campaign.h:235
bool finished
Definition: cp_campaign.h:193
int numCities
Definition: cp_campaign.h:300
mapAction_s
Definition: cp_campaign.h:215
const cgame_import_t * cgi
linkedList_t * storedUFOs
Definition: cp_campaign.h:314
void CP_ParseCampaignData(void)
Read the data for campaigns.
Definition: cp_parse.cpp:630
#define MAX_PROJECTILESONGEOSCAPE
Definition: cp_campaign.h:61
char asymptoticMarket[MAX_VAR]
Definition: cp_campaign.h:173
Campaign parsing header.
pediaChapter_t upChapters[MAX_PEDIACHAPTERS]
Definition: cp_campaign.h:322
char alienEquipment[MAX_VAR]
Definition: cp_campaign.h:143
Header for production related stuff.
UFO recovery and storing.
This is the technology parsed from research.ufo.
Definition: cp_research.h:137
linkedList_t * cities
Definition: cp_campaign.h:299
int numTechnologies
Definition: cp_campaign.h:277
mapAction_t mapAction
Definition: cp_campaign.h:260
stats_t campaignStats
Definition: cp_campaign.h:378
int maxAllowedXVIRateUntilLost
Definition: cp_campaign.h:188
campaign_t * CP_GetCampaign(const char *name)
Returns the campaign pointer from global campaign array.
Engine-side time information in the game.
Definition: common.h:290
int gameLapse
Definition: cp_campaign.h:265
int aircraftDivisor
Definition: cp_campaign.h:157
linkedList_t * employees[MAX_EMPL]
Definition: cp_campaign.h:272
aircraft_t aircraftTemplates[MAX_AIRCRAFT]
Definition: cp_campaign.h:383
alien team group definition.
Definition: cp_campaign.h:105
client campaign structure
Definition: cp_campaign.h:228
msgCategoryEntry_t msgCategoryEntries[NT_NUM_NOTIFYTYPE+MAX_MESSAGECATEGORIES]
Definition: cp_campaign.h:362
Campaign statistic headers.
void CP_CampaignInit(campaign_t *campaign, bool load)
Called at new game and load game.
void CP_Shutdown(void)
Campaign closing actions.
#define MAX_INSTALLATION_TEMPLATES
char map[MAX_VAR]
Definition: cp_campaign.h:177
void CP_CheckLostCondition(const campaign_t *campaign)
Checks whether the player has lost the campaign.
bool startXVI
Definition: cp_campaign.h:246
int numBases
Definition: cp_campaign.h:282
linkedList_t * installations
Definition: cp_campaign.h:351
void CP_ResetCampaignData(void)
Will clear most of the parsed singleplayer data.
int numCampaigns
Definition: cp_campaign.h:381
const GLuint *typedef void(APIENTRY *GenRenderbuffersEXT_t)(GLsizei
Definition: r_gl.h:189
int numBuildings[MAX_BASES]
Definition: cp_campaign.h:343
date_t date
Definition: cp_campaign.h:190
#define MAX_AIRCRAFT
Definition: cp_aircraft.h:30
available mails for a tech - mail and mail_pre in script files
Definition: cp_event.h:38
The definition of a "components" entry (i.e. an assembly of several items) parsed from a ufo-file...
Definition: cp_component.h:35
float healingRate
Definition: cp_campaign.h:198
linkedList_t * updateCharacters
Definition: cp_campaign.h:389
int rankBonus[MAX_EMPL]
Definition: cp_campaign.h:155
struct salary_s salary_t
campaignEvents_t campaignEvents[MAX_CAMPAIGNS]
Definition: cp_campaign.h:330
eventMail_t eventMails[MAX_EVENTMAILS]
Definition: cp_campaign.h:327
ccs_t ccs
Definition: cp_campaign.cpp:62
#define MAX_EVENTMAILS
Definition: cp_event.h:28
float ufoReductionRate
Definition: cp_campaign.h:203
enum interestCategory_s interestCategory_t
Header file for aircraft stuff.
int scientists
Definition: cp_campaign.h:179
memPool_t * cp_campaignPool
Definition: cp_campaign.cpp:61
int numMsgCategoryEntries
Definition: cp_campaign.h:363
aircraftProjectile_t projectiles[MAX_PROJECTILESONGEOSCAPE]
Definition: cp_campaign.h:303
char name[MAX_VAR]
Definition: cp_campaign.h:166
signed int difficulty
Definition: cp_campaign.h:185
#define MAX_CAMPAIGN_TRIGGER_EVENTS
Definition: cp_event.h:96
#define MAX_TECHNOLOGIES
Definition: cp_research.h:29
int overallInterest
Definition: cp_campaign.h:238
technology_t technologies[MAX_TECHNOLOGIES]
Definition: cp_campaign.h:276
int minMissions
Definition: cp_campaign.h:201
QGL_EXTERN GLuint GLsizei GLsizei GLint GLenum GLchar * name
Definition: r_gl.h:110
campaignTriggerEvent_t campaignTriggerEvents[MAX_CAMPAIGN_TRIGGER_EVENTS]
Definition: cp_campaign.h:333
struct ccs_s ccs_t
client campaign structure
int aircraftFactor
Definition: cp_campaign.h:156
Header file for airfights.
int maxMissions
Definition: cp_campaign.h:202
linkedList_t * aircraft
Definition: cp_campaign.h:289
#define MAX_TEAMS_PER_MISSION
Definition: inv_shared.h:618
linkedList_t * nations
Definition: cp_campaign.h:295
int numUFOs
Definition: cp_campaign.h:355
building_t buildingTemplates[MAX_BUILDINGS]
Definition: cp_campaign.h:338
vec_t vec2_t[2]
Definition: ufotypes.h:38
float employeeRate
Definition: cp_campaign.h:206
char soldierEquipment[MAX_VAR]
Definition: cp_campaign.h:170
int numEventMails
Definition: cp_campaign.h:328
const char * zoneType
Definition: cp_campaign.h:146
market_t eMarket
Definition: cp_campaign.h:231
building_t buildings[MAX_BASES][MAX_BUILDINGS]
Definition: cp_campaign.h:341
bool CP_CheckCredits(int costs)
Checks whether you have enough credits for something.
#define MAX_RANKS
Definition: cp_rank.h:26
projectile used during fight between two or more aircraft
Definition: cp_airfight.h:43
bool CP_OnGeoscape(void)
Returns if we are currently on the Geoscape.
float produceRate
Definition: cp_campaign.h:196
An aircraft with all it's data.
Definition: cp_aircraft.h:114
const campaignEvents_t * events
Definition: cp_campaign.h:194
void(* missionResultFunction_t)(const struct missionResults_s *results)
Definition: cp_campaign.h:222
#define MAX_BASES
Definition: cp_base.h:32
campaign_t * curCampaign
Definition: cp_campaign.h:377
missionResultFunction_t missionResultCallback
Definition: cp_campaign.h:387
#define ALIENCATEGORY_MAX
Definition: cp_campaign.h:60
float componentRate
Definition: cp_campaign.h:200
int lastMissionSpawnedDelay
Definition: cp_campaign.h:240
linkedList_t * missions
Definition: cp_campaign.h:233
Header for base management related stuff.
linkedList_t * alienBases
Definition: cp_campaign.h:292
void CP_StartSelectedMission(void)
Starts a selected mission.
int negativeCreditsUntilLost
Definition: cp_campaign.h:187
aircraft_t * selectedUFO
Definition: cp_campaign.h:253
#define MAX_BASETEMPLATES
Definition: cp_base.h:33
struct nation_s * nation
Definition: cp_campaign.h:148
Alien interest header.
float minhappiness
Definition: cp_campaign.h:186
baseTemplate_t baseTemplates[MAX_BASETEMPLATES]
Definition: cp_campaign.h:285
Structure with mission info needed to create results summary at menu won.
Definition: cp_missions.h:60
campaign_t campaigns[MAX_CAMPAIGNS]
Definition: cp_campaign.h:380
alienTeamGroup_t * alienTeamGroup
Definition: cp_campaign.h:140
interestCategory_t missionCategories[INTERESTCATEGORY_MAX]
Definition: cp_campaign.h:126
void(* missionSpawnFunction_t)(void)
Definition: cp_campaign.h:221
struct battleParam_s battleParam_t
void CP_CampaignRun(campaign_t *campaign, float secondsSinceLastFrame)
Called every frame when we are in geoscape view.
salary_t salaries
Definition: cp_campaign.h:195
struct alienTeamCategory_s alienTeamCategory_t
alien team category definition
int numBaseTemplates
Definition: cp_campaign.h:286
int interest[INTERESTCATEGORY_MAX]
Definition: cp_campaign.h:239
vec2_t newBasePos
Definition: cp_campaign.h:261
aircraft_t * interceptAircraft
Definition: cp_campaign.h:254
#define MAX_ALIEN_GROUP_PER_CATEGORY
Definition: cp_campaign.h:58