########################################################################################
#
#	AI TYPE DATA
#
#	This file contains general parameters for adapting the AI. Records include:
#
#	VOLUME_DISTANCES: How many metres will a sound of a certain volume decay over.
#	ENTITY TYPEs    : Various records to set up the AI in different ways.
#
########################################################################################


###############################
#
# VOLUME DISTANCES record
# All sounds are set up with a volume (either very_low, low, medium, high, or very_high).
# The greater the distance between the hearing entity and noise emitter, the more the
# volume will decay.  This file allows the distance to be set up over which each volume
# will decay.  EG: 'medium 50' means a medium noise will decay over 50 metres.
#
# NOTES: All volumes need a distance specified.
#	 A lower volume should not decay over a greater distance than a higher volume.
#
#
# BSP VOLUME FILTERING record
# If a sound is heard through the BSP then the distance that sound travels will be reduced
# by the value (in metres) set up in this record.
#
##############################


RECORD VOLUME_DISTANCES
	very_low	5
	low		15
	medium		30
	high		60
	very_high	200
END


# The general reduction is used in most cases when a noise passes through the bsp.
# The execution reduction is used instead if an execution sound goes through the bsp to let it
#	carry that little bit further.
# The lure reduction is used if a lure sound goes through the bsp so that it can travel a bit farther.
# The alert_extension is used to determine how much further alert sounds should travel.
# NOTE: The alert-extension doesn't use any bsp reduction so it shouldn't really be included in this
#	record, but I have put it here for convenience
RECORD BSP_VOLUME_FILTERING
	general_reduction	15
	execution_reduction	8
	lure_reduction		8
	alert_extension		5	
END





##############################
#
# ENTITY TYPE records
# These all have individual names which will allow different types of entity to read
# different records.  EG: Weak Hoods could read the 'weak_hood' record, etc.
#
# Current contents:
#
# ALERT_LEVEL_DEGRADE <seconds>
# -----------------------------
# This is used to specify how long the entity takes to drop down one alert level.
# Maximum alert level is very_high, and it falls to high, medium, low, very_low, then none.
# A persistent entity that will keep searching long after the player has been lost will
# have a long degrade interval.  The interval will be short for 'give-up quickly' entities.
# NOTES: Only accepts seconds between 1 and 255 inclusive.
#
# SET_ALERT_LEVEL  <action>  <level>
# ----------------------------------
# This is used to specify what the alert level will become when an entity starts a new
# action.  It can raise or sustain an alert level, but the alert level only drops over
# time.
# Actions: combat, chase, investigate, hunt, not_on_alert.
# Levels:  very_low, low, medium, high, very_high
# NOTES: only set alert level for combat, chase, and investigate actions.  hunt and
#	not_on_alert will be ignored because they do not react to the player (hunt searches
#	for him), whereas combat, chase, and investigate are all reactions to senses
#	information.  The hunt action will be sustained while the entity has an alert
#	level, then will drop to not_on_alert when the entity is not on alert.
#
# SUSTAIN_ACTION   <action>  <seconds>
# ------------------------------------
# This is used to specify how long an entity will continue doing an action after the
# conditions for sustaining that action have been lost.
# EG: If it requires a high or very_high sighting to sustain the combat action and the
#	player hides so that no sighting is available, then the hunter will remain in the
#	combat action until the specified number of seconds have passed before
#	changing to a new action.
# The reason for this is to stop the hunter swapping between actions unnecessarily.  If,
# while in combat action, the player was to turn a corner, the sighting would be lost.
# Without this sustain time, the hunter would immediately swap to another action, but
# with this sustain time, the hunter is kept in combat action to give him a chance to
# also turn the corner and see the player again.
# Actions: combat, chase, investigate, hunt, not_on_alert.
# NOTES: only set sustain times for combat, chase, and investigate actions.  hunt and
#	not_on_alert are special in that hunt is the default while the entity is on alert,
#	and not_on_alert is the default when the entity is not on alert
# NOTES: Only accepts seconds between 1 and 255 inclusive.
#
# ACTION_TRANSITION <action [from]> <action [to]> <level [sight]> <level [hearing]>
# ---------------------------------------------------------------------------------
# This is used to determine the minimum sight level or minimum hearing interest level
# that is required to change up to a new action, or to sustain the current action.
# Actions are ranked as follows: combat, chase, investigate, hunt, not_on_alert.  If the
# minimum sight or hearing level is attained to move up to a higher ranked action then it
# will be done immediately.  If not, then the current action will be sustained while the
# necessary minimum sight or hearing level is attained.  If none of these conditions are
# met then the entity will move down to a lower ranked action, but this will only happen
# after the sustain time period for that action has passed.
# Actions: combat, chase, investigate, hunt, not_on_alert.
# Levels:  none, very_low, low, medium, high, very_high
# NOTE: A level of none is taken to mean that sight information or hearing information
#	should be disregarded.  Any other level means sight or hearing of the specified
#	level and above are accepted.
# NOTE: if the from and to actions are the same, then this specifies the minimum sight or
#	hearing levels that are required to stay in that same action.
# NOTE: the valid from/to combinations are as follows, all others are ignored:
#	[from] combat       [to] combat       <min sight level>   <min hearing level>
#	[from] chase        [to] combat       <min sight level>   <min hearing level>
#       [from] chase        [to] chase        <min sight level>   <min hearing level>
#       [from] investigate  [to] combat       <min sight level>   <min hearing level>
#       [from] investigate  [to] chase        <min sight level>   <min hearing level>
#       [from] investigate  [to] investigate  <min sight level>   <min hearing level>
#       [from] hunt         [to] combat       <min sight level>   <min hearing level>
#       [from] hunt         [to] chase        <min sight level>   <min hearing level>
#       [from] hunt         [to] investigate  <min sight level>   <min hearing level>
#       [from] not_on_alert [to] combat       <min sight level>   <min hearing level>
#       [from] not_on_alert [to] chase        <min sight level>   <min hearing level>
#       [from] not_on_alert [to] investigate  <min sight level>   <min hearing level>
#
##############################


RECORD default
	ALERT_LEVEL_DEGRADE	20

	SET_ALERT_LEVEL		combat		very_high
	SET_ALERT_LEVEL		chase		high
	SET_ALERT_LEVEL		investigate	low

	SUSTAIN_ACTION		combat		1
	SUSTAIN_ACTION		chase		3
	SUSTAIN_ACTION		investigate	8

#################################
#SETTINGS FOR DEMO VERSION!!!!! #
#################################
	ACTION_TRANSITION	combat		combat		low		none
	ACTION_TRANSITION	chase		combat		very_high	none
	ACTION_TRANSITION	chase		chase		low		low
	ACTION_TRANSITION	investigate	combat		very_high	none
	ACTION_TRANSITION	investigate	chase		high		high
	ACTION_TRANSITION	investigate	investigate	low 		low
	ACTION_TRANSITION	hunt		combat		high 		none
	ACTION_TRANSITION	hunt		chase		medium		medium
	ACTION_TRANSITION	hunt		investigate	low		low
	ACTION_TRANSITION	not_on_alert	combat		very_high	none
	ACTION_TRANSITION	not_on_alert	chase		high		none
	ACTION_TRANSITION	not_on_alert	investigate	medium		medium
END



# A temporary way to set the default investigate action.
# Allowed values: walk, run.
#

RECORD investigate_action
	run
END



# A temporary way to set the default search parameters.
# Names ending in _% are: percentage values
# Names ending in _m are: distances in metres
# Names ending in _s are: time in seconds
# Names ending in _bool are: true, false
# NOTE: If RADIUS_m is 0 and AREA_bool is false then an error is flagged.
#	If RADIUS_m is >0 and AREA_bool is true then the search is confined to nodes in
#		the area that are also within the specified radius.
#

RECORD search_parameters
#################################
#SETTINGS FOR DEMO VERSION!!!!! #
#################################
# The radius that confines the search area (in metres).
# If 0 then the radius does not apply.
# This is a float.
	RADIUS_m		35

# The darkness percentage that determines that a node is dark enough to be searched.
	DARKNODE_%		8

# Determines whether or not the search is confined to an area of the level or not.
	AREA_bool		false

# The percentage of possible searchable objects and darknodes that actually get searched.
# If 100 then all searched, if 0 then none searched, otherwise at least 1 searched.
	DENSITY_%		85

# The percentage chance that the same searchable object or darknode will get searched again
# by a different entity, and the time that must elapse before this happens.
# If 100 then all will be double-searched, if 0 then none.
# NOTE: Even disorganised behaviour should perform very few double-searches.
	DOUBLE_SEARCH_%		15
	DOUBLE_SEARCH_DELAY_s	10

# Determines whether or not the search display is on or not
	SEARCH_DISPLAY_bool	false
END




# A temporary record that allows the vision data to be played around with until permanent
# values are found.
# Names ending in _% are: percentage values
# Names ending in _m are: distances in metres
# Names ending in _bool are: true, false
# Names ending in _deg are: degrees
# Trait Levels are: very_high, high, medium, low, very_low.
#
#

RECORD vision_data
# The default safe_zone percentage
	SAFE_ZONE_%		06

# The frustum width and height (in degrees), and the frustum distance in metres.
# Outwith these, the player is not visible.  The frustum_display determines whether the
# vision frustum should be displayed or not.
# These values are floats.
	FRUSTUM_WIDTH_STAND_EASY_deg	75
	FRUSTUM_WIDTH_WALK_EASY_deg	75
	FRUSTUM_WIDTH_RUN_EASY_deg	50
	FRUSTUM_WIDTH_STAND_HARD_deg	95
	FRUSTUM_WIDTH_WALK_HARD_deg	95
	FRUSTUM_WIDTH_RUN_HARD_deg	50
	FRUSTUM_HEIGHT_deg		60
	FRUSTUM_m			30
	FRUSTUM_DISPLAY_bool		false

# Peripheral vision frustum
# If the enemy is within the CHECK_PERIPHERAL distance then the peripheral distance check can take place
# NOTE: Intended for use when the hunter is standing still
# These values are floats
	PERIPHERAL_FRUSTUM_WIDTH_deg	170
	PERIPHERAL_FRUSTUM_HEIGHT_deg	60
	PERIPHERAL_FRUSTUM_m		3
	CHECK_PERIPHERAL_m		4

# The face distance in metres, and the face definite distance in metres.
# Beyond the face distance the face is not visible.
# Within the face definite distance, if the face is seen then it is always recognised.
# This distance should be less than the frustum distance. 
	FACE_m			4
	FACE_DEFINITE_m		2

# If the face is visible then ONLY the light level on the face affects the return value,
# so only the FACE_LIGHT information is used.
# if FACE_LIGHT_bool is false then face will not be used as part of calculation
# float values

	FACE_LIGHT_bool		true
	FACE_LIGHT_%		very_high	10
	FACE_LIGHT_%		high		8
	FACE_LIGHT_%		medium		6
	FACE_LIGHT_%		low		4
	FACE_LIGHT_%		very_low	2

# If the face is not visible then the return value is the average of the DISTANCE, the
# LIGHT and the VISIBLE values.  If any of these _bools are false then the relevant
# item is not included as part of the visibility calculation.  If all are false then
# the player will never be seen.
# DISTANCE is a percentage within the frustum distance, where 100 means far away.
# float values
	DISTANCE_bool		true
	DISTANCE_%		very_high	20 
	DISTANCE_%		high		45 
	DISTANCE_%		medium		60 
	DISTANCE_%		low		70
	DISTANCE_%		very_low	100

# LIGHT is the percentage of light falling on the character, where 100 means very light.
# float values
	LIGHT_bool		true
	LIGHT_%			very_high	50
	LIGHT_%			high		50
	LIGHT_%			medium		6
	LIGHT_%			low		6
	LIGHT_%			very_low	6

# VISIBLE is the percentage of the player's body that is visible (ie: not hidden by
# objects), where 100 means fully visible.
# float values
	VISIBLE_bool		true
	VISIBLE_%		very_high	90
	VISIBLE_%		high		75
	VISIBLE_%		medium		55
	VISIBLE_%		low		35
	VISIBLE_%		very_low	10
END


# A temporary record that opens up the hearing testbed for tweaking
# Names ending in _% are: percentage values
# Names ending in _bool are: true or false

RECORD hearing_data
# The percentage of the player's total speed that causes WALK and RUN noises to be emitted
	WALK_%			50
	RUN_%			100

# Should Hunters dp their individual WALK TO INVESTIGATE and STOP AND LISTEN actions?
	ALLOW_WALK_N_STOP_bool	true

# At what volume should interest level degradation (confusion) kick-in?
	CONFUSION		medium

# Flag indicating whether or not the radius lines should be displayed
	RADIUS_bool		false
END





