UFO: Alien Invasion
Doxygen documentation generating
cp_campaign.h
Go to the documentation of this file.
1 
6 /*
7 Copyright (C) 2002-2023 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 "../../DateTime.h"
34 #include "cp_cgame_callbacks.h"
35 #include "cp_alien_interest.h"
36 #include "cp_rank.h"
37 #include "cp_save.h"
38 #include "cp_parse.h"
39 #include "cp_event.h"
40 #include "cp_ufopedia.h"
41 #include "cp_research.h"
42 #include "cp_radar.h"
43 #include "cp_aircraft.h"
44 #include "cp_base.h"
45 #include "cp_employee.h"
46 #include "cp_transfer.h"
47 #include "cp_nation.h"
48 #include "cp_installation.h"
49 #include "cp_produce.h"
50 #include "cp_uforecovery.h"
51 #include "cp_airfight.h"
52 #include "cp_messageoptions.h"
53 #include "cp_alienbase.h"
54 #include "cp_market.h"
55 #include "cp_statistics.h"
56 #include "cp_component.h"
57 
58 /* Maximum alien groups per alien team category */
59 #define MAX_ALIEN_GROUP_PER_CATEGORY 8
60 /* Maximum alien team category defined in scripts */
61 #define ALIENCATEGORY_MAX 64
62 #define MAX_PROJECTILESONGEOSCAPE 32
63 
67 #define HOURS_PER_ONE_INTEREST 24
68 
72 #define INITIAL_OVERALL_INTEREST 20
73 #define FINAL_OVERALL_INTEREST 400
74 
78 #define DELAY_BETWEEN_MISSION_SPAWNING 12
79 
84 #define EARLY_UFO_RUSH_INTEREST 50
85 
89 #define NON_OCCURRENCE_PROBABILITY 0.75
90 
92 typedef enum mapType_s {
97 
99 } mapType_t;
100 
106 typedef struct alienTeamGroup_s {
107  int idx;
114  const teamDef_t* alienTeams[MAX_TEAMS_PER_MISSION];
116  const chrTemplate_t* alienChrTemplates[MAX_TEAMS_PER_MISSION];
119 
125 typedef struct alienTeamCategory_s {
126  char id[MAX_VAR];
137 
139 typedef struct battleParam_s {
140  struct mission_s* mission;
142  char* param;
144  char alienEquipment[MAX_VAR];
145  char civTeam[MAX_VAR];
146  bool day;
147  const char* zoneType;
148  int aliens, civilians;
149  struct nation_s* nation;
150  bool retriable;
151 } battleParam_t;
152 
154 typedef struct salary_s {
155  int base[MAX_EMPL];
156  int rankBonus[MAX_EMPL];
161 } salary_t;
162 
164 typedef struct campaign_s {
165  int idx;
166  char id[MAX_VAR];
167  char name[MAX_VAR];
169  int team;
170  char researched[MAX_VAR];
171  char soldierEquipment[MAX_VAR];
172  char equipment[MAX_VAR];
173  char market[MAX_VAR];
174  char asymptoticMarket[MAX_VAR];
177  char text[MAX_VAR];
178  char map[MAX_VAR];
179  int soldiers;
181  int workers;
182  int pilots;
183  int ugvs;
184  int credits;
185  int num;
186  signed int difficulty;
187  float minhappiness;
190  bool visible;
191  class DateTime date;
192  int basecost;
193  char firstBaseTemplate[MAX_VAR];
194  bool finished;
197  float produceRate;
198  float researchRate;
199  float healingRate;
207  float employeeRate;
211 } campaign_t;
212 
213 int CP_GetSalaryUpKeepBase(const salary_t* salary, const base_t* base);
214 
216 typedef enum mapAction_s {
220 } mapAction_t;
221 
223 typedef void (*missionResultFunction_t) (const struct missionResults_s* results);
224 
229 typedef struct ccs_s {
240  int interest[INTERESTCATEGORY_MAX];
243  int credits;
246  class DateTime date;
247  bool startXVI;
248  float timer;
249  float frametime;
250 
251  struct {
252  struct mission_s* selectedMission;
257  } geoscape;
258 
259  /* == misc == */
264  /* how fast the game is running */
267 
268  /* already paid in this month? */
269  bool paid;
270 
271  /* == employees == */
272  /* A list of all phalanx employees (soldiers, scientists, workers, etc...) */
273  linkedList_t* employees[MAX_EMPL];
274 
275  /* == technologies == */
276  /* A list of all research-topics resp. the research-tree. */
279 
280  /* == bases == */
281  /* A list of _all_ bases ... even unbuilt ones. */
283  int numBases;
284 
285  /* a list of all templates for building bases */
288 
289  /* == aircraft == */
291 
292  /* == Alien bases == */
294 
295  /* == Nations == */
298 
299  /* == Cities == */
302 
303  /* Projectiles on geoscape (during fights) */
306 
307  /* == Transfers == */
309 
310  /* UFO components. */
313 
314  /* == stored UFOs == */
316 
317  /* Alien Team Package used during battle */
321  /* == ufopedia == */
322  /* A list of all UFOpaedia chapters. */
324  /* Total number of UFOpaedia chapters */
331  campaignEvents_t campaignEvents[MAX_CAMPAIGNS];
336 
337  /* == buildings in bases == */
338  /* A list of all possible unique buildings. */
339  building_t buildingTemplates[MAX_BUILDINGS];
341  /* A list of the building-list per base. (new buildings in a base get copied from buildingTypes) */
343  /* Total number of buildings per base. */
344  int numBuildings[MAX_BASES];
345 
346  /* == installations == */
347  /* A template for each possible installation with configurable values */
350 
351  /* A list of _all_ installations */
353 
354  /* UFOs on geoscape */
356  int numUFOs;
358  /* message categories */
361 
362  /* entries for message categories */
365 
366  /* == Ranks == */
367  /* Global list of all ranks defined in medals.ufo. */
369  /* The number of entries in the list above. */
370  int numRanks;
371 
372  /* cache for techdef technologies */
373  technology_t* teamDefTechs[MAX_TEAMDEFS];
374 
375  /* cache for item technologies */
376  technology_t* objDefTechs[MAX_OBJDEFS];
377 
380 
383 
384  aircraft_t aircraftTemplates[MAX_AIRCRAFT];
389 
391 } ccs_t;
392 
393 typedef struct {
394  int x, y;
395 } screenPoint_t;
396 
397 extern ccs_t ccs;
398 extern const int DETECTION_INTERVAL;
399 extern cvar_t* cp_missiontest;
400 
401 #define MAX_CREDITS 10000000
402 
403 #include "../cgame.h"
404 extern const cgame_import_t* cgi;
405 
406 /* Campaign functions */
407 void CP_InitStartup(void);
408 campaign_t* CP_GetCampaign(const char* name);
409 void CP_CampaignInit(campaign_t* campaign, bool load);
410 void CP_ParseCampaignData(void);
411 void CP_ReadCampaignData(const campaign_t* campaign);
412 bool CP_IsRunning(void);
413 
414 void CP_CampaignRun(campaign_t* campaign, float secondsSinceLastFrame);
415 void CP_CheckLostCondition(const campaign_t* campaign);
416 void CP_EndCampaign(bool won);
417 
418 void CP_Shutdown(void);
419 void CP_ResetCampaignData(void);
420 
421 void CP_StartSelectedMission(void);
422 
423 /* Credits management */
424 bool CP_CheckCredits (int costs);
425 void CP_UpdateCredits(int credits);
426 
427 bool CP_OnGeoscape(void);
int civiliansKilled
Definition: cp_campaign.h:244
int overallInterest
Definition: cp_campaign.h:239
int numChapters
Definition: cp_campaign.h:325
int numProjectiles
Definition: cp_campaign.h:305
Class describing a point of time.
Definition: DateTime.h:30
int numEventMails
Definition: cp_campaign.h:329
#define MAX_UFOONGEOSCAPE
Definition: cp_radar.h:27
int minMissions
Definition: cp_campaign.h:202
alien team group definition.
Definition: cp_campaign.h:106
int numComponents
Definition: cp_campaign.h:312
int numAircraftTemplates
Definition: cp_campaign.h:385
Header file for Aircraft and item components.
void CP_UpdateCredits(int credits)
Sets credits and update mn_credits cvar.
alienTeamGroup_t * alienTeamGroup
Definition: cp_campaign.h:141
#define MAX_CAMPAIGNS
Definition: cp_campaign.h:31
float ufoReductionRate
Definition: cp_campaign.h:204
int maxAllowedXVIRateUntilLost
Definition: cp_campaign.h:189
#define MAX_PEDIACHAPTERS
Definition: cp_ufopedia.h:28
interestCategory_t
int numAlienCategories
Definition: cp_campaign.h:319
bool CP_IsRunning(void)
Checks whether a campaign mode game is running.
Definition: cp_campaign.cpp:80
float frametime
Definition: cp_campaign.h:249
A base with all it's data.
Definition: cp_base.h:84
int numNations
Definition: cp_campaign.h:297
linkedList_t * alienBases
Definition: cp_campaign.h:293
cvar_t * cp_missiontest
Definition: cp_campaign.cpp:64
int lastInterestIncreaseDelay
Definition: cp_campaign.h:238
void CP_EndCampaign(bool won)
Function to handle the campaign end.
Definition: cp_campaign.cpp:89
bool paid
Definition: cp_campaign.h:269
float componentRate
Definition: cp_campaign.h:201
int gameTimeScale
Definition: cp_campaign.h:265
template for creating a base
Definition: cp_base.h:130
const equipDef_t * marketDef
Definition: cp_campaign.h:175
struct mission_s * selectedMission
Definition: cp_campaign.h:252
int alienBaseInterest
Definition: cp_campaign.h:209
int numTechnologies
Definition: cp_campaign.h:278
#define MAX_MESSAGECATEGORIES
Header for single player market stuff.
#define MAX_TEAMDEFS
Definition: chr_shared.h:228
Header for installation management related stuff.
int numBaseTemplates
Definition: cp_campaign.h:287
equipDef_t eMission
Definition: cp_campaign.h:230
void(* missionResultFunction_t)(const struct missionResults_s *results)
Definition: cp_campaign.h:223
linkedList_t * initialCraft
Definition: cp_campaign.h:210
float timer
Definition: cp_campaign.h:248
Defines some savefile structures.
market_t eMarket
Definition: cp_campaign.h:232
Header file for Transfer stuff.
void CP_InitStartup(void)
Header for research related stuff.
Nation code.
int maxMissions
Definition: cp_campaign.h:203
Header file for messageoptions related stuff.
int numBases
Definition: cp_campaign.h:283
Header for geoscape event related stuff.
#define MAX_ASSEMBLIES
Definition: cp_component.h:28
void CP_ReadCampaignData(const campaign_t *campaign)
Definition: cp_parse.cpp:692
linkedList_t * storedUFOs
Definition: cp_campaign.h:315
#define MAX_BUILDINGS
Definition: cp_base.h:34
projectile used during fight between two or more aircraft
Definition: cp_airfight.h:43
int numMsgCategories
Definition: cp_campaign.h:360
float healingRate
Definition: cp_campaign.h:199
Header file for UFOpaedia script interpreter.
missionSpawnFunction_t missionSpawnCallback
Definition: cp_campaign.h:387
int numBuildingTemplates
Definition: cp_campaign.h:340
Header for employee related stuff.
The definition of a "components" entry (i.e. an assembly of several items) parsed from a ufo-file...
Definition: cp_component.h:35
aircraft_t * selectedAircraft
Definition: cp_campaign.h:253
int numCities
Definition: cp_campaign.h:301
int numMsgCategoryEntries
Definition: cp_campaign.h:364
int numUnreadMails
Definition: cp_campaign.h:326
const int DETECTION_INTERVAL
delay between actions that must be executed independently of time scale
Definition: cp_campaign.cpp:75
#define MAX_VAR
Definition: shared.h:36
float produceRate
Definition: cp_campaign.h:197
float minhappiness
Definition: cp_campaign.h:187
aircraft_t * missionAircraft
Definition: cp_campaign.h:256
int CP_GetSalaryUpKeepBase(const salary_t *salary, const base_t *base)
bool visible
Definition: cp_campaign.h:190
#define MAX_OBJDEFS
Definition: inv_shared.h:37
int numCampaignTriggerEvents
Definition: cp_campaign.h:335
int aircraftFactor
Definition: cp_campaign.h:157
const cgame_import_t * cgi
void CP_ParseCampaignData(void)
Read the data for campaigns.
Definition: cp_parse.cpp:641
#define MAX_PROJECTILESONGEOSCAPE
Definition: cp_campaign.h:62
int initialInterest
Definition: cp_campaign.h:208
Campaign parsing header.
bool finished
Definition: cp_campaign.h:194
Header for production related stuff.
UFO recovery and storing.
campaign_t * CP_GetCampaign(const char *name)
Returns the campaign pointer from global campaign array.
salary_t salaries
Definition: cp_campaign.h:196
int scientists
Definition: cp_campaign.h:180
linkedList_t * transfers
Definition: cp_campaign.h:308
Campaign statistic headers.
void CP_CampaignInit(campaign_t *campaign, bool load)
Called at new game and load game.
int aircraftDivisor
Definition: cp_campaign.h:158
void CP_Shutdown(void)
Campaign closing actions.
#define MAX_INSTALLATION_TEMPLATES
aircraft_t * selectedUFO
Definition: cp_campaign.h:254
missionResultFunction_t missionResultCallback
Definition: cp_campaign.h:388
void CP_CheckLostCondition(const campaign_t *campaign)
Checks whether the player has lost the campaign.
void CP_ResetCampaignData(void)
Will clear most of the parsed singleplayer data.
QGL_EXTERN void(APIENTRY *qglActiveTexture)(GLenum texture)
#define MAX_AIRCRAFT
Definition: cp_aircraft.h:31
float liquidationRate
Definition: cp_campaign.h:200
struct mission_s * mission
Definition: cp_campaign.h:140
An aircraft with all it's data.
Definition: cp_aircraft.h:115
ccs_t ccs
Definition: cp_campaign.cpp:63
linkedList_t * aircraft
Definition: cp_campaign.h:290
#define MAX_EVENTMAILS
Definition: cp_event.h:28
Header file for aircraft stuff.
memPool_t * cp_campaignPool
Definition: cp_campaign.cpp:62
campaign_t * curCampaign
Definition: cp_campaign.h:378
stats_t campaignStats
Definition: cp_campaign.h:379
float employeeRate
Definition: cp_campaign.h:207
struct nation_s * nation
Definition: cp_campaign.h:149
vec2_t newBasePos
Definition: cp_campaign.h:262
#define MAX_CAMPAIGN_TRIGGER_EVENTS
Definition: cp_event.h:96
#define MAX_TECHNOLOGIES
Definition: cp_research.h:31
This is the technology parsed from research.ufo.
Definition: cp_research.h:139
QGL_EXTERN GLuint GLsizei GLsizei GLint GLenum GLchar * name
Definition: r_gl.h:110
int aliensKilled
Definition: cp_campaign.h:245
Header file for airfights.
#define MAX_TEAMS_PER_MISSION
Definition: inv_shared.h:618
linkedList_t * installations
Definition: cp_campaign.h:352
linkedList_t * missions
Definition: cp_campaign.h:234
int numRanks
Definition: cp_campaign.h:370
linkedList_t * updateCharacters
Definition: cp_campaign.h:390
int baseUpkeep
Definition: cp_campaign.h:159
client campaign structure
Definition: cp_campaign.h:229
linkedList_t * nations
Definition: cp_campaign.h:296
linkedList_t * cities
Definition: cp_campaign.h:300
static linkedList_t * eventMails
Definition: cp_event.cpp:36
int numInstallationTemplates
Definition: cp_campaign.h:349
vec_t vec2_t[2]
Definition: ufotypes.h:38
int numCampaigns
Definition: cp_campaign.h:382
linkedList_t * equipment
Definition: cp_campaign.h:131
signed int difficulty
Definition: cp_campaign.h:186
alien team category definition
Definition: cp_campaign.h:125
const campaignEvents_t * events
Definition: cp_campaign.h:195
float debtInterest
Definition: cp_campaign.h:160
aircraft_t * interceptAircraft
Definition: cp_campaign.h:255
A building with all it's data.
Definition: cp_building.h:73
const equipDef_t * asymptoticMarketDef
Definition: cp_campaign.h:176
bool CP_CheckCredits(int costs)
Checks whether you have enough credits for something.
const char * zoneType
Definition: cp_campaign.h:147
int numUFOs
Definition: cp_campaign.h:356
void(* missionSpawnFunction_t)(void)
Definition: cp_campaign.h:222
#define MAX_RANKS
Definition: cp_rank.h:26
mapAction_t mapAction
Definition: cp_campaign.h:261
bool CP_OnGeoscape(void)
Returns if we are currently on the Geoscape.
#define MAX_BASES
Definition: cp_base.h:32
battleParam_t battleParameters
Definition: cp_campaign.h:236
int gameLapse
Definition: cp_campaign.h:266
mapType_t
Definition: cp_campaign.h:92
int negativeCreditsUntilLost
Definition: cp_campaign.h:188
#define ALIENCATEGORY_MAX
Definition: cp_campaign.h:61
Describes a rank that a recruit can gain.
Definition: cp_rank.h:29
int credits
Definition: cp_campaign.h:243
Header for base management related stuff.
bool defaultCampaign
Definition: cp_campaign.h:168
void CP_StartSelectedMission(void)
Starts a selected mission.
#define MAX_BASETEMPLATES
Definition: cp_base.h:33
bool startXVI
Definition: cp_campaign.h:247
This is a cvar definition. Cvars can be user modified and used in our menus e.g.
Definition: cvar.h:71
int lastMissionSpawnedDelay
Definition: cp_campaign.h:241
Alien interest header.
available mails for a tech - mail and mail_pre in script files
Definition: cp_event.h:38
float researchRate
Definition: cp_campaign.h:198
void CP_CampaignRun(campaign_t *campaign, float secondsSinceLastFrame)
Called every frame when we are in geoscape view.
mapAction_t
Definition: cp_campaign.h:216
int numCampaignEventDefinitions
Definition: cp_campaign.h:332
#define MAX_ALIEN_GROUP_PER_CATEGORY
Definition: cp_campaign.h:59