68 cls.i.destroyInventoryInterface();
127 ccs.curCampaign = campaign;
152 if (
ccs.campaignStats.basesBuilt == 1)
160 const vec2_t destination = { 10, 10 };
170 base =
CreateBase(
"unittestaircraft", destination);
171 ASSERT_TRUE(
nullptr != base);
175 ASSERT_TRUE(
nullptr != aircraft);
178 aircraftTemplate = aircraft->
tpl;
179 ASSERT_TRUE(
nullptr != aircraftTemplate);
181 firstIdx = aircraft->
idx;
187 ASSERT_EQ(
count, initialCount - 1);
191 ASSERT_TRUE(
nullptr != newAircraft);
193 ASSERT_EQ(
count, initialCount);
196 ASSERT_EQ(newAircraft->
homebase, base);
201 ASSERT_NE(firstIdx, a->idx);
203 if (a->idx == newAircraft->
idx)
207 ASSERT_EQ(newFound, 1);
214 ASSERT_TRUE(
nullptr == aircraft);
233 ASSERT_TRUE(
nullptr != e);
246 const int amount = 3;
247 for (
i = 0;
i < amount;
i++) {
249 ASSERT_TRUE(
nullptr != e);
258 ASSERT_EQ(cnt, amount);
272 ASSERT_TRUE(
nullptr != e);
278 for (
i = 0;
i < 512;
i++) {
280 ASSERT_TRUE(
nullptr != e);
283 ASSERT_EQ(cnt,
i + 1);
294 ccs.credits = 10000000;
316 const vec2_t pos = {-73.2, 18.5};
325 ASSERT_TRUE(campaign !=
nullptr);
330 ccs.overallInterest = 36;
333 base =
CreateBase(
"unittestautomission", pos);
334 ASSERT_TRUE(
nullptr != base);
343 ASSERT_TRUE(
nullptr != aircraft);
350 ASSERT_TRUE(
nullptr != mission);
353 AM_Go(mission, aircraft, campaign, &battleParameters, &result);
361 const vec2_t pos = {0, 0};
362 const vec2_t posTarget = {51, 0};
366 ASSERT_TRUE(
nullptr != base);
367 base_t* targetBase =
CreateBase(
"unittesttransferitemtargetbase", posTarget,
true);
368 ASSERT_TRUE(
nullptr != targetBase);
372 ASSERT_TRUE(
nullptr != od);
376 tr.itemCargo->add(od, 1, 0);
377 tr.destBase = targetBase;
378 tr.itemCargo->add(od, 1, 0);
381 ASSERT_TRUE(
nullptr != transfer);
403 ASSERT_TRUE(
nullptr != transfer);
415 ASSERT_TRUE(
nullptr != transfer);
429 tr.itemCargo =
nullptr;
436 const vec2_t pos = {0, 0};
443 ASSERT_TRUE(
nullptr != ufo);
450 storedUFO =
US_StoreUFO(ufo, installation, date, 1.0);
451 ASSERT_TRUE(
nullptr != storedUFO);
482 ASSERT_TRUE(
nullptr != laserTech);
484 ASSERT_TRUE(
nullptr != otherLaserTech);
486 const vec2_t pos = {0, 0};
493 ASSERT_EQ(laserTech->
base, base);
499 const int n = laserTech->
time * (1.0f /
ccs.curCampaign->researchRate);
500 for (
int i = 0;
i < n;
i++) {
502 ASSERT_EQ(finished, 0) <<
"Did not expect to finish a research (#" << finished <<
", i:" <<
i <<
")";
519 const vec2_t pos = {0, 0};
536 ASSERT_TRUE(
nullptr != od);
541 ASSERT_TRUE(
nullptr != prod);
546 for (
i = 0;
i < n;
i++) {
562 const vec2_t pos = {0, 0};
579 ASSERT_TRUE(
nullptr != aircraft);
586 ASSERT_TRUE(
nullptr != aircraft);
589 ASSERT_TRUE(
nullptr != prod);
594 for (
i = 0;
i < n;
i++) {
610 const vec2_t pos = {0, 0};
628 ASSERT_TRUE(
nullptr != ufo);
633 ASSERT_TRUE(
nullptr != storedUFO);
637 ASSERT_TRUE(
nullptr != prod);
643 for (
i = 0;
i < n;
i++) {
678 const vec2_t destination = { 10, 10 };
681 const int deltaTime = 1000;
686 ASSERT_TRUE(
nullptr != base);
695 ASSERT_TRUE(
nullptr != aircraft);
703 ASSERT_TRUE(
nullptr != ufoTemplate);
708 ASSERT_TRUE(
nullptr != mission);
715 ASSERT_TRUE(
nullptr != ufo);
740 ASSERT_EQ(
ccs.numProjectiles, 1);
758 const vec2_t destination = { 10, 10 };
770 base->
radar.ufoDetectionProbability = 1.0;
785 ASSERT_TRUE(
nullptr != nation);
809 const vec2_t pos = {0, 0};
817 ccs.curCampaign = campaign;
847 ASSERT_STREQ(base->
name,
"unittestbase");
863 ccs.curCampaign = campaign;
867 const vec2_t pos = {0, 0};
871 ASSERT_TRUE(
nullptr != nation);
873 const int employees = 10000;
874 for (
int i = 0;
i < employees;
i++) {
899 const vec2_t destination = { 10, 10 };
911 int startDay =
ccs.date.getDateAsDays();
912 for (
int i = 0;
i < seconds;
i++) {
913 ccs.gameTimeScale = 1;
916 ASSERT_EQ(
ccs.date.getDateAsDays() - startDay, days);
930 ccs.curCampaign =
nullptr;
932 ASSERT_TRUE(
nullptr !=
ccs.curCampaign);
949 ASSERT_TRUE(date <=
ccs.date);
950 ASSERT_FALSE(
ccs.date > date);
954 ASSERT_TRUE(date <=
ccs.date);
955 ASSERT_TRUE(
ccs.date > date);
959 ASSERT_FALSE(date <=
ccs.date);
960 ASSERT_FALSE(
ccs.date > date);
964 ASSERT_TRUE(date <=
ccs.date);
965 ASSERT_TRUE(
ccs.date > date);
969 ASSERT_FALSE(date <=
ccs.date);
970 ASSERT_FALSE(
ccs.date > date);
980 const vec2_t destination = { 10, 10 };
982 base =
CreateBase(
"unittestcampaigntime", destination);
997 ASSERT_FALSE(
ccs.paid);
1009 const vec2_t destination = { 10, 10 };
1012 base =
CreateBase(
"unittesthospital", destination);
1019 if (!employee->isHired())
1021 employee->chr.HP = employee->chr.maxHP - 10;
1032 if (!employee->isHired())
1034 ASSERT_NE(employee->chr.HP, employee->chr.maxHP - 10) << employee->chr.HP <<
"/" << employee->chr.maxHP;
1046 const vec2_t pos = {0, 0};
1050 building_t* entrance, *building1, *building2;
1055 base =
CreateBase(
"unittestbuildingconstruction1", pos);
1056 ASSERT_TRUE(
nullptr != base);
1057 base =
CreateBase(
"unittestbuildingconstruction2", pos);
1058 ASSERT_TRUE(
nullptr != base);
1061 ASSERT_EQ(
ccs.numBuildings[base->
idx], 1);
1062 entrance = &
ccs.buildings[base->
idx][0];
1066 ASSERT_TRUE(
nullptr != buildingTemplate);
1069 x = entrance->
pos[0];
1070 y = entrance->
pos[1];
1080 ASSERT_TRUE(
nullptr == building1);
1083 x = (x + entrance->
pos[0]) /2;
1086 ASSERT_TRUE(
nullptr != building1);
1089 if (x < entrance->pos[0])
1094 ASSERT_TRUE(
nullptr == building2);
1108 ASSERT_TRUE(
nullptr != building2);
1114 ASSERT_TRUE(
nullptr != building2);
1137 const char* error =
nullptr;
1141 ASSERT_TRUE(success) << error;
1146 const char* map = md->
id;
1159 for (
i = 0;
i < ufoIdsNum;
i++) {
1173 ASSERT_TRUE(
CP_ChooseMap(&mission, city->
pos)) <<
"could not find a map for city " << city->id;
1178 ASSERT_NE(0, numUfoTypes);
1179 for (
i = 0;
i < numUfoTypes;
i++) {
1186 ASSERT_TRUE(
nullptr != ufo);
1190 mission.
mapDef =
nullptr;
1192 ASSERT_TRUE(
CP_ChooseMap(&mission, city->
pos)) <<
"could not find map for city " << city->
id <<
" with ufo: " << ufo->
id;
1211 for (
i = 0;
i < numUfoTypes;
i++) {
1226 ASSERT_TRUE(
va(
"%s wasn't used", md->
id));
1240 ASSERT_TRUE(result) <<
"could not find a mission for mapdef " << md->
id;
1254 for (
int i = 0;
i < 60;
i++) {
1261 event->active =
true;
1264 event->command =
Mem_StrDup(
"test_eventtrigger");
1265 event->require =
Mem_StrDup(
"ufo[craft_ufo_harvester]");
1277 --
ccs.numCampaignTriggerEvents;
1283 const int expected = 22;
1285 ASSERT_TRUE(maxSize >= expected);
1287 const vec2_t destination = { 10, 10 };
1289 ASSERT_TRUE(
nullptr != base);
1293 ASSERT_TRUE(
B_AssembleMap(maps,
sizeof(maps), coords,
sizeof(coords), base));
1294 const char* str = coords;
1295 int coordsAmount = 0;
1300 }
while (str !=
nullptr);
1308 }
while (str !=
nullptr);
1311 ASSERT_EQ(coordsAmount / 3, expected) <<
"coords have " << coordsAmount <<
" entries: '" << coords <<
"'";
1312 ASSERT_EQ(mapsAmount, expected) <<
"maps have " << mapsAmount <<
" entries: '"<< maps <<
"'";
1317 const char* types[] = {
"terrain",
"culture",
"population",
"nations",
nullptr};
1318 for (
int i = 0;
i <
ccs.numCampaigns;
i++) {
1323 for (
const char **t = types; *t; ++t) {
1324 const char *image =
va(
"pics/geoscape/%s_%s", c.
map, *t);
1326 ASSERT_TRUE(surf !=
nullptr);
1327 const int w = surf->w;
1328 const int h = surf->h;
1333 SDL_FreeSurface(surf);
1344 ASSERT_FALSE(exists);
1345 ASSERT_EQ(0,
count);
1350 const vec2_t pos = {1, -89};
1354 ASSERT_NE(
nullptr, alienBase);
1357 ASSERT_EQ(50.f, alienBase->
stealth);
1358 ASSERT_EQ(0, alienBase->
supply);
1359 ASSERT_EQ(1, alienBase->
pos[0]);
1360 ASSERT_EQ(-89, alienBase->
pos[1]);
1365 const vec2_t phalanxPos = {0, 0};
1369 const vec2_t alienPos = {0, -89};
1376 ASSERT_NE(
nullptr, alienBase);
1377 ASSERT_GT(0.0f, alienBase->
stealth);
1379 ASSERT_NE(
nullptr, mission);
DateTime class definition.
void GAME_InitStartup(void)
static const int TAG_INVENTORY
static const inventoryImport_t inventoryImport
Shared game type headers.
void CL_InitLua(void)
Initializes the ui-lua interfacing environment.
memPool_t * vid_imagePool
void CL_SetClientState(connstate_t state)
Sets the client state.
memPool_t * cl_genericPool
mapDef_t * Com_GetMapDefinitionByID(const char *mapDefID)
#define MapDef_ForeachSingleplayerCampaign(var)
static void TearDownTestCase()
static void SetUpTestCase()
Class describing a point of time.
static const int SECONDS_PER_DAY
Primary header for client.
void Cmd_ExecuteString(const char *text,...)
A complete command line has been parsed, so try to execute it.
void Cmd_RemoveCommand(const char *cmdName)
Removes a command from script interface.
void Cmd_Dummy_f(void)
Dummy binding if you don't want unknown commands forwarded to the server.
void Cmd_AddCommand(const char *cmdName, xcommand_t function, const char *desc)
Add a new command to the script interface.
memPool_t * com_genericPool
void AIR_DeleteAircraft(aircraft_t *aircraft)
Removes an aircraft from its base and the game.
int AIR_BaseCountAircraft(const base_t *base)
Returns the number of aircraft on the given base.
aircraft_t * AIR_NewAircraft(base_t *base, const aircraft_t *aircraftTemplate)
Places a new aircraft in the given base.
bool AIR_IsAircraftOnGeoscape(const aircraft_t *aircraft)
Checks whether given aircraft is on geoscape.
int AIR_GetTeamSize(const aircraft_t *aircraft)
Counts the number of soldiers in given aircraft.
const aircraft_t * AIR_GetAircraft(const char *name)
Searches the global array of aircraft types for a given aircraft.
aircraft_t * AIR_GetFirstFromBase(const base_t *b)
Iterates through the aircraft of a base.
#define AIR_Foreach(var)
iterates trough all aircraft
#define AIR_ForeachFromBase(var, base)
iterates trough all aircraft from a specific homebase
void AIRFIGHT_CampaignRunProjectiles(const campaign_t *campaign, int dt)
Update values of projectiles.
void INT_ResetAlienInterest(void)
Initialize alien interest values and mission cycle.
@ INTERESTCATEGORY_TERROR_ATTACK
@ INTERESTCATEGORY_INTERCEPT
int AB_GetAlienBaseNumber(void)
Check number of alien bases.
alienBase_t * AB_BuildBase(const vec2_t pos)
Build a new alien base.
void AB_BaseSearchedByNations(void)
Nations help in searching alien base.
void AM_Go(mission_t *mission, aircraft_t *aircraft, const campaign_t *campaign, const battleParam_t *battleParameters, missionResults_t *results)
Handles the auto mission.
Header file for single player automatic (quick, simulated) missions, without going to the battlescape...
bool B_BuildingDestroy(building_t *building)
Removes a building from the given base.
building_t * B_BuildBuilding(base_t *base, const building_t *buildingTemplate, int col, int row)
Build a new building to the base.
bool B_AssembleMap(char *maps, size_t mapsLength, char *coords, size_t coordsLength, const base_t *base)
Perform the base assembling in case of an alien attack.
int B_GetInstallationLimit(void)
Counts the actual installation count limit.
void B_SetName(base_t *base, const char *name)
Set the base name.
void B_Destroy(base_t *base)
Destroy a base.
void B_UpdateBuildingConstructions(void)
Updates base data.
bool B_GetBuildingStatus(const base_t *const base, const buildingType_t buildingType)
Get the status associated to a building.
base_t * B_Build(const campaign_t *campaign, const vec2_t pos, const char *name, bool fillBase)
Build new base, uses template for the first base.
void B_SetUpFirstBase(const campaign_t *campaign, base_t *base)
Setup aircraft and equipment for first base. Uses the campaign scriptable equipmentlist.
bool PR_ProductionAllowed(const base_t *base)
Returns true if the current base is able to produce items.
#define B_AtLeastOneExists()
building_t * B_GetBuildingTemplate(const char *buildingName)
Returns the building in the global building-types list that has the unique name buildingID.
@ B_STATUS_UNDER_CONSTRUCTION
memPool_t * cp_campaignPool
void CP_ResetCampaignData(void)
Will clear most of the parsed singleplayer data.
void CP_CampaignRun(campaign_t *campaign, float secondsSinceLastFrame)
Called every frame when we are in geoscape view.
campaign_t * CP_GetCampaign(const char *name)
Returns the campaign pointer from global campaign array.
void CP_UpdateCredits(int credits)
Sets credits and update mn_credits cvar.
Header file for single player campaign control.
void CP_ParseCampaignData(void)
Read the data for campaigns.
void CP_ReadCampaignData(const campaign_t *campaign)
int CAP_GetFreeCapacity(const base_t *base, baseCapacities_t capacityType)
Returns the free capacity of a type.
#define CAP_GetCurrent(base, capacity)
bool E_DeleteEmployee(Employee *employee)
Removes the employee completely from the game (buildings + global list).
void E_InitialEmployees(const campaign_t *campaign)
Create initial hireable employees.
Employee * E_CreateEmployee(employeeType_t type, const nation_t *nation, const ugv_t *ugvType)
Creates an entry of a new employee in the global list and assignes it to no building/base.
void E_DeleteAllEmployees(base_t *base)
Removes all employees completely from the game (buildings + global list) from a given base.
int E_CountHired(const base_t *const base, employeeType_t type)
Counts hired employees of a given type in a given base.
bool E_HireEmployee(base_t *base, Employee *employee)
Hires the employee in a base.
int E_CountUnhired(employeeType_t type)
Counts unhired employees of a given type in a given base.
employeeType_t
The types of employees.
#define E_Foreach(employeeType, var)
void CP_TriggerEvent(campaignTriggerEventType_t type, const void *userdata)
Triggers a campaign event with a special type.
void GEO_Init(const char *map)
bool CP_GetRandomPosOnGeoscapeWithParameters(vec2_t pos, const linkedList_t *terrainTypes, const linkedList_t *cultureTypes, const linkedList_t *populationTypes, const linkedList_t *nations)
Determines a random position on geoscape that fulfills certain criteria given via parameters.
const byte * GEO_GetColor(const vec2_t pos, mapType_t type, bool *coast)
Returns the color value from geoscape of a certain mask (terrain, culture or population) at a given p...
Header for Geoscape management.
#define MapIsWater(color)
void HOS_HospitalRun(void)
Checks health status of all employees in all bases.
Header file for hospital related stuff.
installation_t * INS_Build(const installationTemplate_t *installationTemplate, const vec2_t pos, const char *name)
Build a new installation.
const installationTemplate_t * INS_GetInstallationTemplateByType(installationType_t type)
Returns the installation Template for a given installation type.
void INS_UpdateInstallationData(void)
Check if some installation are build.
#define MAX_INSTALLATIONS_PER_BASE
void BS_InitMarket(const campaign_t *campaign)
sets market prices at start of the game
void CP_CampaignRunMarket(campaign_t *campaign)
make number of items change every day.
void CP_InterceptNextStage(mission_t *mission)
Determine what action should be performed when a Intercept mission stage ends.
Campaign mission headers.
void CP_CreateBattleParameters(mission_t *mission, battleParam_t *param, const aircraft_t *aircraft)
Create parameters needed for battle. This is the data that is used for starting the tactical part of ...
mission_t * CP_CreateNewMission(interestCategory_t category, bool beginNow)
Create a new mission of given category.
bool CP_ChooseMap(mission_t *mission, const vec2_t pos)
Choose a map for given mission.
mission_t * MIS_GetByIdx(int id)
Find mission corresponding to idx.
Campaign missions headers.
void NAT_HandleBudget(const campaign_t *campaign)
Update the nation data from all parsed nation each month.
nation_t * NAT_GetNationByID(const char *nationID)
Return a nation-pointer by the nations id.
Functions to generate and render overlay for geoscape.
void PR_ProductionRun(void)
Checks whether an item is finished.
int PR_WorkersAvailable(const base_t *base)
Returns the numer of workers available to produce an item.
production_t * PR_QueueNew(base_t *base, const productionData_t *data, signed int amount)
Add a new item to the bottom of the production queue.
int PR_GetRemainingMinutes(const production_t *prod)
Calculates the remaining time for a technology in minutes.
int PR_GetRemainingHours(const production_t *prod)
Calculates the remaining hours for a technology.
@ PRODUCTION_TYPE_DISASSEMBLY
@ PRODUCTION_TYPE_AIRCRAFT
#define PR_SetData(dataPtr, typeVal, ptr)
bool RADAR_CheckUFOSensored(radar_t *radar, const vec2_t posRadar, const aircraft_t *ufo, bool detected)
Check if the specified UFO is inside the sensor range of the given radar.
void RS_MarkOneResearchable(technology_t *tech)
Marks one tech as researchable.
technology_t * RS_GetTechForItem(const objDef_t *item)
Returns technology entry for an item.
technology_t * RS_GetTechByID(const char *id)
return a pointer to the technology identified by given id string
void RS_AssignScientist(technology_t *tech, base_t *base, Employee *employee)
Assigns scientist to the selected research-project.
int RS_ResearchRun(void)
Checks the research status.
void RS_MarkResearchable(const base_t *base, bool init)
Marks all the techs that can be researched. Automatically researches 'free' techs such as ammo for a ...
void RS_InitTree(const campaign_t *campaign, bool load)
Gets all needed names/file-paths/etc... for each technology entry. Should be executed after the parsi...
bool SAV_GameLoad(const char *file, const char **error)
Loads the given savegame from an xml File.
void SAV_Init(void)
Register all save-subsystems and init some cvars and commands.
void CP_UpdateTime(void)
Updates date/time and timescale (=timelapse) on the geoscape menu.
bool CP_IsTimeStopped(void)
Check if time is stopped.
Campaign geoscape time header.
transfer_t * TR_TransferStart(base_t *srcBase, transfer_t &transData)
Starts a transfer.
void TR_TransferRun(void)
Checks whether given transfer should be processed.
void UFO_CampaignRunUFOs(const campaign_t *campaign, int deltaTime)
Make the UFOs run.
void UFO_SendToDestination(aircraft_t *ufo, const vec2_t dest)
Make the specified UFO go to destination.
void UFO_CheckShootBack(const campaign_t *campaign, aircraft_t *ufo, aircraft_t *phalanxAircraft)
Check if the ufo can shoot back at phalanx aircraft.
const aircraft_t * UFO_GetByType(const ufoType_t type)
Get the aircraft template for a given UFO type.
aircraft_t * UFO_AddToGeoscape(ufoType_t ufoType, const vec2_t destination, mission_t *mission)
Add a UFO to geoscape.
aircraft_t * UFO_GetNextOnGeoscape(aircraft_t *lastUFO)
int UFO_GetAvailableUFOsForMission(const interestCategory_t missionType, ufoType_t *ufoTypes, bool checkInterest)
Fill an array with available UFOs for the mission type.
void UFO_RemoveFromGeoscape(aircraft_t *ufo)
Remove the specified ufo from geoscape.
storedUFO_t * US_StoreUFO(const aircraft_t *ufoTemplate, installation_t *installation, DateTime &date, float condition)
Adds an UFO to the storage.
void UR_ProcessActive(void)
Function to process active recoveries.
cvar_t * Cvar_Set(const char *varName, const char *value,...)
Sets a cvar value.
cvar_t * Cvar_Get(const char *var_name, const char *var_value, int flags, const char *desc)
Init or return a cvar.
SDL_Surface * Img_LoadImage(char const *name)
Loads the specified image from the game filesystem into an SDL_Surface.
Image loading and saving functions.
const objDef_t * INVSH_GetItemByID(const char *id)
Returns the item that belongs to the given id or nullptr if it wasn't found.
int LIST_Count(const linkedList_t *list)
bool LIST_IsEmpty(const linkedList_t *list)
Checks whether the given list is empty.
const linkedList_t * LIST_ContainsString(const linkedList_t *list, const char *string)
Searches for the first occurrence of a given string.
#define LIST_Foreach(list, type, var)
Iterates over a linked list, it's safe to delete the returned entry from the list while looping over ...
#define Mem_CreatePool(name)
#define Mem_FreeTag(pool, tagNum)
#define Mem_PoolAlloc(size, pool, tagNum)
const char * Com_Parse(const char *data_p[], char *target, size_t size, bool replaceWhitespaces)
Parse a token out of a string.
Shared parsing functions.
QGL_EXTERN void(APIENTRY *qglActiveTexture)(GLenum texture)
QGL_EXTERN GLsizei const GLvoid * data
QGL_EXTERN GLint GLenum type
QGL_EXTERN GLuint GLsizei GLsizei GLint GLenum GLchar * name
void Com_ParseScripts(bool onlyServer)
const ugv_t * Com_GetUGVByID(const char *ugvID)
Searches an UGV definition by a given script id and returns the pointer to the global data.
short Com_GetUfoIdsNum(void)
const char * va(const char *format,...)
does a varargs printf into a temp buffer, so I don't need to have varargs versions of all text functi...
An aircraft with all it's data.
aircraftSlot_t weapons[MAX_AIRCRAFTSLOT]
struct aircraft_s * aircraftTarget
int ufoInterestOnGeoscape
struct mission_s * mission
struct technology_s * tech
A base with all it's data.
baseBuildingTile_t map[BASE_SIZE][BASE_SIZE]
A building with all it's data.
buildingStatus_t buildingStatus
int numItems[MAX_OBJDEFS]
A installation with all it's data.
const installationTemplate_t * installationTemplate
linkedList_t * populations
union mission_t::missionData_t data
Structure with mission info needed to create results summary at menu won.
Defines all attributes of objects used in the inventory.
Holds all information for the production of one item-type.
Structure for stored UFOs.
struct components_s * comp
This is the technology parsed from research.ufo.
researchStatus_t statusResearch
Transfer information (they are being stored in ccs.transfers).
Defines a type of UGV/Robot.
int Sys_Milliseconds(void)
static void ResetInventoryList(void)
static bool testEventTriggerCalled
static void * AllocInventoryMemory(size_t size)
static base_t * CreateBase(const char *name, const vec2_t pos, bool fillBase=false)
static void testEventTrigger_f(void)
static void FreeAllInventory(void)
TEST_F(CampaignTest, testAircraftHandling)
static installation_t * CreateInstallation(const char *name, const vec2_t pos)
static bool skipTest(const mapDef_t *md)
static campaign_t * GetCampaign(void)
static void FreeInventory(void *data)
#define VectorEqual(a, b)
#define Vector2Set(v, x, y)
#define Vector2Copy(src, dest)