mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 21:27:52 -04:00
cd68cb671e
Major change to how `deftype` shows up in our code: - the decompiler will no longer emit the `offset-assert`, `method-count-assert`, `size-assert` and `flag-assert` parameters. There are extremely few cases where having this in the decompiled code is helpful, as the types there come from `all-types` which already has those parameters. This also doesn't break type consistency because: - the asserts aren't compared. - the first step of the test uses `all-types`, which has the asserts, which will throw an error if they're bad. - the decompiler won't emit the `heap-base` parameter unless necessary now. - the decompiler will try its hardest to turn a fixed-offset field into an `overlay-at` field. It falls back to the old offset if all else fails. - `overlay-at` now supports field "dereferencing" to specify the offset that's within a field that's a structure, e.g.: ```lisp (deftype foobar (structure) ((vec vector :inline) (flags int32 :overlay-at (-> vec w)) ) ) ``` in this structure, the offset of `flags` will be 12 because that is the final offset of `vec`'s `w` field within this structure. - **removed ID from all method declarations.** IDs are only ever automatically assigned now. Fixes #3068. - added an `:overlay` parameter to method declarations, in order to declare a new method that goes on top of a previously-defined method. Syntax is `:overlay <method-name>`. Please do not ever use this. - added `state-methods` list parameter. This lets you quickly specify a list of states to be put in the method table. Same syntax as the `states` list parameter. The decompiler will try to put as many states in this as it can without messing with the method ID order. Also changes `defmethod` to make the first type definition (before the arguments) optional. The type can now be inferred from the first argument. Fixes #3093. --------- Co-authored-by: Hat Kid <6624576+Hat-Kid@users.noreply.github.com>
1556 lines
66 KiB
Common Lisp
1556 lines
66 KiB
Common Lisp
;;-*-Lisp-*-
|
|
(in-package goal)
|
|
|
|
;; name: water.gc
|
|
;; name in dgo: water
|
|
;; dgos: ENGINE, GAME
|
|
|
|
;; DECOMP BEGINS
|
|
|
|
(defun check-water-level-drop ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector))
|
|
(when (and (< (-> arg2 y) (-> arg1 user-float)) (< (-> arg1 vel-sxvel y) 0.0))
|
|
(let ((gp-0 (new 'stack-no-clear 'vector)))
|
|
(sp-kill-particle arg0 arg1)
|
|
(set-vector! gp-0 (-> arg2 x) (-> arg1 user-float) (-> arg2 z) 1.0)
|
|
(sound-play "water-drop" :position gp-0)
|
|
(launch-particles :system *sp-particle-system-3d* (-> *part-id-table* 501) gp-0)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch symbol vs none.
|
|
(defun check-water-level-drop-and-die ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector))
|
|
(if (and (< (-> arg2 y) (-> arg1 user-float)) (< (-> arg1 vel-sxvel y) 0.0))
|
|
(sp-kill-particle arg0 arg1)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defun check-water-level-drop-and-die-motion ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector))
|
|
(if (and (< (-> arg2 y) (-> arg1 user-float)) (< (-> arg1 vel-sxvel y) 0.0))
|
|
(sp-kill-particle arg0 arg1)
|
|
)
|
|
(sparticle-motion-blur arg0 arg1 arg2)
|
|
(none)
|
|
)
|
|
|
|
;; WARN: Return type mismatch symbol vs none.
|
|
(defun check-water-level-above-and-die ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector))
|
|
(if (or (>= (-> arg2 y) (-> arg1 user-float)) (and *target* (>= (-> arg2 y) (-> *target* water height))))
|
|
(sp-kill-particle arg0 arg1)
|
|
)
|
|
(none)
|
|
)
|
|
|
|
(defpart 502
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x21 :page #xc))
|
|
(:num 9.0)
|
|
(:x (meters -0.25) (meters 0.5))
|
|
(:y (meters -0.05) (meters 0.1))
|
|
(:z (meters -0.25) (meters 0.5))
|
|
(:scale-x (meters 0.1) (meters 0.1))
|
|
(:scale-y (meters 0.05) (meters 0.05))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 24.0 40.0)
|
|
(:vel-y (meters 0) (meters 0.006666667))
|
|
(:accel-y (meters 0.00016666666) (meters 0.00016666666))
|
|
(:friction 0.96)
|
|
(:timer (seconds 5))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
|
|
(:userdata 0.0)
|
|
(:func 'check-water-level-above-and-die)
|
|
(:conerot-x (degrees 90))
|
|
(:conerot-y (degrees 0) (degrees 360))
|
|
)
|
|
)
|
|
|
|
(defpart 503
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x21 :page #xc))
|
|
(:num 0.1)
|
|
(:x (meters -0.25) (meters 0.5))
|
|
(:y (meters 0.15))
|
|
(:z (meters -0.25) (meters 0.5))
|
|
(:scale-x (meters 0.3) (meters 0.1))
|
|
(:scale-y (meters 0.15) (meters 0.05))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 40.0 24.0)
|
|
(:vel-y (meters 0) (meters 0.006666667))
|
|
(:accel-y (meters 0.00033333333))
|
|
(:friction 0.96)
|
|
(:timer (seconds 5))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
|
|
(:userdata 0.0)
|
|
(:func 'check-water-level-above-and-die)
|
|
(:conerot-x (degrees 90))
|
|
(:conerot-y (degrees 0) (degrees 360))
|
|
)
|
|
)
|
|
|
|
(defpart 504
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x2c :page #xc))
|
|
(:num 0.05)
|
|
(:scale-x (meters 1.6) (meters 0.8))
|
|
(:rot-y (degrees 0) (degrees 3600))
|
|
(:scale-y (meters 1.6) (meters 0.8))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 32.0 16.0)
|
|
(:scalevel-x (meters 0.004) (meters 0.0037333334))
|
|
(:scalevel-y (meters 0.004) (meters 0.0037333334))
|
|
(:timer (seconds 2.667))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 left-multiply-quat))
|
|
(:next-time (seconds 0.5) (seconds 0.997))
|
|
(:next-launcher 505)
|
|
)
|
|
)
|
|
|
|
(defpart 506
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x2e :page #xc))
|
|
(:num 0.06)
|
|
(:x (meters 10))
|
|
(:scale-x (meters 0.75) (meters 1.5))
|
|
(:rot-y (degrees 0))
|
|
(:scale-y (meters 0.75) (meters 1.5))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 0.0)
|
|
(:vel-x (meters 0.01) (meters 0.006666667))
|
|
(:scalevel-x (meters 0.0033333334) (meters 0.004333333))
|
|
(:scalevel-y (meters 0.0033333334) (meters 0.004333333))
|
|
(:fade-a 0.7111111)
|
|
(:friction 0.94)
|
|
(:timer (seconds 2))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 left-multiply-quat))
|
|
(:next-time (seconds 0.3))
|
|
(:next-launcher 507)
|
|
(:rotate-y (degrees 0))
|
|
)
|
|
)
|
|
|
|
(defpart 507
|
|
:init-specs ((:fade-a 0.0) (:next-time (seconds 0.3) (seconds 0.397)) (:next-launcher 508))
|
|
)
|
|
|
|
(defpart 508
|
|
:init-specs ((:fade-a -0.21333334))
|
|
)
|
|
|
|
(defpart 509
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x33 :page #xc))
|
|
(:num 0.05 0.4)
|
|
(:x (meters -0.75) (meters 1.5))
|
|
(:z (meters -0.75) (meters 1.5))
|
|
(:scale-x (meters 0.2) (meters 0.7))
|
|
(:rot-y (degrees 0) (degrees 3600))
|
|
(:scale-y :copy scale-x)
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 0.0)
|
|
(:scalevel-x (meters 0.0016666667) (meters 0.003))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-a 0.42666668)
|
|
(:timer (seconds 2))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 left-multiply-quat))
|
|
(:next-time (seconds 0.5))
|
|
(:next-launcher 510)
|
|
(:rotate-y (degrees 0))
|
|
)
|
|
)
|
|
|
|
(defpart 510
|
|
:init-specs ((:fade-a 0.0) (:next-time (seconds 1.2)) (:next-launcher 511))
|
|
)
|
|
|
|
(defpart 511
|
|
:init-specs ((:fade-a -0.7111111))
|
|
)
|
|
|
|
(defpartgroup group-part-water-splash
|
|
:id 121
|
|
:duration (seconds 3)
|
|
:flags (use-local-clock)
|
|
:bounds (static-bspherem 0 -12 0 14)
|
|
:parts ((sp-item 514 :flags (is-3d) :period (seconds 3) :length (seconds 0.21))
|
|
(sp-item 515 :period (seconds 3) :length (seconds 0.05))
|
|
(sp-item 516 :flags (is-3d) :period (seconds 3) :length (seconds 0.05))
|
|
(sp-item 517 :period (seconds 3) :length (seconds 0.05) :binding 512)
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 518 :flags (is-3d) :period (seconds 3) :length (seconds 0.05) :offset 60)
|
|
(sp-item 519 :flags (is-3d) :period (seconds 3) :length (seconds 0.2) :offset 60)
|
|
(sp-item 520 :period (seconds 3) :length (seconds 0.035) :offset 60 :binding 513)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 513 :flags (start-dead) :period (seconds 3) :length (seconds 0.4) :offset 60)
|
|
(sp-item 521 :period (seconds 3) :length (seconds 0.017))
|
|
(sp-item 521 :period (seconds 3) :length (seconds 0.05))
|
|
(sp-item 521 :period (seconds 3) :length (seconds 0.135))
|
|
(sp-item 522 :flags (launch-asap) :period (seconds 3) :length (seconds 0.017))
|
|
)
|
|
)
|
|
|
|
(defpartgroup group-part-water-splash-small
|
|
:id 122
|
|
:duration (seconds 3)
|
|
:flags (use-local-clock)
|
|
:bounds (static-bspherem 0 -12 0 14)
|
|
:parts ((sp-item 514 :flags (is-3d) :period (seconds 3) :length (seconds 0.21))
|
|
(sp-item 515 :period (seconds 3) :length (seconds 0.05))
|
|
(sp-item 516 :flags (is-3d) :period (seconds 3) :length (seconds 0.05))
|
|
(sp-item 517 :period (seconds 3) :length (seconds 0.035) :binding 512)
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
(sp-item 512 :flags (start-dead) :period (seconds 3) :length (seconds 0.4))
|
|
)
|
|
)
|
|
|
|
(defpart 512
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x21 :page #xc))
|
|
(:num 0.2)
|
|
(:x (meters -0.2) (meters 0.4))
|
|
(:y (meters -0.2) (meters 0.4))
|
|
(:scale-x (meters 0.05) (meters 0.15))
|
|
(:scale-y :copy scale-x)
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 40.0 24.0)
|
|
(:scalevel-x (meters 0.000033333334))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:accel-y (meters -0.00040000002) (meters -0.00020000001))
|
|
(:timer (seconds 1.5))
|
|
(:flags (sp-cpuinfo-flag-3))
|
|
(:userdata 0.0)
|
|
(:func 'check-water-level-drop-and-die)
|
|
)
|
|
)
|
|
|
|
(defpart 513
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x21 :page #xc))
|
|
(:num 0.2)
|
|
(:x (meters -0.2) (meters 0.4))
|
|
(:y (meters -0.2) (meters 0.4))
|
|
(:scale-x (meters 0.05) (meters 0.15))
|
|
(:scale-y :copy scale-x)
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 40.0 24.0)
|
|
(:scalevel-x (meters 0.000033333334))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:accel-y (meters -0.00040000002) (meters -0.00020000001))
|
|
(:timer (seconds 1.5))
|
|
(:flags (sp-cpuinfo-flag-3))
|
|
(:userdata 0.0)
|
|
(:func 'check-water-level-drop-and-die)
|
|
)
|
|
)
|
|
|
|
(defpart 519
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x2c :page #xc))
|
|
(:num 0.05)
|
|
(:scale-x (meters 0.080000006) (meters 0.32000002))
|
|
(:rot-y (degrees 0) (degrees 360))
|
|
(:scale-y (meters 0.080000006) (meters 0.32000002))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 0.0)
|
|
(:scalevel-x (meters 0.004) (meters 0.0090666665))
|
|
(:scalevel-y (meters 0.004) (meters 0.0090666665))
|
|
(:fade-a 0.32)
|
|
(:timer (seconds 2))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 left-multiply-quat))
|
|
(:next-time (seconds 0.5))
|
|
(:next-launcher 523)
|
|
)
|
|
)
|
|
|
|
(defpart 520
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x21 :page #xc))
|
|
(:num 3.2)
|
|
(:x (meters -0.2) (meters 0.4))
|
|
(:y (meters -0.2) (meters 0.4))
|
|
(:scale-x (meters 0.35) (meters 0.075))
|
|
(:scale-y (meters 0.2) (meters 0.075))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 40.0 24.0)
|
|
(:vel-x (meters -0.002) (meters 0.004))
|
|
(:vel-y (meters 0.018666666) (meters 0.0053333333))
|
|
(:vel-z (meters -0.002) (meters 0.004))
|
|
(:scalevel-x (meters -0.00066666666))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:accel-y (meters -0.00080000004) (meters -0.00020000001))
|
|
(:timer (seconds 3))
|
|
(:flags (sp-cpuinfo-flag-3))
|
|
(:userdata 0.0)
|
|
(:func 'check-water-level-drop)
|
|
(:next-time (seconds 0.4))
|
|
(:next-launcher 524)
|
|
)
|
|
)
|
|
|
|
(defpart 518
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x2d :page #xc))
|
|
(:num 1.0)
|
|
(:scale-x (meters 0.24000001) (meters 0.71999997))
|
|
(:rot-x (degrees 90))
|
|
(:rot-y (degrees 0) (degrees 360))
|
|
(:rot-z (degrees 0))
|
|
(:scale-y (meters 0.8) (meters 1.7600001))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 32.0 32.0)
|
|
(:scalevel-y (meters 0.053333335) (meters 0.013333334))
|
|
(:timer (seconds 0.8))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 left-multiply-quat set-conerot))
|
|
(:next-time (seconds 0.067) (seconds 0.065))
|
|
(:next-launcher 525)
|
|
)
|
|
)
|
|
|
|
(defpart 525
|
|
:init-specs ((:scalevel-y (meters 0.026666667)) (:next-time (seconds 0.067)) (:next-launcher 526))
|
|
)
|
|
|
|
(defpart 526
|
|
:init-specs ((:scalevel-y (meters 0)) (:fade-a -0.64) (:next-time (seconds 0.067)) (:next-launcher 527))
|
|
)
|
|
|
|
(defpart 527
|
|
:init-specs ((:scalevel-x (meters 0.0016666667))
|
|
(:scalevel-y (meters -0.026666667))
|
|
(:next-time (seconds 0.067))
|
|
(:next-launcher 528)
|
|
)
|
|
)
|
|
|
|
(defpart 528
|
|
:init-specs ((:scalevel-x (meters 0.0033333334)) (:scalevel-y (meters -0.053333335)))
|
|
)
|
|
|
|
(defpart 516
|
|
:init-specs ((:texture (new 'static 'texture-id :index #xc9 :page #xc))
|
|
(:birth-func 'birth-func-texture-group)
|
|
(:num 3.0)
|
|
(:scale-x (meters 1.6) (meters 0.8))
|
|
(:rot-y (degrees 0) (degrees 360))
|
|
(:scale-y (meters 1.6) (meters 0.8))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 48.0 16.0)
|
|
(:scalevel-x (meters 0.004) (meters 0.0037333334))
|
|
(:scalevel-y (meters 0.004) (meters 0.0037333334))
|
|
(:timer (seconds 2.667))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 left-multiply-quat))
|
|
(:userdata :data (new 'static 'boxed-array :type int32 10 0 0 #xc0c900 #xc03300 #xc02c00))
|
|
(:next-time (seconds 0.5) (seconds 0.997))
|
|
(:next-launcher 505)
|
|
)
|
|
)
|
|
|
|
(defpart 505
|
|
:init-specs ((:fade-a -0.21333334))
|
|
)
|
|
|
|
(defpart 517
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x21 :page #xc))
|
|
(:num 3.2)
|
|
(:x (meters 0.96000004))
|
|
(:scale-x (meters 0.35) (meters 0.075))
|
|
(:scale-y (meters 0.2) (meters 0.075))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 40.0 24.0)
|
|
(:vel-x (meters 0.0026666666) (meters 0.0053333333))
|
|
(:vel-y (meters 0.016) (meters 0.0053333333))
|
|
(:scalevel-x (meters -0.00066666666))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:accel-y (meters -0.00080000004) (meters -0.00020000001))
|
|
(:timer (seconds 3))
|
|
(:flags (sp-cpuinfo-flag-3))
|
|
(:userdata 0.0)
|
|
(:func 'check-water-level-drop)
|
|
(:next-time (seconds 0.4))
|
|
(:next-launcher 524)
|
|
(:rotate-y (degrees 0) (degrees 360))
|
|
)
|
|
)
|
|
|
|
(defpart 524
|
|
:init-specs ((:scalevel-x (meters 0)) (:scalevel-y :copy scalevel-x))
|
|
)
|
|
|
|
(defpart 515
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x21 :page #xc))
|
|
(:num 8.0)
|
|
(:x (meters 0.8))
|
|
(:scale-x (meters 0.15) (meters 0.05))
|
|
(:scale-y (meters 0.15) (meters 0.05))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 40.0 24.0)
|
|
(:vel-x (meters 0.0026666666) (meters 0.0053333333))
|
|
(:vel-y (meters 0.0053333333) (meters 0.0053333333))
|
|
(:scalevel-x (meters -0.00033333333))
|
|
(:scalevel-y (meters -0.00033333333))
|
|
(:accel-y (meters -0.0005333334) (meters -0.00013333335))
|
|
(:timer (seconds 1.25))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
|
|
(:userdata 0.0)
|
|
(:func 'check-water-level-drop-and-die)
|
|
(:rotate-y (degrees 0) (degrees 360))
|
|
)
|
|
)
|
|
|
|
(defpart 514
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x2d :page #xc))
|
|
(:num 1.5)
|
|
(:x (meters 0.16000001) (meters 0.16000001))
|
|
(:scale-x (meters 0.32000002) (meters 0.96000004))
|
|
(:rot-x (degrees 90))
|
|
(:rot-y (degrees 90))
|
|
(:rot-z (degrees 0))
|
|
(:scale-y (meters 0.16000001) (meters 1.7600001))
|
|
(:r 128.0)
|
|
(:g 128.0)
|
|
(:b 128.0)
|
|
(:a 48.0 24.0)
|
|
(:vel-x (meters 0.0026666666))
|
|
(:scalevel-x (meters 0) (meters 0.0016666667))
|
|
(:rotvel-x (degrees 0.2))
|
|
(:scalevel-y (meters 0.04))
|
|
(:timer (seconds 0.8))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 left-multiply-quat set-conerot))
|
|
(:next-time (seconds 0.067) (seconds 0.065))
|
|
(:next-launcher 529)
|
|
(:rotate-y (degrees 0) (degrees 360))
|
|
)
|
|
)
|
|
|
|
(defpart 529
|
|
:init-specs ((:scalevel-x (meters 0))
|
|
(:rotvel-x (degrees 0.16666667))
|
|
(:scalevel-y (meters 0.016666668))
|
|
(:next-time (seconds 0.067))
|
|
(:next-launcher 530)
|
|
)
|
|
)
|
|
|
|
(defpart 530
|
|
:init-specs ((:rotvel-x (degrees 0.13333334))
|
|
(:scalevel-y (meters 0))
|
|
(:fade-a -0.64)
|
|
(:next-time (seconds 0.067))
|
|
(:next-launcher 531)
|
|
)
|
|
)
|
|
|
|
(defpart 531
|
|
:init-specs ((:rotvel-x (degrees 0.1))
|
|
(:scalevel-y (meters -0.016666668))
|
|
(:next-time (seconds 0.067))
|
|
(:next-launcher 532)
|
|
)
|
|
)
|
|
|
|
(defpart 532
|
|
:init-specs ((:rotvel-x (degrees 0.06666667)) (:scalevel-y (meters -0.033333335)))
|
|
)
|
|
|
|
(defpart 522
|
|
:init-specs ((:texture (new 'static 'texture-id :index #xca :page #xc))
|
|
(:num 1.0)
|
|
(:scale-x (meters 6) (meters 0.1))
|
|
(:rot-x (degrees 11.25))
|
|
(:scale-y :copy scale-x)
|
|
(:r 128.0)
|
|
(:g :copy r)
|
|
(:b 255.0)
|
|
(:a 0.0)
|
|
(:scalevel-x (meters 0.16))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-a 1.0666667)
|
|
(:timer (seconds 0.2))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow sp-cpuinfo-flag-21))
|
|
(:userdata 10240.0)
|
|
(:next-time (seconds 0.05))
|
|
(:next-launcher 533)
|
|
(:rotate-y (degrees 0))
|
|
)
|
|
)
|
|
|
|
(defpart 533
|
|
:init-specs ((:fade-a -0.64))
|
|
)
|
|
|
|
(defpart 521
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x21 :page #xc))
|
|
(:num 12.0)
|
|
(:y (meters 0))
|
|
(:scale-x (meters 0.08) (meters 0.03))
|
|
(:rot-x 4)
|
|
(:scale-y :copy scale-x)
|
|
(:r 32.0 32.0)
|
|
(:g :copy r)
|
|
(:b 64.0 32.0)
|
|
(:a 128.0)
|
|
(:omega (degrees 0.01575) (degrees 0.009))
|
|
(:vel-y (meters 0.033333335) (meters 0.05))
|
|
(:accel-y (meters -0.005) (meters -0.00066666666))
|
|
(:friction 0.96 0.02)
|
|
(:timer (seconds 1))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21))
|
|
(:userdata -208896.0)
|
|
(:func 'check-water-level-drop-motion)
|
|
(:next-time (seconds 0) (seconds 0.58))
|
|
(:next-launcher 63)
|
|
(:conerot-x (degrees 15) (degrees 65))
|
|
(:conerot-y (degrees 0) (degrees 3600))
|
|
(:rotate-y (degrees 0))
|
|
(:conerot-radius (meters 0) (meters 1))
|
|
)
|
|
)
|
|
|
|
(defpart 63
|
|
:init-specs ((:r 255.0) (:g 255.0) (:b 255.0) (:next-time (seconds 0.017)) (:next-launcher 534))
|
|
)
|
|
|
|
(defpart 534
|
|
:init-specs ((:r 32.0 32.0) (:g 32.0 32.0) (:b 64.0 32.0) (:next-time (seconds 0) (seconds 1.497)) (:next-launcher 535))
|
|
)
|
|
|
|
(defpart 501
|
|
:init-specs ((:texture (new 'static 'texture-id :index #xc9 :page #xc))
|
|
(:num 0.3)
|
|
(:scale-x (meters 0.5) (meters 0.25))
|
|
(:rot-y (degrees 0) (degrees 360))
|
|
(:scale-y :copy scale-x)
|
|
(:r 32.0 32.0)
|
|
(:g :copy r)
|
|
(:b 64.0 32.0)
|
|
(:a 64.0 32.0)
|
|
(:scalevel-x (meters 0.006666667) (meters 0.006666667))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:fade-a -0.32 -0.32)
|
|
(:timer (seconds 1.5))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21))
|
|
(:userdata :data (new 'static 'boxed-array :type int32 10 0 0 #xc0c900 #xc02600 #xc03300 #xc02c00))
|
|
(:func 'sparticle-texture-animate)
|
|
(:rotate-y (degrees 0))
|
|
)
|
|
)
|
|
|
|
(defpart 536
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x21 :page #xc))
|
|
(:num 0.0 0.5)
|
|
(:scale-x (meters 0.08) (meters 0.03))
|
|
(:rot-x 4)
|
|
(:scale-y :copy scale-x)
|
|
(:r 32.0 32.0)
|
|
(:g :copy r)
|
|
(:b 64.0 32.0)
|
|
(:a 128.0)
|
|
(:omega (degrees 0.01575) (degrees 0.009))
|
|
(:vel-y (meters 0.026666667) (meters 0.05))
|
|
(:accel-y (meters -0.005) (meters -0.00066666666))
|
|
(:friction 0.95)
|
|
(:timer (seconds 2))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21))
|
|
(:userdata -208896.0)
|
|
(:func 'check-water-level-drop-and-die-motion)
|
|
(:next-time (seconds 0) (seconds 0.33))
|
|
(:next-launcher 63)
|
|
(:conerot-x (degrees 30) (degrees 40))
|
|
(:conerot-y (degrees 0) (degrees 3600))
|
|
(:rotate-y (degrees 0))
|
|
)
|
|
)
|
|
|
|
(defun check-water-level-drop-motion ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector))
|
|
(when (and (< (-> arg2 y) (-> arg1 user-float)) (< (-> arg1 vel-sxvel y) 0.0))
|
|
(let ((s3-0 (new 'stack-no-clear 'vector)))
|
|
(sp-kill-particle arg0 arg1)
|
|
(set-vector! s3-0 (-> arg2 x) (-> arg1 user-float) (-> arg2 z) 1.0)
|
|
(sound-play "water-drop" :position s3-0)
|
|
(launch-particles :system *sp-particle-system-3d* (-> *part-id-table* 501) s3-0)
|
|
(set! (-> *part-id-table* 536 init-specs 15 initial-valuef) (-> s3-0 y))
|
|
(launch-particles (-> *part-id-table* 536) s3-0)
|
|
)
|
|
)
|
|
(sparticle-motion-blur arg0 arg1 arg2)
|
|
(none)
|
|
)
|
|
|
|
(defpart 537
|
|
:init-specs ((:texture (new 'static 'texture-id :index #x21 :page #xc))
|
|
(:num 1.0)
|
|
(:scale-x (meters 0.15) (meters 0.05))
|
|
(:rot-x 4)
|
|
(:scale-y :copy scale-x)
|
|
(:r 32.0 32.0)
|
|
(:g :copy r)
|
|
(:b 64.0 32.0)
|
|
(:a 128.0)
|
|
(:omega (degrees 0.0225) (degrees 0.0225))
|
|
(:vel-x (meters -0.016666668) (meters 0.0016666667))
|
|
(:vel-y (meters 0.016666668))
|
|
(:vel-z (meters -0.016666668) (meters 0.0016666667))
|
|
(:scalevel-x (meters -0.00016666666))
|
|
(:scalevel-y :copy scalevel-x)
|
|
(:accel-y (meters -0.001) (meters -0.00033333333))
|
|
(:timer (seconds 2))
|
|
(:flags (sp-cpuinfo-flag-2 sp-cpuinfo-flag-3))
|
|
(:userdata 0.0)
|
|
(:func 'check-water-level-drop-motion)
|
|
(:next-time (seconds 2))
|
|
(:next-launcher 538)
|
|
)
|
|
)
|
|
|
|
(defmethod water-control-method-9 ((this water-control))
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod water-control-method-10 ((this water-control))
|
|
(local-vars
|
|
(sv-272 (function vector entity-actor skeleton-group vector object none :behavior manipy))
|
|
(sv-288 vector)
|
|
(sv-304 entity-actor)
|
|
)
|
|
(with-pp
|
|
(let ((s4-0 (-> this flags))
|
|
(s5-0 (new 'stack-no-clear 'water-info))
|
|
)
|
|
(when (logtest? (water-flags find-water) (-> this flags))
|
|
(water-info-init! (the-as collide-shape (-> this process control)) s5-0 (collide-action solid semi-solid))
|
|
(set! (-> this flags)
|
|
(logior (logclear
|
|
(-> this flags)
|
|
(water-flags active can-wade can-swim can-ground use-ocean tar mud use-water-anim swamp over-water)
|
|
)
|
|
(logclear (-> s5-0 flags) (water-flags touch-water))
|
|
)
|
|
)
|
|
(set! (-> this base-height) (-> s5-0 base-height))
|
|
(set! (-> this base-ocean-offset) (- (-> s5-0 trans y) (-> s5-0 base-height)))
|
|
)
|
|
(cond
|
|
((not (logtest? (-> this flags) (water-flags active)))
|
|
(logclear!
|
|
(-> this flags)
|
|
(water-flags under-water head-under-water bouncing wading swimming touch-water jump-out break-surface)
|
|
)
|
|
)
|
|
((and (logtest? (-> this flags) (water-flags no-grab-ground))
|
|
(logtest? (-> this process focus-status) (focus-status grabbed))
|
|
)
|
|
(logior! (-> this flags) (water-flags jump-out))
|
|
(logclear! (-> this flags) (water-flags break-surface))
|
|
)
|
|
((begin
|
|
(set! (-> this top 1 quad) (-> this top 0 quad))
|
|
(vector<-cspace! (the-as vector (-> this top)) (-> this process node-list data (-> this joint-index)))
|
|
(+! (-> this top 0 y) (-> this top-y-offset))
|
|
(set! (-> this bottom 1 quad) (-> this bottom 0 quad))
|
|
(set! (-> this bottom 0 quad) (-> this process control trans quad))
|
|
(logclear! (-> this flags) (water-flags under-water head-under-water bouncing wading swimming break-surface))
|
|
(set! (-> this bob-offset) (update! (-> this bob)))
|
|
(cond
|
|
((logtest? (-> this flags) (water-flags use-ocean use-water-anim))
|
|
(if (not (logtest? (water-flags touch-water) (-> this flags)))
|
|
(set! (-> this ocean-offset) (-> this base-ocean-offset))
|
|
(set! (-> this ocean-offset) (lerp (-> this ocean-offset) (-> this base-ocean-offset) 0.2))
|
|
)
|
|
(set! (-> this base-ocean-offset) 0.0)
|
|
)
|
|
(else
|
|
(set! (-> this base-ocean-offset) 0.0)
|
|
(set! (-> this base-ocean-offset) 0.0)
|
|
(set! (-> this ocean-offset) 0.0)
|
|
)
|
|
)
|
|
(if (logtest? (focus-status board pilot) (-> this process focus-status))
|
|
(set! (-> this bob-offset) 0.0)
|
|
)
|
|
(set! (-> this height)
|
|
(+ (-> this base-height) (-> this ocean-offset) (-> this bob-offset) (-> this align-offset))
|
|
)
|
|
(set! (-> this surface-height) (+ (-> this base-height) (-> this base-ocean-offset)))
|
|
(cond
|
|
((logtest? (focus-status board pilot) (-> this process focus-status))
|
|
(set! (-> this collide-height) (+ -819.2 (-> this base-ocean-offset) (-> this base-height)))
|
|
)
|
|
((logtest? (-> this flags) (water-flags swim-ground))
|
|
(set! (-> this collide-height) (- (-> this height) (-> this swim-height)))
|
|
)
|
|
(else
|
|
(set! (-> this collide-height) (- (-> this height) (-> this bottom-height)))
|
|
)
|
|
)
|
|
(set! (-> this swim-depth)
|
|
(fmax 0.0 (- (- (-> this surface-height) (-> this swim-height)) (-> this bottom 0 y)))
|
|
)
|
|
(and (>= (-> this height) (-> this bottom 0 y)) (logtest? (water-flags touch-water) (-> s5-0 flags)))
|
|
)
|
|
(if (logtest? (-> (the-as collide-shape-moving (-> this process control)) status) (collide-status on-water))
|
|
(set-time! (-> this on-water-time))
|
|
)
|
|
(when (not (logtest? (-> this flags) (water-flags dark-eco lava)))
|
|
(set! (-> this drip-wetness) 1.0)
|
|
(set! (-> this drip-height) (fmax (- (-> this surface-height) (-> this bottom 0 y)) (-> this drip-height)))
|
|
(set! (-> this drip-speed) 15.0)
|
|
)
|
|
(if (and (not (logtest? (water-flags touch-water) (-> this flags)))
|
|
(not (logtest? (-> this process focus-status) (focus-status touch-water)))
|
|
)
|
|
(enter-water this)
|
|
)
|
|
(logior! (-> this flags) (water-flags touch-water))
|
|
(cond
|
|
((>= (-> this top 0 y) (-> this height))
|
|
(let ((s3-0 (new 'stack-no-clear 'vector)))
|
|
(set! (-> s3-0 quad) (-> this bottom 0 quad))
|
|
(let ((v1-79 (-> this process control transv)))
|
|
(sqrtf (+ (* (-> v1-79 x) (-> v1-79 x)) (* (-> v1-79 z) (-> v1-79 z))))
|
|
)
|
|
(logior! (-> this flags) (water-flags break-surface))
|
|
(set! (-> s3-0 y) (+ 40.96 (-> this surface-height)))
|
|
(when (and (not (handle->process (-> this ripple)))
|
|
(>= (+ (current-time) (seconds -1.5)) (-> this enter-water-time))
|
|
)
|
|
(let* ((s1-0 (get-process *default-dead-pool* manipy #x4000))
|
|
(s2-0
|
|
(when s1-0
|
|
(let ((t9-6 (method-of-type manipy activate)))
|
|
(t9-6 (the-as manipy s1-0) (-> this process) (symbol->string (-> manipy symbol)) (the-as pointer #x70004000))
|
|
)
|
|
(let ((s2-1 run-function-in-process)
|
|
(s0-0 s1-0)
|
|
)
|
|
(set! sv-272 manipy-init)
|
|
(set! sv-288 s3-0)
|
|
(set! sv-304 (-> this process entity))
|
|
(let ((t0-0 (art-group-get-by-name *level* "skel-generic-ripples" (the-as (pointer uint32) #f)))
|
|
(t1-0 #f)
|
|
(t2-0 0)
|
|
)
|
|
((the-as (function object object object object object object object none) s2-1)
|
|
s0-0
|
|
sv-272
|
|
sv-288
|
|
sv-304
|
|
t0-0
|
|
t1-0
|
|
t2-0
|
|
)
|
|
)
|
|
)
|
|
(-> s1-0 ppointer)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> this ripple) (ppointer->handle s2-0))
|
|
(when s2-0
|
|
(send-event (ppointer->process s2-0) 'anim-mode 'loop)
|
|
(send-event (ppointer->process s2-0) 'art-joint-anim "generic-ripples-cycle" 0)
|
|
(set-vector! (-> (the-as process-drawable (-> s2-0 0)) root scale) 0.0 0.5 0.0 1.0)
|
|
(send-event
|
|
(ppointer->process s2-0)
|
|
'trans-hook
|
|
(lambda :behavior process-drawable
|
|
()
|
|
(let ((s5-0 (ppointer->process (-> self parent)))
|
|
(gp-0 (new 'stack-no-clear 'vector))
|
|
)
|
|
(set! (-> gp-0 quad) (-> (the-as process-drawable s5-0) water bottom 0 quad))
|
|
(seek! (-> self root scale x) 2.0 (* 2.0 (seconds-per-frame)))
|
|
(set! (-> self root scale z) (-> self root scale x))
|
|
(set! (-> gp-0 y) (-> (the-as process-drawable s5-0) water surface-height))
|
|
(let ((v0-1 (-> self root trans)))
|
|
(set! (-> v0-1 quad) (-> gp-0 quad))
|
|
v0-1
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (and (logtest? (-> this process draw status) (draw-control-status on-screen))
|
|
(zero? (-> this process draw cur-lod))
|
|
(logtest? (water-flags part-rings) (-> this flags))
|
|
(logtest? (water-flags part-water) (-> this flags))
|
|
)
|
|
(let* ((f30-0 (y-angle (-> this process control)))
|
|
(v1-141 (-> this process control transv))
|
|
(f28-0 (sqrtf (+ (* (-> v1-141 x) (-> v1-141 x)) (* (-> v1-141 z) (-> v1-141 z)))))
|
|
)
|
|
(set! (-> *part-id-table* 506 init-specs 4 initial-valuef) (+ 24576.0 f30-0))
|
|
(set! (-> *part-id-table* 506 init-specs 19 initial-valuef) (+ 49152.0 f30-0))
|
|
(set! (-> *part-id-table* 506 init-specs 1 initial-valuef) (* 0.0000036621095 f28-0))
|
|
(set! (-> *part-id-table* 506 init-specs 2 initial-valuef) (* 0.1 f28-0))
|
|
(set! (-> *part-id-table* 506 init-specs 13 initial-valuef) 0.7111111)
|
|
(set! (-> *part-id-table* 506 init-specs 3 initial-valuef) (-> this wake-size))
|
|
(set! (-> *part-id-table* 506 init-specs 5 initial-valuef) (-> this wake-size))
|
|
(launch-particles :system *sp-particle-system-3d* (-> *part-id-table* 506) s3-0)
|
|
(set! (-> *part-id-table* 509 init-specs 1 initial-valuef) (* 0.000004150391 f28-0))
|
|
(set! (-> *part-id-table* 509 init-specs 18 initial-valuef) f30-0)
|
|
(launch-particles :system *sp-particle-system-3d* (-> *part-id-table* 509) s3-0)
|
|
(when (< f28-0 4096.0)
|
|
(set! (-> *part-id-table* 504 init-specs 2 random-rangef) (-> this ripple-size))
|
|
(launch-particles :system *sp-particle-system-3d* (-> *part-id-table* 504) s3-0)
|
|
)
|
|
)
|
|
)
|
|
(if (< (-> this top 1 y) (-> this height))
|
|
(spawn-ripples this 0.2 s3-0 1 (-> this process control transv) #t)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(logior! (-> this flags) (water-flags head-under-water))
|
|
)
|
|
)
|
|
(when (and (logtest? (water-flags part-splash) (-> this flags)) (logtest? (water-flags part-water) (-> this flags)))
|
|
(cond
|
|
((logtest? (-> this flags) (water-flags lava))
|
|
)
|
|
((logtest? (-> this flags) (water-flags dark-eco))
|
|
)
|
|
((logtest? (focus-status mech) (-> this process focus-status))
|
|
)
|
|
(else
|
|
(let* ((v0-17 (rand-vu-int-range 3 (+ (-> this process node-list length) -1)))
|
|
(s3-1 (vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data v0-17)))
|
|
)
|
|
(when (< (-> s3-1 y) (-> this surface-height))
|
|
(set! (-> *part-id-table* 502 init-specs 16 initial-valuef) (-> this surface-height))
|
|
(let ((f0-72 (lerp-scale 12.0 0.4 (the float (- (current-time) (-> this enter-water-time))) 0.0 600.0))
|
|
(f1-26 0.00012207031)
|
|
(v1-222 (-> this process control transv))
|
|
)
|
|
(set! (-> *part-id-table* 502 init-specs 1 initial-valuef)
|
|
(+ f0-72 (* f1-26 (sqrtf (+ (* (-> v1-222 x) (-> v1-222 x)) (* (-> v1-222 z) (-> v1-222 z))))))
|
|
)
|
|
)
|
|
(launch-particles (-> *part-id-table* 502) s3-1)
|
|
(set! (-> *part-id-table* 503 init-specs 16 initial-valuef) (-> this surface-height))
|
|
(launch-particles (-> *part-id-table* 503) s3-1)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(let ((f30-1 (- (+ (-> this base-height) (-> this ocean-offset) (-> this bob-offset) (-> this align-offset))
|
|
(-> this swim-height)
|
|
)
|
|
)
|
|
)
|
|
(let* ((s3-2 (-> this process control))
|
|
(v1-236 (if (type? s3-2 control-info)
|
|
s3-2
|
|
)
|
|
)
|
|
(v1-237 (and v1-236 (not (time-elapsed? (-> v1-236 last-time-on-surface) (seconds 0.5)))))
|
|
)
|
|
(if (and (logtest? (-> this flags) (water-flags swim-ground))
|
|
(and v1-237
|
|
(not (logtest? (-> (the-as collide-shape-moving (-> this process control)) status) (collide-status on-water)))
|
|
)
|
|
)
|
|
(set! (-> this bob amp) (* 0.8 (-> this bob amp)))
|
|
)
|
|
(cond
|
|
((and (logtest? (-> this flags) (water-flags can-swim))
|
|
(or (logtest? (-> (the-as collide-shape-moving (-> this process control)) status) (collide-status on-water))
|
|
(>= f30-1 (-> this bottom 0 y))
|
|
(and (logtest? (water-flags swimming) s4-0)
|
|
(logtest? (-> (the-as collide-shape-moving (-> this process control)) status) (collide-status touch-surface))
|
|
(not (logtest? (-> (the-as collide-shape-moving (-> this process control)) status) (collide-status on-surface))
|
|
)
|
|
(>= (+ 204.8 f30-1) (-> this bottom 0 y))
|
|
)
|
|
)
|
|
(or (logtest? (water-flags swimming) s4-0)
|
|
(let ((f0-84 12288.0)
|
|
(a0-112 (-> this process control transv))
|
|
)
|
|
(< f0-84 (sqrtf (+ (* (-> a0-112 x) (-> a0-112 x)) (* (-> a0-112 z) (-> a0-112 z)))))
|
|
)
|
|
(< (+ (current-time) (seconds -0.2)) (-> this enter-water-time))
|
|
(or (>= (+ (- 204.8 (fmin 6144.0 (+ (-> this ocean-offset) (-> this bob-offset) (-> this align-offset)))) f30-1)
|
|
(-> this bottom 0 y)
|
|
)
|
|
(and (-> this process next-state) (= (-> this process next-state name) 'target-hit-ground))
|
|
)
|
|
)
|
|
)
|
|
(set-time! (-> this swim-time))
|
|
(send-event (-> this process) 'swim)
|
|
(logior! (-> this flags) (water-flags swimming))
|
|
(if (not (logtest? (water-flags swimming) s4-0))
|
|
(set-time! (-> this enter-swim-time))
|
|
)
|
|
(cond
|
|
((and (logtest? (-> this flags) (water-flags swim-ground))
|
|
(logtest? (-> (the-as collide-shape-moving (-> this process control)) status) (collide-status touch-surface))
|
|
(not (logtest? (water-flags jump-out) (-> this flags)))
|
|
)
|
|
(let ((v1-260 (new 'stack-no-clear 'vector)))
|
|
(set! (-> v1-260 quad) (-> this bottom 0 quad))
|
|
(set! (-> v1-260 y) (- (-> this height) (-> this swim-height)))
|
|
(let ((s3-3 (the-as collide-shape-moving (-> this process control))))
|
|
(when (and (not (logtest? (-> s3-3 status) (collide-status touch-background)))
|
|
(logtest? (water-flags swimming) (-> this flags))
|
|
(not (logtest? (focus-status board pilot) (-> this process focus-status)))
|
|
)
|
|
(let ((a1-42 (vector-! (new 'stack-no-clear 'vector) v1-260 (-> (the-as control-info s3-3) trans))))
|
|
(vector-float*! a1-42 a1-42 (-> pp clock frames-per-second))
|
|
(integrate-and-collide! s3-3 a1-42)
|
|
)
|
|
(set! (-> (the-as control-info s3-3) status)
|
|
(logior (-> s3-3 status) (collide-status on-surface on-ground touch-surface on-water))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
((and (< (-> this bottom 0 y) f30-1) (not (logtest? (water-flags jump-out) (-> this flags))))
|
|
(logior! (-> this flags) (water-flags under-water))
|
|
)
|
|
)
|
|
)
|
|
((begin
|
|
(set! v1-237 (and (logtest? (-> this flags) (water-flags can-wade))
|
|
(or (not (!= (-> this bob amp) 0.0)) (time-elapsed? (-> this swim-time) (seconds 0.05)))
|
|
(and (>= (- (-> this height) (-> this wade-height)) (-> this bottom 0 y)) v1-237)
|
|
)
|
|
)
|
|
v1-237
|
|
)
|
|
(set-time! (-> this wade-time))
|
|
(send-event (-> this process) 'wade)
|
|
(logior! (-> this flags) (water-flags wading))
|
|
)
|
|
((and (< (-> this bottom 0 y) f30-1) (not (logtest? (water-flags jump-out) (-> this flags))))
|
|
(logior! (-> this flags) (water-flags under-water))
|
|
)
|
|
)
|
|
)
|
|
(when (and (logtest? (-> this flags) (water-flags can-swim))
|
|
(< (-> this bottom 1 y) f30-1)
|
|
(and (< f30-1 (-> this bottom 0 y)) (logtest? s4-0 (water-flags under-water)))
|
|
)
|
|
(logior! (-> this flags) (water-flags swimming))
|
|
(let ((a1-47 (new 'stack-no-clear 'vector)))
|
|
(set! (-> a1-47 quad) (-> this bottom 0 quad))
|
|
(let ((s4-1 (the-as collide-shape-moving (-> this process control))))
|
|
(set! (-> a1-47 y) f30-1)
|
|
(when (not (logtest? (focus-status board pilot) (-> this process focus-status)))
|
|
(let ((f30-2 (-> s4-1 ground-impact-vel)))
|
|
(move-to-ground-point s4-1 a1-47 (-> (the-as control-info s4-1) transv) *up-vector*)
|
|
(set! (-> (the-as control-info s4-1) status) (logior (-> s4-1 status) (collide-status on-water)))
|
|
(set! (-> (the-as control-info s4-1) ground-impact-vel) f30-2)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (= (-> this process type) target)
|
|
(cond
|
|
((logtest? (-> this flags) (water-flags tar))
|
|
(when (and (logtest? (-> (the-as collide-shape-moving (-> this process control)) status)
|
|
(collide-status on-surface on-water)
|
|
)
|
|
(not (logtest? (focus-status board pilot) (-> this process focus-status)))
|
|
)
|
|
(when (< (-> this process control trans y) (+ -1228.8 (-> this base-height)))
|
|
(send-event (-> this process) 'no-look-around (seconds 1.5))
|
|
(if (not (logtest? (-> this process focus-status) (focus-status flut)))
|
|
(send-event
|
|
(-> this process)
|
|
'attack
|
|
#f
|
|
(static-attack-info ((id (-> this attack-id)) (shove-up (meters 0.5)) (shove-back (meters 0)) (mode 'tar)))
|
|
)
|
|
)
|
|
(let ((v1-329 (-> this process)))
|
|
(set! (-> v1-329 control surf) *tar-surface*)
|
|
(set! (-> v1-329 control ground-pat)
|
|
(copy-and-set-field (-> (the-as collide-shape-moving (-> v1-329 control)) ground-pat) material 4)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> this swim-height) (lerp (-> this swim-height) 7372.8 0.05))
|
|
)
|
|
)
|
|
((logtest? (-> this flags) (water-flags lava))
|
|
(when (logtest? (-> (the-as collide-shape-moving (-> this process control)) status)
|
|
(collide-status on-surface on-water)
|
|
)
|
|
(when (< (-> this process control trans y) (+ -204.8 (-> this base-height)))
|
|
(send-event (-> this process) 'no-look-around (seconds 1.5))
|
|
(send-event (-> this process) 'attack #f (static-attack-info ((id (the-as uint 2))
|
|
(shove-up (meters 0.5))
|
|
(shove-back (meters 0))
|
|
(mode 'melt)
|
|
(intersection (-> s5-0 trans))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(set! (-> this swim-height) (lerp (-> this swim-height) 7372.8 0.05))
|
|
)
|
|
)
|
|
((and (logtest? (focus-status dark) (-> this process focus-status))
|
|
(nonzero? (-> this process darkjak))
|
|
(logtest? (-> this process darkjak stage) (darkjak-stage giant))
|
|
)
|
|
(set! (-> this swim-height) 16384.0)
|
|
)
|
|
(else
|
|
(set! (-> this swim-height) 8192.0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(else
|
|
(if (logtest? (water-flags touch-water) (-> this flags))
|
|
(water-control-method-16 this)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (not (or (not (logtest? (water-flags part-drip) (-> this flags)))
|
|
(not (logtest? (water-flags part-water) (-> this flags)))
|
|
(= (-> this drip-wetness) 0.0)
|
|
)
|
|
)
|
|
(cond
|
|
((logtest? (water-flags spawn-drip) (-> this flags))
|
|
(let ((v0-34
|
|
(vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data (-> this drip-joint-index)))
|
|
)
|
|
)
|
|
(set! (-> *part-id-table* 537 init-specs 18 initial-valuef) (-> this surface-height))
|
|
(set! (-> *part-id-table* 537 init-specs 10 initial-valuef)
|
|
(* 0.05 (- (-> v0-34 x) (-> this drip-old-pos x)))
|
|
)
|
|
(set! (-> *part-id-table* 537 init-specs 11 initial-valuef)
|
|
(* 0.05 (- (-> v0-34 y) (-> this drip-old-pos y)))
|
|
)
|
|
(set! (-> *part-id-table* 537 init-specs 12 initial-valuef)
|
|
(* 0.05 (- (-> v0-34 z) (-> this drip-old-pos z)))
|
|
)
|
|
(launch-particles (-> *part-id-table* 537) v0-34)
|
|
)
|
|
(set-time! (-> this drip-time))
|
|
(logclear! (-> this flags) (water-flags spawn-drip))
|
|
(seek! (-> this drip-wetness) 0.0 (* 0.001 (-> this drip-speed)))
|
|
(set! (-> this drip-speed) (* 1.05 (-> this drip-speed)))
|
|
(if (= (-> this drip-wetness) 0.0)
|
|
(set! (-> this drip-height) 0.0)
|
|
)
|
|
)
|
|
((time-elapsed?
|
|
(the-as time-frame (the int (/ (the float (-> this drip-time)) (-> this drip-mult))))
|
|
(the int (-> this drip-speed))
|
|
)
|
|
(let* ((s5-1 (rand-vu-int-range 3 (+ (-> this process node-list length) -1)))
|
|
(v0-38 (vector<-cspace! (new 'stack-no-clear 'vector) (-> this process node-list data s5-1)))
|
|
)
|
|
(when (and (< (- (-> v0-38 y) (-> this process control trans y)) (-> this drip-height))
|
|
(< (-> this height) (-> v0-38 y))
|
|
)
|
|
(set! (-> this drip-joint-index) s5-1)
|
|
(set! (-> this drip-old-pos quad) (-> v0-38 quad))
|
|
(logior! (-> this flags) (water-flags spawn-drip))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (and (not (logtest? (water-flags break-surface) (-> this flags))) (handle->process (-> this ripple)))
|
|
(send-event (handle->process (-> this ripple)) 'die)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defmethod start-bobbing! ((this water-control) (arg0 float) (arg1 int) (arg2 int))
|
|
(with-pp
|
|
(activate! (-> this bob) (- arg0) arg1 arg2 0.9 1.0 (-> pp clock))
|
|
0
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defun part-water-splash-callback ((arg0 part-tracker))
|
|
(let ((f1-0 (-> arg0 root trans y))
|
|
(f0-0 (the-as float (-> arg0 userdata)))
|
|
)
|
|
(set! (-> *part-id-table* 521 init-specs 16 initial-valuef) f1-0)
|
|
(set! (-> *part-id-table* 521 init-specs 1 initial-valuef) (* 12.0 f0-0))
|
|
(set! (-> *part-id-table* 517 init-specs 16 initial-valuef) f1-0)
|
|
(set! (-> *part-id-table* 520 init-specs 18 initial-valuef) f1-0)
|
|
(set! (-> *part-id-table* 515 init-specs 16 initial-valuef) f1-0)
|
|
(set! (-> *part-id-table* 512 init-specs 15 initial-valuef) f1-0)
|
|
(set! (-> *part-id-table* 513 init-specs 15 initial-valuef) f1-0)
|
|
(set! (-> *part-id-table* 512 init-specs 12 initial-valuef) (* 13.653334 (* -0.15 f0-0)))
|
|
(set! (-> *part-id-table* 512 init-specs 12 random-rangef) (* 13.653334 (* -0.075 f0-0)))
|
|
(set! (-> *part-id-table* 513 init-specs 12 initial-valuef) (* 13.653334 (* -0.15 f0-0)))
|
|
(set! (-> *part-id-table* 513 init-specs 12 random-rangef) (* 13.653334 (* -0.075 f0-0)))
|
|
(set! (-> *part-id-table* 519 init-specs 2 initial-valuef) (* 4096.0 (* 0.1 f0-0)))
|
|
(set! (-> *part-id-table* 519 init-specs 2 random-rangef) (* 4096.0 (* 0.4 f0-0)))
|
|
(set! (-> *part-id-table* 519 init-specs 4 initial-valuef) (* 4096.0 (* 0.1 f0-0)))
|
|
(set! (-> *part-id-table* 519 init-specs 4 random-rangef) (* 4096.0 (* 0.4 f0-0)))
|
|
(set! (-> *part-id-table* 519 init-specs 9 initial-valuef) (* 13.653334 (* 1.5 f0-0)))
|
|
(set! (-> *part-id-table* 519 init-specs 9 random-rangef) (* 13.653334 (* 3.4 f0-0)))
|
|
(set! (-> *part-id-table* 519 init-specs 10 initial-valuef) (* 13.653334 (* 1.5 f0-0)))
|
|
(set! (-> *part-id-table* 519 init-specs 10 random-rangef) (* 13.653334 (* 3.4 f0-0)))
|
|
(set! (-> *part-id-table* 516 init-specs 3 initial-valuef) (* 4096.0 (* 1.5 f0-0)))
|
|
(set! (-> *part-id-table* 516 init-specs 3 random-rangef) (* 4096.0 (* 1.5 f0-0)))
|
|
(set! (-> *part-id-table* 516 init-specs 5 initial-valuef) (* 4096.0 (* 1.5 f0-0)))
|
|
(set! (-> *part-id-table* 516 init-specs 5 random-rangef) (* 4096.0 (* 1.5 f0-0)))
|
|
(set! (-> *part-id-table* 516 init-specs 10 initial-valuef) (* 13.653334 (* 1.5 f0-0)))
|
|
(set! (-> *part-id-table* 516 init-specs 10 random-rangef) (* 13.653334 (* 2.4 f0-0)))
|
|
(set! (-> *part-id-table* 516 init-specs 11 initial-valuef) (* 13.653334 (* 1.5 f0-0)))
|
|
(set! (-> *part-id-table* 516 init-specs 11 random-rangef) (* 13.653334 (* 2.4 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 1 initial-valuef) (* 0.5 f0-0))
|
|
(set! (-> *part-id-table* 520 init-specs 2 initial-valuef) (* 4096.0 (* -0.25 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 2 random-rangef) (* 4096.0 (* 0.5 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 3 initial-valuef) (* 4096.0 (* -0.25 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 3 random-rangef) (* 4096.0 (* 0.5 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 10 initial-valuef) (* 13.653334 (* -0.75 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 10 random-rangef) (* 13.653334 (* 1.5 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 12 initial-valuef) (* 13.653334 (* -0.75 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 12 random-rangef) (* 13.653334 (* 1.5 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 11 initial-valuef) (* 13.653334 (* 7.0 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 11 random-rangef) (* 13.653334 (* 2.0 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 15 initial-valuef) (* 13.653334 (* -0.3 f0-0)))
|
|
(set! (-> *part-id-table* 520 init-specs 15 random-rangef) (* 13.653334 (* -0.075 f0-0)))
|
|
(set! (-> *part-id-table* 517 init-specs 1 initial-valuef) (* 0.5 f0-0))
|
|
(set! (-> *part-id-table* 517 init-specs 2 initial-valuef) (* 1.2 f0-0))
|
|
(set! (-> *part-id-table* 517 init-specs 9 initial-valuef) (* 13.653334 f0-0))
|
|
(set! (-> *part-id-table* 517 init-specs 9 random-rangef) (* 13.653334 (* 2.0 f0-0)))
|
|
(set! (-> *part-id-table* 517 init-specs 10 initial-valuef) (* 13.653334 (* 6.0 f0-0)))
|
|
(set! (-> *part-id-table* 517 init-specs 10 random-rangef) (* 13.653334 (* 2.0 f0-0)))
|
|
(set! (-> *part-id-table* 517 init-specs 13 initial-valuef) (* 13.653334 (* -0.3 f0-0)))
|
|
(set! (-> *part-id-table* 517 init-specs 13 random-rangef) (* 13.653334 (* -0.075 f0-0)))
|
|
(set! (-> *part-id-table* 517 init-specs 9 initial-valuef) (* 13.653334 f0-0))
|
|
(set! (-> *part-id-table* 517 init-specs 9 random-rangef) (* 13.653334 (* 2.0 f0-0)))
|
|
(set! (-> *part-id-table* 517 init-specs 10 initial-valuef) (* 13.653334 (* 6.0 f0-0)))
|
|
(set! (-> *part-id-table* 517 init-specs 10 random-rangef) (* 13.653334 (* 2.0 f0-0)))
|
|
(set! (-> *part-id-table* 517 init-specs 13 initial-valuef) (* 13.653334 (* -0.3 f0-0)))
|
|
(set! (-> *part-id-table* 517 init-specs 13 random-rangef) (* 13.653334 (* -0.075 f0-0)))
|
|
(set! (-> *part-id-table* 515 init-specs 1 initial-valuef) (* 4.0 f0-0))
|
|
(set! (-> *part-id-table* 515 init-specs 2 initial-valuef) (* 4096.0 f0-0))
|
|
(set! (-> *part-id-table* 515 init-specs 9 initial-valuef) (* 13.653334 f0-0))
|
|
(set! (-> *part-id-table* 515 init-specs 9 random-rangef) (* 13.653334 (* 2.0 f0-0)))
|
|
(set! (-> *part-id-table* 515 init-specs 10 initial-valuef) (* 13.653334 (* 6.0 f0-0)))
|
|
(set! (-> *part-id-table* 515 init-specs 10 random-rangef) (* 13.653334 (* 2.0 f0-0)))
|
|
(set! (-> *part-id-table* 515 init-specs 13 initial-valuef) (* 13.653334 (* -0.3 f0-0)))
|
|
(set! (-> *part-id-table* 515 init-specs 13 random-rangef) (* 13.653334 (* -0.075 f0-0)))
|
|
(set! (-> *part-id-table* 514 init-specs 2 initial-valuef) (* 4096.0 (* 1.2 f0-0)))
|
|
(set! (-> *part-id-table* 514 init-specs 2 random-rangef) (* 4096.0 (* 0.2 f0-0)))
|
|
(set! (-> *part-id-table* 514 init-specs 3 initial-valuef) (* 4096.0 (* 0.4 f0-0)))
|
|
(set! (-> *part-id-table* 514 init-specs 3 random-rangef) (* 4096.0 (* 1.2 f0-0)))
|
|
(set! (-> *part-id-table* 514 init-specs 7 initial-valuef) (* 4096.0 (* 0.2 f0-0)))
|
|
(set! (-> *part-id-table* 514 init-specs 7 random-rangef) (* 4096.0 (* 2.2 f0-0)))
|
|
(set! (-> *part-id-table* 518 init-specs 2 initial-valuef) (* 4096.0 (* 0.3 f0-0)))
|
|
(set! (-> *part-id-table* 518 init-specs 2 random-rangef) (* 4096.0 (* 0.9 f0-0)))
|
|
(set! (-> *part-id-table* 518 init-specs 6 initial-valuef) (* 4096.0 f0-0))
|
|
(set! (-> *part-id-table* 518 init-specs 6 random-rangef) (* 4096.0 (* 2.2 f0-0)))
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod enter-water ((this water-control))
|
|
(with-pp
|
|
(logior! (-> this flags) (water-flags touch-water))
|
|
(logclear! (-> this flags) (water-flags jump-out))
|
|
(set-time! (-> this enter-water-time))
|
|
(set-vector! (-> this enter-water-pos) (-> this bottom 0 x) (-> this surface-height) (-> this bottom 0 z) 1.0)
|
|
(when (and (logtest? (water-flags part-splash) (-> this flags)) (logtest? (water-flags part-water) (-> this flags)))
|
|
(let ((a1-1 (new 'stack-no-clear 'event-message-block)))
|
|
(set! (-> a1-1 from) (process->ppointer pp))
|
|
(set! (-> a1-1 num-params) 1)
|
|
(set! (-> a1-1 message) 'query)
|
|
(set! (-> a1-1 param 0) (the-as uint 'ground-height))
|
|
(let* ((f0-4 (the-as float (send-event-function (-> this process) a1-1)))
|
|
(f30-0 (lerp-scale 0.3 1.0 f0-4 2048.0 24576.0))
|
|
)
|
|
(when (not (logtest? (-> this flags) (water-flags dark-eco lava)))
|
|
(if (nonzero? (-> this process skel effect))
|
|
(sound-play "swim-enter")
|
|
)
|
|
(spawn-ripples this f30-0 (-> this enter-water-pos) 1 (-> this process control transv) #t)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(if (logtest? (-> this flags) (water-flags tar lava))
|
|
(set! (-> this swim-height) 2867.2)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
)
|
|
|
|
(defmethod water-control-method-16 ((this water-control))
|
|
(logclear! (-> this flags) (water-flags touch-water))
|
|
(set-zero! (-> this bob))
|
|
(if (logtest? (-> this flags) (water-flags tar lava))
|
|
(set! (-> this swim-height) 2867.2)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defun splash-spawn ((arg0 float) (arg1 vector) (arg2 int))
|
|
(let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000)))
|
|
(when s5-0
|
|
(let ((t9-1 (method-of-type part-tracker activate)))
|
|
(t9-1
|
|
(the-as part-tracker s5-0)
|
|
*entity-pool*
|
|
(symbol->string (-> part-tracker symbol))
|
|
(the-as pointer #x70004000)
|
|
)
|
|
)
|
|
(let ((t9-2 run-function-in-process)
|
|
(a0-3 s5-0)
|
|
(a1-3 part-tracker-init)
|
|
(a2-5 (if (zero? arg2)
|
|
(-> *part-group-id-table* 122)
|
|
(-> *part-group-id-table* 121)
|
|
)
|
|
)
|
|
(a3-1 0)
|
|
(t0-0 part-water-splash-callback)
|
|
(t2-0 #f)
|
|
(t3-0 *launch-matrix*)
|
|
)
|
|
(set! (-> t3-0 trans quad) (-> arg1 quad))
|
|
((the-as (function object object object object object object object object none) t9-2)
|
|
a0-3
|
|
a1-3
|
|
a2-5
|
|
a3-1
|
|
t0-0
|
|
arg0
|
|
t2-0
|
|
t3-0
|
|
)
|
|
)
|
|
(-> s5-0 ppointer)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defun rings-water-spawn ((arg0 float) (arg1 vector) (arg2 vector) (arg3 float) (arg4 float))
|
|
(let* ((v1-0 arg2)
|
|
(f30-0 (sqrtf (+ (* (-> v1-0 x) (-> v1-0 x)) (* (-> v1-0 z) (-> v1-0 z)))))
|
|
)
|
|
(set! (-> *part-id-table* 506 init-specs 4 initial-valuef) (+ 24576.0 arg0))
|
|
(set! (-> *part-id-table* 506 init-specs 19 initial-valuef) (+ 49152.0 arg0))
|
|
(set! (-> *part-id-table* 506 init-specs 1 initial-valuef) (* 0.0000036621095 f30-0))
|
|
(set! (-> *part-id-table* 506 init-specs 2 initial-valuef) (* 0.1 f30-0))
|
|
(set! (-> *part-id-table* 506 init-specs 13 initial-valuef) 0.7111111)
|
|
(set! (-> *part-id-table* 506 init-specs 3 initial-valuef) arg3)
|
|
(set! (-> *part-id-table* 506 init-specs 5 initial-valuef) arg3)
|
|
(launch-particles :system *sp-particle-system-3d* (-> *part-id-table* 506) arg1)
|
|
(set! (-> *part-id-table* 509 init-specs 1 initial-valuef) (* 0.000004150391 f30-0))
|
|
(set! (-> *part-id-table* 509 init-specs 18 initial-valuef) arg0)
|
|
(launch-particles :system *sp-particle-system-3d* (-> *part-id-table* 509) arg1)
|
|
(when (< f30-0 4096.0)
|
|
(set! (-> *part-id-table* 504 init-specs 2 random-rangef) arg4)
|
|
(launch-particles :system *sp-particle-system-3d* (-> *part-id-table* 504) arg1)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defmethod spawn-ripples ((this water-control) (arg0 float) (arg1 vector) (arg2 int) (arg3 vector) (arg4 symbol))
|
|
(when (and (logtest? (water-flags part-splash) (-> this flags)) (logtest? (water-flags part-water) (-> this flags)))
|
|
(let ((s4-1 (vector+float*! (new 'stack-no-clear 'vector) arg1 arg3 0.05)))
|
|
(set! (-> s4-1 y) (+ 40.96 (-> this surface-height)))
|
|
(if (time-elapsed? (-> this distort-time) (seconds 0.1))
|
|
(splash-spawn arg0 s4-1 arg2)
|
|
)
|
|
(when (and arg4 (time-elapsed? (-> this distort-time) (seconds 0.3)))
|
|
(set-time! (-> this distort-time))
|
|
(let ((s3-1 (process-spawn
|
|
manipy
|
|
:init manipy-init
|
|
s4-1
|
|
(-> this process entity)
|
|
(art-group-get-by-name *level* "skel-generic-ripples" (the-as (pointer uint32) #f))
|
|
#f
|
|
0
|
|
:to (-> this process)
|
|
)
|
|
)
|
|
)
|
|
(when s3-1
|
|
(send-event (ppointer->process s3-1) 'anim-mode 'play1)
|
|
(send-event (ppointer->process s3-1) 'anim "idle")
|
|
(let ((f0-4 (fmax 0.6 (fmin 1.0 (* 2.0 arg0)))))
|
|
(set-vector! (-> (the-as process-drawable (-> s3-1 0)) root scale) f0-4 0.5 f0-4 1.0)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
0
|
|
(none)
|
|
)
|
|
|
|
(defun water-info<-region ((arg0 water-info) (arg1 drawable-region-prim) (arg2 collide-shape) (arg3 collide-action))
|
|
(set! (-> arg0 flags) (water-flags))
|
|
(set! (-> arg0 handle) (the-as handle #f))
|
|
(set! (-> arg0 depth) 0.0)
|
|
(let ((s2-0 (the-as object (-> arg1 region on-inside))))
|
|
(set! s2-0 (cond
|
|
((= (the-as symbol (-> (the-as pair s2-0) car)) 'water)
|
|
(empty)
|
|
s2-0
|
|
)
|
|
(else
|
|
(script-eval (the-as pair s2-0))
|
|
)
|
|
)
|
|
)
|
|
(let ((a0-4 (-> arg2 root-prim)))
|
|
(when s2-0
|
|
(set! (-> arg0 trans quad) (-> a0-4 prim-core world-sphere quad))
|
|
(set-vector! (-> arg0 normal) 0.0 1.0 0.0 1.0)
|
|
(set! (-> arg0 prim) arg1)
|
|
(case (-> (the-as pair (-> (the-as pair s2-0) cdr)) car)
|
|
(('height)
|
|
(set! (-> arg0 flags) (water-flags active))
|
|
(set! (-> arg0 trans y)
|
|
(* 4096.0 (command-get-float (-> (the-as pair (-> (the-as pair (-> (the-as pair s2-0) cdr)) cdr)) car) 0.0))
|
|
)
|
|
(set! (-> arg0 base-height) (-> arg0 trans y))
|
|
)
|
|
(('ocean)
|
|
(set! (-> arg0 flags) (water-flags active use-ocean))
|
|
(set! (-> arg0 trans y) (get-height *ocean* (-> arg0 trans) #f))
|
|
(set! (-> arg0 base-height) (get-base-height *ocean-map*))
|
|
(when (= (-> arg0 trans y) 4095996000.0)
|
|
(set! (-> arg0 flags) (water-flags))
|
|
0
|
|
)
|
|
)
|
|
(('water-anim)
|
|
(let* ((s0-0 (command-get-process
|
|
(-> (the-as pair (-> (the-as pair (-> (the-as pair s2-0) cdr)) cdr)) car)
|
|
(the-as process #f)
|
|
)
|
|
)
|
|
(s1-0 (if (type? s0-0 process-drawable)
|
|
s0-0
|
|
)
|
|
)
|
|
)
|
|
(cond
|
|
(s1-0
|
|
(set! (-> arg0 flags) (water-flags active use-water-anim))
|
|
(set! (-> arg0 trans y) (ripple-find-height (the-as process-drawable s1-0) 0 (-> arg0 trans)))
|
|
(set! (-> arg0 handle) (process->handle s1-0))
|
|
(set! (-> arg0 base-height) (-> (the-as process-drawable s1-0) root trans y))
|
|
)
|
|
(else
|
|
(set! (-> arg0 flags) (water-flags))
|
|
0
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
(when (logtest? (-> arg0 flags) (water-flags active))
|
|
(let* ((s2-1 (-> (the-as pair (-> (the-as pair (-> (the-as pair (-> (the-as pair s2-0) cdr)) cdr)) cdr)) car))
|
|
(v1-39 (-> (the-as pair s2-1) car))
|
|
)
|
|
(while (not (null? s2-1))
|
|
(cond
|
|
((= v1-39 'swim)
|
|
(logior! (-> arg0 flags) (water-flags can-swim can-ground))
|
|
)
|
|
((= v1-39 'wade)
|
|
(logior! (-> arg0 flags) (water-flags can-wade can-ground))
|
|
)
|
|
((= v1-39 'event)
|
|
(logior! (-> arg0 flags) (water-flags event))
|
|
)
|
|
((= v1-39 'tar)
|
|
(logior! (-> arg0 flags) (water-flags tar))
|
|
)
|
|
((= v1-39 'darkeco)
|
|
(logior! (-> arg0 flags) (water-flags dark-eco))
|
|
)
|
|
((= v1-39 'lava)
|
|
(logior! (-> arg0 flags) (water-flags lava))
|
|
)
|
|
((= v1-39 'mech)
|
|
(let* ((s1-1 (-> arg2 process))
|
|
(a0-39 (if (type? s1-1 process-focusable)
|
|
s1-1
|
|
)
|
|
)
|
|
)
|
|
(when (and a0-39 (not (logtest? (focus-status mech) (-> (the-as process-focusable a0-39) focus-status))))
|
|
(set! (-> arg0 flags) (water-flags))
|
|
0
|
|
)
|
|
)
|
|
(logior! (-> arg0 extra-flags) 1)
|
|
)
|
|
)
|
|
(set! s2-1 (-> (the-as pair s2-1) cdr))
|
|
(set! v1-39 (-> (the-as pair s2-1) car))
|
|
)
|
|
)
|
|
(let ((s2-2 (-> arg2 root-prim)))
|
|
(countdown (s1-2 (-> arg2 total-prims))
|
|
(when (and (nonzero? (-> s2-2 prim-core prim-type))
|
|
(logtest? (-> s2-2 prim-core action) arg3)
|
|
(nonzero? (-> s2-2 prim-core collide-with))
|
|
)
|
|
;; og:preserve-this scratchpad
|
|
(set! (-> (scratchpad-object region-prim-area) pos quad) (-> s2-2 prim-core world-sphere quad))
|
|
(if (and (within-area? arg1 (scratchpad-object region-prim-area))
|
|
(begin
|
|
(logior! (-> arg0 flags) (water-flags over-water))
|
|
(>= (-> arg0 trans y) (- (-> s2-2 prim-core world-sphere y) (-> s2-2 prim-core world-sphere w)))
|
|
)
|
|
)
|
|
(logior! (-> arg0 flags) (water-flags touch-water))
|
|
)
|
|
)
|
|
(&+! s2-2 80)
|
|
)
|
|
)
|
|
(if (and (logtest? (water-flags event) (-> arg0 flags)) (logtest? (water-flags touch-water) (-> arg0 flags)))
|
|
(send-event (handle->process (-> arg0 handle)) 'water arg0 (-> arg2 process))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
arg0
|
|
)
|
|
|
|
(defmethod water-info-init! ((this collide-shape) (arg0 water-info) (arg1 collide-action))
|
|
"Initialize a [[water-info]] with the currently loaded regions."
|
|
(local-vars (sv-80 int))
|
|
(let ((s3-0 (new 'stack 'water-info)))
|
|
(set! (-> s3-0 flags) (water-flags))
|
|
(set! (-> s3-0 handle) (the-as handle #f))
|
|
(set! (-> arg0 flags) (water-flags))
|
|
(set! (-> arg0 handle) (the-as handle #f))
|
|
(set! (-> s3-0 extra-flags) (the-as uint 0))
|
|
;; og:preserve-this scratchpad
|
|
(set! (-> (scratchpad-object region-prim-area) region-prim-list num-items) 0)
|
|
(set! (-> (scratchpad-object region-prim-area) region-inside-count) 0)
|
|
(set! (-> (scratchpad-object region-prim-area) pos quad) (-> this root-prim prim-core world-sphere quad))
|
|
(dotimes (s2-0 (-> *level* length))
|
|
(let ((v1-8 (-> *level* level s2-0)))
|
|
(when (= (-> v1-8 status) 'active)
|
|
(let ((s1-0 (-> v1-8 bsp region-trees)))
|
|
(when (nonzero? s1-0)
|
|
(let ((s0-0 (-> s1-0 length)))
|
|
(set! sv-80 0)
|
|
(let ((a0-10 (-> s1-0 sv-80)))
|
|
(while (< sv-80 s0-0)
|
|
(if (= (-> a0-10 name) 'water)
|
|
;; og:preserve-this scratchpad
|
|
(collect-regions
|
|
a0-10
|
|
(the-as sphere (-> (scratchpad-object region-prim-area) pos))
|
|
0
|
|
(-> (scratchpad-object region-prim-area) region-prim-list)
|
|
)
|
|
)
|
|
(set! sv-80 (+ sv-80 1))
|
|
(set! a0-10 (-> s1-0 sv-80))
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
)
|
|
;; og:preserve-this scratchpad
|
|
(countdown (s2-1 (-> (scratchpad-object region-prim-area) region-prim-list num-items))
|
|
(water-info<-region s3-0 (-> (scratchpad-object region-prim-area) region-prim-list items s2-1) this arg1)
|
|
(when (and (logtest? (-> s3-0 flags) (water-flags active))
|
|
(logtest? (water-flags touch-water) (-> s3-0 flags))
|
|
(not (logtest? (-> s3-0 extra-flags) 1))
|
|
)
|
|
(mem-copy! (the-as pointer arg0) (the-as pointer s3-0) 60)
|
|
(set! arg0 arg0)
|
|
(goto cfg-27)
|
|
)
|
|
(if (and (logtest? (-> s3-0 flags) (water-flags active))
|
|
(logtest? (water-flags touch-water over-water) (-> s3-0 flags))
|
|
)
|
|
(mem-copy! (the-as pointer arg0) (the-as pointer s3-0) 60)
|
|
)
|
|
)
|
|
)
|
|
(label cfg-27)
|
|
arg0
|
|
)
|