/
tdm_ai.def
1295 lines (995 loc) · 65.9 KB
/
tdm_ai.def
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
entityDef atdm:ai_base
{
"editor_displayFolder" "AI/Internal/Base Class"
"scriptobject" "ai_darkmod_base"
"editor_color" "1 .5 0"
"editor_mins" "-24 -24 0"
"editor_maxs" "24 24 64"
"editor_showangle" "1"
"editor_copy" "anim"
"editor_usage" "Don't use. Base class for all TDM AI entities."
"editor_float melee_damage_mod" "When the AI hits with a melee weapon, this multiplies the default damage done by the weapon."
"editor_bool 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."
"editor_float 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."
"editor_bool 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."
"editor_float flatfooted_time" "The duration in milliseconds that this AI remains flat footed after a combat action triggers this state."
"editor_float flatfoot_parry_num" "When an AI parries, only the first few parries will make them flat footed. This spawnarg defines how many parries will work before a timer kicks in."
"editor_float flatfoot_parry_time" "Determines how long it takes before the AI can be rendered flat-footed by a parry again. This is measured from the last time they succesfully parry, so the player must 'surprise' them again by waiting until they haven't parried in a while, and can't just spam attack."
"editor_float fov" "AIs full field of view in degrees. Will be used for both horizontal and vertical fov unless vertical is explicitly specified."
"editor_float fov_vert" "AIs full vertical field of view in degrees. Leave blank or set to -1 to use the same value as the horizontal fov."
"editor_vector 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."
"editor_float acuity_vis" "AI visual acuity (in percent)"
"editor_float acuity_aud" "AI aural acuity (in percent)"
"editor_float acuity_tact" "AI tactile acuity (in percent)"
"editor_float acuity_env" "AI environmental acuity. How sensitive the AI is to things that have changed in its environment. (In percent)"
"editor_float 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."
"editor_bool patrol" "If set to 1, the AI will patrol along pathnodes from the start of the map."
"editor_bool animal_patrol" "Set this to 1 to let the AI use the animal patrol task instead of the ordinary path_corner routine. It will wander aimlessly around instead of following a predefined path."
"editor_float startpos_tolerance" "When returning to their idle position after an alert, the AI uses their bounding box by default to check whether they have reached their destination. Setting this spawnarg to values >= 0 will change the size of the bounding box check."
"editor_bool sitting" "If true, AI will be sitting at map start."
"editor_var sitting_turn_pivot" "The offset of the pivot for turning while seated."
"editor_float sit_down_slide_dist" "Lets the AI slide back onto the seat."
"editor_float sit_down_angle" "If this is set, AI will turn to face this direction after sitting down."
"editor_bool drunk" "If set to 1, AI will be drunk"
"editor_float drunk_acuity_factor" "If the AI is drunk, their acuities (visual, hearing, tactile) will be reduced by this factor."
"editor_float stepvol_walk" "Modifies audible AI walking footstep volume"
"editor_float stepvol_run" "Modifies audible AI running footstep volume"
"editor_float alert_thresh1" "The alert level threshold for reaching ObservantState (bark, but otherwise no reaction)."
"editor_float alert_time1" "The time it takes for the alert level to ramp down from the upper to the lower threshold in ObservantState (in seconds)."
"editor_float alert_time1_fuzzyness" "Applies some randomness to the alert time (in seconds)."
"editor_float alert_gracetime1" "After being alerted, the AI will ignore additional alerts during the grace period (in seconds), to avoid adding up the alert level too quickly."
"editor_float alert_gracefrac1" "An alert that is higher than the last increase times the grace fraction will terminate the grace period."
"editor_float alert_gracecount1" "If the number of additional alerts during the grace period exceeds the grace count, the grace period will be terminated."
"editor_float alert_thresh2" "The alert level threshold for reaching SuspiciousState (bark, look, may stop and turn)."
"editor_float alert_time2" "The time it takes for the alert level to ramp down from the upper to the lower threshold in SuspiciousState (in seconds)."
"editor_float alert_time2_fuzzyness" "Applies some randomness to the alert time (in seconds)"
"editor_float alert_gracetime2" "After being alerted, the AI will ignore additional alerts during the grace period (in seconds), to avoid adding up the alert level too quickly"
"editor_float alert_gracefrac2" "An alert that is higher than the last increase times the grace fraction will terminate the grace period"
"editor_float alert_gracecount2" "If the number of additional alerts during the grace period exceeds the grace count, the grace period will be terminated"
"editor_float alert_thresh3" "The alert level threshold for reaching SearchingState (Investigation)"
"editor_float alert_time3" "The time it takes for the alert level to ramp down from the upper to the lower threshold in SearchingState (in seconds)"
"editor_float alert_time3_fuzzyness" "Applies some randomness to the alert time (in seconds)"
"editor_float alert_gracetime3" "After being alerted, the AI will ignore additional alerts during the grace period (in seconds), to avoid adding up the alert level too quickly"
"editor_float alert_gracefrac3" "An alert that is higher than the last increase times the grace fraction will terminate the grace period"
"editor_float alert_gracecount3" "If the number of additional alerts during the grace period exceeds the grace count, the grace period will be terminated"
"editor_float alert_thresh4" "The alert level threshold for reaching AgitatedSearchingState (Investigation, Weapon out, AI is quite sure that there is someone around)"
"editor_float alert_time4" "The time it takes for the alert level to ramp down from the upper to the lower threshold in AgitatedSearchingState (in seconds)"
"editor_float alert_time4_fuzzyness" "Applies some randomness to the alert time (in seconds)"
"editor_float alert_gracetime4" "After being alerted, the AI will ignore additional alerts during the grace period (in seconds), to avoid adding up the alert level too quickly"
"editor_float alert_gracefrac4" "An alert that is higher than the last increase times the grace fraction will terminate the grace period"
"editor_float alert_gracecount4" "If the number of additional alerts during the grace period exceeds the grace count, the grace period will be terminated"
"editor_float alert_thresh5" "The alert level threshold for reaching CombatState"
"editor_float alert_decrease_deadtime" "The time in msecs to pass before the AI's alert level is allowed to decrease again (after any increase)."
"editor_float alert_time_fleedone" "Time the AI will stay after fleeing before getting back to normal (in seconds)"
"editor_float alert_time_fleedone_fuzzyness" "Applies some randomness to the fleedone time (in seconds)"
"editor_float alert_initial" "Initial alert level at map start."
"editor_bool alert_idle" "The AI will be in alert_idle instead of idle state at map start (no idle barks and animations, as if seen evidence of intruders before)."
"editor_bool disable_alert_idle" "If set to 1, the AI will not switch to alert idle behavior (weapon out, no idle barks and animations) when it has seen evidence of intruders before."
"editor_float idle_bark_interval_min" "Minimum time between idle barks"
"editor_float idle_bark_interval_max" "Maximum time between idle barks"
"editor_float alert_idle_bark_interval_min" "Minimum time between alert idle barks (played when the AI has seen evidence of intruders before)"
"editor_float alert_idle_bark_interval_max" "Maximum time between alert idle barks (played when the AI has seen evidence of intruders before)"
"editor_float sleep_bark_interval_min" "Minimum time between barks while sleeping"
"editor_float sleep_bark_interval_max" "Maximum time between barks while sleeping"
"editor_var 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."
"editor_var 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."
"editor_bool 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."
"editor_bool unarmed_ranged" "Set this to 1 when this type of AI doesn't need weapons for ranged combat. This is usually true for belchers."
"editor_var idle_animations" "A set of animation states to be played by the idle AI. See the AI's script object for possible Animation State functions."
"editor_var idle_animations_searching" "A set of animation states to be played by an AI when it is participating in a search as a guard or observer. See the AI's script object for possible Animation State functions."
"editor_var replace_anim" "Defines a set of animations that are to replace the default animations of the AI, depending on the state. Can be set on a bound entity, so that whenever this entity is bound to an AI, the animations change (and only then). Example: replace_anim_idle set to 'idle_torch' on a AI-carryable torch replaces the default set of idle animations with a specific torch one whenever the AI has the torch in his hand."
"editor_var idle_animations_interval" "Defines the interval the idle animations should be played, in seconds. An uncertainty of +/- 20% is automatically applied by the code."
"editor_var idle_search_animations_interval" "Defines the interval the idle search animations should be played, in seconds. An uncertainty of +/- 20% is automatically applied by the code." // grayman #3857
"editor_int max_interleave_think_frames" "The AI will think only once in this number of frames if the distance to the player is larger than max_interleave_think_dist."
"editor_float min_interleave_think_dist" "The distance where the AI switches from thinking every frame to interleaved thinking."
"editor_float max_interleave_think_dist" "The distance where the AI thinks only once in max_interleave_think_frames. Thinking frequency decreases linearly in between."
"editor_var can_unlock" "Names of doors this AI is able to unlock. Similar to 'used_by', multiple spawnargs of 'can_unlock' are allowed, suffixed with numbers, like 'can_unlock2'."
"editor_float chanceNoticeWeapon" "Chance to notice the visual stim of suspicious weapons"
"editor_float chanceNoticeSuspiciousItem" "Chance to notice the visual stim of suspicious items"
"editor_float chanceNoticePerson" "Chance to notice the visual stim of other persons"
"editor_float chanceNoticeMonster" "Chance to notice the visual stim of a monster"
"editor_float chanceNoticeUndead" "Chance to notice the visual stim on an undead"
"editor_float chanceNoticeBlood" "Chance to notice the visual stim of blood"
"editor_float chanceNoticeLight" "Chance to notice the visual stim of a light that should be on"
"editor_float chanceNoticeMissingItem" "Chance to notice the visual stim of a missing item"
"editor_float chanceNoticeBrokenItem" "Chance to notice the visual stim of a broken item"
"editor_float chanceNoticeDoor" "Chance to notice the visual stim of an open door that should be closed"
"editor_float chanceNoticePickedPocket" "Chance to notice that an object bound to the AI has been stolen" // grayman #3559
"editor_float pickpocket_delay_min" "Minimum delay before reacting to a picked pocket" // grayman #3559
"editor_float pickpocket_delay_max" "Maximum delay before reacting to a picked pocket" // grayman #3559
"editor_float pickpocket_alert" "Incremental alert value to be added to an AI's current alert level" // grayman #3559
"editor_bool canLightTorches" "AI ability to switch on torches"
"editor_bool canOperateSwitchLights" "AI ability to operate light switches"
"editor_bool canOperateDoors" "AI ability to handle doors"
"editor_bool canOperateElevators" "AI ability to handle elevators"
"editor_bool canGreet" "AI ability to greet other actors"
"editor_bool push_off_player" "If set to 1, a player that tries to stand on top of this AI will be pushed off (if the AI is alive)"
"editor_float searchbark_delay_min" "Minimum time between barks during searching (in seconds)"
"editor_float searchbark_delay_max" "Maximum time between barks during searching (in seconds)"
"editor_var max_area_reevaluation_interval" "The minimum time that needs to pass by before the AI re-evaluates a forbidden area (msec)"
"editor_var door_retry_time" "The time that needs to pass before locked doors are enabled for another try (seconds)"
"editor_float headturn_delay_min" "Minimum time between random head turns (sec)"
"editor_float headturn_chance_idle" "The chance for random head turning while idle (0.0-1.0)"
"editor_float headturn_factor_alerted" "The headturning chance gets multiplied by this amount when the AI is alerted"
"editor_float headturn_yaw" "The maximum yaw angle of random head turning (deg)"
"editor_float headturn_pitch" "The maximum pitch angle of random head turning (deg)"
"editor_float headturn_duration_min" "The minimum duration of random head turning (sec)"
"editor_float headturn_duration_max" "The maximum duration of random head turning (sec)"
"editor_float step_up_increase" "The amount in units the AI is translated upwards when stepping up to prevent gravity from dragging them down immediately."
"editor_float reachedpos_bbox_expansion" "This expands the bounding box when the AI is checking for reached positions, default is 0. Don't change this unless you know what you're doing."
"editor_float aas_reachability_z_tolerance" "Defines the maximum vertical tolerance within wich a point above an AAS area is still considered reachable. Defaults to 75 units."
"editor_bool shoulderable" "Sets whether the AI can be shouldered by the player when dead or unconscious (true by default, AI that can't be shouldered must be set so)"
"editor_string shouldered_name" "Name displayed under the shouldered body icon when this AI is shouldered and alive."
"editor_string shouldered_name_dead" "Name displayed under the shouldered body icon when this AI is shouldered and dead."
"editor_float shouldered_maxspeed" "Player speed is limited to this fraction of maximum sprint speed when the player is carrying this AI's body."
"editor_var movetype" "The movetype (= move algorithm) used for this AI. See ai_base.script for possible values, default is ANIM."
"editor_bool bleed" "If set to true, this entity will bleed, e.g. spawn blood particles and decals when hurt."
"editor_var use_aas" "The name of the AAS type. This controls how big the AI is and thus which grid to use to calculate the information for path finding and navigation."
"editor_bool arrowsticking_forceenabled" "If set to true, arrows will always stick into this AI, regardless whether it is live or dead."
"editor_bool arrowsticking_disabled" "If set to true, arrows will never stick into this AI, regardless whether it is live or dead."
"editor_var def_head" "For models with swappable heads (usually all humanoids), the name of the entity that is to be attached as head."
"editor_bool sleeping" "If true, the AI is sleeping."
"editor_var lay_down_left" "Determines the direction to which the character will lay down at map start when sleeping is true. 0 = right, 1 = left."
"editor_var lay_down_slide_dist" "This will move the AI further onto the bed while lying down."
"editor_bool 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."
"editor_bool is_civilian" "If true, the AI is a civilian. Defaults to 0."
"editor_string personGender" "For AI with 'AIUse' set to 'AIUSE_PERSON', defines the gender of the person. Can be either PERSONGENDER_MALE, PERSONGENDER_FEMALE or PERSONGERNDER_UNKNOWN."
"editor_string personType" "For AI with 'AIUse' set to 'AIUSE_PERSON', defines the type of the person. Can be one of PERSONTYPE_GENERIC, PERSONTYPE_UNKNOWN, or any of PERSONTYPE_BUILDER, PERSONTYPE_CITYWATCH, PERSONTYPE_PAGAN, PERSONTYPE_NOBLE etc."
"editor_var 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."
"editor_bool ko_immune" "0 = not immune, 1 = immune to blackjack"
"editor_bool gas_immune" "0 = not immune, 1 = immune to gas"
"editor_float ko_alert_state" "Alert state number at which knockout behavior changes."
"editor_float ko_alert_immune_state" "Alert state number at which immunity behavior changes."
"editor_bool ko_alert_immune" "If true, the AI is immune to knockouts when alerted at or above the alert state defined in 'ko_alert_state'."
"editor_vector 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."
"editor_float 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."
"editor_float 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."
"editor_float ko_angle_alert_horiz" "Horizontal knockout cone angle when the AI is alerted at or above 'ko_alert_state'."
"editor_float ko_angle_alert_vert" "Vertical knockout cone angle when the AI is alerted at or above 'ko_alert_state'."
"editor_vector 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."
"editor_float sneak_attack_alert_state" "Alert state number at which the AI can no longer be sneak attacked."
"editor_float 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'."
"editor_int low_health_threshold" "When the AI's health drops below this value, the script 'low_health_script' will be invoked. Set this to -1 (which is the default) to disable this feature."
"editor_string low_health_script" "When the AI's health drops below 'low_health_threshold', this script will be called. The script must either take one entity argument (for global functions) or be a scriptobject member method without arguments."
"editor_vector offsetHeadModel" "A vector with an offset to move the head into a better position relative to this model. (Seems currently not to work anymore.)"
"editor_float eye_height" "Height of the eyes above the floor, in units. Used for vision and visibility checks."
"editor_var door_open_delay_on_use_anim" "Offset in msecs to wait before an AI is opening/closing a door after starting to play the 'use' anim. Defaults to 1100."
"editor_float blind_time" "The time span in seconds the AI is staying in 'blinded' state when hit by a flashbomb or -mine. See also blind_time_fuzziness."
"editor_float blind_time_fuzziness" "This is the random portion of 'blind_time'. A value in [blind_time-fuzziness ... blind_time+fuzziness] is chosen."
"editor_var def_vocal_set" "Defines the entity with the vocal set for this AI, defaulting to 'atdm:ai_vocal_set_base'."
"editor_var snd_rustle" "Defines the sound the AI makes in between footsteps. Should match what the AI is wearing. Defaults to 'default_rustle'."
"editor_var state_name_0" "The name of the first (initial) AI state. Don't touch this unless you know what you're doing."
"editor_var state_name_1" "The name of the second AI state. Don't touch this unless you know what you're doing."
"editor_var state_name_2" "The name of the third AI state. Don't touch this unless you know what you're doing."
"editor_var state_name_3" "The name of the fourth AI state. Don't touch this unless you know what you're doing."
"editor_var state_name_4" "The name of the fifth AI state. Don't touch this unless you know what you're doing."
"editor_var state_name_5" "The name of the combat (topmost) AI state. Don't touch this unless you know what you're doing."
"editor_bool set_frobable_on_death" "If true, the AI becomes frobable when dead, defaults to true."
"editor_bool set_frobable_on_knockout" "If true, the AI becomes frobable when KOd, defaults to true."
"editor_bool nonsolid_on_ragdoll" "If true (default), this AI becomes nonsolid when switching to ragdoll mode."
"editor_bool enable_death_anim" "If true, this AI plays the 'death' animation on torso and legs channel. Defaults to 0 (disabled)."
"editor_bool noDamage" "if true, monster won't take damage."
"editor_var enemy" "Set to name of character to attack when activated."
"editor_var attack_path" "When activated, either by sight or by trigger, follow a path of path_corners to the end and then attack. Monster will not play sight or 'on_activate' animation. Will exit path if enemy gets too close, unless 'stay_on_attackpath' is set."
"editor_var stay_on_attackpath" "don't exit attack_path when close to enemy."
"editor_var anim" "Animation to cycle when spawned in."
"editor_var num_cinematics" "When set, character is in cinematic mode. Remains hidden until triggered, then plays each anim in sequence, then triggers targets becomes hidden once more. Anims are specified by setting 'anim1', 'anim2', 'anim3', etc."
"editor_var cinematic_no_hide" "When set, character won't hide after playing cinematics."
"editor_var on_activate" "Animation to play when monster sees player or is triggered. Set to blank to make monster immediately start attacking the player without playing an animation."
"editor_var on_activate_blend" "# of frames to blend out of 'on_activate' animation when it's done playing. Default is 4 frames."
"editor_var trigger_anim" "Monster remains hidden until triggered, plays anim specified and immediately goes after the player."
"editor_var wake_on_attackcone" "Monster will wake up and attack when player enters it's attack cone. Monster will also wake up when triggered or shot."
"editor_var walk_on_trigger" "Monster begins following his path when triggered but doesn't get angry right away. Do not set 'attack_path' or 'trigger' with 'walk_on_trigger'."
"editor_var trigger" "If set, monster will only become angry when triggered or damaged, and not on sight. Monster will play 'anim' until triggered, or follow his path. If 'attack_path' is set, monster waits until triggered to follow it. Do not set 'walk_on_trigger' when using 'trigger'."
"editor_var hide" "Causes monster to be hidden and nonsolid until triggered. Set to 2 for single trigger (entity wakes up when unhidden)."
"editor_var target" "set of path_* entities to visit."
"editor_var wander" "if set to 1, visit path_* targets randomly, otherwise visit them in order."
"editor_var wait" "How long to wait before following path. Monster will be unresponsive until this time has passed."
"editor_var neverdormant" "If set to 1, monsters do not sleep outside your PVS"
"editor_var ignore_obstacles" "If set, monster doesn't avoid obstacles. Generally should only be used for cinematics when you need monster to exactly follow a path."
"editor_bool noshadows" "turns off shadows on character."
"editor_var animate_z" "disables gravity on character until he wakes up. used for on_activate anims where the bounding box needs to move up and down."
"editor_float kick_force" "how much force to apply to blocking obstacles to get them out of the way."
"editor_int team" "Monsters do not actively attack players or monsters with the same team #."
"editor_int rank" "Monsters only fight back when attacked by members of it's own team when its rank is greater than or equal to the attacker's rank. A rank of 0 will never fight back."
"editor_float turn_rate" "Maximum # of degrees monster can turn per second"
"editor_float mass" "Character's mass in kg."
"editor_var ragdoll" "Specifies the .af file to use for a ragdoll when the creature dies"
"editor_var ragdoll_slomoStart" "Start time of ragdoll slow motion relative to death time, defaults to -0.2"
"editor_var ragdoll_slomoEnd" "End time of ragdoll slow motion relative to death time, defaults to 1.0"
"editor_var ragdoll_jointFrictionDent" "Joint friction dent on ragdoll."
"editor_var ragdoll_jointFrictionStart" "Start time for joint friction dent"
"editor_var ragdoll_jointFrictionEnd" "End time for joint friction dent"
"editor_var ragdoll_contactFrictionDent" "Contact friction dent on ragdoll."
"editor_var ragdoll_contactFrictionStart" "Start time for contact friction dent"
"editor_var ragdoll_contactFrictionEnd" "End time for contact friction dent"
"editor_bool af_push_moveables" "whether the monster's articulated figure pushes obstacles while they're alive."
"editor_float blink_min" "Minimum time to wait between eye blinks."
"editor_float blink_max" "Maximum time to wait between eye blinks."
"editor_float fly_offset" "Preferred fly height relative to the player's view"
"editor_float fly_speed" "Speed to fly at."
"editor_float fly_bob_strength" "How far flying creatures should bob."
"editor_float fly_bob_vert" "Rate at which flying creatures bob up and down."
"editor_float fly_bob_horz" "Rate at which flying creatures bob left and right."
"editor_var def_projectile" "name of entityDef to launch as projectile"
"editor_var num_projectiles" "how many projectiles to launch at a time."
"editor_var projectile_spread" "how much to spread out projectiles when they're fired. Works in conjunction with attack_accuracy. Good for things like shotgun blasts."
"editor_var attack_accuracy" "Maximum angular offset to randomly offset the monster's aim when firing missiles"
"editor_var attack_cone" "Monster can only throw projectile within this cone relative to his direction."
"editor_var attack_target" "Entity to fire missile at when 'fireMissileAtTarget' is called from script or 'fire_missile_at_target' as a framecommand."
"editor_var melee_range" "do melee attack when within 3x this range"
"editor_var projectile_height_to_distance_ratio" "calculates the maximum height a projectile can be thrown. for example, a projectile thrown 100 units with a projectile_height_to_distance_ratio of 0.5 will only ever be up to 50 units above the target."
"editor_bool talks" "Whether character can be engaged in conversation."
"editor_var def_drops" "entityDefs to drop when killed. Multiple drop items are defined by adding suffixes: 'def_drops1', 'def_drops2', etc."
"editor_var smokeParticleSystem" "particle system to attach to entity. To attach to a specific joint, add - and the name of the joint. For example 'fire-firejoint' attaches the 'fire' particle to the joint 'firejoint'."
"editor_var pain_delay" "How long to wait between pain animations before triggering another pain animation."
"editor_var pain_threshold" "How much damage monster has to receive in one blow for it to play a pain animation."
"editor_var damage_zone X" "List of bones that comprise damage zone 'X'. Pain anims are based on the name of the zone, for example: 'pain_chest', 'pain_rightleg_forward', etc. Directions are categorized as 'forward', 'left', 'right', or 'back'."
"editor_var damage_scale X" "How much to scale damage received to zone 'X'. For example 'damage_scale head' '10' would make head shots cause 10 times the normal amount of damage."
"editor_var bone_leftEye" "Which bone to modify to adjust the left eye"
"editor_var bone_rightEye" "Which bone to modify to adjust the right eye"
"editor_var bone_focus" "Where the character's eyes are in his head"
"editor_var look_min" "minimum angles for head looks"
"editor_var look_max" "maximum angles for head looks"
"editor_var look_joint jointname" "specifies the scale in 'pitch yaw roll' to modify the joint based on head looking. you can specify any number of joints to be affected by the head look. the scale of the joints that lead up to the head should always add up to 1 on yaw and pitch to ensure that the character looks directly at the player."
"editor_var eye_turn_min" "min angular offset for eye joint before head has to turn."
"editor_var eye_turn_max" "max angular offset for eye joint before head has to turn."
"editor_var eye_verticle_offset" "verticle offset from the player's view that the character's eyes should focus on."
"editor_var eye_horizontal_offset" "horizontal offset from the player's view that the character's eyes should focus on. negative values bring eyes closer together."
"editor_var eye_focus_rate" "how quickly the eyes focus on a target"
"editor_var head_focus_rate" "how quickly the head focuses on a target"
"editor_var focus_align_time" "how long character should glance at the player before turning his head."
//I suspect these aren't needed; turned off in 2.0
//"editor_var mtr_flashShader" "shader to use for muzzleflash"
// "editor_var flashColor" "color of muzzleflash"
// "editor_var flashRadius" "radius of muzzleflash"
// "editor_var flashTime" "how long muzzleflash lasts"
"editor_var use_combat_bbox" "Use a bounding box for damage and not per-poly hit detection."
"editor_var offsetModel" "Vector to offset the visual model from the movement bounding box."
"editor_var def_attach" "Name of entityDef to attach to model. Set 'joint' in the attached entity def to the joint to attach to, and use 'origin' and 'angles' to offset it."
"editor_var head" "Name of entityDef to attach as character's head. Copies animation from certain bones into the head model."
"editor_var eye_height" "The height off the ground of the character's eyes. All sight checks are done from this point. When set, overrides determining the height from the position of the eye joint."
"editor_var mtr_splat_flesh" "Material to use for blood splats."
"editor_var mtr_wound_flesh" "Material to use for wounds."
"editor_var smoke_wound_flesh" "Smoke effect to emit from wounds."
"editor_var gravityDir" "Direction of gravity. Defines the character's concept of 'down'."
"editor_float blockedRadius" "if monster did not move this distance within blockedMoveTime, then mark monster blocked."
"editor_float blockedMoveTime" "# of milliseconds since last move before monster marked blocked"
"editor_float blockedAttackTime" "# of milliseconds since last attack before monster marked blocked"
"editor_bool canSearch" "Whether the AI can conduct a search or not"
"editor_float hitByMoveableLookAtTime" "When hit by a moveable, stop and look at it for this long (seconds) (default 2.0)"
"editor_float hitByMoveableLookBackTime" "When hit by a moveable, look at where it came from for this long (seconds) (default 2.0)"
// ===================== Default Values =======================
"spawnclass" "idAI"
"blockedRadius" "10"
"blockedMoveTime" "750"
"blockedAttackTime" "750"
"wait" "0"
"team" "1"
"rank" "0"
"on_activate" "sight"
"def_projectile" ""
"attack_cone" "70"
"attack_accuracy" "0"
"melee_range" "0"
"projectile_height_to_distance_ratio" "0.9"
"turn_rate" "360"
"bleed" "1"
"pain_threshold" "1"
"blink_min" "2.5"
"blink_max" "8.0"
"talks" "0"
"look_min" "-80 -75 0"
"look_max" "80 75 0"
"eye_verticle_offset" "5"
"eye_horizontal_offset" "-8"
"eye_focus_rate" "0.5"
"head_focus_rate" "0.1"
"kick_force" "60"
// greebo: 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_melee" "1"
// angua: Set this to "1" if this AI can perform ranged combat without needing weapons
"unarmed_ranged" "0"
"blind_time" "8"
"blind_time_fuzziness" "4"
"chanceNoticeWeapon" "0"
"chanceNoticeSuspiciousItem" "0"
"chanceNoticePerson" "1"
"chanceNoticeMonster" "1" // grayman #3331
"chanceNoticeUndead" "1" // grayman #3343
"chanceNoticeBlood" "0"
"chanceNoticeLight" "0"
"chanceNoticeMissingItem" "0"
"chanceNoticeBrokenItem" "1"
"chanceNoticeDoor" "0"
"chanceNoticePickedPocket" "0" // grayman #3559
"canLightTorches" "0"
"canOperateSwitchLights" "0"
"canOperateDoors" "0"
"canOperateElevators" "0"
// by default the player can't stand on this AI's head forever
"push_off_player" "1"
"searchbark_delay_min" "10"
"searchbark_delay_max" "15"
// greebo: The minimum time that needs to pass by before the AI re-evaluates a forbidden area (msec)
"max_area_reevaluation_interval" "20000" // milliseconds
// greebo: This expands the bounding box when the AI is checking for reached positions,
"reachedpos_bbox_expansion" "0"
// greebo: Defines the maximum vertical tolerance within wich a point above an AAS area is still considered reachable.
"aas_reachability_z_tolerance" "75"
"step_up_increase" "0"
// greebo: The time that needs to pass before locked doors are enabled for another try (seconds)
"door_retry_time" "120" // seconds
// Default AI Alert Info:
// alert_time: is the time it takes for the alert level to ramp down from the upper to the lower threshold (in seconds)
// alert_time_fuzzyness: applies some randomness to the alert times (in seconds)
// alert_gracetime: after being alerted, the AI will ignore additional alerts during this time, to avoid adding up the alert level too quickly
// alert_gracefrac: an alert that is higher than the last increase * fraction will terminate the grace period
// alert_gracecount: If the number of additional alerts during grace period exceeds the grace count, the grace period will be terminated
"af_push_moveables" "1"
// Observant state - bark but otherwise no reaction
"alert_thresh1" "1.5"
"alert_time1" "5"
"alert_time1_fuzzyness" "1.5"
"alert_gracetime1" "2"
"alert_gracefrac1" "1.2"
"alert_gracecount1" "5"
// Suspicious state - barks and looks, may stop and turn
"alert_thresh2" "6"
"alert_time2" "8"
"alert_time2_fuzzyness" "2"
"alert_gracetime2" "2"
"alert_gracefrac2" "1.2"
"alert_gracecount2" "5"
// Searching state - AI goes investigating
"alert_thresh3" "10" // grayman #3492 - was 8
"alert_time3" "25" // grayman #3492 - was 30
"alert_time3_fuzzyness" "8" // grayman #3492 - was 10
"alert_gracetime3" "3"
"alert_gracefrac3" "1"
"alert_gracecount3" "4"
// Agitated searching - investigating, weapon out
"alert_thresh4" "18"
"alert_time4" "65"
"alert_time4_fuzzyness" "20"
"alert_gracetime4" "2"
"alert_gracefrac4" "1.0"
"alert_gracecount4" "4"
// Combat state
"alert_thresh5" "23"
// The time in msecs to pass before the AI's alert level is allowed to decrease again (after any increase).
"alert_decrease_deadtime" "2000"
// time the AI will stay after fleeing before getting back to normal
"alert_time_fleedone" "80"
"alert_time_fleedone_fuzzyness" "40"
"idle_bark_interval_min" "30"
"idle_bark_interval_max" "90"
"alert_idle_bark_interval_min" "40"
"alert_idle_bark_interval_max" "120"
"sleep_bark_interval_min" "10"
"sleep_bark_interval_max" "30"
// acuities, in percent
"acuity_vis" "100"
"acuity_aud" "100"
"acuity_tact" "100"
"acuity_other" "100"
"alert_aud_thresh" "18.8" //old value "20.2"
// not yet implemented
"acuity_env" "100"
//set a default field of view to a realistic human value
"fov" "150" // horizontal FOV (realistic human : 180-200)
"fov_vert" "120" // vertical FOV (realistic human: 120-135, but asymmetric)
/**
* Rotation of the FOV cone relative to the head joint
* (yaw pitch roll)
* Human FOV extends farther down than up, so pitch down:
**/
"fov_rotation" "0 -20 0"
"can_be_flatfooted" "1"
// time AI remain stationary after becoming flat-footed
"flatfooted_time" "1200"
// settings for becoming flat footed due to parrying an attack (see usage above)
"flatfoot_parry_num" "1"
"flatfoot_parry_time" "3500"
// bodies stick around forever by default
"editor_int burnaway" "Time until the dead body will be removed with a special effect. Set to -1 to disable it. Disabled for TDM by default."
"burnaway" "-1"
"editor_skin skin_dead" "Set this to a non-empty string to swap the AI's skin when it dies"
"editor_var fx_on_death" "The FX which will be played when this entity dies. Set to empty to disable."
"editor_var fx_on_ko" "The FX which will be played when this entity is knocked out. Set to empty to disable."
"editor_var death_script" "The script function (local or global) to call when this AI dies. Global functions need to take an entity as single argument, local functions no arguments at all. As argument is the AI passed that was just killed."
"editor_var ko_script" "The script function (local or global) to call when this AI is knocked out. Global functions need to take an entity as single argument, local functions no arguments at all. As argument is the AI passed that was just knocked out."
/**
* AIs cannot be mantled by default
**/
"is_mantleable" "0"
/**
* Hack: For now, increase player drag force 10x when dragging AI
**/
"drag_force_mod" "10.0"
// AIs are not moss-able
"nomoss" "1"
"editor_var head_bodyname" "Name of the head body on the AF. Used to detect drowning when unconscious. Not needed if the AI has a separate head model."
"head_bodyname" "head"
"editor_var head_jointname" "Name of the head joint in the md5 mesh. This joint should either be the look joint or get rotated to match the look joint in order for KO to work properly."
"head_jointname" "Head"
// default is shoulderable
"shoulderable" "1"
/**
* Ishtvan: test new system, equippable
**/
"equippable" "1"
"editor_var shouldered_name" "Generic inventory name of the body for when it is shouldered unconscious. Individual AI can overload this to display a name when carried."
"editor_var shouldered_name_dead" "Generic inventory name of the body for when it is shouldered dead. Individual AI can overload this to display a name when carried."
"shouldered_name" "#str_02410" // Body
"shouldered_name_dead" "#str_02409" // Corpse
"shouldered_maxspeed" "0.5"
"editor_vector drop_angles" "The angle used to drop this body. Bodies always try to drop lying flat, head forward."
"drop_angles" "90.0 0 0"
"editor_vector drop_point" "Offset from the player origin to the point where this AI's body is dropped. Bodies always drop straight ahead of the player's head, they don't follow where player looks up/down."
"drop_point" "30.0 0 -16.0" // changed from 35 to 30 to allow dropping in less space.
"editor_bool drop_to_hands" "If set to true, the item drops to the hands of the player instead to the ground. Default is true."
// Shoulderable bodies are not held on to when unshouldered
"drop_to_hands" "0"
// sound body makes when dropped/KO'd
"snd_bounce" "body_collapse"
"snd_bounce_carpet" "body_collapse_soft"
"snd_bounce_cloth" "body_collapse_soft"
"snd_bounce_grass" "body_collapse_soft"
"snd_bounce_snow" "body_collapse_soft"
"snd_sliding" "tdm_heavy_stone_scratching02_loop"
"snd_bounce_moss" "body_collapse_soft"
"snd_water" "water_hit_by_large_object"
"spr_object_hardness" "hard"
"spr_object_size" "small" //hard-small combination creates the best sound results (soft: 34, hard: 45)
"tdm_bounce_sound_max_vel" "50"
"tdm_bounce_sound_min_vel" "800"
// relevant to above: The collision velocities are shown when the cvar "tdm_show_moveable_collision" is on.
/**
* Test: preliminary setup for aesthetic showing of body held on shoulder
**/
/*
"equip_in_world" "1"
"equip_draw_on_top" "1"
"equip_nonsolid" "1"
*/
// default starting animation is idle
"anim" "idle"
// Name of the head animation to use for lipsync
// (Should just be a simple mouth-opening animation; fully closed at frame 1, fully open at the end. The
// lipsync code will pick out individual frames from it based on the amplitude of the lipsynced sound.)
"lipsync_anim_name" "talk1"
// patrols path nodes by default
"patrol" "1"
"animal_patrol" "0"
"movetype" "ANIM" // greebo: see ai_base.script for possible movetypes
"sitting" "0"
"sitting_turn_pivot" "-20 0 0"
"sit_down_slide_dist" "8"
"lay_down_slide_dist" "16"
"drunk_acuity_factor" "0.5"
"stepvol_walk" "10"
"stepvol_run" "15"
// never dormant by default
// Removed by Crispy; AI are still never dormant by default,
// but this is handled in code now.
// angua: Re-enabled to make it possible to set individual AI dormant
"neverDormant" "1"
"editor_bool neverDormant" "Set to 1 to make the AI never dormant. If set to 0, the AI can go dormant at map start under specific circumstances."
// Knockout info
/**
* Name of the damage zone that must be hit for possible KO
* Set this blank (i.e. : "ko_zone" "") to make the AI immune to KOs
**/
"ko_zone" "head"
/**
* ko_angle defines the KO cone extending backwards from the direction AI is
* looking. By default, you can hit AI anywhere on the head to KO them
* when they're not alert.
*
* Helmeted guards should use a lesser angle
**/
"ko_angle_horiz" "360"
"ko_angle_vert" "360"
/**
* KO cone changes when AI is alerted, this defines the new cone angle
* These settings work pretty well for not being able to hit them from the front.
**/
"ko_angle_alert_horiz" "110"
"ko_angle_alert_vert" "180"
/**
* Rotation of the KO cone relative to the head joint
**/
"ko_rotation" "0 0 0"
/**
* KO Offset in head body coordinates, relative to head joint
* Should be approximately the center of the head
* KO cone extends backwards from this point
* NOTE: Tweaked for builder guard, has the most up-to-date head setup
**/
"ko_spot_offset" "2 -2.5 0"
/**
* Name of the alert state when AI's KO behavior changes
**/
"ko_alert_state" "4" //once AI draw weapon
/**
* If set to true, AI becomes immune to KOs when alerted
**/
"ko_alert_immune" "0"
/**
* Sets AI alert immunity state
**/
"ko_alert_immune_state" "5" //Level 5 for non-helmeted AI who reach combat or level 4 for helmeted AI who are agitated searching
// end Knockout info
/**
* Name of the alert state at which AI can no longer be sneak attacked.
**/
"sneak_attack_alert_state" "2"
/**
* At alert states below the threshold defined above, ALL damage done to the AI
* gets this additional sneak attack multiplier:
**/
"sneak_attack_mult" "2.0"
"melee_predicts_proximity" "1" // very dumb AI like robots should override this
"melee_predicted_attack_time" "750" // works for our sword anims, needs overloading for animals, zombies
// Slow down the player to this fraction * their max speed when holding this body
// Very small/light AI should override this value
"grab_encumbrance" "0.5"
// Minimum and maximum periods to wait between throwing player-out-of-reach projectiles
"outofreach_projectile_delay_min" "7.0"
"outofreach_projectile_delay_max" "10.0"
// Min/max periods to wait in cover before emerging again
"emerge_from_cover_delay_min" "20.0"
"emerge_from_cover_delay_max" "30.0"
// The health threshold - health values below this cause the AI to flee
"health_critical" "15"
// If 0, don't throw projectiles when the enemy is out of reach (by default, non-humanoid AIs will not do so)
"outofreach_projectile_enabled" "0"
// By default, non-humanoid AIs don't take cover at all
"taking_cover_enabled" "0"
"taking_cover_max_cost" "200" // grayman #3507 (was 100)
"editor_bool taking_cover_only_from_archers" "If true, takes only cover from archers and other AI with projectile weapons."
"taking_cover_only_from_archers" "0"
"max_interleave_think_frames" "10"
"min_interleave_think_dist" "1000"
"max_interleave_think_dist" "3000"
"headturn_delay_min" "3"
"headturn_chance_idle" "0.3"
"headturn_factor_alerted" "2"
"headturn_yaw" "60"
"headturn_pitch" "40"
"headturn_duration_min" "1"
"headturn_duration_max" "3"
// greebo: Comma-separated list of anims
// Springheel: The specific animation lists were moved to tdm_ai_humanoid_newskel.def
// Animations affecting all channels (refer to anim names in the AI's modelDef)
"idle_animations" ""
// Animations only playing on the torso channel. Applicable anytime.
"idle_animations_torso" ""
// Animations only playing on the torso channel while the AI is sitting. Applicable anytime.
"idle_animations_sitting" ""
// Animations affecting all channels (refer to anim names in the AI's modelDef)
"idle_animations_searching" "" // grayman #3857
"idle_animations_interval" "25" // in seconds +/- 20%
"idle_search_animations_interval" "10" // in seconds +/- 20% - grayman #3857
// Offset in msecs to wait before opening a door after starting the "use" anim
"door_open_delay_on_use_anim" "1100"
"canSearch" "1" // grayman #3069 - can conduct searches
"hitByMoveableLookAtTime" "0.0" // grayman #2816
"hitByMoveableLookBackTime" "0.0" // grayman #2816
"editor_int sleep_location" "0 = sleep on the floor, 1 = sleep on a bed, 2 = sleep on a chair"
"sleep_location" "1" // grayman #3396 - 0 = sleep on the floor, 1 = sleep on a bed, (grayman #3820) 2 = sleep on a chair
"editor_bool absorb_projectile" "whether the AI should absorb a projectile, instead of allowing it to stick ('active') or break ('dud')"
"absorb_projectile" "0"
// Response to communication Stim
"sr_class_1" "R"
"sr_type_1" "STIM_COMMUNICATION"
"sr_state_1" "1"
// Response to visual contact
"sr_class_2" "R"
"sr_type_2" "STIM_VISUAL"
"sr_state_2" "1"
"sr_script_STIM_VISUAL" "response_visualStim"
// Give off visual contact stim to other AIs around me
"sr_class_3" "S"
"sr_state_3" "1"
"sr_type_3" "STIM_VISUAL"
"sr_radius_3" "600"
"sr_time_interval_3" "2000" // Once per 2 seconds
// Response to DAMAGE_STIM
"sr_class_4" "R"
"sr_state_4" "1"
"sr_type_4" "STIM_DAMAGE"
"sr_effect_4_1" "effect_damage"
"sr_effect_4_1_arg1" "_SELF"
"sr_effect_4_1_arg2" "atdm:damage_low"
}
entityDef atdm:ai_humanoid
{
"inherit" "atdm:ai_base"
"editor_displayFolder" "AI/Internal/Base Class"
"editor_usage" "Don't use. Base class for all TDM humanoid AI entities."
// This defines how AIs will interact with this entity
"AIUse" "AIUSE_PERSON"
"personType" "PERSONTYPE_GENERIC"
"personGender" "PERSONGENDER_UNKNOWN"
"anim" "idle" // animation to play on map start
"head_joint" "Head" // humanoids will have their head attached to this joint
"anim_rate_run" "0.8" //slows down AI so they are slightly slower than player
"anim_rate_run_torch" "0.8"
// These defines the chances the AI will notice various visual stimuli
"chanceNoticeWeapon" "1.0"
"chanceNoticeSuspiciousItem" "1.0" // grayman #1327
"chanceNoticeRope" "1.0" // grayman #2872
"chanceNoticePerson" "1.0"
"chanceNoticeMonster" "1.0" // grayman #3331
"chanceNoticeUndead" "1.0" // grayman #3343
"chanceNoticeBlood" "1.0"
"chanceNoticeLight" "0.9" // grayman #2603
"chanceNoticeMissingItem" "1.0"
"chanceNoticeDoor" "1.0"
"chanceNoticePickedPocket" "0.5" // grayman #3559
"pickpocket_alert" "0" // grayman #3559
"pickpocket_delay_min" "5000" // grayman #3559
"pickpocket_delay_max" "25000" // grayman #3559
// These define if the AI can operate various kinds of lights
"canLightTorches" "1"
"canOperateSwitchLights" "1"
"chanceLightTorches" "0.4" // grayman #2603
"chanceOperateSwitchLights" "0.7" // grayman #2603
"canOperateDoors" "1"
"canOperateElevators" "1"
"canGreet" "1"
// Humans need weapons to fight
"unarmed_melee" "0"
"damage_zone head" "*Neck"
"damage_zone chest" "*Spine_Dummy -*Neck"
"damage_zone torso_low" "Hips"
"damage_zone left_arm" "*LeftArm"
"damage_zone right_arm" "*RightArm"
"damage_zone legs" "*LeftHips_Dummy *RightHips_Dummy origin"
"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"
//all humanoid AI will be using the same base skeleton
"ik_numLegs" "2"
"ik_minWaistAnkleDist" "16"
"ik_footSize" "4"
"ik_waist" "Hips"
"ik_hip1" "LeftUpLeg"
"ik_hip2" "RightUpLeg"
"ik_knee1" "LeftLeg"
"ik_knee2" "RightLeg"
"ik_ankle1" "LeftFoot"
"ik_ankle2" "RightFoot"
//normally a knee joint
//"ik_dir1" "LeftFoot"
//"ik_dir2" "RightFoot"
"ik_foot1" "LeftToeBase"
"ik_foot2" "RightToeBase"
// We now use AAS32 by default
"use_aas" "aas32"
"size" "32 32 68"
"cylinder" "10" // optional
"eye_height" "77"
// Rates for AI turning their head randomly--these values cause AI to move their shoulders slightly as well
"look_min" "-80 -80 0" // "-80 -90 0" new values to address 0003754: AI seeing directly behind them
"look_max" "15 80 0" // "25 90 0"
"look_joint Spine" "0.3 0.3 0"
"look_joint Head" "0.7 0.7 0"
// Allow vertical aiming at the player during combat
"combat_look_joint Spine" "0.1333 0.1333 0"
"combat_look_joint Spine2" "0.1333 0.1333 0"
"combat_look_joint Head" "0.6 0.6 0"
//"combat_look_joint RightArm" "0.6 0 0" // grayman #3473
//"combat_look_joint LeftArm" "0.6 0 0" // grayman #3473
"head_focus_rate" "0.05" // how fast head turns to focus on target
// the number of degrees an AI can turn in 1 second
"turn_rate" "180"
// Attachment Positions (For OLD skeleton, NEW skeleton positions are in tdm_ai_humanoid_newskel)
// hand: orientation matches the weapon model convention
// (forward in the hand is to the right in the model)
"attach_pos_name_handr" "hand_r"
"attach_pos_joint_handr" "RightHand"
// joint orientation: down sideways forward
"attach_pos_origin_handr" "-5 2 0"
// joint orientation: roll, pitch, yaw
"attach_pos_angles_handr" "180 0 90"
"attach_pos_name_handl" "hand_l"
"attach_pos_joint_handl" "LeftHand"
"attach_pos_origin_handl" "5 -3 0"
"attach_pos_angles_handl" "180 0 -90"
// Position for sword sheathed at the left hip (still WIP, not quite right)
"attach_pos_name_hipsheathl" "hip_sheath_l"
"attach_pos_joint_hipsheathl" "Hips"
"attach_pos_origin_hipsheathl" "7.5 4.4 6.6"
"attach_pos_angles_hipsheathl" "-60 -90 -80"
// Positions on the belt (calibrated for builder guard w/ purse)
"attach_pos_name_beltb" "belt_back"
"attach_pos_joint_beltb" "Hips"
// left, up, in/out
"attach_pos_origin_beltb" "0 7 -4"
"attach_pos_angles_beltb" "-90 0 -90"
"attach_pos_name_beltbr" "belt_back_r"
"attach_pos_joint_beltbr" "Hips"
// left, up, in/out
"attach_pos_origin_beltbr" "-5 7 -4"
"attach_pos_angles_beltbr" "-90 0 -90"
"attach_pos_name_beltbl" "belt_back_l"
"attach_pos_joint_beltbl" "Hips"
"attach_pos_origin_beltbl" "5 7 -4"
"attach_pos_angles_beltbl" "-90 0 -90"
"attach_pos_name_beltfr" "belt_front_r"
"attach_pos_joint_beltfr" "Hips"
// left, up, in/out
"attach_pos_origin_beltfr" "-5 7 5.5"
"attach_pos_angles_beltfr" "90 0 -90"
"attach_pos_name_beltfl" "belt_front_l"
"attach_pos_joint_beltfl" "Hips"
"attach_pos_origin_beltfl" "5 7 5.5"
"attach_pos_angles_beltfl" "90 0 -90"
"editor_bool ground_when_dragged" "If set to true, don't let the player pick the ragdoll all the way up off the ground."
"ground_when_dragged" "1"
"editor_string ground_critical_bodies" "A list of AF bodies, separated by space. These bodies checked to see if they're on the ground when 'ground_when_dragged' is true."
// Currently based on /af/guard_base.af
"ground_critical_bodies" "waist chest rupleg Lupleg ruparm Luparm"
"editor_int ground_min_number" "At least so many AF bodies defined in 'ground_critical_bodies' must remain on the ground, or dragging upwards is not allowed."
"ground_min_number" "1"
"editor_bool drag_af_damping" "If true, apply AF damping when dragging the ragdoll."
"drag_af_damping" "1"
// This frob distance is intended for frobbing AI ragdolls
// Might have to revise this to have conversations via frobbing, etc.
"frob_distance" "60"
"editor_int hold_distance_min" "Distance ragdoll is from player when dragged, default is 35. In units."
"hold_distance_min" "35"
// melee weapon swing sound
"snd_swing" "sword_swing"
// blade sounds
"snd_drawsword" "sword_ai_unsheath"
"snd_sheathesword" "sword_ai_sheath"
// default footstep,
"snd_footstep" "human_stone"
// material specific footsteps (DarkMod SFX)
"snd_footstep_straw" "human_straw"
"snd_footstep_wood" "human_wood"
"snd_footstep_puddle" "movement_water"
"snd_footstep_wading" "movement_water"
"snd_footstep_tile" "human_tile"
"snd_footstep_stone" "human_stone"
"snd_footstep_snow" "human_snow"
"snd_footstep_gravel" "human_gravel"
"snd_footstep_metal" "human_metal"
"snd_footstep_grass" "human_grass"
"snd_footstep_carpet" "human_carpet"
"snd_footstep_dirt" "human_dirt"
"snd_footstep_foliage" "human_foliage"
// SteveL #3634: Adding 8 footstep sounds to match player's set
"snd_footstep_sand" "human_dirt"
"snd_footstep_glass" "human_glass"
"snd_footstep_ice" "human_ice"