mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
7edfc8bcec
* 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
1856 lines
50 KiB
Common Lisp
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)
|
|
)
|
|
|
|
|
|
|
|
|