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
758 lines
39 KiB
Common Lisp
758 lines
39 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: dark-crystal.gc
|
|
;; name in dgo: dark-crystal
|
|
;; dgos: L1, MAI, MAINCAVE
|
|
|
|
(define-extern *dark-crystal-sg* skeleton-group)
|
|
(define-extern *dark-crystal-explode-sg* skeleton-group)
|
|
|
|
(declare-type dark-crystal process-drawable)
|
|
|
|
(define-extern dark-crystal-spawn-fuel-cell (state dark-crystal)) ;; unknown type
|
|
(define-extern dark-crystal-idle (state dark-crystal)) ;; unknown type
|
|
(define-extern dark-crystal-explode (state dark-crystal)) ;; unknown type
|
|
(define-extern dark-crystal-activate (state dark-crystal)) ;; unknown type
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(deftype dark-crystal (process-drawable)
|
|
((root-override collide-shape :offset 112)
|
|
(crystal-num int32 :offset-assert 176)
|
|
(underwater? symbol :offset-assert 180)
|
|
(explode-danger-radius float :offset-assert 184)
|
|
(lit-color-mult vector :inline :offset-assert 192)
|
|
(lit-color-emissive vector :inline :offset-assert 208)
|
|
(unlit-color-mult vector :inline :offset-assert 224)
|
|
(unlit-color-emissive vector :inline :offset-assert 240)
|
|
)
|
|
:heap-base #x90
|
|
:method-count-assert 22
|
|
:size-assert #x100
|
|
:flag-assert #x1600900100
|
|
(:methods
|
|
(dummy-20 (_type_) none 20)
|
|
(dummy-21 (_type_) symbol 21)
|
|
)
|
|
)
|
|
|
|
|
|
(defskelgroup *dark-crystal-sg* dark-crystal
|
|
0
|
|
-1
|
|
((1 (meters 999999)))
|
|
:bounds (static-spherem 0 3.4 0 3.8)
|
|
:longest-edge (meters 0)
|
|
)
|
|
|
|
(defskelgroup *dark-crystal-explode-sg* dark-crystal
|
|
3
|
|
-1
|
|
((4 (meters 999999)))
|
|
:bounds (static-spherem 0 -15 0 50)
|
|
:longest-edge (meters 0)
|
|
)
|
|
|
|
(define
|
|
*dark-crystal-flash-delays*
|
|
(the-as (array int32)
|
|
(new 'static 'boxed-array :type int32 :length 9 :allocated-length 9 #xb4 #x96 #x78 90 60 30 15 7 3)
|
|
)
|
|
)
|
|
|
|
(define
|
|
*dark-crystal-exploder-params*
|
|
(new 'static 'joint-exploder-static-params
|
|
:joints
|
|
(new
|
|
'static
|
|
'boxed-array
|
|
:type joint-exploder-static-joint-params :length 15 :allocated-length 15
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 3 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1)
|
|
(new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-group-id-table* 322)
|
|
(new 'static 'sparticle-launch-group
|
|
:length 69
|
|
:duration #x4b
|
|
:linger-duration #x5dc
|
|
:flags (sp-group-flag use-local-clock)
|
|
:name "group-dark-crystal-gnd-explode"
|
|
:launcher
|
|
(new 'static 'inline-array sparticle-group-item 69
|
|
(sp-item 2153 :fade-after (meters 100.0) :period 600 :length 5 :binding 296)
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 296 :flags (start-dead launch-asap) :binding 297)
|
|
(sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead))
|
|
(sp-item 2154 :period 600 :length 5)
|
|
(sp-item 2155 :period 600 :length 40)
|
|
(sp-item 2156 :period 600 :length 20)
|
|
(sp-item 2157 :period 600 :length 20)
|
|
)
|
|
:bounds (new 'static 'sphere :w 65536.0)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2153) (new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 16
|
|
(sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
|
|
(sp-flt spt-num 32.0)
|
|
(sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0)
|
|
(sp-rnd-flt spt-y (meters 1.0) (meters 2.0) 1.0)
|
|
(sp-rnd-flt spt-z -8192.0 16384.0 1.0)
|
|
(sp-flt spt-scale-x (meters 0.1))
|
|
(sp-copy-from-other spt-scale-y -4)
|
|
(sp-flt spt-a 0.0)
|
|
(sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.026666667) 1.0)
|
|
(sp-flt spt-accel-y -1.3653333)
|
|
(sp-flt spt-friction 0.94)
|
|
(sp-int spt-timer 240)
|
|
(sp-cpuinfo-flags bit3)
|
|
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0)
|
|
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2155) (new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 22
|
|
(sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
|
|
(sp-flt spt-num 24.0)
|
|
(sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0)
|
|
(sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0)
|
|
(sp-copy-from-other spt-scale-y -4)
|
|
(sp-rnd-flt spt-r 128.0 128.0 1.0)
|
|
(sp-rnd-flt spt-g 0.0 32.0 1.0)
|
|
(sp-rnd-flt spt-b 128.0 64.0 1.0)
|
|
(sp-rnd-flt spt-a 32.0 96.0 1.0)
|
|
(sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.16) 1.0)
|
|
(sp-flt spt-scalevel-x (meters -0.0026666666))
|
|
(sp-copy-from-other spt-scalevel-y -4)
|
|
(sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0)
|
|
(sp-flt spt-friction 0.9)
|
|
(sp-int spt-timer 300)
|
|
(sp-cpuinfo-flags bit2 bit14)
|
|
(sp-int-plain-rnd spt-next-time 30 89 1)
|
|
(sp-launcher-by-id spt-next-launcher 2158)
|
|
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0)
|
|
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
|
|
(sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2158)
|
|
(new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.0666667) (sp-end))
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2157) (new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 15
|
|
(sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
|
|
(sp-flt spt-num 12.0)
|
|
(sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0)
|
|
(sp-flt spt-scale-x (meters 0.3))
|
|
(sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0)
|
|
(sp-flt spt-scale-y (meters 12.0))
|
|
(sp-rnd-flt spt-r 64.0 192.0 1.0)
|
|
(sp-rnd-flt spt-g 0.0 32.0 1.0)
|
|
(sp-rnd-flt spt-b 128.0 64.0 1.0)
|
|
(sp-rnd-flt spt-a 32.0 64.0 1.0)
|
|
(sp-flt spt-scalevel-y (meters 1.04))
|
|
(sp-flt spt-fade-a -1.6)
|
|
(sp-int spt-timer 60)
|
|
(sp-cpuinfo-flags bit2 bit3 bit14)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2154) (new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 13
|
|
(sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
|
|
(sp-flt spt-num 1.0)
|
|
(sp-flt spt-y (meters 2.0))
|
|
(sp-flt spt-scale-x (meters 24.0))
|
|
(sp-copy-from-other spt-scale-y -4)
|
|
(sp-rnd-flt spt-r 192.0 64.0 1.0)
|
|
(sp-rnd-flt spt-g 0.0 32.0 1.0)
|
|
(sp-rnd-flt spt-b 128.0 64.0 1.0)
|
|
(sp-flt spt-a 128.0)
|
|
(sp-flt spt-fade-a -2.3272727)
|
|
(sp-int spt-timer 54)
|
|
(sp-cpuinfo-flags bit2 bit3 bit14)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2156)
|
|
(new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 23
|
|
(sp-tex spt-texture (new 'static 'texture-id :page #x2))
|
|
(sp-flt spt-num 16.0)
|
|
(sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0)
|
|
(sp-rnd-flt spt-scale-x (meters 3.0) (meters 1.5) 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 0.0 96.0 1.0)
|
|
(sp-rnd-flt spt-g 0.0 32.0 1.0)
|
|
(sp-rnd-flt spt-b 64.0 32.0 1.0)
|
|
(sp-rnd-flt spt-a 64.0 64.0 1.0)
|
|
(sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0)
|
|
(sp-flt spt-scalevel-x (meters 0.02))
|
|
(sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0)
|
|
(sp-copy-from-other spt-scalevel-y -4)
|
|
(sp-flt spt-fade-a -0.28444445)
|
|
(sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0)
|
|
(sp-flt spt-friction 0.8)
|
|
(sp-int spt-timer 510)
|
|
(sp-cpuinfo-flags bit2 bit14)
|
|
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0)
|
|
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
|
|
(sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 4.0) 1.0)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-group-id-table* 323) (new 'static 'sparticle-launch-group
|
|
:length 6
|
|
:duration #x4b
|
|
:linger-duration #x2ee0
|
|
:flags (sp-group-flag use-local-clock)
|
|
:name "group-dark-crystal-water-explode"
|
|
:launcher
|
|
(new 'static 'inline-array sparticle-group-item 6
|
|
(sp-item 2159 :period 600 :length 5)
|
|
(sp-item 2160 :period 600 :length 40)
|
|
(sp-item 2161 :period 600 :length 20)
|
|
(sp-item 2162 :period 600 :length 20)
|
|
(sp-item 2163 :period 600 :length 75)
|
|
(sp-item 2164 :period 600 :length 75)
|
|
)
|
|
:bounds (new 'static 'sphere :w 65536.0)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2160) (new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 23
|
|
(sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
|
|
(sp-flt spt-num 24.0)
|
|
(sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0)
|
|
(sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0)
|
|
(sp-copy-from-other spt-scale-y -4)
|
|
(sp-rnd-flt spt-r 128.0 128.0 1.0)
|
|
(sp-rnd-flt spt-g 128.0 32.0 1.0)
|
|
(sp-rnd-flt spt-b 128.0 64.0 1.0)
|
|
(sp-rnd-flt spt-a 32.0 96.0 1.0)
|
|
(sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.16) 1.0)
|
|
(sp-flt spt-scalevel-x (meters -0.0026666666))
|
|
(sp-copy-from-other spt-scalevel-y -4)
|
|
(sp-flt spt-fade-g -0.4)
|
|
(sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0)
|
|
(sp-flt spt-friction 0.9)
|
|
(sp-int spt-timer 300)
|
|
(sp-cpuinfo-flags bit2 bit14)
|
|
(sp-int-plain-rnd spt-next-time 30 89 1)
|
|
(sp-launcher-by-id spt-next-launcher 2158)
|
|
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0)
|
|
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
|
|
(sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2162) (new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 17
|
|
(sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2))
|
|
(sp-flt spt-num 12.0)
|
|
(sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0)
|
|
(sp-flt spt-scale-x (meters 0.3))
|
|
(sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0)
|
|
(sp-flt spt-scale-y (meters 12.0))
|
|
(sp-rnd-flt spt-r 128.0 128.0 1.0)
|
|
(sp-rnd-flt spt-g 128.0 32.0 1.0)
|
|
(sp-rnd-flt spt-b 128.0 64.0 1.0)
|
|
(sp-rnd-flt spt-a 32.0 64.0 1.0)
|
|
(sp-flt spt-scalevel-y (meters 1.04))
|
|
(sp-flt spt-fade-r -1.0666667)
|
|
(sp-flt spt-fade-g -2.1333334)
|
|
(sp-flt spt-fade-a -1.6)
|
|
(sp-int spt-timer 60)
|
|
(sp-cpuinfo-flags bit2 bit3 bit14)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2159) (new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 14
|
|
(sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2))
|
|
(sp-flt spt-num 1.0)
|
|
(sp-flt spt-y (meters 2.0))
|
|
(sp-flt spt-scale-x (meters 24.0))
|
|
(sp-copy-from-other spt-scale-y -4)
|
|
(sp-rnd-flt spt-r 192.0 64.0 1.0)
|
|
(sp-rnd-flt spt-g 128.0 32.0 1.0)
|
|
(sp-rnd-flt spt-b 128.0 64.0 1.0)
|
|
(sp-flt spt-a 128.0)
|
|
(sp-flt spt-fade-g -2.0)
|
|
(sp-flt spt-fade-a -2.3272727)
|
|
(sp-int spt-timer 54)
|
|
(sp-cpuinfo-flags bit2 bit3 bit14)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2161)
|
|
(new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 26
|
|
(sp-tex spt-texture (new 'static 'texture-id :page #x2))
|
|
(sp-flt spt-num 16.0)
|
|
(sp-rnd-flt spt-y (meters 1.0) (meters 3.0) 1.0)
|
|
(sp-rnd-flt spt-scale-x (meters 3.0) (meters 1.5) 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 128.0 96.0 1.0)
|
|
(sp-rnd-flt spt-g 128.0 32.0 1.0)
|
|
(sp-rnd-flt spt-b 128.0 32.0 1.0)
|
|
(sp-rnd-flt spt-a 64.0 64.0 1.0)
|
|
(sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0)
|
|
(sp-flt spt-scalevel-x (meters 0.02))
|
|
(sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0)
|
|
(sp-copy-from-other spt-scalevel-y -4)
|
|
(sp-flt spt-fade-r -0.2)
|
|
(sp-flt spt-fade-g -0.2)
|
|
(sp-flt spt-fade-b 0.0)
|
|
(sp-flt spt-fade-a -0.28444445)
|
|
(sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0)
|
|
(sp-flt spt-friction 0.8)
|
|
(sp-int spt-timer 510)
|
|
(sp-cpuinfo-flags bit2 bit14)
|
|
(sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 120.0) 1.0)
|
|
(sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0)
|
|
(sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 4.0) 1.0)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2163) (new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 21
|
|
(sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2))
|
|
(sp-flt spt-num 32.0)
|
|
(sp-rnd-flt spt-x (meters -4.0) (meters 8.0) 1.0)
|
|
(sp-rnd-flt spt-y (meters 1.0) (meters 6.0) 1.0)
|
|
(sp-rnd-flt spt-z -16384.0 32768.0 1.0)
|
|
(sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.05) 1.0)
|
|
(sp-rnd-flt spt-scale-y (meters 0.125) (meters 0.025) 1.0)
|
|
(sp-flt spt-r 255.0)
|
|
(sp-flt spt-g 255.0)
|
|
(sp-flt spt-b 255.0)
|
|
(sp-flt spt-a 0.0)
|
|
(sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.006666667) 1.0)
|
|
(sp-flt spt-fade-a 0.8)
|
|
(sp-int spt-timer 12000)
|
|
(sp-cpuinfo-flags bit2 bit3 bit14)
|
|
(sp-flt spt-userdata 143360.0)
|
|
(sp-func spt-func 'check-water-level-above-and-die)
|
|
(sp-int-plain-rnd spt-next-time 30 29 1)
|
|
(sp-launcher-by-id spt-next-launcher 2165)
|
|
(sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2165)
|
|
(new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a 0.0) (sp-end))
|
|
)
|
|
)
|
|
|
|
(set! (-> *part-id-table* 2164) (new 'static 'sparticle-launcher
|
|
:init-specs
|
|
(new 'static 'inline-array sp-field-init-spec 21
|
|
(sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2))
|
|
(sp-flt spt-num 4.0)
|
|
(sp-rnd-flt spt-x (meters -4.0) (meters 8.0) 1.0)
|
|
(sp-rnd-flt spt-y (meters 1.0) (meters 6.0) 1.0)
|
|
(sp-rnd-flt spt-z -16384.0 32768.0 1.0)
|
|
(sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.15) 1.0)
|
|
(sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0)
|
|
(sp-flt spt-r 255.0)
|
|
(sp-flt spt-g 255.0)
|
|
(sp-flt spt-b 255.0)
|
|
(sp-flt spt-a 0.0)
|
|
(sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.006666667) 1.0)
|
|
(sp-flt spt-fade-a 0.8)
|
|
(sp-int spt-timer 12000)
|
|
(sp-cpuinfo-flags bit2 bit3 bit14)
|
|
(sp-flt spt-userdata 143360.0)
|
|
(sp-func spt-func 'check-water-level-above-and-die)
|
|
(sp-int-plain-rnd spt-next-time 30 29 1)
|
|
(sp-launcher-by-id spt-next-launcher 2165)
|
|
(sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0)
|
|
(sp-end)
|
|
)
|
|
)
|
|
)
|
|
|
|
(defstate dark-crystal-idle (dark-crystal)
|
|
:event
|
|
(behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block))
|
|
(case arg2
|
|
(('touch 'attack)
|
|
(if (= (-> arg0 type) target)
|
|
(level-hint-spawn
|
|
(game-text-id dark-crystal-run-away)
|
|
"sksp0334"
|
|
(the-as entity #f)
|
|
*entity-pool*
|
|
(game-task none)
|
|
)
|
|
)
|
|
(close-specific-task! (game-task cave-dark-crystals) (task-status need-hint))
|
|
(go dark-crystal-activate)
|
|
)
|
|
)
|
|
)
|
|
:code
|
|
(behavior ()
|
|
(while #t
|
|
(logior! (-> self mask) (process-mask sleep-code))
|
|
(suspend)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defstate dark-crystal-activate (dark-crystal)
|
|
:code
|
|
(behavior ()
|
|
(logclear! (-> self mask) (process-mask actor-pause))
|
|
(dotimes (gp-0 (-> *dark-crystal-flash-delays* length))
|
|
(sound-play-by-name (static-sound-name "warning") (new-sound-id) 1024 0 0 1 #t)
|
|
(set! (-> self draw color-mult quad) (-> self lit-color-mult quad))
|
|
(set! (-> self draw color-emissive quad) (-> self lit-color-emissive quad))
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30)
|
|
(suspend)
|
|
)
|
|
(set! (-> self draw color-mult quad) (-> self unlit-color-mult quad))
|
|
(set! (-> self draw color-emissive quad) (-> self unlit-color-emissive quad))
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(let ((s5-1 (-> *dark-crystal-flash-delays* gp-0)))
|
|
(until (>= (- (-> *display* base-frame-counter) (-> self state-time)) s5-1)
|
|
(suspend)
|
|
)
|
|
)
|
|
)
|
|
(go dark-crystal-explode)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defstate dark-crystal-explode (dark-crystal)
|
|
:code
|
|
(behavior ()
|
|
(set! (-> self state-time) (-> *display* base-frame-counter))
|
|
(logclear! (-> self mask) (process-mask actor-pause))
|
|
(clear-collide-with-as (-> self root-override))
|
|
(let ((gp-0 (new 'stack 'joint-exploder-tuning 0)))
|
|
(when (-> self underwater?)
|
|
(set! (-> gp-0 duration) (the-as uint 1200))
|
|
(set! (-> gp-0 gravity) -20480.0)
|
|
(set! (-> gp-0 rot-speed) 4.2)
|
|
(set-vector! (-> gp-0 fountain-rand-transv-lo) -40960.0 20480.0 -40960.0 1.0)
|
|
(set-vector! (-> gp-0 fountain-rand-transv-hi) 40960.0 49152.0 40960.0 1.0)
|
|
)
|
|
(let ((s5-0 (get-process *default-dead-pool* joint-exploder #x4000)))
|
|
(when s5-0
|
|
(let ((t9-3 (method-of-type joint-exploder activate)))
|
|
(t9-3 (the-as joint-exploder s5-0) self 'joint-exploder (the-as pointer #x70004000))
|
|
)
|
|
(run-now-in-process
|
|
s5-0
|
|
joint-exploder-init-by-other
|
|
*dark-crystal-explode-sg*
|
|
5
|
|
gp-0
|
|
*dark-crystal-exploder-params*
|
|
)
|
|
(-> s5-0 ppointer)
|
|
)
|
|
)
|
|
)
|
|
(activate! *camera-smush-control* 819.2 37 210 1.0 0.995)
|
|
(let ((gp-1 (dummy-21 self)))
|
|
(suspend)
|
|
(ja-channel-set! 0)
|
|
(ja-post)
|
|
(logior! (-> self draw status) 2)
|
|
(dummy-20 self)
|
|
(if (-> self underwater?)
|
|
(sound-play-by-name (static-sound-name "water-explosion") (new-sound-id) 1024 0 0 1 #t)
|
|
(sound-play-by-name (static-sound-name "crystal-explode") (new-sound-id) 1024 0 0 1 #t)
|
|
)
|
|
(let ((s5-3 (get-process *default-dead-pool* part-tracker #x4000)))
|
|
(when s5-3
|
|
(let ((t9-15 (method-of-type part-tracker activate)))
|
|
(t9-15 (the-as part-tracker s5-3) *entity-pool* 'part-tracker (the-as pointer #x70004000))
|
|
)
|
|
(run-now-in-process
|
|
s5-3
|
|
part-tracker-init
|
|
(if (-> self underwater?)
|
|
(-> *part-group-id-table* 323)
|
|
(-> *part-group-id-table* 322)
|
|
)
|
|
-1
|
|
#f
|
|
#f
|
|
#f
|
|
(-> self root-override trans)
|
|
)
|
|
(-> s5-3 ppointer)
|
|
)
|
|
)
|
|
(let ((s5-4 (-> *display* base-frame-counter)))
|
|
(until (>= (- (-> *display* base-frame-counter) s5-4) 75)
|
|
(suspend)
|
|
)
|
|
)
|
|
(if gp-1
|
|
(go dark-crystal-spawn-fuel-cell)
|
|
)
|
|
)
|
|
(dummy-18 self)
|
|
(until (not (-> self child))
|
|
(suspend)
|
|
)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defstate dark-crystal-spawn-fuel-cell (dark-crystal)
|
|
:event
|
|
(the-as
|
|
(function process int symbol event-message-block object :behavior dark-crystal)
|
|
process-drawable-fuel-cell-handler
|
|
)
|
|
:code
|
|
(behavior ()
|
|
(logclear! (-> self mask) (process-mask actor-pause))
|
|
(clear-collide-with-as (-> self root-override))
|
|
(level-hint-spawn
|
|
(game-text-id dark-crystal-last-one)
|
|
"sksp0327"
|
|
(the-as entity #f)
|
|
*entity-pool*
|
|
(game-task none)
|
|
)
|
|
(ja-channel-set! 0)
|
|
(ja-post)
|
|
(logior! (-> self draw status) 2)
|
|
(if (not (task-complete? *game-info* (-> self entity extra perm task)))
|
|
(birth-pickup-at-point
|
|
(-> self root-override trans)
|
|
(pickup-type fuel-cell)
|
|
(the float (-> self entity extra perm task))
|
|
#t
|
|
self
|
|
(the-as fact-info #f)
|
|
)
|
|
)
|
|
(suspend)
|
|
(until (not (-> self child))
|
|
(suspend)
|
|
)
|
|
(aybabtu 2)
|
|
(dummy-18 self)
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defmethod dummy-20 dark-crystal ((obj dark-crystal))
|
|
(when *target*
|
|
(let ((s5-0 (new 'stack-no-clear 'vector))
|
|
(s3-0 (new 'stack-no-clear 'vector))
|
|
(s4-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(set! (-> s5-0 quad) (-> obj root-override trans quad))
|
|
(set! (-> s5-0 y) (+ 6144.0 (-> s5-0 y)))
|
|
(set! (-> s3-0 quad) (-> (target-pos 0) quad))
|
|
(set! (-> s3-0 y) (+ 6144.0 (-> s3-0 y)))
|
|
(when (>= (-> obj explode-danger-radius) (vector-vector-distance s5-0 s3-0))
|
|
(vector-! s4-0 s3-0 s5-0)
|
|
(let ((t2-0 (new 'stack-no-clear 'collide-tri-result)))
|
|
(if (< (dummy-10 *collide-cache* s5-0 s4-0 819.2 1 obj t2-0 1) 0.0)
|
|
(send-event *target* 'attack #f (new 'static 'attack-info))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defmethod dummy-21 dark-crystal ((obj dark-crystal))
|
|
(let ((s5-0 #f))
|
|
(when (nonzero? (-> obj crystal-num))
|
|
(let* ((s4-0 (get-task-control (game-task cave-dark-crystals)))
|
|
(s3-0 (logior (get-reminder s4-0 3) (ash 1 (-> obj crystal-num))))
|
|
)
|
|
(save-reminder s4-0 s3-0 3)
|
|
(when (= s3-0 62)
|
|
(set! s5-0 #t)
|
|
(process-entity-status! obj (entity-perm-status complete) #t)
|
|
)
|
|
)
|
|
)
|
|
s5-0
|
|
)
|
|
)
|
|
|
|
(defmethod init-from-entity! dark-crystal ((obj dark-crystal) (arg0 entity-actor))
|
|
(set-vector! (-> obj unlit-color-mult) 0.5 0.5 0.5 1.0)
|
|
(set-vector! (-> obj unlit-color-emissive) 0.0 0.0 0.0 0.0)
|
|
(set-vector! (-> obj lit-color-mult) 1.0 1.0 1.0 1.0)
|
|
(set-vector! (-> obj lit-color-emissive) 1.0 1.0 1.0 0.0)
|
|
(set! (-> obj mask) (logior (process-mask enemy) (-> obj mask)))
|
|
(let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player))))
|
|
(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) (the-as uint 512))
|
|
(set! (-> s3-0 collide-with) (the-as uint 16))
|
|
(set! (-> s3-0 prim-core action) (the-as uint 1))
|
|
(set! (-> s3-0 prim-core offense) 4)
|
|
(set! (-> s3-0 transform-index) 0)
|
|
(set-vector! (-> s3-0 local-sphere) 0.0 6963.2 0.0 15564.8)
|
|
(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! (-> obj root-override) s4-0)
|
|
)
|
|
(process-drawable-from-entity! obj arg0)
|
|
(initialize-skeleton obj *dark-crystal-sg* '())
|
|
(set! (-> obj mask) (logior (process-mask attackable) (-> obj mask)))
|
|
(set! (-> obj draw color-mult quad) (-> obj unlit-color-mult quad))
|
|
(set! (-> obj draw color-emissive quad) (-> obj unlit-color-emissive quad))
|
|
(set! (-> obj underwater?) (= (res-lump-value arg0 'mode uint128) 1))
|
|
(set! (-> obj explode-danger-radius) (res-lump-float arg0 'extra-radius :default 28672.0))
|
|
(set! (-> obj crystal-num) (res-lump-value arg0 'extra-id int))
|
|
(set-vector! (-> obj root-override scale) 2.0 2.0 2.0 1.0)
|
|
(ja-channel-push! 1 0)
|
|
(let ((s5-1 (-> obj skel root-channel 0)))
|
|
(joint-control-channel-group-eval!
|
|
s5-1
|
|
(the-as art-joint-anim (-> obj draw art-group data 2))
|
|
num-func-identity
|
|
)
|
|
(set! (-> s5-1 frame-num) 0.0)
|
|
)
|
|
(ja-post)
|
|
(dummy-47 (-> obj root-override))
|
|
(if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete)))
|
|
(go dark-crystal-spawn-fuel-cell)
|
|
(go dark-crystal-idle)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
|
|
|
|
|