UFO: Alien Invasion
|
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"
Go to the source code of this file.
Data Structures | |
struct | autoUnit_s |
One unit (soldier/alien/civilian) of the autobattle. More... | |
struct | autoMissionBattle_s |
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. More... | |
#define | ABILITY_AWARD_SCALE 0.06f |
#define | AM_IsPlayer(type) ((type) == AUTOMISSION_TEAM_TYPE_PLAYER) |
#define | AM_IsAlien(type) ((type) == AUTOMISSION_TEAM_TYPE_ALIEN) |
#define | AM_IsCivilian(type) ((type) == AUTOMISSION_TEAM_TYPE_CIVILIAN) |
#define | AM_SetHostile(battle, team, otherTeam, value) (battle)->isHostile[(team)][(otherTeam)] = (value) |
#define | AM_IsHostile(battle, team, otherTeam) ((battle)->isHostile[(team)][(otherTeam)]) |
#define | AM_GetUnit(battle, teamIdx, unitIdx) (&battle->units[teamIdx][unitIdx]) |
#define | AM_IsUnitActive(unit) (((unit)->chr->HP > 0) && ((unit)->chr->HP > (unit)->chr->STUN)) |
Typedefs | |
typedef enum autoMission_teamType_s | autoMissionTeamType_t |
Possible types of teams that can fight in an auto mission battle. More... | |
typedef struct autoUnit_s | autoUnit_t |
One unit (soldier/alien/civilian) of the autobattle. More... | |
typedef struct autoMissionBattle_s | autoMissionBattle_t |
Data structure for a simulated or auto mission. More... | |
Enumerations | |
enum | autoMission_teamType_s { 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. More... | |
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. More... | |
static void | AM_CreateUnitChr (autoUnit_t *unit, const teamDef_t *teamDef, const equipDef_t *ed) |
Create character for a Unit. More... | |
static void | AM_DestroyUnitChr (autoUnit_t *unit) |
Destroys character of a Unit. More... | |
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. More... | |
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). More... | |
static void | AM_CalculateTeamScores (autoMissionBattle_t *battle) |
Calcuates Team strength scores for autobattle. More... | |
static int | AM_GetRandomTeam (autoMissionBattle_t *battle, int currTeam, bool enemy) |
returns a randomly selected active team More... | |
static autoUnit_t * | AM_GetRandomActiveUnitOfTeam (autoMissionBattle_t *battle, int team) |
returns a randomly selected alive unit from a team More... | |
static autoUnit_t * | AM_GetRandomActiveUnit (autoMissionBattle_t *battle, int currTeam, bool enemy) |
returns a randomly selected active unit More... | |
static bool | AM_CheckFire (autoMissionBattle_t *battle, autoUnit_t *currUnit, autoUnit_t *eUnit, const double effective) |
Check and do attack on a team. More... | |
static bool | AM_UnitAttackEnemy (autoMissionBattle_t *battle, autoUnit_t *currUnit, const double effective) |
Make Unit attack his enemies (or friends) More... | |
static void | AM_DoFight (autoMissionBattle_t *battle) |
Main Battle loop function. More... | |
static void | AM_DisplayResults (const autoMissionBattle_t *battle) |
This will display on-screen, for the player, results of the auto mission. More... | |
static void | AM_MoveCharacterInventoryIntoItemCargo (aircraft_t *aircraft, character_t *chr) |
Move equipment carried by the soldier/alien to the aircraft's itemcargo bay. More... | |
static void | AM_AlienCollect (aircraft_t *aircraft, const autoMissionBattle_t *battle) |
Collect alien bodies and items after battle. More... | |
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. More... | |
static void | AM_CleanBattleParameters (autoMissionBattle_t *battle) |
Clean up alien and civilian teams. More... | |
void | AM_Go (mission_t *mission, aircraft_t *aircraft, const campaign_t *campaign, const battleParam_t *battleParameters, missionResults_t *results) |
Handles the auto mission. More... | |
void | AM_InitStartup (void) |
Init actions for automission-subsystem. More... | |
void | AM_Shutdown (void) |
Closing actions for automission-subsystem. More... | |
single player automatic (quick, simulated) missions, without going to the battlescape.
Definition in file cp_auto_mission.cpp.
#define ABILITY_AWARD_SCALE 0.06f |
Definition at line 87 of file cp_auto_mission.cpp.
Referenced by AM_UpdateSurivorsAfterBattle().
#define AM_GetUnit | ( | battle, | |
teamIdx, | |||
unitIdx | |||
) | (&battle->units[teamIdx][unitIdx]) |
Definition at line 95 of file cp_auto_mission.cpp.
Referenced by AM_AlienCollect(), AM_CalculateTeamScores(), AM_CleanBattleParameters(), AM_DoFight(), AM_FillTeamFromAircraft(), AM_FillTeamFromBattleParams(), and AM_GetRandomActiveUnitOfTeam().
#define AM_IsAlien | ( | type | ) | ((type) == AUTOMISSION_TEAM_TYPE_ALIEN) |
Definition at line 90 of file cp_auto_mission.cpp.
Referenced by AM_SetDefaultHostilities().
#define AM_IsCivilian | ( | type | ) | ((type) == AUTOMISSION_TEAM_TYPE_CIVILIAN) |
Definition at line 91 of file cp_auto_mission.cpp.
Referenced by AM_SetDefaultHostilities().
#define AM_IsHostile | ( | battle, | |
team, | |||
otherTeam | |||
) | ((battle)->isHostile[(team)][(otherTeam)]) |
Definition at line 93 of file cp_auto_mission.cpp.
Referenced by AM_CheckFire(), AM_GetRandomActiveUnit(), and AM_GetRandomTeam().
#define AM_IsPlayer | ( | type | ) | ((type) == AUTOMISSION_TEAM_TYPE_PLAYER) |
Definition at line 89 of file cp_auto_mission.cpp.
Referenced by AM_SetDefaultHostilities().
#define AM_IsUnitActive | ( | unit | ) | (((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().
#define AM_SetHostile | ( | battle, | |
team, | |||
otherTeam, | |||
value | |||
) | (battle)->isHostile[(team)][(otherTeam)] = (value) |
Definition at line 92 of file cp_auto_mission.cpp.
Referenced by AM_SetDefaultHostilities().
#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().
#define SKILL_AWARD_SCALE 0.3f |
Constants for automission experience gain factors.
Definition at line 86 of file cp_auto_mission.cpp.
Referenced by AM_UpdateSurivorsAfterBattle().
typedef struct autoMissionBattle_s autoMissionBattle_t |
Data structure for a simulated or auto mission.
typedef enum autoMission_teamType_s autoMissionTeamType_t |
Possible types of teams that can fight in an auto mission battle.
typedef struct autoUnit_s autoUnit_t |
One unit (soldier/alien/civilian) of the autobattle.
Possible types of teams that can fight in an auto mission battle.
Definition at line 40 of file cp_auto_mission.cpp.
|
static |
Collect alien bodies and items after battle.
[out] | aircraft | Mission aircraft that will bring stuff home |
[in] | battle | The 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_s::chr, character_s::HP, MS_AddNewMessage(), autoMissionBattle_s::nUnits, and character_s::teamDef.
Referenced by AM_Go().
|
static |
Calcuates Team strength scores for autobattle.
[in,out] | battle | The battle to set up teamscores for |
Definition at line 327 of file cp_auto_mission.cpp.
References autoMissionBattle_s::actUnits, AM_GetUnit, AUTOMISSION_TEAM_TYPE_MAX, cgi, ChkDNorm, ChkDNorm_Inv, autoUnit_s::chr, DEBUG_CLIENT, ERR_DROP, FpCurve1D_u_in(), FpCurveDn(), FpCurveUp(), character_s::HP, autoMissionBattle_s::isHostile, character_s::maxHP, autoMissionBattle_s::nUnits, autoMissionBattle_s::scoreTeamSkill, and autoMissionBattle_s::winningTeam.
Referenced by AM_Go().
|
static |
Check and do attack on a team.
[in,out] | battle | The battle we fight |
[in] | currUnit | Soldier idx who attacks |
[in] | eUnit | The enemy |
[in] | effective | Effectiveness of the attack |
Definition at line 547 of file cp_auto_mission.cpp.
References autoMissionBattle_s::actUnits, missionResults_s::aliensKilled, missionResults_s::aliensSurvived, AM_IsHostile, AM_IsUnitActive, AUTOMISSION_TEAM_TYPE_ALIEN, AUTOMISSION_TEAM_TYPE_CIVILIAN, AUTOMISSION_TEAM_TYPE_PLAYER, teamDef_s::bodyTemplate, cgi, autoUnit_s::chr, missionResults_s::civiliansKilled, missionResults_s::civiliansKilledFriendlyFire, missionResults_s::civiliansSurvived, frand(), BodyData::getRandomBodyPart(), character_s::HP, autoUnit_s::idx, int(), KILLED_CIVILIANS, KILLED_ENEMIES, KILLED_TEAM, chrScoreGlobal_s::kills, missionResults_s::ownKilled, missionResults_s::ownKilledFriendlyFire, missionResults_s::ownSurvived, autoMissionBattle_s::results, character_s::score, autoMissionBattle_s::scoreTeamDifficulty, autoUnit_s::team, autoMissionBattle_s::teamAccomplishment, character_s::teamDef, woundInfo_s::treatmentLevel, and character_s::wounds.
Referenced by AM_UnitAttackEnemy().
|
static |
Clean up alien and civilian teams.
[in,out] | battle | The 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_s::nUnits.
Referenced by AM_Go().
|
static |
Clears, initializes, or resets a single auto mission, sets default values.
[in,out] | battle | The battle that should be initialized to defaults |
Definition at line 102 of file cp_auto_mission.cpp.
References AUTOMISSION_TEAM_TYPE_MAX, autoMissionBattle_s::isHostile, OBJZERO, autoMissionBattle_s::results, autoMissionBattle_s::scoreTeamDifficulty, autoMissionBattle_s::scoreTeamEquipment, autoMissionBattle_s::scoreTeamSkill, and autoMissionBattle_s::winningTeam.
Referenced by AM_Go().
|
static |
Create character for a Unit.
[out] | unit | The unit to create character for |
[in] | teamDef | The team definition of the unit |
[in] | ed | The equipment to use |
Definition at line 213 of file cp_auto_mission.cpp.
References cgi, autoUnit_s::chr, cp_campaignPool, teamDef_s::id, Mem_PoolAllocType, teamDef_s::onlyWeapon, and character_s::teamDef.
Referenced by AM_FillTeamFromBattleParams().
|
static |
Destroys character of a Unit.
[out] | unit | The unit to create character for |
Definition at line 226 of file cp_auto_mission.cpp.
References cgi, autoUnit_s::chr, and character_s::inv.
Referenced by AM_CleanBattleParameters().
|
static |
This will display on-screen, for the player, results of the auto mission.
[in] | battle | Autobattle structure with the results |
Definition at line 734 of file cp_auto_mission.cpp.
References _, AUTOMISSION_TEAM_TYPE_ALIEN, AUTOMISSION_TEAM_TYPE_PLAYER, cgi, MS_AddNewMessage(), autoMissionBattle_s::results, missionResults_s::state, autoMissionBattle_s::teamAccomplishment, and WON.
Referenced by AM_Go().
|
static |
Main Battle loop function.
[in,out] | battle | The battle we fight |
Definition at line 675 of file cp_auto_mission.cpp.
References autoMissionBattle_s::actUnits, AM_GetUnit, AM_IsUnitActive, AM_UnitAttackEnemy(), AUTOMISSION_TEAM_TYPE_ALIEN, AUTOMISSION_TEAM_TYPE_CIVILIAN, AUTOMISSION_TEAM_TYPE_MAX, AUTOMISSION_TEAM_TYPE_PLAYER, cgi, autoUnit_s::chr, DEBUG_CLIENT, FpCurveDn(), character_s::HP, LOST, character_s::maxHP, autoMissionBattle_s::nUnits, autoMissionBattle_s::results, autoMissionBattle_s::scoreTeamSkill, missionResults_s::state, autoMissionBattle_s::winningTeam, and WON.
Referenced by AM_Go().
|
static |
Adds team data for a specified team in an auto-mission object, from a (player) aircraft.
[in,out] | battle | The auto mission battle to add team data to |
[in] | teamNum | The team number in the auto mission instance to update |
[in] | aircraft | The aircraft to get data from |
[in] | campaign | The current campaign (for retrieving difficulty level) |
Definition at line 132 of file cp_auto_mission.cpp.
References aircraft_s::acTeam, autoMissionBattle_s::actUnits, AM_GetUnit, AUTOMISSION_TEAM_TYPE_MAX, cgi, autoUnit_s::chr, DEBUG_CLIENT, campaign_s::difficulty, autoUnit_s::idx, LIST_Foreach, MAX_SOLDIERS_AUTOMISSION, autoMissionBattle_s::nUnits, autoMissionBattle_s::scoreTeamDifficulty, and autoUnit_s::team.
Referenced by AM_Go().
|
static |
Creates team data for alien and civilian teams based on the mission parameters data.
[in,out] | battle | The auto mission battle to add team data to |
[in] | missionParams | Mission parameters data to use |
Definition at line 237 of file cp_auto_mission.cpp.
References autoMissionBattle_s::actUnits, battleParam_s::alienEquipment, battleParam_s::aliens, battleParam_s::alienTeamGroup, alienTeamGroup_s::alienTeams, AM_CreateUnitChr(), AM_GetUnit, AUTOMISSION_TEAM_TYPE_ALIEN, AUTOMISSION_TEAM_TYPE_CIVILIAN, cgi, battleParam_s::civilians, battleParam_s::civTeam, cgame_import_s::Com_GetTeamDefinitionByID(), f, frand(), autoUnit_s::idx, cgame_import_s::INV_GetEquipmentDefinitionByID(), alienTeamGroup_s::numAlienTeams, autoMissionBattle_s::nUnits, autoMissionBattle_s::scoreTeamSkill, and autoUnit_s::team.
Referenced by AM_Go().
|
static |
returns a randomly selected active unit
[in] | battle | The battle we fight |
[in] | currTeam | Current team we search for |
[in] | enemy | If the team should be enemy or friendly |
Definition at line 511 of file cp_auto_mission.cpp.
References autoMissionBattle_s::actUnits, AM_GetRandomActiveUnitOfTeam(), AM_GetRandomTeam(), AM_IsHostile, and AUTOMISSION_TEAM_TYPE_MAX.
Referenced by AM_UnitAttackEnemy().
|
static |
returns a randomly selected alive unit from a team
[in] | battle | The battle we fight |
[in] | team | Team to get unit from |
Definition at line 471 of file cp_auto_mission.cpp.
References autoMissionBattle_s::actUnits, AM_GetUnit, AM_IsUnitActive, AUTOMISSION_TEAM_TYPE_MAX, and autoMissionBattle_s::nUnits.
Referenced by AM_GetRandomActiveUnit().
|
static |
returns a randomly selected active team
[in] | battle | The battle we fight |
[in] | currTeam | Current team we search for |
[in] | enemy | If the team should be enemy or friendly |
Definition at line 441 of file cp_auto_mission.cpp.
References autoMissionBattle_s::actUnits, AM_IsHostile, and AUTOMISSION_TEAM_TYPE_MAX.
Referenced by AM_GetRandomActiveUnit().
void AM_Go | ( | mission_t * | mission, |
aircraft_t * | aircraft, | ||
const campaign_t * | campaign, | ||
const battleParam_t * | battleParameters, | ||
missionResults_t * | results | ||
) |
Handles the auto mission.
[in,out] | mission | The mission to auto play |
[in,out] | aircraft | The aircraft (or fake aircraft in case of a base attack) |
[in] | campaign | The campaign data structure |
[in] | battleParameters | Structure that holds the battle related parameters |
[out] | results | Result of the mission |
Definition at line 892 of file cp_auto_mission.cpp.
References missionResults_s::aliensSurvived, AM_AlienCollect(), AM_CalculateTeamScores(), AM_CleanBattleParameters(), AM_ClearBattle(), AM_DisplayResults(), AM_DoFight(), AM_FillTeamFromAircraft(), AM_FillTeamFromBattleParams(), AM_SetDefaultHostilities(), AM_UpdateSurivorsAfterBattle(), AUTOMISSION_TEAM_TYPE_ALIEN, AUTOMISSION_TEAM_TYPE_CIVILIAN, AUTOMISSION_TEAM_TYPE_PLAYER, ccs, cgi, missionResults_s::civiliansSurvived, ccs_s::eMission, aircraft_s::homebase, mission_s::mapDef, MIS_InitResultScreen(), missionResults_s::mission, ccs_s::missionResultCallback, autoMissionBattle_s::nUnits, OBJZERO, missionResults_s::ownSurvived, autoMissionBattle_s::results, missionResults_s::state, base_s::storage, mapDef_s::storyRelated, and WON.
Init actions for automission-subsystem.
Definition at line 938 of file cp_auto_mission.cpp.
Referenced by CP_InitStartup().
|
static |
Move equipment carried by the soldier/alien to the aircraft's itemcargo bay.
[in,out] | aircraft | The craft with the team (and thus equipment) onboard. |
[in,out] | chr | The 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_s::inv.
Referenced by AM_AlienCollect(), and AM_UpdateSurivorsAfterBattle().
|
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).
[in,out] | battle | The battle to set up team hostility values for. |
[in] | civsInfected | Set 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_s::actUnits, AM_IsAlien, AM_IsCivilian, AM_IsPlayer, AM_SetHostile, AUTOMISSION_TEAM_TYPE_MAX, AUTOMISSION_TEAM_TYPE_PLAYER, and i.
Referenced by AM_Go().
Closing actions for automission-subsystem.
Definition at line 945 of file cp_auto_mission.cpp.
Referenced by CP_Shutdown().
|
static |
Make Unit attack his enemies (or friends)
[in,out] | battle | The battle we fight |
[in] | currUnit | Unit that attacks |
[in] | effective | Effectiveness of the attack |
Definition at line 651 of file cp_auto_mission.cpp.
References AM_CheckFire(), AM_GetRandomActiveUnit(), and autoUnit_s::team.
Referenced by AM_DoFight().
|
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.
[in] | battle | The battle we fought |
[in,out] | aircraft | Dropship soldiers are on |
Definition at line 809 of file cp_auto_mission.cpp.
References ABILITY_AWARD_SCALE, ABILITY_NUM_TYPES, aircraft_s::acTeam, AM_MoveCharacterInventoryIntoItemCargo(), AUTOMISSION_TEAM_TYPE_PLAYER, cgi, CHAR_GetMaxExperiencePerMission(), CHAR_UpdateSkills(), DEBUG_CLIENT, E_RemoveInventoryFromStorage(), chrScoreGlobal_s::experience, frand(), character_s::HP, LIST_Foreach, MAX_SOLDIERS_AUTOMISSION, character_s::name, autoMissionBattle_s::results, character_s::score, SKILL_AWARD_SCALE, SKILL_NUM_TYPES, missionResults_s::state, autoMissionBattle_s::teamAccomplishment, and WON.
Referenced by AM_Go().