; KeeperFX Creature Configuration file version 1.0.

[common]
; Creatures used - note that the order is important
Creatures = WIZARD BARBARIAN ARCHER MONK DWARFA KNIGHT AVATAR TUNNELLER WITCH GIANT FAIRY THIEF SAMURAI HORNY SKELETON TROLL DRAGON DEMONSPAWN FLY DARK_MISTRESS SORCEROR BILE_DEMON IMP BUG VAMPIRE SPIDER HELL_HOUND GHOST TENTACLE ORC FLOATING_SPIRIT TIME_MAGE DRUID
JobsCount = 24
AngerJobsCount = 10
AttackPreferencesCount = 3
SpriteSize = 300

[experience]
; Percentage of creature size increase for every experience level.
SizeIncreaseOnExp = 5
; Percentage of creature pay increase for every experience level.
PayIncreaseOnExp = 35
; Percentage of creature damage increase for every experience level.
SpellDamageIncreaseOnExp = 8
; Percentage of spell range/area of effect increase for every experience level.
RangeIncreaseOnExp = 6
; Percentage of creature job value increase for every experience level.
JobValueIncreaseOnExp = 35
; Percentage of creature health increase for every experience level.
HealthIncreaseOnExp = 35
; Percentage of creature strength increase for every experience level.
StrengthIncreaseOnExp = 35
; Percentage of creature dexterity increase for every experience level.
DexterityIncreaseOnExp = 4
; Percentage of creature defense increase for every experience level.
DefenseIncreaseOnExp = 5
; Percentage of creature loyalty increase for every experience level.
LoyaltyIncreaseOnExp = 35
; Percentage ExperienceForHitting increase for every experience level.
ExpForHittingIncreaseOnExp = 12
; Percentage of creature training cost increase for every experience level. Set to 0 by default.
TrainingCostIncreaseOnExp = 0
; Percentage of creature scavenging cost increase for every experience level. Set to 0 by default.
ScavengingCostIncreaseOnExp = 0

[instance0]
Name = NULL
; Game turns duration (lifespan) of an instance; determines the length of shooting animation
Time = 0
; Point at which action function is executed within the instance lifespan (needs to be lower or equal to "Time")
ActionTime = 0
; Amount of game turns before the spell can be re-used after an instance finishes
ResetTime = 0
; Different times may be set for possession (First Person) mode
FPTime = 0
FPActionTime = 0
FPResetTime = 0
; Instance is activated as soon as it is selected
FPInstantCast = 0
; How many game turns after using the instance creature can be spotted even if invisible
ForceVisibility = 0
; Tooltip string ID, explaining what the instance does
TooltipTextID = 201
; Sprite IDs of graphics symbols representing the instance; only one, small symbol is supported
SymbolSprites = 0
; Graphics animation used to display creature during the instance
Graphics = STAND
; Minimum distance the target can be to cast the spell.
RangeMin = 0
; Maximal distance the target can be to cast the spell.
RangeMax = 0
; Type of thing the aim assist will target first. Full meaning unknown, range 1~8.
; 8 targets anything, creatures targetted by all.
; 1,3,5,7 will also accept dungeon hearts
; 3,4 will only target other players, 5,6 only own player.
; 7 will target traps.
PrimaryTarget = 0
; Instance property flags:
; RANGED_DEBUFF will be used on enemy creatures, but does not count as an attack
; DANGEROUS will be avoided when attacking Doors and Hearts
; DESTRUCTIVE is required when attacking Doors and Hearts
; SELF_BUFF can be applied to caster.
; RANGED_BUFF can be applied to another friendly creature.
; REPEAT_TRIGGER allows player to hold down the mouse button to cast
; QUICK ranged attacks will be used by units going postal
; DISARMING allows instance to be used against traps
; DISPLAY_SWIPE Shows the swipe in possession loaded from the creatures PossessSwipeIndex
; NEEDS_TARGET Cannot be used in possession without a target to cast it on
Properties =
; Function used as the instance action, and its parameters
Function = none 0 0
; Function to validate the source of the spell. Could have two parameters.
; It checks whether the caster (source creature) is able and legitimate to cast the spell. It
; mainly checks the state of the caster. For example, checking whether it's unconscious/picked up.
; An unconscious/picked creature is unable to cast spells. Checking whether it's in prison.
; validate_source_generic() forbids casting in prison but validate_source_even_in_prison() doesn't.
; This must be set for RANGED_BUFF.
ValidateSourceFunc = validate_source_generic 0 0
; Function to validate the target of the spell. Could have two parameters.
; It checks whether the target creature is able and legitimate to receive the spell. It mainly
; checks if the target can benefit from the spell. For example, a creature having 100% HP doesn't
; need healing. A creature having Speed effect already doesn't need the Speed spell. The Speed
; spell should be cast on another creature who doesn't have the Speed effect.
; It also checks the target's state. For example, an unconscious creature is not a legitimate
; target of Speed or Armour spell.
; This must be set for RANGED_BUFF.
ValidateTargetFunc = validate_target_generic 0 0
; Function to search targets of the ranged spell. Could have two parameters.
; It works with ValidateTargetFunc together to collect one or more targets and run dedicated
; logic to process them. For example, search_target_ranged_heal() will search nearby area
; to collect validated creatures (by validate_target_benefits_from_healing()) and select the creature
; who has lowest percentage of HP as the final receiver of the Heal spell.
; This must be set for RANGED_BUFF.
; When this is set, ValidateTargetFunc must be set, too.
SearchTargetsFunc = search_target_generic 0 0

[instance1]
Name = SWING_WEAPON_SWORD
Time = 8
ActionTime = 4
ResetTime = 8
FPTime = 5
FPActionTime = 2
FPResetTime = 4
FPInstantCast = 0
ForceVisibility = 100
TooltipTextID = 252
SymbolSprites = 450
Graphics = ATTACK
RangeMin = MIN
RangeMax = 284
PrimaryTarget = 3
Properties = DESTRUCTIVE MELEE_ATTACK DISPLAY_SWIPE
Function = creature_fire_shot SHOT_SWING_SWORD 0

[instance2]
Name = SWING_WEAPON_FIST
Time = 8
ActionTime = 4
ResetTime = 8
FPTime = 5
FPActionTime = 2
FPResetTime = 4
FPInstantCast = 0
ForceVisibility = 100
TooltipTextID = 252
SymbolSprites = 400
Graphics = ATTACK
RangeMin = MIN
RangeMax = 284
PrimaryTarget = 3
Properties = DESTRUCTIVE MELEE_ATTACK DISPLAY_SWIPE
Function = creature_fire_shot SHOT_SWING_FIST 0

[instance3]
Name = ESCAPE
Time = 0
ActionTime = 0
ResetTime = 0
FPTime = 0
FPActionTime = 0
FPResetTime = 0
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = ATTACK
PrimaryTarget = 3
Properties =
Function = none 0 0

[instance4]
Name = FIRE_ARROW
Time = 10
ActionTime = 5
ResetTime = 16
FPTime = 5
FPActionTime = 2
FPResetTime = 8
FPInstantCast = 0
ForceVisibility = 100
TooltipTextID = 226
SymbolSprites = 454
Graphics = ATTACK
RangeMin = 156
RangeMax = MAX
PrimaryTarget = 3
Properties = DESTRUCTIVE QUICK RANGED_ATTACK
Function = creature_fire_shot SHOT_ARROW 0

[instance5]
Name = FIREBALL
Time = 10
ActionTime = 6
ResetTime = 32
FPTime = 4
FPActionTime = 2
FPResetTime = 4
FPInstantCast = 0
ForceVisibility = 150
TooltipTextID = 251
SymbolSprites = 402
Graphics = ATTACK
RangeMin = 156
RangeMax = MAX
PrimaryTarget = 3
Properties = DESTRUCTIVE QUICK RANGED_ATTACK
Function = creature_fire_shot SHOT_FIREBALL 0

[instance6]
Name = FIRE_BOMB
Time = 10
ActionTime = 6
ResetTime = 100
FPTime = 5
FPActionTime = 3
FPResetTime = 16
FPInstantCast = 0
ForceVisibility = 150
TooltipTextID = 250
SymbolSprites = 404
Graphics = ATTACK
RangeMin = 768
RangeMax = MAX
PrimaryTarget = 3
Properties = DANGEROUS DESTRUCTIVE RANGED_ATTACK
Function = creature_fire_shot SHOT_FIREBOMB 0

[instance7]
Name = FREEZE
Time = 10
ActionTime = 6
ResetTime = 375
FPTime = 5
FPActionTime = 3
FPResetTime = 300
FPInstantCast = 0
ForceVisibility = 150
TooltipTextID = 227
SymbolSprites = 406
Graphics = ATTACK
RangeMin = 156
RangeMax = MAX
PrimaryTarget = 3
Properties = RANGED_DEBUFF
Function = creature_cast_spell SPELL_FREEZE 0

[instance8]
Name = ARMOUR
Time = 10
ActionTime = 6
ResetTime = 400
FPTime = 5
FPActionTime = 3
FPResetTime = 250
FPInstantCast = 1
ForceVisibility = 10
TooltipTextID = 228
SymbolSprites = 408
Graphics = ATTACK
Properties = SELF_BUFF
PrimaryTarget = 3
Function = creature_cast_spell SPELL_ARMOUR 0
ValidateSourceFunc = validate_source_generic 0 0
ValidateTargetFunc = validate_target_benefits_from_defensive 0 0

[instance9]
Name = LIGHTNING
Time = 10
ActionTime = 6
ResetTime = 16
FPTime = 5
FPActionTime = 3
FPResetTime = 8
FPInstantCast = 0
ForceVisibility = 150
TooltipTextID = 229
SymbolSprites = 410
Graphics = ATTACK
RangeMin = 768
RangeMax = 5120
PrimaryTarget = 3
Properties = DESTRUCTIVE QUICK RANGED_ATTACK
Function = creature_fire_shot SHOT_LIGHTNING 0

[instance10]
Name = REBOUND
Time = 10
ActionTime = 6
ResetTime = 400
FPTime = 5
FPActionTime = 3
FPResetTime = 250
FPInstantCast = 1
ForceVisibility = 10
TooltipTextID = 230
SymbolSprites = 412
Graphics = ATTACK
Properties = SELF_BUFF
PrimaryTarget = 3
Function = creature_cast_spell SPELL_REBOUND 0
ValidateSourceFunc = validate_source_generic 0 0
ValidateTargetFunc = validate_target_benefits_from_missile_defense 0 0

[instance11]
Name = HEAL
Time = 10
ActionTime = 6
ResetTime = 400
FPTime = 5
FPActionTime = 3
FPResetTime = 250
FPInstantCast = 1
ForceVisibility = 1
TooltipTextID = 248
SymbolSprites = 414
Graphics = ATTACK
Properties = SELF_BUFF
PrimaryTarget = 3
Function = creature_cast_spell SPELL_HEAL 0
ValidateSourceFunc = validate_source_even_in_prison 0 0
ValidateTargetFunc = validate_target_benefits_from_healing 0 0

[instance12]
Name = POISON_CLOUD
Time = 10
ActionTime = 6
ResetTime = 80
FPTime = 5
FPActionTime = 3
FPResetTime = 20
FPInstantCast = 0
ForceVisibility = 20
TooltipTextID = 237
SymbolSprites = 416
Graphics = ATTACK
RangeMin = 156
RangeMax = MAX
PrimaryTarget = 4
Properties = QUICK RANGED_ATTACK
Function = creature_cast_spell SPELL_POISON_CLOUD 0

[instance13]
Name = INVISIBILITY
Time = 10
ActionTime = 6
ResetTime = 500
FPTime = 5
FPActionTime = 3
FPResetTime = 200
FPInstantCast = 1
ForceVisibility = 1
TooltipTextID = 239
SymbolSprites = 418
Graphics = ATTACK
PrimaryTarget = 3
Properties = SELF_BUFF
Function = creature_cast_spell SPELL_INVISIBILITY 0
ValidateSourceFunc = validate_source_generic 0 0
ValidateTargetFunc = validate_target_benefits_from_defensive 0 0

[instance14]
Name = TELEPORT
Time = 10
ActionTime = 6
ResetTime = 6
FPTime = 5
FPActionTime = 3
FPResetTime = 3
FPInstantCast = 1
ForceVisibility = 10
TooltipTextID = 240
SymbolSprites = 420
Graphics = ATTACK
PrimaryTarget = 3
Properties =
Function = creature_cast_spell SPELL_TELEPORT 0

[instance15]
Name = SPEED
Time = 10
ActionTime = 6
ResetTime = 550
FPTime = 5
FPActionTime = 3
FPResetTime = 500
FPInstantCast = 1
ForceVisibility = 3
TooltipTextID = 236
SymbolSprites = 422
Graphics = ATTACK
PrimaryTarget = 3
Properties = SELF_BUFF
Function = creature_cast_spell SPELL_SPEED 0
ValidateSourceFunc = validate_source_generic 0 0
ValidateTargetFunc = validate_target_generic 0 0

[instance16]
Name = SLOW
Time = 10
ActionTime = 6
ResetTime = 850
FPTime = 5
FPActionTime = 3
FPResetTime = 600
FPInstantCast = 0
ForceVisibility = 10
TooltipTextID = 245
SymbolSprites = 424
Graphics = ATTACK
RangeMin = 156
RangeMax = MAX
PrimaryTarget = 3
Properties = RANGED_DEBUFF
Function = creature_cast_spell SPELL_SLOW 0

[instance17]
Name = DRAIN
Time = 10
ActionTime = 6
ResetTime = 5
FPTime = 5
FPActionTime = 3
FPResetTime = 3
FPInstantCast = 0
ForceVisibility = 100
TooltipTextID = 246
SymbolSprites = 513
Graphics = ATTACK
RangeMin = 156
RangeMax = 5120
PrimaryTarget = 3
Properties = DESTRUCTIVE RANGED_ATTACK
Function = creature_fire_shot SHOT_DRAIN 0

[instance18]
Name = FEAR
Time = 10
ActionTime = 6
ResetTime = 10
FPTime = 5
FPActionTime = 3
FPResetTime = 10
FPInstantCast = 0
ForceVisibility = 10
TooltipTextID = 231
SymbolSprites = 456
Graphics = ATTACK
RangeMin = 156
RangeMax = MAX
PrimaryTarget = 3
Properties = RANGED_DEBUFF
Function = creature_cast_spell SPELL_FEAR 0

[instance19]
Name = MISSILE
Time = 10
ActionTime = 6
ResetTime = 25
FPTime = 4
FPActionTime = 2
FPResetTime = 4
FPInstantCast = 0
ForceVisibility = 100
TooltipTextID = 233
SymbolSprites = 426
Graphics = ATTACK
RangeMin = 156
RangeMax = MAX
PrimaryTarget = 3
Properties = DESTRUCTIVE QUICK RANGED_ATTACK
Function = creature_fire_shot SHOT_MISSILE 0

[instance20]
Name = NAVIGATING_MISSILE
Time = 10
ActionTime = 6
ResetTime = 50
FPTime = 4
FPActionTime = 2
FPResetTime = 5
FPInstantCast = 0
ForceVisibility = 150
TooltipTextID = 235
SymbolSprites = 428
Graphics = ATTACK
RangeMin = 156
RangeMax = MAX
PrimaryTarget = 3
Properties = DESTRUCTIVE QUICK RANGED_ATTACK
Function = creature_fire_shot SHOT_NAVI_MISSILE 0

[instance21]
Name = FLAME_BREATH
Time = 10
ActionTime = 10
ResetTime = 8
FPTime = 3
FPActionTime = 3
FPResetTime = 1
FPInstantCast = 0
ForceVisibility = 100
TooltipTextID = 241
SymbolSprites = 430
Graphics = ATTACK
RangeMin = 156
RangeMax = 284
PrimaryTarget = 3
Properties = DESTRUCTIVE MELEE_ATTACK RANGED_ATTACK REPEAT_TRIGGER
Function = creature_fire_shot SHOT_FLAME_BREATH 0

[instance22]
Name = WIND
Time = 10
ActionTime = 6
ResetTime = 1600
FPTime = 5
FPActionTime = 3
FPResetTime = 800
FPInstantCast = 0
ForceVisibility = 30
TooltipTextID = 249
SymbolSprites = 432
Graphics = ATTACK
RangeMin = MIN
RangeMax = MAX
PrimaryTarget = 3
Properties =
Function = creature_cast_spell SPELL_WIND 0
ValidateSourceFunc = validate_source_generic 0 0
; Wind can disperse gas and push away melee enemies.
; It has more than one merit. It deserve one dedicated function
ValidateTargetFunc = validate_target_benefits_from_wind 0 0

[instance23]
Name = LIGHT
Time = 10
ActionTime = 6
ResetTime = 600
FPTime = 5
FPActionTime = 3
FPResetTime = 300
FPInstantCast = 1
ForceVisibility = 100
TooltipTextID = 242
SymbolSprites = 434
Graphics = ATTACK
Properties = SELF_BUFF
PrimaryTarget = 3
Function = creature_cast_spell SPELL_LIGHT 0

[instance24]
Name = FLY
Time = 10
ActionTime = 6
ResetTime = 400
FPTime = 5
FPActionTime = 3
FPResetTime = 250
FPInstantCast = 1
ForceVisibility = 1
TooltipTextID = 243
SymbolSprites = 436
Graphics = ATTACK
Properties = SELF_BUFF
PrimaryTarget = 3
Function = creature_cast_spell SPELL_FLIGHT 0
ValidateSourceFunc = validate_source_generic 0 0
ValidateTargetFunc = validate_target_benefits_from_higher_altitude 0 0

[instance25]
Name = SIGHT
Time = 10
ActionTime = 6
ResetTime = 200
FPTime = 5
FPActionTime = 3
FPResetTime = 150
FPInstantCast = 1
ForceVisibility = 0
TooltipTextID = 232
SymbolSprites = 438
Graphics = ATTACK
Properties = SELF_BUFF
PrimaryTarget = 3
Function = creature_cast_spell SPELL_SIGHT 0
ValidateSourceFunc = validate_source_even_in_prison 0 0
ValidateTargetFunc = validate_target_even_in_prison 0 0

[instance26]
Name = GRENADE
Time = 10
ActionTime = 6
ResetTime = 300
FPTime = 5
FPActionTime = 3
FPResetTime = 100
FPInstantCast = 0
ForceVisibility = 80
TooltipTextID = 234
SymbolSprites = 440
Graphics = ATTACK
PrimaryTarget = 3
Properties = DANGEROUS DESTRUCTIVE QUICK RANGED_ATTACK
Function = creature_fire_shot SHOT_GRENADE 0

[instance27]
Name = HAILSTORM
Time = 10
ActionTime = 6
ResetTime = 32
FPTime = 5
FPActionTime = 3
FPResetTime = 20
FPInstantCast = 0
ForceVisibility = 80
TooltipTextID = 244
SymbolSprites = 442
Graphics = ATTACK
RangeMin = 156
RangeMax = MAX
PrimaryTarget = 3
Properties = DESTRUCTIVE QUICK RANGED_ATTACK MELEE_ATTACK
Function = creature_cast_spell SPELL_HAILSTORM 0

[instance28]
Name = WORD_OF_POWER
Time = 10
ActionTime = 6
ResetTime = 400
FPTime = 5
FPActionTime = 3
FPResetTime = 250
FPInstantCast = 0
ForceVisibility = 100
TooltipTextID = 247
SymbolSprites = 444
Graphics = ATTACK
RangeMin = MIN
RangeMax = 284
PrimaryTarget = 3
Properties = DESTRUCTIVE MELEE_ATTACK
Function = creature_cast_spell SPELL_WORD_OF_POWER 0

[instance29]
Name = FART
Time = 8
ActionTime = 4
ResetTime = 150
FPTime = 4
FPActionTime = 2
FPResetTime = 100
FPInstantCast = 0
ForceVisibility = 10
TooltipTextID = 253
SymbolSprites = 446
Graphics = ATTACK
RangeMin = MIN
RangeMax = 284
PrimaryTarget = 3
Properties = MELEE_ATTACK
Function = creature_fart 0 0

[instance30]
Name = DIG
Time = 8
ActionTime = 4
ResetTime = 1
FPTime = 4
FPActionTime = 2
FPResetTime = 1
FPInstantCast = 0
ForceVisibility = 40
TooltipTextID = 254
SymbolSprites = 448
Graphics = DIG
Properties =
PrimaryTarget = 3
Function = creature_dig 0 0

[instance31]
Name = PRETTY_PATH
Time = 8
ActionTime = 4
ResetTime = 1
FPTime = 4
FPActionTime = 2
FPResetTime = 1
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = PRETTYDANCE
Properties =
PrimaryTarget = 3
Function = creature_pretty_path 0 0

[instance32]
Name = DESTROY_AREA
Time = 8
ActionTime = 4
ResetTime = 1
FPTime = 4
FPActionTime = 2
FPResetTime = 1
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = PRETTYDANCE
Properties =
PrimaryTarget = 3
Function = creature_destroy 0 0

[instance33]
Name = TUNNEL
Time = 8
ActionTime = 4
ResetTime = 1
FPTime = 4
FPActionTime = 2
FPResetTime = 1
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = DIG
PrimaryTarget = 3
Properties =
Function = creature_tunnel 0 0

[instance34]
Name = CELEBRATE_SHORT
Time = 8
ActionTime = 1
ResetTime = 1
FPTime = 4
FPActionTime = 1
FPResetTime = 1
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = CELEBRATE
Properties =
Function = none 3 0

[instance35]
Name = REINFORCE
Time = 8
ActionTime = 4
ResetTime = 1
FPTime = 4
FPActionTime = 2
FPResetTime = 1
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = PRETTYDANCE
PrimaryTarget = 3
Properties =
Function = creature_reinforce 0 0

[instance36]
Name = EAT
Time = 16
ActionTime = 8
ResetTime = 1
FPTime = 8
FPActionTime = 4
FPResetTime = 1
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = EATCHICKEN
PrimaryTarget = 3
Properties =
Function = creature_eat 0 0

[instance37]
Name = ATTACK_ROOM_SLAB
Time = 8
ActionTime = 4
ResetTime = 1
FPTime = 4
FPActionTime = 2
FPResetTime = 1
ForceVisibility = 10
TooltipTextID = 201
SymbolSprites = 0
Graphics = ATTACK
PrimaryTarget = 3
Properties =
Function = attack_room_slab 0 0

[instance38]
Name = DAMAGE_WALL
Time = 8
ActionTime = 4
ResetTime = 1
FPTime = 4
FPActionTime = 2
FPResetTime = 1
ForceVisibility = 10
TooltipTextID = 201
SymbolSprites = 0
Graphics = ATTACK
PrimaryTarget = 3
Properties =
Function = creature_damage_wall 21 0

[instance39]
Name = FIRST_PERSON_DIG
Time = 8
ActionTime = 4
ResetTime = 1
FPTime = 4
FPActionTime = 2
FPResetTime = 1
FPInstantCast = 0
ForceVisibility = 3
TooltipTextID = 254
SymbolSprites = 448
Graphics = DIG
PrimaryTarget = 3
Properties = DISPLAY_SWIPE
Function = first_person_do_imp_task 0 0

[instance40]
Name = LIZARD
Time = 10
ActionTime = 6
ResetTime = 60
FPTime = 5
FPActionTime = 3
FPResetTime = 20
FPInstantCast = 0
ForceVisibility = 80
TooltipTextID = 234
SymbolSprites = 440
Graphics = ATTACK
RangeMin = 1000
RangeMax = MAX
PrimaryTarget = 3
Properties = DANGEROUS DESTRUCTIVE QUICK RANGED_ATTACK
Function = creature_fire_shot SHOT_LIZARD 0

[instance41]
Name = CAST_SPELL_DISEASE
Time = 10
ActionTime = 6
ResetTime = 200
FPTime = 5
FPActionTime = 3
FPResetTime = 150
FPInstantCast = 0
ForceVisibility = 20
TooltipTextID = 255
SymbolSprites = 319
Graphics = ATTACK
RangeMin = 156
RangeMax = MAX
PrimaryTarget = 3
Properties = RANGED_DEBUFF
Function = creature_cast_spell SPELL_DISEASE 0

[instance42]
Name = CAST_SPELL_CHICKEN
Time = 10
ActionTime = 6
ResetTime = 200
FPTime = 5
FPActionTime = 3
FPResetTime = 150
FPInstantCast = 0
ForceVisibility = 20
TooltipTextID = 256
SymbolSprites = 314
Graphics = ATTACK
RangeMin = 156
RangeMax = 1280
PrimaryTarget = 3
Properties = RANGED_DEBUFF
Function = creature_cast_spell SPELL_CHICKEN 0

[instance43]
Name = CAST_SPELL_TIME_BOMB
Time = 10
ActionTime = 6
ResetTime = 6
FPTime = 5
FPActionTime = 3
FPResetTime = 3
FPInstantCast = 0
ForceVisibility = 0
TooltipTextID = 257
SymbolSprites = 548
Graphics = ATTACK
RangeMin = 768
RangeMax = MAX
PrimaryTarget = 3
Properties = RANGED_ATTACK
Function = creature_cast_spell SPELL_TIME_BOMB 0

[instance44]
Name = MOAN
Time = 8
ActionTime = 1
ResetTime = 1
FPTime = 4
FPActionTime = 1
FPResetTime = 1
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = SCREAM
PrimaryTarget = 3
Properties =
Function = none 4 0

[instance45]
Name = TORTURED
Time = 16
ActionTime = 8
ResetTime = 1
FPTime = 8
FPActionTime = 4
FPResetTime = 1
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = TORTURE
PrimaryTarget = 3
Properties =
Function = creature_tortured 0 0

[instance46]
Name = TOKING
Time = 16
ActionTime = 4
ResetTime = 1
FPTime = 4
FPActionTime = 2
FPResetTime = 1
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = SMOKE
PrimaryTarget = 3
Properties = SELF_BUFF
Function = none 0 0

[instance47]
Name = RELAXING
Time = 8
ActionTime = 4
ResetTime = 1
FPTime = 4
FPActionTime = 2
FPResetTime = 1
ForceVisibility = 0
TooltipTextID = 201
SymbolSprites = 0
Graphics = RELAX
PrimaryTarget = 3
Properties =
Function = none 0 0

; Creature is summoned whenever the instance is on cooldown
[instance48]
Name = SUMMON_FAMILIAR
Time = 6
ActionTime = 5
ResetTime = 1500
FPTime = 6
FPActionTime = 5
FPResetTime = 750
FPInstantCast = 1
ForceVisibility = 30
TooltipTextID = 201
SymbolSprites = 434
Graphics = SCREAM
Properties = SELF_BUFF
PrimaryTarget = 8
Function = creature_cast_spell SPELL_SUMMON_FAMILIAR 0
ValidateSourceFunc = validate_source_generic 0 0
ValidateTargetFunc = validate_target_generic 0 0

; Creature is summoned only in battle
[instance49]
Name = SUMMON_CREATURE
Time = 6
ActionTime = 5
ResetTime = 1500
FPTime = 6
FPActionTime = 5
FPResetTime = 750
FPInstantCast = 1
ForceVisibility = 30
TooltipTextID = 201
SymbolSprites = 434
Graphics = SCREAM
Properties = SELF_BUFF
PrimaryTarget = 8
Function = creature_cast_spell SPELL_SUMMON_CREATURE 0
ValidateSourceFunc = validate_source_generic 0 0
ValidateTargetFunc = validate_target_benefits_from_offensive 0 0

[instance50]
Name = RANGED_HEAL
Time = 10
ActionTime = 6
ResetTime = 400
FPTime = 5
FPActionTime = 3
FPResetTime = 250
FPInstantCast = 0
ForceVisibility = 10
TooltipTextID = 1066
SymbolSprites = 786
Graphics = ATTACK
RangeMin = MIN
RangeMax = 5120
PrimaryTarget = 6
Properties = RANGED_BUFF SELF_BUFF NEEDS_TARGET
Function = creature_cast_spell SPELL_HEAL 0
ValidateSourceFunc = validate_source_even_in_prison 0 0
ValidateTargetFunc = validate_target_benefits_from_healing 0 0
SearchTargetsFunc = search_target_ranged_heal 0 0

[instance51]
Name = RANGED_SPEED
Time = 10
ActionTime = 6
ResetTime = 550
FPTime = 5
FPActionTime = 3
FPResetTime = 500
FPInstantCast = 0
ForceVisibility = 10
TooltipTextID = 654
SymbolSprites = 792
Graphics = ATTACK
RangeMin = MIN
RangeMax = 5120
PrimaryTarget = 6
Properties = RANGED_BUFF SELF_BUFF NEEDS_TARGET
Function = creature_cast_spell SPELL_SPEED 0
ValidateSourceFunc = validate_source_generic 0 0
ValidateTargetFunc = validate_target_generic 0 0
SearchTargetsFunc = search_target_generic 0 0

[instance52]
Name = RANGED_ARMOUR
Time = 10
ActionTime = 6
ResetTime = 400
FPTime = 5
FPActionTime = 3
FPResetTime = 250
FPInstantCast = 0
ForceVisibility = 10
TooltipTextID = 655
SymbolSprites = 780
Graphics = ATTACK
RangeMin = MIN
RangeMax = 5120
PrimaryTarget = 6
Properties = RANGED_BUFF SELF_BUFF NEEDS_TARGET
Function = creature_cast_spell SPELL_ARMOUR 0
ValidateSourceFunc = validate_source_generic 0 0
ValidateTargetFunc = validate_target_benefits_from_defensive 0 0
SearchTargetsFunc = search_target_generic 0 0

[instance53]
Name = RANGED_REBOUND
Time = 10
ActionTime = 6
ResetTime = 400
FPTime = 5
FPActionTime = 3
FPResetTime = 250
FPInstantCast = 0
ForceVisibility = 10
TooltipTextID = 1069
SymbolSprites = 788
Graphics = ATTACK
RangeMin = MIN
RangeMax = 5120
PrimaryTarget = 6
Properties = RANGED_BUFF SELF_BUFF NEEDS_TARGET
Function = creature_cast_spell SPELL_REBOUND 0
ValidateSourceFunc = validate_source_generic 0 0
ValidateTargetFunc = validate_target_benefits_from_missile_defense 0 0
SearchTargetsFunc = search_target_generic 0 0

[job0]
; Empty job, indicates no job assigned
Name = NULL
PlayerFunctions = none none
CoordsFunctions = none none

[job1]
; Tunneling, not used
Name = TUNNEL
InitialState = TunnellerDoingNothing
ContinueState = Tunnelling
PlayerFunctions = none none
CoordsFunctions = none none

[job2]
; Digging, not used
Name = DIG
InitialState = ImpArrivesAtDigDirt
ContinueState = ImpDigsDirt
PlayerFunctions = none none
CoordsFunctions = none none

[job3]
; Researching rooms and spells in the library
; Name of the job
Name = RESEARCH
; A room role to be assigned for the room within which the job is being done
RelatedRoomRole = ROOM_ROLE_RESEARCH
; Initial creature state to enter when starting the job
InitialState = AtResearchRoom
; The state used to continue the job after init
ContinueState = Researching
; Whether and how the job can be initiated by dropping creature into related room
; Options are:
;    OWNED_CREATURES,OWNED_DIGGERS,ENEMY_CREATURES,ENEMY_DIGGERS - selects kind of creatures
;        which can be assigned to this job
;    HUMAN_DROP,COMPUTER_DROP - whether human players and computer players can
;        assign the job by dropping a creature from hand
;    CREATURE_INIT - whether the job can be started when a creature is created within the room,
;        or level has a pre-placed creature in that room 
;    AREA_WITHIN_ROOM - whether players can assign the job by dropping a creature into related room
;    AREA_OUTSIDE_ROOM - whether players can assign the job by dropping a creature into some place
;        which is not a room (claimed area, path etc.)
;    WHOLE_AREA,CENTER_ONLY,BORDER_ONLY - continous area selection where the creature have to
;        be dropped for the job to be assigned; center means an area surrounded by the same slab
;    NEEDS_HAVE_JOB - only allow to assign this job by human or computer player if it is
;        in primary or secondary jobs list of the creature
Assign = OWNED_CREATURES HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM WHOLE_AREA
; Function used to assign the job to a creature after a break, or if it's primary/secondary job
; Not all jobs need to have this set - you may have "none" for jobs which are never assigned this way
PlayerFunctions = can_do_research work_in_room
; Function used to assign the job to a creature by dropping at specific map coordinates
; Not all jobs need to have this set - you may have "none" for jobs which are never assigned this way
CoordsFunctions = can_do_research work_in_room
; Job properties
; Options are:
;    NEEDS_CAPACITY - whether the job performed in a room requires and consumes worker capacity
;        within the room 
;    WORK_WHOLE_AREA,WORK_CENTER_ONLY,WORK_BORDER_ONLY - room area selection where the creature will work
;        within related room 
;    NO_SELF_CONTROL - creature has no control over its job while doing this action, cannot stop by itself
;    NO_GROUPS - creature is removed from a group before the job is assigned
;    ALLOW_CHICKENIZED - allow creatures turned into chickens to be assigned to that job
Properties = WORK_WHOLE_AREA NEEDS_CAPACITY

[job4]
; Training job
Name = TRAIN
RelatedRoomRole = ROOM_ROLE_TRAIN_EXP
InitialState = AtTrainingRoom
ContinueState = Training
Assign = OWNED_CREATURES OWNED_DIGGERS HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM WHOLE_AREA
PlayerFunctions = can_do_training work_in_room
CoordsFunctions = can_do_training work_in_room
Properties = WORK_WHOLE_AREA NEEDS_CAPACITY

[job5]
; Manufacturing traps and doors in workshop
Name = MANUFACTURE
RelatedRoomRole = ROOM_ROLE_CRATES_MANUFACTURE
InitialState = AtWorkshopRoom
ContinueState = Manufacturing
Assign = OWNED_CREATURES HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM WHOLE_AREA
PlayerFunctions = can_do_manufacturing work_in_room
CoordsFunctions = can_do_manufacturing work_in_room
Properties = WORK_WHOLE_AREA NEEDS_CAPACITY

[job6]
; Scavenging enemy and neutral creatures to join the player
Name = SCAVENGE
RelatedRoomRole = ROOM_ROLE_SCAVENGE
InitialState = AtScavengerRoom
ContinueState = Scavengering
Assign = OWNED_CREATURES HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM WHOLE_AREA
PlayerFunctions = can_do_scavenging work_in_room
CoordsFunctions = can_do_scavenging work_in_room
Properties = WORK_WHOLE_AREA NEEDS_CAPACITY

[job7]
; Torture for pleasure, with no health loss and possibility to quit any time; only creatures which
; have it as primary or secondary job can use it, others will start painful torture only
Name = KINKY_TORTURE
RelatedRoomRole = ROOM_ROLE_TORTURE
InitialState = AtKinkyTortureRoom
ContinueState = KinkyTorturing
Assign = OWNED_CREATURES CREATURE_INIT HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM WHOLE_AREA NEEDS_HAVE_JOB
PlayerFunctions = can_do_job_always work_in_room
CoordsFunctions = can_do_job_always work_in_room
Properties = WORK_WHOLE_AREA NEEDS_CAPACITY NO_GROUPS

[job8]
; Joining an already started fight somewhere on the map
Name = FIGHT
RelatedEvent = MEVENT_ENEMYFIGHT
InitialState = CreatureDoingNothing
ContinueState = None
Assign = OWNED_CREATURES OWNED_DIGGERS ENEMY_CREATURES ENEMY_DIGGERS
PlayerFunctions = can_join_fight move_to_event
CoordsFunctions = none none
Properties = 

[job9]
; Looking for enemy to fight
; Computer player may use this jobs check function when picking creatures to attack
Name = SEEK_THE_ENEMY
InitialState = SeekTheEnemy
ContinueState = None
Assign = OWNED_CREATURES OWNED_DIGGERS ENEMY_CREATURES ENEMY_DIGGERS
PlayerFunctions = can_do_job_always in_state_internal
CoordsFunctions = can_do_job_always none
Properties = 

[job10]
; Walk around in guard post
Name = GUARD
RelatedRoomRole = ROOM_ROLE_GUARD
InitialState = AtGuardPostRoom
ContinueState = Guarding
Assign = OWNED_CREATURES CREATURE_INIT HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM WHOLE_AREA
PlayerFunctions = can_do_job_always work_in_room
CoordsFunctions = can_do_job_always work_in_room
Properties = WORK_WHOLE_AREA NEEDS_CAPACITY

[job11]
; Persuade other creatures to follow - not working
Name = GROUP
Assign = OWNED_CREATURES OWNED_DIGGERS ENEMY_CREATURES ENEMY_DIGGERS
PlayerFunctions = can_do_barracking none
CoordsFunctions = none none
Properties = 

[job12]
; Join other creatures into group in barracks
Name = BARRACK
RelatedRoomRole = ROOM_ROLE_MAKE_GROUP
InitialState = AtBarrackRoom
ContinueState = Barracking
; Maybe computer should be able to place creatures in barracks?
Assign = OWNED_CREATURES HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM WHOLE_AREA
PlayerFunctions = can_do_barracking work_in_room
CoordsFunctions = can_do_job_always work_in_room
Properties = WORK_WHOLE_AREA NEEDS_CAPACITY

[job13]
; Pray in temple
Name = TEMPLE_PRAY
RelatedRoomRole = ROOM_ROLE_HAPPY_PRAY
InitialState = AtTemple
ContinueState = PrayingInTemple
Assign = OWNED_CREATURES HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM BORDER_ONLY
PlayerFunctions = can_do_job_always work_in_room
CoordsFunctions = can_do_job_always work_in_room_and_cure
Properties = WORK_BORDER_ONLY NEEDS_CAPACITY ALLOW_CHICKENIZED

[job14]
; Freeze any enemy creatures starving in prison
Name = FREEZE_PRISONERS
RelatedRoomRole = ROOM_ROLE_PRISON
InitialState = CreatureFreezePrisonrs
ContinueState = None
Assign = OWNED_CREATURES WHOLE_AREA NEEDS_HAVE_JOB
PlayerFunctions = can_freeze_prisoners in_state_on_room_content
CoordsFunctions = none none
Properties = WORK_WHOLE_AREA

[job15]
; Go into unexplored but accessible areas of the map
Name = EXPLORE
InitialState = CreatureExploreDungeon
ContinueState = None
Assign = OWNED_CREATURES OWNED_DIGGERS ENEMY_CREATURES ENEMY_DIGGERS
PlayerFunctions = can_do_job_always in_state_internal
CoordsFunctions = none none
Properties = 

[job16]
; Leave the dungeon through entrance
Name = EXEMPT
RelatedRoomRole = ROOM_ROLE_POOL_LEAVE
InitialState = CreatureExempt
ContinueState = None
Assign = OWNED_CREATURES ENEMY_CREATURES HUMAN_DROP AREA_WITHIN_ROOM WHOLE_AREA ONE_TIME
PlayerFunctions = can_do_job_always none
CoordsFunctions = can_do_job_always work_in_room
Properties = WORK_CENTER_ONLY NO_GROUPS

[job17]
; Sink into temple waters as sacrifice for dark gods
Name = TEMPLE_SACRIFICE
RelatedRoomRole = ROOM_ROLE_SACRIFICE
InitialState = CreatureSacrifice
ContinueState = CrtrBeingSacrificed
Assign = OWNED_CREATURES OWNED_DIGGERS ENEMY_CREATURES ENEMY_DIGGERS HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM CENTER_ONLY ONE_TIME
PlayerFunctions = can_do_job_always none
CoordsFunctions = can_do_job_always in_state_internal
Properties = WORK_CENTER_ONLY NO_SELF_CONTROL NO_GROUPS

[job18]
; Torture which persuades enemies to convert, or motivates your creatures
Name = PAINFUL_TORTURE
RelatedRoomRole = ROOM_ROLE_TORTURE
InitialState = AtTortureRoom
ContinueState = Torturing
Assign = OWNED_CREATURES ENEMY_CREATURES ENEMY_DIGGERS CREATURE_INIT HUMAN_DROP AREA_WITHIN_ROOM WHOLE_AREA ONE_TIME
PlayerFunctions = can_do_job_always none
CoordsFunctions = can_do_job_always work_in_room
Properties = WORK_WHOLE_AREA NEEDS_CAPACITY NO_SELF_CONTROL NO_GROUPS

[job19]
; Slowly dying of hunger at prison
Name = CAPTIVITY
RelatedRoomRole = ROOM_ROLE_PRISON
InitialState = CrtrArrivedAtPrison
ContinueState = CreatureInPrison
Assign = OWNED_CREATURES ENEMY_CREATURES ENEMY_DIGGERS CREATURE_INIT HUMAN_DROP AREA_WITHIN_ROOM WHOLE_AREA ONE_TIME
PlayerFunctions = can_do_job_always none
CoordsFunctions = can_do_job_always work_in_room
Properties = WORK_WHOLE_AREA NEEDS_CAPACITY NO_SELF_CONTROL NO_GROUPS ALLOW_CHICKENIZED

[job20]
; Placing any valuables in pockets into players treasury
Name = PLACE_IN_VAULT
RelatedRoomRole = ROOM_ROLE_GOLD_STORAGE
InitialState = ImpDropsGold
ContinueState = None
Assign = OWNED_DIGGERS HUMAN_DROP AREA_WITHIN_ROOM WHOLE_AREA ONE_TIME
PlayerFunctions = can_do_job_always none
CoordsFunctions = can_place_in_vault work_in_room
Properties = WORK_WHOLE_AREA

[job21]
; Taking salary from the treasury
Name = TAKE_SALARY
RelatedRoomRole = ROOM_ROLE_GOLD_STORAGE
InitialState = CreatureTakeSalary
ContinueState = None
Assign = OWNED_CREATURES HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM WHOLE_AREA ONE_TIME
PlayerFunctions = can_do_job_always none
CoordsFunctions = can_take_salary work_in_room
Properties = WORK_WHOLE_AREA

[job22]
; Eating in the hatchery
Name = TAKE_FEED
RelatedRoomRole = ROOM_ROLE_FOOD_STORAGE
InitialState = CreatureArrivedAtGarden
ContinueState = CreatureEat
Assign = OWNED_CREATURES HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM WHOLE_AREA ONE_TIME
PlayerFunctions = can_do_job_always none
CoordsFunctions = can_do_job_always work_in_room
Properties = WORK_WHOLE_AREA

[job23]
; Sleeping in lair, also includes making new lair in the room
Name = TAKE_SLEEP
RelatedRoomRole = ROOM_ROLE_HEAL_SLEEP
InitialState = CreatureGoingToSleep
ContinueState = CreatureSleep
Assign = OWNED_CREATURES HUMAN_DROP COMPUTER_DROP AREA_WITHIN_ROOM WHOLE_AREA ONE_TIME
PlayerFunctions = can_do_job_always none
CoordsFunctions = can_take_sleep sleep_in_lair
; Sleeping doesn't consume room capacity, because the lair itself does - no NEEDS_CAPACITY here
Properties = WORK_WHOLE_AREA

[angerjob0]
Name = NULL

[angerjob1]
Name = KILL_CREATURES

[angerjob2]
Name = DESTROY_ROOMS

[angerjob3]
Name = LEAVE_DUNGEON

[angerjob4]
Name = STEAL_GOLD

[angerjob5]
Name = DAMAGE_WALLS

[angerjob6]
Name = MAD_PSYCHO

[angerjob7]
Name = PERSUADE

[angerjob8]
Name = JOIN_ENEMY

[angerjob9]
Name = UNKNOWN1

[attackpref0]
Name = NULL

[attackpref1]
Name = MELEE

[attackpref2]
Name = RANGED
