AI stats

From The DarkMod Wiki
Revision as of 05:08, 28 February 2017 by Destined (talk | contribs)
Jump to navigationJump to search
THIS PAGE IS A WORK IN PROGRESS

Spawnargs and Game Mechanics

In order to understand the influence of the spawnargs on game mechanics, I want to give a simplified insight into the mechanics. For this I have decided to categorise them into four subgroups: AI perception, Combat, Interaction between AIs and player out of combat, and others.

AI perception

In the centre of each stealth game lies the perception of the AIs. This includes the ability of AIs to see, hear, and touch its environment. The chance to percieve anything with the respective sense is multiplied with the respective acuity_* spawnarg at some point. If the AI is drunk all these factors are multiplied with the drunk_acuity_factor (default 0.5), which reduces the chance of the AI to notice the player.

Visual perception

In general, when an object with an AIUse spawnarg comes into the field of vision of an AI, the AI gets a visual STIM. The chancenotice* spawnargs influence if the AI reacts to the STIM and the argument of the AIuse spawnarg (not listed in the table) determines how the AI reacts. For example if the AI gets a visual STIM of another friendly AI it will greet, while it will attack a hostile AI on sight. The chance to spot the player follows a more complex algorithm and is influenced by the brightness of the light gem, the distance to the AI and the visual acuity of the AI (acuity_vis). You can check the Visual scan article for further information.

Aural perception

Noises made by the player as well as thrown objects or noise arrows produce a propagated sound of a specified volume. The propagated sound's volume decreases linearly with increasing distance from the source. When it reaches an AI the alert_aud_thresh value is subtracted and the remaining volume (if it is greater than 0) is added to the alert level of an AI.

Tactile perception

Tactile perception gets triggered, when the AI collision model touches the player's collision model.

Perception and Alarms

When an AI perceives anything suspicious, it adds to the AI's alert level. When this counter exceeds a certain amount (alert_thresh#), the AI will reach the next alert stage. In order to prevent the alert level to ramp up too quickly there is a grace period (alert_gracetime#) during which a new suspicious stim will not further alert the AI. This period can be termintaed if the new stim during the grace period is too strong (exceeds the former addition to the alert level multiplied with the "alert_gracefrac#" value) or if there are too many stims in quick succession (exceeding the alert_gracvecount#). Above the "idle" state (0) there are five alert stages:

  • 1: Observant (bark, but otherwise no reaction)
  • 2: Suspicious (bark, look, may stop and turn)
  • 3: Searching (Investigation)
  • 4: Agitated Searching (Investigation, Weapon out, AI is quite sure that there is someone around)
  • 5: Combat.

The AI will stay in this alert state for a time determined by "alert_time#". Please note, that as soon as an AI has drawn its weapon it will not recede to the regular idle state, but instead to the "alert idle" state, which results in a hightened senses and possibly different behaviour of the AI (e.g. a former stationary AI starts patroling).

Spawnargs related to AI perception
acuity_aud AI aural acuity (in percent)
acuity_env AI environmental acuity. How sensitive the AI is to things that have changed in its environment.
acuity_other AI generic acuity for scripted events. You can call this alert type on an entity with entity.Alert( <char *type>, <float amount>). This will alert the entity by amount * acuity_other in your script.
acuity_tact AI tactile acuity (in percent)
acuity_vis AI visual acuity (in percent)
alert_aud_thresh Threshold of audibility for the AI. This is in dB of sound pressure level (SPL). The real life value for humans is around 20 (a barely heard whisper). Changing this by even 0.1 has a large effect on sound propagation behavior, because propagated sounds below this volume are not heard at all. NOTE if this is not set, it gets the value from soundprop global settings.
alert_gracecount# If the number of additional alerts for an AI in alert state # during the grace period exceeds the grace count, the grace period will be terminated.
alert_gracefrac# An alert that is higher than the last increase times the grace fraction will terminate the grace period for an AI in alert state #.
alert_gracetime# After being alerted, the AI in alert state # will ignore additional alerts during the grace period (in seconds), to avoid adding up the alert level too quickly.
alert_thresh# The alert level threshold for reaching alert state #.
alert_time# The time it takes for the alert level to ramp down from the upper to the lower threshold in alert state # (in seconds).
chancenoticeblood Chance to notice the visual stim of blood
chancenoticebrokenitem Chance to notice the visual stim of a broken item
chancenoticedoor Chance to notice the visual stim of an open door that should be closed
chancenoticelight Chance to notice the visual stim of a light that should be on
chancenoticemissingitem Chance to notice the visual stim of a missing item
chancenoticemonster Chance to notice the visual stim of a monster
chancenoticeperson Chance to notice the visual stim of other persons
chancenoticepickedpocket Chance to notice that an object bound to the AI has been stolen
chancenoticerope Chance to notice the visual stim of a rope created by a rope arrow
chancenoticesuspiciousitem Chance to notice the visual stim of suspicious items
chancenoticeundead Chance to notice the visual stim on an undead
chancenoticeweapon Chance to notice the visual stim of suspicious weapons
drunk_acuity_factor If the AI is drunk, their acuities (visual, hearing, tactile) will be reduced by this factor.
fov Full field of view in degrees. Will be used for both horizontal and vertical fov unless vertical is explicitly specified.
fov_rotation A vector of 3 space-delimited angles applied to rotate the AI's field of view relative to their head joint. For most heads, the angles are: yaw pitch roll.
fov_vert Full vertical field of view in degrees. Leave blank or set to -1 to use the same value as the horizontal fov.
headturn_chance_idle The chance for random head turning while idle (0 0-1 0)
headturn_factor_alerted The headturning chance gets multiplied by this amount when the AI is alerted

Combat

When stealth fails, the player always has the option to fight AIs instead of fleeing. However, combat in TDM is meant as a last resort and will ruin any stealth scores and will most likely kill you, when you face more than on guard. Also, common settings prohibit killing civilians (AI with the spawnarg "is_civilian" set to 1) and even guards on higher difficulties. The difficulty of a melee fight is influenced by two factors (not counting the player's skills): The difficulty setting in the menu and the difficulty setting of the AI (novice, trained, skilled, see Melee sets). For a more detailed description on what to keep in mind while fighting, see Combat. A hit on or successful parry will render an AI "flatfooted", which means it will not move for an amount of time defined as flatfooted_time. This time can be used to flee from the AI instead of continuing fighting.

Spawnargs realted to combat
Spawnarg Explanation
armor Type of armor the AI is wearing (may vary depending on hit zone). The damage multipliers are: leather 0.75, chain 0.5, plate 0.
attack_accuracy Maximum angular offset to randomly offset the monster's aim when firing missiles
attack_cone Monster can only throw projectile within this cone relative to his direction.
bleed If set to true, this entity will bleed, e.g. spawn blood particles and decals when hurt.
damage Damage definition if it damages things it collides with.
damage_zones There are different hit zones for AI that vary the damage recieved from the player.
damage_scale "zone" Factor by which damage in the given zone is multiplied.
def_melee_set The defined melee set that describes the fighting skills. The levels are "novice", "trained", and "skilled" and are further modiefied by the difficulty of the game.
flatfooted_time The duration in milliseconds that this AI remains flat footed after a combat action triggers this state.
health Amount of damage to receive before dying.
health_critical When the health drops below this value, the AI will flee. Set this to 0 for AI that don't wet their pants.
is_civilian If true, the AI is a civilian. Defaults to 0.
melee_damage Damage dealt with a melee weapon.
melee_damage_mod When the AI hits with a melee weapon, this multiplies the default damage done by the weapon. Is depending on difficulty and is replaced by melee_sets. Ranges from 0.8 to 1.4.
melee_predicts_proximity If true, AI takes the current velocity of itself and its enemy into account to predict whether it will hit the enemy in the future if it starts a melee attack now. All but the stupidest AI should do this.
melee_predicted_attack_time The amount of time in milliseconds that the AI uses to predict whether it will hit its enemy if it starts its attack now. Should roughly correspond to the time it takes before the attack animation is threatening to an enemy in front of them. This baseline can be set on an AI for empty-hand attacks, then may be overwritten by individual weapons if their attack animations are slower/faster than this baseline.
melee_range do melee attack when within 3x this range
melee_rep_attack_time
move_speed The movement speed of AIs is dependent on their animations and animation rate. The animation rate can be changed with the anim_rate_X (X = animation name).
outofreach_projectile_delay_max Maximum period to wait between throwing player-out-of-reach projectiles in seconds
outofreach_projectile_delay_min Minimum period to wait between throwing player-out-of-reach projectiles in seconds
outofreach_projectile_enabled Ability to throw player-out-of-reach projectiles at the player.
pain_threshold How much damage monster has to receive in one blow for it to play a pain animation.
unarmed_melee Set this to 1 when this type of AI doesn't need melee weapons to fight. This is usually true for spiders, undead and such. Humans are wimps and need weapons.
unarmed_ranged Set this to 1 when this type of AI doesn't need weapons for ranged combat. This is usually true for belchers.

Interaction between AI and player

Apart from combat there are other ways the AIs and the player can interact with each other and the environment. The player can blind or knock out an AI, the AI can get alerted (through seeing the player as well as other clues that someone is sneaking about) and both can switch lights on or off, etc.

Spawnargs related to AI interactions with the player and vice versa
blind_time The time span in seconds the AI is staying in 'blinded' state when hit by a flashbomb or -mine.
can_be_flatfooted If set to true, the AI becomes flat-footed in certain combat situations. This means they're unable to run at the player, but can still turn to face the player.
can_drown If true, the AI will drown if it gets under water, either by walking in or by being dropped in unconsciously. Set to '0' to make them breathe under water.
canlighttorches AI ability to switch on torches
canoperatedoors AI ability to handle doors
canoperateelevators AI ability to handle elevators
canoperateswitchlights AI ability to operate light switches
cansearch Whether the AI can conduct a search or not
cansearchcooperatively ability to participate in a coordinated search
gas_immune 0 = not immune, 1 = immune to gas
is_mantleable If set to 1, this entity is not mantleable by the player. Defaults to 0.
ko_alert_immune If true, the AI is immune to knockouts when alerted at or above the alert state defined in 'ko_alert_state'.
ko_alert_immune_state Alert state number at which immunity behavior changes.
ko_alert_state Alert state number at which knockout behavior changes.
ko_angle_alert_horiz Horizontal knockout cone angle when the AI is alerted at or above 'ko_alert_state'.
ko_angle_alert_vert Vertical knockout cone angle when the AI is alerted at or above 'ko_alert_state'.
ko_angle_horiz Defines a horizontal cone angle extending backwards from the direction AI is looking. Anywhere within this cone and the vertical cone is a valid KO.
ko_angle_vert Defines a vertical cone angle extending backwards from the direction AI is looking. Anywhere within this cone and the horizontal cone is a valid KO.
ko_immune 0 = not immune, 1 = immune to blackjack
ko_rotation A vector of 3 space-delimited angles applied to rotate the AI's blackjack acceptance cone relative to their head joint. For most heads, the angles are: yaw pitch roll.
ko_spot_offset Defines the center of the head for knockout testing purposes. Vector offset from the head attachment joint to the desired head center point. The possible knockout cone extends back from this point.
ko_zone Name of the damage zone that must be hit for a possible knockout. Set this blank (i.e. : 'ko_zone' ) to make the AI immune to KOs from the blackjack.
pickpocket_alert Incremental alert value to be added to an AI's current alert level
pickpocket_delay_max Maximum delay before reacting to a picked pocket in milliseconds
picpocket_delay_min Minimum delay before reacting to a picked pocket in milliseconds
push_player Set this to 1 to let this entity push the player (default is 0).
sneak_attack_alert_state Alert state number at which the AI can no longer be sneak attacked.
sneak_attack_mult Damage multiplier applied to ALL damage when AI is damaged at an alert level below that defined in 'sneak_attack_alert_state'.
team Monsters do not actively attack players or monsters with the same team number. For common team numbers see AI Relations (Editing).

Human AIs

Human AIs are somewhat special as the spawnargs are defined by the entity definition as well as the definition of the head. This leads to a great number of combinations and is the reason that heads are discussed here as well as the various human classes. In order to make this article as clear as possible, in the first table the base values for human AIs are stated. In the class specific tables only changes to these base values are listed.

Base Values

This table lists all base values for human AIs in alphabetical order.

Humanoid AIs
Spawnarg Base Value
acuity_aud 100
acuity_env 100
acuity_other 100
acuity_tact 100
acuity_vis 100
alert_aud_thresh 18.8
alert_gracecount1 5
alert_gracecount2 5
alert_gracecount3 4
alert_gracecount4 4
alert_gracefrac1 1.2
alert_gracefrac2 1.2
alert_gracefrac3 1.2
alert_gracefrac4 1.0
alert_gracetime1 2
alert_gracetime2 2
alert_gracetime3 3
alert_gracetime4 2
alert_thresh1 1.5
alert_thresh2 6
alert_thresh3 10
alert_thresh4 18
alert_thresh5 23
alert_time1 5 +/- 1.5
alert_time2 8 +/- 2
alert_time3 25 +/- 8
alert_time4 65 +/- 20
alert_time5
armor variable
attack_accuracy 2.3
attack_cone 70
bleed 1
blind_time 8 +/- 4
can_be_flatfooted 1
can_drown 1
canlighttorches 1
canoperatedoors 1
canoperateelevators 1
canoperateswitchlights 1
cansearch 1
cansearchcooperatively 1
chancenoticeblood 1.0
chancenoticebrokenitem 1.0
chancenoticedoor 1.0
chancenoticelight 0.9
chancenoticemissingitem 1.0
chancenoticemonster 1.0
chancenoticeperson 1.0
chancenoticepickedpocket 0.5
chancenoticerope 1.0
chancenoticesuspiciousitem 1.0
chancenoticeundead 1.0
chancenoticeweapon 1.0
damage 34
damage_zone head, chest, torso_low, left_arm, right_arm, legs
damage_scale head 2
damage_scale chest 1.5
damage_scale torso_low 1.0
damage_scale left_arm 0.3
damage_scale right_arm 0.3
damage_scale legs 0.4
def_melee_set variable
drunk_acuity_factor 0.5
fov 150
fov_rotation 0 -20 0
fov_vert 120
gas_immune 0
headturn_chance_idle 0.3
headturn_factor_alerted 2
health variable
health_critical 15
is_civilian 0
is_mantleable 0
ko_alert_immune 0
ko_alert_immune_state 5
ko_alert_state 4 (as soon as weapon is drawn)
ko_angle_alert_horiz 110
ko_angle_alert_vert 180
ko_angle_horiz 360
ko_angle_vert 360
ko_immune 0
ko_rotation 0 0 0
ko_spot_offset 2 -2.5 0
ko_zone head
melee_damage variable
melee_damage_mod 0.6 - 1.4
melee_predicts_proximity 1
melee_predicted_attack_time 750
melee_range 0
melee_rep_attack_time 10000
outofreach_projectile_delay_max 7.0
outofreach_projectile_delay_min 10.0
outofreach_projectile_enabled 1
pain_threshold 1
pickpocket_alert 0
pickpocket_delay_max 25000
picpocket_delay_min 5000
push_player
sneak_attack_alert_state 2
sneak_attack_mult 2.0
stamina player only
team variable
unarmed_melee 0
unarmed_ranged 0

Heads

Different heads can change the cones of the field of vision and the ko volume, so it it is advisable to check if any AI you encounter wears a hat or helmet and/or an eye patch. Please note that even though many AIs wear helmets, this only reduces the cone in which you can knock out the guard. Only the ones with neck protecting elite helmets (see Heads Available for AI) are in general immune to being knocked out (i.e. the cone you have to hit with the blackjack is reduced to 0).

Heads
Spawnarg Heads with an eye patch Heads with hoods Head with a straw hat Heads with non-brimmed helmet Heads with non-brimmed saxon helmet Heads with brimmed City Watch helmet Heads with elite helmet Heads with brimmed City Watch helmet and an eye-patch Heads with elite helmet and an eye-patch
Heads Builder Guard Head 6,Commoner Default Heads 2, 12, Commoner Default Head 12 Commoner Default Heads 1,10 Commoner Default Head 3 Commoner Default Heads 6, 7, 13, 16 Commoner Default Heads 14, 15 City Watch Heads 1 - 4, 6 - 8 Elite Guard Heads 1,2 City Watch Heads 5, 10 Elite Guard Heads 3
fov 110 80 150 150 110 150 150 110 110
fov_rotaion -30 -20 0 0 -35 0 0 -35 0 0 -30 0 0 -30 0 0 -30 0 0 -30 0 0 -30 0
fov_vert 120 95 100 120 120 100 120 100 120
ko_angle_alert_horiz 110 110 110 110 110 110 0 110 0
ko_angle_alert_vert 180 180 180 180 180 180 0 180 0
ko_angle_horiz 360 360 360 110 110 110 0 110 0
ko_angle_vert 360 360 360 180 180 180 0 180 0
ko_alert_immune_state 5 5 5 4 4 4 all 4 all

Builders

Guards

Mages

Moors

Pagans

Thieves

Townsfolk

Non-human AIs

Monster

Steambots

Undead