Files
Hat Kid 949508d0ed decomp3: traffic/citizen/faction code, desert-rescue (#3506)
- `cty-faction-h`
- `nav-graph`
- `citizen-h`
- `citizen`
- `civilian`
- `traffic-engine`
- `traffic-manager`
- `cty-attack-controller`
- `cty-faction`
- `formation-object`
- `formations`
- `squad-control-city-h`
- `squad-control-city`
- `traffic-util`
- `wlander-female`
- `wlander-h`
- `wlander-male`
- `speech-manager`
- `desert-rescue`
- `desresc-path`
- `neo-satellite`
- `rope-prim-system-h`
- `rope-prim-system`
- `rope-system`
- `wland-passenger`
- `cty-guard-projectile`
- `ctywide-init`
- `ff-squad-control`
- `guard-grenade`
- `guard-rifle`
- `guard-states`
- `guard-tazer`
- `ctywide-speech`
- `citizen-chick`
- `citizen-fat`
- `citizen-norm`
- `guard`
- `bike`
- `car`
- `test-bike`
- `vehicle-rider`
- `desert-rescue-bbush`
- `ff-squad-control-h`
- `flee-info`
- `guard-h`
- `mission-squad-control`
- `kg-squad-control`
- `kg-squad-member-h`
- `kg-squad-member`
- `mh-squad-control`
- `mh-squad-member-h`
- `mh-squad-member`
- `ctywide-obs-h`
- `ctywide-obs`
- `ctywide-part`
- `ctywide-scenes`
- `ctywide-tasks`
- `ctywide-texture`
- `billiards`
- `guide-arrow`
- `kg-vehicles`
- `flying-turret`
- `roboguard-city`
- `citizen-enemy`
- `metalhead-flitter`
- `metalhead-grunt`
- `metalhead-predator`
- `spydroid`
- `kg-squad-control-h`
- `mh-squad-control-h`
- `krimson-wall`
- `ctyport-obs`
- `ctyinda-obs`
- `ctyinda-part`
- `ctyindb-obs`
- `ctyindb-part`
- `ctyport-attack`
- `h-torpedo`
- `ctyport-part`
- `ctyport-scenes`
- `external-player-control`
- `desert-chase-path-h`
- `desert-chase-path`
- `desert-chase`
- `desert-jump`
- `wcar-catapult`
- `bombbot-h`
- `bombbot`
- `bombbot-path`
- `cty-hijack-missile`
- `cty-hijack`
- `ctyport-attack-bbush`
- `ctysluma-part`
- `ctyslumb-part`
- `ctyslumc-obs`
- `ctyslumc-part`
- `searchlight`
- `cty-destroy-grid`
- `ctyfarm-obs`
- `ctyfarma-part`
- `ctyfarmb-part`
- `freehq-part`
- `freehq-scenes`
- `onintent-scenes`
- `onintent-part`
- `cty-sniper-battery`
- `cty-sniper-turret`
- `intro-obs`
- `intro-part`
- `intro-scenes`
- `palcab-part`
- `palroof-part`
2024-05-09 19:18:55 -04:00

469 lines
16 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: enemy-h.gc
;; name in dgo: enemy-h
;; dgos: GAME
;; +++enemy-aware
(defenum enemy-aware
:type uint64
(ea0 0)
(ea1 1)
(ea2 2)
(ea3 3)
(ea4 4)
)
;; ---enemy-aware
;; +++enemy-flag
(defenum enemy-flag
:type uint64
:bitfield #t
(look-at-focus 0)
(look-at-move-dest 1)
(vulnerable 2)
(vulnerable-backup 3)
(dangerous-backup 4)
(notice 5)
(alert 6)
(auto-reset-penetrate 7)
(victory 8)
(cam-attack-mode 9)
(use-notice-distance 10)
(attackable 11)
(attackable-backup 12)
(actor-pause-backup 13)
(enable-on-notice 14)
(enable-on-active 15)
(enable-on-hostile 16)
(dislike-combo 17)
(directed 18)
(directed-ready 19)
(chase-startup 20)
(lock-focus 21)
(multi-focus 22)
(use-trigger 23)
(trackable 24)
(trackable-backup 25)
(spawn-gem 26)
(check-water 27)
(check-water-backup 28)
(checking-water 29)
(drawn-mirrored 30)
(called-dying 31)
(no-initial-move-to-ground 32)
(jump-check-blocked 33)
(death-start 34)
(auto-death-phase-out 35)
(has-gem 36)
(ef37 37)
(ef38 38)
(ef39 39)
(ef40 40)
(ef41 41)
(ef42 42)
(ef43 43)
(ef44 44)
)
;; ---enemy-flag
;; +++enemy-jump-flags
(defenum enemy-jump-flags
:bitfield #t
:type uint8
(ejf0 0)
(ejf1 1)
(ejf2 2)
(ejf3 3)
(ejf4 4)
(ejf5 5)
(ejf6 6)
(ejf7 7)
)
;; ---enemy-jump-flags
(declare-type enemy process-focusable)
(define-extern *shockwave-knock-scalar* curve2d-fast)
;; DECOMP BEGINS
(deftype enemy-focus (focus)
((aware enemy-aware)
(flags enemy-flag)
)
(:methods
(try-update-focus (_type_ process-focusable enemy) symbol :replace)
(enemy-focus-method-13 (_type_ process-focusable enemy-aware) symbol)
)
)
(deftype enemy-info (basic)
((fact-defaults fact-info-enemy-defaults)
(use-die-falling symbol)
(use-victory symbol)
(use-jump-blocked symbol)
(debug-draw-neck symbol)
(jump-debug-draw symbol)
(move-to-ground symbol)
(hover-if-no-ground symbol)
(idle-anim-script (inline-array idle-control-frame))
(idle-anim int32)
(notice-anim int32)
(hostile-anim int32)
(hit-anim int32)
(knocked-anim int32)
(knocked-land-anim int32)
(die-anim int32)
(die-falling-anim int32)
(victory-anim int32)
(jump-wind-up-anim int32)
(jump-in-air-anim int32)
(jump-land-anim int32)
(neck-joint int32)
(look-at-joint int32)
(bullseye-joint int32)
(sound-hit sound-name)
(sound-die sound-name)
(notice-distance meters)
(notice-distance-delta meters)
(proximity-notice-distance meters)
(default-hit-points float)
(gnd-collide-with collide-spec)
(overlaps-others-collide-with-filter collide-spec)
(penetrate-flinch penetrate)
(penetrate-knocked penetrate)
(movement-gravity meters)
(friction float)
(slip-factor float)
(attack-shove-back meters)
(attack-shove-up meters)
(attack-mode symbol)
(attack-damage int32)
(recover-gnd-collide-with collide-spec)
(knocked-can-land-timeout time-frame)
(knocked-recover-timeout time-frame)
(ragdoll-blend-out-time time-frame)
(ragdoll-rotate-velocity-mult float)
(jump-height-min meters)
(jump-height-factor float)
(knocked-seek-ry-clamp float)
(knocked-soft-vxz-lo float)
(knocked-soft-vxz-hi float)
(knocked-soft-vy-lo float)
(knocked-soft-vy-hi float)
(knocked-medium-vxz-lo float)
(knocked-medium-vxz-hi float)
(knocked-medium-vy-lo float)
(knocked-medium-vy-hi float)
(knocked-hard-vxz-lo float)
(knocked-hard-vxz-hi float)
(knocked-hard-vy-lo float)
(knocked-hard-vy-hi float)
(knocked-huge-vxz-lo float)
(knocked-huge-vxz-hi float)
(knocked-huge-vy-lo float)
(knocked-huge-vy-hi float)
(knocked-yellow-vxz-lo float)
(knocked-yellow-vxz-hi float)
(knocked-yellow-vy-lo float)
(knocked-yellow-vy-hi float)
(knocked-red-vxz-lo float)
(knocked-red-vxz-hi float)
(knocked-red-vy-lo float)
(knocked-red-vy-hi float)
(knocked-blue-vxz-lo float)
(knocked-blue-vxz-hi float)
(knocked-blue-vy-lo float)
(knocked-blue-vy-hi float)
(ragdoll-info ragdoll-setup)
(shadow-size meters)
(shadow-max-y meters)
(shadow-min-y meters)
(shadow-locus-dist meters)
(gem-joint int32)
(gem-seg uint32)
(gem-no-seg uint32)
(gem-offset sphere :inline)
(knocked-off symbol)
)
(:methods
(copy-enemy-info! (_type_ _type_) none)
)
)
(deftype enemy-knocked-info (structure)
((anim-speed float)
(on-surface-count int32)
(move-count int32)
(land-can-land-time time-frame)
)
)
(deftype enemy-jump-info (structure)
((flags enemy-jump-flags)
(anim-speed float)
(hang-time time-frame)
(start-pos vector :inline)
(dest-pos vector :inline)
(traj trajectory :inline)
)
)
(deftype enemy-init-by-other-params (structure)
((trans vector :inline)
(quat quaternion :inline)
(entity entity)
(directed? symbol)
(no-initial-move-to-ground? symbol)
(art-level symbol)
)
)
(deftype enemy-attack-info (structure)
((attack-id uint32)
(knocked-type knocked-type)
(blue-juggle-count uint8)
(attacker-handle handle)
(attack-time time-frame)
(penetrate-using penetrate)
(attacker-pos vector :inline)
(attack-direction vector :inline)
(attack-position vector :inline)
(intensity float)
)
)
(deftype enemy-best-focus (structure)
((proc process)
(rating float)
(aware enemy-aware)
)
)
(deftype enemy (process-focusable)
((fact fact-info-enemy :override)
(root collide-shape-moving :override)
(enemy-flags enemy-flag)
(enemy-info enemy-info)
(hit-points float)
(gnd-collide-with collide-spec)
(attack-id uint32)
(persistent-attack-id uint32)
(water-max-height float)
(water-surface-height float)
(desired-angle degrees)
(jump-why uint64)
(penetrated-by-all penetrate)
(penetrate-flinch penetrate)
(penetrate-knocked penetrate)
(ragdoll-proc handle)
(reaction-time time-frame)
(notice-time time-frame)
(state-timeout time-frame)
(auto-reset-penetrate-time time-frame)
(hit-focus-time time-frame)
(last-draw-time time-frame)
(starting-time time-frame)
(fated-time time-frame)
(focus-pos vector :inline)
(event-param-point vector :inline)
(jump-dest vector :inline :overlay-at event-param-point)
(focus enemy-focus :inline)
(incoming enemy-attack-info :inline)
(actor-group (pointer actor-group))
(actor-group-count int32)
(neck joint-mod)
(on-notice pair)
(on-active pair)
(on-hostile pair)
(on-death pair)
(idle-anim-player idle-control :inline)
(rand-gen symbol)
)
(:state-methods
dormant
dormant-aware
hit
knocked
knocked-recover
idle
active
notice
flee
stare
hostile
victory
die
die-falling
die-fast
directed
jump
jump-blocked
ambush-delay
ambush
view-anims
gun-dark-2-stretch
)
(:methods
(enemy-method-50 (_type_ int) none)
(accelerate-fall! (_type_ vector) float)
(damage-enemy! (_type_ object event-message-block) float)
(reset-penetrate! (_type_) none)
(get-knockback-dir! (_type_ vector) vector)
(get-knockback-angle (_type_) degrees)
(knocked-handler (_type_ vector) object)
(can-collide-with-focus? (_type_ process-focusable) object)
(check-water (_type_) object)
(enemy-common-post (_type_) none)
(lerp-damage (_type_ float) float)
(scale-impact-vel-y! (_type_ vector vector float) vector)
(get-damage-from-attack (_type_ object event-message-block) float)
(enemy-method-63 (_type_ float) float)
(update-awareness! (_type_ process-focusable enemy-best-focus) enemy-aware)
(penetrate->next-state (_type_ process event-message-block float) symbol)
(get-penetrated-by (_type_) penetrate)
(coin-flip? (_type_) symbol)
(get-enemy-aware (_type_ enemy-aware) enemy-aware)
(enemy-method-69 (_type_) none)
(enemy-method-70 (_type_ process-focusable enemy-aware) none)
(go-dormant (_type_) object)
(go-dormant-aware (_type_) object)
(go-idle (_type_) object)
(go-ambush-delay (_type_) object)
(go-stare (_type_) object)
(go-stare2 (_type_) object)
(go-directed (_type_) object)
(go-hostile (_type_) object)
(go-flee (_type_) object)
(go-best-state (_type_) object)
(go-die (_type_) object)
(event-handler (_type_ process int symbol event-message-block) object :behavior enemy)
(enemy-touch-handler (_type_ process event-message-block) object)
(send-attack-on-jump-or-knocked (_type_ process event-message-block) object)
(knocked-anim (_type_ enemy-knocked-info) symbol)
(knocked-land-anim (_type_ enemy-knocked-info) symbol)
(knocked-anim-handler (_type_ int enemy-knocked-info) symbol)
(enemy-method-88 (_type_ enemy-knocked-info) symbol)
(within-gspot-range? (_type_) symbol)
(enemy-method-90 (_type_ ragdoll-proc) none)
(enemy-method-91 (_type_ enemy-jump-info) object)
(init-jump-info! (_type_ enemy-jump-info) none)
(setup-jump! (_type_ enemy-jump-info) none)
(move-to-gspot! (_type_) float)
(on-ground? (_type_ enemy-jump-info) symbol)
(jump-in-air-anim (_type_ enemy-jump-info) symbol)
(jump-land-anim (_type_ enemy-jump-info) symbol)
(jump-wind-up-anim (_type_ enemy-jump-info) symbol)
(jump-anim-handler (_type_ int enemy-jump-info) symbol)
(in-jump-handler (_type_ int enemy-jump-info) none)
(enemy-method-101 (_type_ int enemy-jump-info) none)
(go-directed2 (_type_) object)
(enemy-method-103 (_type_ vector float) symbol)
(enemy-method-104 (_type_ vector float) symbol)
(enemy-method-105 (_type_ float symbol) symbol)
(find-best-focus (_type_) process)
(is-pfoc-in-mesh? (_type_ process-focusable vector) symbol)
(enemy-method-108 (_type_ process-focusable) symbol)
(enemy-method-109 (_type_) symbol)
(send-attack (_type_ process touching-shapes-entry uint) symbol)
(on-attack (_type_ process-focusable) none)
(get-incoming-attack! (_type_ process-drawable event-message-block penetrate attack-info touching-shapes-entry) none)
(get-focus! (_type_) process-focusable)
(send-attack-to-all-tshapes (_type_ process-focusable event-message-block) int)
(set-look-at-mode! (_type_ int) none)
(stop-look-at! (_type_) none)
(apply-friction (_type_) none)
(init-enemy-info! (_type_ enemy-info) none)
(init-enemy-defaults! (_type_ enemy-info) none)
(init-enemy-collision! (_type_) none)
(init-enemy! (_type_) none)
(go-idle2 (_type_) object)
(enemy-method-123 (_type_) symbol)
(disable-ragdoll (_type_) none)
(ragdoll-settled? (_type_) object)
(ragdoll-spawn! (_type_ symbol symbol) vector)
(deactivate-ragdoll! (_type_) none)
(rnd-float (_type_) float)
(rnd-float-range (_type_ float float) float)
(rnd-int (_type_ int) int)
(enemy-method-131 (_type_ int int) int)
(set-reaction-time! (_type_ time-frame time-frame) time-frame)
(rnd-chance? (_type_ float) symbol)
(enemy-method-134 (_type_ float) symbol)
(enemy-method-135 (_type_) none)
(set-ground-pat! (_type_ collide-query collide-spec float float float process) pat-surface)
(enemy-above-ground? (_type_ collide-query vector collide-spec float float float) symbol)
(try-locate-ground (_type_ meters meters symbol collide-spec) symbol)
(move-above-ground! (_type_ vector move-above-ground-params) none)
(update-focus (_type_) process)
(enemy-method-141 (_type_ float) symbol)
(penetrate->knocked-type (_type_ penetrate) knocked-type)
(on-dying (_type_) none)
(falling? (_type_) symbol)
(find-offending-pfoc (_type_ process attack-info) process-focusable)
(play-damage-sound (_type_ int) sound-id)
(check-victory (_type_) none)
(go-gun-dark-2-stretch (_type_) object)
(have-more-than-10-joints? (_type_) object)
(enemy-method-150 (_type_) symbol)
(should-move-to-ground? (_type_) symbol)
(enemy-method-152 (_type_) float)
(get-gem-pool-idx (_type_) int)
(mark-as-dead (_type_) none)
)
)
(deftype anim-info (structure)
((anim-index int32)
(travel-speed meters)
)
)
(defmethod try-update-focus ((this enemy-focus) (arg0 process-focusable) (arg1 enemy))
(let* ((t9-0 (method-of-type focus try-update-focus))
(s3-0 (t9-0 this arg0))
)
(when (not s3-0)
(logclear! (-> this flags) (enemy-flag look-at-focus))
(set! (-> this aware) (get-enemy-aware arg1 (update-awareness! arg1 arg0 (the-as enemy-best-focus #f))))
)
s3-0
)
)
(defmethod enemy-focus-method-13 ((this enemy-focus) (arg0 process-focusable) (arg1 enemy-aware))
(let* ((t9-0 (method-of-type focus try-update-focus))
(v0-0 (t9-0 this arg0))
)
(set! (-> this aware) arg1)
(if (not v0-0)
(logclear! (-> this flags) (enemy-flag look-at-focus))
)
v0-0
)
)
;; WARN: Return type mismatch enemy-flag vs none.
(defmethod clear-focused ((this enemy-focus))
"Reset the focus' handle."
(let ((t9-0 (method-of-type focus clear-focused)))
(t9-0 this)
)
(set! (-> this aware) (enemy-aware ea0))
(logclear! (-> this flags) (enemy-flag look-at-focus))
(none)
)