mirror of
https://github.com/open-goal/jak-project
synced 2026-08-07 02:06:59 -04:00
637990314b
Closes #736 --------- Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com>
2470 lines
91 KiB
Common Lisp
Vendored
Generated
2470 lines
91 KiB
Common Lisp
Vendored
Generated
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; failed to figure out what this is:
|
|
(defpart 1455
|
|
:init-specs ((:texture (pal-lightning effects))
|
|
(:birth-func 'birth-func-set-quat)
|
|
(:num 1.0)
|
|
(:scale-x (meters 1))
|
|
(:scale-y (meters 40))
|
|
(:r 128.0 64.0)
|
|
(:g 128.0 64.0)
|
|
(:b 128.0 64.0)
|
|
(:a 128.0)
|
|
(:timer (seconds 0.017))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 left-multiply-quat))
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defpart 1456
|
|
:init-specs ((:texture (glow-hotdot effects))
|
|
(:num 1.0)
|
|
(:scale-x (meters 1))
|
|
(:scale-y :copy scale-x)
|
|
(:r 128.0 64.0)
|
|
(:g 128.0 64.0)
|
|
(:b 128.0 64.0)
|
|
(:a 128.0)
|
|
(:rotvel-z (degrees 0.3))
|
|
(:fade-g -1.0666667)
|
|
(:fade-b -1.0666667)
|
|
(:fade-a -8.533334)
|
|
(:timer (seconds 0.017))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14))
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defpart 1457
|
|
:init-specs ((:texture (glow-hotdot effects))
|
|
(:num 1.0)
|
|
(:scale-x (meters 1))
|
|
(:scale-y :copy scale-x)
|
|
(:r 128.0 64.0)
|
|
(:g 128.0 64.0)
|
|
(:b 128.0 64.0)
|
|
(:a 128.0)
|
|
(:rotvel-z (degrees 0.3))
|
|
(:fade-g -1.0666667)
|
|
(:fade-b -1.0666667)
|
|
(:fade-a -8.533334)
|
|
(:timer (seconds 0.017))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14))
|
|
)
|
|
)
|
|
|
|
;; definition of type hosehead
|
|
(deftype hosehead (nav-enemy)
|
|
((on-wall? symbol)
|
|
(sentry? symbol)
|
|
(shot-by-ruffian? symbol)
|
|
(on-stop-sentry function)
|
|
(jump-point vector :inline)
|
|
(last-time-dist-changed time-frame)
|
|
(next-lazer-time time-frame)
|
|
(fire-beam? symbol)
|
|
(head-angle degrees)
|
|
(head-angle-inc degrees)
|
|
(target-pos vector :inline)
|
|
(come-from-notice symbol)
|
|
(allow-head symbol)
|
|
(head-joint-mod joint-mod)
|
|
(joint-ik joint-mod-ik 4)
|
|
(delta-y-ik float 4)
|
|
(lazer-dist float :offset 740)
|
|
(lazer-pos-sound vector :inline)
|
|
(lazer-sound sound-id)
|
|
(lazer-sound2 sound-id)
|
|
(sync sync-eased :inline)
|
|
(angle-sentry degrees)
|
|
(lazer-length float)
|
|
)
|
|
(:state-methods
|
|
ambush-land
|
|
idle-sentry
|
|
active-wall
|
|
notice-wall
|
|
hostile-sentry
|
|
fire
|
|
attack
|
|
)
|
|
(:methods
|
|
(hosehead-method-185 (_type_) none)
|
|
(hosehead-method-186 (_type_) none)
|
|
(hosehead-method-187 (_type_ vector) none)
|
|
(hosehead-method-188 (_type_) none)
|
|
(hosehead-method-189 (_type_) none)
|
|
(hosehead-method-190 (_type_) symbol)
|
|
(hosehead-method-191 (_type_ vector vector) none)
|
|
(hosehead-method-192 (_type_ vector) symbol)
|
|
(hosehead-method-193 (_type_) none)
|
|
(hosehead-method-194 (_type_) none)
|
|
(hosehead-method-195 (_type_) symbol)
|
|
(hosehead-method-196 (_type_) none)
|
|
(hosehead-method-197 (_type_) none)
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type hosehead
|
|
(defmethod inspect ((this hosehead))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-7)
|
|
)
|
|
(let ((t9-0 (method-of-type nav-enemy inspect)))
|
|
(t9-0 this)
|
|
)
|
|
(format #t "~2Ton-wall?: ~A~%" (-> this on-wall?))
|
|
(format #t "~2Tsentry?: ~A~%" (-> this sentry?))
|
|
(format #t "~2Tshot-by-ruffian?: ~A~%" (-> this shot-by-ruffian?))
|
|
(format #t "~2Ton-stop-sentry: ~A~%" (-> this on-stop-sentry))
|
|
(format #t "~2Tjump-point: #<vector @ #x~X>~%" (-> this jump-point))
|
|
(format #t "~2Tlast-time-dist-changed: ~D~%" (-> this last-time-dist-changed))
|
|
(format #t "~2Tnext-lazer-time: ~D~%" (-> this next-lazer-time))
|
|
(format #t "~2Tfire-beam?: ~A~%" (-> this fire-beam?))
|
|
(format #t "~2Thead-angle: ~f~%" (-> this head-angle))
|
|
(format #t "~2Thead-angle-inc: ~f~%" (-> this head-angle-inc))
|
|
(format #t "~2Ttarget-pos: #<vector @ #x~X>~%" (-> this target-pos))
|
|
(format #t "~2Tcome-from-notice: ~A~%" (-> this come-from-notice))
|
|
(format #t "~2Tallow-head: ~A~%" (-> this allow-head))
|
|
(format #t "~2Thead-joint-mod: ~A~%" (-> this head-joint-mod))
|
|
(format #t "~2Tjoint-ik[4] @ #x~X~%" (-> this joint-ik))
|
|
(format #t "~2Tdelta-y-ik[4] @ #x~X~%" (-> this delta-y-ik))
|
|
(format #t "~2Tactor-group: #x~X~%" (-> this actor-group))
|
|
(dotimes (s5-0 (-> this actor-group-count))
|
|
(format #t "~T [~D]~2Tactor-group: ~`actor-group`P~%" s5-0 (-> this actor-group s5-0))
|
|
)
|
|
(format #t "~2Tactor-group-count: ~D~%" (-> this actor-group-count))
|
|
(format #t "~2Tlazer-dist: ~f~%" (-> this lazer-dist))
|
|
(format #t "~2Tlazer-pos-sound: #<vector @ #x~X>~%" (-> this lazer-pos-sound))
|
|
(format #t "~2Tlazer-sound: ~D~%" (-> this lazer-sound))
|
|
(format #t "~2Tlazer-sound2: ~D~%" (-> this lazer-sound2))
|
|
(format #t "~2Tsync: #<sync-eased @ #x~X>~%" (-> this sync))
|
|
(format #t "~2Tangle-sentry: ~f~%" (-> this angle-sentry))
|
|
(format #t "~2Tlazer-length: ~f~%" (-> this lazer-length))
|
|
(label cfg-7)
|
|
this
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defskelgroup skel-hosehead hosehead hosehead-lod0-jg -1
|
|
((hosehead-lod0-mg (meters 20)) (hosehead-lod1-mg (meters 40)) (hosehead-lod2-mg (meters 999999)))
|
|
:bounds (static-spherem 0 2.25 0 6)
|
|
:shadow hosehead-shadow-mg
|
|
:origin-joint-index 3
|
|
)
|
|
|
|
;; definition for symbol *hosehead-idle-wall*, type (pointer idle-control-frame)
|
|
(define *hosehead-idle-wall*
|
|
(new 'static 'array idle-control-frame 4
|
|
(new 'static 'idle-control-frame :command (ic-cmd play) :anim #x10 :param0 #x1 :param1 #x1)
|
|
(new 'static 'idle-control-frame)
|
|
(new 'static 'idle-control-frame)
|
|
(new 'static 'idle-control-frame)
|
|
)
|
|
)
|
|
|
|
;; definition for symbol *hosehead-idle-ground*, type (pointer idle-control-frame)
|
|
(define *hosehead-idle-ground*
|
|
(new 'static 'array idle-control-frame 4
|
|
(new 'static 'idle-control-frame :command (ic-cmd play) :anim #xf :param0 #x1 :param1 #x1)
|
|
(new 'static 'idle-control-frame)
|
|
(new 'static 'idle-control-frame)
|
|
(new 'static 'idle-control-frame)
|
|
)
|
|
)
|
|
|
|
;; definition for symbol *hosehead-nav-enemy-info*, type nav-enemy-info
|
|
(define *hosehead-nav-enemy-info* (new 'static 'nav-enemy-info
|
|
:use-die-falling #t
|
|
:use-victory #f
|
|
:use-jump-blocked #f
|
|
:debug-draw-neck #f
|
|
:jump-debug-draw #f
|
|
:move-to-ground #t
|
|
:hover-if-no-ground #f
|
|
:idle-anim-script #f
|
|
:idle-anim 15
|
|
:notice-anim 20
|
|
:hostile-anim 17
|
|
:hit-anim 24
|
|
:knocked-anim 18
|
|
:knocked-land-anim 19
|
|
:die-anim 23
|
|
:die-falling-anim 19
|
|
:victory-anim 15
|
|
:jump-wind-up-anim 7
|
|
:jump-in-air-anim 8
|
|
:jump-land-anim 9
|
|
:neck-joint -1
|
|
:look-at-joint 9
|
|
:bullseye-joint 6
|
|
:sound-hit (static-sound-name "hosehead-hit")
|
|
:sound-die (static-sound-name "hosehead-die")
|
|
:notice-distance (meters 120)
|
|
:notice-distance-delta (meters 10)
|
|
:proximity-notice-distance (meters 120)
|
|
:default-hit-points 5
|
|
:gnd-collide-with (collide-spec backgnd)
|
|
:overlaps-others-collide-with-filter (collide-spec jak bot player-list)
|
|
:penetrate-knocked (penetrate
|
|
touch
|
|
generic-attack
|
|
lunge
|
|
flop
|
|
punch
|
|
spin
|
|
roll
|
|
uppercut
|
|
bonk
|
|
tube
|
|
vehicle
|
|
flut-attack
|
|
board
|
|
mech
|
|
mech-punch
|
|
mech-bonk
|
|
dark-skin
|
|
dark-punch
|
|
dark-bomb
|
|
dark-giant
|
|
shield
|
|
explode
|
|
jak-yellow-shot
|
|
jak-red-shot
|
|
jak-blue-shot
|
|
jak-dark-shot
|
|
enemy-yellow-shot
|
|
enemy-dark-shot
|
|
eco-yellow
|
|
eco-red
|
|
eco-blue
|
|
eco-green
|
|
knocked
|
|
penetrate-33
|
|
penetrate-34
|
|
penetrate-35
|
|
penetrate-36
|
|
penetrate-37
|
|
penetrate-38
|
|
penetrate-39
|
|
penetrate-40
|
|
penetrate-41
|
|
penetrate-42
|
|
penetrate-43
|
|
penetrate-44
|
|
penetrate-45
|
|
penetrate-46
|
|
penetrate-47
|
|
penetrate-48
|
|
penetrate-49
|
|
penetrate-50
|
|
penetrate-51
|
|
penetrate-52
|
|
penetrate-53
|
|
penetrate-54
|
|
penetrate-55
|
|
penetrate-56
|
|
penetrate-57
|
|
penetrate-58
|
|
penetrate-59
|
|
penetrate-60
|
|
penetrate-61
|
|
penetrate-62
|
|
penetrate-63
|
|
)
|
|
:movement-gravity (meters -100)
|
|
:friction 0.8
|
|
:attack-shove-back (meters 3)
|
|
:attack-shove-up (meters 2)
|
|
:attack-mode 'generic
|
|
:attack-damage 2
|
|
:recover-gnd-collide-with (collide-spec backgnd crate obstacle hit-by-others-list pusher)
|
|
:jump-height-min (meters 0.1)
|
|
:knocked-seek-ry-clamp 6371.5557
|
|
:knocked-soft-vxz-lo 72089.6
|
|
:knocked-soft-vxz-hi 108134.4
|
|
:knocked-soft-vy-lo 81920.0
|
|
:knocked-soft-vy-hi 122880.0
|
|
:knocked-medium-vxz-lo 147456.0
|
|
:knocked-medium-vxz-hi 196608.0
|
|
:knocked-medium-vy-lo 135168.0
|
|
:knocked-medium-vy-hi 151552.0
|
|
:knocked-hard-vxz-lo 78643.2
|
|
:knocked-hard-vxz-hi 117964.8
|
|
:knocked-hard-vy-lo 183500.8
|
|
:knocked-hard-vy-hi 209715.2
|
|
:knocked-huge-vxz-lo 164659.2
|
|
:knocked-huge-vxz-hi 249036.8
|
|
:knocked-huge-vy-lo 183500.8
|
|
:knocked-huge-vy-hi 217907.2
|
|
:knocked-yellow-vxz-lo 16384.0
|
|
:knocked-yellow-vxz-hi 32768.0
|
|
:knocked-yellow-vy-lo 57344.0
|
|
:knocked-yellow-vy-hi 81920.0
|
|
:knocked-red-vxz-lo 24576.0
|
|
:knocked-red-vxz-hi 196608.0
|
|
:knocked-red-vy-lo 94208.0
|
|
:knocked-red-vy-hi 151552.0
|
|
:knocked-blue-vxz-lo 40960.0
|
|
:knocked-blue-vxz-hi 49152.0
|
|
:knocked-blue-vy-lo 24576.0
|
|
:knocked-blue-vy-hi 81920.0
|
|
:shadow-size (meters 1)
|
|
:shadow-max-y (meters 1)
|
|
:shadow-min-y (meters -1)
|
|
:shadow-locus-dist (meters 150)
|
|
:gem-joint 9
|
|
:gem-seg #x2
|
|
:gem-no-seg #x4
|
|
:gem-offset (new 'static 'sphere :y 1925.12 :z 1802.24 :r 163840.0)
|
|
:callback-info #f
|
|
:use-momentum #f
|
|
:use-frustration #f
|
|
:use-stop-chase #f
|
|
:use-circling #f
|
|
:use-pacing #f
|
|
:walk-anim 5
|
|
:turn-anim -1
|
|
:run-anim 17
|
|
:taunt-anim -1
|
|
:run-travel-speed (meters 6)
|
|
:run-acceleration (meters 1)
|
|
:run-turning-acceleration (meters 16)
|
|
:walk-travel-speed (meters 3)
|
|
:walk-acceleration (meters 1)
|
|
:walk-turning-acceleration (meters 16)
|
|
:maximum-rotation-rate (degrees 720)
|
|
:notice-nav-radius (meters 20)
|
|
:frustration-distance (meters 8)
|
|
:frustration-time (seconds 4)
|
|
:blocked-time (seconds 0.3)
|
|
:circle-dist-lo 20480.0
|
|
:circle-dist-hi 61440.0
|
|
:nav-mesh #f
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(set! (-> *hosehead-nav-enemy-info* fact-defaults) *fact-info-enemy-defaults*)
|
|
|
|
;; definition for method 114 of type hosehead
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod init-enemy-collision! ((this hosehead))
|
|
"Initializes the [[collide-shape-moving]] and any ancillary tasks to make the enemy collide properly"
|
|
(let ((s5-0 (new 'process 'collide-shape-moving this (collide-list-enum usually-hit-by-player))))
|
|
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
|
|
(set! (-> s5-0 reaction) cshape-reaction-default)
|
|
(set! (-> s5-0 no-reaction)
|
|
(the-as (function collide-shape-moving collide-query vector vector object) nothing)
|
|
)
|
|
(set! (-> s5-0 penetrated-by) (penetrate))
|
|
(let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 6) 0)))
|
|
(set! (-> s5-0 total-prims) (the-as uint 7))
|
|
(set! (-> s4-0 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> s4-0 prim-core collide-with)
|
|
(collide-spec backgnd jak bot crate obstacle hit-by-others-list player-list)
|
|
)
|
|
(set! (-> s4-0 prim-core action) (collide-action solid semi-solid deadly no-standon))
|
|
(set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 24576.0)
|
|
(set! (-> s5-0 root-prim) s4-0)
|
|
)
|
|
(let ((v1-12 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> v1-12 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-12 prim-core collide-with) (collide-spec backgnd jak bot crate hit-by-others-list player-list))
|
|
(set! (-> v1-12 prim-core action) (collide-action solid no-standon))
|
|
(set! (-> v1-12 transform-index) 6)
|
|
(set-vector! (-> v1-12 local-sphere) 0.0 0.0 0.0 5734.4)
|
|
)
|
|
(let ((v1-14 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> v1-14 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-14 prim-core collide-with) (collide-spec backgnd jak bot crate hit-by-others-list player-list))
|
|
(set! (-> v1-14 prim-core action) (collide-action solid no-standon))
|
|
(set! (-> v1-14 transform-index) 17)
|
|
(set-vector! (-> v1-14 local-sphere) 0.0 0.0 0.0 5734.4)
|
|
)
|
|
(let ((v1-16 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> v1-16 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-16 prim-core collide-with) (collide-spec backgnd jak bot crate hit-by-others-list player-list))
|
|
(set! (-> v1-16 prim-core action) (collide-action solid no-standon))
|
|
(set! (-> v1-16 transform-index) 9)
|
|
(set-vector! (-> v1-16 local-sphere) 0.0 0.0 0.0 5734.4)
|
|
)
|
|
(let ((v1-18 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> v1-18 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-18 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> v1-18 prim-core action) (collide-action deadly))
|
|
(set! (-> v1-18 transform-index) 16)
|
|
(set-vector! (-> v1-18 local-sphere) 0.0 -6553.6 0.0 4915.2)
|
|
)
|
|
(let ((v1-20 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> v1-20 prim-core collide-as) (collide-spec enemy))
|
|
(set! (-> v1-20 prim-core collide-with) (collide-spec jak bot player-list))
|
|
(set! (-> v1-20 prim-core action) (collide-action deadly))
|
|
(set! (-> v1-20 transform-index) 14)
|
|
(set-vector! (-> v1-20 local-sphere) 0.0 6553.6 0.0 4915.2)
|
|
)
|
|
(let ((v1-22 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> v1-22 prim-core collide-with) (collide-spec backgnd obstacle))
|
|
(set! (-> v1-22 prim-core action) (collide-action solid))
|
|
(set-vector! (-> v1-22 local-sphere) 0.0 11468.8 0.0 11468.8)
|
|
)
|
|
(set! (-> s5-0 nav-radius) 6553.6)
|
|
(let ((v1-24 (-> s5-0 root-prim)))
|
|
(set! (-> s5-0 backup-collide-as) (-> v1-24 prim-core collide-as))
|
|
(set! (-> s5-0 backup-collide-with) (-> v1-24 prim-core collide-with))
|
|
)
|
|
(set! (-> s5-0 max-iteration-count) (the-as uint 3))
|
|
(set! (-> this root) s5-0)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition of type ik-setup
|
|
(deftype ik-setup (structure)
|
|
((elbow-index int32)
|
|
(hand-dist float)
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type ik-setup
|
|
(defmethod inspect ((this ik-setup))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(format #t "[~8x] ~A~%" this 'ik-setup)
|
|
(format #t "~1Telbow-index: ~D~%" (-> this elbow-index))
|
|
(format #t "~1Thand-dist: ~f~%" (-> this hand-dist))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; definition for symbol *hosehead-ik-setup*, type (inline-array ik-setup)
|
|
(define *hosehead-ik-setup* (new 'static 'inline-array ik-setup 4
|
|
(new 'static 'ik-setup :elbow-index 14 :hand-dist 8257.536)
|
|
(new 'static 'ik-setup :elbow-index 16 :hand-dist -8257.536)
|
|
(new 'static 'ik-setup :elbow-index 20 :hand-dist 5476.352)
|
|
(new 'static 'ik-setup :elbow-index 23 :hand-dist -5476.352)
|
|
)
|
|
)
|
|
|
|
;; definition of type hosehead-anim-info
|
|
(deftype hosehead-anim-info (structure)
|
|
((hit-index int32)
|
|
(land-index int32)
|
|
)
|
|
:pack-me
|
|
)
|
|
|
|
;; definition for method 3 of type hosehead-anim-info
|
|
(defmethod inspect ((this hosehead-anim-info))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(format #t "[~8x] ~A~%" this 'hosehead-anim-info)
|
|
(format #t "~1Thit-index: ~D~%" (-> this hit-index))
|
|
(format #t "~1Tland-index: ~D~%" (-> this land-index))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; definition of type hosehead-global-info
|
|
(deftype hosehead-global-info (basic)
|
|
((prev-yellow-hit int8)
|
|
(prev-blue-hit int8)
|
|
(prev-knocked int8)
|
|
(yellow-hit-anim hosehead-anim-info 2 :inline)
|
|
(blue-hit-anim hosehead-anim-info 3 :inline :offset 24)
|
|
(knocked-anim hosehead-anim-info 2 :inline :offset 48)
|
|
)
|
|
)
|
|
|
|
;; definition for method 3 of type hosehead-global-info
|
|
(defmethod inspect ((this hosehead-global-info))
|
|
(when (not this)
|
|
(set! this this)
|
|
(goto cfg-4)
|
|
)
|
|
(format #t "[~8x] ~A~%" this (-> this type))
|
|
(format #t "~1Tprev-yellow-hit: ~D~%" (-> this prev-yellow-hit))
|
|
(format #t "~1Tprev-blue-hit: ~D~%" (-> this prev-blue-hit))
|
|
(format #t "~1Tprev-knocked: ~D~%" (-> this prev-knocked))
|
|
(format #t "~1Tyellow-hit-anim[2] @ #x~X~%" (-> this yellow-hit-anim))
|
|
(format #t "~1Tblue-hit-anim[3] @ #x~X~%" (-> this blue-hit-anim))
|
|
(format #t "~1Tknocked-anim[2] @ #x~X~%" (-> this knocked-anim))
|
|
(label cfg-4)
|
|
this
|
|
)
|
|
|
|
;; definition for symbol *hosehead-global-info*, type hosehead-global-info
|
|
(define *hosehead-global-info* (new 'static 'hosehead-global-info
|
|
:yellow-hit-anim (new 'static 'inline-array hosehead-anim-info 2
|
|
(new 'static 'hosehead-anim-info :hit-index 24)
|
|
(new 'static 'hosehead-anim-info :hit-index 25)
|
|
)
|
|
:blue-hit-anim (new 'static 'inline-array hosehead-anim-info 3
|
|
(new 'static 'hosehead-anim-info :hit-index 26 :land-index 27)
|
|
(new 'static 'hosehead-anim-info :hit-index 28 :land-index 29)
|
|
(new 'static 'hosehead-anim-info :hit-index 30 :land-index 31)
|
|
)
|
|
:knocked-anim (new 'static 'inline-array hosehead-anim-info 2
|
|
(new 'static 'hosehead-anim-info :hit-index 32 :land-index 33)
|
|
(new 'static 'hosehead-anim-info :hit-index 34 :land-index 35)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for method 77 of type hosehead
|
|
(defmethod enemy-method-77 ((this hosehead) (arg0 enemy-knocked-info))
|
|
(cond
|
|
((zero? (-> this hit-points))
|
|
(ja-channel-push! 1 (seconds 0.17))
|
|
(let ((a0-2 (-> this skel root-channel 0)))
|
|
(set! (-> a0-2 frame-group) (the-as art-joint-anim (-> this draw art-group data 18)))
|
|
(set! (-> a0-2 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> this draw art-group data 18)) frames num-frames) -1))
|
|
)
|
|
(set! (-> a0-2 param 1) (-> arg0 anim-speed))
|
|
(set! (-> a0-2 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-2 (the-as art-joint-anim (-> this draw art-group data 18)) num-func-seek!)
|
|
)
|
|
#t
|
|
)
|
|
(else
|
|
(case (-> this incoming knocked-type)
|
|
(((knocked-type knocked-type-4))
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(let* ((a2-1 (ash 1 (-> *hosehead-global-info* prev-yellow-hit)))
|
|
(v1-18 (rnd-bit this 2 a2-1))
|
|
(a1-8 (-> this draw art-group data (-> *hosehead-global-info* yellow-hit-anim v1-18 hit-index)))
|
|
)
|
|
(set! (-> *hosehead-global-info* prev-yellow-hit) v1-18)
|
|
(let ((a0-15 (-> this skel root-channel 0)))
|
|
(set! (-> a0-15 frame-group) (the-as art-joint-anim a1-8))
|
|
(set! (-> a0-15 param 0) (the float (+ (-> (the-as art-joint-anim a1-8) frames num-frames) -1)))
|
|
(set! (-> a0-15 param 1) (-> arg0 anim-speed))
|
|
(set! (-> a0-15 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-15 (the-as art-joint-anim a1-8) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
(((knocked-type knocked-type-6))
|
|
(let* ((a2-3 (ash 1 (-> *hosehead-global-info* prev-blue-hit)))
|
|
(v1-27 (rnd-bit this 3 a2-3))
|
|
(a1-13 (-> this draw art-group data (-> *hosehead-global-info* blue-hit-anim v1-27 hit-index)))
|
|
)
|
|
(set! (-> *hosehead-global-info* prev-blue-hit) v1-27)
|
|
(let ((a0-27 (-> this skel root-channel 0)))
|
|
(set! (-> a0-27 frame-group) (the-as art-joint-anim a1-13))
|
|
(set! (-> a0-27 param 0) (the float (+ (-> (the-as art-joint-anim a1-13) frames num-frames) -1)))
|
|
(set! (-> a0-27 param 1) 1.0)
|
|
(set! (-> a0-27 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-27 (the-as art-joint-anim a1-13) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(let* ((a2-5 (ash 1 (-> *hosehead-global-info* prev-knocked)))
|
|
(v1-37 (rnd-bit this 2 a2-5))
|
|
(a1-19 (-> this draw art-group data (-> *hosehead-global-info* knocked-anim v1-37 hit-index)))
|
|
)
|
|
(set! (-> *hosehead-global-info* prev-knocked) v1-37)
|
|
(let ((a0-39 (-> this skel root-channel 0)))
|
|
(set! (-> a0-39 frame-group) (the-as art-joint-anim a1-19))
|
|
(set! (-> a0-39 param 0) (the float (+ (-> (the-as art-joint-anim a1-19) frames num-frames) -1)))
|
|
(set! (-> a0-39 param 1) (-> arg0 anim-speed))
|
|
(set! (-> a0-39 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-39 (the-as art-joint-anim a1-19) num-func-seek!)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for method 78 of type hosehead
|
|
(defmethod enemy-method-78 ((this hosehead) (arg0 enemy-knocked-info))
|
|
(local-vars (v1-15 knocked-type))
|
|
(cond
|
|
((zero? (-> this hit-points))
|
|
(ja-channel-push! 1 (seconds 0.17))
|
|
(let ((a0-2 (-> this skel root-channel 0)))
|
|
(set! (-> a0-2 frame-group) (the-as art-joint-anim (-> this draw art-group data 19)))
|
|
(set! (-> a0-2 param 0)
|
|
(the float (+ (-> (the-as art-joint-anim (-> this draw art-group data 19)) frames num-frames) -1))
|
|
)
|
|
(set! (-> a0-2 param 1) (-> arg0 anim-speed))
|
|
(set! (-> a0-2 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-2 (the-as art-joint-anim (-> this draw art-group data 19)) num-func-seek!)
|
|
)
|
|
#t
|
|
)
|
|
((begin (set! v1-15 (-> this incoming knocked-type)) (= v1-15 (knocked-type knocked-type-6)))
|
|
(let* ((a0-4 (-> *hosehead-global-info* prev-blue-hit))
|
|
(s4-0 (-> this draw art-group data (-> *hosehead-global-info* blue-hit-anim a0-4 land-index)))
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(let ((a0-9 (-> this skel root-channel 0)))
|
|
(set! (-> a0-9 frame-group) (the-as art-joint-anim s4-0))
|
|
(set! (-> a0-9 param 0) (the float (+ (-> (the-as art-joint-anim s4-0) frames num-frames) -1)))
|
|
(set! (-> a0-9 param 1) (-> arg0 anim-speed))
|
|
(joint-control-channel-group! a0-9 (the-as art-joint-anim s4-0) num-func-seek!)
|
|
)
|
|
)
|
|
#t
|
|
)
|
|
((= v1-15 (knocked-type knocked-type-4))
|
|
#f
|
|
)
|
|
(else
|
|
(let* ((a0-11 (-> *hosehead-global-info* prev-knocked))
|
|
(s4-1 (-> this draw art-group data (-> *hosehead-global-info* knocked-anim a0-11 land-index)))
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(let ((a0-16 (-> this skel root-channel 0)))
|
|
(set! (-> a0-16 frame-group) (the-as art-joint-anim s4-1))
|
|
(set! (-> a0-16 param 0) (the float (+ (-> (the-as art-joint-anim s4-1) frames num-frames) -1)))
|
|
(set! (-> a0-16 param 1) (-> arg0 anim-speed))
|
|
(joint-control-channel-group! a0-16 (the-as art-joint-anim s4-1) num-func-seek!)
|
|
)
|
|
)
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for method 189 of type hosehead
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod hosehead-method-189 ((this hosehead))
|
|
(let ((a0-2 (handle->process (-> this focus handle))))
|
|
(when a0-2
|
|
(let ((s5-0 (new 'stack-no-clear 'vector)))
|
|
(set! (-> s5-0 quad) (-> (get-trans (the-as process-focusable a0-2) 1) quad))
|
|
(+! (-> s5-0 y) 8192.0)
|
|
(set! (-> this target-pos quad) (-> s5-0 quad))
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 190 of type hosehead
|
|
(defmethod hosehead-method-190 ((this hosehead))
|
|
(rlet ((acc :class vf)
|
|
(vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
(vf7 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(hosehead-method-189 this)
|
|
(let ((gp-0 (new 'stack-no-clear 'collide-query)))
|
|
(let ((s4-0 (-> gp-0 start-pos)))
|
|
(let ((s3-0 (-> this root trans)))
|
|
(let ((v1-4 (vector-y-quaternion! (new 'stack-no-clear 'vector) (-> this root quat))))
|
|
(let ((a0-4 6144.0))
|
|
(.mov vf7 a0-4)
|
|
)
|
|
(.lvf vf5 (&-> v1-4 quad))
|
|
)
|
|
(.lvf vf4 (&-> s3-0 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> s4-0 quad) vf6)
|
|
)
|
|
(vector-! (-> gp-0 move-dist) (-> this target-pos) (-> gp-0 start-pos))
|
|
(let ((v1-7 gp-0))
|
|
(set! (-> v1-7 radius) 1024.0)
|
|
(set! (-> v1-7 collide-with) (collide-spec backgnd enemy obstacle))
|
|
(set! (-> v1-7 ignore-process0) #f)
|
|
(set! (-> v1-7 ignore-process1) #f)
|
|
(set! (-> v1-7 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1))
|
|
(set! (-> v1-7 action-mask) (collide-action solid))
|
|
)
|
|
(< (fill-and-probe-using-line-sphere *collide-cache* gp-0) 0.0)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for function point-line-distance
|
|
;; INFO: Used lq/sq
|
|
(defun point-line-distance ((arg0 vector) (arg1 vector) (arg2 vector) (arg3 vector))
|
|
(local-vars (a1-5 float))
|
|
(rlet ((acc :class vf)
|
|
(vf0 :class vf)
|
|
(vf1 :class vf)
|
|
(vf2 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
(vf7 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(let ((v1-1 (vector-! (new 'stack-no-clear 'vector) arg1 arg2)))
|
|
(let ((f0-1 (vector-dot v1-1 arg3)))
|
|
(cond
|
|
((>= 0.0 f0-1)
|
|
0.0
|
|
)
|
|
(else
|
|
(.lvf vf1 (&-> arg3 quad))
|
|
(.add.w.vf.x vf2 vf0 vf0)
|
|
(.mul.vf vf1 vf1 vf1)
|
|
(.mul.x.vf.x acc vf2 vf1)
|
|
(.add.mul.y.vf.x acc vf2 vf1 acc)
|
|
(.add.mul.z.vf.x vf1 vf2 vf1 acc)
|
|
(.mov a1-5 vf1)
|
|
(let ((f0-3 (/ f0-1 a1-5))
|
|
(a2-2 v1-1)
|
|
)
|
|
(let ((a1-6 v1-1))
|
|
(let ((t0-0 (- f0-3)))
|
|
(.mov vf7 t0-0)
|
|
)
|
|
(.lvf vf5 (&-> arg3 quad))
|
|
(.lvf vf4 (&-> a1-6 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> a2-2 quad) vf6)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> arg0 quad) (-> v1-1 quad))
|
|
(vector-length v1-1)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for method 197 of type hosehead
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod hosehead-method-197 ((this hosehead))
|
|
(let ((s2-0 (new 'stack-no-clear 'matrix)))
|
|
(let* ((a2-0 (-> this node-list data 12 bone transform))
|
|
(v1-2 (-> a2-0 quad 0))
|
|
(a0-1 (-> a2-0 quad 1))
|
|
(a1-0 (-> a2-0 quad 2))
|
|
(a2-1 (-> a2-0 trans quad))
|
|
)
|
|
(set! (-> s2-0 quad 0) v1-2)
|
|
(set! (-> s2-0 quad 1) a0-1)
|
|
(set! (-> s2-0 quad 2) a1-0)
|
|
(set! (-> s2-0 trans quad) a2-1)
|
|
)
|
|
(new 'stack-no-clear 'matrix)
|
|
(let ((s3-0 (new 'stack-no-clear 'collide-query))
|
|
(s5-0 (new 'stack-no-clear 'vector))
|
|
(s4-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(seek! (-> this lazer-length) 327680.0 (* 327680.0 (seconds-per-frame)))
|
|
(vector-normalize-copy! s5-0 (-> s2-0 vector 1) (-> this lazer-length))
|
|
(matrix->trans s2-0 s4-0)
|
|
(set! (-> this lazer-dist) (lerp-scale
|
|
1.0
|
|
0.0
|
|
(point-line-distance (-> this lazer-pos-sound) (-> this target-pos) s4-0 s5-0)
|
|
0.0
|
|
40960.0
|
|
)
|
|
)
|
|
(vector-! (-> this lazer-pos-sound) (-> this target-pos) (-> this lazer-pos-sound))
|
|
(set! (-> s3-0 start-pos quad) (-> s4-0 quad))
|
|
(set! (-> s3-0 move-dist quad) (-> s5-0 quad))
|
|
(let ((v1-9 s3-0))
|
|
(set! (-> v1-9 radius) 40.96)
|
|
(set! (-> v1-9 collide-with)
|
|
(collide-spec backgnd jak bot enemy obstacle hit-by-player-list hit-by-others-list player-list)
|
|
)
|
|
(set! (-> v1-9 ignore-process0) #f)
|
|
(set! (-> v1-9 ignore-process1) #f)
|
|
(set! (-> v1-9 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1))
|
|
(set! (-> v1-9 action-mask) (collide-action solid))
|
|
)
|
|
(let ((f0-7 (fill-and-probe-using-line-sphere *collide-cache* s3-0)))
|
|
(when (>= f0-7 0.0)
|
|
(vector-float*! s5-0 s5-0 f0-7)
|
|
(let ((s3-1 (the-as basic (as-type (-> s3-0 best-other-tri collide-ptr) collide-shape-prim))))
|
|
(when s3-1
|
|
(if (logtest? (-> (the-as collide-shape-prim s3-1) prim-core collide-as) (collide-spec enemy))
|
|
(go-hostile this)
|
|
)
|
|
(if (logtest? (-> (the-as collide-shape-prim s3-1) prim-core collide-as) (collide-spec jak bot))
|
|
(send-event
|
|
(-> (the-as collide-shape-prim s3-1) cshape process)
|
|
'attack
|
|
#f
|
|
(static-attack-info ((id (new-attack-id)) (mode 'beam)))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> *part-id-table* 1455 init-specs 4 initial-valuef) (vector-length s5-0))
|
|
(draw-beam (-> *part-id-table* 1455) s4-0 s5-0 #f #t)
|
|
(launch-particles (-> *part-id-table* 1456) s4-0)
|
|
(launch-particles (-> *part-id-table* 1457) (vector+! (new 'stack-no-clear 'vector) s5-0 s4-0))
|
|
)
|
|
)
|
|
(let ((s5-1 sound-play-by-spec)
|
|
(s4-1 (static-sound-spec "hosehead-lazer" :volume 0.0 :mask (pitch)))
|
|
)
|
|
(set! (-> s4-1 volume) (the int (* 1024.0 (lerp-scale 1.0 0.4 (-> this lazer-dist) 1.0 0.0))))
|
|
(set! (-> s4-1 pitch-mod) 0)
|
|
(s5-1 s4-1 (-> this lazer-sound) (-> this lazer-pos-sound))
|
|
)
|
|
(let ((s5-2 sound-play-by-spec)
|
|
(s4-2 (static-sound-spec "lazer-sub" :volume 0.0 :mask (pitch)))
|
|
)
|
|
(set! (-> s4-2 volume) (the int (* 1024.0 (lerp-scale 1.0 0.0 (-> this lazer-dist) 1.0 0.5))))
|
|
(set! (-> s4-2 pitch-mod) 0)
|
|
(s5-2 s4-2 (-> this lazer-sound2) (-> this lazer-pos-sound))
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 88 of type hosehead
|
|
(defmethod enemy-method-88 ((this hosehead) (arg0 enemy-jump-info))
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(let ((a1-2 (-> this draw art-group data (-> this enemy-info jump-land-anim)))
|
|
(a0-4 (-> this skel root-channel 0))
|
|
)
|
|
(set! (-> a0-4 frame-group) (the-as art-joint-anim a1-2))
|
|
(set! (-> a0-4 param 0) (the float (+ (-> (the-as art-joint-anim a1-2) frames num-frames) -1)))
|
|
(set! (-> a0-4 param 1) (-> arg0 anim-speed))
|
|
(set! (-> a0-4 frame-num) 0.0)
|
|
(joint-control-channel-group! a0-4 (the-as art-joint-anim a1-2) num-func-seek!)
|
|
)
|
|
#t
|
|
)
|
|
|
|
;; definition for method 74 of type hosehead
|
|
(defmethod general-event-handler ((this hosehead) (arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
"Handles various events for the enemy
|
|
@TODO - unsure if there is a pattern for the events and this should have a more specific name"
|
|
(case arg2
|
|
(('cue-chase)
|
|
(cond
|
|
((-> this on-wall?)
|
|
(logclear! (-> this enemy-flags) (enemy-flag use-notice-distance directed directed-ready use-trigger))
|
|
(logior! (-> this enemy-flags) (enemy-flag chase-startup))
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(go (method-of-object this notice-wall))
|
|
)
|
|
((-> this sentry?)
|
|
(when (and (-> this next-state) (= (-> this next-state name) 'idle-sentry))
|
|
(logclear! (-> this enemy-flags) (enemy-flag use-notice-distance directed directed-ready use-trigger))
|
|
(logior! (-> this enemy-flags) (enemy-flag chase-startup))
|
|
(logclear! (-> this mask) (process-mask actor-pause))
|
|
(go (method-of-object this hostile-sentry))
|
|
)
|
|
)
|
|
(else
|
|
((method-of-type nav-enemy general-event-handler) this arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
(('stop-sentry)
|
|
(set! (-> this sentry?) #f)
|
|
#t
|
|
)
|
|
(else
|
|
((method-of-type nav-enemy general-event-handler) this arg0 arg1 arg2 arg3)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for method 186 of type hosehead
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch vector vs none.
|
|
(defmethod hosehead-method-186 ((this hosehead))
|
|
(rlet ((acc :class vf)
|
|
(vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
(vf7 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(let ((s3-0 (new 'stack-no-clear 'collide-query))
|
|
(gp-0 (new 'stack-no-clear 'vector))
|
|
(s5-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(let ((s2-0 gp-0))
|
|
(let ((s1-0 (-> this root trans)))
|
|
(let ((v1-2 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> this root quat))))
|
|
(let ((a0-3 8192.0))
|
|
(.mov vf7 a0-3)
|
|
)
|
|
(.lvf vf5 (&-> v1-2 quad))
|
|
)
|
|
(.lvf vf4 (&-> s1-0 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> s2-0 quad) vf6)
|
|
)
|
|
(set! (-> s5-0 quad) (-> gp-0 quad))
|
|
(+! (-> gp-0 y) -8192.0)
|
|
(+! (-> s5-0 y) 8192.0)
|
|
(set! (-> s3-0 start-pos quad) (-> gp-0 quad))
|
|
(vector-float*!
|
|
(-> s3-0 move-dist)
|
|
(vector-z-quaternion! (new 'stack-no-clear 'vector) (-> this root quat))
|
|
-16384.0
|
|
)
|
|
(let ((v1-9 s3-0))
|
|
(set! (-> v1-9 radius) 40.96)
|
|
(set! (-> v1-9 collide-with) (collide-spec backgnd))
|
|
(set! (-> v1-9 ignore-process0) #f)
|
|
(set! (-> v1-9 ignore-process1) #f)
|
|
(set! (-> v1-9 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1))
|
|
(set! (-> v1-9 action-mask) (collide-action solid))
|
|
)
|
|
(let ((f0-7 (fill-and-probe-using-line-sphere *collide-cache* s3-0)))
|
|
(when (>= f0-7 0.0)
|
|
(let ((a1-4 gp-0))
|
|
(let ((v1-12 gp-0))
|
|
(let ((a0-15 (-> s3-0 move-dist)))
|
|
(let ((a2-0 f0-7))
|
|
(.mov vf7 a2-0)
|
|
)
|
|
(.lvf vf5 (&-> a0-15 quad))
|
|
)
|
|
(.lvf vf4 (&-> v1-12 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> a1-4 quad) vf6)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> s3-0 start-pos quad) (-> s5-0 quad))
|
|
(vector-float*!
|
|
(-> s3-0 move-dist)
|
|
(vector-z-quaternion! (new 'stack-no-clear 'vector) (-> this root quat))
|
|
-16384.0
|
|
)
|
|
(let ((v1-16 s3-0))
|
|
(set! (-> v1-16 radius) 40.96)
|
|
(set! (-> v1-16 collide-with) (collide-spec backgnd))
|
|
(set! (-> v1-16 ignore-process0) #f)
|
|
(set! (-> v1-16 ignore-process1) #f)
|
|
(set! (-> v1-16 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1))
|
|
(set! (-> v1-16 action-mask) (collide-action solid))
|
|
)
|
|
(let ((f0-10 (fill-and-probe-using-line-sphere *collide-cache* s3-0)))
|
|
(when (>= f0-10 0.0)
|
|
(let ((a0-26 s5-0))
|
|
(let ((v1-19 s5-0))
|
|
(let ((a1-7 (-> s3-0 move-dist)))
|
|
(let ((a2-1 f0-10))
|
|
(.mov vf7 a2-1)
|
|
)
|
|
(.lvf vf5 (&-> a1-7 quad))
|
|
)
|
|
(.lvf vf4 (&-> v1-19 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> a0-26 quad) vf6)
|
|
)
|
|
)
|
|
)
|
|
(let ((s2-6 (vector-! (new 'stack-no-clear 'vector) gp-0 s5-0))
|
|
(s1-1 (vector-x-quaternion! (new 'stack-no-clear 'vector) (-> this root quat)))
|
|
(s3-1 (new 'stack-no-clear 'quaternion))
|
|
)
|
|
(let ((s0-0 (new 'stack-no-clear 'matrix)))
|
|
(vector-normalize! s2-6 1.0)
|
|
(quaternion-vector-angle! s3-1 s1-1 -16384.0)
|
|
(quaternion->matrix s0-0 s3-1)
|
|
(vector-rotate*! s2-6 s2-6 s0-0)
|
|
)
|
|
(quaternion-look-at! s3-1 s2-6 *up-vector*)
|
|
(quaternion-pseudo-seek (-> this root quat) (-> this root quat) s3-1 (seconds-per-frame))
|
|
)
|
|
(vector-average! (-> this root trans) gp-0 s5-0)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; definition for method 185 of type hosehead
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod hosehead-method-185 ((this hosehead))
|
|
(countdown (s5-0 (length (-> this actor-group 1)))
|
|
(let* ((v1-5 (-> this actor-group 1 data s5-0 actor))
|
|
(a0-4 (if v1-5
|
|
(-> v1-5 extra process)
|
|
)
|
|
)
|
|
)
|
|
(send-event a0-4 'stop-sentry)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate idle-sentry (hosehead)
|
|
:virtual #t
|
|
:event enemy-event-handler
|
|
:enter (-> (method-of-type nav-enemy idle) enter)
|
|
:exit (-> (method-of-type nav-enemy idle) exit)
|
|
:trans (behavior ()
|
|
(when (time-elapsed? (-> self state-time) (-> self state-timeout))
|
|
(let ((a0-3 (handle->process (-> self focus handle))))
|
|
(when a0-3
|
|
(let ((f0-0 (vector-vector-xz-distance (get-trans (the-as process-focusable a0-3) 0) (-> self root trans))))
|
|
(if (>= 98304.0 f0-0)
|
|
(hosehead-method-185 self)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (not (-> self sentry?))
|
|
(logior! (-> self enemy-flags) (enemy-flag multi-focus))
|
|
(set! (-> self focus collide-with) (collide-spec jak bot player-list jak-vehicle))
|
|
(let ((gp-1 (-> self on-stop-sentry)))
|
|
(if gp-1
|
|
(script-eval (the-as pair gp-1) :vector (-> self root trans))
|
|
)
|
|
)
|
|
(go-virtual active)
|
|
)
|
|
)
|
|
)
|
|
:code (-> (method-of-type nav-enemy idle) code)
|
|
:post (-> (method-of-type nav-enemy idle) post)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate hostile-sentry (hosehead)
|
|
:virtual #t
|
|
:event enemy-event-handler
|
|
:enter (behavior ()
|
|
((-> (method-of-type nav-enemy hostile) enter))
|
|
(logior! (-> self skel status) (joint-control-status sync-math))
|
|
(logior! (-> self focus-status) (focus-status dangerous))
|
|
(let* ((v1-7 *game-info*)
|
|
(a0-2 (+ (-> v1-7 attack-id) 1))
|
|
)
|
|
(set! (-> v1-7 attack-id) a0-2)
|
|
(set! (-> self attack-id) a0-2)
|
|
)
|
|
(set! (-> self fire-beam?) #f)
|
|
(set! (-> self allow-head) #t)
|
|
(set! (-> self lazer-length) 0.0)
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:exit (behavior ()
|
|
(sound-stop (-> self lazer-sound))
|
|
(sound-stop (-> self lazer-sound2))
|
|
(logclear! (-> self skel status) (joint-control-status sync-math))
|
|
(set! (-> self allow-head) #f)
|
|
(set! (-> self fire-beam?) #f)
|
|
(if (logtest? (-> self enemy-flags) (enemy-flag dangerous-backup))
|
|
(logior! (-> self focus-status) (focus-status dangerous))
|
|
(logclear! (-> self focus-status) (focus-status dangerous))
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(rlet ((acc :class vf)
|
|
(vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
(vf7 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(let ((gp-0 (-> self target-pos)))
|
|
(let ((s5-0 (-> self root trans)))
|
|
(let ((v1-2 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self root quat))))
|
|
(let ((a0-2 40960.0))
|
|
(.mov vf7 a0-2)
|
|
)
|
|
(.lvf vf5 (&-> v1-2 quad))
|
|
)
|
|
(.lvf vf4 (&-> s5-0 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> gp-0 quad) vf6)
|
|
)
|
|
(+! (-> self target-pos y) 2867.2)
|
|
(let ((f0-5 (* (-> self angle-sentry) (+ -0.5 (get-norm! (-> self sync) 0)))))
|
|
(if (logtest? (enemy-flag drawn-mirrored) (-> self enemy-flags))
|
|
(set! f0-5 (- f0-5))
|
|
)
|
|
(set! (-> self head-angle) f0-5)
|
|
)
|
|
(when (time-elapsed? (-> self state-time) (-> self state-timeout))
|
|
(let ((a0-8 (handle->process (-> self focus handle))))
|
|
(when a0-8
|
|
(let ((f0-6 (vector-vector-xz-distance (get-trans (the-as process-focusable a0-8) 0) (-> self root trans))))
|
|
(if (>= 98304.0 f0-6)
|
|
(hosehead-method-185 self)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (not (-> self sentry?))
|
|
(logior! (-> self enemy-flags) (enemy-flag multi-focus))
|
|
(set! (-> self focus collide-with) (collide-spec jak bot player-list jak-vehicle))
|
|
(let ((gp-2 (-> self on-stop-sentry)))
|
|
(if gp-2
|
|
(script-eval (the-as pair gp-2) :vector (-> self root trans))
|
|
)
|
|
)
|
|
(go-hostile self)
|
|
)
|
|
)
|
|
(set! (-> self fire-beam?) (if (handle->process (-> self focus handle))
|
|
#t
|
|
#f
|
|
)
|
|
)
|
|
(if (not (-> self fire-beam?))
|
|
(set! (-> self lazer-length) 0.0)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(let ((f30-0 (rnd-float-range self 0.9 1.1)))
|
|
(ja-channel-push! 1 (seconds 0.01))
|
|
(set! (-> self fire-beam?) #t)
|
|
(until #f
|
|
(ja-no-eval :group! hosehead-shoot-loop-ja :num! (seek! max f30-0) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
(suspend)
|
|
)
|
|
#f
|
|
(sound-stop (-> self lazer-sound))
|
|
(sound-stop (-> self lazer-sound2))
|
|
(ja-no-eval :group! hosehead-shoot-end-ja :num! (seek! max f30-0) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
)
|
|
)
|
|
:post (behavior ()
|
|
(enemy-simple-post)
|
|
(if (-> self fire-beam?)
|
|
(hosehead-method-197 self)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for method 192 of type hosehead
|
|
;; INFO: Used lq/sq
|
|
(defmethod hosehead-method-192 ((this hosehead) (arg0 vector))
|
|
(local-vars (a2-7 float) (a2-14 float))
|
|
(rlet ((vf1 :class vf)
|
|
(vf2 :class vf)
|
|
(vf3 :class vf)
|
|
)
|
|
(set! (-> arg0 x) (rnd-float-range this 5607424.0 5812224.0))
|
|
(set! (-> arg0 z) (rnd-float-range this 2027520.0 1961984.0))
|
|
(set! (-> arg0 y) -368680.97)
|
|
(let ((gp-1 (new 'stack-no-clear 'vector)))
|
|
(set! (-> gp-1 quad) (-> arg0 quad))
|
|
(set! (-> gp-1 w) 32768.0)
|
|
(set! *actor-list-length* 0)
|
|
(if #t
|
|
(set! *actor-list-length* (fill-actor-list-for-sphere *actor-hash* (the-as sphere gp-1) *actor-list* 256))
|
|
)
|
|
(when #t
|
|
(let ((a0-5 (-> *collide-player-list* alive-list next0)))
|
|
*collide-player-list*
|
|
(let ((v1-18 (-> a0-5 next0)))
|
|
(while (!= a0-5 (-> *collide-player-list* alive-list-end))
|
|
(let* ((a0-6 (-> (the-as connection a0-5) param1))
|
|
(a1-4 (-> (the-as collide-shape a0-6) root-prim))
|
|
)
|
|
(when (logtest? (-> a1-4 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list))
|
|
(let ((a1-5 (-> a1-4 prim-core)))
|
|
(let ((a2-6 a1-5)
|
|
(a3-1 gp-1)
|
|
)
|
|
(.lvf vf2 (&-> a2-6 world-sphere quad))
|
|
(.lvf vf3 (&-> a3-1 quad))
|
|
)
|
|
(.sub.vf vf1 vf3 vf2)
|
|
(.mul.vf vf1 vf1 vf1)
|
|
(.add.y.vf.x vf1 vf1 vf1)
|
|
(.add.z.vf.x vf1 vf1 vf1)
|
|
(.mov a2-7 vf1)
|
|
(when (< a2-7 (square (+ (-> a1-5 world-sphere w) (-> gp-1 w))))
|
|
(when (< *actor-list-length* 256)
|
|
(set! (-> *actor-list* *actor-list-length*) (the-as collide-shape a0-6))
|
|
(set! *actor-list-length* (+ *actor-list-length* 1))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! a0-5 v1-18)
|
|
*collide-player-list*
|
|
(set! v1-18 (-> v1-18 next0))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when #f
|
|
(let ((a0-8 (-> *collide-hit-by-player-list* alive-list next0)))
|
|
*collide-hit-by-player-list*
|
|
(let ((v1-25 (-> a0-8 next0)))
|
|
(while (!= a0-8 (-> *collide-hit-by-player-list* alive-list-end))
|
|
(let* ((a0-9 (-> (the-as connection a0-8) param1))
|
|
(a1-16 (-> (the-as collide-shape a0-9) root-prim))
|
|
)
|
|
(when (logtest? (-> a1-16 prim-core collide-as) (collide-spec jak bot enemy hit-by-others-list player-list))
|
|
(let ((a1-17 (-> a1-16 prim-core)))
|
|
(let ((a2-13 a1-17)
|
|
(a3-2 gp-1)
|
|
)
|
|
(.lvf vf2 (&-> a2-13 world-sphere quad))
|
|
(.lvf vf3 (&-> a3-2 quad))
|
|
)
|
|
(.sub.vf vf1 vf3 vf2)
|
|
(.mul.vf vf1 vf1 vf1)
|
|
(.add.y.vf.x vf1 vf1 vf1)
|
|
(.add.z.vf.x vf1 vf1 vf1)
|
|
(.mov a2-14 vf1)
|
|
(when (< a2-14 (square (+ (-> a1-17 world-sphere w) (-> gp-1 w))))
|
|
(when (< *actor-list-length* 256)
|
|
(set! (-> *actor-list* *actor-list-length*) (the-as collide-shape a0-9))
|
|
(set! *actor-list-length* (+ *actor-list-length* 1))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! a0-8 v1-25)
|
|
*collide-hit-by-player-list*
|
|
(set! v1-25 (-> v1-25 next0))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(dotimes (s5-1 *actor-list-length*)
|
|
(let ((v1-30 (-> *actor-list* s5-1)))
|
|
(when (logtest? (-> v1-30 root-prim prim-core collide-as)
|
|
(collide-spec jak bot enemy hit-by-others-list player-list)
|
|
)
|
|
(if (>= (square (if (= (-> v1-30 process type) target)
|
|
28672.0
|
|
20480.0
|
|
)
|
|
)
|
|
(vector-vector-xz-distance-squared gp-1 (-> v1-30 trans))
|
|
)
|
|
(return #f)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
#t
|
|
)
|
|
)
|
|
|
|
;; definition for method 191 of type hosehead
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch float vs none.
|
|
(defmethod hosehead-method-191 ((this hosehead) (arg0 vector) (arg1 vector))
|
|
(cond
|
|
((logtest? (-> this fact enemy-options) (enemy-option user10))
|
|
(countdown (s3-0 8)
|
|
(if (hosehead-method-192 this arg1)
|
|
(goto cfg-7)
|
|
)
|
|
)
|
|
(label cfg-7)
|
|
(set! (-> arg0 quad) (-> arg1 quad))
|
|
(let ((f0-0 (vector-vector-xz-distance arg1 (math-camera-pos))))
|
|
(+! (-> arg0 y) (lerp-scale 61440.0 102400.0 f0-0 40960.0 245760.0))
|
|
)
|
|
)
|
|
(else
|
|
(set! (-> arg1 quad) (-> this root trans quad))
|
|
(set! (-> arg0 quad) (-> arg1 quad))
|
|
(+! (-> arg0 y) 81920.0)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate directed (hosehead)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(when (or (logtest? (-> self fact enemy-options) (enemy-option user8))
|
|
(logtest? (-> self fact enemy-options) (enemy-option user10))
|
|
)
|
|
(logior! (-> self draw status) (draw-control-status no-draw))
|
|
(let ((v1-10 (-> self root root-prim)))
|
|
(set! (-> v1-10 prim-core collide-as) (collide-spec))
|
|
(set! (-> v1-10 prim-core collide-with) (collide-spec))
|
|
)
|
|
0
|
|
)
|
|
(let ((t9-0 (-> (method-of-type nav-enemy directed) enter)))
|
|
(if t9-0
|
|
(t9-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate ambush (hosehead)
|
|
:virtual #t
|
|
:event enemy-event-handler
|
|
:enter (behavior ()
|
|
(let ((v1-0 self))
|
|
(set! (-> v1-0 enemy-flags) (the-as enemy-flag (logclear (-> v1-0 enemy-flags) (enemy-flag enemy-flag36))))
|
|
(set! (-> v1-0 nav callback-info) *nav-enemy-null-callback-info*)
|
|
)
|
|
0
|
|
(let ((v1-3 self))
|
|
(set! (-> v1-3 enemy-flags) (the-as enemy-flag (logclear (-> v1-3 enemy-flags) (enemy-flag enemy-flag37))))
|
|
)
|
|
0
|
|
(let ((v1-6 (-> self root root-prim)))
|
|
(set! (-> v1-6 prim-core collide-as) (collide-spec))
|
|
(set! (-> v1-6 prim-core collide-with) (collide-spec))
|
|
)
|
|
0
|
|
(when (logtest? (-> self enemy-flags) (enemy-flag enable-on-notice))
|
|
(logclear! (-> self enemy-flags) (enemy-flag enable-on-notice))
|
|
(let ((gp-0 (-> self on-notice)))
|
|
(if gp-0
|
|
(script-eval gp-0 :vector (-> self root trans))
|
|
)
|
|
)
|
|
)
|
|
(logior! (-> self enemy-flags) (enemy-flag alert))
|
|
(let ((gp-1 (new 'stack-no-clear 'vector)))
|
|
(let ((s5-0 (new 'stack-no-clear 'vector)))
|
|
(hosehead-method-191 self gp-1 s5-0)
|
|
(set! (-> self root trans quad) (-> s5-0 quad))
|
|
(set! (-> self jump-point quad) (-> s5-0 quad))
|
|
)
|
|
(let ((a0-13 (enemy-method-97 self)))
|
|
(when a0-13
|
|
(let* ((s5-1 (-> self root))
|
|
(s2-0
|
|
(vector-normalize!
|
|
(vector-! (new 'stack-no-clear 'vector) (get-trans (the-as process-focusable a0-13) 0) (-> s5-1 trans))
|
|
1.0
|
|
)
|
|
)
|
|
(f0-0 (deg-diff (quaternion-y-angle (-> s5-1 quat)) (vector-y-angle s2-0)))
|
|
)
|
|
(quaternion-rotate-y! (-> s5-1 quat) (-> s5-1 quat) f0-0)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self root trans quad) (-> gp-1 quad))
|
|
)
|
|
(transform-post)
|
|
(logior! (-> self focus-status) (focus-status dangerous))
|
|
(vector-reset! (-> self root transv))
|
|
(let* ((v1-37 *game-info*)
|
|
(a0-22 (+ (-> v1-37 attack-id) 1))
|
|
)
|
|
(set! (-> v1-37 attack-id) a0-22)
|
|
(set! (-> self attack-id) a0-22)
|
|
)
|
|
(if (logtest? (enemy-option water) (-> self fact enemy-options))
|
|
(logior! (-> self enemy-flags) (enemy-flag check-water check-water-backup))
|
|
)
|
|
(logclear! (-> self draw status) (draw-control-status no-draw))
|
|
)
|
|
:exit (behavior ()
|
|
(logclear! (-> self focus-status) (focus-status dangerous))
|
|
)
|
|
:trans (behavior ()
|
|
(when (>= 61440.0 (- (-> self root trans y) (-> self jump-point y)))
|
|
(let ((v1-3 (-> self root root-prim)))
|
|
(set! (-> v1-3 prim-core collide-as) (-> self root backup-collide-as))
|
|
(set! (-> v1-3 prim-core collide-with) (-> self root backup-collide-with))
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 (seconds 0.17))
|
|
(ja-no-eval :group! hosehead-jump-down-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(until #f
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
:post (behavior ()
|
|
(nav-enemy-falling-post)
|
|
(if (logtest? (-> self root status) (collide-status on-surface))
|
|
(go-virtual ambush-land)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate ambush-land (hosehead)
|
|
:virtual #t
|
|
:event enemy-event-handler
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 (seconds 0.17))
|
|
(ja-no-eval :group! hosehead-jump-down-land-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(go-hostile self)
|
|
)
|
|
:post nav-enemy-falling-post
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate active-wall (hosehead)
|
|
:virtual #t
|
|
:event enemy-event-handler
|
|
:enter (behavior ()
|
|
(set-time! (-> self state-time))
|
|
(let ((v1-2 self))
|
|
(if (not (logtest? (enemy-flag enemy-flag36) (-> v1-2 enemy-flags)))
|
|
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag38) (-> v1-2 enemy-flags))))
|
|
)
|
|
(set! (-> v1-2 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag36) (-> v1-2 enemy-flags))))
|
|
(set! (-> v1-2 nav callback-info) (-> v1-2 enemy-info callback-info))
|
|
)
|
|
0
|
|
(let ((v1-5 self))
|
|
(set! (-> v1-5 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag37) (-> v1-5 enemy-flags))))
|
|
)
|
|
0
|
|
(stop-looking-at-target! self)
|
|
)
|
|
:trans (behavior ()
|
|
'()
|
|
)
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 (seconds 0.05))
|
|
(until #f
|
|
(ja-no-eval :group! hosehead-idle-wall0-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
:post nav-enemy-simple-post
|
|
)
|
|
|
|
;; definition for method 196 of type hosehead
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch symbol vs none.
|
|
(defmethod hosehead-method-196 ((this hosehead))
|
|
(rlet ((acc :class vf)
|
|
(vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
(vf7 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(let ((s5-0 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> this root quat)))
|
|
(f30-0 0.0)
|
|
)
|
|
(vector-float*! s5-0 s5-0 20480.0)
|
|
(dotimes (s4-0 16)
|
|
(let ((s1-0 (new 'stack-no-clear 'vector))
|
|
(s3-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(vector-rotate-around-y! s1-0 s5-0 (* 182.04445 (the float (+ (* 11 s4-0) -90))))
|
|
(let ((v1-7 s3-0))
|
|
(let ((a0-5 (-> this root trans)))
|
|
(let ((a1-3 s1-0))
|
|
(let ((a2-2 1.0))
|
|
(.mov vf7 a2-2)
|
|
)
|
|
(.lvf vf5 (&-> a1-3 quad))
|
|
)
|
|
(.lvf vf4 (&-> a0-5 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> v1-7 quad) vf6)
|
|
)
|
|
(let ((v1-8 (-> this nav))
|
|
(a0-6 s3-0)
|
|
(a1-4 (new 'stack-no-clear 'nav-find-poly-parms))
|
|
)
|
|
(vector-! (-> a1-4 point) a0-6 (-> v1-8 state mesh bounds))
|
|
(set! (-> a1-4 y-threshold) (-> v1-8 nearest-y-threshold))
|
|
(set! (-> a1-4 ignore) (the-as uint 2))
|
|
(let ((s2-0 (find-poly-containing-point-local (-> v1-8 state mesh) a1-4)))
|
|
(when s2-0
|
|
(let ((f28-0 (vector-dot s1-0 s5-0)))
|
|
(new 'stack-no-clear 'matrix3)
|
|
(let ((a1-5 (new 'stack-no-clear 'vector)))
|
|
(set! (-> a1-5 quad) (-> s3-0 quad))
|
|
(set! (-> a1-5 w) 8192.0)
|
|
(when (not (add-root-sphere-to-hash! (-> this nav) a1-5 32))
|
|
(when (< f30-0 f28-0)
|
|
(set! f30-0 f28-0)
|
|
(let ((s0-0 (new 'stack-no-clear 'vector))
|
|
(sv-784 (new 'stack-no-clear 'vector))
|
|
(s1-1 (new 'stack 'collide-query))
|
|
)
|
|
(let ((sv-768 (-> this nav))
|
|
(sv-800 s0-0)
|
|
)
|
|
(let ((v1-22 s3-0))
|
|
(project-point-onto-plane-of-poly-local
|
|
(-> sv-768 state mesh)
|
|
s2-0
|
|
sv-800
|
|
sv-784
|
|
(vector-! (new 'stack-no-clear 'vector) v1-22 (-> sv-768 state mesh bounds))
|
|
)
|
|
)
|
|
(let ((v1-23 sv-800))
|
|
(let ((a0-17 (-> sv-768 state mesh bounds)))
|
|
(.mov.vf.w vf6 vf0)
|
|
(.lvf vf4 (&-> sv-800 quad))
|
|
(.lvf vf5 (&-> a0-17 quad))
|
|
)
|
|
(.add.vf.xyz vf6 vf4 vf5)
|
|
(.svf (&-> v1-23 quad) vf6)
|
|
)
|
|
)
|
|
0
|
|
(set! (-> s3-0 y) (-> s0-0 y))
|
|
(if (enemy-above-ground? this s1-1 s3-0 (collide-spec backgnd) 8192.0 81920.0 1024.0)
|
|
(set! (-> s3-0 y) (-> s1-1 best-other-tri intersect y))
|
|
)
|
|
)
|
|
(set! (-> this jump-point quad) (-> s3-0 quad))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate notice-wall (hosehead)
|
|
:virtual #t
|
|
:event enemy-event-handler
|
|
:enter (behavior ()
|
|
(rlet ((acc :class vf)
|
|
(vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
(vf7 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(logclear! (-> self enemy-flags) (enemy-flag alert))
|
|
((-> (method-of-type nav-enemy notice) enter))
|
|
(let ((v1-4 self))
|
|
(set! (-> v1-4 enemy-flags) (the-as enemy-flag (logclear (-> v1-4 enemy-flags) (enemy-flag enemy-flag36))))
|
|
(set! (-> v1-4 nav callback-info) *nav-enemy-null-callback-info*)
|
|
)
|
|
0
|
|
(let ((v1-7 self))
|
|
(set! (-> v1-7 enemy-flags) (the-as enemy-flag (logclear (-> v1-7 enemy-flags) (enemy-flag enemy-flag37))))
|
|
)
|
|
0
|
|
(set! (-> self on-wall?) #f)
|
|
(idle-control-method-9 (-> self idle-anim-player) *hosehead-idle-ground*)
|
|
(let ((v1-10 (-> self nav)))
|
|
(set! (-> v1-10 nearest-y-threshold) 204800.0)
|
|
)
|
|
0
|
|
(let ((gp-0 #f)
|
|
(f30-0 4096.0)
|
|
)
|
|
(while (not gp-0)
|
|
(let ((s5-0 (new 'stack-no-clear 'vector)))
|
|
(let ((s4-0 (-> self root trans)))
|
|
(let ((v0-2 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self root quat))))
|
|
(let ((v1-15 f30-0))
|
|
(.mov vf7 v1-15)
|
|
)
|
|
(.lvf vf5 (&-> v0-2 quad))
|
|
)
|
|
(.lvf vf4 (&-> s4-0 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> s5-0 quad) vf6)
|
|
(let ((v1-16 (-> self nav))
|
|
(a0-9 s5-0)
|
|
(a1-4 (new 'stack-no-clear 'nav-find-poly-parms))
|
|
)
|
|
(vector-! (-> a1-4 point) a0-9 (-> v1-16 state mesh bounds))
|
|
(set! (-> a1-4 y-threshold) (-> v1-16 nearest-y-threshold))
|
|
(set! (-> a1-4 ignore) (the-as uint 2))
|
|
(let ((s2-0 (find-poly-containing-point-local (-> v1-16 state mesh) a1-4)))
|
|
(set! (-> self jump-point quad) (-> s5-0 quad))
|
|
(when s2-0
|
|
(let ((s3-0 (new 'stack-no-clear 'vector))
|
|
(sv-688 (new 'stack-no-clear 'vector))
|
|
(s4-1 (new 'stack 'collide-query))
|
|
)
|
|
(let ((s0-0 (-> self nav))
|
|
(s1-0 s3-0)
|
|
)
|
|
(let ((v1-22 s5-0))
|
|
(project-point-onto-plane-of-poly-local
|
|
(-> s0-0 state mesh)
|
|
s2-0
|
|
s1-0
|
|
sv-688
|
|
(vector-! (new 'stack-no-clear 'vector) v1-22 (-> s0-0 state mesh bounds))
|
|
)
|
|
)
|
|
(vector+! s1-0 s1-0 (-> s0-0 state mesh bounds))
|
|
)
|
|
0
|
|
(set! (-> s5-0 y) (-> s3-0 y))
|
|
(when (enemy-above-ground? self s4-1 s5-0 (collide-spec backgnd) 8192.0 81920.0 1024.0)
|
|
(set! (-> s5-0 y) (-> s4-1 best-other-tri intersect y))
|
|
(set! gp-0 #t)
|
|
)
|
|
)
|
|
(set! (-> self jump-point quad) (-> s5-0 quad))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! f30-0 (+ 4096.0 f30-0))
|
|
(when (< 61440.0 f30-0)
|
|
(format #t "!!!!! Hosehead jump point not found~%")
|
|
(set! gp-0 #t)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(set! (-> self come-from-notice) #t)
|
|
(ja-channel-push! 1 (seconds 0.05))
|
|
(until #f
|
|
(ja-no-eval :group! hosehead-walk-wall-ja :num! (seek! max 1.5) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(set! (-> self root trans y) (- (-> self root trans y) (* 36864.0 (seconds-per-frame))))
|
|
(hosehead-method-186 self)
|
|
(suspend)
|
|
(ja :num! (seek! max 1.5))
|
|
)
|
|
(when (< (- (-> self root trans y) (-> self jump-point y)) 40960.0)
|
|
(hosehead-method-196 self)
|
|
(set! (-> self enemy-flags)
|
|
(the-as enemy-flag (logclear (-> self enemy-flags) (enemy-flag jump-check-blocked)))
|
|
)
|
|
(send-event self 'jump 0 (-> self jump-point))
|
|
)
|
|
(suspend)
|
|
)
|
|
#f
|
|
)
|
|
:post (behavior ()
|
|
(nav-enemy-simple-post)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate active (hosehead)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(if (-> self on-wall?)
|
|
(go-virtual active-wall)
|
|
)
|
|
(let ((t9-1 (-> (method-of-type nav-enemy active) enter)))
|
|
(if t9-1
|
|
(t9-1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate knocked (hosehead)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(if (logtest? (enemy-option water) (-> self fact enemy-options))
|
|
(logior! (-> self enemy-flags) (enemy-flag check-water check-water-backup))
|
|
)
|
|
(let ((t9-0 (-> (method-of-type nav-enemy knocked) enter)))
|
|
(if t9-0
|
|
(t9-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate jump (hosehead)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(if (logtest? (enemy-option water) (-> self fact enemy-options))
|
|
(logior! (-> self enemy-flags) (enemy-flag check-water check-water-backup))
|
|
)
|
|
(let ((t9-0 (-> (method-of-type nav-enemy jump) enter)))
|
|
(if t9-0
|
|
(t9-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; definition for method 195 of type hosehead
|
|
(defmethod hosehead-method-195 ((this hosehead))
|
|
(= *target* (handle->process (-> this focus handle)))
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate fire (hosehead)
|
|
:virtual #t
|
|
:event enemy-event-handler
|
|
:enter (behavior ()
|
|
(rlet ((acc :class vf)
|
|
(vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
(vf7 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(logior! (-> self skel status) (joint-control-status sync-math))
|
|
(logior! (-> self focus-status) (focus-status dangerous))
|
|
(let* ((v1-5 *game-info*)
|
|
(a0-2 (+ (-> v1-5 attack-id) 1))
|
|
)
|
|
(set! (-> v1-5 attack-id) a0-2)
|
|
(set! (-> self attack-id) a0-2)
|
|
)
|
|
(set! (-> self fire-beam?) #f)
|
|
(let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (-> self target-pos) (-> self root trans)))
|
|
(a2-0 (vector-x-quaternion! (new 'stack-no-clear 'vector) (-> self root quat)))
|
|
(s5-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(set! (-> gp-1 y) 0.0)
|
|
(let ((a1-1 s5-0))
|
|
(let ((v1-8 (-> self target-pos)))
|
|
(let ((a0-6 a2-0))
|
|
(let ((a2-3 (the-as float (if (< 0.0 (vector-dot gp-1 a2-0))
|
|
#x47200000
|
|
-954204160
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(.mov vf7 a2-3)
|
|
)
|
|
(.lvf vf5 (&-> a0-6 quad))
|
|
)
|
|
(.lvf vf4 (&-> v1-8 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> a1-1 quad) vf6)
|
|
)
|
|
(set! (-> self head-angle)
|
|
(deg-diff
|
|
(vector-y-angle gp-1)
|
|
(vector-y-angle (vector-! (new 'stack-no-clear 'vector) s5-0 (-> self root trans)))
|
|
)
|
|
)
|
|
)
|
|
(set! (-> self head-angle-inc) (* -1.0 (-> self head-angle)))
|
|
(if (not (hosehead-method-195 self))
|
|
(go-hostile self)
|
|
)
|
|
(set! (-> self lazer-dist) 0.0)
|
|
(set! (-> self lazer-length) 0.0)
|
|
)
|
|
)
|
|
:exit (behavior ()
|
|
(sound-stop (-> self lazer-sound))
|
|
(sound-stop (-> self lazer-sound2))
|
|
(logclear! (-> self skel status) (joint-control-status sync-math))
|
|
(set! (-> self allow-head) #f)
|
|
(set! (-> self fire-beam?) #f)
|
|
(if (logtest? (-> self enemy-flags) (enemy-flag dangerous-backup))
|
|
(logior! (-> self focus-status) (focus-status dangerous))
|
|
(logclear! (-> self focus-status) (focus-status dangerous))
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(let ((f30-0 (rnd-float-range self 0.9 1.1)))
|
|
(set! (-> self allow-head) #t)
|
|
(ja-channel-push! 1 (seconds 0.1))
|
|
(ja-no-eval :group! hosehead-shoot-start-ja :num! (seek! max f30-0) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(hosehead-method-189 self)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
(set! (-> self fire-beam?) #t)
|
|
(let ((gp-0 (+ (current-time) (seconds 2))))
|
|
(until #f
|
|
(when (or (< gp-0 (current-time)) (not (-> self fire-beam?)) (not (enemy-method-96 self 8192.0 #t)))
|
|
(set! (-> self fire-beam?) #f)
|
|
(set! (-> self allow-head) #f)
|
|
(goto cfg-13)
|
|
)
|
|
(suspend)
|
|
(+! (-> self head-angle) (* (-> self head-angle-inc) (seconds-per-frame)))
|
|
)
|
|
)
|
|
#f
|
|
(label cfg-13)
|
|
(sound-stop (-> self lazer-sound))
|
|
(sound-stop (-> self lazer-sound2))
|
|
(ja-no-eval :group! hosehead-shoot-end-ja :num! (seek! max f30-0) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
)
|
|
(go-hostile self)
|
|
)
|
|
:post (behavior ()
|
|
(enemy-simple-post)
|
|
(if (-> self fire-beam?)
|
|
(hosehead-method-197 self)
|
|
)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate attack (hosehead)
|
|
:virtual #t
|
|
:event enemy-event-handler
|
|
:enter (behavior ()
|
|
(logior! (-> self focus-status) (focus-status dangerous))
|
|
(let* ((v1-2 *game-info*)
|
|
(v0-0 (+ (-> v1-2 attack-id) 1))
|
|
)
|
|
(set! (-> v1-2 attack-id) v0-0)
|
|
(set! (-> self attack-id) v0-0)
|
|
)
|
|
)
|
|
:exit (behavior ()
|
|
(if (logtest? (-> self enemy-flags) (enemy-flag dangerous-backup))
|
|
(logior! (-> self focus-status) (focus-status dangerous))
|
|
(logclear! (-> self focus-status) (focus-status dangerous))
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 (seconds 0.2))
|
|
(cond
|
|
((zero? (rnd-int-count self 2))
|
|
(ja-no-eval :group! hosehead-attack1-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
(else
|
|
(ja-no-eval :group! hosehead-attack0-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
(if (logtest? (-> self enemy-flags) (enemy-flag dangerous-backup))
|
|
(logior! (-> self focus-status) (focus-status dangerous))
|
|
(logclear! (-> self focus-status) (focus-status dangerous))
|
|
)
|
|
(let ((v1-57 (rnd-int-count self 4)))
|
|
(cond
|
|
((zero? v1-57)
|
|
(ja-no-eval :group! hosehead-idle1-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
((= v1-57 1)
|
|
(ja-no-eval :group! hosehead-idle2-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(go-hostile self)
|
|
)
|
|
:post enemy-simple-post
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate hostile (hosehead)
|
|
:virtual #t
|
|
:enter (behavior ()
|
|
(let ((t9-0 (-> (method-of-type nav-enemy hostile) enter)))
|
|
(if t9-0
|
|
(t9-0)
|
|
)
|
|
)
|
|
(nav-enemy-method-166 self)
|
|
(set-time! (-> self last-time-dist-changed))
|
|
(set! (-> self next-lazer-time) 0)
|
|
(set-time! (-> self state-time))
|
|
)
|
|
:exit (behavior ()
|
|
(let ((t9-0 (-> (method-of-type nav-enemy hostile) exit)))
|
|
(if t9-0
|
|
(t9-0)
|
|
)
|
|
)
|
|
(set! (-> self come-from-notice) #f)
|
|
)
|
|
:trans (behavior ()
|
|
(let ((t9-0 (-> (method-of-type nav-enemy hostile) trans)))
|
|
(if t9-0
|
|
(t9-0)
|
|
)
|
|
)
|
|
(hosehead-method-189 self)
|
|
(let ((f30-0 (vector-vector-xz-distance (-> self target-pos) (-> self root trans))))
|
|
(if (and (enemy-method-96 self 6371.5557 #t) (< f30-0 18432.0))
|
|
(go-virtual attack)
|
|
)
|
|
(cond
|
|
((focus-test? self touch-water under-water)
|
|
(set! (-> self next-lazer-time) 0)
|
|
0
|
|
)
|
|
((zero? (-> self next-lazer-time))
|
|
(set! (-> self next-lazer-time) (+ (current-time) (the int (* 300.0 (rnd-float-range self 1.0 2.0)))))
|
|
)
|
|
((>= (current-time) (-> self next-lazer-time))
|
|
(if (and (enemy-method-96 self 3640.889 #t) (and (< 40960.0 f30-0) (hosehead-method-190 self)))
|
|
(go-virtual fire)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(ja-channel-push! 1 (seconds 0.2))
|
|
(if (zero? (rnd-int-count self 5))
|
|
(ja :group! hosehead-run1-ja)
|
|
(ja :group! hosehead-run-ja)
|
|
)
|
|
(ja :num-func num-func-identity :frame-num 0.0)
|
|
(let ((f30-0 (rnd-float-range self 0.9 1.1)))
|
|
(until #f
|
|
(suspend)
|
|
(ja :num! (loop! f30-0))
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
:post nav-enemy-chase-post
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate notice (hosehead)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(set! (-> self come-from-notice) #t)
|
|
(ja-channel-push! 1 (seconds 0.075))
|
|
(let ((f30-0 (rnd-float-range self 0.8 1.2)))
|
|
(new 'stack-no-clear 'vector)
|
|
(ja-no-eval :group! (-> self draw art-group data (-> self enemy-info notice-anim))
|
|
:num! (seek! max f30-0)
|
|
:frame-num 0.0
|
|
)
|
|
(until (ja-done? 0)
|
|
(let ((a0-4 (handle->process (-> self focus handle))))
|
|
(if a0-4
|
|
(seek-toward-heading-vec!
|
|
(-> self root)
|
|
(vector-! (new 'stack-no-clear 'vector) (get-trans (the-as process-focusable a0-4) 0) (-> self root trans))
|
|
131072.0
|
|
(seconds 0.05)
|
|
)
|
|
)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
)
|
|
(react-to-focus self)
|
|
)
|
|
)
|
|
|
|
;; failed to figure out what this is:
|
|
(defstate debug-control (hosehead)
|
|
:virtual #t
|
|
:code (behavior ()
|
|
(let ((v1-0 *nav-enemy-debug-control-info*))
|
|
(set! (-> v1-0 steering) 0.0)
|
|
(set! (-> v1-0 throttle) 0.0)
|
|
)
|
|
(ja-channel-push! 1 (seconds 0.2))
|
|
(until #f
|
|
(ja-no-eval :group! hosehead-run1-ja :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
#f
|
|
)
|
|
)
|
|
|
|
;; definition for method 187 of type hosehead
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod hosehead-method-187 ((this hosehead) (arg0 vector))
|
|
(let ((sv-128 (new 'stack-no-clear 'vector))
|
|
(s3-0 (new 'stack-no-clear 'vector))
|
|
(s1-0 (new 'stack-no-clear 'vector))
|
|
(s0-0 (new 'stack-no-clear 'vector))
|
|
(s4-0 (new 'stack-no-clear 'vector))
|
|
(s5-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(let ((a0-1 (-> this node-list data 9 bone transform)))
|
|
(matrix->trans a0-1 s1-0)
|
|
)
|
|
(vector-z-quaternion! s0-0 (-> this root quat))
|
|
(vector-! sv-128 arg0 s1-0)
|
|
(vector-normalize! sv-128 1.0)
|
|
(rot-zxy-from-vector! s4-0 s0-0)
|
|
(rot-zxy-from-vector! s3-0 sv-128)
|
|
(set! (-> s5-0 x) (fmax -1820.4445 (fmin 1820.4445 (deg- (-> s3-0 x) (-> s4-0 x)))))
|
|
(set! (-> s5-0 y) (fmax -3640.889 (fmin 3640.889 (deg- (-> s3-0 y) (-> s4-0 y)))))
|
|
(set! (-> s5-0 z) 0.0)
|
|
(if (not (logtest? (enemy-flag drawn-mirrored) (-> this enemy-flags)))
|
|
(set! (-> s5-0 y) (- (-> s5-0 y)))
|
|
)
|
|
(+! (-> s5-0 y) (-> this head-angle))
|
|
(let ((s4-1 (new 'stack-no-clear 'quaternion)))
|
|
(quaternion-zxy! s4-1 s5-0)
|
|
(quaternion-pseudo-seek (-> this head-joint-mod quat) (-> this head-joint-mod quat) s4-1 (seconds-per-frame))
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 188 of type hosehead
|
|
;; WARN: Return type mismatch quaternion vs none.
|
|
(defmethod hosehead-method-188 ((this hosehead))
|
|
(let ((gp-0 (new 'stack-no-clear 'quaternion)))
|
|
(quaternion-identity! gp-0)
|
|
(quaternion-pseudo-seek (-> this head-joint-mod quat) (-> this head-joint-mod quat) gp-0 (seconds-per-frame))
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 55 of type hosehead
|
|
(defmethod common-post ((this hosehead))
|
|
"Does a lot of various things relating to interacting with the target
|
|
- tracks when the enemy was last drawn
|
|
- looks at the target and handles attacking
|
|
@TODO Not extremely well understood yet"
|
|
(let ((t9-0 (method-of-type nav-enemy common-post)))
|
|
(t9-0 this)
|
|
)
|
|
(hosehead-method-194 this)
|
|
(dotimes (s5-0 4)
|
|
(enable-set! (-> this joint-ik s5-0) #t)
|
|
)
|
|
(let ((v1-11 (handle->process (-> this focus handle))))
|
|
(if (and (-> this allow-head) v1-11)
|
|
(hosehead-method-187 this (-> this target-pos))
|
|
(hosehead-method-188 this)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 194 of type hosehead
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod hosehead-method-194 ((this hosehead))
|
|
(rlet ((acc :class vf)
|
|
(vf0 :class vf)
|
|
(vf4 :class vf)
|
|
(vf5 :class vf)
|
|
(vf6 :class vf)
|
|
(vf7 :class vf)
|
|
)
|
|
(init-vf0-vector)
|
|
(let ((s5-0 (new 'stack-no-clear 'collide-query)))
|
|
(let ((v1-0 (-> s5-0 bbox))
|
|
(a0-2 (-> this root trans))
|
|
(a1-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(set! (-> a1-0 x) 14336.0)
|
|
(set! (-> a1-0 y) 14336.0)
|
|
(set! (-> a1-0 z) 14336.0)
|
|
(set! (-> a1-0 w) 1.0)
|
|
(vector-! (-> v1-0 min) a0-2 a1-0)
|
|
)
|
|
(let ((v1-2 (-> s5-0 bbox max))
|
|
(a0-4 (-> this root trans))
|
|
(a1-1 (new 'stack-no-clear 'vector))
|
|
)
|
|
(set! (-> a1-1 x) 14336.0)
|
|
(set! (-> a1-1 y) 14336.0)
|
|
(set! (-> a1-1 z) 14336.0)
|
|
(set! (-> a1-1 w) 1.0)
|
|
(vector+! v1-2 a0-4 a1-1)
|
|
)
|
|
(set! (-> s5-0 collide-with) (collide-spec backgnd))
|
|
(set! (-> s5-0 ignore-process0) #f)
|
|
(set! (-> s5-0 ignore-process1) #f)
|
|
(set! (-> s5-0 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1))
|
|
(fill-using-bounding-box *collide-cache* s5-0)
|
|
(dotimes (s4-0 4)
|
|
(-> this joint-ik s4-0 shoulder-matrix-no-ik)
|
|
(let ((a2-8 (-> this joint-ik s4-0 elbow-matrix-no-ik))
|
|
(v1-15 (new 'stack-no-clear 'vector))
|
|
(s3-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(set! (-> s3-0 quad) (-> this node-list data 3 bone transform vector 1 quad))
|
|
(new 'stack-no-clear 'vector)
|
|
(let ((s2-0 (new 'stack-no-clear 'vector)))
|
|
(let ((a1-3 v1-15))
|
|
(let ((a0-11 (-> a2-8 trans)))
|
|
(let ((a2-9 (-> a2-8 vector 1)))
|
|
(let ((a3-2 (-> *hosehead-ik-setup* s4-0 hand-dist)))
|
|
(.mov vf7 a3-2)
|
|
)
|
|
(.lvf vf5 (&-> a2-9 quad))
|
|
)
|
|
(.lvf vf4 (&-> a0-11 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> a1-3 quad) vf6)
|
|
)
|
|
(set! (-> s2-0 quad) (-> v1-15 quad))
|
|
(let ((a1-4 (-> s5-0 start-pos)))
|
|
(let ((v1-17 s2-0))
|
|
(let ((a0-13 s3-0))
|
|
(let ((a2-11 12288.0))
|
|
(.mov vf7 a2-11)
|
|
)
|
|
(.lvf vf5 (&-> a0-13 quad))
|
|
)
|
|
(.lvf vf4 (&-> v1-17 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> a1-4 quad) vf6)
|
|
)
|
|
(vector-float*! (-> s5-0 move-dist) s3-0 -24576.0)
|
|
(let ((v1-20 s5-0))
|
|
(set! (-> v1-20 radius) 40.96)
|
|
(set! (-> v1-20 collide-with) (collide-spec backgnd))
|
|
(set! (-> v1-20 ignore-process0) #f)
|
|
(set! (-> v1-20 ignore-process1) #f)
|
|
(set! (-> v1-20 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1))
|
|
(set! (-> v1-20 action-mask) (collide-action solid))
|
|
)
|
|
(let ((f0-12 (probe-using-line-sphere *collide-cache* s5-0)))
|
|
(when (>= f0-12 0.0)
|
|
(let ((s1-0 (new 'stack-no-clear 'vector)))
|
|
(let ((v1-24 (-> s5-0 start-pos)))
|
|
(let ((a0-20 (-> s5-0 move-dist)))
|
|
(let ((a1-7 f0-12))
|
|
(.mov vf7 a1-7)
|
|
)
|
|
(.lvf vf5 (&-> a0-20 quad))
|
|
)
|
|
(.lvf vf4 (&-> v1-24 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> s1-0 quad) vf6)
|
|
(let* ((f0-14 (- (-> s2-0 y) (-> s1-0 y)))
|
|
(f0-15 (lerp-scale 1.0 0.0 f0-14 0.0 8192.0))
|
|
)
|
|
(- (-> s1-0 y) (-> this root trans y))
|
|
(let ((f1-5 (vector-dot s3-0 (vector-! (new 'stack-no-clear 'vector) s1-0 (-> this root trans))))
|
|
(v1-29 s2-0)
|
|
)
|
|
(let ((a0-23 s2-0))
|
|
(let ((a1-11 (* f0-15 f1-5)))
|
|
(.mov vf7 a1-11)
|
|
)
|
|
(.lvf vf5 (&-> s3-0 quad))
|
|
(.lvf vf4 (&-> a0-23 quad))
|
|
)
|
|
(.add.x.vf.w vf6 vf0 vf0)
|
|
(.mul.x.vf.xyz acc vf5 vf7)
|
|
(.add.mul.w.vf.xyz vf6 vf4 vf0 acc)
|
|
(.svf (&-> v1-29 quad) vf6)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(handle-copy! (-> this joint-ik s4-0) s2-0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
)
|
|
|
|
;; definition for method 106 of type hosehead
|
|
;; WARN: Return type mismatch symbol vs none.
|
|
(defmethod set-incoming-attack-info ((this hosehead) (arg0 process) (arg1 object) (arg2 penetrate) (arg3 attack-info))
|
|
(let ((t9-0 (method-of-type nav-enemy set-incoming-attack-info)))
|
|
(t9-0 this arg0 arg1 arg2 arg3)
|
|
)
|
|
(let ((a1-3 (get-attacker this arg0 arg3)))
|
|
(if (and a1-3 (logtest? (process-mask bot) (-> a1-3 mask)))
|
|
(set! (-> this shot-by-ruffian?) #t)
|
|
(set! (-> this shot-by-ruffian?) #f)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 56 of type hosehead
|
|
(defmethod damage-amount-from-attack ((this hosehead) (arg0 process) (arg1 event-message-block))
|
|
"@returns the amount of damage taken from an attack. This can come straight off the [[attack-info]] or via [[penetrate-using->damage]]"
|
|
(let* ((t9-0 (method-of-type nav-enemy damage-amount-from-attack))
|
|
(v0-0 (t9-0 this arg0 arg1))
|
|
)
|
|
(if (-> this shot-by-ruffian?)
|
|
(set! v0-0 0)
|
|
)
|
|
v0-0
|
|
)
|
|
)
|
|
|
|
;; definition for method 58 of type hosehead
|
|
(defmethod enemy-method-58 ((this hosehead) (arg0 process) (arg1 event-message-block))
|
|
(let* ((t9-0 (method-of-type nav-enemy enemy-method-58))
|
|
(v0-0 (t9-0 this arg0 arg1))
|
|
)
|
|
(if (and (-> this sentry?) (nonzero? (-> this hit-points)) (zero? (-> this fated-time)))
|
|
(set! v0-0 'hit)
|
|
)
|
|
v0-0
|
|
)
|
|
)
|
|
|
|
;; definition for method 7 of type hosehead
|
|
(defmethod relocate ((this hosehead) (offset int))
|
|
(if (nonzero? (-> this head-joint-mod))
|
|
(&+! (-> this head-joint-mod) offset)
|
|
)
|
|
(dotimes (v1-4 4)
|
|
(if (nonzero? (-> this joint-ik v1-4))
|
|
(&+! (-> this joint-ik v1-4) offset)
|
|
)
|
|
)
|
|
(call-parent-method this offset)
|
|
)
|
|
|
|
;; definition for method 115 of type hosehead
|
|
;; INFO: Used lq/sq
|
|
;; WARN: Return type mismatch int vs none.
|
|
(defmethod init-enemy! ((this hosehead))
|
|
"Common method called to initialize the enemy, typically sets up default field values and calls ancillary helper methods"
|
|
(stack-size-set! (-> this main-thread) 256)
|
|
(set! (-> this on-stop-sentry) #f)
|
|
(initialize-skeleton
|
|
this
|
|
(the-as skeleton-group (art-group-get-by-name *level* "skel-hosehead" (the-as (pointer uint32) #f)))
|
|
(the-as pair 0)
|
|
)
|
|
(let* ((sv-16 (new 'static 'res-tag))
|
|
(a0-5 (res-lump-data (-> this entity) 'trans-offset (pointer float) :tag-ptr (& sv-16)))
|
|
)
|
|
(when a0-5
|
|
(let ((v1-7 (-> this root)))
|
|
(+! (-> v1-7 trans x) (-> a0-5 0))
|
|
(+! (-> v1-7 trans y) (-> a0-5 1))
|
|
(+! (-> v1-7 trans z) (-> a0-5 2))
|
|
)
|
|
)
|
|
)
|
|
(let ((f0-6 (res-lump-float (-> this entity) 'rotoffset)))
|
|
(if (!= f0-6 0.0)
|
|
(quaternion-rotate-local-y! (-> this root quat) (-> this root quat) f0-6)
|
|
)
|
|
)
|
|
(let ((f0-7 (res-lump-float (-> this entity) 'extra-float-param :default 30.0)))
|
|
(set! (-> this angle-sentry) (* 182.04445 f0-7))
|
|
)
|
|
(set! (-> this on-wall?) #f)
|
|
(when (>= (res-lump-value (-> this entity) 'extra-id int :default (the-as uint128 -1) :time -1000000000.0) 0)
|
|
(set! (-> this on-wall?) #t)
|
|
(set! (-> this enemy-flags)
|
|
(the-as enemy-flag (logior (enemy-flag no-initial-move-to-ground) (-> this enemy-flags)))
|
|
)
|
|
)
|
|
(init-enemy-behaviour-and-stats! this *hosehead-nav-enemy-info*)
|
|
(set! (-> this sentry?) (logtest? (-> this fact enemy-options) (enemy-option user9)))
|
|
(when (-> this sentry?)
|
|
(set! (-> this root pause-adjust-distance) 409600.0)
|
|
(set! (-> this on-stop-sentry) (res-lump-struct (-> this entity) 'on-stop-sentry function))
|
|
)
|
|
(let ((v1-34 (-> this nav)))
|
|
(set! (-> v1-34 speed-scale) 1.0)
|
|
)
|
|
0
|
|
(set-gravity-length (-> this root dynam) 327680.0)
|
|
(add-connection
|
|
*part-engine*
|
|
this
|
|
9
|
|
this
|
|
318
|
|
(new 'static 'vector :x 2048.0 :y -40.96 :z 1392.64 :w 163840.0)
|
|
)
|
|
(add-connection
|
|
*part-engine*
|
|
this
|
|
9
|
|
this
|
|
318
|
|
(new 'static 'vector :x -2048.0 :y -40.96 :z 1392.64 :w 163840.0)
|
|
)
|
|
(if (-> this on-wall?)
|
|
(idle-control-method-9 (-> this idle-anim-player) *hosehead-idle-wall*)
|
|
(idle-control-method-9 (-> this idle-anim-player) *hosehead-idle-ground*)
|
|
)
|
|
(let* ((sv-32 (new 'static 'res-tag))
|
|
(v1-49 (res-lump-data (-> this entity) 'actor-groups pointer :tag-ptr (& sv-32)))
|
|
)
|
|
(cond
|
|
((and v1-49 (nonzero? (-> sv-32 elt-count)))
|
|
(set! (-> this actor-group) (the-as (pointer actor-group) v1-49))
|
|
(set! (-> this actor-group-count) (the-as int (-> sv-32 elt-count)))
|
|
)
|
|
(else
|
|
(set! (-> this actor-group) (the-as (pointer actor-group) #f))
|
|
(set! (-> this actor-group-count) 0)
|
|
(go process-drawable-art-error "actor-group sewesc")
|
|
)
|
|
)
|
|
)
|
|
(set! (-> this head-joint-mod) (new 'process 'joint-mod (joint-mod-mode joint-set*) this 9))
|
|
(dotimes (s5-1 4)
|
|
(set! (-> this joint-ik s5-1) (new
|
|
'process
|
|
'joint-mod-ik
|
|
this
|
|
(-> *hosehead-ik-setup* s5-1 elbow-index)
|
|
(-> *hosehead-ik-setup* s5-1 hand-dist)
|
|
)
|
|
)
|
|
(set! (-> this joint-ik s5-1 elbow-pole-vector-axis) (the-as uint 2))
|
|
(set! (-> this joint-ik s5-1 elbow-rotation-axis) (the-as uint 0))
|
|
)
|
|
(logior! (-> this joint-ik 0 flags) (joint-mod-ik-flags elbow-trans-neg))
|
|
(logior! (-> this joint-ik 2 flags) (joint-mod-ik-flags elbow-trans-neg))
|
|
(set! (-> this come-from-notice) #t)
|
|
(set! (-> this lazer-sound) (new-sound-id))
|
|
(set! (-> this lazer-sound2) (new-sound-id))
|
|
(let ((a1-22 (new 'stack-no-clear 'sync-info-params)))
|
|
(let ((v1-77 0))
|
|
(if #t
|
|
(set! v1-77 (logior v1-77 1))
|
|
)
|
|
(set! (-> a1-22 sync-type) 'sync-eased)
|
|
(set! (-> a1-22 sync-flags) (the-as sync-flags v1-77))
|
|
)
|
|
(set! (-> a1-22 period) (the-as uint 1200))
|
|
(set! (-> a1-22 entity) (-> this entity))
|
|
(set! (-> a1-22 percent) 0.0)
|
|
(set! (-> a1-22 ease-in) 0.15)
|
|
(set! (-> a1-22 ease-out) 0.15)
|
|
(set! (-> a1-22 pause-in) 0.0)
|
|
(set! (-> a1-22 pause-out) 0.0)
|
|
(initialize! (-> this sync) a1-22)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; definition for method 66 of type hosehead
|
|
(defmethod go-ambush ((this hosehead))
|
|
(go (method-of-object this ambush))
|
|
)
|
|
|
|
;; definition for method 70 of type hosehead
|
|
(defmethod go-hostile ((this hosehead))
|
|
(if (-> this sentry?)
|
|
(go (method-of-object this hostile-sentry))
|
|
(go (method-of-object this hostile))
|
|
)
|
|
)
|
|
|
|
;; definition for method 116 of type hosehead
|
|
;; WARN: Return type mismatch object vs none.
|
|
(defmethod go-idle ((this hosehead))
|
|
(if (-> this sentry?)
|
|
(go (method-of-object this idle-sentry))
|
|
(go (method-of-object this idle))
|
|
)
|
|
(none)
|
|
)
|