UFO: Alien Invasion
Loading...
Searching...
No Matches
cp_auto_mission.cpp File Reference

single player automatic (quick, simulated) missions, without going to the battlescape. More...

#include "../../cl_shared.h"
#include "../../cl_inventory.h"
#include "cp_auto_mission.h"
#include "cp_campaign.h"
#include "cp_character.h"
#include "cp_geoscape.h"
#include "cp_missions.h"
#include "cp_mission_triggers.h"
#include "../../../shared/mathlib_extra.h"
#include "math.h"
#include "cp_mission_callbacks.h"
Include dependency graph for cp_auto_mission.cpp:

Go to the source code of this file.

Data Structures

struct  autoUnit_t
 One unit (soldier/alien/civilian) of the autobattle. More...
struct  autoMissionBattle_t
 Data structure for a simulated or auto mission. More...

Macros

#define MAX_SOLDIERS_AUTOMISSION   MAX_TEAMS * AUTOMISSION_TEAM_TYPE_MAX
#define SKILL_AWARD_SCALE   0.3f
 Constants for automission experience gain factors.
#define ABILITY_AWARD_SCALE   0.06f
#define AM_IsPlayer(type)
#define AM_IsAlien(type)
#define AM_IsCivilian(type)
#define AM_SetHostile(battle, team, otherTeam, value)
#define AM_IsHostile(battle, team, otherTeam)
#define AM_GetUnit(battle, teamIdx, unitIdx)
#define AM_IsUnitActive(unit)

Enumerations

enum  autoMissionTeamType_t { AUTOMISSION_TEAM_TYPE_PLAYER , AUTOMISSION_TEAM_TYPE_ALIEN , AUTOMISSION_TEAM_TYPE_CIVILIAN , AUTOMISSION_TEAM_TYPE_MAX }
 Possible types of teams that can fight in an auto mission battle. More...

Functions

static void AM_ClearBattle (autoMissionBattle_t *battle)
 Clears, initializes, or resets a single auto mission, sets default values.
static void AM_FillTeamFromAircraft (autoMissionBattle_t *battle, const autoMissionTeamType_t teamNum, const aircraft_t *aircraft, const campaign_t *campaign)
 Adds team data for a specified team in an auto-mission object, from a (player) aircraft.
static void AM_CreateUnitChr (autoUnit_t *unit, const teamDef_t *teamDef, const equipDef_t *ed)
 Create character for a Unit.
static void AM_DestroyUnitChr (autoUnit_t *unit)
 Destroys character of a Unit.
static void AM_FillTeamFromBattleParams (autoMissionBattle_t *battle, const battleParam_t *missionParams)
 Creates team data for alien and civilian teams based on the mission parameters data.
static void AM_SetDefaultHostilities (autoMissionBattle_t *battle, const bool civsInfected)
 Run this on an auto mission battle before the battle is actually simulated, to set default values for who will attack which team. If you forget to do this before battle simulation, all teams will default to "free for all" (Everyone will try to kill everyone else).
static void AM_CalculateTeamScores (autoMissionBattle_t *battle)
 Calcuates Team strength scores for autobattle.
static int AM_GetRandomTeam (autoMissionBattle_t *battle, int currTeam, bool enemy)
 returns a randomly selected active team
static autoUnit_tAM_GetRandomActiveUnitOfTeam (autoMissionBattle_t *battle, int team)
 returns a randomly selected alive unit from a team
static autoUnit_tAM_GetRandomActiveUnit (autoMissionBattle_t *battle, int currTeam, bool enemy)
 returns a randomly selected active unit
static bool AM_CheckFire (autoMissionBattle_t *battle, autoUnit_t *currUnit, autoUnit_t *eUnit, const double effective)
 Check and do attack on a team.
static bool AM_UnitAttackEnemy (autoMissionBattle_t *battle, autoUnit_t *currUnit, const double effective)
 Make Unit attack his enemies (or friends).
static void AM_DoFight (autoMissionBattle_t *battle)
 Main Battle loop function.
static void AM_DisplayResults (const autoMissionBattle_t *battle)
 This will display on-screen, for the player, results of the auto mission.
static void AM_MoveCharacterInventoryIntoItemCargo (aircraft_t *aircraft, character_t *chr)
 Move equipment carried by the soldier/alien to the aircraft's itemcargo bay.
static void AM_AlienCollect (aircraft_t *aircraft, const autoMissionBattle_t *battle)
 Collect alien bodies and items after battle.
static void AM_UpdateSurivorsAfterBattle (const autoMissionBattle_t *battle, struct aircraft_s *aircraft)
 This looks at a finished auto battle, and uses values from it to kill or lower health of surviving soldiers on a mission drop ship as appropriate. It also hands out some experience to soldiers that survive.
static void AM_CleanBattleParameters (autoMissionBattle_t *battle)
 Clean up alien and civilian teams.
void AM_Go (mission_t *mission, aircraft_t *aircraft, const campaign_t *campaign, const battleParam_t *battleParameters, missionResults_t *results)
 Handles the auto mission.
void AM_InitStartup (void)
 Init actions for automission-subsystem.
void AM_Shutdown (void)
 Closing actions for automission-subsystem.

Detailed Description

single player automatic (quick, simulated) missions, without going to the battlescape.

Definition in file cp_auto_mission.cpp.

Macro Definition Documentation

◆ ABILITY_AWARD_SCALE

#define ABILITY_AWARD_SCALE   0.06f

Definition at line 87 of file cp_auto_mission.cpp.

Referenced by AM_UpdateSurivorsAfterBattle().

◆ AM_GetUnit

#define AM_GetUnit ( battle,
teamIdx,
unitIdx )

◆ AM_IsAlien

#define AM_IsAlien ( type)
Value:
@ AUTOMISSION_TEAM_TYPE_ALIEN
QGL_EXTERN GLint GLenum type
Definition r_gl.h:94

Definition at line 90 of file cp_auto_mission.cpp.

Referenced by AM_SetDefaultHostilities().

◆ AM_IsCivilian

#define AM_IsCivilian ( type)
Value:

Definition at line 91 of file cp_auto_mission.cpp.

Referenced by AM_SetDefaultHostilities().

◆ AM_IsHostile

#define AM_IsHostile ( battle,
team,
otherTeam )
Value:
((battle)->isHostile[(team)][(otherTeam)])

Definition at line 93 of file cp_auto_mission.cpp.

Referenced by AM_CheckFire(), AM_GetRandomActiveUnit(), and AM_GetRandomTeam().

◆ AM_IsPlayer

#define AM_IsPlayer ( type)
Value:

Definition at line 89 of file cp_auto_mission.cpp.

Referenced by AM_SetDefaultHostilities().

◆ AM_IsUnitActive

#define AM_IsUnitActive ( unit)
Value:
(((unit)->chr->HP > 0) && ((unit)->chr->HP > (unit)->chr->STUN))

Definition at line 96 of file cp_auto_mission.cpp.

Referenced by AM_AlienCollect(), AM_CheckFire(), AM_DoFight(), and AM_GetRandomActiveUnitOfTeam().

◆ AM_SetHostile

#define AM_SetHostile ( battle,
team,
otherTeam,
value )
Value:
(battle)->isHostile[(team)][(otherTeam)] = (value)

Definition at line 92 of file cp_auto_mission.cpp.

Referenced by AM_SetDefaultHostilities().

◆ MAX_SOLDIERS_AUTOMISSION

#define MAX_SOLDIERS_AUTOMISSION   MAX_TEAMS * AUTOMISSION_TEAM_TYPE_MAX

Definition at line 48 of file cp_auto_mission.cpp.

Referenced by AM_FillTeamFromAircraft(), and AM_UpdateSurivorsAfterBattle().

◆ SKILL_AWARD_SCALE

#define SKILL_AWARD_SCALE   0.3f

Constants for automission experience gain factors.

Todo
make these scripted in campaign definitions maybe

Definition at line 86 of file cp_auto_mission.cpp.

Referenced by AM_UpdateSurivorsAfterBattle().

Enumeration Type Documentation

◆ autoMissionTeamType_t

Possible types of teams that can fight in an auto mission battle.

Enumerator
AUTOMISSION_TEAM_TYPE_PLAYER 

Human player-controlled team. Includes soldiers as well as downed pilots.

AUTOMISSION_TEAM_TYPE_ALIEN 

AI-controlled alien team.

AUTOMISSION_TEAM_TYPE_CIVILIAN 

AI-controlled civilians that can be healthy or infected.

AUTOMISSION_TEAM_TYPE_MAX 

Definition at line 40 of file cp_auto_mission.cpp.

Function Documentation

◆ AM_AlienCollect()

void AM_AlienCollect ( aircraft_t * aircraft,
const autoMissionBattle_t * battle )
static

Collect alien bodies and items after battle.

Parameters
[out]aircraftMission aircraft that will bring stuff home
[in]battleThe battle we fought

Definition at line 781 of file cp_auto_mission.cpp.

References _, AL_AddAlienTypeToAircraftCargo(), AM_GetUnit, AM_IsUnitActive, AM_MoveCharacterInventoryIntoItemCargo(), AUTOMISSION_TEAM_TYPE_ALIEN, autoUnit_t::chr, character_t::HP, MS_AddNewMessage(), autoMissionBattle_t::nUnits, and character_t::teamDef.

Referenced by AM_Go().

◆ AM_CalculateTeamScores()

void AM_CalculateTeamScores ( autoMissionBattle_t * battle)
static

◆ AM_CheckFire()

◆ AM_CleanBattleParameters()

void AM_CleanBattleParameters ( autoMissionBattle_t * battle)
static

Clean up alien and civilian teams.

Parameters
[in,out]battleThe common autobattle descriptor structure

Definition at line 863 of file cp_auto_mission.cpp.

References AM_DestroyUnitChr(), AM_GetUnit, AUTOMISSION_TEAM_TYPE_ALIEN, AUTOMISSION_TEAM_TYPE_CIVILIAN, and autoMissionBattle_t::nUnits.

Referenced by AM_Go().

◆ AM_ClearBattle()

void AM_ClearBattle ( autoMissionBattle_t * battle)
static

Clears, initializes, or resets a single auto mission, sets default values.

Parameters
[in,out]battleThe battle that should be initialized to defaults

Definition at line 102 of file cp_auto_mission.cpp.

References AUTOMISSION_TEAM_TYPE_MAX, autoMissionBattle_t::isHostile, OBJZERO, autoMissionBattle_t::results, autoMissionBattle_t::scoreTeamDifficulty, autoMissionBattle_t::scoreTeamEquipment, autoMissionBattle_t::scoreTeamSkill, and autoMissionBattle_t::winningTeam.

Referenced by AM_Go().

◆ AM_CreateUnitChr()

void AM_CreateUnitChr ( autoUnit_t * unit,
const teamDef_t * teamDef,
const equipDef_t * ed )
static

Create character for a Unit.

Parameters
[out]unitThe unit to create character for
[in]teamDefThe team definition of the unit
[in]edThe equipment to use
See also
AM_DestroyUnitChr

Definition at line 213 of file cp_auto_mission.cpp.

References cgi, autoUnit_t::chr, cp_campaignPool, teamDef_t::id, Mem_PoolAllocType, teamDef_t::onlyWeapon, and character_t::teamDef.

Referenced by AM_FillTeamFromBattleParams().

◆ AM_DestroyUnitChr()

void AM_DestroyUnitChr ( autoUnit_t * unit)
static

Destroys character of a Unit.

Parameters
[out]unitThe unit to create character for
See also
AM_CreateUnitChr

Definition at line 226 of file cp_auto_mission.cpp.

References cgi, autoUnit_t::chr, and character_t::inv.

Referenced by AM_CleanBattleParameters().

◆ AM_DisplayResults()

void AM_DisplayResults ( const autoMissionBattle_t * battle)
static

This will display on-screen, for the player, results of the auto mission.

Parameters
[in]battleAutobattle structure with the results
Todo
results should be set in missionResult and this code should be merged with manual mission result screen code, possibly in a new file: cp_mission_callbacks.c/h

Definition at line 734 of file cp_auto_mission.cpp.

References _, AUTOMISSION_TEAM_TYPE_ALIEN, AUTOMISSION_TEAM_TYPE_PLAYER, cgi, MS_AddNewMessage(), autoMissionBattle_t::results, missionResults_t::state, autoMissionBattle_t::teamAccomplishment, and WON.

Referenced by AM_Go().

◆ AM_DoFight()

◆ AM_FillTeamFromAircraft()

void AM_FillTeamFromAircraft ( autoMissionBattle_t * battle,
const autoMissionTeamType_t teamNum,
const aircraft_t * aircraft,
const campaign_t * campaign )
static

Adds team data for a specified team in an auto-mission object, from a (player) aircraft.

Parameters
[in,out]battleThe auto mission battle to add team data to
[in]teamNumThe team number in the auto mission instance to update
[in]aircraftThe aircraft to get data from
[in]campaignThe current campaign (for retrieving difficulty level)
Note
This function actually gets the data from the campaign object, using the aircraft data to find out which of all the employees are on the aircraft (in the mission)

Definition at line 132 of file cp_auto_mission.cpp.

References aircraft_t::acTeam, autoMissionBattle_t::actUnits, AM_GetUnit, AUTOMISSION_TEAM_TYPE_MAX, cgi, autoUnit_t::chr, DEBUG_CLIENT, campaign_t::difficulty, autoUnit_t::idx, LIST_Foreach, MAX_SOLDIERS_AUTOMISSION, autoMissionBattle_t::nUnits, autoMissionBattle_t::scoreTeamDifficulty, and autoUnit_t::team.

Referenced by AM_Go().

◆ AM_FillTeamFromBattleParams()

void AM_FillTeamFromBattleParams ( autoMissionBattle_t * battle,
const battleParam_t * missionParams )
static

Creates team data for alien and civilian teams based on the mission parameters data.

Parameters
[in,out]battleThe auto mission battle to add team data to
[in]missionParamsMission parameters data to use

Definition at line 237 of file cp_auto_mission.cpp.

References autoMissionBattle_t::actUnits, battleParam_t::alienEquipment, battleParam_t::aliens, battleParam_t::alienTeamGroup, alienTeamGroup_t::alienTeams, AM_CreateUnitChr(), AM_GetUnit, AUTOMISSION_TEAM_TYPE_ALIEN, AUTOMISSION_TEAM_TYPE_CIVILIAN, cgi, battleParam_t::civilians, battleParam_t::civTeam, frand(), autoUnit_t::idx, alienTeamGroup_t::numAlienTeams, autoMissionBattle_t::nUnits, autoMissionBattle_t::scoreTeamSkill, and autoUnit_t::team.

Referenced by AM_Go().

◆ AM_GetRandomActiveUnit()

autoUnit_t * AM_GetRandomActiveUnit ( autoMissionBattle_t * battle,
int currTeam,
bool enemy )
static

returns a randomly selected active unit

Parameters
[in]battleThe battle we fight
[in]currTeamCurrent team we search for
[in]enemyIf the team should be enemy or friendly

Definition at line 511 of file cp_auto_mission.cpp.

References autoMissionBattle_t::actUnits, AM_GetRandomActiveUnitOfTeam(), AM_GetRandomTeam(), AM_IsHostile, and AUTOMISSION_TEAM_TYPE_MAX.

Referenced by AM_UnitAttackEnemy().

◆ AM_GetRandomActiveUnitOfTeam()

autoUnit_t * AM_GetRandomActiveUnitOfTeam ( autoMissionBattle_t * battle,
int team )
static

returns a randomly selected alive unit from a team

Parameters
[in]battleThe battle we fight
[in]teamTeam to get unit from

Definition at line 471 of file cp_auto_mission.cpp.

References autoMissionBattle_t::actUnits, AM_GetUnit, AM_IsUnitActive, AUTOMISSION_TEAM_TYPE_MAX, and autoMissionBattle_t::nUnits.

Referenced by AM_GetRandomActiveUnit().

◆ AM_GetRandomTeam()

int AM_GetRandomTeam ( autoMissionBattle_t * battle,
int currTeam,
bool enemy )
static

returns a randomly selected active team

Parameters
[in]battleThe battle we fight
[in]currTeamCurrent team we search for
[in]enemyIf the team should be enemy or friendly

Definition at line 441 of file cp_auto_mission.cpp.

References autoMissionBattle_t::actUnits, AM_IsHostile, and AUTOMISSION_TEAM_TYPE_MAX.

Referenced by AM_GetRandomActiveUnit().

◆ AM_Go()

void AM_Go ( mission_t * mission,
aircraft_t * aircraft,
const campaign_t * campaign,
const battleParam_t * battleParameters,
missionResults_t * results )

◆ AM_InitStartup()

void AM_InitStartup ( void )

Init actions for automission-subsystem.

Definition at line 938 of file cp_auto_mission.cpp.

Referenced by CP_InitStartup().

◆ AM_MoveCharacterInventoryIntoItemCargo()

void AM_MoveCharacterInventoryIntoItemCargo ( aircraft_t * aircraft,
character_t * chr )
static

Move equipment carried by the soldier/alien to the aircraft's itemcargo bay.

Parameters
[in,out]aircraftThe craft with the team (and thus equipment) onboard.
[in,out]chrThe character whose inventory should be moved

Definition at line 756 of file cp_auto_mission.cpp.

References AII_CollectItem(), Item::ammoDef(), Item::def(), Item::getAmmoLeft(), Inventory::getNextCont(), Container::getNextItem(), and character_t::inv.

Referenced by AM_AlienCollect(), and AM_UpdateSurivorsAfterBattle().

◆ AM_SetDefaultHostilities()

void AM_SetDefaultHostilities ( autoMissionBattle_t * battle,
const bool civsInfected )
static

Run this on an auto mission battle before the battle is actually simulated, to set default values for who will attack which team. If you forget to do this before battle simulation, all teams will default to "free for all" (Everyone will try to kill everyone else).

Parameters
[in,out]battleThe battle to set up team hostility values for.
[in]civsInfectedSet to true if civs have XVI influence, otherwise false for a normal mission.

Definition at line 282 of file cp_auto_mission.cpp.

References autoMissionBattle_t::actUnits, AM_IsAlien, AM_IsCivilian, AM_IsPlayer, AM_SetHostile, AUTOMISSION_TEAM_TYPE_MAX, AUTOMISSION_TEAM_TYPE_PLAYER, and i.

Referenced by AM_Go().

◆ AM_Shutdown()

void AM_Shutdown ( void )

Closing actions for automission-subsystem.

Definition at line 945 of file cp_auto_mission.cpp.

Referenced by CP_Shutdown().

◆ AM_UnitAttackEnemy()

bool AM_UnitAttackEnemy ( autoMissionBattle_t * battle,
autoUnit_t * currUnit,
const double effective )
static

Make Unit attack his enemies (or friends).

Parameters
[in,out]battleThe battle we fight
[in]currUnitUnit that attacks
[in]effectiveEffectiveness of the attack

Definition at line 651 of file cp_auto_mission.cpp.

References AM_CheckFire(), AM_GetRandomActiveUnit(), and autoUnit_t::team.

Referenced by AM_DoFight().

◆ AM_UpdateSurivorsAfterBattle()

void AM_UpdateSurivorsAfterBattle ( const autoMissionBattle_t * battle,
struct aircraft_s * aircraft )
static

This looks at a finished auto battle, and uses values from it to kill or lower health of surviving soldiers on a mission drop ship as appropriate. It also hands out some experience to soldiers that survive.

Parameters
[in]battleThe battle we fought
[in,out]aircraftDropship soldiers are on

Definition at line 809 of file cp_auto_mission.cpp.

References ABILITY_AWARD_SCALE, ABILITY_NUM_TYPES, AM_MoveCharacterInventoryIntoItemCargo(), AUTOMISSION_TEAM_TYPE_PLAYER, cgi, CHAR_GetMaxExperiencePerMission(), CHAR_UpdateSkills(), DEBUG_CLIENT, E_RemoveInventoryFromStorage(), chrScoreGlobal_t::experience, frand(), character_t::HP, LIST_Foreach, MAX_SOLDIERS_AUTOMISSION, character_t::name, autoMissionBattle_t::results, character_t::score, SKILL_AWARD_SCALE, SKILL_NUM_TYPES, missionResults_t::state, autoMissionBattle_t::teamAccomplishment, and WON.

Referenced by AM_Go().