mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
1409 lines
41 KiB
Common Lisp
1409 lines
41 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: lavatube-energy.gc
|
|
;; name in dgo: lavatube-energy
|
|
;; dgos: L1, LAV
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(defpartgroup group-energyarm
|
|
:id 544
|
|
:bounds (static-bspherem 0 0 0 4)
|
|
:parts ((sp-item 1931 :fade-after (meters 120)) (sp-item 2167 :fade-after (meters 60) :falloff-to (meters 60)))
|
|
)
|
|
|
|
(defpart 1931
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x12 :page #x2))
|
|
(:num 1.0)
|
|
(:scale-x (meters 2) (meters 0.5))
|
|
(:rot-z (degrees 0) (degrees 360))
|
|
(:scale-y :copy scale-x)
|
|
(:r 192.0 32.0)
|
|
(:g 128.0 64.0)
|
|
(:b 64.0 128.0)
|
|
(:a 64.0 32.0)
|
|
(:scalevel-x (meters -0.016666668))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-a -1.0666667)
|
|
(:timer (seconds 0.2))
|
|
(:flags (bit0 bit2 bit3 bit14))
|
|
)
|
|
)
|
|
|
|
(defpart 2167
|
|
:init-specs ((:texture (new 'static 'texture-id :index #xf :page #x2))
|
|
(:num 1.0 8.0)
|
|
(:scale-x (meters 0.5) (meters 0.3))
|
|
(:scale-y :copy scale-x)
|
|
(:r 128.0 128.0)
|
|
(:g 128.0)
|
|
(:b 64.0)
|
|
(:a 64.0 64.0)
|
|
(:vel-y (meters 0.013333334) (meters 0.08))
|
|
(:scalevel-x (meters -0.00055555557))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-g -0.2)
|
|
(:fade-b -0.2)
|
|
(:fade-a -0.6)
|
|
(:accel-y (meters -0.0016666667))
|
|
(:friction 0.94)
|
|
(:timer (seconds 0.1) (seconds 0.497))
|
|
(:flags (bit2))
|
|
(:conerot-x (degrees 0) (degrees 180))
|
|
(:conerot-y (degrees 0) (degrees 360))
|
|
)
|
|
)
|
|
|
|
(defpartgroup group-energyball-always
|
|
:id 545
|
|
:bounds (static-bspherem 0 0 0 8)
|
|
:parts ((sp-item 2168 :fade-after (meters 80) :falloff-to (meters 80))
|
|
(sp-item 2169 :fade-after (meters 120))
|
|
(sp-item 2170 :fade-after (meters 120))
|
|
(sp-item 2171 :fade-after (meters 120) :flags (is-3d))
|
|
(sp-item 2172 :fade-after (meters 80) :falloff-to (meters 80))
|
|
(sp-item 2173 :fade-after (meters 120) :falloff-to (meters 120))
|
|
(sp-item 2174 :fade-after (meters 120) :falloff-to (meters 120))
|
|
(sp-item 2175 :fade-after (meters 120) :falloff-to (meters 120))
|
|
)
|
|
)
|
|
|
|
(defpart 2168
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x12 :page #x2))
|
|
(:num 8.0)
|
|
(:y (meters -5.5))
|
|
(:scale-x (meters 0.2) (meters 0.1))
|
|
(:rot-z (degrees 0) (degrees 360))
|
|
(:scale-y :copy scale-x)
|
|
(:r 192.0)
|
|
(:g 192.0)
|
|
(:b 64.0 128.0)
|
|
(:a 8.0 24.0)
|
|
(:vel-y (meters 0.10666667) (meters 0.053333335))
|
|
(:rotvel-z (degrees -0.15) (degrees 0.3))
|
|
(:fade-a 0.35555556)
|
|
(:accel-y (meters -0.0004) (meters -0.0004))
|
|
(:friction 0.9)
|
|
(:timer (seconds 0.4) (seconds 0.197))
|
|
(:flags (bit2 bit3 bit14))
|
|
(:next-time (seconds 0.1) (seconds 0.397))
|
|
(:next-launcher 2176)
|
|
(:conerot-x (degrees 0) (degrees 90))
|
|
(:conerot-y (degrees 0) (degrees 360))
|
|
)
|
|
)
|
|
|
|
(defpart 2176
|
|
:init-specs ((:scale-x (meters 1.2)) (:scale-y :copy scale-x) (:a 48.0) (:timer (seconds 0.017)))
|
|
)
|
|
|
|
(defpart 2177
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x12 :page #x2))
|
|
(:num 8.0)
|
|
(:scale-x (meters 0.3) (meters 0.2))
|
|
(:rot-z (degrees 0) (degrees 360))
|
|
(:scale-y :copy scale-x)
|
|
(:r 192.0)
|
|
(:g 192.0)
|
|
(:b 64.0 128.0)
|
|
(:a 64.0)
|
|
(:vel-y (meters 0.10666667) (meters 0.053333335))
|
|
(:rotvel-z (degrees -0.15) (degrees 0.3))
|
|
(:friction 0.9)
|
|
(:timer (seconds 0.035) (seconds 0.137))
|
|
(:flags (bit2 bit3 bit14))
|
|
(:next-time (seconds 0.035) (seconds 0.137))
|
|
(:next-launcher 2176)
|
|
(:conerot-x (degrees 0) (degrees 180))
|
|
(:conerot-y (degrees 0) (degrees 360))
|
|
(:conerot-radius (meters 5.5))
|
|
)
|
|
)
|
|
|
|
(defpart 2169
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x12 :page #x2))
|
|
(:num 1.0)
|
|
(:y (meters -5.5))
|
|
(:scale-x (meters 8) (meters 4))
|
|
(:scale-y (meters 24))
|
|
(:r 192.0 32.0)
|
|
(:g 128.0 64.0)
|
|
(:b 64.0 128.0)
|
|
(:a 64.0 64.0)
|
|
(:timer (seconds 0.017))
|
|
(:flags (bit2 bit3 bit14))
|
|
)
|
|
)
|
|
|
|
(defpart 2170
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x12 :page #x2))
|
|
(:num 1.0)
|
|
(:y (meters -5.5))
|
|
(:scale-x (meters 12) (meters 8))
|
|
(:rot-z (degrees 0) (degrees 360))
|
|
(:scale-y :copy scale-x)
|
|
(:r 192.0 32.0)
|
|
(:g 128.0 64.0)
|
|
(:b 64.0 128.0)
|
|
(:a 16.0 32.0)
|
|
(:timer (seconds 0.017))
|
|
(:flags (bit2 bit3 bit14))
|
|
)
|
|
)
|
|
|
|
(defpart 2171
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x12 :page #x2))
|
|
(:num 1.0)
|
|
(:y (meters -5))
|
|
(:scale-x (meters 12) (meters 8))
|
|
(:rot-y (degrees 0) (degrees 360))
|
|
(:scale-y :copy scale-x)
|
|
(:r 192.0 32.0)
|
|
(:g 128.0 64.0)
|
|
(:b 64.0 128.0)
|
|
(:a 16.0 32.0)
|
|
(:scalevel-x (meters -0.040404037))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-a -0.12121211)
|
|
(:timer (seconds 0.66))
|
|
(:flags (bit2 bit3 bit14))
|
|
)
|
|
)
|
|
|
|
(defpart 2172
|
|
:init-specs ((:texture (new 'static 'texture-id :index #xf :page #x2))
|
|
(:num 2.0)
|
|
(:y (meters -5.5))
|
|
(:scale-x (meters 0.5))
|
|
(:rot-z (degrees 70) (degrees 40))
|
|
(:scale-y (meters 12))
|
|
(:r 255.0)
|
|
(:g 196.0)
|
|
(:b 64.0)
|
|
(:a 32.0 64.0)
|
|
(:scalevel-y (meters 0.85333335))
|
|
(:fade-g -3.2666667)
|
|
(:fade-b -1.0666667)
|
|
(:fade-a -1.6)
|
|
(:timer (seconds 0.2))
|
|
(:flags (bit2 bit3 bit14))
|
|
)
|
|
)
|
|
|
|
(defpart 2173
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x1f :page #x2))
|
|
(:num 1.0)
|
|
(:scale-x (meters 8) (meters 6))
|
|
(:rot-x 4)
|
|
(:rot-z (degrees 0) (degrees 360))
|
|
(:scale-y (meters 1) (meters 0.5))
|
|
(:r 255.0)
|
|
(:g 196.0)
|
|
(:b 196.0)
|
|
(:a 128.0)
|
|
(:fade-a -6.4)
|
|
(:timer (seconds 0.14))
|
|
(:flags (bit2 bit3 bit14))
|
|
(:next-time (seconds 0.035))
|
|
(:next-launcher 2178)
|
|
)
|
|
)
|
|
|
|
(defpart 2178
|
|
:init-specs ((:b 0.0) (:a 64.0) (:fade-g -4.266667))
|
|
)
|
|
|
|
(defpart 2174
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x23 :page #x2))
|
|
(:num 1.0)
|
|
(:scale-x (meters 8) (meters 4))
|
|
(:rot-x 4)
|
|
(:rot-z (degrees 0) (degrees 360))
|
|
(:scale-y (meters 1) (meters 0.5))
|
|
(:r 255.0)
|
|
(:g 196.0)
|
|
(:b 196.0)
|
|
(:a 128.0)
|
|
(:fade-a -6.4)
|
|
(:timer (seconds 0.14))
|
|
(:flags (bit2 bit3 bit14))
|
|
(:next-time (seconds 0.035))
|
|
(:next-launcher 2178)
|
|
)
|
|
)
|
|
|
|
(defpart 2175
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x24 :page #x2))
|
|
(:num 1.0)
|
|
(:scale-x (meters 8) (meters 4))
|
|
(:rot-x 4)
|
|
(:rot-z (degrees 0) (degrees 360))
|
|
(:scale-y (meters 1) (meters 0.5))
|
|
(:r 255.0)
|
|
(:g 196.0)
|
|
(:b 196.0)
|
|
(:a 128.0)
|
|
(:fade-a -6.4)
|
|
(:timer (seconds 0.14))
|
|
(:flags (bit2 bit3 bit14))
|
|
(:next-time (seconds 0.035))
|
|
(:next-launcher 2178)
|
|
)
|
|
)
|
|
|
|
(defpartgroup group-energyball-explode
|
|
:id 546
|
|
:flags (use-local-clock)
|
|
:bounds (static-bspherem 0 0 0 45)
|
|
:parts ((sp-item 2179 :period (seconds 2) :length (seconds 0.017))
|
|
(sp-item 2180 :period (seconds 2) :length (seconds 0.135))
|
|
(sp-item 2181 :period (seconds 2) :length (seconds 0.067))
|
|
(sp-item 2182 :period (seconds 2) :length (seconds 0.067))
|
|
)
|
|
)
|
|
|
|
(defpart 2180
|
|
:init-specs ((:texture (new 'static 'texture-id :index #xf :page #x2))
|
|
(:num 8.0)
|
|
(:y (meters 0))
|
|
(:scale-x (meters 0.5) (meters 1))
|
|
(:scale-y :copy scale-x)
|
|
(:r 192.0 32.0)
|
|
(:g 128.0 64.0)
|
|
(:b 64.0 64.0)
|
|
(:a 32.0 96.0)
|
|
(:vel-y (meters 0.06666667) (meters 0.26666668))
|
|
(:scalevel-x (meters -0.0026666666))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:accel-y (meters -0.00016666666) (meters -0.00016666666))
|
|
(:friction 0.9)
|
|
(:timer (seconds 1))
|
|
(:flags (bit2 bit14))
|
|
(:next-time (seconds 0.1) (seconds 0.297))
|
|
(:next-launcher 2183)
|
|
(:conerot-x (degrees 0) (degrees 180))
|
|
(:conerot-y (degrees 0) (degrees 360))
|
|
(:conerot-radius (meters 2) (meters 4))
|
|
)
|
|
)
|
|
|
|
(defpart 2183
|
|
:init-specs ((:fade-a -1.0666667))
|
|
)
|
|
|
|
(defpart 2182
|
|
:init-specs ((:texture (new 'static 'texture-id :index #xf :page #x2))
|
|
(:num 6.0)
|
|
(:y (meters 0))
|
|
(:scale-x (meters 0.4))
|
|
(:rot-z (degrees 0) (degrees 180))
|
|
(:scale-y (meters 24))
|
|
(:r 192.0 32.0)
|
|
(:g 128.0 64.0)
|
|
(:b 64.0 64.0)
|
|
(:a 32.0 64.0)
|
|
(:scalevel-y (meters 1.6666666))
|
|
(:fade-a -1.6)
|
|
(:timer (seconds 0.2))
|
|
(:flags (bit2 bit3 bit14))
|
|
)
|
|
)
|
|
|
|
(defpart 2179
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x12 :page #x2))
|
|
(:num 1.0)
|
|
(:y (meters 0))
|
|
(:scale-x (meters 40))
|
|
(:scale-y :copy scale-x)
|
|
(:r 192.0 32.0)
|
|
(:g 128.0 64.0)
|
|
(:b 64.0 64.0)
|
|
(:a 128.0)
|
|
(:fade-a -2.3272727)
|
|
(:timer (seconds 0.18))
|
|
(:flags (bit2 bit3 bit14))
|
|
)
|
|
)
|
|
|
|
(defpart 2181
|
|
:init-specs ((:texture (new 'static 'texture-id :page #x2))
|
|
(:num 12.0)
|
|
(:x (meters -2) (meters 4))
|
|
(:y (meters -2) (meters 4))
|
|
(:z (meters -2) (meters 4))
|
|
(:scale-x (meters 5) (meters 2.5))
|
|
(:rot-z (degrees 0) (degrees 360))
|
|
(:scale-y :copy scale-x)
|
|
(:r 192.0 32.0)
|
|
(:g 128.0 64.0)
|
|
(:b 64.0 64.0)
|
|
(:a 64.0 64.0)
|
|
(:vel-y (meters 0.10666667) (meters 0.053333335))
|
|
(:scalevel-x (meters 0.02))
|
|
(:rotvel-z (degrees -0.6) (degrees 1.2))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-a -0.28444445)
|
|
(:accel-y (meters 0.00016666666) (meters 0.000033333334))
|
|
(:friction 0.8)
|
|
(:timer (seconds 1.7))
|
|
(:flags (bit2 bit3 bit14))
|
|
(:conerot-x (degrees 0) (degrees 180))
|
|
(:conerot-y (degrees 0) (degrees 360))
|
|
(:conerot-radius (meters 0) (meters 6))
|
|
)
|
|
)
|
|
|
|
(deftype energydoor (process-drawable)
|
|
((root collide-shape-moving :override)
|
|
(alt-actor entity-actor)
|
|
)
|
|
(:states
|
|
energydoor-closed-till-near
|
|
energydoor-closed-till-task
|
|
energydoor-closing
|
|
energydoor-opened
|
|
energydoor-opening
|
|
)
|
|
)
|
|
|
|
|
|
(defskelgroup *energydoor-sg* energydoor energydoor-lod0-jg energydoor-idle-ja
|
|
((energydoor-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 14 0 35)
|
|
)
|
|
|
|
(defbehavior energydoor-player-dist energydoor ()
|
|
(let ((gp-0 (new 'stack-no-clear 'vector))
|
|
(s5-0 (new 'stack-no-clear 'matrix))
|
|
)
|
|
(vector-! gp-0 (target-pos 0) (-> self root trans))
|
|
(quaternion->matrix s5-0 (-> self root quat))
|
|
(vector-dot gp-0 (the-as vector (-> s5-0 vector)))
|
|
)
|
|
)
|
|
|
|
(defbehavior energydoor-open-handler energydoor ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('open?)
|
|
#t
|
|
)
|
|
)
|
|
)
|
|
|
|
(defbehavior energydoor-closed-handler energydoor ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('open)
|
|
(go energydoor-opening)
|
|
)
|
|
(('open?)
|
|
#f
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate energydoor-closing (energydoor)
|
|
:event energydoor-closed-handler
|
|
:code (behavior ()
|
|
(ja-no-eval :group! (ja-group) :num! (seek! 0.0) :frame-num max)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek! 0.0))
|
|
)
|
|
(if (or (task-closed? (-> self entity extra perm task) (task-status need-resolution))
|
|
(< (energydoor-player-dist) 0.0)
|
|
)
|
|
(go energydoor-closed-till-near)
|
|
(go energydoor-closed-till-task)
|
|
)
|
|
)
|
|
:post transform-post
|
|
)
|
|
|
|
(defstate energydoor-opened (energydoor)
|
|
:event energydoor-open-handler
|
|
:trans (behavior ()
|
|
(let ((f30-0 (energydoor-player-dist)))
|
|
(cond
|
|
((< f30-0 -450560.0)
|
|
(go energydoor-closing)
|
|
)
|
|
((and (not (task-closed? (-> self entity extra perm task) (task-status need-resolution)))
|
|
(< 61440.0 f30-0)
|
|
(let ((a1-1 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-1 from) self)
|
|
(set! (-> a1-1 num-params) 0)
|
|
(set! (-> a1-1 message) 'open?)
|
|
(let ((t9-3 send-event-function)
|
|
(v1-7 (-> self alt-actor))
|
|
)
|
|
(not (t9-3
|
|
(if v1-7
|
|
(-> v1-7 extra process)
|
|
)
|
|
a1-1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(go energydoor-closing)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(ja :num-func num-func-identity :frame-num max)
|
|
(transform-post)
|
|
(loop
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate energydoor-opening (energydoor)
|
|
:event energydoor-open-handler
|
|
:code (behavior ()
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
(go energydoor-opened)
|
|
)
|
|
:post transform-post
|
|
)
|
|
|
|
(defstate energydoor-closed-till-task (energydoor)
|
|
:event energydoor-closed-handler
|
|
:trans (behavior ()
|
|
(cond
|
|
((task-closed? (-> self entity extra perm task) (task-status need-resolution))
|
|
(go energydoor-opening)
|
|
)
|
|
((let ((a1-1 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-1 from) self)
|
|
(set! (-> a1-1 num-params) 0)
|
|
(set! (-> a1-1 message) 'open?)
|
|
(let ((t9-2 send-event-function)
|
|
(v1-5 (-> self alt-actor))
|
|
)
|
|
(t9-2
|
|
(if v1-5
|
|
(-> v1-5 extra process)
|
|
)
|
|
a1-1
|
|
)
|
|
)
|
|
)
|
|
(go energydoor-opening)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(ja :num-func num-func-identity :frame-num 0.0)
|
|
(transform-post)
|
|
(loop
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate energydoor-closed-till-near (energydoor)
|
|
:event energydoor-closed-handler
|
|
:trans (behavior ()
|
|
(if (< -409600.0 (energydoor-player-dist))
|
|
(go energydoor-opening)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(ja :num-func num-func-identity :frame-num 0.0)
|
|
(transform-post)
|
|
(loop
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defmethod init-from-entity! ((this energydoor) (arg0 entity-actor))
|
|
(with-pp
|
|
(let ((s4-0 (new 'process 'collide-shape-moving this (collide-list-enum 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-mesh s4-0 (the-as uint 0) (the-as uint 0))))
|
|
(set! (-> s3-0 prim-core collide-as) (collide-kind wall-object))
|
|
(set! (-> s3-0 collide-with) (collide-kind target))
|
|
(set! (-> s3-0 prim-core action) (collide-action solid))
|
|
(set! (-> s3-0 prim-core offense) (collide-offense indestructible))
|
|
(set! (-> s3-0 transform-index) 8)
|
|
(set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 102400.0)
|
|
(set-root-prim! s4-0 s3-0)
|
|
)
|
|
(set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w)))
|
|
(backup-collide-with-as s4-0)
|
|
(set! (-> this root) s4-0)
|
|
)
|
|
(process-drawable-from-entity! this arg0)
|
|
(initialize-skeleton this *energydoor-sg* '())
|
|
(set! (-> this root pause-adjust-distance) 245760.0)
|
|
(set! (-> this alt-actor) (entity-actor-lookup arg0 'alt-actor 0))
|
|
(cond
|
|
((< (energydoor-player-dist) -409600.0)
|
|
(go energydoor-closed-till-near)
|
|
)
|
|
((task-closed? (-> this entity extra perm task) (task-status need-resolution))
|
|
(go energydoor-opened)
|
|
)
|
|
(else
|
|
(let ((a1-9 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-9 from) pp)
|
|
(set! (-> a1-9 num-params) 0)
|
|
(set! (-> a1-9 message) 'open?)
|
|
(let ((t9-12 send-event-function)
|
|
(v1-25 (-> this alt-actor))
|
|
)
|
|
(cond
|
|
((t9-12
|
|
(if v1-25
|
|
(-> v1-25 extra process)
|
|
)
|
|
a1-9
|
|
)
|
|
(go energydoor-opened)
|
|
)
|
|
((< 0.0 (energydoor-player-dist))
|
|
(go energydoor-closed-till-task)
|
|
)
|
|
(else
|
|
(go energydoor-opened)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(deftype energybase (process-drawable)
|
|
()
|
|
(:states
|
|
energybase-idle
|
|
energybase-stopped
|
|
energybase-stopping
|
|
)
|
|
)
|
|
|
|
|
|
(defskelgroup *energybase-sg* energybase energybase-lod0-jg energybase-idle-ja
|
|
((energybase-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 40 0 40)
|
|
)
|
|
|
|
(defstate energybase-stopped (energybase)
|
|
:code (behavior ()
|
|
(ja-post)
|
|
(loop
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate energybase-stopping (energybase)
|
|
:code (behavior ()
|
|
(let ((f30-0 1.0))
|
|
(loop
|
|
(ja-no-eval :group! (ja-group) :num! (seek! max f30-0) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(set! f30-0 (- f30-0 (* 0.002 (-> *display* time-adjust-ratio))))
|
|
(if (< f30-0 0.0)
|
|
(go energybase-stopped)
|
|
)
|
|
(suspend)
|
|
(ja :num! (seek! max f30-0))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
(defstate energybase-idle (energybase)
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('stop)
|
|
(go energybase-stopping)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(loop
|
|
(if (and *target* (>= 307200.0 (vector-vector-distance (-> self root trans) (-> *target* control trans))))
|
|
(level-hint-spawn (text-id lavatube-balls) "sksp0375" (the-as entity #f) *entity-pool* (game-task none))
|
|
)
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
(defmethod init-from-entity! ((this energybase) (arg0 entity-actor))
|
|
(set! (-> this root) (new 'process 'trsqv))
|
|
(process-drawable-from-entity! this arg0)
|
|
(initialize-skeleton this *energybase-sg* '())
|
|
(if (task-closed? (game-task lavatube-balls) (task-status need-resolution))
|
|
(go energybase-stopped)
|
|
(go energybase-idle)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(deftype energyhub (process-drawable)
|
|
((self-override energyhub :overlay-at self)
|
|
(alts entity-actor 3)
|
|
(arm handle 5)
|
|
(rot-mat matrix :inline)
|
|
(rot-mat-init matrix :inline)
|
|
(rotation-speed oscillating-float :inline)
|
|
(rotation-speed-offset delayed-rand-float :inline)
|
|
(y-rotation float)
|
|
(x-rotation float)
|
|
(palette-val float)
|
|
)
|
|
(:states
|
|
energyhub-idle
|
|
energyhub-stop
|
|
energyhub-stopped
|
|
)
|
|
)
|
|
|
|
|
|
(deftype energyarm (process-drawable)
|
|
((root collide-shape-moving :override)
|
|
(parent-overide (pointer energyhub) :overlay-at parent)
|
|
(self-override energyarm :overlay-at self)
|
|
(offset vector :inline)
|
|
(y-rotation float)
|
|
(y-chatter-rotation bouncing-float :inline)
|
|
(y-chatter-min delayed-rand-float :inline)
|
|
(x-rotation bouncing-float :inline)
|
|
(x-fall-rotation bouncing-float :inline)
|
|
(rot-mat matrix :inline)
|
|
(ball handle)
|
|
(x-correction float)
|
|
)
|
|
(:states
|
|
energyarm-fall
|
|
energyarm-idle
|
|
energyarm-no-ball
|
|
energyarm-stop
|
|
)
|
|
)
|
|
|
|
|
|
(deftype energyball (process-drawable)
|
|
((root collide-shape-moving :override)
|
|
(parent-overide (pointer energyarm) :overlay-at parent)
|
|
)
|
|
(:states
|
|
energyball-idle
|
|
)
|
|
)
|
|
|
|
|
|
(defskelgroup *energyball-sg* energyball energyball-lod0-jg energyball-idle-ja
|
|
((energyball-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 0 6)
|
|
)
|
|
|
|
(defstate energyball-idle (energyball)
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('attack)
|
|
(when (and (>= argc 2) (= (-> block param 1) 'eco-yellow))
|
|
(increment-success-for-hint (text-id lavatube-balls))
|
|
(sound-play "dcrate-break")
|
|
(process-spawn
|
|
part-tracker
|
|
:init part-tracker-init
|
|
(-> *part-group-id-table* 546)
|
|
600
|
|
#f
|
|
#f
|
|
#f
|
|
(-> self root trans)
|
|
:to *entity-pool*
|
|
)
|
|
(cleanup-for-death self)
|
|
(deactivate self)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(rider-trans)
|
|
(spawn (-> self part) (-> self root trans))
|
|
(let* ((v1-3 (-> self parent-overide))
|
|
(s5-0 (if v1-3
|
|
(-> v1-3 0 self-override)
|
|
)
|
|
)
|
|
(gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) energyarm))
|
|
s5-0
|
|
)
|
|
)
|
|
(s4-0 (new 'stack-no-clear 'vector))
|
|
(s5-1 (new 'stack-no-clear 'matrix))
|
|
(f0-1 (the float (current-time)))
|
|
(f30-0 (- f0-1 (* (the float (the int (/ f0-1 -150.0))) -150.0)))
|
|
)
|
|
(when gp-0
|
|
(set-vector! s4-0 0.0 -61440.0 -106496.0 1.0)
|
|
(vector-matrix*! s4-0 s4-0 (-> gp-0 rot-mat))
|
|
(vector+! (-> self root trans) s4-0 (-> gp-0 root trans))
|
|
(matrix-rotate-y! s5-1 (* -436.90668 f30-0))
|
|
(matrix*! s5-1 s5-1 (-> gp-0 rot-mat))
|
|
(matrix->quaternion (-> self root quat) s5-1)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(loop
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
:post rider-post
|
|
)
|
|
|
|
(defun energyball-init ((arg0 energyball))
|
|
(logior! (-> arg0 mask) (process-mask attackable))
|
|
(let ((s5-0 (new 'process 'collide-shape-moving arg0 (collide-list-enum usually-hit-by-player))))
|
|
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
|
|
(set! (-> s5-0 reaction) default-collision-reaction)
|
|
(set! (-> s5-0 no-reaction)
|
|
(the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
|
|
)
|
|
(let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0))))
|
|
(set! (-> s4-0 prim-core collide-as) (collide-kind wall-object))
|
|
(set! (-> s4-0 collide-with) (collide-kind target))
|
|
(set! (-> s4-0 prim-core action) (collide-action solid))
|
|
(set! (-> s4-0 prim-core offense) (collide-offense indestructible))
|
|
(set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 20480.0)
|
|
(set-root-prim! s5-0 s4-0)
|
|
)
|
|
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
|
|
(backup-collide-with-as s5-0)
|
|
(set! (-> arg0 root) s5-0)
|
|
s5-0
|
|
)
|
|
)
|
|
|
|
(defbehavior energyball-init-by-other energyball ((arg0 vector))
|
|
(energyball-init self)
|
|
(set! (-> self root trans quad) (-> arg0 quad))
|
|
(initialize-skeleton self *energyball-sg* '())
|
|
(set! (-> self part) (create-launch-control (-> *part-group-id-table* 545) self))
|
|
(go energyball-idle)
|
|
(none)
|
|
)
|
|
|
|
(defskelgroup *energyarm-sg* energyarm energyarm-lod0-jg energyarm-idle-ja
|
|
((energyarm-lod0-mg (meters 20)) (energyarm-lod1-mg (meters 999999)))
|
|
:bounds (static-spherem 0 0 -20 17)
|
|
)
|
|
|
|
(defbehavior energyarm-trans energyarm ()
|
|
(rider-trans)
|
|
(let* ((v1-0 (-> self parent-overide))
|
|
(gp-0 (if v1-0
|
|
(-> v1-0 0 self-override)
|
|
)
|
|
)
|
|
(s5-0 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) energyhub))
|
|
gp-0
|
|
)
|
|
)
|
|
(gp-1 (new 'stack-no-clear 'vector))
|
|
(s4-0 (new 'stack-no-clear 'matrix))
|
|
)
|
|
0.0
|
|
(when s5-0
|
|
(matrix-rotate-y!
|
|
(-> self rot-mat)
|
|
(+ (* -1820.4445 (-> self y-chatter-rotation osc value)) (-> self y-rotation))
|
|
)
|
|
(matrix*! (-> self rot-mat) (-> self rot-mat) (-> s5-0 rot-mat))
|
|
(let ((f0-7 (* (-> self x-correction) (-> s5-0 x-rotation) (cos (-> self y-rotation)))))
|
|
(matrix-rotate-x!
|
|
s4-0
|
|
(+ f0-7 (* 910.2222 (-> self x-rotation osc value)) (* -7281.778 (-> self x-fall-rotation osc value)))
|
|
)
|
|
)
|
|
(matrix*! (-> self rot-mat) s4-0 (-> self rot-mat))
|
|
(set-vector! gp-1 0.0 0.0 -81920.0 1.0)
|
|
(vector-matrix*! (-> self draw bounds) gp-1 (-> self rot-mat))
|
|
(set! (-> self draw bounds w) 69632.0)
|
|
(matrix->quaternion (-> self root quat) (-> self rot-mat))
|
|
(vector-matrix*! gp-1 (-> self offset) (-> s5-0 rot-mat))
|
|
(vector+! (-> self root trans) (-> s5-0 root trans) gp-1)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate energyarm-stop (energyarm)
|
|
:enter (behavior ()
|
|
'()
|
|
)
|
|
:trans (behavior ()
|
|
(update! (-> self x-rotation) 0.0)
|
|
(update! (-> self y-chatter-rotation) 0.0)
|
|
(energyarm-trans)
|
|
)
|
|
:code (behavior ()
|
|
(loop
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
:post rider-post
|
|
)
|
|
|
|
(defstate energyarm-no-ball (energyarm)
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('stop)
|
|
(go energyarm-stop)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self y-chatter-rotation osc target) 1.0)
|
|
)
|
|
:trans (behavior ()
|
|
(set! (-> self x-correction) (fmax -1.0 (+ -0.1 (-> self x-correction))))
|
|
(update! (-> self x-rotation) 0.0)
|
|
(when (at-min? (-> self x-rotation))
|
|
(let* ((f30-0 0.15)
|
|
(v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-7 (the-as number (logior #x3f800000 v1-6)))
|
|
)
|
|
(set! (-> self x-rotation osc vel) (fmax (* f30-0 (+ -1.0 (the-as float v1-7))) (-> self x-rotation osc vel)))
|
|
)
|
|
)
|
|
(update! (-> self y-chatter-rotation) 0.0)
|
|
(when (at-max? (-> self y-chatter-rotation))
|
|
(let* ((f30-1 -0.1)
|
|
(v1-16 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-17 (the-as number (logior #x3f800000 v1-16)))
|
|
(f30-2 (* f30-1 (+ -1.0 (the-as float v1-17))))
|
|
)
|
|
(update! (-> self y-chatter-min))
|
|
(set! (-> self y-chatter-rotation min-value) (fabs (-> self y-chatter-min value)))
|
|
(set! (-> self y-chatter-rotation osc vel) (fmin f30-2 (-> self y-chatter-rotation osc vel)))
|
|
)
|
|
)
|
|
(energyarm-trans)
|
|
)
|
|
:code (behavior ()
|
|
(loop
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
:post rider-post
|
|
)
|
|
|
|
(defstate energyarm-fall (energyarm)
|
|
:enter (behavior ()
|
|
(set! (-> self x-fall-rotation osc target) 1.0)
|
|
)
|
|
:trans (behavior ()
|
|
(update! (-> self x-fall-rotation) 0.0)
|
|
(update! (-> self y-chatter-rotation) 0.0)
|
|
(when (at-max? (-> self x-fall-rotation))
|
|
(set! (-> self y-chatter-rotation min-value) -1.0)
|
|
(set! (-> self y-chatter-rotation osc vel) 0.2)
|
|
(if (< -0.01 (-> self x-fall-rotation osc vel))
|
|
(go energyarm-no-ball)
|
|
)
|
|
)
|
|
(energyarm-trans)
|
|
)
|
|
:code (behavior ()
|
|
(loop
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
:post rider-post
|
|
)
|
|
|
|
(defstate energyarm-idle (energyarm)
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('stop)
|
|
(go energyarm-stop)
|
|
)
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(update! (-> self x-rotation) 0.0)
|
|
(when (at-min? (-> self x-rotation))
|
|
(let* ((f30-0 0.15)
|
|
(v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-7 (the-as number (logior #x3f800000 v1-6)))
|
|
)
|
|
(set! (-> self x-rotation osc vel) (fmax (* f30-0 (+ -1.0 (the-as float v1-7))) (-> self x-rotation osc vel)))
|
|
)
|
|
)
|
|
(energyarm-trans)
|
|
(cond
|
|
((handle->process (-> self ball))
|
|
(spawn
|
|
(-> self part)
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (joint-node energyarm-lod0-jg zapa))
|
|
)
|
|
(spawn
|
|
(-> self part)
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (joint-node energyarm-lod0-jg zapb))
|
|
)
|
|
(spawn
|
|
(-> self part)
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (joint-node energyarm-lod0-jg zapc))
|
|
)
|
|
)
|
|
((!= (-> self ball) #f)
|
|
(set! (-> self ball) (the-as handle #f))
|
|
(let ((a1-8 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-8 from) self)
|
|
(set! (-> a1-8 num-params) 0)
|
|
(set! (-> a1-8 message) 'flash)
|
|
(let ((t9-10 send-event-function)
|
|
(v1-24 (-> self parent-overide))
|
|
)
|
|
(t9-10
|
|
(if v1-24
|
|
(-> v1-24 0 self-override)
|
|
)
|
|
a1-8
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(let ((gp-0 (-> self skel root-channel 0)))
|
|
(set! (-> gp-0 num-func) num-func-identity)
|
|
(set! (-> gp-0 frame-num) (* (rand-float-gen) (the float (ja-num-frames 0))))
|
|
)
|
|
(loop
|
|
(suspend)
|
|
(let* ((f30-1 0.25)
|
|
(f28-0 0.25)
|
|
(v1-9 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-10 (the-as number (logior #x3f800000 v1-9)))
|
|
(f0-9 (+ f30-1 (* f28-0 (+ -1.0 (the-as float v1-10)))))
|
|
)
|
|
(ja :num! (loop! f0-9))
|
|
)
|
|
)
|
|
)
|
|
:post rider-post
|
|
)
|
|
|
|
(defun energyarm-init ((arg0 energyarm))
|
|
(let ((s5-0 (new 'process 'collide-shape-moving arg0 (collide-list-enum usually-hit-by-player))))
|
|
(set! (-> s5-0 dynam) (copy *standard-dynamics* 'process))
|
|
(set! (-> s5-0 reaction) default-collision-reaction)
|
|
(set! (-> s5-0 no-reaction)
|
|
(the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing)
|
|
)
|
|
(let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0))))
|
|
(set! (-> s4-0 prim-core collide-as) (collide-kind wall-object))
|
|
(set! (-> s4-0 collide-with) (collide-kind target))
|
|
(set! (-> s4-0 prim-core action) (collide-action solid))
|
|
(set! (-> s4-0 prim-core offense) (collide-offense indestructible))
|
|
(set! (-> s4-0 transform-index) 0)
|
|
(set-vector! (-> s4-0 local-sphere) 0.0 -12288.0 -81920.0 69632.0)
|
|
(set-root-prim! s5-0 s4-0)
|
|
)
|
|
(set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w)))
|
|
(backup-collide-with-as s5-0)
|
|
(set! (-> arg0 root) s5-0)
|
|
)
|
|
(let ((v0-5 (create-launch-control (-> *part-group-id-table* 544) arg0)))
|
|
(set! (-> arg0 part) v0-5)
|
|
v0-5
|
|
)
|
|
)
|
|
|
|
(defbehavior energyarm-init-by-other energyarm ((arg0 vector) (arg1 float))
|
|
(energyarm-init self)
|
|
(let* ((v1-0 (-> self parent-overide))
|
|
(s4-0 (if v1-0
|
|
(-> v1-0 0 self-override)
|
|
)
|
|
)
|
|
(a0-3 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) energyhub))
|
|
s4-0
|
|
)
|
|
)
|
|
)
|
|
(if a0-3
|
|
(set! (-> self root trans quad) (-> a0-3 root trans quad))
|
|
)
|
|
)
|
|
(initialize-skeleton self *energyarm-sg* '())
|
|
(logclear! (-> self mask) (process-mask actor-pause))
|
|
(set! (-> self offset quad) (-> arg0 quad))
|
|
(set! (-> self y-rotation) arg1)
|
|
(set-params! (-> self x-rotation) 0.0 1.0 0.0 0.7 0.08 0.1 0.97)
|
|
(set-params! (-> self x-fall-rotation) 0.0 1.0 0.0 0.7 0.005 0.08 0.97)
|
|
(set-params! (-> self y-chatter-rotation) 0.0 1.0 0.0 0.7 0.02 0.3 0.97)
|
|
(set-params! (-> self y-chatter-min) 300 600 1.0)
|
|
(set! (-> self x-correction) 0.0)
|
|
(cond
|
|
((task-closed? (game-task lavatube-balls) (task-status need-resolution))
|
|
(set! (-> self ball) (the-as handle #f))
|
|
(go energyarm-stop)
|
|
)
|
|
(else
|
|
(set! (-> self ball) (ppointer->handle (process-spawn energyball (-> self root trans) :to self)))
|
|
(go energyarm-idle)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defskelgroup *energyhub-sg* energyhub energyhub-lod0-jg energyhub-idle-ja
|
|
((energyhub-lod0-mg (meters 999999)))
|
|
:bounds (static-spherem 0 2 0 10)
|
|
)
|
|
|
|
(defbehavior energyhub-trans energyhub ()
|
|
(+! (-> self y-rotation) (* 36.40889
|
|
(-> self rotation-speed value)
|
|
(the float (- (current-time) (-> *display* old-base-frame-counter)))
|
|
)
|
|
)
|
|
(cond
|
|
((< 65536.0 (-> self y-rotation))
|
|
(+! (-> self y-rotation) -65536.0)
|
|
)
|
|
((< (-> self y-rotation) 0.0)
|
|
(+! (-> self y-rotation) 65536.0)
|
|
)
|
|
)
|
|
(let ((gp-0 (new 'stack-no-clear 'matrix)))
|
|
(let* ((f0-9 (the float (current-time)))
|
|
(f28-0 (- f0-9 (* (the float (the int (/ f0-9 1200.0))) 1200.0)))
|
|
)
|
|
(matrix-rotate-y! gp-0 (-> self y-rotation))
|
|
(matrix*! (-> self rot-mat) gp-0 (-> self rot-mat-init))
|
|
(set! (-> self x-rotation) (* 728.1778 (sin (* 54.613335 f28-0))))
|
|
)
|
|
(matrix-rotate-x! gp-0 (-> self x-rotation))
|
|
(matrix*! (-> self rot-mat) gp-0 (-> self rot-mat))
|
|
)
|
|
(matrix->quaternion (-> self root quat) (-> self rot-mat))
|
|
)
|
|
|
|
(defbehavior energyhub-set-lava-height energyhub ((arg0 float))
|
|
(let ((v1-0 (-> self alts 2)))
|
|
(when v1-0
|
|
(let ((v1-2 (-> v1-0 extra process)))
|
|
(when v1-2
|
|
(let* ((f0-1 (- 0.0 (-> self palette-val)))
|
|
(f0-2 (if (< 0.0 f0-1)
|
|
(fmin 0.1 f0-1)
|
|
(fmax -0.1 f0-1)
|
|
)
|
|
)
|
|
)
|
|
(+! (-> self palette-val) f0-2)
|
|
)
|
|
(set! (-> *palette-fade-controls* control 2 fade) (-> self palette-val))
|
|
(set! (-> (the-as process-drawable v1-2) root scale x) 1.25)
|
|
(set! (-> (the-as process-drawable v1-2) root scale z) 1.25)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate energyhub-stopped (energyhub)
|
|
:enter (behavior ()
|
|
(set! (-> self rotation-speed target) 0.0)
|
|
(set! (-> self rotation-speed accel) 0.0005)
|
|
(dotimes (gp-0 5)
|
|
(send-event (handle->process (-> self arm gp-0)) 'stop)
|
|
)
|
|
(if (nonzero? (-> self sound))
|
|
(stop! (-> self sound))
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(update! (-> self rotation-speed) 0.0)
|
|
(energyhub-trans)
|
|
(energyhub-set-lava-height -122880.0)
|
|
)
|
|
:code (behavior ()
|
|
(loop
|
|
(suspend)
|
|
(let* ((f30-0 1.0)
|
|
(f28-0 0.25)
|
|
(v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-2 (the-as number (logior #x3f800000 v1-1)))
|
|
(f0-4 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2)))))
|
|
)
|
|
(ja :num! (loop! f0-4))
|
|
)
|
|
)
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
(defstate energyhub-stop (energyhub)
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('flash)
|
|
(set! (-> self palette-val) 1.9921875)
|
|
)
|
|
)
|
|
)
|
|
:enter (behavior ()
|
|
(set! (-> self rotation-speed target) 0.0)
|
|
(set! (-> self rotation-speed accel) 0.0005)
|
|
(let ((a1-0 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-0 from) self)
|
|
(set! (-> a1-0 num-params) 0)
|
|
(set! (-> a1-0 message) 'stop)
|
|
(let ((t9-0 send-event-function)
|
|
(v1-1 (-> self alts 0))
|
|
)
|
|
(t9-0
|
|
(if v1-1
|
|
(-> v1-1 extra process)
|
|
)
|
|
a1-0
|
|
)
|
|
)
|
|
)
|
|
(let ((a1-1 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-1 from) self)
|
|
(set! (-> a1-1 num-params) 0)
|
|
(set! (-> a1-1 message) 'open)
|
|
(let ((t9-1 send-event-function)
|
|
(v1-5 (-> self alts 1))
|
|
)
|
|
(t9-1
|
|
(if v1-5
|
|
(-> v1-5 extra process)
|
|
)
|
|
a1-1
|
|
)
|
|
)
|
|
)
|
|
(close-specific-task! (game-task lavatube-balls) (task-status need-resolution))
|
|
(level-hint-spawn
|
|
(text-id lavatube-balls-resolution)
|
|
"sksp0378"
|
|
(the-as entity #f)
|
|
*entity-pool*
|
|
(game-task none)
|
|
)
|
|
(if (nonzero? (-> self sound))
|
|
(stop! (-> self sound))
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(update! (-> self rotation-speed) 0.0)
|
|
(energyhub-trans)
|
|
(energyhub-set-lava-height -122880.0)
|
|
(if (< (-> self rotation-speed value) 0.3)
|
|
(go energyhub-stopped)
|
|
)
|
|
)
|
|
:code (behavior ()
|
|
(loop
|
|
(suspend)
|
|
(let* ((f30-0 1.0)
|
|
(f28-0 0.25)
|
|
(v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-2 (the-as number (logior #x3f800000 v1-1)))
|
|
(f0-4 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2)))))
|
|
)
|
|
(ja :num! (loop! f0-4))
|
|
)
|
|
)
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
(defstate energyhub-idle (energyhub)
|
|
:event (behavior ((proc process) (argc int) (message symbol) (block event-message-block))
|
|
(case message
|
|
(('flash)
|
|
(set! (-> self palette-val) 1.9921875)
|
|
)
|
|
)
|
|
)
|
|
:trans (behavior ()
|
|
(if (nonzero? (-> self sound))
|
|
(update! (-> self sound))
|
|
)
|
|
(let ((gp-0 0))
|
|
(dotimes (s5-0 5)
|
|
(let* ((s4-0 (handle->process (-> self arm s5-0)))
|
|
(v1-10 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) energyarm))
|
|
(the-as energyarm s4-0)
|
|
)
|
|
)
|
|
)
|
|
(if (and v1-10 (handle->process (-> v1-10 ball)))
|
|
(+! gp-0 1)
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
((zero? gp-0)
|
|
(energyhub-set-lava-height -122880.0)
|
|
(go energyhub-stop)
|
|
)
|
|
((= gp-0 1)
|
|
(set! (-> self rotation-speed target) 1.8)
|
|
(energyhub-set-lava-height -129024.0)
|
|
)
|
|
((= gp-0 2)
|
|
(set! (-> self rotation-speed target) 1.6)
|
|
(energyhub-set-lava-height -135168.0)
|
|
)
|
|
((= gp-0 3)
|
|
(set! (-> self rotation-speed target) 1.4)
|
|
(energyhub-set-lava-height -141312.0)
|
|
)
|
|
((= gp-0 4)
|
|
(set! (-> self rotation-speed target) 1.2)
|
|
(energyhub-set-lava-height -147456.0)
|
|
)
|
|
(else
|
|
(set! (-> self rotation-speed target) 1.0)
|
|
(energyhub-set-lava-height -151552.0)
|
|
)
|
|
)
|
|
)
|
|
(update! (-> self rotation-speed-offset))
|
|
(update! (-> self rotation-speed) (-> self rotation-speed-offset value))
|
|
(energyhub-trans)
|
|
)
|
|
:code (behavior ()
|
|
(loop
|
|
(suspend)
|
|
(let* ((f30-0 1.0)
|
|
(f28-0 0.25)
|
|
(v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256))
|
|
(v1-2 (the-as number (logior #x3f800000 v1-1)))
|
|
(f0-4 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2)))))
|
|
)
|
|
(ja :num! (loop! f0-4))
|
|
)
|
|
)
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
(defmethod init-from-entity! ((this energyhub) (arg0 entity-actor))
|
|
(set! (-> this root) (new 'process 'trsqv))
|
|
(process-drawable-from-entity! this arg0)
|
|
(initialize-skeleton this *energyhub-sg* '())
|
|
(set! (-> this sound) (new 'process 'ambient-sound arg0 (-> this root trans)))
|
|
(let ((s5-1 (entity-actor-count (-> this entity) 'alt-actor)))
|
|
(dotimes (s4-0 (min 3 s5-1))
|
|
(set! (-> this alts s4-0) (entity-actor-lookup (-> this entity) 'alt-actor s4-0))
|
|
)
|
|
)
|
|
(quaternion->matrix (-> this rot-mat-init) (-> this root quat))
|
|
(let ((f30-0 13107.2)
|
|
(s5-2 (new 'stack-no-clear 'vector))
|
|
(s4-1 (new 'stack-no-clear 'matrix))
|
|
)
|
|
(set-vector! s5-2 0.0 2457.6 -24576.0 1.0)
|
|
(matrix-rotate-y! s4-1 f30-0)
|
|
(dotimes (s3-0 5)
|
|
(set! (-> this arm s3-0)
|
|
(ppointer->handle (process-spawn energyarm s5-2 (* (the float s3-0) f30-0) :to this))
|
|
)
|
|
(vector-matrix*! s5-2 s5-2 s4-1)
|
|
)
|
|
)
|
|
(set! (-> this root pause-adjust-distance) 245760.0)
|
|
(set! (-> this y-rotation) 0.0)
|
|
(set! (-> this x-rotation) 0.0)
|
|
(set-params! (-> this rotation-speed-offset) 300 600 0.25)
|
|
(set! (-> this palette-val) 0.0)
|
|
(cond
|
|
((task-closed? (game-task lavatube-balls) (task-status need-resolution))
|
|
(set-params! (-> this rotation-speed) 0.0 0.01 0.1 0.9)
|
|
(go energyhub-stopped)
|
|
)
|
|
(else
|
|
(set-params! (-> this rotation-speed) 1.0 0.01 0.1 0.9)
|
|
(go energyhub-idle)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(deftype energylava (process-drawable)
|
|
()
|
|
(:states
|
|
energylava-idle
|
|
)
|
|
)
|
|
|
|
|
|
(defskelgroup *energylava-sg* energylava 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 0 0 120))
|
|
|
|
(defstate energylava-idle (energylava)
|
|
:code (behavior ()
|
|
(loop
|
|
(ja-no-eval :group! (ja-group) :num! (seek!) :frame-num 0.0)
|
|
(until (ja-done? 0)
|
|
(suspend)
|
|
(ja :num! (seek!))
|
|
)
|
|
)
|
|
)
|
|
:post ja-post
|
|
)
|
|
|
|
(defmethod init-from-entity! ((this energylava) (arg0 entity-actor))
|
|
(set! (-> this root) (new 'process 'trsqv))
|
|
(process-drawable-from-entity! this arg0)
|
|
(initialize-skeleton this *energylava-sg* '())
|
|
(go energylava-idle)
|
|
(none)
|
|
)
|