jak-project/goal_src/levels/maincave/driller-lurker.gc
Tyler Wilding 7edfc8bcec
decomp: Re-attempting previously blocked state decomp files (#907)
* blocked: `part-tester` - `code` handler thinks it returns nothing

* blocked: `crates` finished but `go` is returning none causing issues

* blocked: `(event ram-boss-idle)::snow-ram-boss` expression building fails due to delay slot issue

* decomp: finish `snow-ram` | `seagull` blocked, new static data issue

* decomp: finish `snow-bumper`

* stuck: `snow-ball` close, can't figure out a type made on the stack

* decomp: finish `spider-egg`

* decomp: finish `puffer`

* decomp: finish `driller-lurker`

* decomp: finish `dark-crystal`

* stuck: `kermit` - mostly done but stuck on a joint related callback arg

* decomp: finish `gnawer`

* decomp: finish `mother-spider-egg`

* decomp: finish `swamp-blimp`

* stuck: `mistycannon` prebind function signature

* decomp: finish `citb-plat`

* decomp: finish `darkvine`

* blocked: `jungle-mirrors` - issues with `link` macro

* decomp: finish `launcherdoor`

* decomp: finish `quicksandlurker` except for 1 unused function

* stuck: `balloonlurker` - `(code balloonlurker-mine-explode)` has some weird joint related code

* stuck: need to decompile an asm func in `orbit-plat`

* decomp: finish `voicebox`

* blocked: `mother-spider` has issues where `go` returns none

* decomp: finish `bully`

* decomp: finish `seagull`

* fixed up after merge conflicts

* decomp: finish `jungle-mirrors`

* update gsrc

* double checked files, fixed issues

* decomp: revert change to projectile methods

* decomp: some more fixes

* address feedback

* fix up remaining method calls in `cam-states`

* fix jungle-mirrors
2021-12-11 13:27:24 -05:00

1856 lines
50 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: driller-lurker.gc
;; name in dgo: driller-lurker
;; dgos: L1, MAI, MAINCAVE
(define-extern *driller-lurker-sg* skeleton-group)
(declare-type driller-lurker process-drawable)
(define-extern driller-lurker-idle-drilling (state driller-lurker)) ;; unknown type
(define-extern driller-lurker-patrol (state driller-lurker)) ;; unknown type
(define-extern driller-lurker-chase (state symbol driller-lurker)) ;; unknown type
(define-extern driller-lurker-jammed-standing (state driller-lurker)) ;; unknown type
(define-extern driller-lurker-attack (state driller-lurker)) ;; unknown type
(define-extern driller-lurker-patrol-pause (state driller-lurker)) ;; unknown type
(define-extern driller-lurker-die (state driller-lurker)) ;; unknown type
(define-extern driller-lurker-debug-play-anims (state driller-lurker)) ;; unknown type
;; DECOMP BEGINS
(deftype driller-lurker (process-drawable)
((root-overeride collide-shape-moving :offset 112)
(hit-player? symbol :offset-assert 176)
(played-drill-sound? symbol :offset-assert 180)
(mode uint64 :offset-assert 184)
(path-u float :offset-assert 192)
(path-units-per-meter float :offset-assert 196)
(path-speed float :offset-assert 200)
(targ-path-speed float :offset-assert 204)
(path-dir float :offset-assert 208)
(path-ry float :offset-assert 212)
(facing-ry float :offset-assert 216)
(drill-rz float :offset-assert 220)
(drill-speed float :offset-assert 224)
(up-blend float :offset-assert 228)
(player-path-u float :offset-assert 232)
(ambient-drilling-u float :offset-assert 236)
(timeout int32 :offset-assert 240)
(neck joint-mod :offset-assert 244)
(drill joint-mod :offset-assert 248)
(sound2 ambient-sound :offset-assert 252)
(last-update-time uint64 :offset-assert 256)
(last-player-path-u-time uint64 :offset-assert 264)
(started-chasing-time uint64 :offset-assert 272)
(hit-player-time uint64 :offset-assert 280)
(player-attack-id uint64 :offset-assert 288)
)
:heap-base #xc0
:method-count-assert 28
:size-assert #x128
:flag-assert #x1c00c00128
(:methods
(dummy-20 (_type_ symbol target) symbol 20)
(dummy-21 (_type_) none 21)
(dummy-22 (_type_) none 22)
(dummy-23 (_type_) float 23)
(dummy-24 (_type_) symbol 24)
(dummy-25 (_type_) symbol 25)
(dummy-26 (_type_) symbol 26)
(dummy-27 (_type_) object 27)
)
)
(defskelgroup *driller-lurker-sg* driller-lurker
0
-1
((1 (meters 20)) (2 (meters 40)) (3 (meters 999999)))
:bounds (static-spherem 0 1.5 0 7.75)
:longest-edge (meters 2.3)
:shadow 4
)
(define
*driller-lurker-shadow-control*
(new 'static 'shadow-control
:settings
(new 'static 'shadow-settings
:center
(new 'static 'vector :w (the-as float #x9))
:shadow-dir
(new 'static 'vector :y -1.0 :w 614400.0)
:bot-plane (new 'static 'plane :y 1.0 :w 4096.0)
:top-plane (new 'static 'plane :y 1.0 :w -2048.0)
:fade-dist 245760.0
)
)
)
(set!
(-> *part-group-id-table* 331)
(new 'static 'sparticle-launch-group
:length 4
:duration #xbb8
:linger-duration #x5dc
:flags (sp-group-flag use-local-clock)
:name "group-driller-lurker-drilling-debris"
:launcher
(new 'static 'inline-array sparticle-group-item 4
(sp-item 728 :fade-after (meters 80.0) :falloff-to (meters 80.0))
(sp-item 2075 :fade-after (meters 60.0) :falloff-to (meters 60.0))
(sp-item 2076 :fade-after (meters 60.0) :falloff-to (meters 60.0))
(sp-item 2077 :fade-after (meters 40.0) :falloff-to (meters 40.0))
)
:bounds (new 'static 'sphere :w 32768.0)
)
)
(set!
(-> *part-id-table* 728)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 24
(sp-tex spt-texture (new 'static 'texture-id :page #x2))
(sp-flt spt-num 4.0)
(sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0)
(sp-rnd-flt spt-y (meters -0.5) (meters 1.0) 1.0)
(sp-rnd-flt spt-z -2048.0 4096.0 1.0)
(sp-rnd-flt spt-scale-x (meters 1.5) (meters 1.0) 1.0)
(sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
(sp-copy-from-other spt-scale-y -4)
(sp-rnd-flt spt-r 64.0 32.0 1.0)
(sp-rnd-flt spt-g 64.0 32.0 1.0)
(sp-rnd-flt spt-b 64.0 32.0 1.0)
(sp-rnd-flt spt-a 32.0 64.0 1.0)
(sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.026666667) 1.0)
(sp-flt spt-scalevel-x (meters 0.006666667))
(sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0)
(sp-copy-from-other spt-scalevel-y -4)
(sp-flt spt-fade-a -0.45714286)
(sp-flt spt-accel-y 2.7306666)
(sp-flt spt-friction 0.9)
(sp-int spt-timer 210)
(sp-cpuinfo-flags bit2 bit12 bit14)
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0)
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
(sp-end)
)
)
)
(set!
(-> *part-id-table* 2075)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 24
(sp-tex spt-texture (new 'static 'texture-id :page #x2))
(sp-flt spt-num 4.0)
(sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0)
(sp-rnd-flt spt-y (meters -0.5) (meters 1.0) 1.0)
(sp-rnd-flt spt-z -2048.0 4096.0 1.0)
(sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0)
(sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
(sp-copy-from-other spt-scale-y -4)
(sp-rnd-flt spt-r 64.0 32.0 1.0)
(sp-rnd-flt spt-g 64.0 32.0 1.0)
(sp-rnd-flt spt-b 64.0 32.0 1.0)
(sp-rnd-flt spt-a 32.0 32.0 1.0)
(sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0)
(sp-flt spt-scalevel-x (meters 0.006666667))
(sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0)
(sp-copy-from-other spt-scalevel-y -4)
(sp-flt spt-fade-a -0.30476192)
(sp-flt spt-accel-y 2.7306666)
(sp-flt spt-friction 0.9)
(sp-int spt-timer 210)
(sp-cpuinfo-flags bit2 bit12 bit14)
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0)
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
(sp-end)
)
)
)
(set!
(-> *part-id-table* 2076)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 23
(sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2))
(sp-flt spt-num 4.0)
(sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0)
(sp-rnd-flt spt-y (meters -0.5) (meters 1.0) 1.0)
(sp-rnd-flt spt-z -2048.0 4096.0 1.0)
(sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0)
(sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
(sp-copy-from-other spt-scale-y -4)
(sp-rnd-flt spt-r 96.0 64.0 1.0)
(sp-rnd-flt spt-g 128.0 64.0 1.0)
(sp-rnd-flt spt-b 192.0 64.0 1.0)
(sp-flt spt-a 128.0)
(sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0)
(sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0)
(sp-flt spt-accel-y -13.653334)
(sp-flt spt-friction 0.97)
(sp-int spt-timer 450)
(sp-cpuinfo-flags bit2 bit12 bit14)
(sp-int spt-next-time 375)
(sp-launcher-by-id spt-next-launcher 2078)
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0)
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
(sp-end)
)
)
)
(set!
(-> *part-id-table* 2078)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 2
(sp-flt spt-fade-a -1.7066667)
(sp-end)
)
)
)
(set!
(-> *part-id-table* 2077)
(new 'static 'sparticle-launcher
:init-specs
(new 'static 'inline-array sp-field-init-spec 23
(sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2))
(sp-rnd-flt spt-num 8.0 8.0 1.0)
(sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0)
(sp-rnd-flt spt-y (meters -0.5) (meters 1.0) 1.0)
(sp-rnd-flt spt-z -2048.0 4096.0 1.0)
(sp-rnd-flt spt-scale-x (meters 0.05) (meters 0.15) 1.0)
(sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0)
(sp-copy-from-other spt-scale-y -4)
(sp-rnd-flt spt-r 96.0 64.0 1.0)
(sp-rnd-flt spt-g 128.0 64.0 1.0)
(sp-rnd-flt spt-b 192.0 64.0 1.0)
(sp-rnd-flt spt-a 64.0 64.0 1.0)
(sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.10666667) 1.0)
(sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0)
(sp-flt spt-accel-y -13.653334)
(sp-flt spt-friction 0.97)
(sp-int spt-timer 150)
(sp-cpuinfo-flags bit2 bit12 bit14)
(sp-int spt-next-time 5)
(sp-launcher-by-id spt-next-launcher 2078)
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0)
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
(sp-end)
)
)
)
(defbehavior
driller-lurker-default-event-handler driller-lurker
((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
(local-vars (sv-96 collide-shape-prim))
(cond
((= arg2 'attack)
(cond
((= (-> arg0 type) target)
(let ((v1-3 (-> arg3 param 2)))
(when (!= v1-3 (-> self player-attack-id))
(set! (-> self player-attack-id) v1-3)
(case (-> self mode)
((5)
(let ((v1-5 *target*))
(when (!= (-> arg3 param 1) 'flop)
(let
((f0-4
(atan
(- (-> v1-5 control trans x) (-> self root-overeride trans x))
(- (-> v1-5 control trans z) (-> self root-overeride trans z))
)
)
)
(quaternion-axis-angle!
(-> self root-overeride quat)
0.0
1.0
0.0
f0-4
)
)
)
)
(go driller-lurker-die)
)
(else
(let ((s4-0 *target*)
(s2-0 #f)
(s3-0 #f)
)
(let* ((s1-0 (the-as touching-shapes-entry (-> arg3 param 0)))
(s0-0 (-> s1-0 head))
)
(while s0-0
(set!
sv-96
(get-touched-prim
s0-0
(-> self root-overeride)
(the-as touching-prims-entry s1-0)
)
)
(if
(and
(logtest?
(->
(get-touched-prim
s0-0
(-> s4-0 control)
(the-as touching-prims-entry s1-0)
)
prim-core
action
)
1
)
(logtest? (-> sv-96 prim-id) 1)
)
(set! s2-0 #t)
)
(if (logtest? (-> sv-96 prim-id) 2)
(set! s3-0 #t)
)
(set! s0-0 (-> s0-0 next))
)
)
(cond
((or s2-0 (not s3-0))
(let ((a1-6 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-6 from) self)
(set! (-> a1-6 num-params) 2)
(set! (-> a1-6 message) 'attack)
(set! (-> a1-6 param 0) (-> arg3 param 0))
(let ((v1-34 (new 'static 'attack-info :mask #xc0)))
(set! (-> v1-34 shove-up) 8192.0)
(set! (-> v1-34 shove-back) 12288.0)
(set! (-> a1-6 param 1) (the-as uint v1-34))
)
(when (send-event-function arg0 a1-6)
(set! (-> self hit-player?) #t)
(set!
(-> self hit-player-time)
(the-as uint (-> *display* base-frame-counter))
)
(dummy-54 (-> self root-overeride) 2 0)
(let ((v1-39 (-> self mode)))
(if (or (zero? v1-39) (= v1-39 1) (= v1-39 2))
(go driller-lurker-chase #t)
)
)
)
)
)
(s3-0
(when (!= (-> arg3 param 1) 'flop)
(let
((f0-11
(atan
(- (-> s4-0 control trans x) (-> self root-overeride trans x))
(- (-> s4-0 control trans z) (-> self root-overeride trans z))
)
)
)
(quaternion-axis-angle!
(-> self root-overeride quat)
0.0
1.0
0.0
f0-11
)
)
)
(go driller-lurker-die)
)
)
)
)
)
)
)
)
(else
(go driller-lurker-die)
)
)
)
((= arg2 'touch)
(when (= (-> arg0 type) target)
(let ((a1-11 (new 'stack-no-clear 'event-message-block)))
(set! (-> a1-11 from) self)
(set! (-> a1-11 num-params) 2)
(set! (-> a1-11 message) 'attack)
(set! (-> a1-11 param 0) (-> arg3 param 0))
(let ((v1-57 (new 'static 'attack-info :mask #xc0)))
(set! (-> v1-57 shove-up) 8192.0)
(set! (-> v1-57 shove-back) 12288.0)
(set! (-> a1-11 param 1) (the-as uint v1-57))
)
(when (send-event-function arg0 a1-11)
(set! (-> self hit-player?) #t)
(set!
(-> self hit-player-time)
(the-as uint (-> *display* base-frame-counter))
)
(dummy-54 (-> self root-overeride) 2 0)
(let ((v1-62 (-> self mode)))
(if (or (zero? v1-62) (= v1-62 1) (= v1-62 2))
(go driller-lurker-chase #t)
)
)
)
)
)
)
)
)
(defmethod
dummy-20
driller-lurker
((obj driller-lurker) (arg0 symbol) (arg1 target))
(let ((v1-1 (-> *display* base-frame-counter)))
(when (!= v1-1 (-> obj last-update-time))
(set! (-> obj last-update-time) (the-as uint v1-1))
(let* ((f0-0 (-> obj path-speed))
(f1-1
(seek
f0-0
(-> obj targ-path-speed)
(* 12288.0 (-> *display* seconds-per-frame))
)
)
)
(set! (-> obj path-speed) f1-1)
(when (< 0.0 f1-1)
(let* ((f0-5 (-> obj path-u))
(f30-0 (* (-> obj path-dir) f1-1 (-> *display* seconds-per-frame)))
(s4-0 #t)
(f0-6
(+ f0-5 (* 0.00024414062 (-> obj path-units-per-meter) f30-0))
)
)
(cond
((< f0-6 0.0)
(set! s4-0 #f)
(cond
(arg0
(set! f0-6 (- f0-6))
(set! (-> obj path-dir) (- (-> obj path-dir)))
(set! (-> obj path-speed) 0.0)
)
(else
(set! f0-6 0.0)
(set! (-> obj path-speed) 0.0)
)
)
)
((< 1.0 f0-6)
(set! s4-0 #f)
(cond
(arg0
(set! f0-6 (- 2.0 f0-6))
(set! (-> obj path-dir) (- (-> obj path-dir)))
(set! (-> obj path-speed) 0.0)
)
(else
(set! f0-6 1.0)
(set! (-> obj path-speed) 0.0)
)
)
)
)
(set! (-> obj path-u) f0-6)
(let ((s3-1 (new 'stack-no-clear 'vector)))
(set! (-> s3-1 quad) (-> obj root-overeride trans quad))
(eval-path-curve!
(-> obj path)
(-> obj root-overeride trans)
f0-6
'interp
)
(when s4-0
(let
((f0-7 (vector-vector-xz-distance s3-1 (-> obj root-overeride trans)))
)
(set!
(-> obj path-units-per-meter)
(* (/ (fabs f30-0) f0-7) (-> obj path-units-per-meter))
)
)
)
)
)
)
)
(let ((s4-1 (new 'stack-no-clear 'vector)))
(TODO-RENAME-14 (-> obj path) s4-1 (-> obj path-u))
(let ((f0-13 (atan (-> s4-1 x) (-> s4-1 z))))
(if (< (-> obj path-dir) 0.0)
(set! f0-13 (+ 32768.0 f0-13))
)
(set! (-> obj path-ry) f0-13)
)
)
(case (-> obj mode)
((4)
(when *target*
(let ((a0-13 (target-pos 0))
(v1-26 (new 'stack-no-clear 'vector))
)
(vector-! v1-26 a0-13 (-> obj root-overeride trans))
(let ((f0-16 (atan (-> v1-26 x) (-> v1-26 z))))
(set!
(-> obj facing-ry)
(deg-seek-smooth
(-> obj facing-ry)
f0-16
(* 32768.0 (-> *display* seconds-per-frame))
0.25
)
)
)
)
(when (< 16384.0 (fabs (deg- (-> obj facing-ry) (-> obj path-ry))))
(set! (-> obj path-dir) (- (-> obj path-dir)))
(set! (-> obj path-ry) (+ 32768.0 (-> obj path-ry)))
)
)
)
(else
(if (!= (-> obj mode) 1)
(set!
(-> obj facing-ry)
(deg-seek-smooth
(-> obj facing-ry)
(-> obj path-ry)
(* 32768.0 (-> *display* seconds-per-frame))
0.25
)
)
)
)
)
(quaternion-axis-angle!
(-> obj root-overeride quat)
0.0
1.0
0.0
(-> obj facing-ry)
)
(let ((f30-2 0.0))
(when *target*
(let
((f0-34
(vector-vector-xz-distance
(target-pos 0)
(-> obj root-overeride trans)
)
)
)
(if (< f0-34 36864.0)
(set! f30-2 (- 1.0 (* 0.00006510417 (fmax 0.0 (+ -21504.0 f0-34)))))
)
)
)
(let
((f28-1
(*
0.0001373291
(fmin 7281.778 (fabs (deg- (-> obj path-ry) (-> obj facing-ry))))
)
)
)
(cond
((< 0.0 f30-2)
(let ((s3-2 (new 'stack-no-clear 'vector)))
(vector-! s3-2 (target-pos 0) (-> obj root-overeride trans))
(let* ((f1-27 (vector-x-angle s3-2))
(f1-29 (fmax 728.1778 (fmin 10194.489 f1-27)))
(f0-46 (* 0.000105637766 (+ -728.1778 f1-29)))
(f0-47 (lerp f28-1 f0-46 f30-2))
)
(set!
(-> obj up-blend)
(seek-with-smooth
(-> obj up-blend)
f0-47
(* 8192.0 (-> *display* seconds-per-frame))
0.25
0.01
)
)
)
)
)
(else
(set!
(-> obj up-blend)
(seek-with-smooth
(-> obj up-blend)
f28-1
(* 8192.0 (-> *display* seconds-per-frame))
0.125
0.01
)
)
)
)
)
)
(when (and arg1 *target*)
(set-target! (-> obj neck) (target-pos 5))
(if *target*
(look-at-enemy!
(-> *target* neck)
(the-as vector (-> obj root-overeride root-prim prim-core))
'attacking
obj
)
)
)
(let ((f30-3 (-> obj drill-speed)))
(let ((v1-56 (-> obj mode)))
(cond
((or (= v1-56 2) (zero? v1-56))
(set!
f30-3
(seek f30-3 72817.78 (* 372827.03 (-> *display* seconds-per-frame)))
)
)
((= v1-56 1)
(set!
f30-3
(seek f30-3 276707.56 (* 372827.03 (-> *display* seconds-per-frame)))
)
)
((or (= v1-56 3) (= v1-56 4))
(set!
f30-3
(if
(>=
(-
(-> *display* base-frame-counter)
(the-as int (-> obj started-chasing-time))
)
675
)
(seek f30-3 0.0 (* 600746.7 (-> *display* seconds-per-frame)))
(seek f30-3 276707.56 (* 372827.03 (-> *display* seconds-per-frame)))
)
)
)
((= v1-56 5)
(set!
f30-3
(if
(>=
(-
(-> *display* base-frame-counter)
(the-as int (-> obj started-chasing-time))
)
1725
)
(seek f30-3 276707.56 (* 372827.03 (-> *display* seconds-per-frame)))
(seek f30-3 0.0 (* 600746.7 (-> *display* seconds-per-frame)))
)
)
)
)
)
(set! (-> obj drill-speed) f30-3)
(cond
((>= f30-3 36408.89)
(update-trans! (-> obj sound) (-> obj root-overeride trans))
(update! (-> obj sound))
(set! (-> obj played-drill-sound?) #t)
)
(else
(when (-> obj played-drill-sound?)
(set! (-> obj played-drill-sound?) #f)
(stop! (-> obj sound))
)
)
)
(let
((f0-69 (+ (-> obj drill-rz) (* f30-3 (-> *display* seconds-per-frame)))))
(set!
(-> obj drill-rz)
(- f0-69 (* (the float (the int (/ f0-69 65536.0))) 65536.0))
)
)
)
(let ((s5-2 (new 'stack-no-clear 'quaternion)))
(quaternion-axis-angle! s5-2 0.0 0.0 1.0 (-> obj drill-rz))
(set-trs! (-> obj drill) (the-as vector #f) s5-2 (the-as vector #f))
)
0
)
)
(when
(and
(-> obj hit-player?)
(or
(not *target*)
(and
(zero? (logand (-> *target* state-flags) #x80f8))
(>=
(-
(-> *display* base-frame-counter)
(the-as int (-> obj hit-player-time))
)
15
)
)
)
)
(dummy-54 (-> obj root-overeride) 2 1)
(set! (-> obj hit-player?) #f)
#f
)
)
(defmethod dummy-23 driller-lurker ((obj driller-lurker))
(let ((v1-1 (-> *display* base-frame-counter)))
(when (!= v1-1 (-> obj last-player-path-u-time))
(set! (-> obj last-player-path-u-time) (the-as uint v1-1))
(cond
(*target*
(let* ((s5-0 (-> obj path))
(s4-0 (method-of-object s5-0 TODO-RENAME-20))
)
(target-pos 0)
(set! (-> obj player-path-u) (s4-0 s5-0))
)
)
(else
(set! (-> obj player-path-u) 0.0)
)
)
)
)
(-> obj player-path-u)
)
(defmethod dummy-25 driller-lurker ((obj driller-lurker))
(when *target*
(let* ((s5-0 (target-pos 0))
(f0-1 (- (-> s5-0 y) (-> obj root-overeride trans y)))
)
(when (and (>= 32768.0 f0-1) (>= f0-1 -2048.0))
(case (-> obj mode)
((1)
(if
(>=
73728.0
(vector-vector-xz-distance (-> obj root-overeride trans) s5-0)
)
(return #t)
)
)
(else
(when
(>=
102400.0
(vector-vector-xz-distance (-> obj root-overeride trans) s5-0)
)
(let
((f0-8
(atan
(- (-> s5-0 x) (-> obj root-overeride trans x))
(- (-> s5-0 z) (-> obj root-overeride trans z))
)
)
)
(if (>= 20024.889 (fabs (deg- f0-8 (-> obj facing-ry))))
(return #t)
)
)
)
)
)
)
)
)
#f
)
(defmethod dummy-26 driller-lurker ((obj driller-lurker))
(when *target*
(let* ((a1-0 (target-pos 0))
(f0-1 (- (-> a1-0 y) (-> obj root-overeride trans y)))
)
(if
(and
(< f0-1 40960.0)
(< -10240.0 f0-1)
(<
(vector-vector-xz-distance (-> obj root-overeride trans) a1-0)
143360.0
)
)
(return #f)
)
)
)
#t
)
(defmethod dummy-24 driller-lurker ((obj driller-lurker))
(when *target*
(let* ((a1-0 (target-pos 0))
(f0-1 (- (-> a1-0 y) (-> obj root-overeride trans y)))
)
(when (and (< f0-1 40960.0) (< -10240.0 f0-1))
(let
((f0-2 (vector-vector-xz-distance (-> obj root-overeride trans) a1-0)))
(cond
((>= 17408.0 f0-2)
(return #t)
)
((< f0-2 143360.0)
(let ((f0-3 (dummy-23 obj))
(f1-5 (-> obj path-u))
)
(if (>= (* 0.1 (-> obj path-units-per-meter)) (fabs (- f0-3 f1-5)))
(return #t)
)
)
)
)
)
)
)
)
#f
)
(defmethod dummy-27 driller-lurker ((obj driller-lurker))
(let ((a2-0 (-> obj node-list data 25 bone transform))
(s5-0 (new 'stack-no-clear 'vector))
)
(set-vector! s5-0 0.0 0.0 8192.0 1.0)
(vector-matrix*! s5-0 s5-0 a2-0)
(vector-float*! s5-0 s5-0 (/ 1.0 (-> s5-0 w)))
(spawn (-> obj part) s5-0)
)
)
(defstate driller-lurker-debug-play-anims (driller-lurker)
:code
(behavior ()
0
(none)
)
:post
(the-as (function none :behavior driller-lurker) transform-post)
)
(defstate driller-lurker-idle-drilling (driller-lurker)
:event
driller-lurker-default-event-handler
:enter
(behavior ()
(set! (-> self mode) (the-as uint 1))
(set! (-> self targ-path-speed) 0.0)
(set! (-> self path-speed) 0.0)
(shut-down! (-> self neck))
(none)
)
:exit
(behavior ()
(stop! (-> self sound2))
(none)
)
:trans
(behavior ()
(if (dummy-25 self)
(go driller-lurker-chase #t)
)
(dummy-20 self #t (the-as target #f))
(none)
)
:code
(behavior ()
(update-trans! (-> self sound2) (-> self root-overeride trans))
(while #t
(set! (-> self timeout) (rand-vu-int-range 4 8))
(ja-channel-push! 1 60)
(dotimes (gp-0 (-> self timeout))
(let ((f30-0 (rand-vu-float-range 1.0 1.8)))
(let ((a0-4 (-> self skel root-channel 0)))
(set!
(-> a0-4 frame-group)
(the-as art-joint-anim (-> self draw art-group data 15))
)
(set!
(-> a0-4 param 0)
(the
float
(+
(->
(the-as art-joint-anim (-> self draw art-group data 15))
data
0
length
)
-1
)
)
)
(set! (-> a0-4 param 1) f30-0)
(set! (-> a0-4 frame-num) 0.0)
(joint-control-channel-group!
a0-4
(the-as art-joint-anim (-> self draw art-group data 15))
num-func-seek!
)
)
(until (ja-done? 0)
(update! (-> self sound2))
(if (and (>= (ja-aframe-num 0) 7.0) (>= 13.0 (ja-aframe-num 0)))
(dummy-27 self)
)
(suspend)
(let ((a0-9 (-> self skel root-channel 0)))
(set!
(-> a0-9 param 0)
(the float (+ (-> a0-9 frame-group data 0 length) -1))
)
(set! (-> a0-9 param 1) f30-0)
(joint-control-channel-group-eval!
a0-9
(the-as art-joint-anim #f)
num-func-seek!
)
)
)
)
)
(stop! (-> self sound2))
(ja-channel-push! 1 60)
(cond
((zero? (rand-vu-int-count 2))
(let ((gp-1 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
gp-1
(the-as art-joint-anim (-> self draw art-group data 6))
num-func-identity
)
(set! (-> gp-1 frame-num) 0.0)
)
)
(else
(let ((gp-2 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
gp-2
(the-as art-joint-anim (-> self draw art-group data 7))
num-func-identity
)
(set! (-> gp-2 frame-num) 0.0)
)
)
)
(let ((a0-16 (-> self skel root-channel 0)))
(set!
(-> a0-16 param 0)
(the float (+ (-> a0-16 frame-group data 0 length) -1))
)
(set! (-> a0-16 param 1) 1.0)
(joint-control-channel-group!
a0-16
(the-as art-joint-anim #f)
num-func-seek!
)
)
(until (ja-done? 0)
(suspend)
(let ((a0-17 (-> self skel root-channel 0)))
(set!
(-> a0-17 param 0)
(the float (+ (-> a0-17 frame-group data 0 length) -1))
)
(set! (-> a0-17 param 1) 1.0)
(joint-control-channel-group-eval!
a0-17
(the-as art-joint-anim #f)
num-func-seek!
)
)
)
)
(none)
)
:post
(the-as (function none :behavior driller-lurker) transform-post)
)
(defstate driller-lurker-patrol (driller-lurker)
:event
driller-lurker-default-event-handler
:enter
(behavior ()
(set! (-> self mode) (the-as uint 2))
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self timeout) (rand-vu-int-range 900 3600))
(set! (-> self targ-path-speed) 15360.0)
(if (>= 4096.0 (-> self path-speed))
(set! (-> self targ-path-speed) 15360.0)
)
(shut-down! (-> self neck))
(none)
)
:trans
(behavior ()
(if (dummy-25 self)
(go driller-lurker-chase #t)
)
(dummy-20 self #t (the-as target #f))
(none)
)
:code
(behavior ()
(ja-channel-push! 2 60)
(let ((gp-0 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
gp-0
(the-as art-joint-anim (-> self draw art-group data 8))
num-func-identity
)
(set! (-> gp-0 frame-num) 0.0)
)
(let ((a0-2 (-> self skel root-channel 1)))
(set! (-> a0-2 frame-interp) (-> self up-blend))
(set!
(-> a0-2 frame-group)
(the-as art-joint-anim (-> self draw art-group data 9))
)
(set! (-> a0-2 param 0) 0.0)
(joint-control-channel-group-eval!
a0-2
(the-as art-joint-anim (-> self draw art-group data 9))
num-func-chan
)
)
(while #t
(suspend)
(let ((a0-3 (-> self skel root-channel 0)))
(set!
(-> a0-3 param 0)
(the float (+ (-> a0-3 frame-group data 0 length) -1))
)
(set! (-> a0-3 param 1) 1.0)
(joint-control-channel-group-eval!
a0-3
(the-as art-joint-anim #f)
num-func-seek!
)
)
(when (= (ja-group-size) 2)
(let ((a0-4 (-> self skel root-channel 1)))
(set! (-> a0-4 frame-interp) (-> self up-blend))
(set! (-> a0-4 param 0) 0.0)
(joint-control-channel-group-eval!
a0-4
(the-as art-joint-anim #f)
num-func-chan
)
)
)
(when (ja-done? 0)
(if
(and
(>=
(- (-> *display* base-frame-counter) (-> self state-time))
(-> self timeout)
)
(>= 546.13336 (fabs (deg- (-> self path-ry) (-> self facing-ry))))
)
(go driller-lurker-patrol-pause)
)
(let ((v1-34 (-> self skel root-channel 0)))
(set! (-> v1-34 num-func) num-func-identity)
(set! (-> v1-34 frame-num) 0.0)
)
)
)
(none)
)
:post
(the-as (function none :behavior driller-lurker) transform-post)
)
(defstate driller-lurker-patrol-pause (driller-lurker)
:event
driller-lurker-default-event-handler
:enter
(behavior ()
(set! (-> self mode) (the-as uint 2))
(set! (-> self path-speed) 0.0)
(set! (-> self targ-path-speed) 0.0)
(shut-down! (-> self neck))
(none)
)
:trans
(behavior ()
(if (dummy-25 self)
(go driller-lurker-chase #t)
)
(dummy-20 self #t (the-as target #f))
(none)
)
:code
(behavior ()
(set! (-> self timeout) (rand-vu-int-range 2 4))
(let ((s5-0 -1))
(dotimes (gp-0 (-> self timeout))
(let ((v1-0 (rand-vu-int-count 3)))
(if (= v1-0 s5-0)
(set! v1-0 (mod (+ v1-0 1) 3))
)
(set! s5-0 v1-0)
(cond
((zero? v1-0)
(if (not (= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 5)
)
)
(ja-channel-push! 1 60)
)
(let ((s4-0 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
s4-0
(the-as art-joint-anim (-> self draw art-group data 5))
num-func-identity
)
(set! (-> s4-0 frame-num) 0.0)
)
)
((= v1-0 1)
(if (not (= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 6)
)
)
(ja-channel-push! 1 60)
)
(let ((s4-1 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
s4-1
(the-as art-joint-anim (-> self draw art-group data 6))
num-func-identity
)
(set! (-> s4-1 frame-num) 0.0)
)
)
((= v1-0 2)
(if (not (= (if (> (-> self skel active-channels) 0)
(-> self skel root-channel 0 frame-group)
)
(-> self draw art-group data 7)
)
)
(ja-channel-push! 1 60)
)
(let ((s4-2 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
s4-2
(the-as art-joint-anim (-> self draw art-group data 7))
num-func-identity
)
(set! (-> s4-2 frame-num) 0.0)
)
)
)
)
(let ((a0-27 (-> self skel root-channel 0)))
(set!
(-> a0-27 param 0)
(the float (+ (-> a0-27 frame-group data 0 length) -1))
)
(set! (-> a0-27 param 1) 1.0)
(joint-control-channel-group!
a0-27
(the-as art-joint-anim #f)
num-func-seek!
)
)
(until (ja-done? 0)
(suspend)
(let ((a0-28 (-> self skel root-channel 0)))
(set!
(-> a0-28 param 0)
(the float (+ (-> a0-28 frame-group data 0 length) -1))
)
(set! (-> a0-28 param 1) 1.0)
(joint-control-channel-group-eval!
a0-28
(the-as art-joint-anim #f)
num-func-seek!
)
)
)
)
)
(go driller-lurker-patrol)
(none)
)
:post
(the-as (function none :behavior driller-lurker) transform-post)
)
(defstate driller-lurker-chase (driller-lurker)
:event
driller-lurker-default-event-handler
:enter
(behavior ((arg0 symbol))
(if arg0
(set!
(-> self started-chasing-time)
(the-as uint (-> *display* base-frame-counter))
)
)
(set! (-> self mode) (the-as uint 3))
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self targ-path-speed) 23552.0)
(none)
)
:trans
(behavior ()
(if (dummy-24 self)
(go driller-lurker-attack)
)
(if (dummy-26 self)
(go driller-lurker-patrol)
)
(if
(>=
(-
(-> *display* base-frame-counter)
(the-as int (-> self started-chasing-time))
)
900
)
(go driller-lurker-jammed-standing)
)
(let* ((gp-0 (-> self path))
(s5-0 (method-of-object gp-0 TODO-RENAME-20))
)
(target-pos 0)
(let ((f0-1 (- (s5-0 gp-0) (-> self path-u))))
(when (>= (fabs f0-1) (* 0.1 (-> self path-units-per-meter)))
(cond
((< 0.0 f0-1)
(when (< (-> self path-dir) 0.0)
(set! (-> self path-dir) 1.0)
(set! (-> self path-speed) 0.0)
)
)
(else
(when (>= (-> self path-dir) 0.0)
(set! (-> self path-dir) -1.0)
(set! (-> self path-speed) 0.0)
)
)
)
)
)
)
(dummy-20 self #f (the-as target #t))
(none)
)
:code
(behavior ((arg0 symbol))
(ja-channel-push! 2 60)
(let ((gp-0 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
gp-0
(the-as art-joint-anim (-> self draw art-group data 11))
num-func-identity
)
(set! (-> gp-0 frame-num) 0.0)
)
(let ((a0-3 (-> self skel root-channel 1)))
(set! (-> a0-3 frame-interp) (-> self up-blend))
(set!
(-> a0-3 frame-group)
(the-as art-joint-anim (-> self draw art-group data 12))
)
(set! (-> a0-3 param 0) 0.0)
(joint-control-channel-group-eval!
a0-3
(the-as art-joint-anim (-> self draw art-group data 12))
num-func-chan
)
)
(while #t
(suspend)
(let ((a0-4 (-> self skel root-channel 0)))
(set!
(-> a0-4 param 0)
(the float (+ (-> a0-4 frame-group data 0 length) -1))
)
(set! (-> a0-4 param 1) 1.0)
(joint-control-channel-group-eval!
a0-4
(the-as art-joint-anim #f)
num-func-seek!
)
)
(when (= (ja-group-size) 2)
(let ((a0-5 (-> self skel root-channel 1)))
(set! (-> a0-5 frame-interp) (-> self up-blend))
(set! (-> a0-5 param 0) 0.0)
(joint-control-channel-group-eval!
a0-5
(the-as art-joint-anim #f)
num-func-chan
)
)
)
(when (ja-done? 0)
(let ((v1-27 (-> self skel root-channel 0)))
(set! (-> v1-27 num-func) num-func-identity)
(set! (-> v1-27 frame-num) 0.0)
)
)
)
(none)
)
:post
(the-as (function none :behavior driller-lurker) transform-post)
)
(defstate driller-lurker-attack (driller-lurker)
:event
driller-lurker-default-event-handler
:enter
(behavior ()
(set! (-> self mode) (the-as uint 4))
(set! (-> self state-time) (-> *display* base-frame-counter))
(set! (-> self path-speed) 0.0)
(set! (-> self targ-path-speed) 0.0)
(none)
)
:trans
(behavior ()
(cond
((dummy-24 self)
(set! (-> self state-time) (-> *display* base-frame-counter))
)
(else
(if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150)
(go driller-lurker-chase #f)
)
)
)
(if
(>=
(-
(-> *display* base-frame-counter)
(the-as int (-> self started-chasing-time))
)
900
)
(go driller-lurker-jammed-standing)
)
(dummy-20 self #f (the-as target #t))
(none)
)
:code
(behavior ()
(ja-channel-push! 2 60)
(let ((gp-0 (-> self skel root-channel 0)))
(joint-control-channel-group-eval!
gp-0
(the-as art-joint-anim (-> self draw art-group data 13))
num-func-identity
)
(set! (-> gp-0 frame-num) 0.0)
)
(let ((a0-2 (-> self skel root-channel 1)))
(set! (-> a0-2 frame-interp) (-> self up-blend))
(set!
(-> a0-2 frame-group)
(the-as art-joint-anim (-> self draw art-group data 14))
)
(set! (-> a0-2 param 0) 0.0)
(joint-control-channel-group-eval!
a0-2
(the-as art-joint-anim (-> self draw art-group data 14))
num-func-chan
)
)
(while #t
(suspend)
(let ((a0-3 (-> self skel root-channel 0)))
(set!
(-> a0-3 param 0)
(the float (+ (-> a0-3 frame-group data 0 length) -1))
)
(set! (-> a0-3 param 1) 1.0)
(joint-control-channel-group-eval!
a0-3
(the-as art-joint-anim #f)
num-func-seek!
)
)
(when (= (ja-group-size) 2)
(let ((a0-4 (-> self skel root-channel 1)))
(set! (-> a0-4 frame-interp) (-> self up-blend))
(set! (-> a0-4 param 0) 0.0)
(joint-control-channel-group-eval!
a0-4
(the-as art-joint-anim #f)
num-func-chan
)
)
)
(when (ja-done? 0)
(let ((v1-27 (-> self skel root-channel 0)))
(set! (-> v1-27 num-func) num-func-identity)
(set! (-> v1-27 frame-num) 0.0)
)
)
)
(none)
)
:post
(the-as (function none :behavior driller-lurker) transform-post)
)
(defstate driller-lurker-jammed-standing (driller-lurker)
:event
driller-lurker-default-event-handler
:enter
(behavior ()
(set! (-> self mode) (the-as uint 5))
(set! (-> self path-speed) 0.0)
(set! (-> self targ-path-speed) 0.0)
(shut-down! (-> self neck))
(none)
)
:trans
(behavior ()
(dummy-20 self #f (the-as target #f))
(none)
)
:code
(behavior ()
(ja-channel-push! 1 60)
(let ((a0-1 (-> self skel root-channel 0)))
(set!
(-> a0-1 frame-group)
(the-as art-joint-anim (-> self draw art-group data 10))
)
(set!
(-> a0-1 param 0)
(the
float
(+
(->
(the-as art-joint-anim (-> self draw art-group data 10))
data
0
length
)
-1
)
)
)
(set! (-> a0-1 param 1) 1.0)
(set! (-> a0-1 frame-num) 0.0)
(joint-control-channel-group!
a0-1
(the-as art-joint-anim (-> self draw art-group data 10))
num-func-seek!
)
)
(until (ja-done? 0)
(suspend)
(let ((a0-2 (-> self skel root-channel 0)))
(set!
(-> a0-2 param 0)
(the float (+ (-> a0-2 frame-group data 0 length) -1))
)
(set! (-> a0-2 param 1) 1.0)
(joint-control-channel-group-eval!
a0-2
(the-as art-joint-anim #f)
num-func-seek!
)
)
)
(set!
(-> self started-chasing-time)
(the-as uint (-> *display* base-frame-counter))
)
(cond
(*target*
(go driller-lurker-chase #f)
(set! (-> self path-speed) 5888.0)
)
(else
(set! (-> self path-speed) 7680.0)
(go driller-lurker-patrol)
)
)
(none)
)
:post
(the-as (function none :behavior driller-lurker) transform-post)
)
(defstate driller-lurker-die (driller-lurker)
:event
(the-as
(function process int symbol event-message-block object :behavior driller-lurker)
process-drawable-death-event-handler
)
:code
(behavior ()
(shut-down! (-> self neck))
(logclear! (-> self mask) (process-mask actor-pause))
(ja-channel-push! 1 60)
(clear-collide-with-as (-> self root-overeride))
(let ((a0-4 (-> self skel root-channel 0)))
(set!
(-> a0-4 frame-group)
(the-as art-joint-anim (-> self draw art-group data 16))
)
(set!
(-> a0-4 param 0)
(the
float
(+
(->
(the-as art-joint-anim (-> self draw art-group data 16))
data
0
length
)
-1
)
)
)
(set! (-> a0-4 param 1) 1.0)
(set! (-> a0-4 frame-num) 0.0)
(joint-control-channel-group!
a0-4
(the-as art-joint-anim (-> self draw art-group data 16))
num-func-seek!
)
)
(until (ja-done? 0)
(suspend)
(let ((a0-5 (-> self skel root-channel 0)))
(set!
(-> a0-5 param 0)
(the float (+ (-> a0-5 frame-group data 0 length) -1))
)
(set! (-> a0-5 param 1) 1.0)
(joint-control-channel-group-eval!
a0-5
(the-as art-joint-anim #f)
num-func-seek!
)
)
)
(send-event self 'death-end)
(while (-> self child)
(suspend)
)
(dummy-18 self)
(none)
)
:post
(the-as (function none :behavior driller-lurker) ja-post)
)
(defmethod relocate driller-lurker ((obj driller-lurker) (arg0 int))
(if (nonzero? (-> obj neck))
(&+! (-> obj neck) arg0)
)
(if (nonzero? (-> obj drill))
(&+! (-> obj drill) arg0)
)
(if (nonzero? (-> obj sound2))
(&+! (-> obj sound2) arg0)
)
(the-as
driller-lurker
((the-as
(function process-drawable int process-drawable)
(find-parent-method driller-lurker 7)
)
obj
arg0
)
)
)
(defmethod deactivate driller-lurker ((obj driller-lurker))
(if (nonzero? (-> obj sound2))
(stop! (-> obj sound2))
)
((method-of-type process-drawable deactivate) obj)
(none)
)
(defmethod
init-from-entity!
driller-lurker
((obj driller-lurker) (arg0 entity-actor))
(local-vars (sv-16 res-tag))
(set! (-> obj hit-player?) #f)
(set! (-> obj played-drill-sound?) #f)
(set! (-> obj hit-player-time) (the-as uint 0))
(set! (-> obj mode) (the-as uint 0))
(set! (-> obj drill-rz) 0.0)
(set! (-> obj drill-speed) 72817.78)
(set! (-> obj last-update-time) (the-as uint 0))
(set! (-> obj last-player-path-u-time) (the-as uint 0))
(set! (-> obj started-chasing-time) (the-as uint 0))
(set! (-> obj player-attack-id) (the-as uint 0))
(set! (-> obj ambient-drilling-u) -1.0)
(set! (-> obj mask) (logior (process-mask enemy) (-> obj mask)))
(let
((s4-0
(new
'process
'collide-shape-moving
obj
(collide-list-enum usually-hit-by-player)
)
)
)
(set! (-> s4-0 dynam) (copy *standard-dynamics* 'process))
(set! (-> s4-0 reaction) default-collision-reaction)
(set!
(-> s4-0 no-reaction)
(the-as
(function collide-shape-moving collide-shape-intersect vector vector none)
nothing
)
)
(let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 6) 0)))
(set! (-> s3-0 prim-core collide-as) (the-as uint 256))
(set! (-> s3-0 collide-with) (the-as uint 16))
(set! (-> s3-0 prim-core action) (the-as uint 3073))
(set! (-> s3-0 prim-core offense) 2)
(set-vector! (-> s3-0 local-sphere) 0.0 11264.0 0.0 22528.0)
(set-root-prim! s4-0 s3-0)
(let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2))))
(set! (-> s2-0 prim-core collide-as) (the-as uint 256))
(set! (-> s2-0 collide-with) (the-as uint 16))
(set! (-> s2-0 prim-core action) (the-as uint 3073))
(set! (-> s2-0 prim-core offense) 1)
(set-vector! (-> s2-0 local-sphere) 0.0 3276.8 0.0 4505.6)
(append-prim s3-0 s2-0)
)
(let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2))))
(set! (-> s2-1 prim-core collide-as) (the-as uint 256))
(set! (-> s2-1 collide-with) (the-as uint 16))
(set! (-> s2-1 prim-core action) (the-as uint 3073))
(set! (-> s2-1 prim-core offense) 1)
(set-vector! (-> s2-1 local-sphere) 0.0 7372.8 0.0 4505.6)
(append-prim s3-0 s2-1)
)
(let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2))))
(set! (-> s2-2 prim-core collide-as) (the-as uint 256))
(set! (-> s2-2 collide-with) (the-as uint 16))
(set! (-> s2-2 prim-core action) (the-as uint 3073))
(set! (-> s2-2 prim-core offense) 1)
(set-vector! (-> s2-2 local-sphere) 0.0 11468.8 0.0 4505.6)
(append-prim s3-0 s2-2)
)
(let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1))))
(set! (-> s2-3 prim-core collide-as) (the-as uint 256))
(set! (-> s2-3 collide-with) (the-as uint 16))
(set! (-> s2-3 prim-core offense) 2)
(set! (-> s2-3 transform-index) 25)
(set-vector! (-> s2-3 local-sphere) 0.0 0.0 4096.0 3276.8)
(append-prim s3-0 s2-3)
)
(let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1))))
(set! (-> s2-4 prim-core collide-as) (the-as uint 256))
(set! (-> s2-4 collide-with) (the-as uint 16))
(set! (-> s2-4 prim-core offense) 2)
(set! (-> s2-4 transform-index) 25)
(set-vector! (-> s2-4 local-sphere) 0.0 0.0 5734.4 3686.4)
(append-prim s3-0 s2-4)
)
(let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1))))
(set! (-> s2-5 prim-core collide-as) (the-as uint 256))
(set! (-> s2-5 collide-with) (the-as uint 16))
(set! (-> s2-5 prim-core offense) 2)
(set! (-> s2-5 transform-index) 25)
(set-vector! (-> s2-5 local-sphere) 0.0 0.0 9420.8 2457.6)
(append-prim s3-0 s2-5)
)
)
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
(backup-collide-with-as s4-0)
(set! (-> obj root-overeride) s4-0)
)
(process-drawable-from-entity! obj arg0)
(initialize-skeleton obj *driller-lurker-sg* '())
(set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0))
(logior!
(-> obj path flags)
(path-control-flag display draw-line draw-point draw-text)
)
(if (< (-> obj path curve num-cverts) 2)
(go process-drawable-art-error "bad path")
)
(set!
(-> obj fact)
(new
'process
'fact-info-enemy
obj
(pickup-type eco-pill-random)
(-> *FACT-bank* default-pill-inc)
)
)
(set! (-> obj draw shadow-ctrl) *driller-lurker-shadow-control*)
(set!
(-> obj sound)
(new
'process
'ambient-sound
(new 'static 'sound-spec
:mask #x80
:num 1.0
:group #x1
:sound-name (static-sound-name "drill-idle")
:volume #x400
:fo-max 40
)
(-> obj root-overeride trans)
)
)
(set!
(-> obj sound2)
(new
'process
'ambient-sound
(new 'static 'sound-spec
:mask #x80
:num 1.0
:group #x1
:sound-name (static-sound-name "drill-idle2")
:volume #x400
:fo-max 60
)
(-> obj root-overeride trans)
)
)
(set!
(-> obj part)
(create-launch-control (-> *part-group-id-table* 331) obj)
)
(let ((f0-34 (path-distance (-> obj path))))
(set! (-> obj path-units-per-meter) (/ 4096.0 f0-34))
)
(set! (-> obj path-dir) 1.0)
(set! (-> obj path-u) 0.0)
(set! (-> obj path-speed) 15360.0)
(set! (-> obj targ-path-speed) 15360.0)
(set! (-> obj up-blend) 0.0)
(set! sv-16 (new 'static 'res-tag))
(let
((v1-91
(res-lump-data
arg0
'driller-lurker
(pointer float)
:tag-ptr
(the-as (pointer res-tag) (new 'stack-no-clear 'vector))
)
)
)
(when v1-91
(set! (-> obj path-u) (fmax 0.0 (fmin 1.0 (-> v1-91 0))))
(if (< (-> v1-91 1) 0.0)
(set! (-> obj path-dir) -1.0)
)
(let ((f0-45 (-> v1-91 2)))
(when (!= f0-45 12345.0)
(let ((f30-0 (* 182.04445 f0-45)))
(set! (-> obj ambient-drilling-u) (-> obj path-u))
(quaternion-axis-angle! (-> obj root-overeride quat) 0.0 1.0 0.0 f30-0)
(set! (-> obj facing-ry) f30-0)
)
)
)
)
)
(eval-path-curve!
(-> obj path)
(-> obj root-overeride trans)
(-> obj path-u)
'interp
)
(let ((s5-1 (new 'stack-no-clear 'vector)))
(TODO-RENAME-14 (-> obj path) s5-1 (-> obj path-u))
(let ((f0-51 (atan (-> s5-1 x) (-> s5-1 z))))
(if (< (-> obj path-dir) 0.0)
(set! f0-51 (+ 32768.0 f0-51))
)
(set! (-> obj path-ry) f0-51)
(if (< (-> obj ambient-drilling-u) 0.0)
(set! (-> obj facing-ry) f0-51)
)
)
)
(let ((v1-103 (new 'process 'joint-mod (joint-mod-handler-mode reset) obj 6)))
(set! (-> obj neck) v1-103)
(set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0)
(set! (-> v1-103 up) (the-as uint 1))
(set! (-> v1-103 nose) (the-as uint 2))
(set! (-> v1-103 ear) (the-as uint 0))
(set! (-> v1-103 max-dist) 102400.0)
(set! (-> v1-103 ignore-angle) 16384.0)
)
(set!
(-> obj drill)
(new 'process 'joint-mod (joint-mod-handler-mode joint-set*) obj 38)
)
(transform-post)
(create-connection!
*cavecrystal-light-control*
obj
(-> obj entity)
(the-as
(function object object object object object)
cavecrystal-light-control-default-callback
)
-1
8192.0
)
(if (>= (-> obj ambient-drilling-u) 0.0)
(go driller-lurker-idle-drilling)
(go driller-lurker-patrol)
)
(none)
)