From 442d5ed5704237bcf1873c0789ffcc567cc49b35 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Thu, 2 Sep 2021 20:00:29 -0400 Subject: [PATCH] decomp: `projectiles` (#777) * decomp: close to finishing `projectile` blocked by #754 * decomp: finish `projectiles` * decompiler: Add support for `sparticle-launch-group` from static data * fix sparticle-launch-group instances * decomp: change arg0 to `entity` --- decompiler/config/all-types.gc | 86 +- .../anonymous_function_types.jsonc | 4 + .../jak1_ntsc_black_label/label_types.jsonc | 4 + .../stack_structures.jsonc | 46 + .../jak1_ntsc_black_label/type_casts.jsonc | 42 + goal_src/engine/collide/collide-shape-h.gc | 5 +- goal_src/engine/game/game-save.gc | 2 +- goal_src/engine/game/powerups.gc | 2 + goal_src/engine/game/projectiles-h.gc | 28 +- goal_src/engine/game/projectiles.gc | 3365 ++++++++++++++++ goal_src/engine/gfx/shadow/shadow-h.gc | 3 + .../engine/collide/collide-shape-h_REF.gc | 4 +- .../engine/game/projectiles-h_REF.gc | 61 +- .../reference/engine/game/projectiles_REF.gc | 3389 +++++++++++++++++ 14 files changed, 6951 insertions(+), 90 deletions(-) create mode 100644 test/decompiler/reference/engine/game/projectiles_REF.gc diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 210f4a2306..6f49f7903e 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -10017,13 +10017,13 @@ (attacker handle :offset-assert 48) (invinc-time uint64 :offset-assert 56) ;; likely useconds? (mask uint32 :offset-assert 64) - (mode symbol :offset-assert 68) + (mode symbol :offset-assert 68) (shove-back meters :offset-assert 72) (shove-up meters :offset-assert 76) (speed meters :offset-assert 80) (dist meters :offset-assert 84) (control float :offset-assert 88) - (angle symbol :offset-assert 92) + (angle symbol :offset-assert 92) (rotate-to degrees :offset-assert 96) (prev-state state :offset-assert 100) ) @@ -10937,6 +10937,7 @@ ) ) +(declare-type collide-edge-hold-list structure) (deftype collide-shape (trsqv) ((process process :offset-assert 140) (max-iteration-count uint8 :offset-assert 144) @@ -10967,7 +10968,7 @@ (dummy-37 () none 37) (dummy-38 () none 38) (dummy-39 () none 39) - (dummy-40 (_type_ object) none 40) ;; TODO - object unknown, asm function, passed to a method 15...of a type ?? + (dummy-40 (_type_ collide-edge-hold-list) none 40) ;; a guess! (dummy-41 () none 41) (dummy-42 () none 42) (dummy-43 () none 43) @@ -11017,7 +11018,7 @@ :size-assert #x1bc :flag-assert #x41000001bc (:methods - (dummy-56 () none 56) + (dummy-56 (_type_ pat-surface) none 56) (dummy-57 (_type_ vector) none 57) (dummy-58 (_type_ vector) none 58) (dummy-59 (_type_ vector uint float symbol symbol symbol) none 59) @@ -11540,7 +11541,8 @@ ;; - Types (deftype projectile (process-drawable) - ((base-trans vector :inline :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (base-trans vector :inline :offset-assert 176) (target vector :inline :offset-assert 192) (target-base vector :inline :offset-assert 208) (parent-base vector :inline :offset-assert 224) @@ -11548,8 +11550,8 @@ (base-vector vector :inline :offset-assert 256) (timeout uint64 :offset-assert 272) (options uint64 :offset-assert 280) - (last-target uint64 :offset-assert 288) - (notify-handle uint64 :offset-assert 296) + (last-target handle :offset-assert 288) + (notify-handle handle :offset-assert 296) (max-speed float :offset-assert 304) (max-turn float :offset-assert 308) (old-dist float 16 :offset-assert 312) @@ -11557,8 +11559,8 @@ (hits int32 :offset-assert 380) (max-hits int32 :offset-assert 384) (tween float :offset-assert 388) - (attack-mode basic :offset-assert 392) - (update-velocity basic :offset-assert 396) + (attack-mode symbol :offset-assert 392) + (update-velocity (function projectile none) :offset-assert 396) (counter int32 :offset-assert 400) (target-count int32 :offset-assert 404) (sound-id sound-id :offset-assert 408) @@ -11569,15 +11571,15 @@ :flag-assert #x1d0130019c ;; inherited inspect of process-drawable (:methods - (dummy-20 () none 20) - (projectile-dissipate () none 21) ;; state - (projectile-impact () none 22) ;; state - (dummy-23 () none 23) - (dummy-24 (_type_ ) none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) - (dummy-27 () none 27) - (dummy-28 () none 28) + (projectile-die () _type_ :state 20) ;; state - sound related? + (projectile-dissipate () _type_ :state 21) ;; state + (projectile-impact () _type_ :state 22) ;; state + (projectile-moving () _type_ :state 23) ;; state + (dummy-24 (_type_) none 24) + (dummy-25 (_type_) none 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 (_type_) none 28) ) ) @@ -19382,7 +19384,7 @@ ;; - Functions (define-extern target-swim-tilt function) -(define-extern projectile-init-by-other function) +(define-extern projectile-init-by-other (function entity vector vector uint handle none :behavior projectile)) ;; 4th arg is `options`, 5th is `last-target` (define-extern first-person-hud-init-by-other function) (define-extern disable-hud function) (define-extern enable-hud function) @@ -20418,7 +20420,7 @@ ;; - Functions -(define-extern eco-blue-glow function) +(define-extern eco-blue-glow (function collide-shape-prim none)) (define-extern cloud-track (function none)) @@ -20933,35 +20935,35 @@ ;; - Types -; (deftype search-info (structure) -; ((point vector :inline :offset-assert 0) -; (best-point vector :inline :offset-assert 16) -; (match-handle uint64 :offset-assert 32) -; (match basic :offset-assert 40) -; (best float :offset-assert 44) -; (radius float :offset-assert 48) -; (rating uint32 :offset-assert 52) -; (require uint32 :offset-assert 56) -; (mask uint32 :offset-assert 60) -; (rot-base vector :inline :offset-assert 64) -; (rot-range float :offset-assert 80) -; ) -; :method-count-assert 9 -; :size-assert #x54 -; :flag-assert #x900000054 -; ) +(deftype search-info (structure) + ((point vector :inline :offset-assert 0) + (best-point vector :inline :offset-assert 16) + (match-handle uint64 :offset-assert 32) + (match projectile :offset-assert 40) + (best float :offset-assert 44) + (radius float :offset-assert 48) + (rating uint32 :offset-assert 52) + (require uint32 :offset-assert 56) + (mask uint32 :offset-assert 60) + (rot-base vector :inline :offset-assert 64) + (rot-range float :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x54 + :flag-assert #x900000054 + ) ;; - Functions -(define-extern projectile-collision-reaction function) -(define-extern projectile-update-velocity-space-wars function) -(define-extern find-nearest-attackable function) +(define-extern projectile-collision-reaction (function collide-shape-moving collide-shape-intersect vector vector none)) +(define-extern projectile-update-velocity-space-wars (function projectile none)) +(define-extern find-nearest-attackable (function vector float uint uint vector float projectile)) ;; Whatever te search returns (match from search-info) (define-extern find-ground-and-draw-shadow (function vector vector float uint process float float none)) -(define-extern spawn-projectile-blue function) +(define-extern spawn-projectile-blue (function target none)) ;; - Unknowns -;;(define-extern *search-info* object) ;; unknown type +(define-extern *search-info* search-info) ;; unknown type ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc index 88f7e0565e..380672bf72 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -694,5 +694,9 @@ [7, "(function process int symbol event-message-block none :behavior beach-rock)"] ], + "projectiles": [ + [27, "(function projectile int)"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index 1234b799fd..9a368e1a5b 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -452,6 +452,10 @@ ["L341", "uint64", true] ], + "projectiles": [ + ["L150", "attack-info"] + ], + // please do not add things after this entry! git is dumb. "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index 7164e8d906..c9ea4eee6e 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -1480,5 +1480,51 @@ [48, "vector"] ], + "(anon-function 27 projectiles)": [ + [16, "vector"] + ], + + "projectile-collision-reaction": [ + [16, "vector"], + [32, "vector"], + [48, "matrix"], + [96, "vector"], + [112, "event-message-block"], + [192, "vector"], + [208, "vector"] + ], + + "(event projectile-moving projectile)": [ + [16, "event-message-block"] + ], + + "(code projectile-moving projectile)": [ + [16, "vector"] + ], + + "projectile-update-velocity-space-wars": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "(code projectile-die projectile)": [ + [16, "event-message-block"] + ], + + "projectile-init-by-other": [ + [16, "collide-edge-hold-list"] + ], + + "(method 27 projectile-yellow)": [ + [16, "vector"] + ], + + "spawn-projectile-blue": [ + [16, "vector"], + [32, "vector"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 97d0d3aa90..7def33966b 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -2577,5 +2577,47 @@ [77, "v1", "int"] ], + "(anon-function 27 projectiles)": [ + [27, "s4", "collide-shape"], + [36, "s4", "collide-shape"] + ], + + "projectile-update-velocity-space-wars": [ + [60, "a0", "target"] + ], + + "projectile-init-by-other": [ + [70, "v1", "process-drawable"], + [77, "v1", "process-drawable"] + ], + + "(method 24 projectile-yellow)": [ + [[81, 999], "s5", "sound-rpc-set-param"], + [99, "gp", "process-drawable"], + [102, "gp", "process-drawable"] + ], + + "(method 28 projectile-yellow)": [ + [26, "a0", "target"], + [118, "a1", "target"] + ], + + "(method 27 projectile-blue)": [ + [51, "v1", "process-mask"], + [87, "v1", "process-drawable"] + ], + + "spawn-projectile-blue": [ + [69, "s2", "(function process function object object object object object object)"] + ], + + "(method 28 projectile-blue)": [ + [27, "v1", "process-drawable"] + ], + + "(method 27 projectile-yellow)": [ + [70, "v1", "process-mask"] + ], + "placeholder-do-not-add-below": [] } diff --git a/goal_src/engine/collide/collide-shape-h.gc b/goal_src/engine/collide/collide-shape-h.gc index d47e4470c2..771c8f29c1 100644 --- a/goal_src/engine/collide/collide-shape-h.gc +++ b/goal_src/engine/collide/collide-shape-h.gc @@ -230,6 +230,7 @@ ) ;; an actual instance of a collision primitive. ;; it's based on a transform (q means quaternion, v means with derivatives) +(declare-type collide-edge-hold-list structure) (deftype collide-shape (trsqv) ((process process :offset-assert 140) (max-iteration-count uint8 :offset-assert 144) @@ -260,7 +261,7 @@ (dummy-37 () none 37) (dummy-38 () none 38) (dummy-39 () none 39) - (dummy-40 (_type_ object) none 40) + (dummy-40 (_type_ collide-edge-hold-list) none 40) (dummy-41 () none 41) (dummy-42 () none 42) (dummy-43 () none 43) @@ -311,7 +312,7 @@ :size-assert #x1bc :flag-assert #x41000001bc (:methods - (dummy-56 () none 56) + (dummy-56 (_type_ pat-surface) none 56) (dummy-57 (_type_ vector) none 57) (dummy-58 (_type_ vector) none 58) (dummy-59 (_type_ vector uint float symbol symbol symbol) none 59) diff --git a/goal_src/engine/game/game-save.gc b/goal_src/engine/game/game-save.gc index 28955c6773..02901e5744 100644 --- a/goal_src/engine/game/game-save.gc +++ b/goal_src/engine/game/game-save.gc @@ -1628,7 +1628,7 @@ ) ) -;; failed to figure out what this is: +;; todo floats/ints for these values. (set! (-> *part-id-table* 2662) (new 'static 'sparticle-launcher diff --git a/goal_src/engine/game/powerups.gc b/goal_src/engine/game/powerups.gc index 4c9183e5a2..3b64410508 100644 --- a/goal_src/engine/game/powerups.gc +++ b/goal_src/engine/game/powerups.gc @@ -5,3 +5,5 @@ ;; name in dgo: powerups ;; dgos: GAME, ENGINE +;; TODO - for projectiles +(define-extern eco-blue-glow (function collide-shape-prim none)) diff --git a/goal_src/engine/game/projectiles-h.gc b/goal_src/engine/game/projectiles-h.gc index df2a810e06..a42c7b0c99 100644 --- a/goal_src/engine/game/projectiles-h.gc +++ b/goal_src/engine/game/projectiles-h.gc @@ -6,7 +6,8 @@ ;; dgos: GAME, ENGINE (deftype projectile (process-drawable) - ((base-trans vector :inline :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (base-trans vector :inline :offset-assert 176) (target vector :inline :offset-assert 192) (target-base vector :inline :offset-assert 208) (parent-base vector :inline :offset-assert 224) @@ -14,8 +15,8 @@ (base-vector vector :inline :offset-assert 256) (timeout uint64 :offset-assert 272) (options uint64 :offset-assert 280) - (last-target uint64 :offset-assert 288) - (notify-handle uint64 :offset-assert 296) + (last-target handle :offset-assert 288) + (notify-handle handle :offset-assert 296) (max-speed float :offset-assert 304) (max-turn float :offset-assert 308) (old-dist float 16 :offset-assert 312) @@ -23,8 +24,8 @@ (hits int32 :offset-assert 380) (max-hits int32 :offset-assert 384) (tween float :offset-assert 388) - (attack-mode basic :offset-assert 392) - (update-velocity basic :offset-assert 396) + (attack-mode symbol :offset-assert 392) + (update-velocity (function projectile none) :offset-assert 396) (counter int32 :offset-assert 400) (target-count int32 :offset-assert 404) (sound-id sound-id :offset-assert 408) @@ -33,16 +34,17 @@ :method-count-assert 29 :size-assert #x19c :flag-assert #x1d0130019c + ;; inherited inspect of process-drawable (:methods - (dummy-20 () none 20) - (projectile-dissipate () none 21) ;; state - (projectile-impact () none 22) ;; state - (dummy-23 () none 23) + (projectile-die () _type_ :state 20) ;; state - sound related? + (projectile-dissipate () _type_ :state 21) ;; state + (projectile-impact () _type_ :state 22) ;; state + (projectile-moving () _type_ :state 23) ;; state (dummy-24 (_type_) none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) - (dummy-27 () none 27) - (dummy-28 () none 28) + (dummy-25 (_type_) none 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 (_type_) none 28) ) ) diff --git a/goal_src/engine/game/projectiles.gc b/goal_src/engine/game/projectiles.gc index 5e5759d0de..8546e7f35f 100644 --- a/goal_src/engine/game/projectiles.gc +++ b/goal_src/engine/game/projectiles.gc @@ -5,3 +5,3368 @@ ;; name in dgo: projectiles ;; dgos: GAME, ENGINE +;; definition of type search-info +(deftype search-info (structure) + ((point vector :inline :offset-assert 0) + (best-point vector :inline :offset-assert 16) + (match-handle uint64 :offset-assert 32) + (match projectile :offset-assert 40) + (best float :offset-assert 44) + (radius float :offset-assert 48) + (rating uint32 :offset-assert 52) + (require uint32 :offset-assert 56) + (mask uint32 :offset-assert 60) + (rot-base vector :inline :offset-assert 64) + (rot-range float :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x54 + :flag-assert #x900000054 + ) + +;; definition for symbol *search-info*, type search-info +(define *search-info* (new 'global 'search-info)) + +;; definition for function find-nearest-attackable +;; Used lq/sq +(defun + find-nearest-attackable + ((arg0 vector) + (arg1 float) + (arg2 uint) + (arg3 uint) + (arg4 vector) + (arg5 float) + ) + (let ((gp-0 *search-info*)) + (set! (-> gp-0 match) #f) + (set! (-> gp-0 point quad) (-> arg0 quad)) + (set! (-> gp-0 radius) arg1) + (set! (-> gp-0 best) arg1) + (set! (-> gp-0 rating) (the-as uint 0)) + (set! (-> gp-0 require) arg3) + (set! (-> gp-0 mask) arg2) + (set! (-> gp-0 rot-base quad) (-> arg4 quad)) + (set! (-> gp-0 rot-range) (if (= arg5 65536.0) + -2.0 + (cos arg5) + ) + ) + (iterate-process-tree *entity-pool* (lambda ((arg0 projectile)) + (when + (logtest? + (process-mask crate enemy attackable) + (-> arg0 mask) + ) + (let* ((gp-0 *search-info*) + (s4-0 arg0) + (s5-0 + (if + (and + (nonzero? s4-0) + (type-type? + (-> s4-0 type) + process-drawable + ) + ) + s4-0 + ) + ) + ) + (when s5-0 + (let* ((s3-0 (-> s5-0 root-override)) + (s4-1 + (if + (and + (nonzero? s3-0) + (type-type? + (-> s3-0 type) + collide-shape + ) + ) + s3-0 + ) + ) + ) + (when + (the-as collide-shape-moving s4-1) + (let* + ((s3-1 + (-> s4-1 root-prim prim-core) + ) + (f30-0 + (- + (vector-vector-distance + (-> gp-0 point) + (the-as vector s3-1) + ) + (-> s3-1 world-sphere w) + ) + ) + ) + (when + (nonzero? + (-> + s4-1 + root-prim + prim-core + collide-as + ) + ) + (let ((s4-2 0) + (v1-8 + (vector-normalize! + (vector-! + (new 'stack-no-clear 'vector + ) + (the-as vector s3-1) + (-> gp-0 point) + ) + 1.0 + ) + ) + ) + (if + (logtest? + (process-mask enemy) + (-> s5-0 mask) + ) + (set! s4-2 (logior s4-2 1)) + ) + (if + (and + (nonzero? (-> s5-0 draw)) + (logtest? + (-> s5-0 draw status) + 8 + ) + ) + (set! s4-2 (logior s4-2 2)) + ) + (let + ((a0-16 + (logand s4-2 (-> gp-0 mask)) + ) + ) + (when + (and + (>= + a0-16 + (the-as + int + (-> gp-0 rating) + ) + ) + (or + (zero? (-> gp-0 require)) + (logtest? + a0-16 + (-> gp-0 require) + ) + ) + (< f30-0 (-> gp-0 best)) + (>= + (vector-dot + v1-8 + (-> gp-0 rot-base) + ) + (-> gp-0 rot-range) + ) + ) + (set! (-> gp-0 match) s5-0) + (set! (-> gp-0 best) f30-0) + (set! + (-> gp-0 rating) + (the-as uint a0-16) + ) + a0-16 + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + *null-kernel-context* + ) + (-> gp-0 match) + ) + ) + +;; definition for function projectile-collision-reaction +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun + projectile-collision-reaction + ((arg0 collide-shape-moving) + (arg1 collide-shape-intersect) + (arg2 vector) + (arg3 vector) + ) + (local-vars + (sv-64 vector) + (sv-68 vector) + (sv-72 matrix) + (sv-80 int) + (sv-224 symbol) + ) + (with-pp + (set! sv-64 (new-stack-vector0)) + (set! sv-68 (new-stack-vector0)) + (set! sv-72 (new 'stack-no-clear 'matrix)) + (set! sv-80 0) + (set! (-> sv-72 vector 0 quad) (-> arg3 quad)) + (vector-float*! + (new 'stack-no-clear 'vector) + (-> arg1 move-vec) + (-> arg1 best-u) + ) + (TODO-RENAME-28 arg0) + (dummy-56 arg0 (-> arg1 best-tri pat)) + (case (-> arg1 best-tri pat material) + (((pat-material stopproj)) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) pp) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'die) + (send-event-function (-> arg0 process) a1-3) + ) + ) + ) + (vector-! + sv-64 + (the-as vector (-> arg1 best-from-prim prim-core)) + (-> arg1 best-tri intersect) + ) + (set! (-> sv-64 w) 1.0) + (vector-normalize! sv-64 1.0) + (set! (-> arg0 coverage) (vector-dot sv-64 (-> arg1 best-tri normal))) + (let ((v1-22 (-> sv-64 quad))) + (set! (-> sv-68 quad) v1-22) + ) + (when (= (-> arg1 best-u) 0.0) + (vector-float*! (new 'stack-no-clear 'vector) sv-68 32.0) + (TODO-RENAME-28 arg0) + ) + (set! (-> arg0 surface-normal quad) (-> sv-68 quad)) + (set! (-> arg0 poly-normal quad) (-> arg1 best-tri normal quad)) + (set! + (-> arg0 surface-angle) + (vector-dot sv-68 (-> arg0 dynam gravity-normal)) + ) + (set! + (-> arg0 poly-angle) + (vector-dot (-> arg0 poly-normal) (-> arg0 dynam gravity-normal)) + ) + (set! + (-> arg0 touch-angle) + (vector-dot + sv-68 + (vector-normalize! + (vector-negate! (new-stack-vector0) (the-as vector sv-72)) + 1.0 + ) + ) + ) + (if (< (-> arg0 poly-angle) -0.2) + (set! sv-80 (logior sv-80 16)) + ) + (set! + sv-224 + (< + (fabs (-> arg0 surface-angle)) + (-> *pat-mode-info* (-> arg0 cur-pat mode) wall-angle) + ) + ) + (if (zero? (logand (-> arg0 prev-status) 1)) + (set! + (-> arg0 ground-impact-vel) + (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal))) + ) + ) + (set! sv-80 (logior sv-80 4)) + (if (-> arg1 best-to-prim) + (set! sv-80 (logior sv-80 32)) + ) + (cond + (sv-224 + (set! sv-80 (logior sv-80 8)) + (set! (-> arg0 cur-pat mode) 1) + (set! (-> arg0 local-normal quad) (-> sv-68 quad)) + ) + (else + (set! sv-80 (logior sv-80 1)) + (set! (-> arg0 local-normal quad) (-> sv-68 quad)) + ) + ) + (vector-reflect-flat-above! arg2 (the-as vector sv-72) sv-68) + (when (and (not sv-224) (>= (-> arg0 coverage) 0.9)) + (set! sv-80 (logior sv-80 2)) + (set! (-> arg0 ground-poly-normal quad) (-> arg0 poly-normal quad)) + (when (!= (-> arg0 poly-pat mode) 1) + (set! (-> arg0 ground-pat) (-> arg0 poly-pat)) + (set! (-> arg0 ground-touch-point quad) (-> arg1 best-tri intersect quad)) + ) + ) + (logior! (-> arg0 status) sv-80) + sv-80 + (none) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 102) + (new 'static 'sparticle-launch-group + :length 34 + :duration #x12c + :linger-duration #x5dc + :name "group-yellow-eco-fireball" + :launcher + (new 'static 'inline-array sparticle-group-item 34 + (new 'static 'sparticle-group-item + :launcher #x15d + :flags #x8 + :binding #x15e + ) + (new 'static 'sparticle-group-item + :launcher #x15e + :flags #xc + :binding #x15f + ) + (new 'static 'sparticle-group-item + :launcher #x15f + :flags #xc + :binding #x160 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + ) + :bounds (new 'static 'sphere :w 12288.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 349) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 9 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x4223d70a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x4b0 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 8 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x31 + :flags #x5 + :func 'sparticle-track-root-prim + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 350) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xa + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value #x46800000 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xc + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x46a00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-range #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x19 + :flags #x2 + :initial-value -1009093618 + :random-range 1 + :random-mult #x445a740e + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x2 + :initial-value -1030643020 + :random-range 1 + :random-mult #x4311a2b4 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x4b0 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x8c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 351) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x40000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xc + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x45c00000 + :random-range #x45000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-range #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x18 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x19 + :flags #x1 + :initial-value #x43e696f2 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x2 + :initial-value -1034259442 + :random-range 1 + :random-mult #x42da740e + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x4b0 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x8c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 352) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x45c00000 + :random-range #x45000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-range #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1029449974 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x2 + :initial-value -1034259442 + :random-range 1 + :random-mult #x42da740e + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1082130432 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 54 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 353) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200f00) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f000000 + :random-range #x3f000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -1018377011 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x4499999a + :random-range #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41e00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x41a3d70a + :random-range #x423f258c + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1066512368 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1093874483 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1127835636 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1093552360 + :random-range -1080211118 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f6e147b + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 30 + :random-range #x12b + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x32 + :initial-value 90 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x33 + :flags #x6 + :initial-value #x162 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3e + :flags #x1 + :initial-value #x4499999a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 354) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (new 'static 'sp-field-init-spec + :field #x21 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 103) + (new 'static 'sparticle-launch-group + :length 20 + :duration #x258 + :linger-duration #x5dc + :name + "group-part-yellow-eco-fireball-launcher" + :launcher + (new 'static 'inline-array sparticle-group-item 20 + (new 'static 'sparticle-group-item :launcher #x163 :flags #x8) + (new 'static 'sparticle-group-item + :launcher #x164 + :flags #x2 + :period #x276 + :length #xf + ) + (new 'static 'sparticle-group-item :launcher #x165 :flags #x8) + (new 'static 'sparticle-group-item + :launcher #x166 + :flags #x8 + :binding #x167 + ) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 355) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x437f0000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1014462327 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x2 + :initial-value -955145548 + :random-range 1 + :random-mult #x4791a2b4 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 60 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 357) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x40a00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xa + :flags #x1 + :initial-value -988178022 + :random-range #x4599999a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -988178022 + :random-range #x4599999a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xc + :flags #x1 + :initial-value -988178022 + :random-range #x4599999a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x45c00000 + :random-range #x45400000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41e00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x42000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42000000 + :random-range #x42000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value #x4191a2b4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x1 + :initial-value -1034259442 + :random-range #x42da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1106140492 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1106140492 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1114910875 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x1c2 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 356) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x41400000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x4499999a + :random-range #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41e00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :random-range #x435a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1054615797 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1081571191 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1103754399 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1065151889 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f7d70a4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 60 + :random-range 59 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x46aaaaab + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :initial-value #x46800000 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 360) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x41c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x4499999a + :random-range #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41e00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :random-range #x435a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1054615797 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1081571191 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1103754399 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1065151889 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f7d70a4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 60 + :random-range 59 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 358) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x41800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x42a3d70a + :random-range #x425a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1073540497 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f7d70a4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x14a + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x468e38e4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :initial-value #x46800000 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 361) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x42000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x42a3d70a + :random-range #x425a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1073540497 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f7d70a4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x14a + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 359) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200f00) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xc + :flags #x1 + :initial-value #x43cccccd + :random-range #x444ccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x4499999a + :random-range #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41e00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x18 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x19 + :flags #x1 + :initial-value #x43da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1066512368 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x2 + :initial-value -1034259442 + :random-range 1 + :random-mult #x42da740e + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1098348407 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1102669812 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 90 + :random-range #xef + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x8c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 104) + (new 'static 'sparticle-launch-group + :length 4 + :duration #x258 + :linger-duration #x5dc + :flags #x1 + :name "group-part-yellow-eco-fireball-hit" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (new 'static 'sparticle-group-item + :launcher #x80b + :period #x258 + :length #x5 + ) + (new 'static 'sparticle-group-item + :launcher #x80c + :fade-after (meters 80.0) + :falloff-to (meters 80.0) + :period #x258 + :length #x28 + ) + (new 'static 'sparticle-group-item + :launcher #x80d + :period #x258 + :length #x14 + ) + (new 'static 'sparticle-group-item + :launcher #x80e + :fade-after (meters 120.0) + :falloff-to (meters 120.0) + :period #x258 + :length #x14 + ) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2060) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200f00) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x40c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x444ccccd + :random-range #x44cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43400000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43400000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42000000 + :random-range #x42c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x42da740e + :random-range #x43da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1059425266 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1087454402 + :random-range -1087454402 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f666666 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x12c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x4004 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x32 + :initial-value 30 + :random-range 29 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x33 + :flags #x6 + :initial-value #x80f + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3e + :flags #x1 + :initial-value #x46000000 + :random-range #x46800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2063) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 5 + (new 'static 'sp-field-init-spec + :field #x21 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x23 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1078588575 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2062) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200f00) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x40400000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x444ccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x1 + :initial-value #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x437f0000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43440000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42000000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x1 + :initial-value #x44da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1077097267 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 60 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x400c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2059) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x437f0000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43400000 + :random-range #x42000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1075877106 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 54 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x400c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2061) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x40800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x46200000 + :random-range #x45c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x437f0000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43400000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x435a740e + :random-range #x425a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value #x425a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x1 + :initial-value -1034259442 + :random-range #x42da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1077097267 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value #x3f2ec33e + :random-range #x3f2ec33e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f4ccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x1fe + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x4004 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x32 + :initial-value 42 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x33 + :flags #x6 + :initial-value #x810 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2064) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 5 + (new 'static 'sp-field-init-spec + :field #x21 + :flags #x1 + :initial-value -1089959799 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1089959799 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x23 + :flags #x1 + :initial-value -1081571191 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1089959799 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; definition for method 24 of type projectile +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 projectile ((obj projectile)) + (dummy-11 + (-> obj part) + (the-as vector (-> obj root-override root-prim prim-core)) + ) + 0 + (none) + ) + +;; definition for method 28 of type projectile +;; INFO: Return type mismatch int vs none. +(defmethod dummy-28 projectile ((obj projectile)) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate projectile-moving (projectile) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'touched) + (when (-> self attack-mode) + (when (cond + ((= (-> arg0 type) target) + (let + ((a1-1 + (new 'stack-no-clear 'event-message-block) + ) + ) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'attack) + (set! (-> a1-1 param 0) (-> arg3 param 0)) + (let + ((a0-4 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-4 mode) (-> self attack-mode)) + (set! (-> a1-1 param 1) (the-as uint a0-4)) + ) + (send-event-function arg0 a1-1) + ) + ) + (else + (let + ((a1-2 + (new 'stack-no-clear 'event-message-block) + ) + ) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 4) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! + (-> a1-2 param 1) + (the-as uint (-> self attack-mode)) + ) + (let ((v1-13 (+ *global-attack-id* 1))) + (set! *global-attack-id* v1-13) + (set! (-> a1-2 param 2) (the-as uint v1-13)) + ) + (set! (-> a1-2 param 3) (the-as uint 0)) + (send-event-function arg0 a1-2) + ) + ) + ) + (let ((v1-14 (-> self notify-handle))) + (when (handle->process v1-14) + (let + ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 2) + (set! (-> a1-7 message) 'notify) + (set! (-> a1-7 param 0) (the-as uint 'attack)) + (set! (-> a1-7 param 1) (the-as uint arg0)) + (send-event-function (-> v1-14 process 0) a1-7) + ) + ) + ) + (+! (-> self hits) 1) + (if (>= (-> self hits) (-> self max-hits)) + (go-virtual projectile-impact) + ) + ) + ) + ) + ((= v1-0 'die) + (go-virtual projectile-impact) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :code + (behavior () + (let ((gp-0 #f)) + (while + (< + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> self timeout)) + ) + (let ((s5-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s4-0 s5-0) + (if gp-0 + (go-virtual projectile-impact) + ) + (dummy-28 self) + ((-> self update-velocity) self) + (when (logtest? (-> self options) 2) + (set! + (-> self tween) + (seek (-> self tween) 1.0 (* 0.5 (-> *display* seconds-per-frame))) + ) + (let + ((f0-6 + (vector-vector-distance + (-> self root-override trans) + (-> self target) + ) + ) + ) + (cond + ((< f0-6 20480.0) + (set! + (-> self tween) + (seek (-> self tween) 1.0 (* 3.0 (-> *display* seconds-per-frame))) + ) + ) + ((< f0-6 40960.0) + (set! + (-> self tween) + (seek (-> self tween) 1.0 (-> *display* seconds-per-frame)) + ) + ) + ) + ) + ) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (set! (-> s3-0 quad) (-> self root-override trans quad)) + (dummy-33 + (-> self root-override) + (-> self root-override transv) + (-> self root-override root-prim collide-with) + ) + (set! + (-> self old-dist (-> self old-dist-count)) + (* 0.0625 (vector-vector-distance s3-0 (-> self root-override trans))) + ) + ) + (set! + (-> self old-dist-count) + (logand (+ (-> self old-dist-count) 1) 15) + ) + (let ((f0-16 0.0)) + (countdown (v1-35 16) + (+! f0-16 (-> self old-dist v1-35)) + ) + (if + (or + (and (logtest? (-> self root-override status) 8) (< f0-16 2048.0)) + (< f0-16 204.8) + ) + (set! gp-0 #t) + ) + ) + ) + (set-time-ratios *display* (the float s5-0)) + ) + (dummy-24 self) + (suspend) + ) + ) + (go-virtual projectile-dissipate) + (none) + ) + ) + +;; definition for function projectile-update-velocity-space-wars +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun projectile-update-velocity-space-wars ((arg0 projectile)) + (let + ((s5-1 + (vector-! + (new 'stack-no-clear 'vector) + (-> arg0 target) + (-> arg0 root-override trans) + ) + ) + ) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s3-0 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> arg0 root-override transv) + 1.0 + ) + ) + (f30-0 (vector-length (-> arg0 root-override transv))) + ) + (if (logtest? (-> arg0 root-override status) 4) + (vector-flatten! s5-1 s5-1 (-> arg0 root-override local-normal)) + ) + (vector-normalize-copy! s4-0 s5-1 1.0) + (if + (and + (or + (not (handle->process (-> arg0 last-target))) + (zero? + (-> + (the-as target (handle->process (-> arg0 last-target))) + control + root-prim + prim-core + collide-as + ) + ) + ) + (< (vector-dot s4-0 s3-0) 0.0) + ) + (go (method-of-object arg0 projectile-dissipate)) + ) + (vector-deg-slerp (-> arg0 root-override transv) s3-0 s4-0 (-> arg0 tween)) + (vector-normalize! (-> arg0 root-override transv) f30-0) + ) + (vector+! (-> arg0 root-override transv) (-> arg0 root-override transv) s5-1) + ) + (vector-v++! + (-> arg0 root-override transv) + (dummy-62 (-> arg0 root-override) (new-stack-vector0) 0.0) + ) + (if (< (-> arg0 max-speed) (vector-length (-> arg0 root-override transv))) + (vector-normalize! (-> arg0 root-override transv) (-> arg0 max-speed)) + ) + (if (logtest? (-> arg0 options) 1) + (set! (-> arg0 root-override transv y) -40960.0) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate projectile-impact (projectile) + :virtual #t + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 104) + -1 + #f + #f + #f + (-> self root-override root-prim prim-core) + ) + (-> gp-0 ppointer) + ) + ) + (if (nonzero? (-> self sound-id)) + (sound-stop (-> self sound-id)) + ) + (sound-play-by-name + (static-sound-name "yellow-explode") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (suspend) + (go-virtual projectile-die) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate projectile-dissipate (projectile) + :virtual #t + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 104) + -1 + #f + #f + #f + (-> self root-override root-prim prim-core) + ) + (-> gp-0 ppointer) + ) + ) + (if (nonzero? (-> self sound-id)) + (sound-stop (-> self sound-id)) + ) + (sound-play-by-name + (static-sound-name "yellow-fizzle") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (suspend) + (go-virtual projectile-die) + (none) + ) + ) + +;; definition for method 27 of type projectile +;; INFO: Return type mismatch int vs none. +(defmethod dummy-27 projectile ((obj projectile)) + 0 + (none) + ) + +;; definition for method 26 of type projectile +;; INFO: Return type mismatch int vs none. +(defmethod dummy-26 projectile ((obj projectile)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) projectile-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 1024)) + (set! (-> s4-0 collide-with) (the-as uint 2957)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 5324.8 0.0 5324.8) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> s5-0 event-self) 'touched) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 25 of type projectile +;; INFO: Return type mismatch int vs none. +(defmethod dummy-25 projectile ((obj projectile)) + (go (method-of-object obj projectile-moving)) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate projectile-die (projectile) + :virtual #t + :code + (behavior () + (let ((v1-0 (-> self notify-handle))) + (when (handle->process v1-0) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'notify) + (set! (-> a1-4 param 0) (the-as uint 'die)) + (send-event-function (-> v1-0 process 0) a1-4) + ) + ) + ) + (dummy-18 self) + (none) + ) + ) + +;; definition for method 10 of type projectile +(defmethod deactivate projectile ((obj projectile)) + (if (nonzero? (-> obj sound-id)) + (sound-stop (-> obj sound-id)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for function projectile-init-by-other +;; Used lq/sq +(defbehavior + projectile-init-by-other projectile + ((arg0 entity) (arg1 vector) (arg2 vector) (arg3 uint) (arg4 handle)) + (stack-size-set! (-> self main-thread) 512) + (set! (-> self entity) arg0) + (set! (-> self attack-mode) #f) + (set! (-> self update-velocity) projectile-update-velocity-space-wars) + (set! (-> self max-speed) 40960.0) + (set! (-> self max-turn) 18204.445) + (set! (-> self tween) 1.0) + (set! (-> self last-target) arg4) + (set! (-> self timeout) (the-as uint 1200)) + (set! (-> self options) arg3) + (set! (-> self notify-handle) (the-as handle #f)) + (countdown (v1-4 16) + (set! (-> self old-dist v1-4) 4095996000.0) + ) + (dummy-26 self) + (set! (-> self root-override dynam gravity y) 1228800.0) + (set! (-> self root-override dynam gravity-length) 1228800.0) + (set! (-> self root-override dynam gravity-max) 1228800.0) + (set! (-> self root-override trans quad) (-> arg1 quad)) + (set! (-> self base-trans quad) (-> arg1 quad)) + (set! (-> self parent-base quad) (-> arg1 quad)) + (quaternion-copy! + (-> self root-override quat) + (-> (the-as process-drawable (-> self parent 0)) root quat) + ) + (quaternion-copy! + (the-as quaternion (-> self parent-quat)) + (-> (the-as process-drawable (-> self parent 0)) root quat) + ) + (vector-identity! (-> self root-override scale)) + (set! (-> self root-override transv quad) (-> arg2 quad)) + (vector-normalize-copy! (-> self base-vector) arg2 1.0) + (vector+float*! + (-> self target) + (-> self root-override trans) + (-> self root-override transv) + 2.0 + ) + (set! (-> self target-base quad) (-> self target quad)) + (dummy-27 self) + (dummy-24 self) + (when (not (type-type? (-> self type) projectile-blue)) + (let ((a1-8 (new 'stack-no-clear 'collide-edge-hold-list))) + (set! (-> a1-8 num-allocs) (the-as uint 1)) + (set! (-> a1-8 num-attempts) (the-as uint *touching-list*)) + (dummy-40 (-> self root-override) a1-8) + ) + ) + (set! + (-> self event-hook) + (-> (method-of-object self projectile-moving) event) + ) + (dummy-25 self) + (none) + ) + +;; definition for method 27 of type projectile-yellow +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-27 projectile-yellow ((obj projectile-yellow)) + (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 204 30) + (set! (-> obj attack-mode) 'eco-yellow) + (set! (-> obj mode) 1) + (set! (-> obj max-speed) (vector-length (-> obj root-override transv))) + (set! (-> obj update-velocity) projectile-update-velocity-space-wars) + (set! (-> obj angle) (vector-y-angle (-> obj root-override transv))) + (set! (-> obj tween) 0.05) + (logior! (-> obj options) 2) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> s5-0 quad) (-> obj root-override trans quad)) + (set! + (-> obj root-override trans y) + (+ -5324.8 (-> obj root-override trans y)) + ) + (vector+float*! + (-> obj target) + (-> obj root-override trans) + (-> obj root-override transv) + 2.0 + ) + (set! (-> obj target-base quad) (-> obj target quad)) + (let + ((f30-0 + (the float (sar (shl (the int (y-angle (-> obj root-override))) 48) 48)) + ) + ) + (set! + (-> obj mask) + (the-as process-mask (logior (process-mask projectile) (-> obj mask))) + ) + (if (logtest? (-> obj options) 16) + (set! (-> obj max-hits) 1) + ) + (set! + (-> *part-id-table* 356 init-specs 18 initial-value) + (the-as int (the float (sar (shl (the int (+ -16384.0 f30-0)) 48) 48))) + ) + (set! + (-> *part-id-table* 358 init-specs 11 initial-value) + (the-as int (the float (sar (shl (the int (+ -16384.0 f30-0)) 48) 48))) + ) + (sound-play-by-name + (static-sound-name "yellow-fire") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! + (-> obj sound-id) + (sound-play-by-name + (static-sound-name "yellow-buzz") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (when (zero? (logand (-> obj options) 416)) + (let ((s4-2 (get-process *default-dead-pool* part-tracker #x4000))) + (when s4-2 + (let ((t9-10 (method-of-type part-tracker activate))) + (t9-10 + (the-as part-tracker s4-2) + obj + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s4-2 + part-tracker-init + (-> *part-group-id-table* 103) + -1 + #f + #f + #f + s5-0 + ) + (-> s4-2 ppointer) + ) + ) + ) + (set! + (-> *part-id-table* 350 init-specs 2 initial-value) + (the-as int f30-0) + ) + ) + ) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 102) obj) + ) + (when *target* + (case (-> *target* current-level name) + (('swamp) + (set! + (-> obj water) + (new 'process 'water-control obj 0 0.0 8192.0 2048.0) + ) + (set! (-> obj water flags) (the-as uint 146)) + (set! (-> obj water height) (if (logtest? (-> obj options) 64) + 8192.0 + 10240.0 + ) + ) + (logior! (-> obj root-override root-prim collide-with) 32) + ) + (('ogre) + (when (zero? (logand (-> obj options) 128)) + (set! + (-> obj water) + (new 'process 'water-control obj 0 0.0 8192.0 2048.0) + ) + (set! (-> obj water flags) (the-as uint 146)) + (set! (-> obj water height) 129024.0) + (logior! (-> obj root-override root-prim collide-with) 32) + ) + ) + (('finalboss) + (set! + (-> obj root-override trans y) + (+ 4096.0 (-> obj root-override trans y)) + ) + (set! (-> obj water) (new 'process 'water-control obj 0 0.0 8192.0 2048.0)) + (set! (-> obj water flags) (the-as uint 146)) + (set! (-> obj water height) 1977958.4) + (logior! (-> obj root-override root-prim collide-with) 32) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 26 of type projectile-yellow +;; INFO: Return type mismatch uint vs none. +(defmethod dummy-26 projectile-yellow ((obj projectile-yellow)) + (let ((t9-0 (method-of-type projectile dummy-26))) + (t9-0 obj) + ) + (logior! (-> obj root-override root-prim collide-with) 8192) + (none) + ) + +;; definition for method 24 of type projectile-yellow +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 projectile-yellow ((obj projectile-yellow)) + (with-pp + (find-ground-and-draw-shadow + (-> obj root-override trans) + (-> obj root-override shadow-pos) + 8192.0 + (the-as uint 1) + (the-as process #f) + 12288.0 + 81920.0 + ) + (if (< (-> obj root-override trans y) (-> obj root-override shadow-pos y)) + (set! + (-> obj root-override trans y) + (+ 1228.8 (-> obj root-override shadow-pos y)) + ) + ) + (dummy-47 (-> obj root-override)) + (set! (-> *part-id-table* 353 init-specs 16 initial-value) 30) + (set! (-> *part-id-table* 353 init-specs 16 random-range) 300) + (cond + ((logtest? (-> obj options) 32) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> obj state-time))) + 15 + ) + (when + (< + (- (-> *display* base-frame-counter) (the-as int (-> obj state-time))) + 150 + ) + (set! (-> *part-id-table* 353 init-specs 16 initial-value) 0) + (set! (-> *part-id-table* 353 init-specs 16 random-range) 0) + 0 + ) + (dummy-11 + (-> obj part) + (the-as vector (-> obj root-override root-prim prim-core)) + ) + ) + ) + (else + (dummy-11 + (-> obj part) + (the-as vector (-> obj root-override root-prim prim-core)) + ) + ) + ) + (let ((s5-0 (the-as sound-rpc-set-param (get-sound-buffer-entry)))) + (set! (-> s5-0 command) (sound-command set-param)) + (set! (-> s5-0 id) (-> obj sound-id)) + (let ((a1-3 (-> obj root-override trans))) + (let ((gp-1 pp)) + (when (= a1-3 #t) + (if + (and + gp-1 + (type-type? (-> gp-1 type) process-drawable) + (nonzero? (-> (the-as process-drawable gp-1) root)) + ) + (set! a1-3 (-> (the-as process-drawable gp-1) root trans)) + (set! a1-3 (the-as vector #f)) + ) + ) + ) + (sound-trans-convert (-> s5-0 parms trans) a1-3) + ) + (set! (-> s5-0 parms mask) (the-as uint 32)) + (-> s5-0 id) + ) + 0 + (none) + ) + ) + +;; definition for method 28 of type projectile-yellow +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-28 projectile-yellow ((obj projectile-yellow)) + (cond + ((or + (not (handle->process (-> obj last-target))) + (zero? + (-> + (the-as target (handle->process (-> obj last-target))) + control + root-prim + prim-core + collide-as + ) + ) + ) + (cond + ((zero? (-> obj target-count)) + (let + ((s5-0 + (find-nearest-attackable + (-> obj parent-base) + 409600.0 + (the-as uint 0) + (the-as uint 0) + (-> obj base-vector) + (if (logtest? (-> obj options) 160) + 546.13336 + 8192.0 + ) + ) + ) + ) + (let + ((s4-0 + (find-nearest-attackable + (-> obj parent-base) + 163840.0 + (the-as uint 1) + (the-as uint 0) + (-> obj base-vector) + (if (logtest? (-> obj options) 160) + 910.2222 + 8192.0 + ) + ) + ) + (v1-10 + (find-nearest-attackable + (-> obj parent-base) + 28672.0 + (the-as uint 1) + (the-as uint 0) + (-> obj base-vector) + 16384.0 + ) + ) + ) + (if s4-0 + (set! s5-0 s4-0) + ) + (if v1-10 + (set! s5-0 v1-10) + ) + ) + (set! (-> obj last-target) (process->handle s5-0)) + (when s5-0 + (set! + (-> obj target quad) + (-> s5-0 root-override root-prim prim-core world-sphere quad) + ) + (if (= (-> s5-0 type symbol) 'mother-spider) + (set! (-> obj options) (logand -2 (-> obj options))) + ) + ) + ) + ) + (else + (set! (-> obj target quad) (-> obj target-base quad)) + ) + ) + ) + (else + (let ((a1-8 (handle->process (-> obj last-target)))) + (set! + (-> obj target quad) + (-> (the-as target a1-8) control root-prim prim-core world-sphere quad) + ) + ) + (if + (and + (< + (vector-vector-xz-distance (-> obj root-override trans) (-> obj target)) + 20480.0 + ) + (< 24576.0 (fabs (- (-> obj target y) (-> obj root-override trans y)))) + ) + (set! (-> obj last-target) (the-as handle #f)) + ) + ) + ) + (+! (-> obj target-count) 1) + 0 + (none) + ) + +;; definition for method 27 of type projectile-blue +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-27 projectile-blue ((obj projectile-blue)) + (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 204 30) + (sound-play-by-name + (static-sound-name "blue-eco-on") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! (-> obj mode) 2) + (set! (-> obj max-speed) (-> *TARGET-bank* yellow-projectile-speed)) + (set! (-> obj update-velocity) projectile-update-velocity-space-wars) + (set! + (-> obj root-override trans y) + (+ -5324.8 (-> obj root-override trans y)) + ) + (vector+float*! + (-> obj target) + (-> obj root-override trans) + (-> obj root-override transv) + 2.0 + ) + (set! (-> obj target-base quad) (-> obj target quad)) + (set! + (-> obj mask) + (the-as process-mask (logior (process-mask ambient) (-> obj mask))) + ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 42) obj)) + (set! (-> obj root-override root-prim collide-with) (the-as uint 1)) + (let* ((s5-1 (handle->process (-> obj last-target))) + (v1-20 + (if (and (nonzero? s5-1) (type-type? (-> s5-1 type) process-drawable)) + s5-1 + ) + ) + ) + (if v1-20 + (set! + (-> obj joint-num) + (rand-vu-int-range + 3 + (+ (-> (the-as process-drawable v1-20) node-list length) -1) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 26 of type projectile-blue +;; INFO: Return type mismatch int vs none. +(defmethod dummy-26 projectile-blue ((obj projectile-blue)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) projectile-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 1024)) + (set! (-> s4-0 collide-with) (the-as uint 1)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 5324.8 0.0 5324.8) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> s5-0 event-self) 'touched) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for function spawn-projectile-blue +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun spawn-projectile-blue ((arg0 target)) + (local-vars (sv-48 entity)) + (with-pp + (when arg0 + (let ((s3-0 (rand-vu-int-range 3 (+ (-> arg0 node-list length) -1))) + (gp-0 (new-stack-vector0)) + ) + (set-vector! + gp-0 + (rand-vu-float-range -81920.0 81920.0) + (rand-vu-float-range -81920.0 81920.0) + (rand-vu-float-range -81920.0 81920.0) + 1.0 + ) + (let ((s4-1 (get-process *default-dead-pool* projectile-blue #x4000))) + (when s4-1 + (let ((t9-5 (method-of-type projectile-blue activate))) + (t9-5 + (the-as projectile-blue s4-1) + pp + 'projectile-blue + (the-as pointer #x70004000) + ) + ) + (let ((s2-0 run-function-in-process) + (s1-0 s4-1) + (s0-0 projectile-init-by-other) + ) + (set! sv-48 (-> pp entity)) + (let + ((a3-1 + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> arg0 node-list data s3-0) + ) + ) + (t1-0 8) + (t2-0 (process->handle pp)) + ) + ((the-as + (function process function object object object object object object) + s2-0 + ) + s1-0 + s0-0 + sv-48 + a3-1 + gp-0 + t1-0 + t2-0 + ) + ) + ) + (-> s4-1 ppointer) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 28 of type projectile-blue +;; INFO: Return type mismatch int vs none. +(defmethod dummy-28 projectile-blue ((obj projectile-blue)) + (let* ((s5-0 (handle->process (-> obj last-target))) + (v1-4 + (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) + s5-0 + ) + ) + ) + (if v1-4 + (vector<-cspace! + (-> obj target) + (-> (the-as process-drawable v1-4) node-list data (-> obj joint-num)) + ) + ) + ) + (if + (< + (vector-vector-distance (-> obj target) (-> obj root-override trans)) + 4096.0 + ) + (go (method-of-object obj projectile-impact)) + ) + 0 + (none) + ) + +;; definition for method 24 of type projectile-blue +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 projectile-blue ((obj projectile-blue)) + (if (rand-vu-percent? 0.75) + (eco-blue-glow + (the-as collide-shape-prim (-> obj root-override root-prim prim-core)) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate projectile-impact (projectile-blue) + :virtual #t + :code + (behavior () + (dummy-18 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate projectile-dissipate (projectile-blue) + :virtual #t + :code + (behavior () + (go-virtual projectile-die) + (none) + ) + ) diff --git a/goal_src/engine/gfx/shadow/shadow-h.gc b/goal_src/engine/gfx/shadow/shadow-h.gc index c763e132c3..a781692cd5 100644 --- a/goal_src/engine/gfx/shadow/shadow-h.gc +++ b/goal_src/engine/gfx/shadow/shadow-h.gc @@ -5,6 +5,9 @@ ;; name in dgo: shadow-h ;; dgos: GAME, ENGINE +;; forward def - projectiles +(define-extern find-ground-and-draw-shadow (function vector vector float uint process float float none)) + ;; definition of type fake-shadow (deftype fake-shadow (structure) ((px float :offset-assert 0) diff --git a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc index c31c8c92ca..e53d395f5b 100644 --- a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc @@ -418,7 +418,7 @@ (dummy-37 () none 37) (dummy-38 () none 38) (dummy-39 () none 39) - (dummy-40 (_type_ object) none 40) + (dummy-40 (_type_ collide-edge-hold-list) none 40) (dummy-41 () none 41) (dummy-42 () none 42) (dummy-43 () none 43) @@ -502,7 +502,7 @@ :size-assert #x1bc :flag-assert #x41000001bc (:methods - (dummy-56 () none 56) + (dummy-56 (_type_ pat-surface) none 56) (dummy-57 (_type_ vector) none 57) (dummy-58 (_type_ vector) none 58) (dummy-59 (_type_ vector uint float symbol symbol symbol) none 59) diff --git a/test/decompiler/reference/engine/game/projectiles-h_REF.gc b/test/decompiler/reference/engine/game/projectiles-h_REF.gc index 7bd5f5b90b..acce4e3bf9 100644 --- a/test/decompiler/reference/engine/game/projectiles-h_REF.gc +++ b/test/decompiler/reference/engine/game/projectiles-h_REF.gc @@ -3,43 +3,44 @@ ;; definition of type projectile (deftype projectile (process-drawable) - ((base-trans vector :inline :offset-assert 176) - (target vector :inline :offset-assert 192) - (target-base vector :inline :offset-assert 208) - (parent-base vector :inline :offset-assert 224) - (parent-quat vector :inline :offset-assert 240) - (base-vector vector :inline :offset-assert 256) - (timeout uint64 :offset-assert 272) - (options uint64 :offset-assert 280) - (last-target uint64 :offset-assert 288) - (notify-handle uint64 :offset-assert 296) - (max-speed float :offset-assert 304) - (max-turn float :offset-assert 308) - (old-dist float 16 :offset-assert 312) - (old-dist-count int32 :offset-assert 376) - (hits int32 :offset-assert 380) - (max-hits int32 :offset-assert 384) - (tween float :offset-assert 388) - (attack-mode basic :offset-assert 392) - (update-velocity basic :offset-assert 396) - (counter int32 :offset-assert 400) - (target-count int32 :offset-assert 404) - (sound-id sound-id :offset-assert 408) + ((root-override collide-shape-moving :offset 112) + (base-trans vector :inline :offset-assert 176) + (target vector :inline :offset-assert 192) + (target-base vector :inline :offset-assert 208) + (parent-base vector :inline :offset-assert 224) + (parent-quat vector :inline :offset-assert 240) + (base-vector vector :inline :offset-assert 256) + (timeout uint64 :offset-assert 272) + (options uint64 :offset-assert 280) + (last-target handle :offset-assert 288) + (notify-handle handle :offset-assert 296) + (max-speed float :offset-assert 304) + (max-turn float :offset-assert 308) + (old-dist float 16 :offset-assert 312) + (old-dist-count int32 :offset-assert 376) + (hits int32 :offset-assert 380) + (max-hits int32 :offset-assert 384) + (tween float :offset-assert 388) + (attack-mode symbol :offset-assert 392) + (update-velocity (function projectile none) :offset-assert 396) + (counter int32 :offset-assert 400) + (target-count int32 :offset-assert 404) + (sound-id sound-id :offset-assert 408) ) :heap-base #x130 :method-count-assert 29 :size-assert #x19c :flag-assert #x1d0130019c (:methods - (dummy-20 () none 20) - (projectile-dissipate () none 21) - (projectile-impact () none 22) - (dummy-23 () none 23) + (projectile-die () _type_ :state 20) + (projectile-dissipate () _type_ :state 21) + (projectile-impact () _type_ :state 22) + (projectile-moving () _type_ :state 23) (dummy-24 (_type_) none 24) - (dummy-25 () none 25) - (dummy-26 () none 26) - (dummy-27 () none 27) - (dummy-28 () none 28) + (dummy-25 (_type_) none 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 (_type_) none 28) ) ) diff --git a/test/decompiler/reference/engine/game/projectiles_REF.gc b/test/decompiler/reference/engine/game/projectiles_REF.gc new file mode 100644 index 0000000000..275427dfdd --- /dev/null +++ b/test/decompiler/reference/engine/game/projectiles_REF.gc @@ -0,0 +1,3389 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type search-info +(deftype search-info (structure) + ((point vector :inline :offset-assert 0) + (best-point vector :inline :offset-assert 16) + (match-handle uint64 :offset-assert 32) + (match projectile :offset-assert 40) + (best float :offset-assert 44) + (radius float :offset-assert 48) + (rating uint32 :offset-assert 52) + (require uint32 :offset-assert 56) + (mask uint32 :offset-assert 60) + (rot-base vector :inline :offset-assert 64) + (rot-range float :offset-assert 80) + ) + :method-count-assert 9 + :size-assert #x54 + :flag-assert #x900000054 + ) + +;; definition for method 3 of type search-info +(defmethod inspect search-info ((obj search-info)) + (format #t "[~8x] ~A~%" obj 'search-info) + (format #t "~Tpoint: ~`vector`P~%" (-> obj point)) + (format #t "~Tbest-point: ~`vector`P~%" (-> obj best-point)) + (format #t "~Tmatch-handle: ~D~%" (-> obj match-handle)) + (format #t "~Tmatch: ~A~%" (-> obj match)) + (format #t "~Tbest: ~f~%" (-> obj best)) + (format #t "~Tradius: ~f~%" (-> obj radius)) + (format #t "~Trating: ~D~%" (-> obj rating)) + (format #t "~Trequire: ~D~%" (-> obj require)) + (format #t "~Tmask: ~D~%" (-> obj mask)) + (format #t "~Trot-base: ~`vector`P~%" (-> obj rot-base)) + (format #t "~Trot-range: ~f~%" (-> obj rot-range)) + obj + ) + +;; definition for symbol *search-info*, type search-info +(define *search-info* (new 'global 'search-info)) + +;; definition for function find-nearest-attackable +;; Used lq/sq +(defun + find-nearest-attackable + ((arg0 vector) + (arg1 float) + (arg2 uint) + (arg3 uint) + (arg4 vector) + (arg5 float) + ) + (let ((gp-0 *search-info*)) + (set! (-> gp-0 match) #f) + (set! (-> gp-0 point quad) (-> arg0 quad)) + (set! (-> gp-0 radius) arg1) + (set! (-> gp-0 best) arg1) + (set! (-> gp-0 rating) (the-as uint 0)) + (set! (-> gp-0 require) arg3) + (set! (-> gp-0 mask) arg2) + (set! (-> gp-0 rot-base quad) (-> arg4 quad)) + (set! (-> gp-0 rot-range) (if (= arg5 65536.0) + -2.0 + (cos arg5) + ) + ) + (iterate-process-tree *entity-pool* (lambda ((arg0 projectile)) + (when + (logtest? + (process-mask crate enemy attackable) + (-> arg0 mask) + ) + (let* ((gp-0 *search-info*) + (s4-0 arg0) + (s5-0 + (if + (and + (nonzero? s4-0) + (type-type? + (-> s4-0 type) + process-drawable + ) + ) + s4-0 + ) + ) + ) + (when s5-0 + (let* ((s3-0 (-> s5-0 root-override)) + (s4-1 + (if + (and + (nonzero? s3-0) + (type-type? + (-> s3-0 type) + collide-shape + ) + ) + s3-0 + ) + ) + ) + (when + (the-as collide-shape-moving s4-1) + (let* + ((s3-1 + (-> s4-1 root-prim prim-core) + ) + (f30-0 + (- + (vector-vector-distance + (-> gp-0 point) + (the-as vector s3-1) + ) + (-> s3-1 world-sphere w) + ) + ) + ) + (when + (nonzero? + (-> + s4-1 + root-prim + prim-core + collide-as + ) + ) + (let ((s4-2 0) + (v1-8 + (vector-normalize! + (vector-! + (new 'stack-no-clear 'vector + ) + (the-as vector s3-1) + (-> gp-0 point) + ) + 1.0 + ) + ) + ) + (if + (logtest? + (process-mask enemy) + (-> s5-0 mask) + ) + (set! s4-2 (logior s4-2 1)) + ) + (if + (and + (nonzero? (-> s5-0 draw)) + (logtest? + (-> s5-0 draw status) + 8 + ) + ) + (set! s4-2 (logior s4-2 2)) + ) + (let + ((a0-16 + (logand s4-2 (-> gp-0 mask)) + ) + ) + (when + (and + (>= + a0-16 + (the-as + int + (-> gp-0 rating) + ) + ) + (or + (zero? (-> gp-0 require)) + (logtest? + a0-16 + (-> gp-0 require) + ) + ) + (< f30-0 (-> gp-0 best)) + (>= + (vector-dot + v1-8 + (-> gp-0 rot-base) + ) + (-> gp-0 rot-range) + ) + ) + (set! (-> gp-0 match) s5-0) + (set! (-> gp-0 best) f30-0) + (set! + (-> gp-0 rating) + (the-as uint a0-16) + ) + a0-16 + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + *null-kernel-context* + ) + (-> gp-0 match) + ) + ) + +;; definition for function projectile-collision-reaction +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun + projectile-collision-reaction + ((arg0 collide-shape-moving) + (arg1 collide-shape-intersect) + (arg2 vector) + (arg3 vector) + ) + (local-vars + (sv-64 vector) + (sv-68 vector) + (sv-72 matrix) + (sv-80 int) + (sv-224 symbol) + ) + (with-pp + (set! sv-64 (new-stack-vector0)) + (set! sv-68 (new-stack-vector0)) + (set! sv-72 (new 'stack-no-clear 'matrix)) + (set! sv-80 0) + (set! (-> sv-72 vector 0 quad) (-> arg3 quad)) + (vector-float*! + (new 'stack-no-clear 'vector) + (-> arg1 move-vec) + (-> arg1 best-u) + ) + (TODO-RENAME-28 arg0) + (dummy-56 arg0 (-> arg1 best-tri pat)) + (case (-> arg1 best-tri pat material) + (((pat-material stopproj)) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) pp) + (set! (-> a1-3 num-params) 0) + (set! (-> a1-3 message) 'die) + (send-event-function (-> arg0 process) a1-3) + ) + ) + ) + (vector-! + sv-64 + (the-as vector (-> arg1 best-from-prim prim-core)) + (-> arg1 best-tri intersect) + ) + (set! (-> sv-64 w) 1.0) + (vector-normalize! sv-64 1.0) + (set! (-> arg0 coverage) (vector-dot sv-64 (-> arg1 best-tri normal))) + (let ((v1-22 (-> sv-64 quad))) + (set! (-> sv-68 quad) v1-22) + ) + (when (= (-> arg1 best-u) 0.0) + (vector-float*! (new 'stack-no-clear 'vector) sv-68 32.0) + (TODO-RENAME-28 arg0) + ) + (set! (-> arg0 surface-normal quad) (-> sv-68 quad)) + (set! (-> arg0 poly-normal quad) (-> arg1 best-tri normal quad)) + (set! + (-> arg0 surface-angle) + (vector-dot sv-68 (-> arg0 dynam gravity-normal)) + ) + (set! + (-> arg0 poly-angle) + (vector-dot (-> arg0 poly-normal) (-> arg0 dynam gravity-normal)) + ) + (set! + (-> arg0 touch-angle) + (vector-dot + sv-68 + (vector-normalize! + (vector-negate! (new-stack-vector0) (the-as vector sv-72)) + 1.0 + ) + ) + ) + (if (< (-> arg0 poly-angle) -0.2) + (set! sv-80 (logior sv-80 16)) + ) + (set! + sv-224 + (< + (fabs (-> arg0 surface-angle)) + (-> *pat-mode-info* (-> arg0 cur-pat mode) wall-angle) + ) + ) + (if (zero? (logand (-> arg0 prev-status) 1)) + (set! + (-> arg0 ground-impact-vel) + (- (vector-dot (-> arg0 transv) (-> arg0 dynam gravity-normal))) + ) + ) + (set! sv-80 (logior sv-80 4)) + (if (-> arg1 best-to-prim) + (set! sv-80 (logior sv-80 32)) + ) + (cond + (sv-224 + (set! sv-80 (logior sv-80 8)) + (set! (-> arg0 cur-pat mode) 1) + (set! (-> arg0 local-normal quad) (-> sv-68 quad)) + ) + (else + (set! sv-80 (logior sv-80 1)) + (set! (-> arg0 local-normal quad) (-> sv-68 quad)) + ) + ) + (vector-reflect-flat-above! arg2 (the-as vector sv-72) sv-68) + (when (and (not sv-224) (>= (-> arg0 coverage) 0.9)) + (set! sv-80 (logior sv-80 2)) + (set! (-> arg0 ground-poly-normal quad) (-> arg0 poly-normal quad)) + (when (!= (-> arg0 poly-pat mode) 1) + (set! (-> arg0 ground-pat) (-> arg0 poly-pat)) + (set! (-> arg0 ground-touch-point quad) (-> arg1 best-tri intersect quad)) + ) + ) + (logior! (-> arg0 status) sv-80) + sv-80 + (none) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 102) + (new 'static 'sparticle-launch-group + :length 34 + :duration #x12c + :linger-duration #x5dc + :name "group-yellow-eco-fireball" + :launcher + (new 'static 'inline-array sparticle-group-item 34 + (new 'static 'sparticle-group-item + :launcher #x15d + :flags #x8 + :binding #x15e + ) + (new 'static 'sparticle-group-item + :launcher #x15e + :flags #xc + :binding #x15f + ) + (new 'static 'sparticle-group-item + :launcher #x15f + :flags #xc + :binding #x160 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x160 + :flags #x4 + :binding #x161 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + (new 'static 'sparticle-group-item + :launcher #x161 + :fade-after (meters 100.0) + :falloff-to (meters 100.0) + :flags #x4 + ) + ) + :bounds (new 'static 'sphere :w 12288.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 349) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 9 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x4223d70a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x4b0 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 8 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x31 + :flags #x5 + :func 'sparticle-track-root-prim + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 350) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xa + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value #x46800000 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xc + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x46a00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-range #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x19 + :flags #x2 + :initial-value -1009093618 + :random-range 1 + :random-mult #x445a740e + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x2 + :initial-value -1030643020 + :random-range 1 + :random-mult #x4311a2b4 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x4b0 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x8c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 351) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x40000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xc + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x45c00000 + :random-range #x45000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-range #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x18 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x19 + :flags #x1 + :initial-value #x43e696f2 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x2 + :initial-value -1034259442 + :random-range 1 + :random-mult #x42da740e + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x4b0 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x8c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 352) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x45c00000 + :random-range #x45000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43000000 + :random-range #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1029449974 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x2 + :initial-value -1034259442 + :random-range 1 + :random-mult #x42da740e + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1082130432 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 54 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 353) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200f00) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f000000 + :random-range #x3f000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -1018377011 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x4499999a + :random-range #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41e00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x41a3d70a + :random-range #x423f258c + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1066512368 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1093874483 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1127835636 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1093552360 + :random-range -1080211118 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f6e147b + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 30 + :random-range #x12b + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x32 + :initial-value 90 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x33 + :flags #x6 + :initial-value #x162 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3e + :flags #x1 + :initial-value #x4499999a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 354) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (new 'static 'sp-field-init-spec + :field #x21 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 103) + (new 'static 'sparticle-launch-group + :length 20 + :duration #x258 + :linger-duration #x5dc + :name + "group-part-yellow-eco-fireball-launcher" + :launcher + (new 'static 'inline-array sparticle-group-item 20 + (new 'static 'sparticle-group-item :launcher #x163 :flags #x8) + (new 'static 'sparticle-group-item + :launcher #x164 + :flags #x2 + :period #x276 + :length #xf + ) + (new 'static 'sparticle-group-item :launcher #x165 :flags #x8) + (new 'static 'sparticle-group-item + :launcher #x166 + :flags #x8 + :binding #x167 + ) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + (new 'static 'sparticle-group-item :launcher #x167 :flags #xc) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 355) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x437f0000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1014462327 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x2 + :initial-value -955145548 + :random-range 1 + :random-mult #x4791a2b4 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 60 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 357) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x40a00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xa + :flags #x1 + :initial-value -988178022 + :random-range #x4599999a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :initial-value -988178022 + :random-range #x4599999a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xc + :flags #x1 + :initial-value -988178022 + :random-range #x4599999a + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x45c00000 + :random-range #x45400000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41e00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x42000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42000000 + :random-range #x42000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value #x4191a2b4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x1 + :initial-value -1034259442 + :random-range #x42da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1106140492 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1106140492 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1114910875 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x1c2 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 356) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x41400000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x4499999a + :random-range #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41e00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :random-range #x435a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1054615797 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1081571191 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1103754399 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1065151889 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f7d70a4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 60 + :random-range 59 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x46aaaaab + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :initial-value #x46800000 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 360) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x41c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x4499999a + :random-range #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41e00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :random-range #x435a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1054615797 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1081571191 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1103754399 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1065151889 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f7d70a4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 60 + :random-range 59 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 358) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x41800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x42a3d70a + :random-range #x425a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1073540497 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f7d70a4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x14a + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x468e38e4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :initial-value #x46800000 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 361) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x42000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x42a3d70a + :random-range #x425a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1073540497 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f7d70a4 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x14a + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value 12 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 359) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200f00) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xb + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xc + :flags #x1 + :initial-value #x43cccccd + :random-range #x444ccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x4499999a + :random-range #x43cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x42c80000 + :random-range #x41e00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x18 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x19 + :flags #x1 + :initial-value #x43da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1066512368 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x2 + :initial-value -1034259442 + :random-range 1 + :random-mult #x42da740e + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1098348407 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1102669812 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 90 + :random-range #xef + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x8c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 104) + (new 'static 'sparticle-launch-group + :length 4 + :duration #x258 + :linger-duration #x5dc + :flags #x1 + :name "group-part-yellow-eco-fireball-hit" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (new 'static 'sparticle-group-item + :launcher #x80b + :period #x258 + :length #x5 + ) + (new 'static 'sparticle-group-item + :launcher #x80c + :fade-after (meters 80.0) + :falloff-to (meters 80.0) + :period #x258 + :length #x28 + ) + (new 'static 'sparticle-group-item + :launcher #x80d + :period #x258 + :length #x14 + ) + (new 'static 'sparticle-group-item + :launcher #x80e + :fade-after (meters 120.0) + :falloff-to (meters 120.0) + :period #x258 + :length #x14 + ) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2060) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200f00) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x40c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x444ccccd + :random-range #x44cccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x43400000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43400000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42000000 + :random-range #x42c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x42da740e + :random-range #x43da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value -1059425266 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value -1087454402 + :random-range -1087454402 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f666666 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x12c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x4004 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x32 + :initial-value 30 + :random-range 29 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x33 + :flags #x6 + :initial-value #x80f + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3e + :flags #x1 + :initial-value #x46000000 + :random-range #x46800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2063) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 5 + (new 'static 'sp-field-init-spec + :field #x21 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x23 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1078588575 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2062) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200f00) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x40400000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x444ccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x1 + :initial-value #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x437f0000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43440000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42000000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x1 + :initial-value #x44da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1077097267 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 60 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x400c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2059) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x201200) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x3f800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x437f0000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43400000 + :random-range #x42000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1075877106 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value 54 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x400c + :random-mult 1 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2061) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (new 'static 'sp-field-init-spec :field #x1 :initial-value #x200000) + (new 'static 'sp-field-init-spec + :field #x6 + :flags #x1 + :initial-value #x40800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #xd + :flags #x1 + :initial-value #x46200000 + :random-range #x45c00000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x10 + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x11 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x12 + :flags #x1 + :initial-value #x437f0000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x13 + :flags #x1 + :initial-value #x43400000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x14 + :flags #x1 + :initial-value #x43000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x15 + :flags #x1 + :initial-value #x42800000 + :random-range #x42800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1a + :flags #x1 + :initial-value #x435a740e + :random-range #x425a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1c + :flags #x1 + :initial-value #x425a740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x1f + :flags #x1 + :initial-value -1034259442 + :random-range #x42da740e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x20 + :flags #x3 + :initial-value -4 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1077097267 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x26 + :flags #x1 + :initial-value #x3f2ec33e + :random-range #x3f2ec33e + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2d + :flags #x1 + :initial-value #x3f4ccccd + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x2e + :initial-value #x1fe + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x2f + :initial-value #x4004 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x32 + :initial-value 42 + :random-mult 1 + ) + (new 'static 'sp-field-init-spec + :field #x33 + :flags #x6 + :initial-value #x810 + ) + (new 'static 'sp-field-init-spec + :field #x3a + :flags #x1 + :random-range #x47000000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x3b + :flags #x1 + :random-range #x47800000 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 2064) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 5 + (new 'static 'sp-field-init-spec + :field #x21 + :flags #x1 + :initial-value -1089959799 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x22 + :flags #x1 + :initial-value -1089959799 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x23 + :flags #x1 + :initial-value -1081571191 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec + :field #x24 + :flags #x1 + :initial-value -1089959799 + :random-mult #x3f800000 + ) + (new 'static 'sp-field-init-spec :field #x43) + ) + ) + ) + +;; definition for method 24 of type projectile +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 projectile ((obj projectile)) + (dummy-11 + (-> obj part) + (the-as vector (-> obj root-override root-prim prim-core)) + ) + 0 + (none) + ) + +;; definition for method 28 of type projectile +;; INFO: Return type mismatch int vs none. +(defmethod dummy-28 projectile ((obj projectile)) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate projectile-moving (projectile) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'touched) + (when (-> self attack-mode) + (when (cond + ((= (-> arg0 type) target) + (let + ((a1-1 + (new 'stack-no-clear 'event-message-block) + ) + ) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'attack) + (set! (-> a1-1 param 0) (-> arg3 param 0)) + (let + ((a0-4 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-4 mode) (-> self attack-mode)) + (set! (-> a1-1 param 1) (the-as uint a0-4)) + ) + (send-event-function arg0 a1-1) + ) + ) + (else + (let + ((a1-2 + (new 'stack-no-clear 'event-message-block) + ) + ) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 4) + (set! (-> a1-2 message) 'attack) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (set! + (-> a1-2 param 1) + (the-as uint (-> self attack-mode)) + ) + (let ((v1-13 (+ *global-attack-id* 1))) + (set! *global-attack-id* v1-13) + (set! (-> a1-2 param 2) (the-as uint v1-13)) + ) + (set! (-> a1-2 param 3) (the-as uint 0)) + (send-event-function arg0 a1-2) + ) + ) + ) + (let ((v1-14 (-> self notify-handle))) + (when (handle->process v1-14) + (let + ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 2) + (set! (-> a1-7 message) 'notify) + (set! (-> a1-7 param 0) (the-as uint 'attack)) + (set! (-> a1-7 param 1) (the-as uint arg0)) + (send-event-function (-> v1-14 process 0) a1-7) + ) + ) + ) + (+! (-> self hits) 1) + (if (>= (-> self hits) (-> self max-hits)) + (go-virtual projectile-impact) + ) + ) + ) + ) + ((= v1-0 'die) + (go-virtual projectile-impact) + ) + ) + ) + ) + ) + :enter + (behavior () + (set! + (-> self state-time) + (the-as seconds (-> *display* base-frame-counter)) + ) + (none) + ) + :code + (behavior () + (let ((gp-0 #f)) + (while + (< + (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) + (the-as int (-> self timeout)) + ) + (let ((s5-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s4-0 s5-0) + (if gp-0 + (go-virtual projectile-impact) + ) + (dummy-28 self) + ((-> self update-velocity) self) + (when (logtest? (-> self options) 2) + (set! + (-> self tween) + (seek (-> self tween) 1.0 (* 0.5 (-> *display* seconds-per-frame))) + ) + (let + ((f0-6 + (vector-vector-distance + (-> self root-override trans) + (-> self target) + ) + ) + ) + (cond + ((< f0-6 20480.0) + (set! + (-> self tween) + (seek (-> self tween) 1.0 (* 3.0 (-> *display* seconds-per-frame))) + ) + ) + ((< f0-6 40960.0) + (set! + (-> self tween) + (seek (-> self tween) 1.0 (-> *display* seconds-per-frame)) + ) + ) + ) + ) + ) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (set! (-> s3-0 quad) (-> self root-override trans quad)) + (dummy-33 + (-> self root-override) + (-> self root-override transv) + (-> self root-override root-prim collide-with) + ) + (set! + (-> self old-dist (-> self old-dist-count)) + (* 0.0625 (vector-vector-distance s3-0 (-> self root-override trans))) + ) + ) + (set! + (-> self old-dist-count) + (logand (+ (-> self old-dist-count) 1) 15) + ) + (let ((f0-16 0.0)) + (countdown (v1-35 16) + (+! f0-16 (-> self old-dist v1-35)) + ) + (if + (or + (and (logtest? (-> self root-override status) 8) (< f0-16 2048.0)) + (< f0-16 204.8) + ) + (set! gp-0 #t) + ) + ) + ) + (set-time-ratios *display* (the float s5-0)) + ) + (dummy-24 self) + (suspend) + ) + ) + (go-virtual projectile-dissipate) + (none) + ) + ) + +;; definition for function projectile-update-velocity-space-wars +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun projectile-update-velocity-space-wars ((arg0 projectile)) + (let + ((s5-1 + (vector-! + (new 'stack-no-clear 'vector) + (-> arg0 target) + (-> arg0 root-override trans) + ) + ) + ) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s3-0 + (vector-normalize-copy! + (new 'stack-no-clear 'vector) + (-> arg0 root-override transv) + 1.0 + ) + ) + (f30-0 (vector-length (-> arg0 root-override transv))) + ) + (if (logtest? (-> arg0 root-override status) 4) + (vector-flatten! s5-1 s5-1 (-> arg0 root-override local-normal)) + ) + (vector-normalize-copy! s4-0 s5-1 1.0) + (if + (and + (or + (not (handle->process (-> arg0 last-target))) + (zero? + (-> + (the-as target (handle->process (-> arg0 last-target))) + control + root-prim + prim-core + collide-as + ) + ) + ) + (< (vector-dot s4-0 s3-0) 0.0) + ) + (go (method-of-object arg0 projectile-dissipate)) + ) + (vector-deg-slerp (-> arg0 root-override transv) s3-0 s4-0 (-> arg0 tween)) + (vector-normalize! (-> arg0 root-override transv) f30-0) + ) + (vector+! (-> arg0 root-override transv) (-> arg0 root-override transv) s5-1) + ) + (vector-v++! + (-> arg0 root-override transv) + (dummy-62 (-> arg0 root-override) (new-stack-vector0) 0.0) + ) + (if (< (-> arg0 max-speed) (vector-length (-> arg0 root-override transv))) + (vector-normalize! (-> arg0 root-override transv) (-> arg0 max-speed)) + ) + (if (logtest? (-> arg0 options) 1) + (set! (-> arg0 root-override transv y) -40960.0) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate projectile-impact (projectile) + :virtual #t + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 104) + -1 + #f + #f + #f + (-> self root-override root-prim prim-core) + ) + (-> gp-0 ppointer) + ) + ) + (if (nonzero? (-> self sound-id)) + (sound-stop (-> self sound-id)) + ) + (sound-play-by-name + (static-sound-name "yellow-explode") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (suspend) + (go-virtual projectile-die) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate projectile-dissipate (projectile) + :virtual #t + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 + (the-as part-tracker gp-0) + *entity-pool* + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 104) + -1 + #f + #f + #f + (-> self root-override root-prim prim-core) + ) + (-> gp-0 ppointer) + ) + ) + (if (nonzero? (-> self sound-id)) + (sound-stop (-> self sound-id)) + ) + (sound-play-by-name + (static-sound-name "yellow-fizzle") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (suspend) + (go-virtual projectile-die) + (none) + ) + ) + +;; definition for method 27 of type projectile +;; INFO: Return type mismatch int vs none. +(defmethod dummy-27 projectile ((obj projectile)) + 0 + (none) + ) + +;; definition for method 26 of type projectile +;; INFO: Return type mismatch int vs none. +(defmethod dummy-26 projectile ((obj projectile)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) projectile-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 1024)) + (set! (-> s4-0 collide-with) (the-as uint 2957)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 5324.8 0.0 5324.8) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> s5-0 event-self) 'touched) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 25 of type projectile +;; INFO: Return type mismatch int vs none. +(defmethod dummy-25 projectile ((obj projectile)) + (go (method-of-object obj projectile-moving)) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate projectile-die (projectile) + :virtual #t + :code + (behavior () + (let ((v1-0 (-> self notify-handle))) + (when (handle->process v1-0) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 1) + (set! (-> a1-4 message) 'notify) + (set! (-> a1-4 param 0) (the-as uint 'die)) + (send-event-function (-> v1-0 process 0) a1-4) + ) + ) + ) + (dummy-18 self) + (none) + ) + ) + +;; definition for method 10 of type projectile +(defmethod deactivate projectile ((obj projectile)) + (if (nonzero? (-> obj sound-id)) + (sound-stop (-> obj sound-id)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for function projectile-init-by-other +;; Used lq/sq +(defbehavior + projectile-init-by-other projectile + ((arg0 entity) (arg1 vector) (arg2 vector) (arg3 uint) (arg4 handle)) + (stack-size-set! (-> self main-thread) 512) + (set! (-> self entity) arg0) + (set! (-> self attack-mode) #f) + (set! (-> self update-velocity) projectile-update-velocity-space-wars) + (set! (-> self max-speed) 40960.0) + (set! (-> self max-turn) 18204.445) + (set! (-> self tween) 1.0) + (set! (-> self last-target) arg4) + (set! (-> self timeout) (the-as uint 1200)) + (set! (-> self options) arg3) + (set! (-> self notify-handle) (the-as handle #f)) + (countdown (v1-4 16) + (set! (-> self old-dist v1-4) 4095996000.0) + ) + (dummy-26 self) + (set! (-> self root-override dynam gravity y) 1228800.0) + (set! (-> self root-override dynam gravity-length) 1228800.0) + (set! (-> self root-override dynam gravity-max) 1228800.0) + (set! (-> self root-override trans quad) (-> arg1 quad)) + (set! (-> self base-trans quad) (-> arg1 quad)) + (set! (-> self parent-base quad) (-> arg1 quad)) + (quaternion-copy! + (-> self root-override quat) + (-> (the-as process-drawable (-> self parent 0)) root quat) + ) + (quaternion-copy! + (the-as quaternion (-> self parent-quat)) + (-> (the-as process-drawable (-> self parent 0)) root quat) + ) + (vector-identity! (-> self root-override scale)) + (set! (-> self root-override transv quad) (-> arg2 quad)) + (vector-normalize-copy! (-> self base-vector) arg2 1.0) + (vector+float*! + (-> self target) + (-> self root-override trans) + (-> self root-override transv) + 2.0 + ) + (set! (-> self target-base quad) (-> self target quad)) + (dummy-27 self) + (dummy-24 self) + (when (not (type-type? (-> self type) projectile-blue)) + (let ((a1-8 (new 'stack-no-clear 'collide-edge-hold-list))) + (set! (-> a1-8 num-allocs) (the-as uint 1)) + (set! (-> a1-8 num-attempts) (the-as uint *touching-list*)) + (dummy-40 (-> self root-override) a1-8) + ) + ) + (set! + (-> self event-hook) + (-> (method-of-object self projectile-moving) event) + ) + (dummy-25 self) + (none) + ) + +;; definition for method 27 of type projectile-yellow +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-27 projectile-yellow ((obj projectile-yellow)) + (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 204 30) + (set! (-> obj attack-mode) 'eco-yellow) + (set! (-> obj mode) 1) + (set! (-> obj max-speed) (vector-length (-> obj root-override transv))) + (set! (-> obj update-velocity) projectile-update-velocity-space-wars) + (set! (-> obj angle) (vector-y-angle (-> obj root-override transv))) + (set! (-> obj tween) 0.05) + (logior! (-> obj options) 2) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> s5-0 quad) (-> obj root-override trans quad)) + (set! + (-> obj root-override trans y) + (+ -5324.8 (-> obj root-override trans y)) + ) + (vector+float*! + (-> obj target) + (-> obj root-override trans) + (-> obj root-override transv) + 2.0 + ) + (set! (-> obj target-base quad) (-> obj target quad)) + (let + ((f30-0 + (the float (sar (shl (the int (y-angle (-> obj root-override))) 48) 48)) + ) + ) + (set! + (-> obj mask) + (the-as process-mask (logior (process-mask projectile) (-> obj mask))) + ) + (if (logtest? (-> obj options) 16) + (set! (-> obj max-hits) 1) + ) + (set! + (-> *part-id-table* 356 init-specs 18 initial-value) + (the-as int (the float (sar (shl (the int (+ -16384.0 f30-0)) 48) 48))) + ) + (set! + (-> *part-id-table* 358 init-specs 11 initial-value) + (the-as int (the float (sar (shl (the int (+ -16384.0 f30-0)) 48) 48))) + ) + (sound-play-by-name + (static-sound-name "yellow-fire") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! + (-> obj sound-id) + (sound-play-by-name + (static-sound-name "yellow-buzz") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + ) + (when (zero? (logand (-> obj options) 416)) + (let ((s4-2 (get-process *default-dead-pool* part-tracker #x4000))) + (when s4-2 + (let ((t9-10 (method-of-type part-tracker activate))) + (t9-10 + (the-as part-tracker s4-2) + obj + 'part-tracker + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s4-2 + part-tracker-init + (-> *part-group-id-table* 103) + -1 + #f + #f + #f + s5-0 + ) + (-> s4-2 ppointer) + ) + ) + ) + (set! + (-> *part-id-table* 350 init-specs 2 initial-value) + (the-as int f30-0) + ) + ) + ) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 102) obj) + ) + (when *target* + (case (-> *target* current-level name) + (('swamp) + (set! + (-> obj water) + (new 'process 'water-control obj 0 0.0 8192.0 2048.0) + ) + (set! (-> obj water flags) (the-as uint 146)) + (set! (-> obj water height) (if (logtest? (-> obj options) 64) + 8192.0 + 10240.0 + ) + ) + (logior! (-> obj root-override root-prim collide-with) 32) + ) + (('ogre) + (when (zero? (logand (-> obj options) 128)) + (set! + (-> obj water) + (new 'process 'water-control obj 0 0.0 8192.0 2048.0) + ) + (set! (-> obj water flags) (the-as uint 146)) + (set! (-> obj water height) 129024.0) + (logior! (-> obj root-override root-prim collide-with) 32) + ) + ) + (('finalboss) + (set! + (-> obj root-override trans y) + (+ 4096.0 (-> obj root-override trans y)) + ) + (set! (-> obj water) (new 'process 'water-control obj 0 0.0 8192.0 2048.0)) + (set! (-> obj water flags) (the-as uint 146)) + (set! (-> obj water height) 1977958.4) + (logior! (-> obj root-override root-prim collide-with) 32) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 26 of type projectile-yellow +;; INFO: Return type mismatch uint vs none. +(defmethod dummy-26 projectile-yellow ((obj projectile-yellow)) + (let ((t9-0 (method-of-type projectile dummy-26))) + (t9-0 obj) + ) + (logior! (-> obj root-override root-prim collide-with) 8192) + (none) + ) + +;; definition for method 24 of type projectile-yellow +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 projectile-yellow ((obj projectile-yellow)) + (with-pp + (find-ground-and-draw-shadow + (-> obj root-override trans) + (-> obj root-override shadow-pos) + 8192.0 + (the-as uint 1) + (the-as process #f) + 12288.0 + 81920.0 + ) + (if (< (-> obj root-override trans y) (-> obj root-override shadow-pos y)) + (set! + (-> obj root-override trans y) + (+ 1228.8 (-> obj root-override shadow-pos y)) + ) + ) + (dummy-47 (-> obj root-override)) + (set! (-> *part-id-table* 353 init-specs 16 initial-value) 30) + (set! (-> *part-id-table* 353 init-specs 16 random-range) 300) + (cond + ((logtest? (-> obj options) 32) + (when + (>= + (- (-> *display* base-frame-counter) (the-as int (-> obj state-time))) + 15 + ) + (when + (< + (- (-> *display* base-frame-counter) (the-as int (-> obj state-time))) + 150 + ) + (set! (-> *part-id-table* 353 init-specs 16 initial-value) 0) + (set! (-> *part-id-table* 353 init-specs 16 random-range) 0) + 0 + ) + (dummy-11 + (-> obj part) + (the-as vector (-> obj root-override root-prim prim-core)) + ) + ) + ) + (else + (dummy-11 + (-> obj part) + (the-as vector (-> obj root-override root-prim prim-core)) + ) + ) + ) + (let ((s5-0 (the-as sound-rpc-set-param (get-sound-buffer-entry)))) + (set! (-> s5-0 command) (sound-command set-param)) + (set! (-> s5-0 id) (-> obj sound-id)) + (let ((a1-3 (-> obj root-override trans))) + (let ((gp-1 pp)) + (when (= a1-3 #t) + (if + (and + gp-1 + (type-type? (-> gp-1 type) process-drawable) + (nonzero? (-> (the-as process-drawable gp-1) root)) + ) + (set! a1-3 (-> (the-as process-drawable gp-1) root trans)) + (set! a1-3 (the-as vector #f)) + ) + ) + ) + (sound-trans-convert (-> s5-0 parms trans) a1-3) + ) + (set! (-> s5-0 parms mask) (the-as uint 32)) + (-> s5-0 id) + ) + 0 + (none) + ) + ) + +;; definition for method 28 of type projectile-yellow +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-28 projectile-yellow ((obj projectile-yellow)) + (cond + ((or + (not (handle->process (-> obj last-target))) + (zero? + (-> + (the-as target (handle->process (-> obj last-target))) + control + root-prim + prim-core + collide-as + ) + ) + ) + (cond + ((zero? (-> obj target-count)) + (let + ((s5-0 + (find-nearest-attackable + (-> obj parent-base) + 409600.0 + (the-as uint 0) + (the-as uint 0) + (-> obj base-vector) + (if (logtest? (-> obj options) 160) + 546.13336 + 8192.0 + ) + ) + ) + ) + (let + ((s4-0 + (find-nearest-attackable + (-> obj parent-base) + 163840.0 + (the-as uint 1) + (the-as uint 0) + (-> obj base-vector) + (if (logtest? (-> obj options) 160) + 910.2222 + 8192.0 + ) + ) + ) + (v1-10 + (find-nearest-attackable + (-> obj parent-base) + 28672.0 + (the-as uint 1) + (the-as uint 0) + (-> obj base-vector) + 16384.0 + ) + ) + ) + (if s4-0 + (set! s5-0 s4-0) + ) + (if v1-10 + (set! s5-0 v1-10) + ) + ) + (set! (-> obj last-target) (process->handle s5-0)) + (when s5-0 + (set! + (-> obj target quad) + (-> s5-0 root-override root-prim prim-core world-sphere quad) + ) + (if (= (-> s5-0 type symbol) 'mother-spider) + (set! (-> obj options) (logand -2 (-> obj options))) + ) + ) + ) + ) + (else + (set! (-> obj target quad) (-> obj target-base quad)) + ) + ) + ) + (else + (let ((a1-8 (handle->process (-> obj last-target)))) + (set! + (-> obj target quad) + (-> (the-as target a1-8) control root-prim prim-core world-sphere quad) + ) + ) + (if + (and + (< + (vector-vector-xz-distance (-> obj root-override trans) (-> obj target)) + 20480.0 + ) + (< 24576.0 (fabs (- (-> obj target y) (-> obj root-override trans y)))) + ) + (set! (-> obj last-target) (the-as handle #f)) + ) + ) + ) + (+! (-> obj target-count) 1) + 0 + (none) + ) + +;; definition for method 27 of type projectile-blue +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-27 projectile-blue ((obj projectile-blue)) + (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 204 30) + (sound-play-by-name + (static-sound-name "blue-eco-on") + (new-sound-id) + 1024 + 0 + 0 + (the-as uint 1) + (the-as vector #t) + ) + (set! (-> obj mode) 2) + (set! (-> obj max-speed) (-> *TARGET-bank* yellow-projectile-speed)) + (set! (-> obj update-velocity) projectile-update-velocity-space-wars) + (set! + (-> obj root-override trans y) + (+ -5324.8 (-> obj root-override trans y)) + ) + (vector+float*! + (-> obj target) + (-> obj root-override trans) + (-> obj root-override transv) + 2.0 + ) + (set! (-> obj target-base quad) (-> obj target quad)) + (set! + (-> obj mask) + (the-as process-mask (logior (process-mask ambient) (-> obj mask))) + ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 42) obj)) + (set! (-> obj root-override root-prim collide-with) (the-as uint 1)) + (let* ((s5-1 (handle->process (-> obj last-target))) + (v1-20 + (if (and (nonzero? s5-1) (type-type? (-> s5-1 type) process-drawable)) + s5-1 + ) + ) + ) + (if v1-20 + (set! + (-> obj joint-num) + (rand-vu-int-range + 3 + (+ (-> (the-as process-drawable v1-20) node-list length) -1) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 26 of type projectile-blue +;; INFO: Return type mismatch int vs none. +(defmethod dummy-26 projectile-blue ((obj projectile-blue)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) projectile-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 1024)) + (set! (-> s4-0 collide-with) (the-as uint 1)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 5324.8 0.0 5324.8) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> s5-0 max-iteration-count) (the-as uint 2)) + (set! (-> s5-0 event-self) 'touched) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for function spawn-projectile-blue +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun spawn-projectile-blue ((arg0 target)) + (local-vars (sv-48 entity)) + (with-pp + (when arg0 + (let ((s3-0 (rand-vu-int-range 3 (+ (-> arg0 node-list length) -1))) + (gp-0 (new-stack-vector0)) + ) + (set-vector! + gp-0 + (rand-vu-float-range -81920.0 81920.0) + (rand-vu-float-range -81920.0 81920.0) + (rand-vu-float-range -81920.0 81920.0) + 1.0 + ) + (let ((s4-1 (get-process *default-dead-pool* projectile-blue #x4000))) + (when s4-1 + (let ((t9-5 (method-of-type projectile-blue activate))) + (t9-5 + (the-as projectile-blue s4-1) + pp + 'projectile-blue + (the-as pointer #x70004000) + ) + ) + (let ((s2-0 run-function-in-process) + (s1-0 s4-1) + (s0-0 projectile-init-by-other) + ) + (set! sv-48 (-> pp entity)) + (let + ((a3-1 + (vector<-cspace! + (new 'stack-no-clear 'vector) + (-> arg0 node-list data s3-0) + ) + ) + (t1-0 8) + (t2-0 (process->handle pp)) + ) + ((the-as + (function process function object object object object object object) + s2-0 + ) + s1-0 + s0-0 + sv-48 + a3-1 + gp-0 + t1-0 + t2-0 + ) + ) + ) + (-> s4-1 ppointer) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 28 of type projectile-blue +;; INFO: Return type mismatch int vs none. +(defmethod dummy-28 projectile-blue ((obj projectile-blue)) + (let* ((s5-0 (handle->process (-> obj last-target))) + (v1-4 + (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) + s5-0 + ) + ) + ) + (if v1-4 + (vector<-cspace! + (-> obj target) + (-> (the-as process-drawable v1-4) node-list data (-> obj joint-num)) + ) + ) + ) + (if + (< + (vector-vector-distance (-> obj target) (-> obj root-override trans)) + 4096.0 + ) + (go (method-of-object obj projectile-impact)) + ) + 0 + (none) + ) + +;; definition for method 24 of type projectile-blue +;; INFO: Return type mismatch int vs none. +(defmethod dummy-24 projectile-blue ((obj projectile-blue)) + (if (rand-vu-percent? 0.75) + (eco-blue-glow + (the-as collide-shape-prim (-> obj root-override root-prim prim-core)) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate projectile-impact (projectile-blue) + :virtual #t + :code + (behavior () + (dummy-18 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate projectile-dissipate (projectile-blue) + :virtual #t + :code + (behavior () + (go-virtual projectile-die) + (none) + ) + ) + + + +