UFO: Alien Invasion
cp_campaign.h
Go to the documentation of this file.
1
6/*
7Copyright (C) 2002-2022 UFO: Alien Invasion.
8
9This program is free software; you can redistribute it and/or
10modify it under the terms of the GNU General Public License
11as published by the Free Software Foundation; either version 2
12of the License, or (at your option) any later version.
13
14This program is distributed in the hope that it will be useful,
15but WITHOUT ANY WARRANTY; without even the implied warranty of
16MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
17
18See the GNU General Public License for more details.
19
20You should have received a copy of the GNU General Public License
21along with this program; if not, write to the Free Software
22Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
23
24*/
25
26#pragma once
27
29
30class 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
92typedef enum mapType_s {
97
100
106typedef 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
125typedef struct alienTeamCategory_s {
126 char id[MAX_VAR];
137
139typedef 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;
152
154typedef struct salary_s {
155 int base[MAX_EMPL];
156 int rankBonus[MAX_EMPL];
161} salary_t;
162
164typedef 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];
182 int pilots;
183 int ugvs;
185 int num;
186 signed int difficulty;
190 bool visible;
191 class DateTime date;
193 char firstBaseTemplate[MAX_VAR];
211} campaign_t;
212
213int CP_GetSalaryUpKeepBase(const salary_t* salary, const base_t* base);
214
216typedef enum mapAction_s {
221
223typedef void (*missionResultFunction_t) (const struct missionResults_s* results);
224
229typedef struct ccs_s {
240 int interest[INTERESTCATEGORY_MAX];
246 class DateTime date;
247 bool startXVI;
248 float timer;
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...) */
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. */
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 */
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 */
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. */
371
372 /* cache for techdef technologies */
374
375 /* cache for item technologies */
377
380
383
384 aircraft_t aircraftTemplates[MAX_AIRCRAFT];
389
391} ccs_t;
392
393typedef struct {
394 int x, y;
396
397extern ccs_t ccs;
398extern const int DETECTION_INTERVAL;
399extern cvar_t* cp_missiontest;
400
401#define MAX_CREDITS 10000000
402
403#include "../cgame.h"
404extern const cgame_import_t* cgi;
405
406/* Campaign functions */
407void CP_InitStartup(void);
408campaign_t* CP_GetCampaign(const char* name);
409void CP_CampaignInit(campaign_t* campaign, bool load);
410void CP_ParseCampaignData(void);
411void CP_ReadCampaignData(const campaign_t* campaign);
412bool CP_IsRunning(void);
413
414void CP_CampaignRun(campaign_t* campaign, float secondsSinceLastFrame);
415void CP_CheckLostCondition(const campaign_t* campaign);
416void CP_EndCampaign(bool won);
417
418void CP_Shutdown(void);
419void CP_ResetCampaignData(void);
420
421void CP_StartSelectedMission(void);
422
423/* Credits management */
424bool CP_CheckCredits (int costs);
425void CP_UpdateCredits(int credits);
426
427bool CP_OnGeoscape(void);
#define MAX_TEAMDEFS
Definition: chr_shared.h:228
Class describing a point of time.
Definition: DateTime.h:31
Header file for aircraft stuff.
#define MAX_AIRCRAFT
Definition: cp_aircraft.h:31
Header file for airfights.
Alien interest header.
interestCategory_t
@ INTERESTCATEGORY_MAX
Header for base management related stuff.
#define MAX_BASETEMPLATES
Definition: cp_base.h:33
#define MAX_BASES
Definition: cp_base.h:32
#define MAX_BUILDINGS
Definition: cp_base.h:34
const cgame_import_t * cgi
memPool_t * cp_campaignPool
Definition: cp_campaign.cpp:62
void CP_ResetCampaignData(void)
Will clear most of the parsed singleplayer data.
void CP_Shutdown(void)
Campaign closing actions.
bool CP_OnGeoscape(void)
Returns if we are currently on the Geoscape.
bool CP_IsRunning(void)
Checks whether a campaign mode game is running.
Definition: cp_campaign.cpp:80
#define MAX_PROJECTILESONGEOSCAPE
Definition: cp_campaign.h:62
void CP_CampaignRun(campaign_t *campaign, float secondsSinceLastFrame)
Called every frame when we are in geoscape view.
#define MAX_ALIEN_GROUP_PER_CATEGORY
Definition: cp_campaign.h:59
#define ALIENCATEGORY_MAX
Definition: cp_campaign.h:61
int CP_GetSalaryUpKeepBase(const salary_t *salary, const base_t *base)
const int DETECTION_INTERVAL
delay between actions that must be executed independently of time scale
Definition: cp_campaign.cpp:75
void CP_InitStartup(void)
void CP_CheckLostCondition(const campaign_t *campaign)
Checks whether the player has lost the campaign.
void CP_StartSelectedMission(void)
Starts a selected mission.
void CP_CampaignInit(campaign_t *campaign, bool load)
Called at new game and load game.
void CP_ParseCampaignData(void)
Read the data for campaigns.
Definition: cp_parse.cpp:641
mapAction_t
Definition: cp_campaign.h:216
@ MA_NONE
Definition: cp_campaign.h:217
@ MA_NEWINSTALLATION
Definition: cp_campaign.h:219
@ MA_NEWBASE
Definition: cp_campaign.h:218
void(* missionResultFunction_t)(const struct missionResults_s *results)
Definition: cp_campaign.h:223
void CP_EndCampaign(bool won)
Function to handle the campaign end.
Definition: cp_campaign.cpp:89
#define MAX_CAMPAIGNS
Definition: cp_campaign.h:31
campaign_t * CP_GetCampaign(const char *name)
Returns the campaign pointer from global campaign array.
bool CP_CheckCredits(int costs)
Checks whether you have enough credits for something.
void CP_UpdateCredits(int credits)
Sets credits and update mn_credits cvar.
mapType_t
Definition: cp_campaign.h:92
@ MAPTYPE_POPULATION
Definition: cp_campaign.h:95
@ MAPTYPE_NATIONS
Definition: cp_campaign.h:96
@ MAPTYPE_CULTURE
Definition: cp_campaign.h:94
@ MAPTYPE_TERRAIN
Definition: cp_campaign.h:93
@ MAPTYPE_MAX
Definition: cp_campaign.h:98
void CP_ReadCampaignData(const campaign_t *campaign)
Definition: cp_parse.cpp:692
cvar_t * cp_missiontest
Definition: cp_campaign.cpp:64
ccs_t ccs
Definition: cp_campaign.cpp:63
void(* missionSpawnFunction_t)(void)
Definition: cp_campaign.h:222
Header file for Aircraft and item components.
#define MAX_ASSEMBLIES
Definition: cp_component.h:28
Header for employee related stuff.
@ MAX_EMPL
Definition: cp_employee.h:36
static linkedList_t * eventMails
Definition: cp_event.cpp:36
Header for geoscape event related stuff.
#define MAX_CAMPAIGN_TRIGGER_EVENTS
Definition: cp_event.h:96
#define MAX_EVENTMAILS
Definition: cp_event.h:28
Header for installation management related stuff.
#define MAX_INSTALLATION_TEMPLATES
Header for single player market stuff.
Header file for messageoptions related stuff.
#define MAX_MESSAGECATEGORIES
@ NT_NUM_NOTIFYTYPE
Nation code.
Campaign parsing header.
Header for production related stuff.
#define MAX_UFOONGEOSCAPE
Definition: cp_radar.h:27
#define MAX_RANKS
Definition: cp_rank.h:26
Header for research related stuff.
#define MAX_TECHNOLOGIES
Definition: cp_research.h:31
Defines some savefile structures.
Campaign statistic headers.
Header file for Transfer stuff.
Header file for UFOpaedia script interpreter.
#define MAX_PEDIACHAPTERS
Definition: cp_ufopedia.h:28
UFO recovery and storing.
#define MAX_TEAMS_PER_MISSION
Definition: inv_shared.h:618
#define MAX_OBJDEFS
Definition: inv_shared.h:37
QGL_EXTERN void(APIENTRY *qglActiveTexture)(GLenum texture)
QGL_EXTERN GLuint GLsizei GLsizei GLint GLenum GLchar * name
Definition: r_gl.h:110
#define MAX_VAR
Definition: shared.h:36
An aircraft with all it's data.
Definition: cp_aircraft.h:115
projectile used during fight between two or more aircraft
Definition: cp_airfight.h:43
alien team category definition
Definition: cp_campaign.h:125
linkedList_t * equipment
Definition: cp_campaign.h:131
alien team group definition.
Definition: cp_campaign.h:106
A base with all it's data.
Definition: cp_base.h:84
template for creating a base
Definition: cp_base.h:130
alienTeamGroup_t * alienTeamGroup
Definition: cp_campaign.h:141
struct mission_s * mission
Definition: cp_campaign.h:140
const char * zoneType
Definition: cp_campaign.h:147
struct nation_s * nation
Definition: cp_campaign.h:149
A building with all it's data.
Definition: cp_building.h:73
salary_t salaries
Definition: cp_campaign.h:196
const equipDef_t * asymptoticMarketDef
Definition: cp_campaign.h:176
float healingRate
Definition: cp_campaign.h:199
int initialInterest
Definition: cp_campaign.h:208
bool defaultCampaign
Definition: cp_campaign.h:168
const campaignEvents_t * events
Definition: cp_campaign.h:195
float ufoReductionRate
Definition: cp_campaign.h:204
float produceRate
Definition: cp_campaign.h:197
float liquidationRate
Definition: cp_campaign.h:200
int minMissions
Definition: cp_campaign.h:202
const equipDef_t * marketDef
Definition: cp_campaign.h:175
bool visible
Definition: cp_campaign.h:190
int maxAllowedXVIRateUntilLost
Definition: cp_campaign.h:189
int alienBaseInterest
Definition: cp_campaign.h:209
signed int difficulty
Definition: cp_campaign.h:186
float minhappiness
Definition: cp_campaign.h:187
int scientists
Definition: cp_campaign.h:180
int negativeCreditsUntilLost
Definition: cp_campaign.h:188
linkedList_t * initialCraft
Definition: cp_campaign.h:210
float componentRate
Definition: cp_campaign.h:201
float researchRate
Definition: cp_campaign.h:198
int maxMissions
Definition: cp_campaign.h:203
float employeeRate
Definition: cp_campaign.h:207
bool finished
Definition: cp_campaign.h:194
client campaign structure
Definition: cp_campaign.h:229
int numBases
Definition: cp_campaign.h:283
int numBuildingTemplates
Definition: cp_campaign.h:340
linkedList_t * aircraft
Definition: cp_campaign.h:290
battleParam_t battleParameters
Definition: cp_campaign.h:236
int numMsgCategoryEntries
Definition: cp_campaign.h:364
float timer
Definition: cp_campaign.h:248
missionResultFunction_t missionResultCallback
Definition: cp_campaign.h:388
int civiliansKilled
Definition: cp_campaign.h:244
int numCampaigns
Definition: cp_campaign.h:382
int lastMissionSpawnedDelay
Definition: cp_campaign.h:241
int credits
Definition: cp_campaign.h:243
market_t eMarket
Definition: cp_campaign.h:232
bool startXVI
Definition: cp_campaign.h:247
linkedList_t * updateCharacters
Definition: cp_campaign.h:390
linkedList_t * nations
Definition: cp_campaign.h:296
float frametime
Definition: cp_campaign.h:249
bool paid
Definition: cp_campaign.h:269
int gameLapse
Definition: cp_campaign.h:266
linkedList_t * storedUFOs
Definition: cp_campaign.h:315
int numCampaignEventDefinitions
Definition: cp_campaign.h:332
stats_t campaignStats
Definition: cp_campaign.h:379
mapAction_t mapAction
Definition: cp_campaign.h:261
int gameTimeScale
Definition: cp_campaign.h:265
linkedList_t * missions
Definition: cp_campaign.h:234
linkedList_t * installations
Definition: cp_campaign.h:352
linkedList_t * cities
Definition: cp_campaign.h:300
vec2_t newBasePos
Definition: cp_campaign.h:262
int lastInterestIncreaseDelay
Definition: cp_campaign.h:238
int numCampaignTriggerEvents
Definition: cp_campaign.h:335
int aliensKilled
Definition: cp_campaign.h:245
struct mission_s * selectedMission
Definition: cp_campaign.h:252
equipDef_t eMission
Definition: cp_campaign.h:230
int numEventMails
Definition: cp_campaign.h:329
int numInstallationTemplates
Definition: cp_campaign.h:349
int numTechnologies
Definition: cp_campaign.h:278
int numMsgCategories
Definition: cp_campaign.h:360
int numUFOs
Definition: cp_campaign.h:356
aircraft_t * selectedAircraft
Definition: cp_campaign.h:253
int numUnreadMails
Definition: cp_campaign.h:326
aircraft_t * interceptAircraft
Definition: cp_campaign.h:255
int numAircraftTemplates
Definition: cp_campaign.h:385
aircraft_t * missionAircraft
Definition: cp_campaign.h:256
int numAlienCategories
Definition: cp_campaign.h:319
missionSpawnFunction_t missionSpawnCallback
Definition: cp_campaign.h:387
int numCities
Definition: cp_campaign.h:301
int numRanks
Definition: cp_campaign.h:370
campaign_t * curCampaign
Definition: cp_campaign.h:378
int numProjectiles
Definition: cp_campaign.h:305
int overallInterest
Definition: cp_campaign.h:239
int numNations
Definition: cp_campaign.h:297
linkedList_t * alienBases
Definition: cp_campaign.h:293
int numBaseTemplates
Definition: cp_campaign.h:287
int numComponents
Definition: cp_campaign.h:312
linkedList_t * transfers
Definition: cp_campaign.h:308
int numChapters
Definition: cp_campaign.h:325
aircraft_t * selectedUFO
Definition: cp_campaign.h:254
The definition of a "components" entry (i.e. an assembly of several items) parsed from a ufo-file.
Definition: cp_component.h:35
This is a cvar definition. Cvars can be user modified and used in our menus e.g.
Definition: cvar.h:71
available mails for a tech - mail and mail_pre in script files
Definition: cp_event.h:38
Describes a rank that a recruit can gain.
Definition: cp_rank.h:29
int aircraftFactor
Definition: cp_campaign.h:157
float debtInterest
Definition: cp_campaign.h:160
int baseUpkeep
Definition: cp_campaign.h:159
int aircraftDivisor
Definition: cp_campaign.h:158
This is the technology parsed from research.ufo.
Definition: cp_research.h:139
vec_t vec2_t[2]
Definition: ufotypes.h:38