diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index d2660affde..0617ab17a3 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -33539,6 +33539,16 @@ (prevent-jump) (elevator-flags-6) (elevator-flags-7) + (elevator-flags-8) + (elevator-flags-9) + (elevator-flags-10) + (elevator-flags-11) + (elevator-flags-12) + (elevator-flags-13) + (elevator-flags-14) + (elevator-flags-15) + (elevator-flags-16) + (elevator-flags-17) ) ;; ---elevator:elevator-flags @@ -40631,12 +40641,11 @@ ;; jinx-bomb ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype jinx-bomb (process-focusable) - ((fuse-delay uint32 :offset-assert 200) - (attack-id uint32 :offset-assert 204) - (shake-screen? basic :offset-assert 208) - (explode-func basic :offset-assert 212) + ((fuse-delay uint32 :offset-assert 204) + (attack-id uint32 :offset-assert 208) + (shake-screen? symbol :offset-assert 212) + (explode-func basic :offset-assert 216) ) :method-count-assert 29 :size-assert #xdc @@ -40646,9 +40655,8 @@ (explode () _type_ :state 28) ) ) -|# -;; (define-extern jinx-bomb-init-by-other function) +(define-extern jinx-bomb-init-by-other (function vector quaternion none :behavior jinx-bomb)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; jinx ;; @@ -40760,27 +40768,24 @@ ;; sewer-obs ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype sew-blade (process-drawable) - ((y-min float :offset-assert 196) - (y-max float :offset-assert 200) - (snd-water uint128 :offset-assert 204) - (snd-no-water uint128 :offset-assert 220) - (last-sound int32 :offset-assert 236) - (attack-id uint32 :offset-assert 240) + ((y-min float :offset-assert 200) + (y-max float :offset-assert 204) + (snd-water uint128 :offset-assert 208) + (snd-no-water uint128 :offset-assert 224) + (last-sound int32 :offset-assert 240) + (attack-id uint32 :offset-assert 244) ) :method-count-assert 21 :size-assert #xf8 :flag-assert #x15008000f8 (:methods - (sew-blade-method-20 () none 20) + (sew-blade-method-20 (_type_) none 20) ) ) -|# -#| (deftype sew-single-blade (sew-blade) - ((quat quaternion :inline :offset-assert 252) + ((quat quaternion :inline :offset-assert 256) ) :method-count-assert 22 :size-assert #x110 @@ -40789,13 +40794,11 @@ (idle () _type_ :state 21) ) ) -|# -#| (deftype sew-tri-blade (sew-blade) - ((anim-time float :offset-assert 244) - (anim-offset float :offset-assert 248) - (switch-state int32 :offset-assert 252) + ((anim-time float :offset-assert 248) + (anim-offset float :offset-assert 252) + (switch-state int32 :offset-assert 256) ) :method-count-assert 22 :size-assert #x104 @@ -40804,9 +40807,7 @@ (idle () _type_ :state 21) ) ) -|# -#| (deftype sew-arm-blade (sew-blade) () :method-count-assert 22 @@ -40816,9 +40817,7 @@ (idle () _type_ :state 21) ) ) -|# -#| (deftype sew-multi-blade (sew-blade) () :method-count-assert 22 @@ -40828,11 +40827,11 @@ (idle () _type_ :state 21) ) ) -|# -#| (deftype sew-twist-blade (sew-blade) - ((no-collision-timer uint64 :offset-assert 244) + ( + (root-overide collide-shape-moving :offset 128 :score 100) + (no-collision-timer uint64 :offset-assert 248) ) :method-count-assert 22 :size-assert #x100 @@ -40841,50 +40840,43 @@ (idle () _type_ :state 21) ) ) -|# -#| (deftype sew-light-switch (process-drawable) - () + ( + (light-state symbol :offset-assert 200) + (actor-group (pointer actor-group) :offset-assert 204) + (actor-group-count int32 :offset-assert 208) + ) :method-count-assert 24 :size-assert #xd4 :flag-assert #x18006000d4 - ;; Failed to read fields. (:methods (idle () _type_ :state 20) (pressed () _type_ :state 21) - (sew-light-switch-method-22 () none 22) - (sew-light-switch-method-23 () none 23) + (sew-light-switch-method-22 (_type_) none 22) + (sew-light-switch-method-23 (_type_ symbol) none 23) ) ) -|# -#| (deftype sew-light-control (process) - ((search-switches basic :offset-assert 124) - (search-turrets basic :offset-assert 128) - (switch-ent basic :offset-assert 132) - (turret-ent basic :offset-assert 136) + ((search-switches basic :offset-assert 128) + (search-turrets basic :offset-assert 132) + (switch-ent entity-actor :offset-assert 136) + (turret-ent entity-actor :offset-assert 140) ) :method-count-assert 17 :size-assert #x90 :flag-assert #x1100100090 (:methods - (sew-light-control-method-9 () none 9) - (sew-light-control-method-10 () none 10) - (sew-light-control-method-11 () none 11) - (sew-light-control-method-12 () none 12) - (sew-light-control-method-13 () none 13) (idle () _type_ :state 14) - (sew-light-control-method-15 () none 15) - (sew-light-control-method-16 () none 16) + (sew-light-control-method-15 (_type_ symbol symbol) float 15) + (sew-light-control-method-16 (_type_ object vector float) symbol 16) ) ) -|# -;; (define-extern sew-tri-blade-joint-callback function) -;; (define-extern sew-light-control-init-by-other function) -;; (define-extern sewer-startup function) +(define-extern sew-tri-blade-joint-callback (function draw-control cspace-array joint-control none)) +(define-extern sew-light-control-init-by-other (function entity-actor entity-actor none :behavior sew-light-control)) +(define-extern sewer-startup (function none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; sewer-obs2 ;; @@ -40897,25 +40889,28 @@ :size-assert #x174 :flag-assert #x3201000174 (:methods - (sew-elevator-method-49 () none 49) + (sew-elevator-method-49 (_type_ symbol) none 49) ) ) -#| (deftype sew-valve (process-drawable) - () + ( + (joint joint-mod-rotate-local :offset-assert 200) + (actor-group (pointer actor-group) :offset-assert 204) + (actor-group-count int32 :offset-assert 208) + (water-height float :offset-assert 212) + (spin float :offset-assert 216) + (spin-rate float :offset-assert 220) + ) :method-count-assert 22 :size-assert #xe0 :flag-assert #x16006000e0 - ;; Failed to read fields. (:methods (idle () _type_ :state 20) (turn () _type_ :state 21) ) ) -|# -#| (deftype sew-mar-statue-debris (process-drawable) () :method-count-assert 21 @@ -40925,9 +40920,7 @@ (idle () _type_ :state 20) ) ) -|# -#| (deftype sew-mar-statue-debris-b (process-drawable) () :method-count-assert 21 @@ -40937,11 +40930,11 @@ (idle () _type_ :state 20) ) ) -|# -#| (deftype sew-mar-statue (process-drawable) - ((spawned-debris? basic :offset-assert 196) + ( + (root-override collide-shape :offset 128 :score 100) + (spawned-debris? symbol :offset-assert 200) ) :method-count-assert 22 :size-assert #xcc @@ -40951,9 +40944,7 @@ (hidden () _type_ :state 21) ) ) -|# -#| (deftype sew-catwalk (drop-plat) () :method-count-assert 36 @@ -40962,11 +40953,11 @@ (:methods ) ) -|# -#| (deftype sew-mine (process-drawable) - ((last-time time-frame :offset-assert 196) + ( + (root-override collide-shape-moving :offset 128 :score 100) + (last-time time-frame :offset-assert 200) ) :method-count-assert 23 :size-assert #xd0 @@ -40974,12 +40965,10 @@ (:methods (idle () _type_ :state 20) (die () _type_ :state 21) - (sew-mine-method-22 () none 22) + (sew-mine-method-22 (_type_) none 22) ) ) -|# -#| (deftype sew-mine-a (sew-mine) () :method-count-assert 23 @@ -40988,14 +40977,12 @@ (:methods ) ) -|# -#| (deftype sew-mine-b (sew-mine) - ((base-height float :offset-assert 204) - (center vector :inline :offset-assert 220) - (time-skew uint64 :offset-assert 236) - (period float :offset-assert 244) + ((base-height float :offset-assert 208) + (center vector :inline :offset-assert 224) + (time-skew uint64 :offset-assert 240) + (period float :offset-assert 248) ) :method-count-assert 23 :size-assert #xfc @@ -41003,29 +40990,25 @@ (:methods ) ) -|# -#| (deftype sew-wall (process-focusable) - ((deadly-radius float :offset-assert 200) - (prev-deadly-radius float :offset-assert 204) - (attack-id uint32 :offset-assert 208) - (first-wall? basic :offset-assert 212) - (anim basic :offset-assert 216) - (art-name basic :offset-assert 220) + ((deadly-radius float :offset-assert 204) + (prev-deadly-radius float :offset-assert 208) + (attack-id uint32 :offset-assert 212) + (first-wall? basic :offset-assert 216) + (anim spool-anim :offset-assert 220) + (art-name basic :offset-assert 224) ) :method-count-assert 30 :size-assert #xe4 :flag-assert #x1e007000e4 (:methods (idle () _type_ :state 27) - (hit () _type_ :state 28) - (sew-wall-method-29 () none 29) + (hit (symbol) _type_ :state 28) + (sew-wall-method-29 (_type_) none 29) ) ) -|# -#| (deftype sew-grill (process-drawable) () :method-count-assert 21 @@ -41035,14 +41018,12 @@ (idle () _type_ :state 20) ) ) -|# -#| (deftype sew-scare-grunt (grunt) - ((anim basic :offset-assert 688) - (manipy uint32 :offset-assert 692) - (spooled-sound-id uint32 :offset-assert 696) - (grill-actor basic :offset-assert 700) + ((anim spool-anim :offset-assert 692) + (manipy (pointer manipy) :offset-assert 696) + (spooled-sound-id uint32 :offset-assert 700) + (grill-actor entity-actor :offset-assert 704) ) :method-count-assert 188 :size-assert #x2c4 @@ -41052,12 +41033,11 @@ (scare () _type_ :state 187) ) ) -|# -;; (define-extern sew-mar-statue-debris-init-by-other function) -;; (define-extern sew-mar-statue-debris-b-init-by-other function) -;; (define-extern sew-mar-statue-event-handler function) -;; (define-extern *sew-scare-grunt-nav-enemy-info* nav-enemy-info) +(define-extern sew-mar-statue-debris-init-by-other (function none :behavior sew-mar-statue-debris)) +(define-extern sew-mar-statue-debris-b-init-by-other (function none :behavior sew-mar-statue-debris-b)) +(define-extern sew-mar-statue-event-handler (function process int symbol event-message-block object :behavior sew-mar-statue)) +(define-extern *sew-scare-grunt-nav-enemy-info* nav-enemy-info) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; hosehead ;; @@ -41187,34 +41167,32 @@ ;; (define-extern hosehead-fake-event-handler function) ;; (define-extern hosehead-fake-init-by-other function) ;; (define-extern *hosehead-fakes* array) -;; (define-extern spawn-hosehead-fakes function) -;; (define-extern hosehead-fake-trigger function) +(define-extern spawn-hosehead-fakes (function none)) +(define-extern hosehead-fake-trigger (function int none)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; gator ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype gator (nav-enemy) - ((ocean-y float :offset-assert 600) - (lock-nav-target basic :offset-assert 604) - (new-facing vector :inline :offset-assert 620) - (old-facing vector :inline :offset-assert 636) - (turn-time time-frame :offset-assert 652) + ((ocean-y float :offset-assert 604) + (lock-nav-target basic :offset-assert 608) + (new-facing vector :inline :offset-assert 624) + (old-facing vector :inline :offset-assert 640) + (turn-time time-frame :offset-assert 656) ) :method-count-assert 182 :size-assert #x298 :flag-assert #xb602200298 (:methods (attack-forward () _type_ :state 178) - (gator-method-179 () none 179) - (gator-method-180 () none 180) - (gator-method-181 () none 181) + (gator-method-179 (_type_) float 179) + (gator-method-180 (_type_ vector) vector 180) + (gator-method-181 (_type_ float float symbol) time-frame 181) ) ) -|# -;; (define-extern *gator-nav-enemy-info* nav-enemy-info) +(define-extern *gator-nav-enemy-info* nav-enemy-info) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; hal2-course ;; @@ -41316,85 +41294,78 @@ ;; sewer-scenes ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype fake-jinx-bomb-info (basic) - ((handle uint64 :offset-assert 8) + ((handle handle :offset-assert 8) ) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 ) -|# -;; (define-extern *fake-jinx-bomb-info* fake-jinx-bomb-info) +(define-extern *fake-jinx-bomb-info* fake-jinx-bomb-info) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; sew-gunturret ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype gun-turret-params (structure) - ((normal-sg basic :offset-assert 0) - (explode-sg basic :offset-assert 4) - (enemy-info basic :offset-assert 8) + ((normal-sg skeleton-group :offset-assert 0) + (explode-sg skeleton-group :offset-assert 4) + (enemy-info enemy-info :offset-assert 8) (idle-anim int32 :offset-assert 12) (shoot-anim int32 :offset-assert 16) (track-joint int32 :offset-assert 20) (barrel-joint int32 :offset-assert 24) (gun-joint int32 :offset-assert 28) - (hole-joints UNKNOWN 8 :offset-assert 32) + (hole-joints int32 8 :offset-assert 32) ) :method-count-assert 9 :size-assert #x40 :flag-assert #x900000040 ) -|# -#| (deftype sew-gunturret (enemy) - ((gun-tilt-jm basic :offset-assert 528) - (params gun-turret-params :offset-assert 532) - (aim-pos vector :inline :offset-assert 540) - (gun-twist float :offset-assert 556) - (gun-tilt float :offset-assert 560) - (desired-twist float :offset-assert 564) - (desired-tilt float :offset-assert 568) - (los-clear basic :offset-assert 572) - (smoke-part basic :offset-assert 576) - (casing-part basic :offset-assert 580) - (flash-state basic :offset-assert 584) - (can-shoot basic :offset-assert 588) - (last-hit-time time-frame :offset-assert 596) - (init-mat matrix :inline :offset-assert 604) - (activate-distance float :offset-assert 668) + ((gun-tilt-jm joint-mod :offset-assert 532) + (params gun-turret-params :offset-assert 536) + (aim-pos vector :inline :offset-assert 544) + (gun-twist float :offset-assert 560) + (gun-tilt float :offset-assert 564) + (desired-twist float :offset-assert 568) + (desired-tilt float :offset-assert 572) + (los-clear basic :offset-assert 576) + (smoke-part sparticle-launch-control :offset-assert 580) + (casing-part sparticle-launch-control :offset-assert 584) + (flash-state basic :offset-assert 588) + (can-shoot symbol :offset-assert 592) + (last-hit-time time-frame :offset-assert 600) + (init-mat matrix :inline :offset-assert 608) + (activate-distance float :offset-assert 672) ) :method-count-assert 142 :size-assert #x2a4 :flag-assert #x8e023002a4 (:methods - (sew-gunturret-method-137 () none 137) - (sew-gunturret-method-138 () none 138) - (sew-gunturret-method-139 () none 139) - (sew-gunturret-method-140 () none 140) - (sew-gunturret-method-141 () none 141) + (sew-gunturret-method-137 (_type_ symbol) none 137) + (sew-gunturret-method-138 (_type_) none 138) + (sew-gunturret-method-139 (_type_) none 139) + (sew-gunturret-method-140 (_type_ symbol) none 140) + (sew-gunturret-method-141 (_type_) none 141) ) ) -|# -#| (deftype pal-gun-turret (sew-gunturret) () :method-count-assert 142 :size-assert #x2a4 :flag-assert #x8e023002a4 (:methods + (pal-gun-turret-method-140 (_type_ symbol) float :replace 140) ) ) -|# -;; (define-extern *sew-gunturret-exploder-params* joint-exploder-static-params) -;; (define-extern *sew-gunturret-enemy-info* enemy-info) -;; (define-extern *pal-gun-turret-enemy-info* enemy-info) +(define-extern *sew-gunturret-exploder-params* joint-exploder-static-params) +(define-extern *sew-gunturret-enemy-info* enemy-info) +(define-extern *pal-gun-turret-enemy-info* enemy-info) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ctypower ;; diff --git a/decompiler/config/jak2/anonymous_function_types.jsonc b/decompiler/config/jak2/anonymous_function_types.jsonc index e1685e4836..ccdf7a4e42 100644 --- a/decompiler/config/jak2/anonymous_function_types.jsonc +++ b/decompiler/config/jak2/anonymous_function_types.jsonc @@ -676,5 +676,29 @@ [21, "(function fort-robotank none)"], [22, "(function fort-robotank none)"], [23, "(function none)"] + ], + "sewer-scenes": [ + [0, "(function object :behavior task-manager)"], + [1, "(function symbol :behavior task-manager)"], + [5, "(function none :behavior scene-player)"], + [6, "(function none :behavior scene-player)"], + [7, "(function none :behavior scene-player)"], + [8, "(function none :behavior scene-player)"], + [9, "(function none :behavior scene-player)"], + [10, "(function none :behavior scene-player)"], + [11, "(function none :behavior scene-player)"], + [12, "(function none :behavior scene-player)"], + [13, "(function none :behavior scene-player)"], + [14, "(function none :behavior scene-player)"], + [15, "(function none :behavior scene-player)"], + [16, "(function none :behavior scene-player)"], + [17, "(function none :behavior scene-player)"], + [18, "(function none :behavior scene-player)"], + [19, "(function none :behavior scene-player)"], + [20, "(function none :behavior scene-player)"], + [21, "(function float :behavior scene-player)"], + [22, "(function float :behavior scene-player)"], + [23, "(function float :behavior scene-player)"], + [24, "(function float :behavior scene-player)"] ] } diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index 2233d8788e..fa65147f98 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -211,10 +211,12 @@ "(method 11 mtn-step-plat-rocks-a)", "(method 11 mtn-step-plat-rocks-b)", "(method 11 mtn-step-plat-rocks-c)", + "(method 22 fort-floor-spike-b)", "prototypes-game-visible-set!", "(method 22 fort-floor-spike-a)", "(method 22 fort-floor-spike-b)", - "(method 22 fort-floor-spike-c)" + "(method 22 fort-floor-spike-c)", + "(method 11 sew-catwalk)" ], // If format is used with the wrong number of arguments, @@ -481,6 +483,9 @@ "(method 15 rigid-body)": [0, 1, 2, 5], "(method 63 collide-shape-moving)": [ 0, 1, 2, 3, 4, 5, 6, 10, 12, 13, 14, 28, 38, 39, 40, 44 + ], + "(method 181 gator)": [ + 2, 3, 7, 10, 11, 14, 15, 16, 17, 18, 19, 20, 21, 22, 25, 26, 30 ] }, diff --git a/decompiler/config/jak2/inputs.jsonc b/decompiler/config/jak2/inputs.jsonc index 13f2b36a2e..5674d37ce2 100644 --- a/decompiler/config/jak2/inputs.jsonc +++ b/decompiler/config/jak2/inputs.jsonc @@ -137,7 +137,7 @@ "DGO/GGA.DGO", "DGO/TOD.DGO", "DGO/MCN.DGO", - // "DGO/SEW.DGO", + "DGO/SEW.DGO", "DGO/VIN.DGO", "DGO/CGA.DGO", "DGO/CMB.DGO", @@ -219,6 +219,8 @@ "PRI.DGO", "RUI.DGO", "SAG.DGO", + "SEB.DGO", + "SEW.DGO", "SKA.DGO", "STA.DGO", "TOA.DGO", diff --git a/decompiler/config/jak2/label_types.jsonc b/decompiler/config/jak2/label_types.jsonc index 27de37bd2e..677e192efa 100644 --- a/decompiler/config/jak2/label_types.jsonc +++ b/decompiler/config/jak2/label_types.jsonc @@ -939,5 +939,21 @@ ], "dig-obs": [["L111", "(inline-array vector)", 2]], "dig1-obs": [["L91", "(inline-array vector)", 8]], - "minimap": [["L250", "(inline-array minimap-class-node)", 71]] + "minimap": [["L250", "(inline-array minimap-class-node)", 71]], + "sew-gunturret": [ + ["L106", "attack-info"], + ["L104", "gun-turret-params"], + ["L94", "gun-turret-params"] + ], + "sewer-obs": [ + ["L184", "attack-info"], + ["L177", "attack-info"], + ["L171", "attack-info"], + ["L165", "attack-info"], + ["L159", "attack-info"] + ], + "sewer-obs2": [ + ["L211", "attack-info"], + ["L196", "attack-info"] + ] } diff --git a/decompiler/config/jak2/stack_structures.jsonc b/decompiler/config/jak2/stack_structures.jsonc index fe8c5c4ba8..3497d35470 100644 --- a/decompiler/config/jak2/stack_structures.jsonc +++ b/decompiler/config/jak2/stack_structures.jsonc @@ -1444,5 +1444,6 @@ "(method 14 trail-graph)": [[16, ["inline-array", "vector", 2]]], "(method 13 trail-graph)": [[16, ["inline-array", "vector", 2]]], "(method 19 trail-graph)": [[16, "trail-vis-work"]], - "(method 15 trail-graph)": [[16, "trail-conn-search"]] + "(method 15 trail-graph)": [[16, "trail-conn-search"]], + "(anon-function 20 sewer-scenes)": [[16, "vector"]] } diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 0eece578da..2a235a8dd6 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -6720,5 +6720,52 @@ [20, "a0", "(pointer uint16)"], [33, "a3", "trail-conn"], [37, "a3", "trail-conn"] + ], + "(method 137 sew-gunturret)": [[[19, 23], "a0", "process-focusable"]], + "(method 138 sew-gunturret)": [[[15, 19], "a0", "process-focusable"]], + "(method 140 pal-gun-turret)": [ + [9, "t9", "(function sew-gunturret symbol none)"] + ], + "(anon-function 0 sewer-scenes)": [[79, "v1", "float"]], + "(event idle sew-single-blade)": [[15, "s4", "process-focusable"]], + "(event idle sew-multi-blade)": [[15, "s4", "process-focusable"]], + "(event idle sew-twist-blade)": [[15, "s4", "process-focusable"]], + "(code pressed sew-light-switch)": [[10, "v1", "art-joint-anim"]], + "(post idle sew-light-control)": [[20, "v1", "sew-light-switch"]], + "sew-tri-blade-joint-callback": [[[1, 82], "gp", "sew-tri-blade"]], + "(method 49 sew-elevator)": [[2, "v1", "collide-shape-prim-group"]], + "(post running sew-elevator)": [[4, "t9", "(function none)"]], + "(method 10 sew-elevator)": [[10, "t9", "(function elevator none)"]], + "(event idle sew-valve)": [[4, "v1", "attack-info"]], + "(method 7 sew-valve)": [ + [14, "t9", "(function process-drawable int process-drawable)"] + ], + "sew-mar-statue-debris-init-by-other": [ + [[144, 157], "gp", "process-drawable"] + ], + "sew-mar-statue-debris-b-init-by-other": [ + [[12, 25], "gp", "process-drawable"] + ], + "(event idle sew-mine)": [[15, "s4", "process-focusable"]], + "(post idle sew-mine-b)": [[4, "t9", "(function none)"]], + "(code hit sew-wall)": [ + [[7, 10], "v1", "collide-shape-prim-group"], + [[100, 107], "a0", "collide-shape-prim-group"], + [[109, 116], "a0", "collide-shape-prim-group"], + [68, "v0", "object"] + ], + "(code waiting sew-scare-grunt)": [[10, "v1", "art-joint-anim"]], + "(enter scare sew-scare-grunt)": [[[71, 81], "gp", "sew-grill"]], + "(exit scare sew-scare-grunt)": [[[6, 10], "v1", "sew-grill"]], + "(code fall sew-catwalk)": [[39, "v0", "object"]], + "(post scare sew-scare-grunt)": [[51, "v0", "sound-rpc-set-param"]], + "(method 11 sew-valve)": [ + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"] + ], + "(trans attack-forward gator)": [[[19, 23], "gp", "process-focusable"]], + "(code attack-forward gator)": [[14, "v1", "art-joint-anim"]], + "(method 11 sew-light-switch)": [ + ["_stack_", 16, "res-tag"] ] } diff --git a/decompiler/config/jak2/var_names.jsonc b/decompiler/config/jak2/var_names.jsonc index 3b50b3f371..8e28499706 100644 --- a/decompiler/config/jak2/var_names.jsonc +++ b/decompiler/config/jak2/var_names.jsonc @@ -2276,5 +2276,8 @@ }, "(method 0 joint-exploder-tuning)": { "vars": { "v0-0": ["v0-0", "joint-exploder-tuning"] } + }, + "(method 181 gator)": { + "vars": { "s4-0": ["s4-0", "art-joint-anim"] } } } diff --git a/goal_src/jak2/engine/common_objs/elevator.gc b/goal_src/jak2/engine/common_objs/elevator.gc index 4bf572526f..93bf9849ef 100644 --- a/goal_src/jak2/engine/common_objs/elevator.gc +++ b/goal_src/jak2/engine/common_objs/elevator.gc @@ -17,6 +17,16 @@ (prevent-jump) (elevator-flags-6) (elevator-flags-7) + (elevator-flags-8) + (elevator-flags-9) + (elevator-flags-10) + (elevator-flags-11) + (elevator-flags-12) + (elevator-flags-13) + (elevator-flags-14) + (elevator-flags-15) + (elevator-flags-16) + (elevator-flags-17) ) ;; ---elevator-flags diff --git a/goal_src/jak2/game.gp b/goal_src/jak2/game.gp index 354d62a000..557a055720 100644 --- a/goal_src/jak2/game.gp +++ b/goal_src/jak2/game.gp @@ -3951,32 +3951,27 @@ ;; ;; SEW ;; ;;;;;;;;;;;;;;;;;;;;; -;; (cgo "SEW.DGO" "sew.gd") +(cgo "SEW.DGO" "sew.gd") -;; (copy-textures 1059 1060 1066 2270 3479) +(copy-textures 1059 1060 1066 2270 3479) -;; (copy-gos -;; "daxter-highres-ag" -;; "grunt-ag" -;; "jak-highres-ag" -;; "amphibian-ag" -;; "sew-catwalk-ag" -;; "sew-multi-blade-ag" -;; "fodder-ag" -;; "sew-gunturret-ag" -;; "mar-statue-ag" -;; "sew-twist-blade-ag" -;; "sew-tri-blade-ag" -;; "sew-single-blade-ag" -;; "mine-a-ag" -;; "sew-valve-ag" -;; "mine-b-ag" -;; "sew-arm-blade-ag" -;; "gold-key-ag" -;; "light-switch-ag" -;; "grill-ag" -;; "sewer-vis" -;; ) +(copy-gos + "sew-catwalk-ag" + "sew-multi-blade-ag" + "sew-gunturret-ag" + "mar-statue-ag" + "sew-twist-blade-ag" + "sew-tri-blade-ag" + "sew-single-blade-ag" + "mine-a-ag" + "sew-valve-ag" + "mine-b-ag" + "sew-arm-blade-ag" + "gold-key-ag" + "light-switch-ag" + "grill-ag" + "sewer-vis" + ) ;; ;;;;;;;;;;;;;;;;;;;;; ;; ;; SKA @@ -4217,84 +4212,31 @@ ;; ;; SWB ;; ;;;;;;;;;;;;;;;;;;;;; -;; (cgo "SWB.DGO" "swb.gd") +(cgo "SWB.DGO" "swb.gd") -;; (goal-src-sequence -;; "" -;; :deps ("$OUT/obj/los-control.o") -;; "levels/common/ai/ai-task-h.gc" -;; "levels/common/ai/bot-h.gc" -;; "levels/common/ai/bot.gc" -;; "levels/common/ai/bot-states.gc" -;; "levels/undefined/hal-h.gc" -;; "levels/undefined/hal-task.gc" -;; "levels/undefined/hal.gc" -;; "levels/undefined/ruf-h.gc" -;; "levels/undefined/ruf-task.gc" -;; "levels/undefined/ruf.gc" -;; "levels/undefined/ruf-states.gc" -;; "levels/sewer/escort/jinx-h.gc" -;; "levels/sewer/escort/jinx-shot.gc" -;; "levels/sewer/escort/jinx-bomb.gc" -;; "levels/sewer/escort/jinx.gc" -;; "levels/sewer/escort/jinx-states.gc" -;; "levels/sewer/escort/mog-h.gc" -;; "levels/sewer/escort/mog.gc" -;; "levels/sewer/escort/grim-h.gc" -;; "levels/sewer/escort/grim.gc" -;; "levels/sewer/sewer-part.gc" -;; "levels/sewer/sewer-ocean.gc" -;; "levels/sewer/sewer-obs.gc" -;; "levels/sewer/sewer-obs2.gc" -;; "levels/sewer/hosehead.gc" -;; "levels/sewer/hosehead-fake.gc" -;; "levels/common/enemy/amphibian/amphibian.gc" -;; "levels/sewer/gator.gc" -;; "levels/common/enemy/fodder/fodder.gc" -;; "levels/sewer/hal2-course.gc" -;; "levels/sewer/mog2-course.gc" -;; "levels/sewer/jinx2-course.gc" -;; "levels/sewer/grim2-course.gc" -;; "levels/sewer/sewer-scenes.gc" -;; "levels/common/entities/sew-gunturret.gc" -;; ) +(copy-textures 1372 1373 1458) -;; (copy-textures 1372 1373 1458) - -;; (copy-gos -;; "com-airlock-inner-ag" -;; "sew-elevator-ag" -;; "sewescb-vis" -;; ) +(copy-gos + "sewescb-vis" + ) ;; ;;;;;;;;;;;;;;;;;;;;; ;; ;; SWE ;; ;;;;;;;;;;;;;;;;;;;;; -;; (cgo "SWE.DGO" "swe.gd") +(cgo "SWE.DGO" "swe.gd") -;; (copy-textures 1370 1387 1371 2293 3478 3415) +(copy-textures 1370 1387 1371 2293 3478 3415) -;; (copy-gos -;; "jinx-ag" -;; "daxter-highres-ag" -;; "jak-highres-ag" -;; "hosehead-ag" -;; "sew-wall-ag" -;; "sew-mar-statue-explode-ag" -;; "sew-multi-blade-ag" -;; "mar-statue-ag" -;; "sew-twist-blade-ag" -;; "heart-of-mar-ag" -;; "mine-a-ag" -;; "mine-b-ag" -;; "sew-arm-blade-ag" -;; "light-switch-ag" -;; "jinx-bomb-ag" -;; "grill-ag" -;; "particleman-ag" -;; "sewesc-vis" -;; ) +(copy-gos + "jinx-ag" + "hosehead-ag" + "sew-wall-ag" + "sew-mar-statue-explode-ag" + "heart-of-mar-ag" + "jinx-bomb-ag" + "sewesc-vis" + ) ;; ;;;;;;;;;;;;;;;;;;;;; ;; ;; TBO diff --git a/goal_src/jak2/levels/common/entities/sew-gunturret.gc b/goal_src/jak2/levels/common/entities/sew-gunturret.gc index 5185844e87..c53fb01543 100644 --- a/goal_src/jak2/levels/common/entities/sew-gunturret.gc +++ b/goal_src/jak2/levels/common/entities/sew-gunturret.gc @@ -7,3 +7,1214 @@ ;; DECOMP BEGINS +(defpartgroup group-sew-gunturret-hit + :id 1126 + :duration (seconds 0.5) + :linger-duration (seconds 1) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 15) + :parts ((sp-item 4867 :period 1500 :length 25 :offset -10) + (sp-item 4868 :fade-after (meters 60) :period 1500 :length 30) + (sp-item 4869 :fade-after (meters 60) :falloff-to (meters 60) :period 1500 :length 100) + (sp-item 4870 :fade-after (meters 200) :falloff-to (meters 200) :period 1500 :length 50) + (sp-item 4871 :period 1500 :length 5 :offset -10) + (sp-item 4872 :fade-after (meters 150) :falloff-to (meters 150) :period 1500 :length 50) + ) + ) + +(defpart 4870 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x34 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-rot-z) + :flags (sp-flag spflag7) + :random-rangef 65536.0 + :random-multf 1.0 + ) + (sp-rnd-flt spt-scale-y (meters 0.8) (meters 0.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 4873) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-conerot-x) + :flags (sp-flag from-pointer) + :func '*sp-temp* + ) + ) + ) + +(defpart 4872 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a 0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 4873) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 4873 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 4874) + ) + ) + +(defpart 4874 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.44) + (sp-flt spt-fade-g -2.36) + (sp-flt spt-fade-b -2.64) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 4875) + ) + ) + +(defpart 4875 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2944444) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.094444446) + (sp-rnd-flt spt-fade-a -0.06545454 -0.06545454 1.0) + (sp-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 4876) + ) + ) + +(defpart 4876 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0)) + ) + +(defpart 4871 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x47 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 5)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters 0.5)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-b -5.1) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 100) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 50) + (sp-launcher-by-id spt-next-launcher 4877) + ) + ) + +(defpart 4877 + :init-specs ((sp-flt spt-scalevel-x (meters -0.2)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -2.56) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.92) + ) + ) + +(defpart 4869 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #xc)) + (sp-rnd-flt spt-num 5.0 3.0 1.0) + (sp-flt spt-x (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.083333336) (meters 0.083333336) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.0016666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.18) + (sp-flt spt-fade-b -2.12) + (sp-rnd-flt spt-accel-y -0.68266666 -1.3653333 1.0) + (sp-flt spt-friction 0.87) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 4878) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 4878 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.02) + (sp-flt spt-fade-b 0.23555556) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 4879) + ) + ) + +(defpart 4879 + :init-specs ((sp-flt spt-fade-r -0.5543478) (sp-flt spt-fade-g -0.5543478) (sp-flt spt-fade-a -0.13913043)) + ) + +(defpart 4867 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 3.0 1.0 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 1.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 20.0 1.0) + (sp-rnd-flt spt-g 70.0 20.0 1.0) + (sp-rnd-flt spt-b 70.0 20.0 1.0) + (sp-rnd-flt spt-a 0.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.1) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.016666668) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 3.3) + (sp-flt spt-fade-g 3.12) + (sp-flt spt-fade-b 1.18) + (sp-flt spt-fade-a 1.76) + (sp-flt spt-friction 0.88) + (sp-int spt-timer 710) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 4880) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 4880 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -1.9666667) + (sp-flt spt-fade-b -2.2) + (sp-flt spt-fade-a -0.41666666) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 4881) + ) + ) + +(defpart 4881 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.38833332) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.028333334) + (sp-flt spt-fade-a -0.38833332) + ) + ) + +(defpart 4868 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-rnd-flt spt-num 4.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.25) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.13333334) (meters 0.02) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 80) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + ) + ) + +(defpartgroup group-sew-gunturret-smoke + :id 1127 + :duration (seconds 0.017) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4882 :flags (bit7))) + ) + +(defpart 4882 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 64.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 16.0) + (sp-rnd-flt spt-vel-z (meters 0.006666667) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0033333334) (meters 0.004) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-fade-a -0.026666667 -0.10666667 1.0) + (sp-rnd-flt spt-accel-y 0.4096 0.13653333 1.0) + (sp-flt spt-friction 0.98) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-sew-gunturret-casing + :id 1128 + :duration (seconds 0.017) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4883 :fade-after (meters 80) :falloff-to (meters 100) :flags (bit7)) + (sp-item 4884 :fade-after (meters 80) :falloff-to (meters 100) :flags (bit7)) + ) + ) + +(defpart 4884 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 3.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-vel-z (meters 0.006666667) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0033333334) (meters 0.004) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -2.56) + (sp-flt spt-fade-g -2.56) + (sp-flt spt-fade-b 2.56) + (sp-flt spt-fade-a -0.32) + (sp-rnd-flt spt-accel-y 0.4096 0.13653333 1.0) + (sp-flt spt-friction 0.98) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-int spt-next-time 50) + (sp-launcher-by-id spt-next-launcher 4885) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4885 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-rnd-flt spt-fade-a -0.026666667 -0.10666667 1.0) + ) + ) + +(defpart 4883 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.4)) + (sp-flt spt-scale-x (meters 2.5)) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.02) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 6.144) + (sp-rnd-flt spt-vel-z (meters 0.033333335) (meters 0.06666667) 1.0) + (sp-flt spt-fade-b -8.0) + (sp-rnd-flt spt-accel-y -6.826667 -6.826667 1.0) + (sp-rnd-flt spt-friction 0.9 0.04 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 4886) + (sp-rnd-flt spt-conerot-x (degrees -20.0) (degrees 40.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4886 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -2.45) + (sp-rnd-flt spt-fade-a -0.384 -0.96 1.0) + ) + ) + +(defskelgroup skel-sew-gunturret sew-gunturret 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 0 0 5)) + +(defskelgroup skel-sew-gunturret-explode sew-gunturret 4 6 + ((5 (meters 999999))) + :bounds (static-spherem 0 0 0 15) + ) + +(define *sew-gunturret-exploder-params* + (new 'static 'joint-exploder-static-params + :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params + (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 18 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 19 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 20 :parent-joint-index -1) + ) + :collide-spec #x1 + ) + ) + +(deftype gun-turret-params (structure) + ((normal-sg skeleton-group :offset-assert 0) + (explode-sg skeleton-group :offset-assert 4) + (enemy-info enemy-info :offset-assert 8) + (idle-anim int32 :offset-assert 12) + (shoot-anim int32 :offset-assert 16) + (track-joint int32 :offset-assert 20) + (barrel-joint int32 :offset-assert 24) + (gun-joint int32 :offset-assert 28) + (hole-joints int32 8 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + + +(deftype sew-gunturret (enemy) + ((gun-tilt-jm joint-mod :offset-assert 532) + (params gun-turret-params :offset-assert 536) + (aim-pos vector :inline :offset-assert 544) + (gun-twist float :offset-assert 560) + (gun-tilt float :offset-assert 564) + (desired-twist float :offset-assert 568) + (desired-tilt float :offset-assert 572) + (los-clear basic :offset-assert 576) + (smoke-part sparticle-launch-control :offset-assert 580) + (casing-part sparticle-launch-control :offset-assert 584) + (flash-state basic :offset-assert 588) + (can-shoot symbol :offset-assert 592) + (last-hit-time time-frame :offset-assert 600) + (init-mat matrix :inline :offset-assert 608) + (activate-distance float :offset-assert 672) + ) + :heap-base #x230 + :method-count-assert 142 + :size-assert #x2a4 + :flag-assert #x8e023002a4 + (:methods + (sew-gunturret-method-137 (_type_ symbol) none 137) + (sew-gunturret-method-138 (_type_) none 138) + (sew-gunturret-method-139 (_type_) none 139) + (sew-gunturret-method-140 (_type_ symbol) none 140) + (sew-gunturret-method-141 (_type_) none 141) + ) + ) + + +(define *sew-gunturret-enemy-info* (new 'static 'enemy-info + :use-die-falling #f + :use-victory #f + :use-jump-blocked #f + :debug-draw-neck #f + :jump-debug-draw #f + :move-to-ground #f + :hover-if-no-ground #f + :idle-anim-script (new 'static 'array uint32 4 #x1010201 #x0 #x0 #x0) + :idle-anim 2 + :notice-anim 2 + :hostile-anim 2 + :hit-anim 2 + :knocked-anim -1 + :knocked-land-anim -1 + :die-anim 2 + :die-falling-anim -1 + :victory-anim -1 + :jump-wind-up-anim -1 + :jump-in-air-anim -1 + :jump-land-anim -1 + :neck-joint -1 + :notice-distance (meters 150) + :notice-distance-delta (meters 10) + :proximity-notice-distance (meters 150) + :default-hit-points 1 + :gnd-collide-with (collide-spec backgnd) + :overlaps-others-collide-with-filter (collide-spec jak bot player-list) + :movement-gravity (meters -100) + :friction 0.8 + :attack-shove-back (meters 3) + :attack-shove-up (meters 2) + :attack-mode 'generic + :attack-damage 2 + :jump-height-min (meters 3) + :jump-height-factor 0.5 + :knocked-seek-ry-clamp 2730.6667 + :knocked-soft-vxz-lo 72089.6 + :knocked-soft-vxz-hi 108134.4 + :knocked-soft-vy-lo 81920.0 + :knocked-soft-vy-hi 122880.0 + :knocked-medium-vxz-lo 147456.0 + :knocked-medium-vxz-hi 196608.0 + :knocked-medium-vy-lo 135168.0 + :knocked-medium-vy-hi 151552.0 + :knocked-hard-vxz-lo 78643.2 + :knocked-hard-vxz-hi 117964.8 + :knocked-hard-vy-lo 183500.8 + :knocked-hard-vy-hi 209715.2 + :knocked-huge-vxz-lo 164659.2 + :knocked-huge-vxz-hi 249036.8 + :knocked-huge-vy-lo 183500.8 + :knocked-huge-vy-hi 217907.2 + :knocked-yellow-vxz-lo 40960.0 + :knocked-yellow-vxz-hi 49152.0 + :knocked-yellow-vy-lo 57344.0 + :knocked-yellow-vy-hi 81920.0 + :knocked-red-vxz-lo 24576.0 + :knocked-red-vxz-hi 196608.0 + :knocked-red-vy-lo 94208.0 + :knocked-red-vy-hi 151552.0 + :knocked-blue-vxz-lo 40960.0 + :knocked-blue-vxz-hi 49152.0 + :knocked-blue-vy-lo 24576.0 + :knocked-blue-vy-hi 81920.0 + :shadow-size (meters 1) + :shadow-max-y (meters 1) + :shadow-min-y (meters -1) + :shadow-locus-dist (meters 150) + :gem-joint -1 + :gem-offset (new 'static 'sphere :r 163840.0) + ) + ) + +(set! (-> *sew-gunturret-enemy-info* fact-defaults) *fact-info-enemy-defaults*) + +(defmethod sew-gunturret-method-137 sew-gunturret ((obj sew-gunturret) (arg0 symbol)) + (cond + ((and arg0 (-> obj los-clear)) + (let ((a0-2 (handle->process (-> obj focus handle)))) + (if a0-2 + (set! (-> obj aim-pos quad) (-> (get-trans (the-as process-focusable a0-2) 3) quad)) + ) + ) + ) + (else + (sew-gunturret-method-139 obj) + ) + ) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s5-2 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data (-> obj params track-joint)))) + ) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (vector-! s4-0 (-> obj aim-pos) (-> obj root-override2 trans)) + (vector-flatten! s4-0 s4-0 (the-as vector (&-> obj stack 496))) + (vector-normalize! s4-0 1.0) + (set! (-> obj desired-twist) (asin (vector-dot (the-as vector (-> obj init-mat)) s4-0))) + (set! (-> obj desired-twist) (fmin 5461.3335 (fmax -5461.3335 (-> obj desired-twist)))) + (cond + ((< 0.0 (vector-dot (the-as vector (&-> obj stack 512)) s4-0)) + ) + ((< (-> obj desired-twist) 0.0) + (set! (-> obj desired-twist) -5461.3335) + ) + (else + (set! (-> obj desired-twist) 5461.3335) + ) + ) + (cond + ((and (!= (-> obj activate-distance) 0.0) (< (fabs (-> obj desired-twist)) 5461.3335)) + (vector-normalize-copy! s3-0 (-> obj node-list data (-> obj params track-joint) bone transform vector 1) 1.0) + (vector-! s4-0 (-> obj aim-pos) s5-2) + (vector-normalize! s4-0 1.0) + (set! (-> obj desired-tilt) (- (asin (vector-dot s3-0 s4-0)))) + (set! (-> obj desired-tilt) (fmin 5461.3335 (fmax 0.0 (-> obj desired-tilt)))) + ) + (else + (set! (-> obj desired-tilt) 0.0) + ) + ) + ) + (vector-normalize-copy! + (-> obj aim-pos) + (-> obj node-list data (-> obj params barrel-joint) bone transform vector 2) + (vector-vector-distance s5-2 (-> obj aim-pos)) + ) + ) + (vector+! + (-> obj aim-pos) + (-> obj aim-pos) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data (-> obj params gun-joint))) + ) + (let ((s5-4 (new 'stack-no-clear 'matrix))) + (+! (-> obj gun-twist) (fmax -364.0889 (fmin 364.0889 (* 0.3 (- (-> obj desired-twist) (-> obj gun-twist)))))) + (matrix-rotate-y! s5-4 (-> obj gun-twist)) + (matrix*! s5-4 s5-4 (-> obj init-mat)) + (matrix->quaternion (-> obj root-override2 quat) s5-4) + ) + (+! (-> obj gun-tilt) (fmax -364.0889 (fmin 364.0889 (* 0.3 (- (-> obj desired-tilt) (-> obj gun-tilt)))))) + (quaternion-axis-angle! (-> obj gun-tilt-jm quat) 1.0 0.0 0.0 (-> obj gun-tilt)) + 0 + (none) + ) + +(defmethod sew-gunturret-method-138 sew-gunturret ((obj sew-gunturret)) + (let ((a0-2 (handle->process (-> obj focus handle)))) + (if a0-2 + (set! (-> obj aim-pos quad) (-> (get-trans (the-as process-focusable a0-2) 3) quad)) + ) + ) + (let* ((s4-0 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data (-> obj params gun-joint)))) + (s5-3 (vector-! (new 'stack-no-clear 'vector) (-> obj aim-pos) s4-0)) + ) + (when (< (vector-dot + (vector-normalize-copy! (new 'stack-no-clear 'vector) s5-3 1.0) + (the-as vector (&-> obj stack 512)) + ) + (cos 364.0889) + ) + (let ((a1-5 (new 'stack-no-clear 'collide-query))) + (set! (-> a1-5 start-pos quad) (-> s4-0 quad)) + (set! (-> a1-5 move-dist quad) (-> s5-3 quad)) + (let ((v1-17 a1-5)) + (set! (-> v1-17 radius) 409.6) + (set! (-> v1-17 collide-with) + (collide-spec backgnd crate obstacle hit-by-player-list hit-by-others-list pusher) + ) + (set! (-> v1-17 ignore-process0) obj) + (set! (-> v1-17 ignore-process1) #f) + (set! (-> v1-17 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1)) + (set! (-> v1-17 action-mask) (collide-action solid)) + ) + (if (>= (fill-and-probe-using-line-sphere *collide-cache* a1-5) 0.0) + (set! (-> obj los-clear) #f) + (set! (-> obj los-clear) (the-as basic #t)) + ) + ) + ) + ) + 0 + (none) + ) + +(defmethod sew-gunturret-method-139 sew-gunturret ((obj sew-gunturret)) + (vector+float*! (-> obj aim-pos) (-> obj root-override2 trans) (the-as vector (&-> obj stack 512)) 163840.0) + 0 + (none) + ) + +(defmethod sew-gunturret-method-140 sew-gunturret ((obj sew-gunturret) (arg0 symbol)) + (let ((v1-4 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data (-> obj params gun-joint)))) + (s4-0 (new 'stack-no-clear 'projectile-init-by-other-params)) + ) + (let* ((s2-1 (vector-! (new 'stack-no-clear 'vector) (-> obj aim-pos) v1-4)) + (f30-0 (/ 2013265900.0 (vector-length s2-1))) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s4-0 ent) (-> obj entity)) + (set! (-> s4-0 charge) 1.0) + (set! (-> s4-0 options) (projectile-options)) + (set! (-> s4-0 pos quad) (-> v1-4 quad)) + (set! (-> s4-0 notify-handle) (process->handle obj)) + (set! (-> s4-0 owner-handle) (the-as handle #f)) + (set! (-> s4-0 ignore-handle) (process->handle obj)) + (let* ((v1-12 *game-info*) + (a0-18 (+ (-> v1-12 attack-id) 1)) + ) + (set! (-> v1-12 attack-id) a0-18) + (set! (-> s4-0 attack-id) a0-18) + ) + (set! (-> s4-0 timeout) (new 'static 'handle :process #x4b0 :u64 #x4b0)) + (vector-normalize-copy! (-> s4-0 vel) s2-1 491520.0) + (let ((f30-1 (fmin 16384.0 f30-0))) + (set-vector! s3-0 (-> s2-1 z) (-> s2-1 y) (- (-> s2-1 x)) 1.0) + (vector-normalize! s3-0 (rand-vu-float-range (- f30-1) f30-1)) + (vector+! (-> s4-0 vel) (-> s4-0 vel) s3-0) + (vector-cross! s3-0 s3-0 (-> s4-0 vel)) + (vector-normalize! s3-0 (rand-vu-float-range (- f30-1) f30-1)) + ) + (vector+! (-> s4-0 vel) (-> s4-0 vel) s3-0) + ) + (spawn-projectile guard-shot s4-0 obj *default-dead-pool*) + ) + (if arg0 + (sound-play "gtur-shot-fire") + ) + (set! (-> obj flash-state) (the-as basic #t)) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 0))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 1))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 2))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 3))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 4))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 5))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 6))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 7))) + (none) + ) + +(defstate hostile (sew-gunturret) + :virtual #t + :exit (behavior () + (let ((t9-0 (-> (method-of-type enemy hostile) exit))) + (if t9-0 + (t9-0) + ) + ) + (ja :group! (-> self draw art-group data (-> self params idle-anim))) + (set! (-> self flash-state) #f) + (none) + ) + :trans (behavior () + (if (and (logtest? (-> self enemy-flags) (enemy-flag look-at-focus)) (-> self enemy-info use-victory)) + (go-virtual victory) + ) + (when (>= (- (-> self clock frame-counter) (-> self state-time)) (the-as time-frame (-> self reaction-time))) + (if (>= 2 (the-as int (-> self focus aware))) + (go-stare self) + ) + ) + (set! (-> self root-override2 penetrated-by) (enemy-method-59 self)) + (none) + ) + :code (behavior () + (sew-gunturret-method-139 self) + (until #f + (-> self clock frame-counter) + (until (>= (- (-> self clock frame-counter) (-> self last-hit-time)) (seconds 2)) + (suspend) + ) + (sew-gunturret-method-138 self) + (sound-play "sew-gun-lock") + (let ((gp-1 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-1) (seconds 0.75)) + (sew-gunturret-method-137 self #t) + (suspend) + ) + ) + (ja :group! (-> self draw art-group data (-> self params shoot-anim))) + (let ((s5-1 0) + (gp-2 #t) + ) + (sound-play "gturret") + (let ((s4-1 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) s4-1) (seconds 0.125)) + (cond + ((not (-> self can-shoot)) + ) + ((>= (- (-> self clock frame-counter) (the-as time-frame s5-1)) (seconds 0.05)) + (sew-gunturret-method-140 self gp-2) + (set! s5-1 (the-as int (-> self clock frame-counter))) + (set! gp-2 (not gp-2)) + ) + (else + (set! (-> self flash-state) #f) + ) + ) + (ja :num! (loop!)) + (suspend) + ) + ) + ) + (set! (-> self flash-state) #f) + (ja-channel-push! 1 (seconds 0.2)) + (ja :group! (-> self draw art-group data (-> self params idle-anim))) + (let ((gp-3 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-3) (seconds 0.5)) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 0))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 1))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 2))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 3))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 4))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 5))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 6))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 7))) + (suspend) + ) + ) + ) + #f + (none) + ) + ) + +(defstate stare (sew-gunturret) + :virtual #t + :trans (behavior () + (let ((t9-0 (-> (method-of-type enemy stare) trans))) + (if t9-0 + (t9-0) + ) + ) + (if (!= (-> self activate-distance) 0.0) + (sew-gunturret-method-137 self #f) + ) + (none) + ) + ) + +(defmethod enemy-method-74 sew-gunturret ((obj sew-gunturret) (arg0 process) (arg1 object) (arg2 symbol) (arg3 event-message-block)) + (with-pp + (if (and (= arg2 'notify) (< 1 (the-as int arg1)) (= (-> arg3 param 0) 'attack) (= (-> arg3 param 1) *target*)) + (set! (-> obj last-hit-time) (-> pp clock frame-counter)) + ) + (case arg2 + (('start) + (let ((v0-0 (the-as object #t))) + (set! (-> obj can-shoot) (the-as symbol v0-0)) + v0-0 + ) + ) + (('stop) + (set! (-> obj can-shoot) #f) + #f + ) + (('bonk) + (send-event arg0 'target-mech-get-off 90) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) (process->ppointer pp)) + (set! (-> a1-10 num-params) 2) + (set! (-> a1-10 message) 'shove) + (set! (-> a1-10 param 0) (the-as uint #f)) + (let ((v1-17 (new 'static 'attack-info :mask (attack-info-mask shove-back shove-up id)))) + (let* ((a0-4 *game-info*) + (a2-2 (+ (-> a0-4 attack-id) 1)) + ) + (set! (-> a0-4 attack-id) a2-2) + (set! (-> v1-17 id) a2-2) + ) + (set! (-> v1-17 shove-back) 8192.0) + (set! (-> v1-17 shove-up) 2048.0) + (set! (-> a1-10 param 1) (the-as uint v1-17)) + ) + (send-event-function arg0 a1-10) + ) + #f + ) + (('flash-state) + (-> obj flash-state) + ) + (else + ((method-of-type enemy enemy-method-74) obj arg0 arg1 arg2 arg3) + ) + ) + ) + ) + +(defstate die (sew-gunturret) + :virtual #t + :enter (behavior () + (enemy-method-132 self) + (let ((v1-3 (-> self root-override2 root-prim))) + (set! (-> v1-3 prim-core collide-as) (collide-spec)) + (set! (-> v1-3 prim-core collide-with) (collide-spec)) + ) + 0 + (set! (-> self hit-points) 0) + (talker-speech-class-method-10 (-> *talker-speech* 53)) + (none) + ) + :code (behavior () + (let ((gp-0 (new 'stack 'joint-exploder-tuning (the-as uint 0)))) + (process-spawn joint-exploder (-> self params explode-sg) 6 gp-0 *sew-gunturret-exploder-params* :to self) + ) + (activate! *camera-smush-control* 819.2 37 210 1.0 0.995 (-> self clock)) + (sound-play "turret-explode") + (suspend) + (cleanup-for-death self) + (ja-channel-set! 0) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (set! (-> gp-2 quad) (-> self root-override2 trans quad)) + (set! (-> gp-2 y) (+ 10240.0 (-> gp-2 y))) + (let ((s5-2 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) s5-2) (seconds 2)) + (spawn (-> self part) gp-2) + (suspend) + ) + ) + ) + (let ((gp-3 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-3) (seconds 1)) + (suspend) + ) + ) + (send-event self 'death-end) + (while (-> self child) + (suspend) + ) + (none) + ) + :post (behavior () + (enemy-method-55 self) + (none) + ) + ) + +(defmethod enemy-method-114 sew-gunturret ((obj sew-gunturret)) + "@abstract" + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) cshape-reaction-default) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (set! (-> s5-0 penetrated-by) (penetrate + generic-attack + lunge + flop + punch + spin + roll + uppercut + bonk + tube + vehicle + flut-attack + board + mech-punch + dark-punch + dark-giant + ) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) + (set! (-> s5-0 total-prims) (the-as uint 3)) + (set! (-> s4-0 prim-core collide-as) (collide-spec enemy)) + (set! (-> s4-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s4-0 prim-core action) (collide-action solid no-standon)) + (set! (-> s4-0 transform-index) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 9216.0 4096.0 18432.0) + (set! (-> s5-0 root-prim) s4-0) + ) + (let ((v1-14 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-14 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-14 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-14 prim-core action) (collide-action solid no-standon)) + (set! (-> v1-14 transform-index) 3) + (set-vector! (-> v1-14 local-sphere) 0.0 6144.0 0.0 11264.0) + ) + (let ((v1-16 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-16 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-16 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-16 prim-core action) (collide-action solid no-standon)) + (set! (-> v1-16 transform-index) 5) + (set-vector! (-> v1-16 local-sphere) 0.0 0.0 -5120.0 4096.0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-19 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-19 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-19 prim-core collide-with)) + ) + (set! (-> obj root-override2) s5-0) + ) + 0 + (none) + ) + +(defmethod enemy-method-98 sew-gunturret ((obj sew-gunturret) (arg0 process-focusable) (arg1 vector)) + (cond + ((= (-> obj activate-distance) 0.0) + (return #t) + ) + (else + (let ((f0-2 (vector-dot + (vector-! (new 'stack-no-clear 'vector) (get-trans arg0 3) (-> obj root-override2 trans)) + (the-as vector (&-> obj stack 512)) + ) + ) + ) + (return (and (< 0.0 f0-2) (< f0-2 (-> obj activate-distance)))) + ) + ) + ) + (the-as symbol 0) + ) + +(defmethod deactivate sew-gunturret ((obj sew-gunturret)) + (if (nonzero? (-> obj smoke-part)) + (kill-and-free-particles (-> obj smoke-part)) + ) + (if (nonzero? (-> obj casing-part)) + (kill-and-free-particles (-> obj casing-part)) + ) + ((method-of-type enemy deactivate) obj) + (none) + ) + +(defmethod coin-flip? sew-gunturret ((obj sew-gunturret)) + "@returns The result of a 50/50 RNG roll" + #f + ) + +;; WARN: Return type mismatch enemy vs sew-gunturret. +(defmethod relocate sew-gunturret ((obj sew-gunturret) (arg0 int)) + (if (nonzero? (-> obj gun-tilt-jm)) + (&+! (-> obj gun-tilt-jm) arg0) + ) + (if (nonzero? (-> obj smoke-part)) + (&+! (-> obj smoke-part) arg0) + ) + (if (nonzero? (-> obj casing-part)) + (&+! (-> obj casing-part) arg0) + ) + (the-as sew-gunturret ((method-of-type enemy relocate) obj arg0)) + ) + +(defmethod sew-gunturret-method-141 sew-gunturret ((obj sew-gunturret)) + (let ((s5-0 + (new 'static 'gun-turret-params + :idle-anim 2 + :shoot-anim 3 + :track-joint 6 + :barrel-joint 4 + :gun-joint 5 + :hole-joints (new 'static 'array int32 8 7 8 9 10 11 12 13 14) + ) + ) + ) + (set! (-> s5-0 normal-sg) + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-gunturret" (the-as (pointer uint32) #f))) + ) + (set! (-> s5-0 explode-sg) + (the-as + skeleton-group + (art-group-get-by-name *level* "skel-sew-gunturret-explode" (the-as (pointer uint32) #f)) + ) + ) + (set! (-> s5-0 enemy-info) *sew-gunturret-enemy-info*) + (set! (-> obj params) s5-0) + ) + 0 + (none) + ) + +(defmethod enemy-method-115 sew-gunturret ((obj sew-gunturret)) + "@abstract" + (sew-gunturret-method-141 obj) + (initialize-skeleton obj (-> obj params normal-sg) (the-as pair 0)) + (enemy-method-113 obj (-> obj params enemy-info)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (logclear! (-> obj enemy-flags) (enemy-flag notice)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 1126) obj)) + (set! (-> obj smoke-part) (create-launch-control (-> *part-group-id-table* 1127) obj)) + (set! (-> obj casing-part) (create-launch-control (-> *part-group-id-table* 1128) obj)) + (set! (-> obj gun-tilt-jm) + (new 'process 'joint-mod (joint-mod-mode joint-set*) obj (-> obj params barrel-joint)) + ) + (set! (-> obj los-clear) #f) + (set! (-> obj gun-twist) 0.0) + (set! (-> obj gun-tilt) 0.0) + (set! (-> obj desired-twist) 0.0) + (set! (-> obj desired-tilt) 0.0) + (set! (-> obj flash-state) #f) + (set! (-> obj can-shoot) #t) + (set! (-> obj last-hit-time) 0) + (quaternion->matrix (-> obj init-mat) (-> obj root-override2 quat)) + (set! (-> obj activate-distance) (res-lump-float (-> obj entity) 'distance)) + 0 + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod go-idle sew-gunturret ((obj sew-gunturret)) + (cond + ((task-node-closed? (game-task-node sewer-enemy-blow-up-turrets)) + (cleanup-for-death obj) + (go (method-of-object obj die-fast)) + ) + (else + (go (method-of-object obj idle)) + ) + ) + (none) + ) + +(defskelgroup skel-pal-gun-turret pal-gun-turret 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 0 0 4)) + +(defskelgroup skel-pal-gun-turret-explode pal-gun-turret 4 6 + ((5 (meters 999999))) + :bounds (static-spherem 0 0 0 15) + ) + +(define *pal-gun-turret-enemy-info* (new 'static 'enemy-info + :use-die-falling #f + :use-victory #f + :use-jump-blocked #f + :debug-draw-neck #f + :jump-debug-draw #f + :move-to-ground #f + :hover-if-no-ground #f + :idle-anim-script (new 'static 'array uint32 4 #x2020201 #x0 #x0 #x0) + :idle-anim 2 + :notice-anim 2 + :hostile-anim 2 + :hit-anim 2 + :knocked-anim -1 + :knocked-land-anim -1 + :die-anim 2 + :die-falling-anim -1 + :victory-anim -1 + :jump-wind-up-anim -1 + :jump-in-air-anim -1 + :jump-land-anim -1 + :neck-joint -1 + :notice-distance (meters 150) + :notice-distance-delta (meters 10) + :proximity-notice-distance (meters 150) + :default-hit-points 1 + :gnd-collide-with (collide-spec backgnd) + :overlaps-others-collide-with-filter (collide-spec jak bot player-list) + :movement-gravity (meters -100) + :friction 0.8 + :attack-shove-back (meters 3) + :attack-shove-up (meters 2) + :attack-mode 'generic + :attack-damage 2 + :jump-height-min (meters 3) + :jump-height-factor 0.5 + :knocked-seek-ry-clamp 2730.6667 + :knocked-soft-vxz-lo 72089.6 + :knocked-soft-vxz-hi 108134.4 + :knocked-soft-vy-lo 81920.0 + :knocked-soft-vy-hi 122880.0 + :knocked-medium-vxz-lo 147456.0 + :knocked-medium-vxz-hi 196608.0 + :knocked-medium-vy-lo 135168.0 + :knocked-medium-vy-hi 151552.0 + :knocked-hard-vxz-lo 78643.2 + :knocked-hard-vxz-hi 117964.8 + :knocked-hard-vy-lo 183500.8 + :knocked-hard-vy-hi 209715.2 + :knocked-huge-vxz-lo 164659.2 + :knocked-huge-vxz-hi 249036.8 + :knocked-huge-vy-lo 183500.8 + :knocked-huge-vy-hi 217907.2 + :knocked-yellow-vxz-lo 40960.0 + :knocked-yellow-vxz-hi 49152.0 + :knocked-yellow-vy-lo 57344.0 + :knocked-yellow-vy-hi 81920.0 + :knocked-red-vxz-lo 24576.0 + :knocked-red-vxz-hi 196608.0 + :knocked-red-vy-lo 94208.0 + :knocked-red-vy-hi 151552.0 + :knocked-blue-vxz-lo 40960.0 + :knocked-blue-vxz-hi 49152.0 + :knocked-blue-vy-lo 24576.0 + :knocked-blue-vy-hi 81920.0 + :shadow-size (meters 1) + :shadow-max-y (meters 1) + :shadow-min-y (meters -1) + :shadow-locus-dist (meters 150) + :gem-joint -1 + :gem-offset (new 'static 'sphere :r 163840.0) + ) + ) + +(set! (-> *pal-gun-turret-enemy-info* fact-defaults) *fact-info-enemy-defaults*) + +(deftype pal-gun-turret (sew-gunturret) + () + :heap-base #x230 + :method-count-assert 142 + :size-assert #x2a4 + :flag-assert #x8e023002a4 + (:methods + (pal-gun-turret-method-140 (_type_ symbol) float :replace 140) + ) + ) + + +(defmethod pal-gun-turret-method-140 pal-gun-turret ((obj pal-gun-turret) (arg0 symbol)) + ((the-as (function sew-gunturret symbol none) (find-parent-method pal-gun-turret 140)) obj arg0) + (set-palcab-turret-flash! 1.0) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod go-idle pal-gun-turret ((obj pal-gun-turret)) + (go (method-of-object obj idle)) + (none) + ) + +(defmethod sew-gunturret-method-141 pal-gun-turret ((obj pal-gun-turret)) + (let ((s5-0 + (new 'static 'gun-turret-params + :idle-anim 2 + :shoot-anim 3 + :track-joint 6 + :barrel-joint 4 + :gun-joint 5 + :hole-joints (new 'static 'array int32 8 7 8 9 10 11 12 13 14) + ) + ) + ) + (set! (-> s5-0 normal-sg) + (the-as skeleton-group (art-group-get-by-name *level* "skel-pal-gun-turret" (the-as (pointer uint32) #f))) + ) + (set! (-> s5-0 explode-sg) + (the-as + skeleton-group + (art-group-get-by-name *level* "skel-pal-gun-turret-explode" (the-as (pointer uint32) #f)) + ) + ) + (set! (-> s5-0 enemy-info) *pal-gun-turret-enemy-info*) + (set! (-> obj params) s5-0) + ) + 0 + (none) + ) diff --git a/goal_src/jak2/levels/fortress/ammo_dump/fordumpc-part.gc b/goal_src/jak2/levels/fortress/ammo_dump/fordumpc-part.gc index 211d0e9279..3ff9725c2f 100644 --- a/goal_src/jak2/levels/fortress/ammo_dump/fordumpc-part.gc +++ b/goal_src/jak2/levels/fortress/ammo_dump/fordumpc-part.gc @@ -7,3 +7,2861 @@ ;; DECOMP BEGINS +(deftype fordumpc-part (part-spawner) + () + :heap-base #x30 + :method-count-assert 16 + :size-assert #xb0 + :flag-assert #x10003000b0 + ) + + +(defpartgroup group-fordumpc-panel-1 + :id 563 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2476 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 100) + (sp-item 2477 :fade-after (meters 80) :flags (bit6 bit7) :period 400 :length 100) + (sp-item 2478 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 300) + (sp-item 2479 :fade-after (meters 40) :flags (bit6 bit7) :period 800 :length 225) + ) + ) + +(defpart 2476 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.075)) + (sp-flt spt-y (meters 1.8)) + (sp-flt spt-z (meters 0.2)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2477 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 3)) + (sp-flt spt-y (meters -0.5)) + (sp-flt spt-z (meters -0.2)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2478 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 2.85)) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2479 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1.25)) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fordumpc-panel-4 + :id 564 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2480 :fade-after (meters 40) :flags (bit6 bit7) :period 300 :length 150 :offset 150) + (sp-item 2481 :fade-after (meters 60) :flags (bit6 bit7) :period 450 :length 150 :offset 150) + (sp-item 2482 :fade-after (meters 80) :flags (bit6 bit7) :period 600 :length 150 :offset 300) + (sp-item 2483 :fade-after (meters 40) :flags (bit6 bit7) :period 150 :length 50) + (sp-item 2484 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 150 :offset 450) + (sp-item 2485 :fade-after (meters 80) :flags (bit6 bit7) :period 600 :length 300 :offset 150) + (sp-item 2486 :fade-after (meters 40) :flags (bit6 bit7) :period 450 :length 150) + (sp-item 2487 :fade-after (meters 40) :flags (bit6 bit7) :period 600 :length 50 :offset 250) + (sp-item 2488 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 300) + (sp-item 2489 :fade-after (meters 40) :flags (bit6 bit7) :period 100 :length 50 :offset 50) + (sp-item 2490 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 500) + (sp-item 2491 :fade-after (meters 40) :flags (bit6 bit7) :period 600 :length 50 :offset 150) + (sp-item 2492 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 550) + (sp-item 2493 :fade-after (meters 40) :flags (bit6 bit7) :period 600 :length 50 :offset 350) + (sp-item 2494 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 200) + (sp-item 2495 :fade-after (meters 40) :flags (bit6 bit7) :period 100 :length 50) + (sp-item 2496 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 50) + (sp-item 2497 :fade-after (meters 40) :flags (bit6 bit7) :period 600 :length 50 :offset 250) + (sp-item 2498 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 400) + (sp-item 2499 :fade-after (meters 40) :flags (bit6 bit7) :period 600 :length 50 :offset 100) + (sp-item 2500 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 600) + ) + ) + +(defpart 2487 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.8)) + (sp-flt spt-y (meters 0.54)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2488 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -3.15)) + (sp-flt spt-y (meters 0.54)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2489 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -3.15)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2490 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -3.15)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2491 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.75)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2492 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.45)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2493 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.75)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2494 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.45)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2495 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -1.8)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2496 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.85)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2497 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.55)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2498 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -1.8)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2499 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.85)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2500 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.55)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2480 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.6)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2481 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 2.45)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2482 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 2.45)) + (sp-flt spt-y (meters -0.6)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2483 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.4)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2484 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.4)) + (sp-flt spt-y (meters -0.6)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2485 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1.15)) + (sp-flt spt-y (meters -0.6)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2486 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.1)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fordumpc-overhead-lights + :id 565 + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 2501 :fade-after (meters 80) :flags (bit6)) (sp-item 2502 :fade-after (meters 100) :flags (bit6))) + ) + +(defpart 2501 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.25)) + (sp-rnd-flt spt-scale-x (meters 5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees -5.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + ) + ) + +(defpart 2502 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.25)) + (sp-rnd-flt spt-scale-x (meters 14) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees -5.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 411648.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + ) + ) + +(defpartgroup group-fordumpc-red-glows + :id 566 + :bounds (static-bspherem 0 0 0 6) + :parts ((sp-item 2503 :fade-after (meters 80) :flags (bit6)) (sp-item 2504 :fade-after (meters 100) :flags (bit6))) + ) + +(defpart 2503 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 3) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees 17.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 20.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 5120.0) + ) + ) + +(defpart 2504 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 10) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees 17.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 12.0) + (sp-flt spt-omega 411648.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 5120.0) + ) + ) + +(defpartgroup group-fordumpc-blue-lights + :id 567 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 4) + :parts ((sp-item 2505 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2506 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2507 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2508 :fade-after (meters 100) :flags (bit6 bit7)) + ) + ) + +(defpart 2505 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 20.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2506 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2507 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.3)) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2508 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 12.0) + (sp-flt spt-omega 412467.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fordumpc-red-lights + :id 568 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 4) + :parts ((sp-item 2509 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2510 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2511 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2512 :fade-after (meters 100) :flags (bit6 bit7)) + ) + ) + +(defpart 2509 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2510 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2511 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.3)) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2512 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 412467.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fordumpc-yellow-lights + :id 569 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 4) + :parts ((sp-item 2513 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2514 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2515 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2516 :fade-after (meters 100) :flags (bit6 bit7)) + ) + ) + +(defpart 2513 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.06)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 200.0 55.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 10.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1638.4) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2514 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-flt spt-z (meters 0.06)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 200.0 55.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 10.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1638.4) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2515 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.3)) + (sp-flt spt-z (meters 0.06)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 200.0 55.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 10.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1638.4) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2516 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 200.0 55.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 10.0 4.0 1.0) + (sp-flt spt-omega 412467.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1638.4) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fordumpc-yellow-glows + :id 570 + :bounds (static-bspherem 0 0 0 6) + :parts ((sp-item 2517 :fade-after (meters 80) :flags (bit6)) (sp-item 2518 :fade-after (meters 100) :flags (bit6))) + ) + +(defpart 2517 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees 17.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 20.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 5120.0) + ) + ) + +(defpart 2518 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees 17.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 411648.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 5120.0) + ) + ) + +(defpartgroup group-fordumpc-single-red-lights + :id 571 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 2519 :fade-after (meters 80) :flags (bit6) :period 300 :length 150)) + ) + +(defpart 2519 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.6) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-bomb-explosion + :id 572 + :duration (seconds 3) + :linger-duration (seconds 1) + :flags (use-local-clock unk-5 unk-6) + :bounds (static-bspherem 0 0 0 15) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 2520 :flags (bit7) :period 1500 :length 25 :offset -10) + (sp-item 2521 :fade-after (meters 60) :flags (bit7) :period 1500 :length 30) + (sp-item 2522 :fade-after (meters 60) :falloff-to (meters 60) :flags (bit7) :period 1500 :length 100) + (sp-item 2523 :fade-after (meters 200) :falloff-to (meters 200) :flags (bit7) :period 1500 :length 50) + (sp-item 2524 :flags (bit7) :period 1500 :length 5 :offset -10) + (sp-item 2525 :fade-after (meters 150) :falloff-to (meters 150) :flags (bit7) :period 1500 :length 50) + ) + ) + +(defpart 2523 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x34 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-rot-z) + :flags (sp-flag spflag7) + :random-rangef 65536.0 + :random-multf 1.0 + ) + (sp-rnd-flt spt-scale-y (meters 0.8) (meters 0.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 2526) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-conerot-x) + :flags (sp-flag from-pointer) + :func '*sp-temp* + ) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2525 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a 0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 2526) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2526 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 2527) + ) + ) + +(defpart 2527 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.44) + (sp-flt spt-fade-g -2.36) + (sp-flt spt-fade-b -2.64) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2528) + ) + ) + +(defpart 2528 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2944444) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.094444446) + (sp-rnd-flt spt-fade-a -0.06545454 -0.06545454 1.0) + (sp-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 2529) + ) + ) + +(defpart 2529 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0)) + ) + +(defpart 2524 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x47 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 5)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters 0.5)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-b -5.1) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 100) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21) + (sp-int spt-next-time 50) + (sp-launcher-by-id spt-next-launcher 2530) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2530 + :init-specs ((sp-flt spt-scalevel-x (meters -0.2)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -2.56) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.92) + ) + ) + +(defpart 2522 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #xc)) + (sp-rnd-flt spt-num 5.0 3.0 1.0) + (sp-flt spt-x (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.083333336) (meters 0.083333336) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.0016666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.18) + (sp-flt spt-fade-b -2.12) + (sp-rnd-flt spt-accel-y -0.68266666 -1.3653333 1.0) + (sp-flt spt-friction 0.87) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2531) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2531 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.02) + (sp-flt spt-fade-b 0.23555556) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2532) + ) + ) + +(defpart 2532 + :init-specs ((sp-flt spt-fade-r -0.5543478) (sp-flt spt-fade-g -0.5543478) (sp-flt spt-fade-a -0.13913043)) + ) + +(defpart 2520 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 3.0 1.0 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 1.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 20.0 1.0) + (sp-rnd-flt spt-g 70.0 20.0 1.0) + (sp-rnd-flt spt-b 70.0 20.0 1.0) + (sp-rnd-flt spt-a 0.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.1) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.016666668) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 3.3) + (sp-flt spt-fade-g 3.12) + (sp-flt spt-fade-b 1.18) + (sp-flt spt-fade-a 1.76) + (sp-flt spt-friction 0.88) + (sp-int spt-timer 710) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2533) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2533 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -1.9666667) + (sp-flt spt-fade-b -2.2) + (sp-flt spt-fade-a -0.41666666) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2534) + ) + ) + +(defpart 2534 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.38833332) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.028333334) + (sp-flt spt-fade-a -0.38833332) + ) + ) + +(defpart 2521 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-rnd-flt spt-num 4.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.25) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.13333334) (meters 0.02) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 80) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fort-dump-bomb-a-steamescape + :id 573 + :bounds (static-bspherem 0 0 0 6) + :parts ((sp-item 2535 :fade-after (meters 100) :falloff-to (meters 100)) (sp-item 2536 :fade-after (meters 40))) + ) + +(defpart 2536 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-y (meters 0.1) (meters 0.4) 1.0) + (sp-rnd-flt spt-z (meters -0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 4.0 2.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 50) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2535 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 1.0 2.0 1.0) + (sp-flt spt-x (meters 0.5)) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 32.0 16.0 1.0) + (sp-flt spt-vel-y (meters -0.013333334)) + (sp-rnd-flt spt-scalevel-x (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-int spt-next-time 25) + (sp-launcher-by-id spt-next-launcher 2537) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +(defpart 2537 + :init-specs ((sp-rnd-flt spt-vel-x (meters -0.021666666) (meters 0.043333333) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-rnd-flt spt-vel-z (meters -0.021666666) (meters 0.043333333) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-rnd-flt spt-fade-a -0.096 -0.096 1.0) + (sp-flt spt-friction 0.94) + ) + ) + +(defpartgroup group-fordumpc-exit-panel + :id 574 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2538 :fade-after (meters 60) :flags (bit6 bit7) :period 50 :length 25) + (sp-item 2539 :fade-after (meters 60) :flags (bit6 bit7) :period 60 :length 20) + (sp-item 2540 :fade-after (meters 60) :flags (bit6 bit7) :period 75 :length 30) + ) + ) + +(defpart 2538 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.2)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 247398.4) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2539 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 247398.4) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2541 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.2)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 247398.4) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fordumpc-single-blue-lights + :id 575 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 2542 :fade-after (meters 80) :flags (bit6) :period 300 :length 150 :offset 150)) + ) + +(defpart 2542 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.6) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fordumpc-l-upsideown-panel + :id 576 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2543 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 100) + (sp-item 2544 :fade-after (meters 80) :flags (bit6 bit7) :period 225 :length 100) + (sp-item 2545 :fade-after (meters 80) :flags (bit6 bit7) :period 400 :length 100) + (sp-item 2546 :fade-after (meters 60) :flags (bit6 bit7) :period 100 :length 50) + (sp-item 2547 :fade-after (meters 40) :flags (bit6 bit7) :period 150 :length 50) + (sp-item 2548 :fade-after (meters 60) :flags (bit6 bit7) :period 125 :length 50) + (sp-item 2549 :fade-after (meters 40) :flags (bit6 bit7) :period 175 :length 50) + ) + ) + +(defpart 2543 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.55)) + (sp-flt spt-y (meters -2.35)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2544 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.95)) + (sp-flt spt-y (meters -2.35)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2545 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.75)) + (sp-flt spt-y (meters -1.8)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2546 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.8)) + (sp-flt spt-y (meters 0.25)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2547 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1.1)) + (sp-flt spt-y (meters 0.25)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2548 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.1)) + (sp-flt spt-y (meters 0.25)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2549 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.2)) + (sp-flt spt-y (meters 0.25)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fordumpc-l-panel + :id 577 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2550 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 75) + (sp-item 2551 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 75 :offset 150) + (sp-item 2552 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 75 :offset 50) + (sp-item 2553 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 75 :offset 100) + (sp-item 2554 :fade-after (meters 60) :flags (bit6 bit7) :period 100 :length 60) + (sp-item 2555 :fade-after (meters 40) :flags (bit6 bit7) :period 150 :length 50) + (sp-item 2556 :fade-after (meters 60) :flags (bit6 bit7) :period 125 :length 35) + (sp-item 2557 :fade-after (meters 40) :flags (bit6 bit7) :period 175 :length 50) + (sp-item 2558 :fade-after (meters 60) :flags (bit6 bit7) :period 75 :length 25) + (sp-item 2559 :fade-after (meters 40) :flags (bit6 bit7) :period 50 :length 25) + ) + ) + +(defpart 2550 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.55)) + (sp-flt spt-y (meters -2.15)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2551 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.9)) + (sp-flt spt-y (meters -2.15)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2552 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.55)) + (sp-flt spt-y (meters -1.75)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2553 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.9)) + (sp-flt spt-y (meters -1.75)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2554 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.7)) + (sp-flt spt-y (meters 1.75)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2555 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.45)) + (sp-flt spt-y (meters 1.75)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2556 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.7)) + (sp-flt spt-y (meters 0.15)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2557 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.45)) + (sp-flt spt-y (meters 0.15)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2558 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.7)) + (sp-flt spt-y (meters -1.5)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2559 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.45)) + (sp-flt spt-y (meters -1.5)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fortress-small-explosion + :id 578 + :duration (seconds 3) + :linger-duration (seconds 1) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 15) + :parts ((sp-item 209)) + ) + +(defpart 2560 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-x 2048.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 24.0) + (sp-flt spt-scalevel-x (meters 0.10666667)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -4.266667) + (sp-flt spt-fade-b -8.5) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 2048.0) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2561) + ) + ) + +(defpart 2561 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.85333335) + (sp-flt spt-fade-g -1.7066667) + (sp-flt spt-fade-b -1.7066667) + (sp-flt spt-fade-a -0.64) + ) + ) + +(defpart 2562 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x34 :page #xc)) + (sp-rnd-flt spt-num 2.0 0.2 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-rot-z) + :flags (sp-flag spflag7) + :random-rangef 655360.0 + :random-multf 1.0 + ) + (sp-rnd-flt spt-scale-y (meters 0.8) (meters 0.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int spt-next-time 25) + (sp-launcher-by-id spt-next-launcher 2563) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-conerot-x) + :flags (sp-flag from-pointer) + :func '*sp-temp* + ) + ) + ) + +(defpart 2564 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-rnd-flt spt-num 1.0 0.2 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int spt-next-time 25) + (sp-launcher-by-id spt-next-launcher 2563) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 2563 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 2565) + ) + ) + +(defpart 2565 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.44) + (sp-flt spt-fade-g -2.36) + (sp-flt spt-fade-b -2.64) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2566) + ) + ) + +(defpart 2566 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2944444) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.094444446) + (sp-rnd-flt spt-fade-a -0.06545454 -0.06545454 1.0) + (sp-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 2567) + ) + ) + +(defpart 2567 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0) (sp-flt spt-fade-a -0.1125)) + ) + +(defpart 2568 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 5)) + (sp-flt spt-rot-x 2048.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters 0.5)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-b -5.1) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 65) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-int spt-next-time 30) + (sp-launcher-by-id spt-next-launcher 2569) + ) + ) + +(defpart 2569 + :init-specs ((sp-flt spt-scalevel-x (meters -0.2857143)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -3.6571429) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -2.7428572) + ) + ) + +(defpart 2570 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #xc)) + (sp-rnd-flt spt-num 8.0 2.0 1.0) + (sp-flt spt-x (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.083333336) (meters 0.083333336) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.0016666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.18) + (sp-flt spt-fade-b -2.12) + (sp-rnd-flt spt-accel-y -0.68266666 -1.3653333 1.0) + (sp-flt spt-friction 0.87) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2571) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 2571 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.02) + (sp-flt spt-fade-b 0.23555556) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2572) + ) + ) + +(defpart 2572 + :init-specs ((sp-flt spt-fade-r -0.5543478) (sp-flt spt-fade-g -0.5543478) (sp-flt spt-fade-a -0.13913043)) + ) + +(defpart 2573 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 2.0 1.0 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 20.0 1.0) + (sp-rnd-flt spt-g 70.0 20.0 1.0) + (sp-rnd-flt spt-b 70.0 20.0 1.0) + (sp-rnd-flt spt-a 0.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.1) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 3.3) + (sp-flt spt-fade-g 3.12) + (sp-flt spt-fade-b 1.18) + (sp-flt spt-fade-a 1.76) + (sp-flt spt-friction 0.88) + (sp-int spt-timer 710) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2574) + (sp-rnd-flt spt-conerot-x (degrees -1440.0) (degrees 2880.0) 1.0) + ) + ) + +(defpart 2574 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -1.9666667) + (sp-flt spt-fade-b -2.2) + (sp-flt spt-fade-a -0.41666666) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2575) + ) + ) + +(defpart 2575 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.38833332) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.028333334) + (sp-flt spt-fade-a -0.38833332) + ) + ) + +(defpart 2576 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-rnd-flt spt-num 4.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.13333334) (meters 0.02) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + ) + ) + +(defpartgroup group-fortress-big-explosion + :id 579 + :duration (seconds 3) + :linger-duration (seconds 1) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 15) + :parts ((sp-item 2577 :flags (bit6) :period 900 :length 5) + (sp-item 2578 :flags (bit6) :period 900 :length 175) + (sp-item 2579 :flags (bit6) :period 900 :length 150) + (sp-item 2580 :flags (bit6) :period 900 :length 100) + (sp-item 2581 :flags (bit6) :period 900 :length 900) + ) + ) + +(defpart 2580 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2f :page #xc)) + (sp-flt spt-num 8.0) + (sp-flt spt-z (meters 10)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.5) (meters 2) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.1) (degrees 0.2) 1.0) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 40.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 4) 1.0) + ) + ) + +(defpart 2577 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 64)) + (sp-flt spt-rot-x 16384.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-rotvel-z (degrees 0.033333335)) + (sp-flt spt-fade-g -0.28444445) + (sp-flt spt-fade-b -0.56666666) + (sp-flt spt-fade-a -0.2488889) + (sp-int spt-timer 2000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 40960.0) + (sp-int spt-next-time 450) + (sp-launcher-by-id spt-next-launcher 2582) + ) + ) + +(defpart 2582 + :init-specs ((sp-flt spt-a 16.0) + (sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.28444445) + (sp-flt spt-fade-a 0.0) + ) + ) + +(defpart 2579 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-flt spt-num 4.0) + (sp-rnd-flt spt-scale-x (meters 3) (meters 3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 3) (meters 3) 1.0) + (sp-rnd-flt spt-r 64.0 64.0 1.0) + (sp-rnd-flt spt-g 32.0 64.0 1.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0022222223) (meters 0.0022222223) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.033333335) (degrees 0.06666667) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-14) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 90.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 6) 1.0) + ) + ) + +(defpart 2578 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-flt spt-num 12.0) + (sp-rnd-flt spt-scale-x (meters 3) (meters 6) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 3) (meters 6) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.033333335) (degrees 0.06666667) 1.0) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.21333334 -0.42666668 1.0) + (sp-flt spt-fade-b -0.85333335) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-int-plain-rnd spt-next-time 5 24 1) + (sp-launcher-by-id spt-next-launcher 2583) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 90.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 4) 1.0) + ) + ) + +(defpart 2581 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 4) (meters 6) 1.0) + (sp-flt spt-rot-x 8192.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 4) (meters 6) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.033333335) (degrees 0.06666667) 1.0) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.21333334 -0.42666668 1.0) + (sp-flt spt-fade-b -0.85333335) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 61440.0) + (sp-int-plain-rnd spt-next-time 5 24 1) + (sp-launcher-by-id spt-next-launcher 2583) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 90.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 4) 1.0) + ) + ) + +(defpart 2583 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008888889) (meters 0.008888889) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-fade-a 0.21333334 0.10666667 1.0) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 2584) + ) + ) + +(defpart 2584 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.14222223 -0.28444445 1.0) + (sp-flt spt-fade-b -0.28444445) + (sp-flt spt-fade-a -0.035555556) + (sp-int spt-next-time 450) + (sp-launcher-by-id spt-next-launcher 2585) + ) + ) + +(defpart 2585 + :init-specs ((sp-flt spt-fade-r -0.10666667) (sp-flt spt-fade-g -0.21333334) (sp-flt spt-fade-a -0.026666667)) + ) + +(defpartgroup group-fortress-side-explosion + :id 580 + :duration (seconds 3) + :linger-duration (seconds 1) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 400) + :parts ((sp-item 2586 :flags (bit6) :period 900 :length 30 :offset 10) + (sp-item 2587 :flags (bit6) :period 900 :length 5) + (sp-item 2588 :flags (bit6) :period 900 :length 30) + (sp-item 2589 :flags (bit6) :period 900 :length 30) + (sp-item 2588 :flags (bit6) :period 900 :length 15) + (sp-item 2589 :flags (bit6) :period 900 :length 15) + (sp-item 2588 :flags (bit6) :period 900 :length 10) + (sp-item 2589 :flags (bit6) :period 900 :length 10) + (sp-item 2590 :flags (bit6) :period 900 :length 25) + (sp-item 2591 :flags (bit6) :period 900 :length 30) + (sp-item 2592 :flags (bit6) :period 900 :length 30) + ) + ) + +(defpart 2592 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2f :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -2) (meters 2) 1.0) + (sp-rnd-flt spt-y (meters -3) (meters 2) 1.0) + (sp-flt spt-z (meters 50)) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.3) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-rnd-flt spt-fade-a 0.0 -0.21333334 1.0) + (sp-rnd-flt spt-accel-y -9.557333 -2.7306666 1.0) + (sp-rnd-flt spt-friction 0.93 0.04 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +(defpart 2591 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -2) (meters 2) 1.0) + (sp-rnd-flt spt-y (meters -3) (meters 2) 1.0) + (sp-flt spt-z (meters 50)) + (sp-flt spt-scale-x (meters 0.1)) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 255.0 1.0) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.16666667) 1.0) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.10666667 -0.21333334 1.0) + (sp-flt spt-fade-b -0.425) + (sp-rnd-flt spt-fade-a -0.21333334 -0.21333334 1.0) + (sp-rnd-flt spt-accel-y -2.7306666 -2.7306666 1.0) + (sp-rnd-flt spt-friction 0.93 0.04 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +(defpart 2586 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-rnd-flt spt-num 8.0 2.0 1.0) + (sp-flt spt-x (meters 50)) + (sp-flt spt-y (meters -2)) + (sp-flt spt-z (meters -2)) + (sp-rnd-flt spt-scale-x (meters 2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 160.0) (degrees 40.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.16666667) (meters 0.1) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-rnd-flt spt-fade-a -0.4 -0.4 1.0) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + ) + ) + +(defpart 2587 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 55)) + (sp-flt spt-y (meters -2)) + (sp-flt spt-z (meters -2)) + (sp-flt spt-scale-x (meters 64)) + (sp-flt spt-rot-x 16384.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 32.0) + (sp-flt spt-scalevel-x (meters -0.256)) + (sp-flt spt-rotvel-z (degrees 0.033333335)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.64) + (sp-flt spt-fade-b -1.275) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 40960.0) + ) + ) + +(defpart 2589 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters -2) (meters 2) 1.0) + (sp-rnd-flt spt-y (meters -3) (meters 2) 1.0) + (sp-flt spt-z (meters 55)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1) (meters 3) 1.0) + (sp-flt spt-r 64.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.21333334 -0.28444445 1.0) + (sp-flt spt-fade-b -0.85) + (sp-rnd-flt spt-fade-a -0.16 -0.16 1.0) + (sp-rnd-flt spt-accel-y 4.096 2.7306666 1.0) + (sp-rnd-flt spt-friction 0.94 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-14) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +(defpart 2588 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters -2) (meters 2) 1.0) + (sp-rnd-flt spt-y (meters -3) (meters 2) 1.0) + (sp-flt spt-z (meters 55)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1) (meters 3) 1.0) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 255.0 1.0) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 32.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.21333334 -0.28444445 1.0) + (sp-flt spt-fade-b -0.85) + (sp-rnd-flt spt-fade-a -0.16 -0.16 1.0) + (sp-rnd-flt spt-accel-y 4.096 2.7306666 1.0) + (sp-rnd-flt spt-friction 0.94 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +(defpart 2590 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-x (meters -4) (meters 4) 1.0) + (sp-rnd-flt spt-y (meters -5) (meters 4) 1.0) + (sp-flt spt-z (meters 55)) + (sp-rnd-flt spt-scale-x (meters 2) (meters 3) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-rnd-flt spt-scale-y (meters 2) (meters 3) 1.0) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 255.0 1.0) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 8.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.06666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.02) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.21333334 -0.28444445 1.0) + (sp-flt spt-fade-b -0.85) + (sp-rnd-flt spt-fade-a -0.08 -0.08 1.0) + (sp-rnd-flt spt-accel-y 4.096 2.7306666 1.0) + (sp-rnd-flt spt-friction 0.94 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 4096.0) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +(defpartgroup group-missile-target-explosion + :id 581 + :duration (seconds 3) + :linger-duration (seconds 1) + :flags (use-local-clock unk-5 unk-6) + :bounds (static-bspherem 0 0 0 15) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 2593 :flags (bit7) :period 1500 :length 25 :offset -10) + (sp-item 2594 :fade-after (meters 60) :flags (bit7) :period 1500 :length 30) + (sp-item 2595 :fade-after (meters 60) :falloff-to (meters 60) :flags (bit7) :period 1500 :length 100) + (sp-item 2596 :fade-after (meters 200) :falloff-to (meters 200) :flags (bit7) :period 1500 :length 50) + (sp-item 2597 :flags (bit7) :period 1500 :length 5 :offset -10) + (sp-item 2598 :fade-after (meters 150) :falloff-to (meters 150) :flags (bit7) :period 1500 :length 50) + ) + ) + +(defpart 2596 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x34 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-rot-z) + :flags (sp-flag spflag7) + :random-rangef 65536.0 + :random-multf 1.0 + ) + (sp-rnd-flt spt-scale-y (meters 0.8) (meters 0.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 2599) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-conerot-x) + :flags (sp-flag from-pointer) + :func '*sp-temp* + ) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2598 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a 0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 2599) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2599 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 2600) + ) + ) + +(defpart 2600 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.44) + (sp-flt spt-fade-g -2.36) + (sp-flt spt-fade-b -2.64) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2601) + ) + ) + +(defpart 2601 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2944444) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.094444446) + (sp-rnd-flt spt-fade-a -0.06545454 -0.06545454 1.0) + (sp-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 2602) + ) + ) + +(defpart 2602 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0)) + ) + +(defpart 2597 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 5)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters 0.5)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-b -5.1) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 100) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21) + (sp-int spt-next-time 50) + (sp-launcher-by-id spt-next-launcher 2603) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2603 + :init-specs ((sp-flt spt-scalevel-x (meters -0.2)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -2.56) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.92) + ) + ) + +(defpart 2595 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #xc)) + (sp-rnd-flt spt-num 5.0 3.0 1.0) + (sp-flt spt-x (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.083333336) (meters 0.083333336) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.0016666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.18) + (sp-flt spt-fade-b -2.12) + (sp-rnd-flt spt-accel-y -0.68266666 -1.3653333 1.0) + (sp-flt spt-friction 0.87) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2604) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2604 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.02) + (sp-flt spt-fade-b 0.23555556) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2605) + ) + ) + +(defpart 2605 + :init-specs ((sp-flt spt-fade-r -0.5543478) (sp-flt spt-fade-g -0.5543478) (sp-flt spt-fade-a -0.13913043)) + ) + +(defpart 2593 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 3.0 1.0 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 1.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 20.0 1.0) + (sp-rnd-flt spt-g 70.0 20.0 1.0) + (sp-rnd-flt spt-b 70.0 20.0 1.0) + (sp-rnd-flt spt-a 0.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.1) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.016666668) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 3.3) + (sp-flt spt-fade-g 3.12) + (sp-flt spt-fade-b 1.18) + (sp-flt spt-fade-a 1.76) + (sp-flt spt-friction 0.88) + (sp-int spt-timer 710) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2606) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 2606 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -1.9666667) + (sp-flt spt-fade-b -2.2) + (sp-flt spt-fade-a -0.41666666) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2607) + ) + ) + +(defpart 2607 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.38833332) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.028333334) + (sp-flt spt-fade-a -0.38833332) + ) + ) + +(defpart 2594 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-rnd-flt spt-num 4.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.25) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.13333334) (meters 0.02) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 80) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fort-missile-target-steamescape + :id 582 + :bounds (static-bspherem 0 0 0 6) + :parts ((sp-item 2608 :fade-after (meters 150) :falloff-to (meters 200) :flags (bit7))) + ) + +(defpart 2608 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 2.0 2.0 1.0) + (sp-rnd-flt spt-z (meters 0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 24.0 48.0 1.0) + (sp-rnd-flt spt-vel-z (meters 0.06666667) (meters 0.033333335) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.21333334) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.21333334) + (sp-rnd-flt spt-fade-a -0.48 -0.48 1.0) + (sp-rnd-flt spt-accel-y 4.096 4.096 1.0) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 1800) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int-plain-rnd spt-next-time 75 4 1) + (sp-launcher-by-id spt-next-launcher 2609) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-fort-missile-engulfing-death + :id 583 + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2610 :flags (bit7))) + ) + +(defpart 2610 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-rnd-flt spt-num 20.0 5.0 1.0) + (sp-flt spt-x (meters 5)) + (sp-rnd-flt spt-z (meters -5) (meters 10) 1.0) + (sp-rnd-flt spt-scale-x (meters 5) (meters 10) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 240.0 15.0 1.0) + (sp-rnd-flt spt-g 200.0 16.0 1.0) + (sp-rnd-flt spt-b 160.0 16.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.20833333)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-fade-r -2.1333334 -1.0666667 1.0) + (sp-rnd-flt spt-fade-g -4.266667 -2.1333334 1.0) + (sp-flt spt-fade-b -5.3333335) + (sp-int-plain-rnd spt-timer 160 79 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-int-plain-rnd spt-next-time 30 9 1) + (sp-launcher-by-id spt-next-launcher 2611) + ) + ) + +(defpart 2611 + :init-specs ((sp-flt spt-b 0.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-rnd-flt spt-fade-a -0.4 -0.2 1.0) + (sp-int-plain-rnd spt-next-time 5 9 1) + (sp-launcher-by-id spt-next-launcher 2612) + ) + ) + +(defpart 2612 + :init-specs ((sp-flt spt-fade-r -0.125) (sp-flt spt-fade-g 0.4) (sp-flt spt-fade-b 0.4)) + ) diff --git a/goal_src/jak2/levels/sewer/escort/jinx-bomb.gc b/goal_src/jak2/levels/sewer/escort/jinx-bomb.gc index 4f8c6ab8c1..54984681dc 100644 --- a/goal_src/jak2/levels/sewer/escort/jinx-bomb.gc +++ b/goal_src/jak2/levels/sewer/escort/jinx-bomb.gc @@ -5,5 +5,22 @@ ;; name in dgo: jinx-bomb ;; dgos: SEB, SWB, UNB +(deftype jinx-bomb (process-focusable) + ((fuse-delay uint32 :offset-assert 204) + (attack-id uint32 :offset-assert 208) + (shake-screen? symbol :offset-assert 212) + (explode-func basic :offset-assert 216) + ) + :method-count-assert 29 + :size-assert #xdc + :flag-assert #x1d006000dc + (:methods + (idle () _type_ :state 27) + (explode () _type_ :state 28) + ) + ) + +(define-extern jinx-bomb-init-by-other (function vector quaternion none :behavior jinx-bomb)) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/levels/sewer/gator.gc b/goal_src/jak2/levels/sewer/gator.gc index 3f013fe3af..a444e93ea8 100644 --- a/goal_src/jak2/levels/sewer/gator.gc +++ b/goal_src/jak2/levels/sewer/gator.gc @@ -7,3 +7,597 @@ ;; DECOMP BEGINS +(defskelgroup skel-gator amphibian 0 -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 1 0 5.5) + ) + +(deftype gator (nav-enemy) + ((ocean-y float :offset-assert 604) + (lock-nav-target basic :offset-assert 608) + (new-facing vector :inline :offset-assert 624) + (old-facing vector :inline :offset-assert 640) + (turn-time time-frame :offset-assert 656) + ) + :heap-base #x220 + :method-count-assert 182 + :size-assert #x298 + :flag-assert #xb602200298 + (:methods + (attack-forward () _type_ :state 178) + (gator-method-179 (_type_) float 179) + (gator-method-180 (_type_ vector) vector 180) + (gator-method-181 (_type_ float float symbol) time-frame 181) + ) + ) + + +(define *gator-nav-enemy-info* (new 'static 'nav-enemy-info + :use-die-falling #t + :use-victory #f + :use-jump-blocked #f + :debug-draw-neck #f + :jump-debug-draw #f + :move-to-ground #f + :hover-if-no-ground #f + :idle-anim-script (new 'static 'array uint32 4 #x1e0002 #x64640d01 #x0 #x0) + :idle-anim 13 + :notice-anim 13 + :hostile-anim 14 + :hit-anim 6 + :knocked-anim 6 + :knocked-land-anim 7 + :die-anim 12 + :die-falling-anim 21 + :victory-anim -1 + :jump-wind-up-anim 13 + :jump-in-air-anim 13 + :jump-land-anim 13 + :neck-joint -1 + :look-at-joint 12 + :bullseye-joint 4 + :sound-hit (static-sound-name "gator-hit") + :sound-die (static-sound-name "gator-die") + :notice-distance (meters 80) + :notice-distance-delta (meters 10) + :proximity-notice-distance (meters 40) + :default-hit-points 1 + :gnd-collide-with (collide-spec backgnd) + :overlaps-others-collide-with-filter (collide-spec jak bot player-list) + :movement-gravity (meters -100) + :friction 0.8 + :attack-shove-back (meters 3.5) + :attack-shove-up (meters 2) + :attack-mode 'generic + :attack-damage 2 + :recover-gnd-collide-with (collide-spec backgnd crate obstacle hit-by-others-list pusher) + :jump-height-min (meters 3) + :jump-height-factor 0.5 + :knocked-seek-ry-clamp 6371.5557 + :knocked-soft-vxz-lo 72089.6 + :knocked-soft-vxz-hi 108134.4 + :knocked-soft-vy-lo 81920.0 + :knocked-soft-vy-hi 122880.0 + :knocked-medium-vxz-lo 147456.0 + :knocked-medium-vxz-hi 196608.0 + :knocked-medium-vy-lo 135168.0 + :knocked-medium-vy-hi 151552.0 + :knocked-hard-vxz-lo 78643.2 + :knocked-hard-vxz-hi 117964.8 + :knocked-hard-vy-lo 183500.8 + :knocked-hard-vy-hi 209715.2 + :knocked-huge-vxz-lo 164659.2 + :knocked-huge-vxz-hi 249036.8 + :knocked-huge-vy-lo 183500.8 + :knocked-huge-vy-hi 217907.2 + :knocked-yellow-vxz-lo 40960.0 + :knocked-yellow-vxz-hi 49152.0 + :knocked-yellow-vy-lo 57344.0 + :knocked-yellow-vy-hi 81920.0 + :knocked-red-vxz-lo 24576.0 + :knocked-red-vxz-hi 196608.0 + :knocked-red-vy-lo 94208.0 + :knocked-red-vy-hi 151552.0 + :knocked-blue-vxz-lo 40960.0 + :knocked-blue-vxz-hi 49152.0 + :knocked-blue-vy-lo 24576.0 + :knocked-blue-vy-hi 81920.0 + :shadow-size (meters 1) + :shadow-max-y (meters 1) + :shadow-min-y (meters -1) + :shadow-locus-dist (meters 150) + :gem-joint -1 + :gem-offset (new 'static 'sphere :r 163840.0) + :callback-info #f + :use-momentum #f + :use-frustration #t + :use-stop-chase #f + :use-circling #t + :use-pacing #t + :walk-anim 13 + :turn-anim -1 + :run-anim 14 + :taunt-anim -1 + :run-travel-speed (meters 16) + :run-acceleration (meters 8) + :run-turning-acceleration (meters 40) + :walk-travel-speed (meters 4) + :walk-acceleration (meters 8) + :walk-turning-acceleration (meters 10) + :maximum-rotation-rate (degrees 200.00002) + :notice-nav-radius (meters 2) + :frustration-distance (meters 8) + :frustration-time (seconds 4) + :blocked-time (seconds 0.3) + :circle-dist-lo 20480.0 + :circle-dist-hi 61440.0 + :nav-mesh #f + ) + ) + +(set! (-> *gator-nav-enemy-info* fact-defaults) *fact-info-enemy-defaults*) + +(defmethod enemy-method-74 gator ((obj gator) (arg0 process) (arg1 object) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('hit-knocked) + (when (= (-> obj incoming knocked-type) (knocked-type knocked-type-4)) + (set! (-> obj incoming knocked-type) (knocked-type knocked-type-0)) + 0 + ) + ((method-of-type nav-enemy enemy-method-74) obj arg0 arg1 arg2 arg3) + ) + (('track) + #f + ) + (else + ((method-of-type nav-enemy enemy-method-74) obj arg0 arg1 arg2 arg3) + ) + ) + ) + +(defmethod gator-method-179 gator ((obj gator)) + (set! (-> obj ocean-y) (get-height *ocean* (-> obj root-override2 trans) #t)) + (set! (-> obj root-override2 trans y) (+ -10240.0 (-> obj ocean-y))) + ) + +(defmethod gator-method-180 gator ((obj gator) (arg0 vector)) + (let ((a0-3 (quaternion->matrix (new 'stack-no-clear 'matrix) (-> obj root-override2 quat)))) + (set! (-> arg0 quad) (-> a0-3 vector 2 quad)) + ) + arg0 + ) + +(defmethod gator-method-181 gator ((obj gator) (arg0 float) (arg1 float) (arg2 symbol)) + (local-vars (v1-17 object) (a0-5 object)) + (with-pp + (let ((f30-0 (vector-dot (-> obj new-facing) (-> obj old-facing))) + (s5-0 75) + (s4-0 (the-as art-joint-anim (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + ) + (b! (not arg2) cfg-26 :delay (nop!)) + (set! s5-0 18) + (b! (>= f30-0 (cos (* 182.04445 arg0))) cfg-8 :delay #f) + (if (< (-> (vector-cross! (new 'stack-no-clear 'vector) (-> obj new-facing) (-> obj old-facing)) y) 0.0) + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 40))) + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 39))) + ) + (b! #t cfg-25 :delay (nop!)) + (label cfg-8) + (let ((v1-16 (< (cos (* 182.04445 arg1)) f30-0))) + (b! v1-16 cfg-23 :likely-delay (set! v1-17 v1-16)) + ) + (let ((v1-20 (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + (b! (not v1-20) cfg-21 :likely-delay (set! a0-5 v1-20)) + (let ((a1-3 (= v1-20 (-> obj draw art-group data 14)))) + (b! a1-3 cfg-21 :likely-delay (set! a0-5 a1-3)) + ) + (let ((a1-4 (= v1-20 (-> obj draw art-group data 40)))) + (b! a1-4 cfg-21 :likely-delay (set! a0-5 a1-4)) + ) + (set! a0-5 (= v1-20 (-> obj draw art-group data 39))) + ) + (label cfg-21) + (b! (not a0-5) cfg-23 :delay (set! v1-17 #t)) + (set! v1-17 #f) + (label cfg-23) + (if v1-17 + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 14))) + ) + (label cfg-25) + (b! #t cfg-48 :delay (nop!)) + (label cfg-26) + (b! (>= f30-0 (cos (* 182.04445 arg0))) cfg-31 :delay #f) + (if (< (-> (vector-cross! (new 'stack-no-clear 'vector) (-> obj new-facing) (-> obj old-facing)) y) 0.0) + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 38))) + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 37))) + ) + (b! #t cfg-48 :delay (nop!)) + (label cfg-31) + (if (or (< (cos (* 182.04445 arg1)) f30-0) (let ((v1-41 (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + (not (and v1-41 (or (= v1-41 (-> obj draw art-group data 13)) + (= v1-41 (-> obj draw art-group data 38)) + (= v1-41 (-> obj draw art-group data 37)) + ) + ) + ) + ) + ) + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 13))) + ) + (label cfg-48) + (let ((v1-50 (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + (when (and (not (and v1-50 (= v1-50 (the-as art-element s4-0)))) + (>= (- (-> pp clock frame-counter) (the-as time-frame s5-0)) (-> obj turn-time)) + ) + (let ((f30-2 (/ (ja-frame-num 0) (the float (ja-num-frames 0))))) + (ja-channel-push! 1 (the-as time-frame s5-0)) + (set! (-> obj skel root-channel 0 frame-group) s4-0) + (let ((s5-1 (-> obj skel root-channel 0))) + (set! (-> s5-1 num-func) num-func-identity) + (set! (-> s5-1 frame-num) (* f30-2 (the float (ja-num-frames 0)))) + ) + ) + (let ((v0-4 (-> pp clock frame-counter))) + (set! (-> obj turn-time) v0-4) + v0-4 + ) + ) + ) + ) + ) + ) + +;; WARN: Return type mismatch vector vs none. +(defmethod enemy-method-55 gator ((obj gator)) + (let ((t9-0 (method-of-type nav-enemy enemy-method-55))) + (t9-0 obj) + ) + (gator-method-179 obj) + (set! (-> obj old-facing quad) (-> obj new-facing quad)) + (gator-method-180 obj (-> obj new-facing)) + (none) + ) + +(defmethod enemy-method-56 gator ((obj gator) (arg0 process) (arg1 event-message-block)) + 0 + ) + +;; WARN: Return type mismatch object vs none. +(defmethod go-hostile gator ((obj gator)) + (go (method-of-object obj hostile)) + (none) + ) + +(defmethod enemy-method-107 gator ((obj gator)) + (let ((gp-0 ((method-of-type nav-enemy enemy-method-107) obj))) + (if (and gp-0 (< (+ 1024.0 (get-height *ocean* (get-trans gp-0 0) #t)) (-> (get-trans gp-0 1) y))) + (set! gp-0 (the-as process-focusable #f)) + ) + gp-0 + ) + ) + +(defmethod enemy-method-98 gator ((obj gator) (arg0 process-focusable) (arg1 vector)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (when (and (= *target* arg0) (not arg1) (= (-> *target* control ground-pat material) (pat-material waterbottom))) + (set! (-> s4-0 quad) (-> (get-trans arg0 0) quad)) + (set! (-> s4-0 y) (get-height *ocean* s4-0 #t)) + (set! arg1 s4-0) + ) + ) + ((method-of-type nav-enemy enemy-method-98) obj arg0 arg1) + ) + +(defstate hostile (gator) + :virtual #t + :trans (behavior () + (let ((t9-0 (-> (method-of-type nav-enemy hostile) trans))) + (if t9-0 + (t9-0) + ) + ) + (let ((a0-1 (enemy-method-107 self))) + (when a0-1 + (let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (get-trans a0-1 0) (-> self root-override2 trans))) + (a0-4 (-> self nav state)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> a0-4 heading quad)) + 0 + (let ((v1-10 (vector-normalize-ret-len! gp-1 1.0))) + (if (and (>= #x47000000 (the-as int v1-10)) (< (cos 5461.3335) (vector-dot gp-1 s5-0))) + (go-virtual attack-forward) + ) + ) + ) + ) + ) + (none) + ) + :code (behavior () + (let ((f30-0 (get-rand-float-range self 0.9 1.1))) + (until #f + (gator-method-181 self 2.0 0.5 #t) + (suspend) + (ja :num! (loop! f30-0)) + ) + ) + #f + (none) + ) + ) + +(defstate attack-forward (gator) + :virtual #t + :event (the-as (function process int symbol event-message-block object :behavior gator) enemy-event-handler) + :enter (behavior () + (set! (-> self enemy-flags) (logior (enemy-flag actor-pause-backup) (-> self enemy-flags))) + (let ((v1-2 self)) + (if (not (logtest? (enemy-flag enemy-flag36) (-> v1-2 enemy-flags))) + (set! (-> v1-2 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag38) (-> v1-2 enemy-flags)))) + ) + (set! (-> v1-2 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag36) (-> v1-2 enemy-flags)))) + (set! (-> v1-2 nav callback-info) (-> v1-2 enemy-info-override callback-info)) + ) + 0 + (let ((v1-5 self)) + (set! (-> v1-5 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag37) (-> v1-5 enemy-flags)))) + ) + 0 + (let ((v1-8 (-> self nav state))) + (set! (-> v1-8 speed) (* 1.25 (-> self enemy-info-override run-travel-speed))) + ) + 0 + (set! (-> self lock-nav-target) #f) + (logior! (-> self focus-status) (focus-status dangerous)) + (let* ((v1-12 *game-info*) + (v0-0 (+ (-> v1-12 attack-id) 1)) + ) + (set! (-> v1-12 attack-id) v0-0) + (set! (-> self attack-id) v0-0) + ) + (none) + ) + :exit (behavior () + (logclear! (-> self enemy-flags) (enemy-flag actor-pause-backup)) + (if (logtest? (-> self enemy-flags) (enemy-flag check-water)) + (logior! (-> self focus-status) (focus-status dangerous)) + (logclear! (-> self focus-status) (focus-status dangerous)) + ) + (none) + ) + :trans (behavior () + (let ((gp-0 (handle->process (-> self focus handle)))) + (if (not gp-0) + (enemy-method-72 self) + ) + (set! (-> self focus-pos quad) (-> (get-trans (the-as process-focusable gp-0) 0) quad)) + ) + (cond + ((-> self lock-nav-target) + ) + ((or (logtest? (-> self enemy-flags) (enemy-flag look-at-focus)) + (logtest? (-> self nav state flags) (nav-state-flag at-target)) + ) + (set! (-> self lock-nav-target) (the-as basic #t)) + (let ((v1-16 (-> self nav))) + (set! (-> v1-16 target-speed) (-> self enemy-info-override walk-travel-speed)) + ) + 0 + (let ((v1-18 (-> self nav))) + (set! (-> v1-18 acceleration) 131072.0) + ) + 0 + (let ((gp-1 (new 'stack-no-clear 'vector))) + (let ((a1-2 (-> self nav state))) + (set! (-> gp-1 quad) (-> a1-2 velocity quad)) + ) + (vector-normalize! gp-1 32768.0) + (vector+! gp-1 gp-1 (-> self root-override2 trans)) + (let ((v1-24 (-> self nav state))) + (logclear! (-> v1-24 flags) (nav-state-flag directional-mode)) + (logior! (-> v1-24 flags) (nav-state-flag target-poly-dirty)) + (set! (-> v1-24 target-post quad) (-> gp-1 quad)) + ) + ) + 0 + ) + (else + (let ((a0-19 (-> self nav state)) + (v1-27 (-> self focus-pos)) + ) + (logclear! (-> a0-19 flags) (nav-state-flag directional-mode)) + (logior! (-> a0-19 flags) (nav-state-flag target-poly-dirty)) + (set! (-> a0-19 target-post quad) (-> v1-27 quad)) + ) + 0 + ) + ) + (none) + ) + :code (behavior () + (ja-channel-push! 1 (seconds 0.07)) + (ja-no-eval :group! (-> self draw art-group data 15) + :num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 15)) frames num-frames) -1))) + :frame-num (ja-aframe 0.0 0) + ) + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (let ((a1-4 (new 'stack-no-clear 'vector))) + (let ((a2-2 (-> self nav state))) + (set! (-> a1-4 quad) (-> a2-2 target-post quad)) + ) + (if (and (-> self lock-nav-target) (< (vector-vector-distance (-> self root-override2 trans) a1-4) 8192.0)) + (enemy-method-72 self) + ) + ) + (suspend) + (ja :num! (seek!)) + ) + (enemy-method-72 self) + (none) + ) + :post (the-as (function none :behavior gator) nav-enemy-travel-post) + ) + +(defstate pacing (gator) + :virtual #t + :code (behavior () + (let ((f30-0 (get-rand-float-range self 0.9 1.1))) + (until #f + (gator-method-181 self 2.0 0.5 #f) + (suspend) + (ja :num! (loop! f30-0)) + ) + ) + #f + (none) + ) + ) + +(defstate stare (gator) + :virtual #t + :enter (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (none) + ) + :trans (behavior () + (let ((t9-0 (-> (method-of-type nav-enemy stare) trans))) + (if t9-0 + (t9-0) + ) + ) + (if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.017)) + (go-virtual pacing) + ) + (none) + ) + :code (behavior () + (let ((f30-0 (get-rand-float-range self 0.9 1.1))) + (until #f + (gator-method-181 self 2.0 0.5 #f) + (suspend) + (ja :num! (loop! f30-0)) + ) + ) + #f + (none) + ) + ) + +(defmethod coin-flip? gator ((obj gator)) + "@returns The result of a 50/50 RNG roll" + #f + ) + +(defmethod enemy-method-114 gator ((obj gator)) + "@abstract" + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) cshape-reaction-default) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (set! (-> s5-0 penetrated-by) (penetrate + generic-attack + lunge + flop + punch + spin + roll + uppercut + bonk + tube + vehicle + flut-attack + board + mech-punch + dark-punch + dark-giant + ) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 4) 0))) + (set! (-> s5-0 total-prims) (the-as uint 5)) + (set! (-> s4-0 prim-core collide-as) (collide-spec enemy)) + (set! (-> s4-0 prim-core collide-with) + (collide-spec backgnd jak bot crate obstacle hit-by-others-list player-list) + ) + (set! (-> s4-0 prim-core action) (collide-action deadly no-standon)) + (set-vector! (-> s4-0 local-sphere) 0.0 8192.0 0.0 19660.8) + (set! (-> s5-0 root-prim) s4-0) + ) + (let ((v1-13 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-13 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-13 prim-core collide-with) (collide-spec jak bot crate hit-by-others-list player-list)) + (set! (-> v1-13 prim-core action) (collide-action no-standon)) + (set-vector! (-> v1-13 local-sphere) 0.0 4915.2 0.0 4915.2) + ) + (let ((v1-15 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-15 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-15 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-15 prim-core action) (collide-action deadly)) + (set! (-> v1-15 transform-index) 12) + (set-vector! (-> v1-15 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (let ((v1-17 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-17 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-17 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-17 transform-index) 20) + (set-vector! (-> v1-17 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (let ((v1-19 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-19 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-19 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-19 transform-index) 22) + (set-vector! (-> v1-19 local-sphere) 0.0 0.0 0.0 4505.6) + ) + (set! (-> s5-0 nav-radius) 8192.0) + (let ((v1-21 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-21 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-21 prim-core collide-with)) + ) + (set! (-> s5-0 max-iteration-count) (the-as uint 3)) + (set! (-> obj root-override2) s5-0) + ) + 0 + (none) + ) + +(defmethod enemy-method-115 gator ((obj gator)) + "@abstract" + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-gator" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (enemy-method-113 obj *gator-nav-enemy-info*) + (let ((v1-5 (-> obj nav))) + (set! (-> v1-5 speed-scale) 1.0) + ) + 0 + (set-gravity-length (-> obj root-override2 dynam) 573440.0) + (logior! (-> obj nav flags) (nav-control-flag momentum-ignore-heading)) + (gator-method-179 obj) + (set! (-> obj turn-time) 0) + 0 + (none) + ) diff --git a/goal_src/jak2/levels/sewer/hosehead-fake.gc b/goal_src/jak2/levels/sewer/hosehead-fake.gc index f89e6adfc5..6b95ed7c28 100644 --- a/goal_src/jak2/levels/sewer/hosehead-fake.gc +++ b/goal_src/jak2/levels/sewer/hosehead-fake.gc @@ -5,5 +5,8 @@ ;; name in dgo: hosehead-fake ;; dgos: SEB, SWB +(define-extern spawn-hosehead-fakes (function none)) +(define-extern hosehead-fake-trigger (function int none)) + ;; DECOMP BEGINS diff --git a/goal_src/jak2/levels/sewer/sewer-obs.gc b/goal_src/jak2/levels/sewer/sewer-obs.gc index e2f23dcf1d..a9cfa6c313 100644 --- a/goal_src/jak2/levels/sewer/sewer-obs.gc +++ b/goal_src/jak2/levels/sewer/sewer-obs.gc @@ -7,3 +7,1127 @@ ;; DECOMP BEGINS +(deftype sew-blade (process-drawable) + ((y-min float :offset-assert 200) + (y-max float :offset-assert 204) + (snd-water uint128 :offset-assert 208) + (snd-no-water uint128 :offset-assert 224) + (last-sound int32 :offset-assert 240) + (attack-id uint32 :offset-assert 244) + ) + :heap-base #x80 + :method-count-assert 21 + :size-assert #xf8 + :flag-assert #x15008000f8 + (:methods + (sew-blade-method-20 (_type_) none 20) + ) + ) + + +(defmethod sew-blade-method-20 sew-blade ((obj sew-blade)) + (when (nonzero? (-> obj sound)) + (let ((f30-0 (+ (-> obj root trans y) (-> obj y-max))) + (f28-0 (+ (-> obj root trans y) (-> obj y-min))) + (f0-2 (get-base-height *ocean-map-sewer*)) + ) + (cond + ((< f30-0 f0-2) + (stop! (-> obj sound)) + ) + ((< f0-2 f28-0) + (when (!= (-> obj last-sound) 1) + (change-sound! (-> obj sound) (the-as sound-name (-> obj snd-no-water))) + (set! (-> obj last-sound) 1) + ) + (update! (-> obj sound)) + ) + (else + (when (!= (-> obj last-sound) 2) + (change-sound! (-> obj sound) (the-as sound-name (-> obj snd-water))) + (set! (-> obj last-sound) 2) + ) + (update! (-> obj sound)) + ) + ) + ) + ) + 0 + (none) + ) + +(deftype sew-single-blade (sew-blade) + ((quat quaternion :inline :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 22 + :size-assert #x110 + :flag-assert #x1600900110 + (:methods + (idle () _type_ :state 21) + ) + ) + + +(defskelgroup skel-sew-single-blade sew-single-blade 0 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 4 5.5) + ) + +(defstate idle (sew-single-blade) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack) + (let* ((s4-0 proc) + (gp-0 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (when gp-0 + (let ((s4-2 (vector-! (new 'stack-no-clear 'vector) (-> gp-0 root-override trans) (-> self root trans))) + (v1-5 (vector-x-quaternion! (new 'stack-no-clear 'vector) (-> self root quat))) + ) + (if (< (vector-dot v1-5 s4-2) 0.0) + (vector-float*! v1-5 v1-5 -1.0) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) (process->ppointer self)) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack-or-shove) + (set! (-> a1-6 param 0) (-> event param 0)) + (let ((a0-14 (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up id)))) + (set! (-> a0-14 id) (-> self attack-id)) + (set! (-> a0-14 vector quad) (-> v1-5 quad)) + (set! (-> a0-14 shove-back) 20480.0) + (set! (-> a0-14 shove-up) 12288.0) + (set! (-> a1-6 param 1) (the-as uint a0-14)) + ) + (send-event-function gp-0 a1-6) + ) + ) + ) + ) + ) + ) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1)) 0.02) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! max 0.02)) + ) + ) + #f + (none) + ) + :post (behavior () + (sew-blade-method-20 self) + (transform-post) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-single-blade ((obj sew-single-blade) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 16384.0 22528.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-17 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-17 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-17 prim-core collide-with)) + ) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-single-blade" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (quaternion-copy! (-> obj quat) (-> obj root quat)) + (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj root trans))) + (set-falloff-far! (-> obj sound) 286720.0) + (set! (-> obj y-min) -16384.0) + (set! (-> obj y-max) 16384.0) + (set! (-> obj snd-water) + (the-as uint128 (make-u128 (the-as uint #x772d6564616c) (the-as uint #x622d656c676e6973))) + ) + (set! (-> obj snd-no-water) (the-as uint128 (make-u128 #x6564616c (the-as uint #x622d656c676e6973)))) + (let* ((v1-35 *game-info*) + (a0-19 (+ (-> v1-35 attack-id) 1)) + ) + (set! (-> v1-35 attack-id) a0-19) + (set! (-> obj attack-id) a0-19) + ) + (transform-post) + (go (method-of-object obj idle)) + (none) + ) + +(deftype sew-tri-blade (sew-blade) + ((anim-time float :offset-assert 248) + (anim-offset float :offset-assert 252) + (switch-state int32 :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 22 + :size-assert #x104 + :flag-assert #x1600900104 + (:methods + (idle () _type_ :state 21) + ) + ) + + +(defskelgroup skel-sew-tri-blade sew-tri-blade 0 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 2.5 0 9) + ) + +(defun sew-tri-blade-joint-callback ((arg0 draw-control) (arg1 cspace-array) (arg2 joint-control)) + (with-pp + (let ((gp-0 (the-as sew-tri-blade (-> arg0 process))) + (s5-0 (new-stack-matrix0)) + (f30-0 (* 182.04445 (* 0.0033333334 (the float (-> pp clock frame-counter))))) + ) + (let ((s3-0 (-> arg1 data 4 bone transform))) + (matrix-rotate-y! s5-0 (* 240.0 f30-0)) + (matrix*! s3-0 s5-0 s3-0) + ) + (let ((s3-1 (-> arg1 data 5 bone transform))) + (matrix-rotate-y! s5-0 (* -240.0 f30-0)) + (matrix*! s3-1 s5-0 s3-1) + (set! (-> gp-0 y-max) (+ (- 25395.2 (-> gp-0 root trans y)) (-> s3-1 trans y))) + ) + (let ((s4-1 (-> arg1 data 6 bone transform))) + (matrix-rotate-y! s5-0 (* 240.0 f30-0)) + (matrix*! s4-1 s5-0 s4-1) + (set! (-> gp-0 y-max) (fmax (-> gp-0 y-max) (+ (- 19251.2 (-> gp-0 root trans y)) (-> s4-1 trans y)))) + ) + ) + 0 + (none) + ) + ) + +(defstate idle (sew-tri-blade) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack) + (let* ((s5-0 proc) + (a0-2 (if (type? s5-0 process-focusable) + s5-0 + ) + ) + ) + (when a0-2 + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) (process->ppointer self)) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack-or-shove) + (set! (-> a1-6 param 0) (-> event param 0)) + (let ((v1-5 (new 'static 'attack-info :mask (attack-info-mask shove-back shove-up id)))) + (set! (-> v1-5 id) (-> self attack-id)) + (set! (-> v1-5 shove-back) 20480.0) + (set! (-> v1-5 shove-up) 8192.0) + (set! (-> a1-6 param 1) (the-as uint v1-5)) + ) + (send-event-function a0-2 a1-6) + ) + ) + ) + ) + (('on) + (when (!= (-> self anim-offset) 0.0) + (let ((f30-0 (+ (-> self root trans y) (-> self y-max)))) + (if (< (get-base-height *ocean-map-sewer*) f30-0) + (sound-play "tri-blade-up") + ) + ) + ) + (let ((v0-1 (the-as object 1))) + (set! (-> self switch-state) (the-as int v0-1)) + v0-1 + ) + ) + (('off) + (when (= (-> self anim-offset) 0.0) + (let ((f30-1 (+ (-> self root trans y) (-> self y-max)))) + (if (< (get-base-height *ocean-map-sewer*) f30-1) + (sound-play "tri-blade-up") + ) + ) + ) + (set! (-> self switch-state) 0) + 0 + ) + ) + ) + :code (behavior () + (until #f + (cond + ((zero? (-> self switch-state)) + (cond + ((>= 3.0 (-> self anim-time)) + (+! (-> self anim-time) (* 6.0 (-> self clock seconds-per-frame))) + (set! (-> self anim-time) (fmin 3.0 (-> self anim-time))) + ) + (else + (+! (-> self anim-time) (* 6.0 (-> self clock seconds-per-frame))) + (if (< 6.0 (-> self anim-time)) + (set! (-> self anim-time) 0.0) + ) + ) + ) + ) + (else + (+! (-> self anim-time) (* 6.0 (-> self clock seconds-per-frame))) + (set! (-> self anim-time) (fmin 6.0 (-> self anim-time))) + ) + ) + (let ((f30-0 (+ (-> self anim-time) (-> self anim-offset)))) + (if (< 6.0 f30-0) + (set! f30-0 (+ -6.0 f30-0)) + ) + (ja :group! (-> self draw art-group data 3) :num! (identity f30-0)) + ) + (suspend) + ) + #f + (none) + ) + :post (behavior () + (sew-blade-method-20 self) + (transform-post) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-tri-blade ((obj sew-tri-blade) (arg0 entity-actor)) + (with-pp + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s4-0 total-prims) (the-as uint 4)) + (set! (-> s3-0 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set-vector! (-> s3-0 local-sphere) 0.0 10240.0 0.0 36864.0) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (let ((v1-16 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 2) (the-as uint 0)))) + (set! (-> v1-16 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> v1-16 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-16 prim-core action) (collide-action solid deadly)) + (set! (-> v1-16 transform-index) 4) + (set-vector! (-> v1-16 local-sphere) 0.0 8192.0 0.0 18841.6) + ) + (let ((v1-18 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> v1-18 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> v1-18 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-18 prim-core action) (collide-action solid deadly)) + (set! (-> v1-18 transform-index) 5) + (set-vector! (-> v1-18 local-sphere) 0.0 8192.0 0.0 12288.0) + ) + (let ((v1-20 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-20 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> v1-20 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-20 prim-core action) (collide-action solid deadly)) + (set! (-> v1-20 transform-index) 6) + (set-vector! (-> v1-20 local-sphere) 0.0 4915.2 0.0 7372.8) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-23 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-23 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-23 prim-core collide-with)) + ) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-tri-blade" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj state-time) (-> pp clock frame-counter)) + (set! (-> obj anim-time) 0.0) + (set! (-> obj anim-offset) 0.0) + (set! (-> obj skel postbind-function) sew-tri-blade-joint-callback) + (let* ((v1-33 *game-info*) + (a0-33 (+ (-> v1-33 attack-id) 1)) + ) + (set! (-> v1-33 attack-id) a0-33) + (set! (-> obj attack-id) a0-33) + ) + (if (>= (res-lump-value arg0 'extra-id int :default (the-as uint128 -1) :time -1000000000.0) 0) + (set! (-> obj anim-offset) 3.0) + ) + (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj root trans))) + (set-falloff-far! (-> obj sound) 286720.0) + (set! (-> obj y-min) 0.0) + (set! (-> obj y-max) 48332.8) + (set! (-> obj snd-water) (the-as uint128 (make-u128 #x772d65 (the-as uint #x64616c622d697274)))) + (set! (-> obj snd-no-water) (the-as uint128 (make-u128 101 (the-as uint #x64616c622d697274)))) + (transform-post) + (go (method-of-object obj idle)) + (none) + ) + ) + +(deftype sew-arm-blade (sew-blade) + () + :heap-base #x80 + :method-count-assert 22 + :size-assert #xf8 + :flag-assert #x16008000f8 + (:methods + (idle () _type_ :state 21) + ) + ) + + +(defskelgroup skel-sew-arm-blade sew-arm-blade 0 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -6 0 7) + ) + +(defstate idle (sew-arm-blade) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack) + (let* ((s5-0 proc) + (a0-2 (if (type? s5-0 process-focusable) + s5-0 + ) + ) + ) + (when a0-2 + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) (process->ppointer self)) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'attack-or-shove) + (set! (-> a1-4 param 0) (-> event param 0)) + (let ((v1-6 (new 'static 'attack-info :mask (attack-info-mask shove-back shove-up id)))) + (set! (-> v1-6 id) (-> self attack-id)) + (set! (-> v1-6 shove-back) 20480.0) + (set! (-> v1-6 shove-up) 8192.0) + (set! (-> a1-4 param 1) (the-as uint v1-6)) + ) + (send-event-function a0-2 a1-4) + ) + ) + ) + ) + ) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1)) 0.02) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! max 0.02)) + ) + ) + #f + (none) + ) + :post (behavior () + (sew-blade-method-20 self) + (transform-post) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-arm-blade ((obj sew-arm-blade) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 -24576.0 0.0 28672.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-17 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-17 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-17 prim-core collide-with)) + ) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-arm-blade" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj root trans))) + (set-falloff-far! (-> obj sound) 286720.0) + (set! (-> obj y-min) -43008.0) + (set! (-> obj y-max) -4096.0) + (set! (-> obj snd-water) (the-as uint128 (make-u128 #x772d65 (the-as uint #x64616c622d6d7261)))) + (set! (-> obj snd-no-water) (the-as uint128 (make-u128 101 (the-as uint #x64616c622d6d7261)))) + (let* ((v1-34 *game-info*) + (a0-18 (+ (-> v1-34 attack-id) 1)) + ) + (set! (-> v1-34 attack-id) a0-18) + (set! (-> obj attack-id) a0-18) + ) + (transform-post) + (go (method-of-object obj idle)) + (none) + ) + +(deftype sew-multi-blade (sew-blade) + () + :heap-base #x80 + :method-count-assert 22 + :size-assert #xf8 + :flag-assert #x16008000f8 + (:methods + (idle () _type_ :state 21) + ) + ) + + +(defskelgroup skel-sew-multi-blade sew-multi-blade 0 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 18 0 0 22) + ) + +(defstate idle (sew-multi-blade) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack) + (let* ((s4-0 proc) + (gp-0 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (when gp-0 + (let ((s4-2 (vector-! (new 'stack-no-clear 'vector) (-> gp-0 root-override trans) (-> self root trans))) + (v1-5 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self root quat))) + ) + (if (< (vector-dot v1-5 s4-2) 0.0) + (vector-float*! v1-5 v1-5 -1.0) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) (process->ppointer self)) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack-or-shove) + (set! (-> a1-6 param 0) (-> event param 0)) + (let ((a0-14 (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up id)))) + (set! (-> a0-14 id) (-> self attack-id)) + (set! (-> a0-14 vector quad) (-> v1-5 quad)) + (set! (-> a0-14 shove-back) 28672.0) + (set! (-> a0-14 shove-up) 16384.0) + (set! (-> a1-6 param 1) (the-as uint a0-14)) + ) + (send-event-function gp-0 a1-6) + ) + ) + ) + ) + ) + ) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (behavior () + (sew-blade-method-20 self) + (transform-post) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-multi-blade ((obj sew-multi-blade) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 73728.0 0.0 0.0 90112.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-17 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-17 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-17 prim-core collide-with)) + ) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-multi-blade" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj root trans))) + (set-falloff-far! (-> obj sound) 368640.0) + (set! (-> obj y-min) -16384.0) + (set! (-> obj y-max) 16384.0) + (set! (-> obj snd-water) + (the-as uint128 (make-u128 (the-as uint #x772d656461) (the-as uint #x6c622d69746c756d))) + ) + (set! (-> obj snd-no-water) (the-as uint128 (make-u128 #x656461 (the-as uint #x6c622d69746c756d)))) + (let* ((v1-34 *game-info*) + (a0-18 (+ (-> v1-34 attack-id) 1)) + ) + (set! (-> v1-34 attack-id) a0-18) + (set! (-> obj attack-id) a0-18) + ) + (transform-post) + (go (method-of-object obj idle)) + (none) + ) + +(deftype sew-twist-blade (sew-blade) + ((root-overide collide-shape-moving :offset 128) + (no-collision-timer uint64 :offset-assert 248) + ) + :heap-base #x80 + :method-count-assert 22 + :size-assert #x100 + :flag-assert #x1600800100 + (:methods + (idle () _type_ :state 21) + ) + ) + + +(defskelgroup skel-sew-twist-blade sew-twist-blade 0 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 10 0 0 12) + ) + +(defstate idle (sew-twist-blade) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (the-as + object + (case event-type + (('touch 'attack) + (let* ((s4-0 proc) + (gp-0 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (when gp-0 + (let ((s4-2 (vector-! (new 'stack-no-clear 'vector) (-> gp-0 root-override trans) (-> self root-overide trans))) + (v1-5 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self root-overide quat))) + ) + (if (< (vector-dot v1-5 s4-2) 0.0) + (vector-float*! v1-5 v1-5 -1.0) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) (process->ppointer self)) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack-or-shove) + (set! (-> a1-6 param 0) (-> event param 0)) + (let ((a0-14 (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up id)))) + (set! (-> a0-14 id) (-> self attack-id)) + (set! (-> a0-14 vector quad) (-> v1-5 quad)) + (set! (-> a0-14 shove-back) 16384.0) + (set! (-> a0-14 shove-up) 8192.0) + (set! (-> a1-6 param 1) (the-as uint a0-14)) + ) + (send-event-function gp-0 a1-6) + ) + ) + (set! (-> self no-collision-timer) (the-as uint (-> self clock frame-counter))) + (let ((v1-13 (-> self root-overide root-prim))) + (set! (-> v1-13 prim-core collide-as) (collide-spec)) + (set! (-> v1-13 prim-core collide-with) (collide-spec)) + ) + 0 + ) + ) + ) + ) + ) + ) + :trans (behavior () + (when (and (nonzero? (-> self no-collision-timer)) + (>= (- (-> self clock frame-counter) (the-as int (-> self no-collision-timer))) + (the-as time-frame (-> *TARGET-bank* hit-invulnerable-timeout)) + ) + ) + (let ((v1-7 (-> self root-overide root-prim))) + (set! (-> v1-7 prim-core collide-as) (-> self root-overide backup-collide-as)) + (set! (-> v1-7 prim-core collide-with) (-> self root-overide backup-collide-with)) + ) + (set! (-> self no-collision-timer) (the-as uint 0)) + 0 + ) + (let ((a1-0 (new 'stack-no-clear 'overlaps-others-params))) + (set! (-> a1-0 options) (overlaps-others-options oo0)) + (set! (-> a1-0 collide-with-filter) (the-as collide-spec -1)) + (set! (-> a1-0 tlist) *touching-list*) + (find-overlapping-shapes (-> self root-overide) a1-0) + ) + (none) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1)) 0.02) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! max 0.02)) + ) + ) + #f + (none) + ) + :post (behavior () + (sew-blade-method-20 self) + (transform-post) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-twist-blade ((obj sew-twist-blade) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 40960.0 0.0 0.0 49152.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-17 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-17 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-17 prim-core collide-with)) + ) + (set! (-> obj root-overide) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-twist-blade" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (transform-post) + (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj root-overide trans))) + (set-falloff-far! (-> obj sound) 245760.0) + (set! (-> obj y-min) -4096.0) + (set! (-> obj y-max) 4096.0) + (set! (-> obj snd-water) + (the-as uint128 (make-u128 (the-as uint #x772d656461) (the-as uint #x6c622d7473697774))) + ) + (set! (-> obj snd-no-water) (the-as uint128 (make-u128 #x656461 (the-as uint #x6c622d7473697774)))) + (let* ((v1-34 *game-info*) + (a0-18 (+ (-> v1-34 attack-id) 1)) + ) + (set! (-> v1-34 attack-id) a0-18) + (set! (-> obj attack-id) a0-18) + ) + (go (method-of-object obj idle)) + (none) + ) + +(deftype sew-light-switch (process-drawable) + ((light-state symbol :offset-assert 200) + (actor-group (pointer actor-group) :offset-assert 204) + (actor-group-count int32 :offset-assert 208) + ) + :heap-base #x60 + :method-count-assert 24 + :size-assert #xd4 + :flag-assert #x18006000d4 + (:methods + (idle () _type_ :state 20) + (pressed () _type_ :state 21) + (sew-light-switch-method-22 (_type_) none 22) + (sew-light-switch-method-23 (_type_ symbol) none 23) + ) + ) + + +(deftype sew-light-control (process) + ((search-switches basic :offset-assert 128) + (search-turrets basic :offset-assert 132) + (switch-ent entity-actor :offset-assert 136) + (turret-ent entity-actor :offset-assert 140) + ) + :heap-base #x10 + :method-count-assert 17 + :size-assert #x90 + :flag-assert #x1100100090 + (:methods + (idle () _type_ :state 14) + (sew-light-control-method-15 (_type_ symbol symbol) float 15) + (sew-light-control-method-16 (_type_ object vector float) symbol 16) + ) + ) + + +(defskelgroup skel-sew-light-switch sew-light-switch 0 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 1.5) + ) + +(defstate idle (sew-light-switch) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (sew-light-switch-method-23 self 'cue-chase) + (go-virtual pressed) + ) + (('touch 'attack) + (let* ((gp-0 (-> event param 0)) + (s5-0 proc) + (v1-6 (if (type? s5-0 target) + s5-0 + ) + ) + ) + (when (and gp-0 v1-6) + (sew-light-switch-method-23 self 'cue-chase) + (go-virtual pressed) + ) + ) + ) + ) + ) + :enter (behavior () + (set! (-> self light-state) #f) + (none) + ) + :code (behavior () + (ja-channel-set! 1) + (ja :group! (-> self draw art-group data 2) :num! min) + (transform-post) + (sleep-code) + (none) + ) + :post (behavior () + (let ((t9-0 sp-launch-particles-var) + (a0-0 *sp-particle-system-2d*) + (a1-0 (-> *part-id-table* 1442)) + (a2-0 *launch-matrix*) + ) + (set! (-> a2-0 trans quad) (-> self root trans quad)) + (t9-0 a0-0 a1-0 a2-0 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + (ja-post) + (none) + ) + ) + +(defstate pressed (sew-light-switch) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('untrigger) + (go-virtual idle) + ) + ) + ) + :enter (behavior () + (set! (-> self light-state) #t) + (sound-play "sew-light-switc") + (none) + ) + :code (behavior () + (ja-no-eval :group! (-> self draw art-group data 2) + :num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (transform-post) + (suspend) + (ja :num! (seek!)) + ) + (sleep-code) + (none) + ) + ) + +;; WARN: Return type mismatch collide-shape-moving vs none. +(defmethod sew-light-switch-method-22 sew-light-switch ((obj sew-light-switch)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) cshape-reaction-default) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((v1-6 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-6 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-6 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-6 prim-core action) (collide-action solid rideable)) + (set! (-> v1-6 transform-index) 3) + (set-vector! (-> v1-6 local-sphere) 0.0 0.0 0.0 4096.0) + (set! (-> s5-0 total-prims) (the-as uint 1)) + (set! (-> s5-0 root-prim) v1-6) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-9 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-9 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-9 prim-core collide-with)) + ) + (set! (-> obj root) s5-0) + ) + (none) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod sew-light-switch-method-23 sew-light-switch ((obj sew-light-switch) (arg0 symbol)) + (with-pp + (dotimes (s4-0 (-> obj actor-group-count)) + (let ((s3-0 (-> obj actor-group s4-0))) + (dotimes (s2-0 (-> s3-0 length)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) (process->ppointer pp)) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) arg0) + (let ((t9-0 send-event-function) + (v1-5 (-> s3-0 data s2-0 actor)) + ) + (t9-0 + (if v1-5 + (-> v1-5 extra process) + ) + a1-1 + ) + ) + ) + ) + ) + ) + (if (-> *game-info* controller 0) + (send-event (-> *game-info* controller 0 process 0) arg0) + ) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-light-switch ((obj sew-light-switch) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (sew-light-switch-method-22 obj) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-light-switch" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (process-entity-status! obj (entity-perm-status no-kill) #t) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-6 (res-lump-data (-> obj entity) 'actor-groups pointer :tag-ptr (& sv-16)))) + (cond + ((and v1-6 (nonzero? (-> sv-16 elt-count))) + (set! (-> obj actor-group) (the-as (pointer actor-group) v1-6)) + (set! (-> obj actor-group-count) (the-as int (-> sv-16 elt-count))) + ) + (else + (set! (-> obj actor-group) (the-as (pointer actor-group) #f)) + (set! (-> obj actor-group-count) 0) + 0 + ) + ) + ) + (set! (-> obj light-state) #f) + (go (method-of-object obj idle)) + (none) + ) + +(defmethod sew-light-control-method-16 sew-light-control ((a0-0 sew-light-control) (a1-0 object) (a2-0 vector) (a3-0 float)) + (format 0 "SEWER - FIX ME!~%") + #f + ) + +(defstate idle (sew-light-control) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (local-vars (v0-0 entity)) + (the-as object (case event-type + (('use-switch) + (set! v0-0 (entity-by-name (the-as string (-> event param 0)))) + (set! (-> self switch-ent) (the-as entity-actor v0-0)) + v0-0 + ) + (('use-turret) + (set! v0-0 (entity-by-name (the-as string (-> event param 0)))) + (set! (-> self turret-ent) (the-as entity-actor v0-0)) + v0-0 + ) + ) + ) + ) + :code (behavior () + (until #f + (suspend) + ) + #f + (none) + ) + :post (behavior () + (let* ((gp-0 *target*) + (a0-1 (if (type? gp-0 process-focusable) + gp-0 + ) + ) + ) + (when a0-1 + (get-trans a0-1 0) + (let ((gp-1 #f) + (a2-0 (the-as object #f)) + ) + (let* ((a0-2 (-> self switch-ent)) + (v1-2 (if a0-2 + (-> a0-2 extra process) + ) + ) + ) + (if v1-2 + (set! gp-1 (-> (the-as sew-light-switch v1-2) light-state)) + ) + ) + (let* ((v1-4 (-> self turret-ent)) + (a0-5 (if v1-4 + (-> v1-4 extra process) + ) + ) + ) + (when a0-5 + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) (process->ppointer self)) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'flash-state) + (set! a2-0 (send-event-function a0-5 a1-2)) + ) + ) + ) + (sew-light-control-method-15 self gp-1 (the-as symbol a2-0)) + ) + ) + ) + (none) + ) + ) + +(defmethod sew-light-control-method-15 sew-light-control ((obj sew-light-control) (arg0 symbol) (arg1 symbol)) + (set-sewer-lights-flag! arg0) + (if arg1 + (set-sewer-turret-flash!) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior sew-light-control-init-by-other sew-light-control ((arg0 entity-actor) (arg1 entity-actor)) + (process-entity-set! self arg0) + (set! (-> *game-info* controller 0) (process->handle self)) + (set! (-> self switch-ent) arg0) + (set! (-> self turret-ent) arg1) + (sew-light-control-method-15 self #f #f) + (go-virtual idle) + (none) + ) + +(defun sewer-startup () + (cond + ((task-node-closed? (game-task-node sewer-board-introduction)) + (set! (-> sewer bigmap-id) (the-as uint 15)) + (set! (-> sewerb bigmap-id) (the-as uint 15)) + ) + (else + (set! (-> sewer bigmap-id) (the-as uint 14)) + (set! (-> sewerb bigmap-id) (the-as uint 14)) + ) + ) + (process-spawn + sew-light-control + (entity-by-name "sew-light-switch-13") + (entity-by-name "sew-gunturret-13") + :to *entity-pool* + ) + 0 + (none) + ) diff --git a/goal_src/jak2/levels/sewer/sewer-obs2.gc b/goal_src/jak2/levels/sewer/sewer-obs2.gc index 7bdf9f7846..e11e38a07c 100644 --- a/goal_src/jak2/levels/sewer/sewer-obs2.gc +++ b/goal_src/jak2/levels/sewer/sewer-obs2.gc @@ -7,3 +7,1778 @@ ;; DECOMP BEGINS +(deftype sew-elevator (elevator) + ((sound-id sound-id :offset-assert 368) + ) + :heap-base #x100 + :method-count-assert 50 + :size-assert #x174 + :flag-assert #x3201000174 + (:methods + (sew-elevator-method-49 (_type_ symbol) none 49) + ) + ) + + +(defskelgroup skel-sew-elevator sew-elevator 0 3 ((1 (meters 999999))) :bounds (static-spherem 0 0 5.6 9.2)) + +(defmethod get-art-group sew-elevator ((obj sew-elevator)) + "@returns The associated [[art-group]]" + (art-group-get-by-name *level* "skel-sew-elevator" (the-as (pointer uint32) #f)) + ) + +(defmethod elevator-method-43 sew-elevator ((obj sew-elevator) (arg0 vector) (arg1 float) (arg2 float)) + (let ((s4-0 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) arg1 'interp)) + (a0-3 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) arg2 'interp)) + (v1-3 (-> obj root-override trans)) + ) + (when (and (< (-> a0-3 y) (-> s4-0 y)) (< (-> arg0 y) (+ -8192.0 (-> v1-3 y)))) + (let ((s4-2 (vector-! (new 'stack-no-clear 'vector) arg0 v1-3))) + (vector-inv-orient-by-quat! s4-2 s4-2 (-> obj root-override quat)) + (and (< (fabs (-> s4-2 x)) 24576.0) (< 0.0 (-> s4-2 z)) (< (-> s4-2 z) 49152.0)) + ) + ) + ) + ) + +(defmethod elevator-method-45 sew-elevator ((obj sew-elevator)) + "@returns Stub, or always returns [[#t]]" + (let* ((gp-0 *target*) + (a0-2 (if (type? gp-0 process-focusable) + gp-0 + ) + ) + ) + (when a0-2 + (let* ((v1-1 (get-trans a0-2 0)) + (gp-2 (vector-! (new 'stack-no-clear 'vector) v1-1 (-> obj root-override trans))) + ) + (vector-inv-orient-by-quat! gp-2 gp-2 (-> obj root-override quat)) + (and (< (fabs (-> gp-2 x)) 20480.0) (< 0.0 (-> gp-2 z)) (< (-> gp-2 z) 40960.0)) + ) + ) + ) + ) + +(defmethod sew-elevator-method-49 sew-elevator ((obj sew-elevator) (arg0 symbol)) + (let ((v1-3 (-> (the-as collide-shape-prim-group (-> obj root-override root-prim)) child 1))) + (cond + (arg0 + (set! (-> v1-3 prim-core collide-as) (collide-spec obstacle pusher)) + (set! (-> v1-3 prim-core collide-with) (collide-spec jak player-list)) + ) + (else + (set! (-> v1-3 prim-core collide-as) (collide-spec)) + (set! (-> v1-3 prim-core collide-with) (collide-spec)) + 0 + ) + ) + ) + (none) + ) + +(defstate running (sew-elevator) + :virtual #t + :enter (behavior () + (let ((t9-0 (-> (method-of-type elevator running) enter))) + (if t9-0 + (t9-0) + ) + ) + (when (and (logtest? (-> self elevator-status) (elevator-status elevator-status-0)) + (logtest? (elevator-flags elevator-flags-16) (-> self params flags)) + ) + (sew-elevator-method-49 self #t) + (set-setting! 'jump #f 0 0) + ) + (none) + ) + :post (behavior () + (let ((t9-0 (-> (method-of-type elevator running) post))) + (if t9-0 + ((the-as (function none) t9-0)) + ) + ) + (sound-play "sew-elevator-lp" :id (-> self sound-id) :position (-> self root-override trans)) + (none) + ) + ) + +(defstate arrived (sew-elevator) + :virtual #t + :enter (behavior () + (let ((t9-0 (-> (method-of-type elevator arrived) enter))) + (if t9-0 + (t9-0) + ) + ) + (sound-stop (-> self sound-id)) + (sound-play "sew-elev-stop") + (when (and (logtest? (-> self elevator-status) (elevator-status elevator-status-0)) + (logtest? (elevator-flags elevator-flags-16) (-> self params flags)) + ) + (sew-elevator-method-49 self #f) + (remove-setting! 'jump) + ) + (none) + ) + ) + +(defmethod deactivate sew-elevator ((obj sew-elevator)) + (sound-stop (-> obj sound-id)) + ((the-as (function elevator none) (find-parent-method sew-elevator 10)) obj) + (none) + ) + +(defmethod base-plat-method-33 sew-elevator ((obj sew-elevator)) + (set! (-> obj sound-id) (new-sound-id)) + 0 + (none) + ) + +(defmethod init-defaults! sew-elevator ((obj sew-elevator)) + "Initializes default settings related to the [[elevator]]: + - `elevator-xz-threshold` + - `elevator-y-threshold` + - `elevator-start-pos` + - `elevator-move-rate` + - `elevator-flags`" + (let ((t9-0 (method-of-type elevator init-defaults!))) + (t9-0 obj) + ) + (if (name= (-> obj name) "sew-elevator-15") + (set! (-> obj params xz-threshold) 348160.0) + (set! (-> obj params xz-threshold) 184320.0) + ) + (when (and (logtest? (elevator-flags elevator-flags-17) (-> obj params flags)) + (and (task-node-closed? (game-task-node sewer-escort-introduction)) + (not (task-node-closed? (game-task-node sewer-escort-resolution))) + ) + ) + (set! (-> obj params start-pos) 0.0) + (logior! (-> obj params flags) (elevator-flags elevator-flags-3)) + ) + 0 + (none) + ) + +(defmethod base-plat-method-31 sew-elevator ((obj sew-elevator)) + "TODO - collision stuff" + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) cshape-reaction-default) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) + (set! (-> s5-0 total-prims) (the-as uint 3)) + (set! (-> s4-0 prim-core collide-as) (collide-spec obstacle camera-blocker pusher)) + (set! (-> s4-0 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> s4-0 prim-core action) (collide-action solid rideable)) + (set! (-> s4-0 transform-index) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 22937.6 37683.2) + (set! (-> s5-0 root-prim) s4-0) + ) + (pusher-init s5-0) + (let ((v1-15 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-15 prim-core collide-as) (collide-spec obstacle camera-blocker pusher)) + (set! (-> v1-15 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-15 prim-core action) (collide-action solid rideable)) + (set! (-> v1-15 transform-index) 3) + (set-vector! (-> v1-15 local-sphere) 0.0 0.0 22937.6 37683.2) + ) + (let ((v1-17 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> v1-17 prim-core action) (collide-action solid)) + (set! (-> v1-17 transform-index) 3) + (set-vector! (-> v1-17 local-sphere) 0.0 0.0 22937.6 39321.6) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-20 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-20 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-20 prim-core collide-with)) + ) + (set! (-> obj root-override) s5-0) + ) + (sew-elevator-method-49 obj #f) + (none) + ) + +(deftype sew-valve (process-drawable) + ((joint joint-mod-rotate-local :offset-assert 200) + (actor-group (pointer actor-group) :offset-assert 204) + (actor-group-count int32 :offset-assert 208) + (water-height float :offset-assert 212) + (spin float :offset-assert 216) + (spin-rate float :offset-assert 220) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xe0 + :flag-assert #x16006000e0 + (:methods + (idle () _type_ :state 20) + (turn () _type_ :state 21) + ) + ) + + +(defskelgroup skel-sew-valve sew-valve 0 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + ) + +(defstate idle (sew-valve) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('attack) + (case (-> (the-as attack-info (-> event param 1)) mode) + (('spin 'punch 'flop 'uppercut) + (if (!= (-> self water-height) (get-base-height *ocean-map-sewer*)) + (go-virtual turn) + ) + ) + ) + ) + ) + ) + :code (the-as (function none :behavior sew-valve) transform-and-sleep) + ) + +(defstate turn (sew-valve) + :virtual #t + :enter (behavior () + (set! (-> self joint enable) #t) + (set! (-> self spin-rate) 196608.0) + (logclear! (-> self mask) (process-mask actor-pause)) + (sound-play "sew-valve") + (dotimes (v1-5 (-> self actor-group-count)) + (dotimes (a0-4 (-> self actor-group v1-5 length)) + (let ((a1-5 (-> self actor-group v1-5 data a0-4 actor))) + (if a1-5 + (logior! (-> a1-5 extra perm status) (entity-perm-status bit-10)) + ) + ) + ) + ) + (let ((gp-1 (res-lump-struct (-> self entity) 'on-activate structure))) + (if gp-1 + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f)) + (the-as pair gp-1) + ) + ) + ) + (none) + ) + :exit (behavior () + (set! (-> self joint enable) #f) + (logior! (-> self mask) (process-mask actor-pause)) + (none) + ) + :trans (behavior () + (if (= (-> self water-height) (get-base-height *ocean-map-sewer*)) + (go-virtual idle) + ) + (none) + ) + :code (the-as (function none :behavior sew-valve) sleep-code) + :post (behavior () + (seek! (-> self spin-rate) 0.0 (* 81920.0 (-> self clock seconds-per-frame))) + (+! (-> self spin) (* (-> self spin-rate) (-> self clock seconds-per-frame))) + (quaternion-axis-angle! (-> self joint rotation) 0.0 0.0 1.0 (-> self spin)) + (let* ((f0-8 (- (get-base-height *ocean-map-sewer*) (-> self water-height))) + (f30-0 f0-8) + (f28-0 (seek-ease + f0-8 + 0.0 + (* (lerp 21299.2 8192.0 (* 0.000005086263 (-> self spin-rate))) (-> self clock seconds-per-frame)) + 12288.0 + 2.0 + ) + ) + ) + (set-height! *ocean-map-sewer* (+ (-> self water-height) f28-0)) + (if (and *target* + (logtest? (focus-status board) (-> *target* focus-status)) + (logtest? (-> *target* focus-status) (focus-status touch-water)) + ) + (+! (-> *target* control trans y) (- f28-0 f30-0)) + ) + ) + (ja-post) + (none) + ) + ) + +;; WARN: Return type mismatch process-drawable vs sew-valve. +(defmethod relocate sew-valve ((obj sew-valve) (arg0 int)) + (if (nonzero? (-> obj joint)) + (&+! (-> obj joint) arg0) + ) + (the-as + sew-valve + ((the-as (function process-drawable int process-drawable) (find-parent-method sew-valve 7)) obj arg0) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-valve ((obj sew-valve) (arg0 entity-actor)) + (local-vars (sv-16 res-tag) (sv-32 res-tag)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((v1-6 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> v1-6 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-6 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-6 prim-core action) (collide-action solid)) + (set! (-> v1-6 transform-index) 3) + (set-vector! (-> v1-6 local-sphere) 0.0 0.0 1638.4 3276.8) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) v1-6) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-9 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-9 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-9 prim-core collide-with)) + ) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-valve" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj spin) 0.0) + (set! (-> obj spin-rate) 0.0) + (set! (-> obj joint) (new 'process 'joint-mod-rotate-local obj 4 #f)) + (set! sv-16 (new 'static 'res-tag)) + (set! (-> obj actor-group) + (res-lump-data (-> obj entity) 'actor-groups (pointer actor-group) :tag-ptr (& sv-16)) + ) + (set! (-> obj actor-group-count) (the-as int (-> sv-16 elt-count))) + (set! sv-32 (new 'static 'res-tag)) + (let ((v1-22 (res-lump-data (-> obj entity) 'extra-float-param pointer :tag-ptr (& sv-32)))) + (if (and v1-22 (nonzero? (-> sv-32 elt-count))) + (set! (-> obj water-height) (-> (the-as (pointer float) v1-22))) + (set! (-> obj water-height) 0.0) + ) + ) + (format #t "~S water-height: ~m~%" (-> obj name) (-> obj water-height)) + (set! (-> obj water-height) (+ -216498.17 (-> obj water-height))) + (go (method-of-object obj idle)) + (none) + ) + +(deftype sew-mar-statue-debris (process-drawable) + () + :heap-base #x50 + :method-count-assert 21 + :size-assert #xc8 + :flag-assert #x15005000c8 + (:methods + (idle () _type_ :state 20) + ) + ) + + +(deftype sew-mar-statue-debris-b (process-drawable) + () + :heap-base #x50 + :method-count-assert 21 + :size-assert #xc8 + :flag-assert #x15005000c8 + (:methods + (idle () _type_ :state 20) + ) + ) + + +(deftype sew-mar-statue (process-drawable) + ((root-override collide-shape :offset 128) + (spawned-debris? symbol :offset-assert 200) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xcc + :flag-assert #x16005000cc + (:methods + (idle () _type_ :state 20) + (hidden () _type_ :state 21) + ) + ) + + +(defskelgroup skel-sew-mar-statue sew-mar-statue 0 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 7.5 0 14.4) + ) + +(defskelgroup skel-sew-mar-statue-explode-a sew-mar-statue-explode 0 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 50) + :origin-joint-index 4 + ) + +(defskelgroup skel-sew-mar-statue-explode-b sew-mar-statue-explode 4 6 + ((5 (meters 999999))) + :bounds (static-spherem 0 0 0 50) + :origin-joint-index 6 + ) + +(defstate idle (sew-mar-statue-debris) + :virtual #t + :code (the-as (function none :behavior sew-mar-statue-debris) sleep-code) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior sew-mar-statue-debris-init-by-other sew-mar-statue-debris () + (let ((gp-0 (new 'process 'collide-shape self (collide-list-enum hit-by-player)))) + (let ((s5-0 (new 'process 'collide-shape-prim-group gp-0 (the-as uint 3) 0))) + (set! (-> gp-0 total-prims) (the-as uint 4)) + (set! (-> s5-0 prim-core collide-as) (collide-spec obstacle)) + (set! (-> s5-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s5-0 prim-core action) (collide-action solid)) + (set! (-> s5-0 transform-index) 3) + (set-vector! (-> s5-0 local-sphere) 10240.0 0.0 62464.0 151552.0) + (set! (-> gp-0 root-prim) s5-0) + ) + (let ((v1-9 (new 'process 'collide-shape-prim-mesh gp-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-9 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-9 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-9 prim-core action) (collide-action solid)) + (set! (-> v1-9 transform-index) 3) + (set-vector! (-> v1-9 local-sphere) 0.0 0.0 20480.0 81920.0) + ) + (let ((v1-11 (new 'process 'collide-shape-prim-mesh gp-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> v1-11 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-11 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-11 prim-core action) (collide-action solid)) + (set! (-> v1-11 transform-index) 3) + (set-vector! (-> v1-11 local-sphere) -49152.0 0.0 114688.0 61440.0) + ) + (let ((v1-13 (new 'process 'collide-shape-prim-mesh gp-0 (the-as uint 2) (the-as uint 0)))) + (set! (-> v1-13 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-13 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-13 prim-core action) (collide-action solid)) + (set! (-> v1-13 transform-index) 3) + (set-vector! (-> v1-13 local-sphere) 69632.0 0.0 102400.0 73728.0) + ) + (set! (-> gp-0 nav-radius) (* 0.75 (-> gp-0 root-prim local-sphere w))) + (let ((v1-16 (-> gp-0 root-prim))) + (set! (-> gp-0 backup-collide-as) (-> v1-16 prim-core collide-as)) + (set! (-> gp-0 backup-collide-with) (-> v1-16 prim-core collide-with)) + ) + (set! (-> self root) gp-0) + ) + (let ((gp-1 (ppointer->process (-> self parent)))) + (set! (-> self root trans quad) (-> (the-as process-drawable gp-1) root trans quad)) + (quaternion-copy! (-> self root quat) (-> (the-as process-drawable gp-1) root quat)) + (set! (-> self root scale quad) (-> (the-as process-drawable gp-1) root scale quad)) + ) + (initialize-skeleton + self + (the-as + skeleton-group + (art-group-get-by-name *level* "skel-sew-mar-statue-explode-a" (the-as (pointer uint32) #f)) + ) + (the-as pair 0) + ) + (set! (-> self draw light-index) (the-as uint 10)) + (transform-post) + (go-virtual idle) + (none) + ) + +(defstate idle (sew-mar-statue-debris-b) + :virtual #t + :code (the-as (function none :behavior sew-mar-statue-debris-b) sleep-code) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior sew-mar-statue-debris-b-init-by-other sew-mar-statue-debris-b () + (set! (-> self root) (new 'process 'trsqv)) + (let ((gp-0 (ppointer->process (-> self parent)))) + (set! (-> self root trans quad) (-> (the-as process-drawable gp-0) root trans quad)) + (quaternion-copy! (-> self root quat) (-> (the-as process-drawable gp-0) root quat)) + (set! (-> self root scale quad) (-> (the-as process-drawable gp-0) root scale quad)) + ) + (initialize-skeleton + self + (the-as + skeleton-group + (art-group-get-by-name *level* "skel-sew-mar-statue-explode-b" (the-as (pointer uint32) #f)) + ) + (the-as pair 0) + ) + (set! (-> self draw light-index) (the-as uint 10)) + (ja-post) + (go-virtual idle) + (none) + ) + +(defbehavior sew-mar-statue-event-handler sew-mar-statue ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('hide) + (if (not (and (-> self next-state) (= (-> self next-state name) 'hidden))) + (go-virtual hidden) + ) + ) + (('trigger) + (when (not (-> self spawned-debris?)) + (set! (-> self spawned-debris?) #t) + (process-spawn sew-mar-statue-debris :to self) + (process-spawn sew-mar-statue-debris-b :to self) + ) + ) + ) + ) + +(defmethod run-logic? sew-mar-statue ((obj sew-mar-statue)) + #t + ) + +(defstate idle (sew-mar-statue) + :virtual #t + :event sew-mar-statue-event-handler + :trans (behavior () + (if (< (get-base-height *ocean-map-sewer*) -286720.0) + (setup-masks (-> self draw) 4 2) + (setup-masks (-> self draw) 2 4) + ) + (none) + ) + :code (the-as (function none :behavior sew-mar-statue) sleep-code) + ) + +(defstate hidden (sew-mar-statue) + :virtual #t + :event sew-mar-statue-event-handler + :enter (behavior () + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (collide-spec)) + (set! (-> v1-1 prim-core collide-with) (collide-spec)) + ) + 0 + (logior! (-> self draw status) (draw-control-status no-draw)) + (none) + ) + :code (the-as (function none :behavior sew-mar-statue) sleep-code) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-mar-statue ((obj sew-mar-statue) (arg0 entity-actor)) + (set! (-> obj spawned-debris?) #f) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((v1-2 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-2 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-2 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-2 prim-core action) (collide-action solid)) + (set! (-> v1-2 transform-index) 0) + (set-vector! (-> v1-2 local-sphere) 0.0 30720.0 0.0 58982.4) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) v1-2) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-5 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-5 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-5 prim-core collide-with)) + ) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-mar-statue" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (transform-post) + (set! (-> obj event-hook) sew-mar-statue-event-handler) + (cond + ((task-node-closed? (game-task-node sewer-escort-resolution)) + (process-spawn sew-mar-statue-debris :to obj) + (process-spawn sew-mar-statue-debris-b :to obj) + (set! (-> obj spawned-debris?) #t) + (go (method-of-object obj hidden)) + ) + (else + (go (method-of-object obj idle)) + ) + ) + (none) + ) + +(deftype sew-catwalk (drop-plat) + () + :heap-base #xc0 + :method-count-assert 36 + :size-assert #x140 + :flag-assert #x2400c00140 + ) + + +(defskelgroup skel-sew-catwalk-1 sew-catwalk 0 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem -7 5 -25 18) + :origin-joint-index 3 + ) + +(defmethod start-bouncing! sew-catwalk ((obj sew-catwalk)) + "Sets `bouncing` to [[#t]] and sets up the clock to periodically bounce + and translate the platform via the `smush` + @see [[smush-control]]" + (logclear! (-> obj mask) (process-mask sleep)) + (logclear! (-> obj mask) (process-mask sleep-code)) + 0 + (none) + ) + +(defstate fall (sew-catwalk) + :virtual #t + :trans (the-as (function none :behavior sew-catwalk) rider-trans) + :code (behavior ((arg0 symbol)) + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (set! (-> self draw bounds y) -102400.0) + (set! (-> self draw bounds w) 163840.0) + (set! (-> self root-override root-prim local-sphere w) 163840.0) + (set! (-> self draw force-lod) 0) + (let* ((s5-0 (-> self draw art-group)) + (s4-0 (method-of-object s5-0 get-art-by-name-method)) + ) + (format (clear *temp-string*) "~S-end" (-> self art-name)) + (let ((s5-1 (the-as object (s4-0 s5-0 *temp-string* art-joint-anim)))) + (if (not arg0) + (ja-play-spooled-anim + (-> self anim) + (ja-group) + (the-as art-joint-anim s5-1) + (the-as (function process-drawable symbol) false-func) + ) + ) + (ja-channel-set! 1) + (set! (-> self skel root-channel 0 frame-group) (the-as art-joint-anim s5-1)) + ) + ) + (suspend) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-catwalk ((obj sew-catwalk) (arg0 entity-actor)) + (local-vars (sv-16 collide-shape-prim-mesh) (sv-32 symbol) (sv-48 type) (sv-64 collide-shape-moving)) + (stack-size-set! (-> obj main-thread) 512) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 14) 0))) + (set! (-> s4-0 total-prims) (the-as uint 15)) + (set! (-> s3-0 prim-core collide-as) (collide-spec obstacle pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid)) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) -28672.0 20480.0 -102400.0 73728.0) + (set! (-> s4-0 root-prim) s3-0) + (pusher-init s4-0) + (let* ((s2-0 + '((0 4 28672) + (1 5 28672) + (2 6 28672) + (3 7 28672) + (4 8 28672) + (5 9 28672) + (6 10 28672) + (7 11 28672) + (8 12 28672) + (9 13 28672) + (10 14 28672) + (11 15 28672) + (12 16 28672) + (13 17 28672) + ) + ) + (s1-0 (car s2-0)) + ) + (while (not (null? s2-0)) + (let ((s0-0 (method-of-type collide-shape-prim-mesh new))) + (set! sv-32 'process) + (set! sv-48 collide-shape-prim-mesh) + (set! sv-64 s4-0) + (let ((a3-2 (command-get-int (car s1-0) 0)) + (t0-1 0) + ) + (set! sv-16 (s0-0 sv-32 sv-48 sv-64 (the-as uint a3-2) (the-as uint t0-1))) + ) + ) + (let ((s0-1 sv-16)) + (set! (-> s0-1 prim-core collide-as) (-> s3-0 prim-core collide-as)) + (set! (-> s0-1 prim-core collide-with) (-> s3-0 prim-core collide-with)) + (set! (-> s0-1 prim-core action) (-> s3-0 prim-core action)) + (set! (-> s0-1 transform-index) (command-get-int (car (cdr s1-0)) 0)) + ) + (set-vector! (-> sv-16 local-sphere) 0.0 0.0 0.0 (command-get-float (car (cdr (cdr s1-0))) 0.0)) + (set! s2-0 (cdr s2-0)) + (set! s1-0 (car s2-0)) + ) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-28 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-28 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-28 prim-core collide-with)) + ) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-catwalk-1" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj art-name) "sew-catwalk-1") + (set! (-> obj anim) + (new 'static 'spool-anim :name "sew-catwalk-1" :anim-name "1-break" :parts 3 :command-list '()) + ) + (set! (-> obj basetrans quad) (-> obj root-override trans quad)) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete))) + (go (method-of-object obj fall) #t) + (go (method-of-object obj idle)) + ) + (none) + ) + +(deftype sew-mine (process-drawable) + ((root-override collide-shape-moving :offset 128) + (last-time time-frame :offset-assert 200) + ) + :heap-base #x50 + :method-count-assert 23 + :size-assert #xd0 + :flag-assert #x17005000d0 + (:methods + (idle () _type_ :state 20) + (die () _type_ :state 21) + (sew-mine-method-22 (_type_) none 22) + ) + ) + + +(defstate idle (sew-mine) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack) + (let* ((s4-0 proc) + (gp-0 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (when gp-0 + (let ((a0-4 (vector-normalize! + (vector-! (new 'stack-no-clear 'vector) (-> gp-0 root-override trans) (-> self root-override trans)) + 1.0 + ) + ) + (a1-7 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-7 from) (process->ppointer self)) + (set! (-> a1-7 num-params) 2) + (set! (-> a1-7 message) 'attack-or-shove) + (set! (-> a1-7 param 0) (-> event param 0)) + (let ((v1-9 (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up control id)))) + (let* ((a2-3 *game-info*) + (a3-2 (+ (-> a2-3 attack-id) 1)) + ) + (set! (-> a2-3 attack-id) a3-2) + (set! (-> v1-9 id) a3-2) + ) + (set! (-> v1-9 vector quad) (-> a0-4 quad)) + (set! (-> v1-9 shove-back) 20480.0) + (set! (-> v1-9 shove-up) 12288.0) + (set! (-> v1-9 control) (if (logtest? (focus-status board) (-> gp-0 focus-status)) + 1.0 + 0.0 + ) + ) + (set! (-> a1-7 param 1) (the-as uint v1-9)) + ) + (send-event-function gp-0 a1-7) + ) + ) + ) + (go-virtual die) + ) + ) + ) + :code (the-as (function none :behavior sew-mine) transform-and-sleep-code) + :post (behavior () + (spawn (-> self part) (-> self root-override trans)) + (let ((gp-0 (mod (-> *display* part-clock frame-counter) 100))) + (if (< gp-0 (-> self last-time)) + (sound-play "sew-mine-flash") + ) + (set! (-> self last-time) (the-as time-frame gp-0)) + ) + (none) + ) + ) + +(defstate die (sew-mine) + :virtual #t + :code (behavior () + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (collide-spec)) + (set! (-> v1-1 prim-core collide-with) (collide-spec)) + ) + 0 + (logior! (-> self draw status) (draw-control-status no-draw)) + (sound-play "sew-mine-b") + (process-spawn touch-tracker :init touch-tracker-init (-> self root-override trans) #x47200000 30 :to self) + (let ((gp-2 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-2 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 (the-as part-tracker gp-2) self (symbol->string (-> part-tracker symbol)) (the-as pointer #x70004000)) + ) + (let ((t9-7 run-function-in-process) + (a0-8 gp-2) + (a1-6 part-tracker-init) + (a2-10 (-> *part-group-id-table* 124)) + (a3-4 0) + (t0-2 #f) + (t1-1 #f) + (t2-1 #f) + (t3-0 *launch-matrix*) + ) + (set! (-> t3-0 trans quad) (-> self root-override trans quad)) + ((the-as (function object object object object object object object object none) t9-7) + a0-8 + a1-6 + a2-10 + a3-4 + t0-2 + t1-1 + t2-1 + t3-0 + ) + ) + (-> gp-2 ppointer) + ) + ) + (cleanup-for-death self) + (let ((gp-3 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-3) (seconds 2)) + (suspend) + ) + ) + (none) + ) + ) + +(defmethod sew-mine-method-22 sew-mine ((obj sew-mine)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 345) obj)) + (set! (-> obj last-time) 0) + 0 + (none) + ) + +(deftype sew-mine-a (sew-mine) + () + :heap-base #x50 + :method-count-assert 23 + :size-assert #xd0 + :flag-assert #x17005000d0 + ) + + +(defskelgroup skel-sew-mine-a sew-mine-a 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 0 0 3)) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-mine-a ((obj sew-mine-a) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 2048.0 0.0 8192.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-11 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-11 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-11 prim-core collide-with)) + ) + (set! (-> obj root-override) (the-as collide-shape-moving s4-0)) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-mine-a" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (sew-mine-method-22 obj) + (go (method-of-object obj idle)) + (none) + ) + +(deftype sew-mine-b (sew-mine) + ((base-height float :offset-assert 208) + (center vector :inline :offset-assert 224) + (time-skew uint64 :offset-assert 240) + (period float :offset-assert 248) + ) + :heap-base #x80 + :method-count-assert 23 + :size-assert #xfc + :flag-assert #x17008000fc + ) + + +(defskelgroup skel-sew-mine-b sew-mine-b 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 0 0 2.5)) + +(defstate idle (sew-mine-b) + :virtual #t + :post (behavior () + (let ((t9-0 (-> (method-of-type sew-mine idle) post))) + (if t9-0 + ((the-as (function none) t9-0)) + ) + ) + (let* ((f30-0 (get-base-height *ocean-map-sewer*)) + (f0-0 (-> self period)) + (t9-2 sin-rad) + (f1-0 -3.1415925) + (f2-0 6.283185) + (f3-1 (the float (+ (-> self clock frame-counter) (the-as time-frame (-> self time-skew))))) + (f28-0 (t9-2 (+ f1-0 (* f2-0 (/ (- f3-1 (* (the float (the int (/ f3-1 f0-0))) f0-0)) f0-0))))) + ) + (when (< f30-0 (-> self center y)) + (set! (-> self center y) f30-0) + (if (>= (-> self base-height) (-> self center y)) + (go-virtual die) + ) + ) + (set! (-> self root-override trans quad) (-> self center quad)) + (set! (-> self root-override trans y) (+ (-> self center y) (* 819.2 f28-0))) + ) + (transform-post) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-mine-b ((obj sew-mine-b) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 2048.0 0.0 8192.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-11 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-11 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-11 prim-core collide-with)) + ) + (set! (-> obj root-override) (the-as collide-shape-moving s4-0)) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-mine-b" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (sew-mine-method-22 obj) + (let ((a0-11 (-> obj entity))) + (set! (-> obj base-height) ((method-of-object a0-11 get-property-value-float) + a0-11 + 'base-height + 'interp + -1000000000.0 + -16384000.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) + (set! (-> obj time-skew) (the-as uint (the int (* 300.0 (rand-vu-float-range 0.1 1.4))))) + (set! (-> obj period) (* 300.0 (rand-vu-float-range 1.2 1.8))) + (set! (-> obj center quad) (-> obj root-override trans quad)) + (set! (-> obj base-height) (+ -216498.17 (-> obj base-height))) + (set! (-> obj root-override pause-adjust-distance) 532480.0) + (go (method-of-object obj idle)) + (none) + ) + +(deftype sew-wall (process-focusable) + ((deadly-radius float :offset-assert 204) + (prev-deadly-radius float :offset-assert 208) + (attack-id uint32 :offset-assert 212) + (first-wall? basic :offset-assert 216) + (anim spool-anim :offset-assert 220) + (art-name basic :offset-assert 224) + ) + :heap-base #x70 + :method-count-assert 30 + :size-assert #xe4 + :flag-assert #x1e007000e4 + (:methods + (idle () _type_ :state 27) + (hit (symbol) _type_ :state 28) + (sew-wall-method-29 (_type_) none 29) + ) + ) + + +(defskelgroup skel-sew-wall sew-wall 0 -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :origin-joint-index 4 + ) + +;; WARN: Return type mismatch float vs none. +(defmethod sew-wall-method-29 sew-wall ((obj sew-wall)) + (with-pp + (let ((s4-0 *target*)) + (when s4-0 + (let ((f0-0 (vector-vector-xz-distance (get-trans s4-0 0) (-> obj root-override trans))) + (f2-0 (-> obj deadly-radius)) + (f1-0 (-> obj prev-deadly-radius)) + ) + (set! (-> obj prev-deadly-radius) f2-0) + (when (and (>= f2-0 f0-0) (>= f0-0 (+ -4096.0 f1-0))) + (let ((s5-1 (new 'stack-no-clear 'collide-query))) + (set! (-> s5-1 start-pos quad) (-> obj root-override trans quad)) + (set! (-> s5-1 start-pos y) (+ 12288.0 (-> s5-1 start-pos y))) + (vector-! (-> s5-1 move-dist) (get-trans s4-0 3) (-> s5-1 start-pos)) + (let ((v1-9 s5-1)) + (set! (-> v1-9 radius) 819.2) + (set! (-> v1-9 collide-with) (collide-spec backgnd)) + (set! (-> v1-9 ignore-process0) obj) + (set! (-> v1-9 ignore-process1) #f) + (set! (-> v1-9 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1)) + (set! (-> v1-9 action-mask) (collide-action solid)) + ) + (when (< (fill-and-probe-using-line-sphere *collide-cache* s5-1) 0.0) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) (process->ppointer pp)) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'attack) + (set! (-> a1-4 param 0) (the-as uint #f)) + (let ((v1-15 (new 'static 'attack-info :mask (attack-info-mask mode id attacker-velocity)))) + (set! (-> v1-15 id) (-> obj attack-id)) + (set! (-> v1-15 mode) 'explode) + (set! (-> v1-15 attacker-velocity quad) (-> s5-1 move-dist quad)) + (set! (-> a1-4 param 1) (the-as uint v1-15)) + ) + (send-event-function *target* a1-4) + ) + (set! (-> obj deadly-radius) -1.0) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate idle (sew-wall) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (logclear! (-> self mask) (process-mask actor-pause)) + (if (-> self first-wall?) + (task-node-close! (game-task-node sewer-escort-explode-wall1)) + ) + (go-virtual hit #f) + ) + (('hide) + (logior! (-> self draw status) (draw-control-status no-draw)) + #t + ) + ) + ) + :code (behavior () + (add-process *gui-control* self (gui-channel art-load) (gui-action queue) (-> self anim name) -99.0 0) + (until #f + (transform-post) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + #f + (none) + ) + ) + +(defstate hit (sew-wall) + :virtual #t + :enter (behavior ((arg0 symbol)) + (set! (-> self deadly-radius) -1.0) + (logclear! (-> self draw status) (draw-control-status no-draw)) + (none) + ) + :exit (behavior () + (ja-abort-spooled-anim (-> self anim) (the-as art-joint-anim #f) -1) + (none) + ) + :trans (behavior () + (let ((f0-0 (-> self deadly-radius))) + (when (>= f0-0 0.0) + (set! (-> self deadly-radius) (seek f0-0 409600.0 (* 368640.0 (-> self clock seconds-per-frame)))) + (sew-wall-method-29 self) + ) + ) + (none) + ) + :code (behavior ((arg0 symbol)) + (if (not (-> self first-wall?)) + (set! arg0 #t) + ) + (let ((v1-4 (-> self root-override root-prim))) + (set! (-> (the-as collide-shape-prim-group v1-4) child 0 prim-core collide-with) (collide-spec)) + (set! (-> (the-as collide-shape-prim-group v1-4) child 0 prim-core collide-as) (collide-spec)) + (if (-> self first-wall?) + (set-vector! (-> v1-4 local-sphere) 43827.2 -16384.0 158924.8 204800.0) + (set-vector! (-> v1-4 local-sphere) 43827.2 -16384.0 110592.0 225280.0) + ) + (set! (-> self draw bounds quad) (-> v1-4 local-sphere quad)) + ) + (update-transforms (-> self root-override)) + (let* ((s5-0 (-> self draw art-group)) + (s4-0 (method-of-object s5-0 get-art-by-name-method)) + ) + (format (clear *temp-string*) "~S-end" (-> self art-name)) + (let ((s5-1 (the-as object (s4-0 s5-0 *temp-string* art-joint-anim)))) + (when (not arg0) + (set! (-> self deadly-radius) 0.0) + (ja-play-spooled-anim + (-> self anim) + (ja-group) + (the-as art-joint-anim s5-1) + (the-as (function process-drawable symbol) false-func) + ) + ) + (ja-channel-set! 1) + (set! (-> self skel root-channel 0 frame-group) (the-as art-joint-anim s5-1)) + ) + ) + (set! (-> self deadly-radius) -1.0) + (let* ((a0-14 (-> self root-override root-prim)) + (a1-11 (-> a0-14 prim-core collide-with)) + (v1-22 (-> a0-14 prim-core collide-as)) + ) + (cond + ((-> self first-wall?) + (set! (-> (the-as collide-shape-prim-group a0-14) child 1 prim-core collide-with) a1-11) + (set! (-> (the-as collide-shape-prim-group a0-14) child 1 prim-core collide-as) v1-22) + (set! (-> (the-as collide-shape-prim-group a0-14) child 2 prim-core collide-with) a1-11) + (set! (-> (the-as collide-shape-prim-group a0-14) child 2 prim-core collide-as) v1-22) + ) + (else + (set! (-> (the-as collide-shape-prim-group a0-14) child 3 prim-core collide-with) a1-11) + (set! (-> (the-as collide-shape-prim-group a0-14) child 3 prim-core collide-as) v1-22) + (set! (-> (the-as collide-shape-prim-group a0-14) child 4 prim-core collide-with) a1-11) + (set! (-> (the-as collide-shape-prim-group a0-14) child 4 prim-core collide-as) v1-22) + ) + ) + ) + (logior! (-> self mask) (process-mask actor-pause)) + (suspend) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + :post (the-as (function none :behavior sew-wall) ja-post) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-wall ((obj sew-wall) (arg0 entity-actor)) + (with-pp + (stack-size-set! (-> obj main-thread) 512) + (set! (-> obj mask) (logior (process-mask collectable) (-> obj mask))) + (let ((s3-0 ((method-of-type res-lump get-property-struct) + (-> obj entity) + 'art-name + 'interp + -1000000000.0 + "sew-wall-1" + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (s5-0 (art-group-get-by-name *level* "skel-sew-wall" (the-as (pointer uint32) #f))) + ) + (set! (-> obj art-name) (the-as basic s3-0)) + (let ((s2-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s2-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s2-0 reaction) cshape-reaction-default) + (set! (-> s2-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s1-0 (new 'process 'collide-shape-prim-group s2-0 (the-as uint 5) 0))) + (set! (-> s2-0 total-prims) (the-as uint 6)) + (set! (-> s1-0 prim-core collide-as) (collide-spec obstacle)) + (set! (-> s1-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s1-0 prim-core action) (collide-action solid)) + (set! (-> s1-0 transform-index) 4) + (set-vector! (-> s1-0 local-sphere) 0.0 0.0 0.0 40960.0) + (set! (-> s2-0 root-prim) s1-0) + ) + (let ((v1-19 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-19 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-19 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-19 prim-core action) (collide-action solid)) + (set! (-> v1-19 transform-index) 4) + (set-vector! (-> v1-19 local-sphere) 0.0 0.0 0.0 40960.0) + ) + (let ((v1-21 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> v1-21 prim-core action) (collide-action solid)) + (set! (-> v1-21 transform-index) 4) + (set-vector! (-> v1-21 local-sphere) 77824.0 -16384.0 282624.0 36864.0) + ) + (let ((v1-23 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 2) (the-as uint 0)))) + (set! (-> v1-23 prim-core action) (collide-action solid)) + (set! (-> v1-23 transform-index) 4) + (set-vector! (-> v1-23 local-sphere) 61440.0 -16384.0 112640.0 151552.0) + ) + (let ((v1-25 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 3) (the-as uint 0)))) + (set! (-> v1-25 prim-core action) (collide-action solid)) + (set! (-> v1-25 transform-index) 4) + (set-vector! (-> v1-25 local-sphere) 0.0 -16384.0 40960.0 122880.0) + ) + (let ((v1-27 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 4) (the-as uint 0)))) + (set! (-> v1-27 prim-core action) (collide-action solid)) + (set! (-> v1-27 transform-index) 4) + (set-vector! (-> v1-27 local-sphere) 81920.0 0.0 204800.0 143360.0) + ) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (let ((v1-30 (-> s2-0 root-prim))) + (set! (-> s2-0 backup-collide-as) (-> v1-30 prim-core collide-as)) + (set! (-> s2-0 backup-collide-with) (-> v1-30 prim-core collide-with)) + ) + (set! (-> obj root-override) s2-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (cond + ((string= (the-as string (-> obj art-name)) "sew-wall-1") + (set! (-> obj anim) + (new 'static 'spool-anim :name "sew-wall-1" :anim-name "1-break" :parts 1 :command-list '()) + ) + (set! (-> obj first-wall?) (the-as basic #t)) + ) + ((string= (the-as string (-> obj art-name)) "sew-wall-2") + (set! (-> obj anim) + (new 'static 'spool-anim :name "sew-wall-2" :anim-name "2-break" :parts 1 :command-list '()) + ) + (set! (-> obj root-override trans z) (+ 26624.0 (-> obj root-override trans z))) + (set! (-> obj first-wall?) #f) + ) + (else + (go process-drawable-art-error (the-as string s3-0)) + ) + ) + (initialize-skeleton obj (the-as skeleton-group s5-0) (the-as pair 0)) + ) + (set! (-> obj draw force-lod) 0) + (ja-channel-set! 1) + (let* ((s5-1 (-> obj skel root-channel 0)) + (s4-1 (-> obj draw art-group)) + (s3-1 (method-of-object s4-1 get-art-by-name-method)) + ) + (format (clear *temp-string*) "~S-idle" (-> obj art-name)) + (set! (-> s5-1 frame-group) (the-as art-joint-anim (s3-1 s4-1 *temp-string* (the-as type #f)))) + ) + (let* ((v1-51 *game-info*) + (a0-43 (+ (-> v1-51 attack-id) 1)) + ) + (set! (-> v1-51 attack-id) a0-43) + (set! (-> obj attack-id) a0-43) + ) + (if (eval! + (new 'stack 'script-context (the-as basic (process->ppointer pp)) pp (the-as vector #f)) + (res-lump-struct (-> obj entity) 'on-activate pair) + ) + (go (method-of-object obj hit) #t) + (go (method-of-object obj idle)) + ) + (none) + ) + ) + +(deftype sew-grill (process-drawable) + () + :heap-base #x50 + :method-count-assert 21 + :size-assert #xc8 + :flag-assert #x15005000c8 + (:methods + (idle () _type_ :state 20) + ) + ) + + +(defskelgroup skel-sew-grill sew-grill 0 3 ((1 (meters 999999))) :bounds (static-spherem 0 3 0 7.5)) + +(defstate idle (sew-grill) + :virtual #t + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior sew-grill) ja-post) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-grill ((obj sew-grill) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-grill" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (go (method-of-object obj idle)) + (none) + ) + +(deftype sew-scare-grunt (grunt) + ((anim spool-anim :offset-assert 692) + (manipy (pointer manipy) :offset-assert 696) + (spooled-sound-id uint32 :offset-assert 700) + (grill-actor entity-actor :offset-assert 704) + ) + :heap-base #x250 + :method-count-assert 188 + :size-assert #x2c4 + :flag-assert #xbc025002c4 + (:methods + (waiting () _type_ :state 186) + (scare () _type_ :state 187) + ) + ) + + +(defskelgroup skel-sew-scare-grunt grunt 0 5 ((1 (meters 999999))) :bounds (static-spherem 0 5 -12 20)) + +(define *sew-scare-grunt-nav-enemy-info* + (new 'static 'nav-enemy-info + :use-die-falling #f + :use-victory #f + :use-jump-blocked #f + :debug-draw-neck #f + :jump-debug-draw #f + :move-to-ground #t + :hover-if-no-ground #f + :idle-anim-script (new 'static 'array uint32 4 #x1e0002 #x3010501 #x0 #x0) + :idle-anim 5 + :notice-anim 13 + :hostile-anim -1 + :hit-anim 34 + :knocked-anim -1 + :knocked-land-anim -1 + :die-anim 19 + :die-falling-anim 32 + :victory-anim -1 + :jump-wind-up-anim 45 + :jump-in-air-anim 46 + :jump-land-anim 47 + :neck-joint 5 + :look-at-joint 6 + :bullseye-joint 18 + :sound-hit (static-sound-name "grunt-hit") + :sound-die (static-sound-name "grunt-die") + :notice-distance (meters 30) + :notice-distance-delta (meters 10) + :default-hit-points 1 + :gnd-collide-with (collide-spec backgnd) + :overlaps-others-collide-with-filter (collide-spec jak bot player-list) + :movement-gravity (meters -100) + :friction 0.8 + :attack-shove-back (meters 3) + :attack-shove-up (meters 2) + :attack-mode 'generic + :attack-damage 2 + :recover-gnd-collide-with (collide-spec backgnd crate obstacle hit-by-others-list pusher) + :jump-height-min (meters 3) + :jump-height-factor 0.5 + :knocked-seek-ry-clamp 2730.6667 + :knocked-soft-vxz-lo 72089.6 + :knocked-soft-vxz-hi 108134.4 + :knocked-soft-vy-lo 81920.0 + :knocked-soft-vy-hi 122880.0 + :knocked-medium-vxz-lo 147456.0 + :knocked-medium-vxz-hi 196608.0 + :knocked-medium-vy-lo 135168.0 + :knocked-medium-vy-hi 151552.0 + :knocked-hard-vxz-lo 78643.2 + :knocked-hard-vxz-hi 117964.8 + :knocked-hard-vy-lo 183500.8 + :knocked-hard-vy-hi 209715.2 + :knocked-huge-vxz-lo 164659.2 + :knocked-huge-vxz-hi 249036.8 + :knocked-huge-vy-lo 183500.8 + :knocked-huge-vy-hi 217907.2 + :knocked-yellow-vxz-lo 40960.0 + :knocked-yellow-vxz-hi 49152.0 + :knocked-yellow-vy-lo 57344.0 + :knocked-yellow-vy-hi 81920.0 + :knocked-red-vxz-lo 4096.0 + :knocked-red-vxz-hi 90112.0 + :knocked-red-vy-lo 106496.0 + :knocked-red-vy-hi 147456.0 + :knocked-blue-vxz-lo 40960.0 + :knocked-blue-vxz-hi 49152.0 + :knocked-blue-vy-lo 24576.0 + :knocked-blue-vy-hi 81920.0 + :shadow-size (meters 2) + :shadow-max-y (meters 1) + :shadow-min-y (meters -1) + :shadow-locus-dist (meters 150) + :gem-joint 6 + :gem-seg #x2 + :gem-no-seg #x4 + :gem-offset (new 'static 'sphere :y 614.4 :z -3276.8 :r 327680.0) + :callback-info #f + :use-momentum #f + :use-frustration #f + :use-stop-chase #f + :use-circling #f + :use-pacing #f + :walk-anim 11 + :turn-anim -1 + :run-anim 14 + :taunt-anim 20 + :run-travel-speed (meters 6) + :run-acceleration (meters 1) + :run-turning-acceleration (meters 2) + :walk-travel-speed (meters 3) + :walk-acceleration (meters 1) + :walk-turning-acceleration (meters 1) + :maximum-rotation-rate (degrees 720.0) + :notice-nav-radius (meters 1) + :frustration-distance (meters 8) + :frustration-time (seconds 4) + :blocked-time (seconds 0.3) + :circle-dist-lo 20480.0 + :circle-dist-hi 61440.0 + :nav-mesh #f + ) + ) + +(set! (-> *sew-scare-grunt-nav-enemy-info* fact-defaults) *fact-info-enemy-defaults*) + +(defstate waiting (sew-scare-grunt) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior sew-scare-grunt) + enemy-event-handler + ) + :enter (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (logior! (-> self draw status) (draw-control-status no-draw)) + (none) + ) + :trans (behavior () + (let* ((s5-0 *target*) + (gp-0 (if (type? s5-0 process-focusable) + s5-0 + ) + ) + ) + (when gp-0 + (cond + ((< (vector-vector-distance (-> self root-override2 trans) (get-trans gp-0 0)) 20480.0) + (go-virtual scare) + ) + ((< (vector-vector-distance (-> self root-override2 trans) (get-trans gp-0 0)) 102400.0) + (gui-control-method-12 + *gui-control* + self + (gui-channel art-load) + (gui-action queue) + (-> self anim name) + 0 + -99.0 + (new 'static 'sound-id) + ) + ) + ) + ) + ) + (none) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (-> self draw art-group data 5) + :num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior sew-scare-grunt) ja-post) + ) + +(defstate scare (sew-scare-grunt) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior sew-scare-grunt) + enemy-event-handler + ) + :enter (behavior () + (logclear! (-> self draw status) (draw-control-status no-draw)) + (let* ((v1-2 (-> self grill-actor)) + (gp-0 (if v1-2 + (-> v1-2 extra process) + ) + ) + ) + (when gp-0 + (set! (-> self manipy) + (process-spawn + manipy + :init manipy-init + (-> self root-override2 trans) + (-> gp-0 entity) + (art-group-get-by-name *level* "skel-sew-grill" (the-as (pointer uint32) #f)) + #f + 0 + :to self + ) + ) + (send-event (ppointer->process (-> self manipy)) 'anim-mode 'clone-anim) + (set! (-> self manipy 0 draw light-index) (-> (the-as sew-grill gp-0) draw light-index)) + (logior! (-> (the-as sew-grill gp-0) draw status) (draw-control-status no-draw)) + ) + ) + (set! (-> self spooled-sound-id) + (the-as + uint + (lookup-gui-connection-id *gui-control* (-> self anim name) (gui-channel art-load) (gui-action none)) + ) + ) + (none) + ) + :exit (behavior () + (let* ((a0-0 (-> self grill-actor)) + (v1-0 (if a0-0 + (-> a0-0 extra process) + ) + ) + ) + (if v1-0 + (logclear! (-> (the-as sew-grill v1-0) draw status) (draw-control-status no-draw)) + ) + ) + (none) + ) + :code (behavior () + (ja-channel-push! 1 (seconds 0.2)) + (let ((a2-0 (-> self draw art-group data 57))) + (ja-play-spooled-anim + (-> self anim) + (ja-group) + (the-as art-joint-anim a2-0) + (the-as (function process-drawable symbol) false-func) + ) + ) + (let ((v1-8 (-> self root-override2 root-prim))) + (set! (-> v1-8 prim-core collide-as) (collide-spec)) + (set! (-> v1-8 prim-core collide-with) (collide-spec)) + ) + 0 + (suspend) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + :post (behavior () + (let* ((a1-1 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 3))) + (f1-0 (vector-vector-xz-distance (-> self root-override2 trans) a1-1)) + ) + (vector-lerp! + (-> self draw color-mult) + *identity-vector* + *null-vector* + (fmax 0.0 (fmin 1.0 (* 0.00001994613 f1-0))) + ) + ) + (let ((f30-0 + (lerp-scale 1.0 0.0 (vector-vector-distance (-> self root-override2 trans) (camera-pos)) 65536.0 204800.0) + ) + ) + (when *sound-player-enable* + (let ((gp-1 (the-as sound-rpc-set-param (get-sound-buffer-entry)))) + (set! (-> gp-1 command) (sound-command set-param)) + (set! (-> gp-1 id) (the-as sound-id (-> self spooled-sound-id))) + (set! (-> gp-1 params volume) (the int (* 1024.0 f30-0))) + (let ((a1-5 (-> self root-override2 trans))) + (let ((s5-1 self)) + (when (= a1-5 #t) + (if (and s5-1 (type? s5-1 process-drawable) (nonzero? (-> s5-1 root-override2))) + (set! a1-5 (-> s5-1 root-override2 trans)) + (set! a1-5 (the-as vector #f)) + ) + ) + ) + (sound-trans-convert (the-as vector3w (-> gp-1 params trans)) a1-5) + ) + (set! (-> gp-1 params mask) (the-as uint 33)) + (-> gp-1 id) + ) + ) + ) + (transform-post) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod go-idle sew-scare-grunt ((obj sew-scare-grunt)) + (go (method-of-object obj waiting)) + (none) + ) + +(defmethod enemy-method-114 sew-scare-grunt ((obj sew-scare-grunt)) + "@abstract" + (stack-size-set! (-> obj main-thread) 512) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) cshape-reaction-default) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (set! (-> s5-0 penetrated-by) (penetrate + generic-attack + lunge + flop + punch + spin + roll + uppercut + bonk + tube + vehicle + flut-attack + board + mech-punch + dark-punch + dark-giant + ) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 6) 0))) + (set! (-> s5-0 total-prims) (the-as uint 7)) + (set! (-> s4-0 prim-core collide-as) (collide-spec enemy)) + (set! (-> s4-0 prim-core collide-with) (collide-spec backgnd)) + (set! (-> s4-0 prim-core action) (collide-action solid)) + (set-vector! (-> s4-0 local-sphere) 0.0 6144.0 0.0 17408.0) + (set! (-> s5-0 root-prim) s4-0) + ) + (let ((v1-15 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-15 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-15 prim-core collide-with) (collide-spec backgnd)) + (set! (-> v1-15 prim-core action) (collide-action solid)) + (set-vector! (-> v1-15 local-sphere) 0.0 4915.2 0.0 4915.2) + ) + (let ((v1-17 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-17 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-17 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-17 prim-core action) (collide-action semi-solid)) + (set! (-> v1-17 transform-index) 4) + (set-vector! (-> v1-17 local-sphere) 0.0 0.0 0.0 4915.2) + ) + (let ((v1-19 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-19 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-19 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-19 prim-core action) (collide-action semi-solid)) + (set! (-> v1-19 transform-index) 18) + (set-vector! (-> v1-19 local-sphere) 0.0 0.0 0.0 2252.8) + ) + (let ((v1-21 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-21 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-21 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-21 prim-core action) (collide-action semi-solid)) + (set! (-> v1-21 transform-index) 16) + (set-vector! (-> v1-21 local-sphere) 0.0 0.0 0.0 2048.0) + ) + (let ((v1-23 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-23 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-23 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-23 prim-core action) (collide-action semi-solid)) + (set! (-> v1-23 transform-index) 12) + (set-vector! (-> v1-23 local-sphere) 0.0 0.0 0.0 2048.0) + ) + (let ((v1-25 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-25 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-25 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-25 prim-core action) (collide-action semi-solid)) + (set! (-> v1-25 transform-index) 6) + (set-vector! (-> v1-25 local-sphere) 0.0 0.0 0.0 8192.0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-28 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-28 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-28 prim-core collide-with)) + ) + (set! (-> s5-0 max-iteration-count) (the-as uint 3)) + (set! (-> obj root-override2) s5-0) + ) + 0 + (none) + ) + +(defmethod grunt-method-185 sew-scare-grunt ((obj sew-scare-grunt)) + *sew-scare-grunt-nav-enemy-info* + ) + +;; WARN: Return type mismatch float vs none. +(defmethod enemy-method-115 sew-scare-grunt ((obj sew-scare-grunt)) + "@abstract" + (set! (-> obj anim) + (new 'static 'spool-anim :name "sew-scare-grunt" :anim-name "sew-scare-grunt" :parts 2 :command-list '()) + ) + (set! (-> obj grill-actor) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (let ((t9-1 (method-of-type grunt enemy-method-115))) + (t9-1 obj) + ) + (set! (-> obj root-override2 trans y) (+ -3276.8 (-> obj root-override2 trans y))) + (none) + ) diff --git a/goal_src/jak2/levels/sewer/sewer-scenes.gc b/goal_src/jak2/levels/sewer/sewer-scenes.gc index ee006090a3..075df6f7eb 100644 --- a/goal_src/jak2/levels/sewer/sewer-scenes.gc +++ b/goal_src/jak2/levels/sewer/sewer-scenes.gc @@ -7,3 +7,1367 @@ ;; DECOMP BEGINS +(defpartgroup group-sewer-explode0 + :id 151 + :duration (seconds 3) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 1458 :fade-after (meters 200) :falloff-to (meters 200) :period 9600 :length 25) + (sp-item 1459 :period 9600 :length 10 :offset 10) + (sp-item 1460 :fade-after (meters 120) :falloff-to (meters 120) :period 9600 :length 100 :offset 25) + (sp-item 1461 :fade-after (meters 60) :period 9600 :length 35 :offset 10) + (sp-item 1462 :period 9600 :length 50 :offset 15) + (sp-item 1463 :period 9600 :length 5) + (sp-item 1464 :period 9600 :length 50 :offset 15) + (sp-item 1465 :period 9600 :length 5) + ) + ) + +(defpart 1463 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -2.5)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 8192.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters 0.5)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-b -5.1) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 65) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 40960.0) + (sp-int spt-next-time 30) + (sp-launcher-by-id spt-next-launcher 1466) + ) + ) + +(defpart 1466 + :init-specs ((sp-flt spt-scalevel-x (meters -0.2857143)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -3.6571429) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -2.7428572) + ) + ) + +(defpart 1465 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 120)) + (sp-flt spt-rot-x 8192.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 24.0) + (sp-flt spt-scalevel-x (meters 0.13333334)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -4.266667) + (sp-flt spt-fade-b -4.266667) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 40960.0) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 1467) + ) + ) + +(defpart 1467 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.85333335) + (sp-flt spt-fade-g -1.7066667) + (sp-flt spt-fade-b -1.7066667) + (sp-flt spt-fade-a -0.64) + ) + ) + +(defpart 1461 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters -3.5) (meters 2) 1.0) + (sp-flt spt-scale-x (meters 2.5)) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-scale-y (meters 0.1) (meters 0.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 12.288) + (sp-rnd-flt spt-vel-y (meters 0.26666668) (meters 0.2) 1.0) + (sp-flt spt-fade-b -8.0) + (sp-rnd-flt spt-accel-y -13.653334 -6.826667 1.0) + (sp-rnd-flt spt-friction 0.9 0.08 1.0) + (sp-int-plain-rnd spt-timer 450 299 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 1468) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 10000.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +(defpart 1468 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -2.6133332) + (sp-flt spt-fade-b -1.7066667) + (sp-rnd-flt spt-fade-a -0.096 -0.096 1.0) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 1469) + ) + ) + +(defpart 1469 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0)) + ) + +(defpart 1464 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x34 :page #xc)) + (sp-rnd-flt spt-num 5.0 5.0 1.0) + (sp-flt spt-y (meters -2.5)) + (sp-rnd-flt spt-scale-x (meters 3) (meters 2) 1.0) + (sp-int spt-rot-x 4) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-rot-z) + :flags (sp-flag spflag7) + :random-rangef 65536.0 + :random-multf 1.0 + ) + (sp-rnd-flt spt-scale-y (meters 8) (meters 4) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.06666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.13333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.26666668) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 25) + (sp-launcher-by-id spt-next-launcher 1470) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-conerot-x) + :flags (sp-flag from-pointer) + :func '*sp-temp* + ) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 2) 1.0) + ) + ) + +(defpart 1470 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.55) + (sp-flt spt-fade-g -2.95) + (sp-flt spt-fade-b -3.3) + (sp-int-plain-rnd spt-next-time 30 9 1) + (sp-launcher-by-id spt-next-launcher 1471) + ) + ) + +(defpart 1471 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2944444) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.2) + (sp-rnd-flt spt-fade-a -0.225 -0.225 1.0) + ) + ) + +(defpart 1462 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-rnd-flt spt-num 16.0 10.0 1.0) + (sp-flt spt-y (meters -2.5)) + (sp-rnd-flt spt-scale-x (meters 3) (meters 2) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-rnd-flt spt-scale-y (meters 6.8) (meters 1.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.06666667) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.32) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc03300) + ) + (sp-int spt-next-time 25) + (sp-launcher-by-id spt-next-launcher 1472) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 8) 1.0) + ) + ) + +(defpart 1472 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 1473) + ) + ) + +(defpart 1473 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.44) + (sp-flt spt-fade-g -2.36) + (sp-flt spt-fade-b -2.64) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 1474) + ) + ) + +(defpart 1474 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.2) + (sp-rnd-flt spt-fade-a -0.06545454 -0.06545454 1.0) + (sp-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 1475) + ) + ) + +(defpart 1475 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0) (sp-flt spt-fade-a -0.1125)) + ) + +(defpart 1460 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #xc)) + (sp-rnd-flt spt-num 6.0 8.0 1.0) + (sp-flt spt-x (meters 0.25)) + (sp-flt spt-y (meters -2.5)) + (sp-rnd-flt spt-scale-x (meters 3) (meters 5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.4) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.18) + (sp-flt spt-fade-b -2.12) + (sp-rnd-flt spt-accel-y -1.3653333 -9.557333 1.0) + (sp-rnd-flt spt-friction 0.88 0.02 1.0) + (sp-int spt-timer 3000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 1476) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 3) (meters 5) 1.0) + ) + ) + +(defpart 1476 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.02) + (sp-flt spt-fade-b 0.23555556) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 1477) + ) + ) + +(defpart 1477 + :init-specs ((sp-flt spt-fade-r -0.5543478) + (sp-flt spt-fade-g -0.5543478) + (sp-flt spt-fade-b -0.5543478) + (sp-rnd-flt spt-fade-a -0.10666667 -0.10666667 1.0) + ) + ) + +(defpart 1458 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 4.0 8.0 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 0.6) 1.0) + (sp-flt spt-y (meters -2.5)) + (sp-rnd-flt spt-scale-x (meters 8.5) (meters 8) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 20.0 1.0) + (sp-rnd-flt spt-g 70.0 20.0 1.0) + (sp-rnd-flt spt-b 70.0 20.0 1.0) + (sp-rnd-flt spt-a 0.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.2) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.086666666) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 3.3) + (sp-flt spt-fade-g 3.12) + (sp-flt spt-fade-b 1.18) + (sp-flt spt-fade-a 1.76) + (sp-flt spt-friction 0.89) + (sp-int spt-timer 710) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 1478) + (sp-rnd-flt spt-conerot-x (degrees -1440.0) (degrees 2880.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +(defpart 1478 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -1.9666667) + (sp-flt spt-fade-b -2.2) + (sp-flt spt-fade-a -0.41666666) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 1479) + ) + ) + +(defpart 1479 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.38833332) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.028333334) + (sp-flt spt-fade-a -0.38833332) + ) + ) + +(defpart 1459 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-flt spt-num 9.0) + (sp-flt spt-y (meters -2.5)) + (sp-rnd-flt spt-scale-x (meters 4) (meters 8) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.13333334) (meters 0.4) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + ) + ) + +(defpartgroup group-sewer-explode1 + :id 346 + :duration (seconds 3) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 1458 :fade-after (meters 200) :falloff-to (meters 200) :period 9600 :length 25) + (sp-item 1459 :period 9600 :length 10 :offset 10) + (sp-item 1460 :fade-after (meters 120) :falloff-to (meters 120) :period 9600 :length 100 :offset 25) + (sp-item 1461 :fade-after (meters 60) :period 9600 :length 35 :offset 10) + (sp-item 1462 :period 9600 :length 50 :offset 15) + (sp-item 1463 :period 9600 :length 5) + (sp-item 1464 :period 9600 :length 50 :offset 15) + (sp-item 1465 :period 9600 :length 5) + ) + ) + +(defpartgroup group-sewer-explode2 + :id 347 + :duration (seconds 3) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 1458 :fade-after (meters 200) :falloff-to (meters 200) :period 9600 :length 20) + (sp-item 1459 :period 9600 :length 10 :offset 10) + (sp-item 1460 :fade-after (meters 120) :falloff-to (meters 120) :period 9600 :length 100 :offset 25) + (sp-item 1461 :fade-after (meters 60) :period 9600 :length 35 :offset 5) + (sp-item 1462 :period 9600 :length 50 :offset 10) + (sp-item 1463 :period 9600 :length 5) + (sp-item 1464 :period 9600 :length 40 :offset 15) + (sp-item 1465 :period 9600 :length 5) + (sp-item 1480 :period 9600 :length 800) + ) + ) + +(defpart 1480 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.25 0.2 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 16) 1.0) + (sp-flt spt-y (meters -4)) + (sp-rnd-flt spt-scale-x (meters 4) (meters 4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.016666668) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-fade-a 0.10666667 0.13333334 1.0) + (sp-rnd-flt spt-accel-y -0.68266666 -1.3653333 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int spt-next-time 300) + (sp-launcher-by-id spt-next-launcher 1481) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +(defpart 1481 + :init-specs ((sp-rnd-flt spt-fade-a -0.08 -0.08 1.0)) + ) + +(defpartgroup group-sewer-gun-laser-beam + :id 348 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 1482 :flags (bit6 bit7)) (sp-item 1483 :flags (bit6 bit7)) (sp-item 1484 :flags (is-3d bit6 bit7))) + ) + +(defpart 1483 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 32.0 8.0 1.0) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 48.0 16.0 1.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 1482 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 glow) + (sp-flt spt-userdata 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 1484 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x4c :page #xc)) + (sp-flt spt-num 3.0) + (sp-flt spt-z (meters 8)) + (sp-rnd-flt spt-scale-x (meters 0.025) (meters 0.005) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-scale-y (meters 20)) + (sp-flt spt-r 255.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 20.0 8.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 left-multiply-quat) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 + 10 + 1 + 0 + #xc04c00 + #xc04d00 + #xc04e00 + #xc04f00 + #xc05000 + #xc05100 + #xc05200 + #xc05300 + #xc05400 + #xc05500 + #xc05600 + #xc05700 + #xc05800 + #xc05900 + #xc05a00 + #xc05b00 + #xc05c00 + #xc05d00 + #xc05e00 + #xc05f00 + #xc06000 + #xc06100 + #xc06200 + #xc06300 + #xc06400 + #xc06500 + #xc06600 + #xc06700 + #xc06800 + #xc06900 + #xc06a00 + #xc06b00 + ) + ) + (sp-func spt-func 'sparticle-texture-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-sewer-key-pull-out + :id 349 + :linger-duration (seconds 1.5) + :bounds (static-bspherem 0 0 0 15) + :parts ((sp-item 1485) (sp-item 1486) (sp-item 1487)) + ) + +(defpart 1485 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 138.0) + (sp-rnd-flt spt-g 85.0 16.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.16) + (sp-flt spt-accel-y -1.3653333) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 1486 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-rnd-flt spt-g 96.0 16.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 16.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.02) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-flt spt-accel-y -1.3653333) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 1487 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #xc)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-x (meters -0.4) (meters 0.8) 1.0) + (sp-rnd-flt spt-y (meters -0.1) (meters 0.4) 1.0) + (sp-rnd-flt spt-z (meters -0.4) (meters 0.8) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.03) (meters 0.02) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 148.0) + (sp-rnd-flt spt-g 85.0 16.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.015) (meters 0.006666667) 1.0) + (sp-flt spt-fade-a -0.42666668) + (sp-rnd-flt spt-accel-y -5.4613333 2.7306666 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 50.000004) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.5)) + ) + ) + +(scene-method-16 + (new 'static 'scene + :name "sewer-drain-res" + :extra #f + :info #f + :mask-to-clear #x1282000 + :entity "scene-stage-30" + :art-group "scenecamera" + :anim "sewer-drain-res" + :parts 8 + :command-list '((0 (task-close! "sewer-board-resolution") (fadein (frame-time-30 10))) + (400 (part-tracker "group-sewer-key-pull-out" entity "sew-gold-key" joint "key" duration (frame-time 5))) + ) + :cut-list '(70 330 441 498 591) + :wait-ground-time (seconds 1) + :draw-target #f + :abort #t + :actor (new 'static 'boxed-array :type scene-actor + (new 'static 'scene-actor + :name "scenecamera" + :level #f + :art-group "skel-scenecamera" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :camera 4 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sidekick-highres" + :level 'sewer + :art-group "skel-sidekick-highres" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "jak-highres" + :level 'sewer + :art-group "skel-jak-highres" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sew-gold-key" + :level 'sewer + :art-group "skel-sew-gold-key" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + ) + :load-point-obj "sewer-start" + :end-point-obj #f + :borrow '() + :sfx-volume -1.0 + :ambient-volume -1.0 + :music-volume -1.0 + :blackout-end #t + :peaceful #t + :music-delay 1500.0 + :save #t + ) + ) + +(scene-method-16 + (new 'static 'scene + :name "sewer-blow-up-statue-res" + :extra #f + :info #f + :mask-to-clear #x1282000 + :entity "scene-stage-40" + :art-group "scenecamera" + :anim "sewer-blow-up-statue-res" + :parts 15 + :command-list '((0 + (kill "sewer-part-366") + (kill "sewer-part-367") + (kill "sewer-part-368") + (kill "sewer-part-369") + (fadein (seconds (new 'static 'bfloat :data 0.333))) + (send-event "jinx-sewer-1" 'hide #t) + (send-event "grim-sewer-1" 'hide #t) + (send-event "mog-sewer-1" 'hide #t) + ) + (200 + (send-event "jinx" 'segment 1024 770) + (send-event "mog" 'segment 32768 131074) + (send-event "grim" 'segment 16 770) + ) + (362 (send-event "jinx" 'segment 0 6208) (send-event "mog" 'segment 0 16384) (send-event "grim" 'segment 0 8)) + (365 (send-event "sew-mar-statue-5" 'hide)) + (375 + (part-tracker + "group-sewer-explode0" + entity + "particleman" + joint + "particleA" + track + #t + duration + (frame-range (new 'static 'bfloat :data 375.0) (new 'static 'bfloat :data 475.0)) + ) + ) + (377 (apply ,(lambda :behavior scene-player () (set-sewesc-explosion!)))) + (390 + (apply ,(lambda :behavior scene-player () (set-sewesc-explosion!))) + (part-tracker + "group-sewer-explode1" + entity + "particleman" + joint + "particleB" + track + #t + duration + (frame-range (new 'static 'bfloat :data 390.0) (new 'static 'bfloat :data 490.0)) + ) + ) + (395 + (apply ,(lambda :behavior scene-player () (set-sewesc-explosion!))) + (part-tracker + "group-sewer-explode2" + entity + "particleman" + joint + "particleC" + track + #t + duration + (frame-range (new 'static 'bfloat :data 395.0) (new 'static 'bfloat :data 495.0)) + ) + ) + (418 (apply ,(lambda :behavior scene-player () (set-sewesc-explosion!)))) + (2340 (fadeout (seconds (new 'static 'bfloat :data 0.333)))) + (10000 + (send-event "sew-mar-statue-5" 'trigger) + (task-close! "sewer-escort-resolution") + (talker-spawn "krew003") + ) + ) + :cut-list '(86 161 296 326 361 376 396 416 539 571 620 681 731 781) + :wait-ground-time (seconds 1) + :draw-target #f + :abort #t + :actor (new 'static 'boxed-array :type scene-actor + (new 'static 'scene-actor + :name "scenecamera" + :level #f + :art-group "skel-scenecamera" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :camera 4 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "particleman" + :level 'sewesc + :art-group "skel-particleman" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sidekick-highres" + :level 'sewesc + :art-group "skel-sidekick-highres" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "jak-highres" + :level 'sewesc + :art-group "skel-jak-highres" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sew-mar-statue-explode-a" + :level 'sewesc + :art-group "skel-sew-mar-statue-explode-a" + :prefix "a-" + :draw-frames '((min max)) + :scissor-frames '((369 376) (541 542) (620 692) (731 781)) + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sew-mar-statue-explode-b" + :level 'sewesc + :art-group "skel-sew-mar-statue-explode-b" + :prefix "b-" + :draw-frames '((min max)) + :scissor-frames '((369 376) (541 542) (620 692) (731 781)) + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "heart-of-mar" + :level 'sewesc + :art-group "skel-heart-of-mar" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "jinx" + :level 'sewesc + :art-group "skel-jinx" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x1ae2 + :no-draw-seg #x3e51c + ) + (new 'static 'scene-actor + :name "mog" + :level 'sewesc + :art-group "skel-jinx" + :prefix "mog-" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x26002 + :no-draw-seg #x19ffc + ) + (new 'static 'scene-actor + :name "grim" + :level 'sewesc + :art-group "skel-jinx" + :prefix "grim-" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x28e + :no-draw-seg #x3fd70 + ) + ) + :load-point-obj "sewesc-start" + :end-point-obj (new 'static 'continue-point + :name "sewesc-start" + :level #f + :flags (continue-flags cf2) + :trans (new 'static 'vector :x 5541148.0 :y -363968.9 :z 2435194.5 :w 1.0) + :quat (new 'static 'vector :y 0.0482 :w 0.9988) + :camera-trans (new 'static 'vector :x 5518817.0 :y -344878.7 :z 2399633.5 :w 1.0) + :camera-rot (new 'static 'inline-array vector3s 3 + (new 'static 'vector3s :data (new 'static 'array float 3 0.8481 0.0 -0.5297)) + (new 'static 'vector3s :data (new 'static 'array float 3 0.0787 0.9888 0.126)) + (new 'static 'vector3s :data (new 'static 'array float 3 0.5238 -0.1486 0.8387)) + ) + :on-goto #f + :vis-nick 'sewesc + :want (new 'static 'inline-array level-buffer-state 6 + (new 'static 'level-buffer-state :name 'sewescb :display? 'display :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name 'sewesc :display? 'display :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + ) + :want-sound (new 'static 'array symbol 3 'sewer4 'sewer5 'sewer6) + ) + :borrow '() + :sfx-volume -1.0 + :ambient-volume -1.0 + :music-volume -1.0 + :blackout-end #t + :peaceful #t + :music-delay 1500.0 + :save #t + :scene-task #xb0 + ) + ) + +(deftype fake-jinx-bomb-info (basic) + ((handle handle :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + + +(define *fake-jinx-bomb-info* (new 'static 'fake-jinx-bomb-info)) + +(set! (-> *fake-jinx-bomb-info* handle) (the-as handle #f)) + +(scene-method-16 + (new 'static 'scene + :name "sewer-hosehead" + :extra #f + :info #f + :mask-to-clear #x2000 + :entity "scene-stage-66" + :art-group "scenecamera" + :anim "sewer-hosehead" + :parts 4 + :command-list '((0 + (fadein (seconds (new 'static 'bfloat :data 0.333))) + (send-event "jinx-sewer-1" 'hide #t) + (send-event "grim-sewer-1" 'hide #t) + (send-event "mog-sewer-1" 'hide #t) + (send-event "jinx" 'segment 0 1026) + (send-event "mog" 'segment 0 32770) + (send-event "grim" 'segment 0 18) + (kill "sew-wall-3") + (send-event "jinx-sewer-1" 'request 'no-bomb) + (apply + ,(lambda :behavior scene-player + () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'quaternion)) + ) + (set-vector! gp-0 5705928.5 -364089.75 2060228.6 1.0) + (quaternion-identity! s5-0) + (let ((s4-0 (get-process *default-dead-pool* jinx-bomb #x4000))) + (set! (-> *fake-jinx-bomb-info* handle) + (ppointer->handle + (when s4-0 + (let ((t9-2 (method-of-type jinx-bomb activate))) + (t9-2 + (the-as jinx-bomb s4-0) + (ppointer->process (-> *setting-control* user-current movie)) + (symbol->string (-> jinx-bomb symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s3-0 run-function-in-process) + (s2-0 s4-0) + (s1-0 jinx-bomb-init-by-other) + ) + (level-get *level* 'sewesc) + 0 + ((the-as (function object object object object none) s3-0) s2-0 s1-0 gp-0 s5-0) + ) + (-> s4-0 ppointer) + ) + ) + ) + ) + ) + (none) + ) + ) + ) + (13 + (apply + ,(lambda :behavior scene-player + () + (send-event (handle->process (-> *fake-jinx-bomb-info* handle)) 'trigger) + (none) + ) + ) + ) + (128 (apply ,(lambda :behavior scene-player () (spawn-hosehead-fakes) (none)))) + (184 + (apply + ,(lambda :behavior scene-player + () + (hosehead-fake-trigger 8) + (hosehead-fake-trigger 9) + (hosehead-fake-trigger 12) + (hosehead-fake-trigger 19) + (hosehead-fake-trigger 20) + (none) + ) + ) + ) + (211 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 7) (none)))) + (237 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 10) (hosehead-fake-trigger 22) (none)))) + (249 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 3) (none)))) + (256 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 11) (none)))) + (257 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 2) (none)))) + (260 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 25) (none)))) + (262 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 15) (none)))) + (265 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 29) (none)))) + (268 + (send-event "hal-sewer-1" 'hosehead-fake 14) + (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 14) (none))) + ) + (275 + (send-event "hal-sewer-1" 'hosehead-fake 13) + (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 13) (none))) + ) + (293 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 4) (hosehead-fake-trigger 23) (none)))) + (299 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 24) (none)))) + (354 (send-event *target* 'change-mode 'gun #f (unbox 1))) + (368 + (part-tracker "group-sewer-gun-laser-beam" entity "gun" joint "laser" track #t duration (frame-range 368 400)) + ) + (10000 + (send-event "jinx-sewer-1" 'hide #f) + (send-event "grim-sewer-1" 'hide #f) + (send-event "mog-sewer-1" 'hide #f) + (task-close! "sewer-escort-explode-wall2") + ) + ) + :cut-list '(55 181 350) + :wait-ground-time (seconds 1) + :draw-target #f + :abort #t + :actor (new 'static 'boxed-array :type scene-actor + (new 'static 'scene-actor + :name "scenecamera" + :level #f + :art-group "skel-scenecamera" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :camera 4 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sidekick-highres" + :level 'sewesc + :art-group "skel-sidekick-highres" + :prefix "" + :draw-frames '((min 181) (350 max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "jak-highres" + :level 'sewesc + :art-group "skel-jak-highres" + :prefix "" + :draw-frames '((min 181) (350 max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sew-wall" + :level 'sewesc + :art-group "skel-sew-wall" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "hosehead" + :level 'sewesc + :art-group "skel-hosehead" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "gun" + :level #f + :art-group "skel-gun" + :prefix "" + :draw-frames '((350 max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :no-draw-seg #x4 + ) + (new 'static 'scene-actor + :name "jinx" + :level 'sewesc + :art-group "skel-jinx" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x1ae2 + :no-draw-seg #x3e51c + ) + (new 'static 'scene-actor + :name "mog" + :level 'sewesc + :art-group "skel-jinx" + :prefix "mog-" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x26002 + :no-draw-seg #x19ffc + ) + (new 'static 'scene-actor + :name "grim" + :level 'sewesc + :art-group "skel-jinx" + :prefix "grim-" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x28e + :no-draw-seg #x3fd70 + ) + ) + :load-point-obj "sewesc-start" + :end-point-obj (new 'static 'continue-point + :name "sewesc-start" + :level #f + :flags (continue-flags cf2) + :trans (new 'static 'vector :x 5608474.5 :y -363960.3 :z 1988017.4 :w 1.0) + :quat (new 'static 'vector :y -0.6775 :w -0.7354) + :camera-trans (new 'static 'vector :x 5562796.5 :y -344327.78 :z 1985962.4 :w 1.0) + :camera-rot (new 'static 'inline-array vector3s 3 + (new 'static 'vector3s :data (new 'static 'array float 3 0.0457 0.0 -0.9989)) + (new 'static 'vector3s :data (new 'static 'array float 3 0.1258 0.992 0.0057)) + (new 'static 'vector3s :data (new 'static 'array float 3 0.9909 -0.126 0.0454)) + ) + :on-goto #f + :vis-nick 'sewesc + :want (new 'static 'inline-array level-buffer-state 6 + (new 'static 'level-buffer-state :name 'sewescb :display? 'display :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name 'sewesc :display? 'display :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + ) + :want-sound (new 'static 'array symbol 3 'sewer4 'sewer5 'sewer6) + ) + :borrow '() + :sfx-volume -1.0 + :ambient-volume -1.0 + :music-volume -1.0 + :blackout-end #t + :peaceful #t + :music-delay 1500.0 + :save #t + :scene-task #xaf + ) + ) + +(defmethod draw hud-gunturret ((obj hud-gunturret)) + (set-hud-piece-position! + (the-as hud-sprite (-> obj sprites)) + (the int (+ 457.0 (* 130.0 (-> obj offset)))) + 205 + ) + (format (clear (-> obj strings 0 text)) "~D" (-> obj values 0 current)) + (set-as-offset-from! (the-as hud-sprite (-> obj strings 0 pos)) (the-as vector4w (-> obj sprites)) -20 24) + ((method-of-type hud draw) obj) + 0 + (none) + ) + +(defmethod update-values hud-gunturret ((obj hud-gunturret)) + (set! (-> obj values 0 target) (the int (-> *game-info* counter))) + ((method-of-type hud update-values) obj) + 0 + (none) + ) + +(defmethod init-callback hud-gunturret ((obj hud-gunturret)) + (set! (-> obj level) (level-get *level* 'sewerb)) + (set! (-> obj gui-id) + (add-process *gui-control* obj (gui-channel hud-middle-right) (gui-action hidden) (-> obj name) 81920.0 0) + ) + (logior! (-> obj flags) (hud-flags show)) + (set! (-> obj sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :page #xd37))) + (set! (-> obj sprites 0 flags) (the-as uint 4)) + (set! (-> obj sprites 0 scale-x) 0.7) + (set! (-> obj sprites 0 scale-y) 0.7) + (alloc-string-if-needed obj 0) + (set! (-> obj strings 0 scale) 0.6) + (set! (-> obj strings 0 flags) (font-flags kerning middle large)) + 0 + (none) + ) + +(set-subtask-hook! + *game-info* + 41 + 0 + (lambda :behavior task-manager + () + (while (!= (level-status *level* 'sewer) 'active) + (suspend) + ) + (set! (-> *game-info* controller 0) (process->handle self)) + (let ((a0-6 (entity-by-type sew-gunturret))) + (set! (-> self actor-group 0) (res-lump-struct a0-6 'actor-groups (pointer entity-actor))) + ) + (when (-> self actor-group 0) + (set! (-> self data-int32 0) (the-as int (-> self actor-group 0 0))) + (set! (-> self data-int32 1) (the-as int (-> self actor-group 0 0))) + ) + (when (-> self actor-group 0) + (dotimes (gp-1 (the-as int (-> self actor-group 0 0))) + (let ((t0-1 (-> (&+ (-> self actor-group 0) (* gp-1 8)) 3))) + (if t0-1 + (add-icon! *minimap* self (the-as uint 16) (the-as int #f) (the-as vector t0-1) 0) + ) + ) + ) + #f + ) + ) + ) + +(set-subtask-hook! + *game-info* + 41 + 3 + (lambda :behavior task-manager + () + (local-vars (sv-96 int) (sv-100 float) (sv-104 vector)) + (set! (-> self start-time) (-> self clock frame-counter)) + (set! (-> self hud-timer) (ppointer->handle (process-spawn hud-gunturret :init hud-init-by-other :to self))) + (while (> (-> self data-int32 0) 0) + (when (!= (level-status *level* 'sewer) 'active) + (send-event (handle->process (-> self hud-timer)) 'hide-and-die) + (while (-> self child) + (suspend) + ) + (deactivate self) + ) + (set! sv-96 (-> self data-int32 1)) + (set! sv-100 4095996000.0) + (set! sv-104 (target-pos 0)) + (when (-> self actor-group 0) + (dotimes (gp-2 (the-as int (-> self actor-group 0 0))) + (let ((s5-0 (-> (&+ (-> self actor-group 0) (* gp-2 8)) 3))) + (let ((f0-1 (vector-vector-distance sv-104 (-> s5-0 extra trans)))) + (if (< f0-1 sv-100) + (set! sv-100 f0-1) + ) + ) + (if (and s5-0 (logtest? (-> s5-0 extra perm status) (entity-perm-status dead))) + (set! sv-96 (+ sv-96 -1)) + ) + ) + ) + ) + (when (< sv-96 (-> self data-int32 0)) + (case sv-96 + ((3) + (talker-spawn-func (-> *talker-speech* 462) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((2) + (talker-spawn-func (-> *talker-speech* 463) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((1) + (talker-spawn-func (-> *talker-speech* 464) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + (let ((v1-51 sv-96)) + (set! (-> self data-int32 0) v1-51) + (set! (-> *game-info* counter) (the float v1-51)) + ) + (when (and (= (-> self data-int32 1) sv-96) + (and (< sv-100 122880.0) (>= (- (-> self clock frame-counter) (-> self beep-time)) (seconds 40))) + ) + (talker-spawn-func (-> *talker-speech* 53) *entity-pool* (target-pos 0) (the-as region #f)) + (set! (-> self beep-time) (-> self clock frame-counter)) + ) + (suspend) + ) + (go-virtual complete) + ) + ) diff --git a/test/decompiler/reference/jak2/levels/common/entities/sew-gunturret_REF.gc b/test/decompiler/reference/jak2/levels/common/entities/sew-gunturret_REF.gc new file mode 100644 index 0000000000..e6641aa9f1 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/common/entities/sew-gunturret_REF.gc @@ -0,0 +1,1339 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defpartgroup group-sew-gunturret-hit + :id 1126 + :duration (seconds 0.5) + :linger-duration (seconds 1) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 15) + :parts ((sp-item 4867 :period 1500 :length 25 :offset -10) + (sp-item 4868 :fade-after (meters 60) :period 1500 :length 30) + (sp-item 4869 :fade-after (meters 60) :falloff-to (meters 60) :period 1500 :length 100) + (sp-item 4870 :fade-after (meters 200) :falloff-to (meters 200) :period 1500 :length 50) + (sp-item 4871 :period 1500 :length 5 :offset -10) + (sp-item 4872 :fade-after (meters 150) :falloff-to (meters 150) :period 1500 :length 50) + ) + ) + +;; failed to figure out what this is: +(defpart 4870 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x34 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-rot-z) + :flags (sp-flag spflag7) + :random-rangef 65536.0 + :random-multf 1.0 + ) + (sp-rnd-flt spt-scale-y (meters 0.8) (meters 0.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 4873) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-conerot-x) + :flags (sp-flag from-pointer) + :func '*sp-temp* + ) + ) + ) + +;; failed to figure out what this is: +(defpart 4872 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a 0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 4873) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4873 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 4874) + ) + ) + +;; failed to figure out what this is: +(defpart 4874 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.44) + (sp-flt spt-fade-g -2.36) + (sp-flt spt-fade-b -2.64) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 4875) + ) + ) + +;; failed to figure out what this is: +(defpart 4875 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2944444) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.094444446) + (sp-rnd-flt spt-fade-a -0.06545454 -0.06545454 1.0) + (sp-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 4876) + ) + ) + +;; failed to figure out what this is: +(defpart 4876 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0)) + ) + +;; failed to figure out what this is: +(defpart 4871 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x47 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 5)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters 0.5)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-b -5.1) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 100) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 50) + (sp-launcher-by-id spt-next-launcher 4877) + ) + ) + +;; failed to figure out what this is: +(defpart 4877 + :init-specs ((sp-flt spt-scalevel-x (meters -0.2)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -2.56) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.92) + ) + ) + +;; failed to figure out what this is: +(defpart 4869 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #xc)) + (sp-rnd-flt spt-num 5.0 3.0 1.0) + (sp-flt spt-x (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.083333336) (meters 0.083333336) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.0016666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.18) + (sp-flt spt-fade-b -2.12) + (sp-rnd-flt spt-accel-y -0.68266666 -1.3653333 1.0) + (sp-flt spt-friction 0.87) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 4878) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4878 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.02) + (sp-flt spt-fade-b 0.23555556) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 4879) + ) + ) + +;; failed to figure out what this is: +(defpart 4879 + :init-specs ((sp-flt spt-fade-r -0.5543478) (sp-flt spt-fade-g -0.5543478) (sp-flt spt-fade-a -0.13913043)) + ) + +;; failed to figure out what this is: +(defpart 4867 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 3.0 1.0 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 1.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 20.0 1.0) + (sp-rnd-flt spt-g 70.0 20.0 1.0) + (sp-rnd-flt spt-b 70.0 20.0 1.0) + (sp-rnd-flt spt-a 0.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.1) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.016666668) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 3.3) + (sp-flt spt-fade-g 3.12) + (sp-flt spt-fade-b 1.18) + (sp-flt spt-fade-a 1.76) + (sp-flt spt-friction 0.88) + (sp-int spt-timer 710) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 4880) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4880 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -1.9666667) + (sp-flt spt-fade-b -2.2) + (sp-flt spt-fade-a -0.41666666) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 4881) + ) + ) + +;; failed to figure out what this is: +(defpart 4881 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.38833332) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.028333334) + (sp-flt spt-fade-a -0.38833332) + ) + ) + +;; failed to figure out what this is: +(defpart 4868 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-rnd-flt spt-num 4.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.25) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.13333334) (meters 0.02) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 80) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-sew-gunturret-smoke + :id 1127 + :duration (seconds 0.017) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4882 :flags (bit7))) + ) + +;; failed to figure out what this is: +(defpart 4882 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 64.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 16.0) + (sp-rnd-flt spt-vel-z (meters 0.006666667) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0033333334) (meters 0.004) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-fade-a -0.026666667 -0.10666667 1.0) + (sp-rnd-flt spt-accel-y 0.4096 0.13653333 1.0) + (sp-flt spt-friction 0.98) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-sew-gunturret-casing + :id 1128 + :duration (seconds 0.017) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4883 :fade-after (meters 80) :falloff-to (meters 100) :flags (bit7)) + (sp-item 4884 :fade-after (meters 80) :falloff-to (meters 100) :flags (bit7)) + ) + ) + +;; failed to figure out what this is: +(defpart 4884 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 3.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 32.0) + (sp-rnd-flt spt-vel-z (meters 0.006666667) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0033333334) (meters 0.004) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -2.56) + (sp-flt spt-fade-g -2.56) + (sp-flt spt-fade-b 2.56) + (sp-flt spt-fade-a -0.32) + (sp-rnd-flt spt-accel-y 0.4096 0.13653333 1.0) + (sp-flt spt-friction 0.98) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-int spt-next-time 50) + (sp-launcher-by-id spt-next-launcher 4885) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4885 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-rnd-flt spt-fade-a -0.026666667 -0.10666667 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4883 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.4)) + (sp-flt spt-scale-x (meters 2.5)) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.02) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 6.144) + (sp-rnd-flt spt-vel-z (meters 0.033333335) (meters 0.06666667) 1.0) + (sp-flt spt-fade-b -8.0) + (sp-rnd-flt spt-accel-y -6.826667 -6.826667 1.0) + (sp-rnd-flt spt-friction 0.9 0.04 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 4886) + (sp-rnd-flt spt-conerot-x (degrees -20.0) (degrees 40.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4886 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -2.45) + (sp-rnd-flt spt-fade-a -0.384 -0.96 1.0) + ) + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-gunturret sew-gunturret sew-gunturret-lod0-jg sew-gunturret-idle-ja + ((sew-gunturret-lod0-mg (meters 999999))) + :bounds (static-spherem 0 0 0 5) + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-gunturret-explode sew-gunturret sew-gunturret-explode-lod0-jg sew-gunturret-explode-idle-ja + ((sew-gunturret-explode-lod0-mg (meters 999999))) + :bounds (static-spherem 0 0 0 15) + ) + +;; definition for symbol *sew-gunturret-exploder-params*, type joint-exploder-static-params +(define *sew-gunturret-exploder-params* + (new 'static 'joint-exploder-static-params + :joints (new 'static 'boxed-array :type joint-exploder-static-joint-params + (new 'static 'joint-exploder-static-joint-params :joint-index 4 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 5 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 6 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 7 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 8 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 9 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 10 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 11 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 12 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 13 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 14 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 15 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 16 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 17 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 18 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 19 :parent-joint-index -1) + (new 'static 'joint-exploder-static-joint-params :joint-index 20 :parent-joint-index -1) + ) + :collide-spec #x1 + ) + ) + +;; definition of type gun-turret-params +(deftype gun-turret-params (structure) + ((normal-sg skeleton-group :offset-assert 0) + (explode-sg skeleton-group :offset-assert 4) + (enemy-info enemy-info :offset-assert 8) + (idle-anim int32 :offset-assert 12) + (shoot-anim int32 :offset-assert 16) + (track-joint int32 :offset-assert 20) + (barrel-joint int32 :offset-assert 24) + (gun-joint int32 :offset-assert 28) + (hole-joints int32 8 :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x40 + :flag-assert #x900000040 + ) + +;; definition for method 3 of type gun-turret-params +(defmethod inspect gun-turret-params ((obj gun-turret-params)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'gun-turret-params) + (format #t "~1Tnormal-sg: ~A~%" (-> obj normal-sg)) + (format #t "~1Texplode-sg: ~A~%" (-> obj explode-sg)) + (format #t "~1Tenemy-info: ~A~%" (-> obj enemy-info)) + (format #t "~1Tidle-anim: ~D~%" (-> obj idle-anim)) + (format #t "~1Tshoot-anim: ~D~%" (-> obj shoot-anim)) + (format #t "~1Ttrack-joint: ~D~%" (-> obj track-joint)) + (format #t "~1Tbarrel-joint: ~D~%" (-> obj barrel-joint)) + (format #t "~1Tgun-joint: ~D~%" (-> obj gun-joint)) + (format #t "~1Thole-joints[8] @ #x~X~%" (-> obj hole-joints)) + (label cfg-4) + obj + ) + +;; definition of type sew-gunturret +(deftype sew-gunturret (enemy) + ((gun-tilt-jm joint-mod :offset-assert 532) + (params gun-turret-params :offset-assert 536) + (aim-pos vector :inline :offset-assert 544) + (gun-twist float :offset-assert 560) + (gun-tilt float :offset-assert 564) + (desired-twist float :offset-assert 568) + (desired-tilt float :offset-assert 572) + (los-clear basic :offset-assert 576) + (smoke-part sparticle-launch-control :offset-assert 580) + (casing-part sparticle-launch-control :offset-assert 584) + (flash-state basic :offset-assert 588) + (can-shoot symbol :offset-assert 592) + (last-hit-time time-frame :offset-assert 600) + (init-mat matrix :inline :offset-assert 608) + (activate-distance float :offset-assert 672) + ) + :heap-base #x230 + :method-count-assert 142 + :size-assert #x2a4 + :flag-assert #x8e023002a4 + (:methods + (sew-gunturret-method-137 (_type_ symbol) none 137) + (sew-gunturret-method-138 (_type_) none 138) + (sew-gunturret-method-139 (_type_) none 139) + (sew-gunturret-method-140 (_type_ symbol) none 140) + (sew-gunturret-method-141 (_type_) none 141) + ) + ) + +;; definition for method 3 of type sew-gunturret +(defmethod inspect sew-gunturret ((obj sew-gunturret)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type enemy inspect))) + (t9-0 obj) + ) + (format #t "~2Tgun-tilt-jm: ~A~%" (-> obj gun-tilt-jm)) + (format #t "~2Tparams: #~%" (-> obj params)) + (format #t "~2Taim-pos: #~%" (-> obj aim-pos)) + (format #t "~2Tgun-twist: ~f~%" (-> obj gun-twist)) + (format #t "~2Tgun-tilt: ~f~%" (-> obj gun-tilt)) + (format #t "~2Tdesired-twist: ~f~%" (-> obj desired-twist)) + (format #t "~2Tdesired-tilt: ~f~%" (-> obj desired-tilt)) + (format #t "~2Tlos-clear: ~A~%" (-> obj los-clear)) + (format #t "~2Tsmoke-part: ~A~%" (-> obj smoke-part)) + (format #t "~2Tcasing-part: ~A~%" (-> obj casing-part)) + (format #t "~2Tflash-state: ~A~%" (-> obj flash-state)) + (format #t "~2Tcan-shoot: ~A~%" (-> obj can-shoot)) + (format #t "~2Tlast-hit-time: ~D~%" (-> obj last-hit-time)) + (format #t "~2Tinit-mat: #~%" (-> obj init-mat)) + (format #t "~2Tactivate-distance: ~f~%" (-> obj activate-distance)) + (label cfg-4) + obj + ) + +;; definition for symbol *sew-gunturret-enemy-info*, type enemy-info +(define *sew-gunturret-enemy-info* (new 'static 'enemy-info + :use-die-falling #f + :use-victory #f + :use-jump-blocked #f + :debug-draw-neck #f + :jump-debug-draw #f + :move-to-ground #f + :hover-if-no-ground #f + :idle-anim-script (new 'static 'array uint32 4 #x1010201 #x0 #x0 #x0) + :idle-anim 2 + :notice-anim 2 + :hostile-anim 2 + :hit-anim 2 + :knocked-anim -1 + :knocked-land-anim -1 + :die-anim 2 + :die-falling-anim -1 + :victory-anim -1 + :jump-wind-up-anim -1 + :jump-in-air-anim -1 + :jump-land-anim -1 + :neck-joint -1 + :notice-distance (meters 150) + :notice-distance-delta (meters 10) + :proximity-notice-distance (meters 150) + :default-hit-points 1 + :gnd-collide-with (collide-spec backgnd) + :overlaps-others-collide-with-filter (collide-spec jak bot player-list) + :movement-gravity (meters -100) + :friction 0.8 + :attack-shove-back (meters 3) + :attack-shove-up (meters 2) + :attack-mode 'generic + :attack-damage 2 + :jump-height-min (meters 3) + :jump-height-factor 0.5 + :knocked-seek-ry-clamp 2730.6667 + :knocked-soft-vxz-lo 72089.6 + :knocked-soft-vxz-hi 108134.4 + :knocked-soft-vy-lo 81920.0 + :knocked-soft-vy-hi 122880.0 + :knocked-medium-vxz-lo 147456.0 + :knocked-medium-vxz-hi 196608.0 + :knocked-medium-vy-lo 135168.0 + :knocked-medium-vy-hi 151552.0 + :knocked-hard-vxz-lo 78643.2 + :knocked-hard-vxz-hi 117964.8 + :knocked-hard-vy-lo 183500.8 + :knocked-hard-vy-hi 209715.2 + :knocked-huge-vxz-lo 164659.2 + :knocked-huge-vxz-hi 249036.8 + :knocked-huge-vy-lo 183500.8 + :knocked-huge-vy-hi 217907.2 + :knocked-yellow-vxz-lo 40960.0 + :knocked-yellow-vxz-hi 49152.0 + :knocked-yellow-vy-lo 57344.0 + :knocked-yellow-vy-hi 81920.0 + :knocked-red-vxz-lo 24576.0 + :knocked-red-vxz-hi 196608.0 + :knocked-red-vy-lo 94208.0 + :knocked-red-vy-hi 151552.0 + :knocked-blue-vxz-lo 40960.0 + :knocked-blue-vxz-hi 49152.0 + :knocked-blue-vy-lo 24576.0 + :knocked-blue-vy-hi 81920.0 + :shadow-size (meters 1) + :shadow-max-y (meters 1) + :shadow-min-y (meters -1) + :shadow-locus-dist (meters 150) + :gem-joint -1 + :gem-offset (new 'static 'sphere :r 163840.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *sew-gunturret-enemy-info* fact-defaults) *fact-info-enemy-defaults*) + +;; definition for method 137 of type sew-gunturret +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod sew-gunturret-method-137 sew-gunturret ((obj sew-gunturret) (arg0 symbol)) + (cond + ((and arg0 (-> obj los-clear)) + (let ((a0-2 (handle->process (-> obj focus handle)))) + (if a0-2 + (set! (-> obj aim-pos quad) (-> (get-trans (the-as process-focusable a0-2) 3) quad)) + ) + ) + ) + (else + (sew-gunturret-method-139 obj) + ) + ) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s5-2 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data (-> obj params track-joint)))) + ) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (vector-! s4-0 (-> obj aim-pos) (-> obj root-override2 trans)) + (vector-flatten! s4-0 s4-0 (-> obj init-mat vector 1)) + (vector-normalize! s4-0 1.0) + (set! (-> obj desired-twist) (asin (vector-dot (the-as vector (-> obj init-mat)) s4-0))) + (set! (-> obj desired-twist) (fmin 5461.3335 (fmax -5461.3335 (-> obj desired-twist)))) + (cond + ((< 0.0 (vector-dot (-> obj init-mat vector 2) s4-0)) + ) + ((< (-> obj desired-twist) 0.0) + (set! (-> obj desired-twist) -5461.3335) + ) + (else + (set! (-> obj desired-twist) 5461.3335) + ) + ) + (cond + ((and (!= (-> obj activate-distance) 0.0) (< (fabs (-> obj desired-twist)) 5461.3335)) + (vector-normalize-copy! s3-0 (-> obj node-list data (-> obj params track-joint) bone transform vector 1) 1.0) + (vector-! s4-0 (-> obj aim-pos) s5-2) + (vector-normalize! s4-0 1.0) + (set! (-> obj desired-tilt) (- (asin (vector-dot s3-0 s4-0)))) + (set! (-> obj desired-tilt) (fmin 5461.3335 (fmax 0.0 (-> obj desired-tilt)))) + ) + (else + (set! (-> obj desired-tilt) 0.0) + ) + ) + ) + (vector-normalize-copy! + (-> obj aim-pos) + (-> obj node-list data (-> obj params barrel-joint) bone transform vector 2) + (vector-vector-distance s5-2 (-> obj aim-pos)) + ) + ) + (vector+! + (-> obj aim-pos) + (-> obj aim-pos) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data (-> obj params gun-joint))) + ) + (let ((s5-4 (new 'stack-no-clear 'matrix))) + (+! (-> obj gun-twist) (fmax -364.0889 (fmin 364.0889 (* 0.3 (- (-> obj desired-twist) (-> obj gun-twist)))))) + (matrix-rotate-y! s5-4 (-> obj gun-twist)) + (matrix*! s5-4 s5-4 (-> obj init-mat)) + (matrix->quaternion (-> obj root-override2 quat) s5-4) + ) + (+! (-> obj gun-tilt) (fmax -364.0889 (fmin 364.0889 (* 0.3 (- (-> obj desired-tilt) (-> obj gun-tilt)))))) + (quaternion-axis-angle! (-> obj gun-tilt-jm quat) 1.0 0.0 0.0 (-> obj gun-tilt)) + 0 + (none) + ) + +;; definition for method 138 of type sew-gunturret +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod sew-gunturret-method-138 sew-gunturret ((obj sew-gunturret)) + (let ((a0-2 (handle->process (-> obj focus handle)))) + (if a0-2 + (set! (-> obj aim-pos quad) (-> (get-trans (the-as process-focusable a0-2) 3) quad)) + ) + ) + (let* ((s4-0 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data (-> obj params gun-joint)))) + (s5-3 (vector-! (new 'stack-no-clear 'vector) (-> obj aim-pos) s4-0)) + ) + (when (< (vector-dot (vector-normalize-copy! (new 'stack-no-clear 'vector) s5-3 1.0) (-> obj init-mat vector 2)) + (cos 364.0889) + ) + (let ((a1-5 (new 'stack-no-clear 'collide-query))) + (set! (-> a1-5 start-pos quad) (-> s4-0 quad)) + (set! (-> a1-5 move-dist quad) (-> s5-3 quad)) + (let ((v1-17 a1-5)) + (set! (-> v1-17 radius) 409.6) + (set! (-> v1-17 collide-with) + (collide-spec backgnd crate obstacle hit-by-player-list hit-by-others-list pusher) + ) + (set! (-> v1-17 ignore-process0) obj) + (set! (-> v1-17 ignore-process1) #f) + (set! (-> v1-17 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1)) + (set! (-> v1-17 action-mask) (collide-action solid)) + ) + (if (>= (fill-and-probe-using-line-sphere *collide-cache* a1-5) 0.0) + (set! (-> obj los-clear) #f) + (set! (-> obj los-clear) (the-as basic #t)) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 139 of type sew-gunturret +;; WARN: Return type mismatch int vs none. +(defmethod sew-gunturret-method-139 sew-gunturret ((obj sew-gunturret)) + (vector+float*! (-> obj aim-pos) (-> obj root-override2 trans) (-> obj init-mat vector 2) 163840.0) + 0 + (none) + ) + +;; definition for method 140 of type sew-gunturret +;; INFO: Used lq/sq +(defmethod sew-gunturret-method-140 sew-gunturret ((obj sew-gunturret) (arg0 symbol)) + (let ((v1-4 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data (-> obj params gun-joint)))) + (s4-0 (new 'stack-no-clear 'projectile-init-by-other-params)) + ) + (let* ((s2-1 (vector-! (new 'stack-no-clear 'vector) (-> obj aim-pos) v1-4)) + (f30-0 (/ 2013265900.0 (vector-length s2-1))) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s4-0 ent) (-> obj entity)) + (set! (-> s4-0 charge) 1.0) + (set! (-> s4-0 options) (projectile-options)) + (set! (-> s4-0 pos quad) (-> v1-4 quad)) + (set! (-> s4-0 notify-handle) (process->handle obj)) + (set! (-> s4-0 owner-handle) (the-as handle #f)) + (set! (-> s4-0 ignore-handle) (process->handle obj)) + (let* ((v1-12 *game-info*) + (a0-18 (+ (-> v1-12 attack-id) 1)) + ) + (set! (-> v1-12 attack-id) a0-18) + (set! (-> s4-0 attack-id) a0-18) + ) + (set! (-> s4-0 timeout) (new 'static 'handle :process #x4b0 :u64 #x4b0)) + (vector-normalize-copy! (-> s4-0 vel) s2-1 491520.0) + (let ((f30-1 (fmin 16384.0 f30-0))) + (set-vector! s3-0 (-> s2-1 z) (-> s2-1 y) (- (-> s2-1 x)) 1.0) + (vector-normalize! s3-0 (rand-vu-float-range (- f30-1) f30-1)) + (vector+! (-> s4-0 vel) (-> s4-0 vel) s3-0) + (vector-cross! s3-0 s3-0 (-> s4-0 vel)) + (vector-normalize! s3-0 (rand-vu-float-range (- f30-1) f30-1)) + ) + (vector+! (-> s4-0 vel) (-> s4-0 vel) s3-0) + ) + (spawn-projectile guard-shot s4-0 obj *default-dead-pool*) + ) + (if arg0 + (sound-play "gtur-shot-fire") + ) + (set! (-> obj flash-state) (the-as basic #t)) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 0))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 1))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 2))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 3))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 4))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 5))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 6))) + (spawn-with-cspace (-> obj casing-part) (-> obj node-list data (-> obj params hole-joints 7))) + (none) + ) + +;; failed to figure out what this is: +(defstate hostile (sew-gunturret) + :virtual #t + :exit (behavior () + (let ((t9-0 (-> (method-of-type enemy hostile) exit))) + (if t9-0 + (t9-0) + ) + ) + (ja :group! (-> self draw art-group data (-> self params idle-anim))) + (set! (-> self flash-state) #f) + (none) + ) + :trans (behavior () + (if (and (logtest? (-> self enemy-flags) (enemy-flag look-at-focus)) (-> self enemy-info use-victory)) + (go-virtual victory) + ) + (when (>= (- (-> self clock frame-counter) (-> self state-time)) (the-as time-frame (-> self reaction-time))) + (if (>= 2 (the-as int (-> self focus aware))) + (go-stare self) + ) + ) + (set! (-> self root-override2 penetrated-by) (enemy-method-59 self)) + (none) + ) + :code (behavior () + (sew-gunturret-method-139 self) + (until #f + (-> self clock frame-counter) + (until (>= (- (-> self clock frame-counter) (-> self last-hit-time)) (seconds 2)) + (suspend) + ) + (sew-gunturret-method-138 self) + (sound-play "sew-gun-lock") + (let ((gp-1 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-1) (seconds 0.75)) + (sew-gunturret-method-137 self #t) + (suspend) + ) + ) + (ja :group! (-> self draw art-group data (-> self params shoot-anim))) + (let ((s5-1 0) + (gp-2 #t) + ) + (sound-play "gturret") + (let ((s4-1 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) s4-1) (seconds 0.125)) + (cond + ((not (-> self can-shoot)) + ) + ((>= (- (-> self clock frame-counter) (the-as time-frame s5-1)) (seconds 0.05)) + (sew-gunturret-method-140 self gp-2) + (set! s5-1 (the-as int (-> self clock frame-counter))) + (set! gp-2 (not gp-2)) + ) + (else + (set! (-> self flash-state) #f) + ) + ) + (ja :num! (loop!)) + (suspend) + ) + ) + ) + (set! (-> self flash-state) #f) + (ja-channel-push! 1 (seconds 0.2)) + (ja :group! (-> self draw art-group data (-> self params idle-anim))) + (let ((gp-3 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-3) (seconds 0.5)) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 0))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 1))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 2))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 3))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 4))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 5))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 6))) + (spawn-with-cspace (-> self smoke-part) (-> self node-list data (-> self params hole-joints 7))) + (suspend) + ) + ) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate stare (sew-gunturret) + :virtual #t + :trans (behavior () + (let ((t9-0 (-> (method-of-type enemy stare) trans))) + (if t9-0 + (t9-0) + ) + ) + (if (!= (-> self activate-distance) 0.0) + (sew-gunturret-method-137 self #f) + ) + (none) + ) + ) + +;; definition for method 74 of type sew-gunturret +(defmethod enemy-method-74 sew-gunturret ((obj sew-gunturret) (arg0 process) (arg1 object) (arg2 symbol) (arg3 event-message-block)) + (with-pp + (if (and (= arg2 'notify) (< 1 (the-as int arg1)) (= (-> arg3 param 0) 'attack) (= (-> arg3 param 1) *target*)) + (set! (-> obj last-hit-time) (-> pp clock frame-counter)) + ) + (case arg2 + (('start) + (let ((v0-0 (the-as object #t))) + (set! (-> obj can-shoot) (the-as symbol v0-0)) + v0-0 + ) + ) + (('stop) + (set! (-> obj can-shoot) #f) + #f + ) + (('bonk) + (send-event arg0 'target-mech-get-off 90) + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) (process->ppointer pp)) + (set! (-> a1-10 num-params) 2) + (set! (-> a1-10 message) 'shove) + (set! (-> a1-10 param 0) (the-as uint #f)) + (let ((v1-17 (new 'static 'attack-info :mask (attack-info-mask shove-back shove-up id)))) + (let* ((a0-4 *game-info*) + (a2-2 (+ (-> a0-4 attack-id) 1)) + ) + (set! (-> a0-4 attack-id) a2-2) + (set! (-> v1-17 id) a2-2) + ) + (set! (-> v1-17 shove-back) 8192.0) + (set! (-> v1-17 shove-up) 2048.0) + (set! (-> a1-10 param 1) (the-as uint v1-17)) + ) + (send-event-function arg0 a1-10) + ) + #f + ) + (('flash-state) + (-> obj flash-state) + ) + (else + ((method-of-type enemy enemy-method-74) obj arg0 arg1 arg2 arg3) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate die (sew-gunturret) + :virtual #t + :enter (behavior () + (enemy-method-132 self) + (let ((v1-3 (-> self root-override2 root-prim))) + (set! (-> v1-3 prim-core collide-as) (collide-spec)) + (set! (-> v1-3 prim-core collide-with) (collide-spec)) + ) + 0 + (set! (-> self hit-points) 0) + (talker-speech-class-method-10 (-> *talker-speech* 53)) + (none) + ) + :code (behavior () + (let ((gp-0 (new 'stack 'joint-exploder-tuning (the-as uint 0)))) + (process-spawn joint-exploder (-> self params explode-sg) 6 gp-0 *sew-gunturret-exploder-params* :to self) + ) + (activate! *camera-smush-control* 819.2 37 210 1.0 0.995 (-> self clock)) + (sound-play "turret-explode") + (suspend) + (cleanup-for-death self) + (ja-channel-set! 0) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (set! (-> gp-2 quad) (-> self root-override2 trans quad)) + (set! (-> gp-2 y) (+ 10240.0 (-> gp-2 y))) + (let ((s5-2 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) s5-2) (seconds 2)) + (spawn (-> self part) gp-2) + (suspend) + ) + ) + ) + (let ((gp-3 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-3) (seconds 1)) + (suspend) + ) + ) + (send-event self 'death-end) + (while (-> self child) + (suspend) + ) + (none) + ) + :post (behavior () + (enemy-method-55 self) + (none) + ) + ) + +;; definition for method 114 of type sew-gunturret +;; WARN: Return type mismatch int vs none. +(defmethod enemy-method-114 sew-gunturret ((obj sew-gunturret)) + "@abstract" + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) cshape-reaction-default) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (set! (-> s5-0 penetrated-by) (penetrate + generic-attack + lunge + flop + punch + spin + roll + uppercut + bonk + tube + vehicle + flut-attack + board + mech-punch + dark-punch + dark-giant + ) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) + (set! (-> s5-0 total-prims) (the-as uint 3)) + (set! (-> s4-0 prim-core collide-as) (collide-spec enemy)) + (set! (-> s4-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s4-0 prim-core action) (collide-action solid no-standon)) + (set! (-> s4-0 transform-index) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 9216.0 4096.0 18432.0) + (set! (-> s5-0 root-prim) s4-0) + ) + (let ((v1-14 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-14 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-14 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-14 prim-core action) (collide-action solid no-standon)) + (set! (-> v1-14 transform-index) 3) + (set-vector! (-> v1-14 local-sphere) 0.0 6144.0 0.0 11264.0) + ) + (let ((v1-16 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-16 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-16 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-16 prim-core action) (collide-action solid no-standon)) + (set! (-> v1-16 transform-index) 5) + (set-vector! (-> v1-16 local-sphere) 0.0 0.0 -5120.0 4096.0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-19 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-19 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-19 prim-core collide-with)) + ) + (set! (-> obj root-override2) s5-0) + ) + 0 + (none) + ) + +;; definition for method 98 of type sew-gunturret +(defmethod enemy-method-98 sew-gunturret ((obj sew-gunturret) (arg0 process-focusable) (arg1 vector)) + (cond + ((= (-> obj activate-distance) 0.0) + (return #t) + ) + (else + (let ((f0-2 (vector-dot + (vector-! (new 'stack-no-clear 'vector) (get-trans arg0 3) (-> obj root-override2 trans)) + (-> obj init-mat vector 2) + ) + ) + ) + (return (and (< 0.0 f0-2) (< f0-2 (-> obj activate-distance)))) + ) + ) + ) + (the-as symbol 0) + ) + +;; definition for method 10 of type sew-gunturret +(defmethod deactivate sew-gunturret ((obj sew-gunturret)) + (if (nonzero? (-> obj smoke-part)) + (kill-and-free-particles (-> obj smoke-part)) + ) + (if (nonzero? (-> obj casing-part)) + (kill-and-free-particles (-> obj casing-part)) + ) + ((method-of-type enemy deactivate) obj) + (none) + ) + +;; definition for method 60 of type sew-gunturret +(defmethod coin-flip? sew-gunturret ((obj sew-gunturret)) + "@returns The result of a 50/50 RNG roll" + #f + ) + +;; definition for method 7 of type sew-gunturret +;; WARN: Return type mismatch enemy vs sew-gunturret. +(defmethod relocate sew-gunturret ((obj sew-gunturret) (arg0 int)) + (if (nonzero? (-> obj gun-tilt-jm)) + (&+! (-> obj gun-tilt-jm) arg0) + ) + (if (nonzero? (-> obj smoke-part)) + (&+! (-> obj smoke-part) arg0) + ) + (if (nonzero? (-> obj casing-part)) + (&+! (-> obj casing-part) arg0) + ) + (the-as sew-gunturret ((method-of-type enemy relocate) obj arg0)) + ) + +;; definition for method 141 of type sew-gunturret +;; WARN: Return type mismatch int vs none. +(defmethod sew-gunturret-method-141 sew-gunturret ((obj sew-gunturret)) + (let ((s5-0 + (new 'static 'gun-turret-params + :idle-anim 2 + :shoot-anim 3 + :track-joint 6 + :barrel-joint 4 + :gun-joint 5 + :hole-joints (new 'static 'array int32 8 7 8 9 10 11 12 13 14) + ) + ) + ) + (set! (-> s5-0 normal-sg) + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-gunturret" (the-as (pointer uint32) #f))) + ) + (set! (-> s5-0 explode-sg) + (the-as + skeleton-group + (art-group-get-by-name *level* "skel-sew-gunturret-explode" (the-as (pointer uint32) #f)) + ) + ) + (set! (-> s5-0 enemy-info) *sew-gunturret-enemy-info*) + (set! (-> obj params) s5-0) + ) + 0 + (none) + ) + +;; definition for method 115 of type sew-gunturret +;; WARN: Return type mismatch int vs none. +(defmethod enemy-method-115 sew-gunturret ((obj sew-gunturret)) + "@abstract" + (sew-gunturret-method-141 obj) + (initialize-skeleton obj (-> obj params normal-sg) (the-as pair 0)) + (enemy-method-113 obj (-> obj params enemy-info)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (logclear! (-> obj enemy-flags) (enemy-flag notice)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 1126) obj)) + (set! (-> obj smoke-part) (create-launch-control (-> *part-group-id-table* 1127) obj)) + (set! (-> obj casing-part) (create-launch-control (-> *part-group-id-table* 1128) obj)) + (set! (-> obj gun-tilt-jm) + (new 'process 'joint-mod (joint-mod-mode joint-set*) obj (-> obj params barrel-joint)) + ) + (set! (-> obj los-clear) #f) + (set! (-> obj gun-twist) 0.0) + (set! (-> obj gun-tilt) 0.0) + (set! (-> obj desired-twist) 0.0) + (set! (-> obj desired-tilt) 0.0) + (set! (-> obj flash-state) #f) + (set! (-> obj can-shoot) #t) + (set! (-> obj last-hit-time) 0) + (quaternion->matrix (-> obj init-mat) (-> obj root-override2 quat)) + (set! (-> obj activate-distance) (res-lump-float (-> obj entity) 'distance)) + 0 + (none) + ) + +;; definition for method 116 of type sew-gunturret +;; WARN: Return type mismatch object vs none. +(defmethod go-idle sew-gunturret ((obj sew-gunturret)) + (cond + ((task-node-closed? (game-task-node sewer-enemy-blow-up-turrets)) + (cleanup-for-death obj) + (go (method-of-object obj die-fast)) + ) + (else + (go (method-of-object obj idle)) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defskelgroup skel-pal-gun-turret pal-gun-turret pal-gun-turret-lod0-jg pal-gun-turret-idle-ja + ((pal-gun-turret-lod0-mg (meters 999999))) + :bounds (static-spherem 0 0 0 4) + ) + +;; failed to figure out what this is: +(defskelgroup skel-pal-gun-turret-explode pal-gun-turret pal-gun-turret-explode-lod0-jg pal-gun-turret-explode-idle-ja + ((pal-gun-turret-explode-lod0-mg (meters 999999))) + :bounds (static-spherem 0 0 0 15) + ) + +;; definition for symbol *pal-gun-turret-enemy-info*, type enemy-info +(define *pal-gun-turret-enemy-info* (new 'static 'enemy-info + :use-die-falling #f + :use-victory #f + :use-jump-blocked #f + :debug-draw-neck #f + :jump-debug-draw #f + :move-to-ground #f + :hover-if-no-ground #f + :idle-anim-script (new 'static 'array uint32 4 #x2020201 #x0 #x0 #x0) + :idle-anim 2 + :notice-anim 2 + :hostile-anim 2 + :hit-anim 2 + :knocked-anim -1 + :knocked-land-anim -1 + :die-anim 2 + :die-falling-anim -1 + :victory-anim -1 + :jump-wind-up-anim -1 + :jump-in-air-anim -1 + :jump-land-anim -1 + :neck-joint -1 + :notice-distance (meters 150) + :notice-distance-delta (meters 10) + :proximity-notice-distance (meters 150) + :default-hit-points 1 + :gnd-collide-with (collide-spec backgnd) + :overlaps-others-collide-with-filter (collide-spec jak bot player-list) + :movement-gravity (meters -100) + :friction 0.8 + :attack-shove-back (meters 3) + :attack-shove-up (meters 2) + :attack-mode 'generic + :attack-damage 2 + :jump-height-min (meters 3) + :jump-height-factor 0.5 + :knocked-seek-ry-clamp 2730.6667 + :knocked-soft-vxz-lo 72089.6 + :knocked-soft-vxz-hi 108134.4 + :knocked-soft-vy-lo 81920.0 + :knocked-soft-vy-hi 122880.0 + :knocked-medium-vxz-lo 147456.0 + :knocked-medium-vxz-hi 196608.0 + :knocked-medium-vy-lo 135168.0 + :knocked-medium-vy-hi 151552.0 + :knocked-hard-vxz-lo 78643.2 + :knocked-hard-vxz-hi 117964.8 + :knocked-hard-vy-lo 183500.8 + :knocked-hard-vy-hi 209715.2 + :knocked-huge-vxz-lo 164659.2 + :knocked-huge-vxz-hi 249036.8 + :knocked-huge-vy-lo 183500.8 + :knocked-huge-vy-hi 217907.2 + :knocked-yellow-vxz-lo 40960.0 + :knocked-yellow-vxz-hi 49152.0 + :knocked-yellow-vy-lo 57344.0 + :knocked-yellow-vy-hi 81920.0 + :knocked-red-vxz-lo 24576.0 + :knocked-red-vxz-hi 196608.0 + :knocked-red-vy-lo 94208.0 + :knocked-red-vy-hi 151552.0 + :knocked-blue-vxz-lo 40960.0 + :knocked-blue-vxz-hi 49152.0 + :knocked-blue-vy-lo 24576.0 + :knocked-blue-vy-hi 81920.0 + :shadow-size (meters 1) + :shadow-max-y (meters 1) + :shadow-min-y (meters -1) + :shadow-locus-dist (meters 150) + :gem-joint -1 + :gem-offset (new 'static 'sphere :r 163840.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *pal-gun-turret-enemy-info* fact-defaults) *fact-info-enemy-defaults*) + +;; definition of type pal-gun-turret +(deftype pal-gun-turret (sew-gunturret) + () + :heap-base #x230 + :method-count-assert 142 + :size-assert #x2a4 + :flag-assert #x8e023002a4 + (:methods + (pal-gun-turret-method-140 (_type_ symbol) float :replace 140) + ) + ) + +;; definition for method 3 of type pal-gun-turret +(defmethod inspect pal-gun-turret ((obj pal-gun-turret)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type sew-gunturret inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; definition for method 140 of type pal-gun-turret +(defmethod pal-gun-turret-method-140 pal-gun-turret ((obj pal-gun-turret) (arg0 symbol)) + ((the-as (function sew-gunturret symbol none) (find-parent-method pal-gun-turret 140)) obj arg0) + (set-palcab-turret-flash! 1.0) + ) + +;; definition for method 116 of type pal-gun-turret +;; WARN: Return type mismatch object vs none. +(defmethod go-idle pal-gun-turret ((obj pal-gun-turret)) + (go (method-of-object obj idle)) + (none) + ) + +;; definition for method 141 of type pal-gun-turret +;; WARN: Return type mismatch int vs none. +(defmethod sew-gunturret-method-141 pal-gun-turret ((obj pal-gun-turret)) + (let ((s5-0 + (new 'static 'gun-turret-params + :idle-anim 2 + :shoot-anim 3 + :track-joint 6 + :barrel-joint 4 + :gun-joint 5 + :hole-joints (new 'static 'array int32 8 7 8 9 10 11 12 13 14) + ) + ) + ) + (set! (-> s5-0 normal-sg) + (the-as skeleton-group (art-group-get-by-name *level* "skel-pal-gun-turret" (the-as (pointer uint32) #f))) + ) + (set! (-> s5-0 explode-sg) + (the-as + skeleton-group + (art-group-get-by-name *level* "skel-pal-gun-turret-explode" (the-as (pointer uint32) #f)) + ) + ) + (set! (-> s5-0 enemy-info) *pal-gun-turret-enemy-info*) + (set! (-> obj params) s5-0) + ) + 0 + (none) + ) diff --git a/test/decompiler/reference/jak2/levels/fortress/ammo_dump/fordumpc-part_REF.gc b/test/decompiler/reference/jak2/levels/fortress/ammo_dump/fordumpc-part_REF.gc new file mode 100644 index 0000000000..09d5fba442 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/fortress/ammo_dump/fordumpc-part_REF.gc @@ -0,0 +1,3034 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type fordumpc-part +(deftype fordumpc-part (part-spawner) + () + :heap-base #x30 + :method-count-assert 16 + :size-assert #xb0 + :flag-assert #x10003000b0 + ) + +;; definition for method 3 of type fordumpc-part +(defmethod inspect fordumpc-part ((obj fordumpc-part)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type part-spawner inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-panel-1 + :id 563 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2476 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 100) + (sp-item 2477 :fade-after (meters 80) :flags (bit6 bit7) :period 400 :length 100) + (sp-item 2478 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 300) + (sp-item 2479 :fade-after (meters 40) :flags (bit6 bit7) :period 800 :length 225) + ) + ) + +;; failed to figure out what this is: +(defpart 2476 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.075)) + (sp-flt spt-y (meters 1.8)) + (sp-flt spt-z (meters 0.2)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2477 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 3)) + (sp-flt spt-y (meters -0.5)) + (sp-flt spt-z (meters -0.2)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2478 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 2.85)) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2479 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1.25)) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-panel-4 + :id 564 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2480 :fade-after (meters 40) :flags (bit6 bit7) :period 300 :length 150 :offset 150) + (sp-item 2481 :fade-after (meters 60) :flags (bit6 bit7) :period 450 :length 150 :offset 150) + (sp-item 2482 :fade-after (meters 80) :flags (bit6 bit7) :period 600 :length 150 :offset 300) + (sp-item 2483 :fade-after (meters 40) :flags (bit6 bit7) :period 150 :length 50) + (sp-item 2484 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 150 :offset 450) + (sp-item 2485 :fade-after (meters 80) :flags (bit6 bit7) :period 600 :length 300 :offset 150) + (sp-item 2486 :fade-after (meters 40) :flags (bit6 bit7) :period 450 :length 150) + (sp-item 2487 :fade-after (meters 40) :flags (bit6 bit7) :period 600 :length 50 :offset 250) + (sp-item 2488 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 300) + (sp-item 2489 :fade-after (meters 40) :flags (bit6 bit7) :period 100 :length 50 :offset 50) + (sp-item 2490 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 500) + (sp-item 2491 :fade-after (meters 40) :flags (bit6 bit7) :period 600 :length 50 :offset 150) + (sp-item 2492 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 550) + (sp-item 2493 :fade-after (meters 40) :flags (bit6 bit7) :period 600 :length 50 :offset 350) + (sp-item 2494 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 200) + (sp-item 2495 :fade-after (meters 40) :flags (bit6 bit7) :period 100 :length 50) + (sp-item 2496 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 50) + (sp-item 2497 :fade-after (meters 40) :flags (bit6 bit7) :period 600 :length 50 :offset 250) + (sp-item 2498 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 400) + (sp-item 2499 :fade-after (meters 40) :flags (bit6 bit7) :period 600 :length 50 :offset 100) + (sp-item 2500 :fade-after (meters 60) :flags (bit6 bit7) :period 600 :length 50 :offset 600) + ) + ) + +;; failed to figure out what this is: +(defpart 2487 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.8)) + (sp-flt spt-y (meters 0.54)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2488 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -3.15)) + (sp-flt spt-y (meters 0.54)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2489 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -3.15)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2490 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -3.15)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2491 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.75)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2492 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.45)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2493 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.75)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2494 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.45)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2495 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -1.8)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2496 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.85)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2497 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.55)) + (sp-flt spt-y (meters -0.45)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2498 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -1.8)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2499 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.85)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2500 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.55)) + (sp-flt spt-y (meters -0.775)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2480 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.6)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2481 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 2.45)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2482 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 2.45)) + (sp-flt spt-y (meters -0.6)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2483 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.4)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2484 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.4)) + (sp-flt spt-y (meters -0.6)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2485 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1.15)) + (sp-flt spt-y (meters -0.6)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2486 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -2.1)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0.15)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-overhead-lights + :id 565 + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 2501 :fade-after (meters 80) :flags (bit6)) (sp-item 2502 :fade-after (meters 100) :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 2501 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.25)) + (sp-rnd-flt spt-scale-x (meters 5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees -5.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2502 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.25)) + (sp-rnd-flt spt-scale-x (meters 14) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees -5.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 411648.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-red-glows + :id 566 + :bounds (static-bspherem 0 0 0 6) + :parts ((sp-item 2503 :fade-after (meters 80) :flags (bit6)) (sp-item 2504 :fade-after (meters 100) :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 2503 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 3) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees 17.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 20.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 5120.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2504 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 10) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees 17.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 12.0) + (sp-flt spt-omega 411648.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 5120.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-blue-lights + :id 567 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 4) + :parts ((sp-item 2505 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2506 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2507 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2508 :fade-after (meters 100) :flags (bit6 bit7)) + ) + ) + +;; failed to figure out what this is: +(defpart 2505 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 20.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2506 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2507 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.3)) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2508 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 12.0) + (sp-flt spt-omega 412467.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-red-lights + :id 568 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 4) + :parts ((sp-item 2509 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2510 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2511 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2512 :fade-after (meters 100) :flags (bit6 bit7)) + ) + ) + +;; failed to figure out what this is: +(defpart 2509 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2510 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2511 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.3)) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2512 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-rnd-flt spt-scale-x (meters 7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 16.0 4.0 1.0) + (sp-flt spt-omega 412467.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 819.2) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-yellow-lights + :id 569 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 4) + :parts ((sp-item 2513 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2514 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2515 :fade-after (meters 80) :flags (bit6 bit7)) + (sp-item 2516 :fade-after (meters 100) :flags (bit6 bit7)) + ) + ) + +;; failed to figure out what this is: +(defpart 2513 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.06)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 200.0 55.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 10.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1638.4) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2514 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-flt spt-z (meters 0.06)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 200.0 55.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 10.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1638.4) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2515 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.3)) + (sp-flt spt-z (meters 0.06)) + (sp-rnd-flt spt-scale-x (meters 1.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 200.0 55.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 10.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1638.4) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2516 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 200.0 55.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 10.0 4.0 1.0) + (sp-flt spt-omega 412467.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1638.4) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-yellow-glows + :id 570 + :bounds (static-bspherem 0 0 0 6) + :parts ((sp-item 2517 :fade-after (meters 80) :flags (bit6)) (sp-item 2518 :fade-after (meters 100) :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 2517 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees 17.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 20.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 5120.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2518 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-flt spt-rot-z (degrees 17.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 411648.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 5120.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-single-red-lights + :id 571 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 2519 :fade-after (meters 80) :flags (bit6) :period 300 :length 150)) + ) + +;; failed to figure out what this is: +(defpart 2519 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.6) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-bomb-explosion + :id 572 + :duration (seconds 3) + :linger-duration (seconds 1) + :flags (use-local-clock unk-5 unk-6) + :bounds (static-bspherem 0 0 0 15) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 2520 :flags (bit7) :period 1500 :length 25 :offset -10) + (sp-item 2521 :fade-after (meters 60) :flags (bit7) :period 1500 :length 30) + (sp-item 2522 :fade-after (meters 60) :falloff-to (meters 60) :flags (bit7) :period 1500 :length 100) + (sp-item 2523 :fade-after (meters 200) :falloff-to (meters 200) :flags (bit7) :period 1500 :length 50) + (sp-item 2524 :flags (bit7) :period 1500 :length 5 :offset -10) + (sp-item 2525 :fade-after (meters 150) :falloff-to (meters 150) :flags (bit7) :period 1500 :length 50) + ) + ) + +;; failed to figure out what this is: +(defpart 2523 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x34 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-rot-z) + :flags (sp-flag spflag7) + :random-rangef 65536.0 + :random-multf 1.0 + ) + (sp-rnd-flt spt-scale-y (meters 0.8) (meters 0.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 2526) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-conerot-x) + :flags (sp-flag from-pointer) + :func '*sp-temp* + ) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2525 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a 0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 2526) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2526 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 2527) + ) + ) + +;; failed to figure out what this is: +(defpart 2527 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.44) + (sp-flt spt-fade-g -2.36) + (sp-flt spt-fade-b -2.64) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2528) + ) + ) + +;; failed to figure out what this is: +(defpart 2528 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2944444) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.094444446) + (sp-rnd-flt spt-fade-a -0.06545454 -0.06545454 1.0) + (sp-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 2529) + ) + ) + +;; failed to figure out what this is: +(defpart 2529 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0)) + ) + +;; failed to figure out what this is: +(defpart 2524 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x47 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 5)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters 0.5)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-b -5.1) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 100) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21) + (sp-int spt-next-time 50) + (sp-launcher-by-id spt-next-launcher 2530) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2530 + :init-specs ((sp-flt spt-scalevel-x (meters -0.2)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -2.56) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.92) + ) + ) + +;; failed to figure out what this is: +(defpart 2522 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #xc)) + (sp-rnd-flt spt-num 5.0 3.0 1.0) + (sp-flt spt-x (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.083333336) (meters 0.083333336) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.0016666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.18) + (sp-flt spt-fade-b -2.12) + (sp-rnd-flt spt-accel-y -0.68266666 -1.3653333 1.0) + (sp-flt spt-friction 0.87) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2531) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2531 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.02) + (sp-flt spt-fade-b 0.23555556) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2532) + ) + ) + +;; failed to figure out what this is: +(defpart 2532 + :init-specs ((sp-flt spt-fade-r -0.5543478) (sp-flt spt-fade-g -0.5543478) (sp-flt spt-fade-a -0.13913043)) + ) + +;; failed to figure out what this is: +(defpart 2520 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 3.0 1.0 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 1.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 20.0 1.0) + (sp-rnd-flt spt-g 70.0 20.0 1.0) + (sp-rnd-flt spt-b 70.0 20.0 1.0) + (sp-rnd-flt spt-a 0.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.1) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.016666668) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 3.3) + (sp-flt spt-fade-g 3.12) + (sp-flt spt-fade-b 1.18) + (sp-flt spt-fade-a 1.76) + (sp-flt spt-friction 0.88) + (sp-int spt-timer 710) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2533) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2533 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -1.9666667) + (sp-flt spt-fade-b -2.2) + (sp-flt spt-fade-a -0.41666666) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2534) + ) + ) + +;; failed to figure out what this is: +(defpart 2534 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.38833332) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.028333334) + (sp-flt spt-fade-a -0.38833332) + ) + ) + +;; failed to figure out what this is: +(defpart 2521 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-rnd-flt spt-num 4.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.25) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.13333334) (meters 0.02) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 80) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fort-dump-bomb-a-steamescape + :id 573 + :bounds (static-bspherem 0 0 0 6) + :parts ((sp-item 2535 :fade-after (meters 100) :falloff-to (meters 100)) (sp-item 2536 :fade-after (meters 40))) + ) + +;; failed to figure out what this is: +(defpart 2536 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-y (meters 0.1) (meters 0.4) 1.0) + (sp-rnd-flt spt-z (meters -0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 4.0 2.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 50) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2535 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 1.0 2.0 1.0) + (sp-flt spt-x (meters 0.5)) + (sp-flt spt-y (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 32.0 16.0 1.0) + (sp-flt spt-vel-y (meters -0.013333334)) + (sp-rnd-flt spt-scalevel-x (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-int spt-next-time 25) + (sp-launcher-by-id spt-next-launcher 2537) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2537 + :init-specs ((sp-rnd-flt spt-vel-x (meters -0.021666666) (meters 0.043333333) 1.0) + (sp-flt spt-vel-y (meters 0)) + (sp-rnd-flt spt-vel-z (meters -0.021666666) (meters 0.043333333) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-rnd-flt spt-fade-a -0.096 -0.096 1.0) + (sp-flt spt-friction 0.94) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-exit-panel + :id 574 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2538 :fade-after (meters 60) :flags (bit6 bit7) :period 50 :length 25) + (sp-item 2539 :fade-after (meters 60) :flags (bit6 bit7) :period 60 :length 20) + (sp-item 2540 :fade-after (meters 60) :flags (bit6 bit7) :period 75 :length 30) + ) + ) + +;; failed to figure out what this is: +(defpart 2538 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.2)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 247398.4) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2539 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 247398.4) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2541 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.2)) + (sp-flt spt-y (meters 0.55)) + (sp-flt spt-z (meters 0)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 247398.4) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-single-blue-lights + :id 575 + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 2542 :fade-after (meters 80) :flags (bit6) :period 300 :length 150 :offset 150)) + ) + +;; failed to figure out what this is: +(defpart 2542 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.6) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-l-upsideown-panel + :id 576 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2543 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 100) + (sp-item 2544 :fade-after (meters 80) :flags (bit6 bit7) :period 225 :length 100) + (sp-item 2545 :fade-after (meters 80) :flags (bit6 bit7) :period 400 :length 100) + (sp-item 2546 :fade-after (meters 60) :flags (bit6 bit7) :period 100 :length 50) + (sp-item 2547 :fade-after (meters 40) :flags (bit6 bit7) :period 150 :length 50) + (sp-item 2548 :fade-after (meters 60) :flags (bit6 bit7) :period 125 :length 50) + (sp-item 2549 :fade-after (meters 40) :flags (bit6 bit7) :period 175 :length 50) + ) + ) + +;; failed to figure out what this is: +(defpart 2543 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.55)) + (sp-flt spt-y (meters -2.35)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2544 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.95)) + (sp-flt spt-y (meters -2.35)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2545 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.75)) + (sp-flt spt-y (meters -1.8)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2546 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.8)) + (sp-flt spt-y (meters 0.25)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2547 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1.1)) + (sp-flt spt-y (meters 0.25)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2548 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.1)) + (sp-flt spt-y (meters 0.25)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2549 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.2)) + (sp-flt spt-y (meters 0.25)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fordumpc-l-panel + :id 577 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2550 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 75) + (sp-item 2551 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 75 :offset 150) + (sp-item 2552 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 75 :offset 50) + (sp-item 2553 :fade-after (meters 80) :flags (bit6 bit7) :period 200 :length 75 :offset 100) + (sp-item 2554 :fade-after (meters 60) :flags (bit6 bit7) :period 100 :length 60) + (sp-item 2555 :fade-after (meters 40) :flags (bit6 bit7) :period 150 :length 50) + (sp-item 2556 :fade-after (meters 60) :flags (bit6 bit7) :period 125 :length 35) + (sp-item 2557 :fade-after (meters 40) :flags (bit6 bit7) :period 175 :length 50) + (sp-item 2558 :fade-after (meters 60) :flags (bit6 bit7) :period 75 :length 25) + (sp-item 2559 :fade-after (meters 40) :flags (bit6 bit7) :period 50 :length 25) + ) + ) + +;; failed to figure out what this is: +(defpart 2550 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.55)) + (sp-flt spt-y (meters -2.15)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2551 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.9)) + (sp-flt spt-y (meters -2.15)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2552 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.55)) + (sp-flt spt-y (meters -1.75)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2553 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.9)) + (sp-flt spt-y (meters -1.75)) + (sp-flt spt-z (meters 0.5)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 330547.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2554 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.7)) + (sp-flt spt-y (meters 1.75)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2555 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.45)) + (sp-flt spt-y (meters 1.75)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2556 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.7)) + (sp-flt spt-y (meters 0.15)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2557 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.45)) + (sp-flt spt-y (meters 0.15)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2558 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.7)) + (sp-flt spt-y (meters -1.5)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 248627.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2559 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters -0.45)) + (sp-flt spt-y (meters -1.5)) + (sp-flt spt-z (meters 1)) + (sp-rnd-flt spt-scale-x (meters 0.8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 24.0 4.0 1.0) + (sp-flt spt-omega 166707.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1024.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fortress-small-explosion + :id 578 + :duration (seconds 3) + :linger-duration (seconds 1) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 15) + :parts ((sp-item 209)) + ) + +;; failed to figure out what this is: +(defpart 2560 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-x 2048.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 24.0) + (sp-flt spt-scalevel-x (meters 0.10666667)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -4.266667) + (sp-flt spt-fade-b -8.5) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 2048.0) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2561) + ) + ) + +;; failed to figure out what this is: +(defpart 2561 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.85333335) + (sp-flt spt-fade-g -1.7066667) + (sp-flt spt-fade-b -1.7066667) + (sp-flt spt-fade-a -0.64) + ) + ) + +;; failed to figure out what this is: +(defpart 2562 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x34 :page #xc)) + (sp-rnd-flt spt-num 2.0 0.2 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-rot-z) + :flags (sp-flag spflag7) + :random-rangef 655360.0 + :random-multf 1.0 + ) + (sp-rnd-flt spt-scale-y (meters 0.8) (meters 0.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int spt-next-time 25) + (sp-launcher-by-id spt-next-launcher 2563) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-conerot-x) + :flags (sp-flag from-pointer) + :func '*sp-temp* + ) + ) + ) + +;; failed to figure out what this is: +(defpart 2564 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-rnd-flt spt-num 1.0 0.2 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int spt-next-time 25) + (sp-launcher-by-id spt-next-launcher 2563) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2563 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 2565) + ) + ) + +;; failed to figure out what this is: +(defpart 2565 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.44) + (sp-flt spt-fade-g -2.36) + (sp-flt spt-fade-b -2.64) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2566) + ) + ) + +;; failed to figure out what this is: +(defpart 2566 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2944444) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.094444446) + (sp-rnd-flt spt-fade-a -0.06545454 -0.06545454 1.0) + (sp-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 2567) + ) + ) + +;; failed to figure out what this is: +(defpart 2567 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0) (sp-flt spt-fade-a -0.1125)) + ) + +;; failed to figure out what this is: +(defpart 2568 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 5)) + (sp-flt spt-rot-x 2048.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters 0.5)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-b -5.1) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 65) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-int spt-next-time 30) + (sp-launcher-by-id spt-next-launcher 2569) + ) + ) + +;; failed to figure out what this is: +(defpart 2569 + :init-specs ((sp-flt spt-scalevel-x (meters -0.2857143)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -3.6571429) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -2.7428572) + ) + ) + +;; failed to figure out what this is: +(defpart 2570 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #xc)) + (sp-rnd-flt spt-num 8.0 2.0 1.0) + (sp-flt spt-x (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.083333336) (meters 0.083333336) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.0016666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.18) + (sp-flt spt-fade-b -2.12) + (sp-rnd-flt spt-accel-y -0.68266666 -1.3653333 1.0) + (sp-flt spt-friction 0.87) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2571) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2571 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.02) + (sp-flt spt-fade-b 0.23555556) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2572) + ) + ) + +;; failed to figure out what this is: +(defpart 2572 + :init-specs ((sp-flt spt-fade-r -0.5543478) (sp-flt spt-fade-g -0.5543478) (sp-flt spt-fade-a -0.13913043)) + ) + +;; failed to figure out what this is: +(defpart 2573 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 2.0 1.0 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 20.0 1.0) + (sp-rnd-flt spt-g 70.0 20.0 1.0) + (sp-rnd-flt spt-b 70.0 20.0 1.0) + (sp-rnd-flt spt-a 0.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.1) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 3.3) + (sp-flt spt-fade-g 3.12) + (sp-flt spt-fade-b 1.18) + (sp-flt spt-fade-a 1.76) + (sp-flt spt-friction 0.88) + (sp-int spt-timer 710) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2574) + (sp-rnd-flt spt-conerot-x (degrees -1440.0) (degrees 2880.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2574 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -1.9666667) + (sp-flt spt-fade-b -2.2) + (sp-flt spt-fade-a -0.41666666) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2575) + ) + ) + +;; failed to figure out what this is: +(defpart 2575 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.38833332) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.028333334) + (sp-flt spt-fade-a -0.38833332) + ) + ) + +;; failed to figure out what this is: +(defpart 2576 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-rnd-flt spt-num 4.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.13333334) (meters 0.02) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fortress-big-explosion + :id 579 + :duration (seconds 3) + :linger-duration (seconds 1) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 15) + :parts ((sp-item 2577 :flags (bit6) :period 900 :length 5) + (sp-item 2578 :flags (bit6) :period 900 :length 175) + (sp-item 2579 :flags (bit6) :period 900 :length 150) + (sp-item 2580 :flags (bit6) :period 900 :length 100) + (sp-item 2581 :flags (bit6) :period 900 :length 900) + ) + ) + +;; failed to figure out what this is: +(defpart 2580 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2f :page #xc)) + (sp-flt spt-num 8.0) + (sp-flt spt-z (meters 10)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.5) (meters 2) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.1) (degrees 0.2) 1.0) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 40.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 4) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2577 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 64)) + (sp-flt spt-rot-x 16384.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-flt spt-rotvel-z (degrees 0.033333335)) + (sp-flt spt-fade-g -0.28444445) + (sp-flt spt-fade-b -0.56666666) + (sp-flt spt-fade-a -0.2488889) + (sp-int spt-timer 2000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 40960.0) + (sp-int spt-next-time 450) + (sp-launcher-by-id spt-next-launcher 2582) + ) + ) + +;; failed to figure out what this is: +(defpart 2582 + :init-specs ((sp-flt spt-a 16.0) + (sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.28444445) + (sp-flt spt-fade-a 0.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2579 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-flt spt-num 4.0) + (sp-rnd-flt spt-scale-x (meters 3) (meters 3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 3) (meters 3) 1.0) + (sp-rnd-flt spt-r 64.0 64.0 1.0) + (sp-rnd-flt spt-g 32.0 64.0 1.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0022222223) (meters 0.0022222223) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.033333335) (degrees 0.06666667) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-14) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 90.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 6) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2578 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-flt spt-num 12.0) + (sp-rnd-flt spt-scale-x (meters 3) (meters 6) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 3) (meters 6) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.033333335) (degrees 0.06666667) 1.0) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.21333334 -0.42666668 1.0) + (sp-flt spt-fade-b -0.85333335) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-int-plain-rnd spt-next-time 5 24 1) + (sp-launcher-by-id spt-next-launcher 2583) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 90.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 4) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2581 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 4) (meters 6) 1.0) + (sp-flt spt-rot-x 8192.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 4) (meters 6) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.033333335) (degrees 0.06666667) 1.0) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.21333334 -0.42666668 1.0) + (sp-flt spt-fade-b -0.85333335) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 61440.0) + (sp-int-plain-rnd spt-next-time 5 24 1) + (sp-launcher-by-id spt-next-launcher 2583) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 90.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 4) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2583 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008888889) (meters 0.008888889) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-fade-a 0.21333334 0.10666667 1.0) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 2584) + ) + ) + +;; failed to figure out what this is: +(defpart 2584 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.14222223 -0.28444445 1.0) + (sp-flt spt-fade-b -0.28444445) + (sp-flt spt-fade-a -0.035555556) + (sp-int spt-next-time 450) + (sp-launcher-by-id spt-next-launcher 2585) + ) + ) + +;; failed to figure out what this is: +(defpart 2585 + :init-specs ((sp-flt spt-fade-r -0.10666667) (sp-flt spt-fade-g -0.21333334) (sp-flt spt-fade-a -0.026666667)) + ) + +;; failed to figure out what this is: +(defpartgroup group-fortress-side-explosion + :id 580 + :duration (seconds 3) + :linger-duration (seconds 1) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 400) + :parts ((sp-item 2586 :flags (bit6) :period 900 :length 30 :offset 10) + (sp-item 2587 :flags (bit6) :period 900 :length 5) + (sp-item 2588 :flags (bit6) :period 900 :length 30) + (sp-item 2589 :flags (bit6) :period 900 :length 30) + (sp-item 2588 :flags (bit6) :period 900 :length 15) + (sp-item 2589 :flags (bit6) :period 900 :length 15) + (sp-item 2588 :flags (bit6) :period 900 :length 10) + (sp-item 2589 :flags (bit6) :period 900 :length 10) + (sp-item 2590 :flags (bit6) :period 900 :length 25) + (sp-item 2591 :flags (bit6) :period 900 :length 30) + (sp-item 2592 :flags (bit6) :period 900 :length 30) + ) + ) + +;; failed to figure out what this is: +(defpart 2592 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2f :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -2) (meters 2) 1.0) + (sp-rnd-flt spt-y (meters -3) (meters 2) 1.0) + (sp-flt spt-z (meters 50)) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.3) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-rnd-flt spt-fade-a 0.0 -0.21333334 1.0) + (sp-rnd-flt spt-accel-y -9.557333 -2.7306666 1.0) + (sp-rnd-flt spt-friction 0.93 0.04 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-14) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2591 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -2) (meters 2) 1.0) + (sp-rnd-flt spt-y (meters -3) (meters 2) 1.0) + (sp-flt spt-z (meters 50)) + (sp-flt spt-scale-x (meters 0.1)) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 255.0 1.0) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.16666667) 1.0) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.10666667 -0.21333334 1.0) + (sp-flt spt-fade-b -0.425) + (sp-rnd-flt spt-fade-a -0.21333334 -0.21333334 1.0) + (sp-rnd-flt spt-accel-y -2.7306666 -2.7306666 1.0) + (sp-rnd-flt spt-friction 0.93 0.04 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2586 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-rnd-flt spt-num 8.0 2.0 1.0) + (sp-flt spt-x (meters 50)) + (sp-flt spt-y (meters -2)) + (sp-flt spt-z (meters -2)) + (sp-rnd-flt spt-scale-x (meters 2) (meters 1) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 160.0) (degrees 40.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.16666667) (meters 0.1) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-rnd-flt spt-fade-a -0.4 -0.4 1.0) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + ) + ) + +;; failed to figure out what this is: +(defpart 2587 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 55)) + (sp-flt spt-y (meters -2)) + (sp-flt spt-z (meters -2)) + (sp-flt spt-scale-x (meters 64)) + (sp-flt spt-rot-x 16384.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 32.0) + (sp-flt spt-scalevel-x (meters -0.256)) + (sp-flt spt-rotvel-z (degrees 0.033333335)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.64) + (sp-flt spt-fade-b -1.275) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 40960.0) + ) + ) + +;; failed to figure out what this is: +(defpart 2589 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters -2) (meters 2) 1.0) + (sp-rnd-flt spt-y (meters -3) (meters 2) 1.0) + (sp-flt spt-z (meters 55)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1) (meters 3) 1.0) + (sp-flt spt-r 64.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.21333334 -0.28444445 1.0) + (sp-flt spt-fade-b -0.85) + (sp-rnd-flt spt-fade-a -0.16 -0.16 1.0) + (sp-rnd-flt spt-accel-y 4.096 2.7306666 1.0) + (sp-rnd-flt spt-friction 0.94 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-14) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2588 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters -2) (meters 2) 1.0) + (sp-rnd-flt spt-y (meters -3) (meters 2) 1.0) + (sp-flt spt-z (meters 55)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1) (meters 3) 1.0) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 255.0 1.0) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 32.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.21333334 -0.28444445 1.0) + (sp-flt spt-fade-b -0.85) + (sp-rnd-flt spt-fade-a -0.16 -0.16 1.0) + (sp-rnd-flt spt-accel-y 4.096 2.7306666 1.0) + (sp-rnd-flt spt-friction 0.94 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2590 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-x (meters -4) (meters 4) 1.0) + (sp-rnd-flt spt-y (meters -5) (meters 4) 1.0) + (sp-flt spt-z (meters 55)) + (sp-rnd-flt spt-scale-x (meters 2) (meters 3) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-rnd-flt spt-scale-y (meters 2) (meters 3) 1.0) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 255.0 1.0) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 8.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.06666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.02) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-rnd-flt spt-fade-g -0.21333334 -0.28444445 1.0) + (sp-flt spt-fade-b -0.85) + (sp-rnd-flt spt-fade-a -0.08 -0.08 1.0) + (sp-rnd-flt spt-accel-y 4.096 2.7306666 1.0) + (sp-rnd-flt spt-friction 0.94 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 4096.0) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-missile-target-explosion + :id 581 + :duration (seconds 3) + :linger-duration (seconds 1) + :flags (use-local-clock unk-5 unk-6) + :bounds (static-bspherem 0 0 0 15) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 2593 :flags (bit7) :period 1500 :length 25 :offset -10) + (sp-item 2594 :fade-after (meters 60) :flags (bit7) :period 1500 :length 30) + (sp-item 2595 :fade-after (meters 60) :falloff-to (meters 60) :flags (bit7) :period 1500 :length 100) + (sp-item 2596 :fade-after (meters 200) :falloff-to (meters 200) :flags (bit7) :period 1500 :length 50) + (sp-item 2597 :flags (bit7) :period 1500 :length 5 :offset -10) + (sp-item 2598 :fade-after (meters 150) :falloff-to (meters 150) :flags (bit7) :period 1500 :length 50) + ) + ) + +;; failed to figure out what this is: +(defpart 2596 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x34 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-rot-z) + :flags (sp-flag spflag7) + :random-rangef 65536.0 + :random-multf 1.0 + ) + (sp-rnd-flt spt-scale-y (meters 0.8) (meters 0.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 2599) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-conerot-x) + :flags (sp-flag from-pointer) + :func '*sp-temp* + ) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2598 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a 0.22068965) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 2599) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2599 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 2600) + ) + ) + +;; failed to figure out what this is: +(defpart 2600 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.44) + (sp-flt spt-fade-g -2.36) + (sp-flt spt-fade-b -2.64) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2601) + ) + ) + +;; failed to figure out what this is: +(defpart 2601 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2944444) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.094444446) + (sp-rnd-flt spt-fade-a -0.06545454 -0.06545454 1.0) + (sp-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 2602) + ) + ) + +;; failed to figure out what this is: +(defpart 2602 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0)) + ) + +;; failed to figure out what this is: +(defpart 2597 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 5)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters 0.5)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-b -5.1) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 100) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21) + (sp-int spt-next-time 50) + (sp-launcher-by-id spt-next-launcher 2603) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2603 + :init-specs ((sp-flt spt-scalevel-x (meters -0.2)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -2.56) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.92) + ) + ) + +;; failed to figure out what this is: +(defpart 2595 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #xc)) + (sp-rnd-flt spt-num 5.0 3.0 1.0) + (sp-flt spt-x (meters 0.25)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.083333336) (meters 0.083333336) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.0016666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.18) + (sp-flt spt-fade-b -2.12) + (sp-rnd-flt spt-accel-y -0.68266666 -1.3653333 1.0) + (sp-flt spt-friction 0.87) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2604) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2604 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.02) + (sp-flt spt-fade-b 0.23555556) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2605) + ) + ) + +;; failed to figure out what this is: +(defpart 2605 + :init-specs ((sp-flt spt-fade-r -0.5543478) (sp-flt spt-fade-g -0.5543478) (sp-flt spt-fade-a -0.13913043)) + ) + +;; failed to figure out what this is: +(defpart 2593 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 3.0 1.0 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 0.6) 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (meters 1.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 20.0 1.0) + (sp-rnd-flt spt-g 70.0 20.0 1.0) + (sp-rnd-flt spt-b 70.0 20.0 1.0) + (sp-rnd-flt spt-a 0.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.1) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.016666668) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 3.3) + (sp-flt spt-fade-g 3.12) + (sp-flt spt-fade-b 1.18) + (sp-flt spt-fade-a 1.76) + (sp-flt spt-friction 0.88) + (sp-int spt-timer 710) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 2606) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 2606 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -1.9666667) + (sp-flt spt-fade-b -2.2) + (sp-flt spt-fade-a -0.41666666) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 2607) + ) + ) + +;; failed to figure out what this is: +(defpart 2607 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.38833332) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.028333334) + (sp-flt spt-fade-a -0.38833332) + ) + ) + +;; failed to figure out what this is: +(defpart 2594 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-rnd-flt spt-num 4.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.25) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.13333334) (meters 0.02) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 80) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-21) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fort-missile-target-steamescape + :id 582 + :bounds (static-bspherem 0 0 0 6) + :parts ((sp-item 2608 :fade-after (meters 150) :falloff-to (meters 200) :flags (bit7))) + ) + +;; failed to figure out what this is: +(defpart 2608 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 2.0 2.0 1.0) + (sp-rnd-flt spt-z (meters 0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 24.0 48.0 1.0) + (sp-rnd-flt spt-vel-z (meters 0.06666667) (meters 0.033333335) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.01) (meters 0.02) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.21333334) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.21333334) + (sp-rnd-flt spt-fade-a -0.48 -0.48 1.0) + (sp-rnd-flt spt-accel-y 4.096 4.096 1.0) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 1800) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int-plain-rnd spt-next-time 75 4 1) + (sp-launcher-by-id spt-next-launcher 2609) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-fort-missile-engulfing-death + :id 583 + :bounds (static-bspherem 0 0 0 5) + :parts ((sp-item 2610 :flags (bit7))) + ) + +;; failed to figure out what this is: +(defpart 2610 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-rnd-flt spt-num 20.0 5.0 1.0) + (sp-flt spt-x (meters 5)) + (sp-rnd-flt spt-z (meters -5) (meters 10) 1.0) + (sp-rnd-flt spt-scale-x (meters 5) (meters 10) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 240.0 15.0 1.0) + (sp-rnd-flt spt-g 200.0 16.0 1.0) + (sp-rnd-flt spt-b 160.0 16.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.20833333)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-fade-r -2.1333334 -1.0666667 1.0) + (sp-rnd-flt spt-fade-g -4.266667 -2.1333334 1.0) + (sp-flt spt-fade-b -5.3333335) + (sp-int-plain-rnd spt-timer 160 79 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc00000 #xc03300) + ) + (sp-int-plain-rnd spt-next-time 30 9 1) + (sp-launcher-by-id spt-next-launcher 2611) + ) + ) + +;; failed to figure out what this is: +(defpart 2611 + :init-specs ((sp-flt spt-b 0.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-rnd-flt spt-fade-a -0.4 -0.2 1.0) + (sp-int-plain-rnd spt-next-time 5 9 1) + (sp-launcher-by-id spt-next-launcher 2612) + ) + ) + +;; failed to figure out what this is: +(defpart 2612 + :init-specs ((sp-flt spt-fade-r -0.125) (sp-flt spt-fade-g 0.4) (sp-flt spt-fade-b 0.4)) + ) + + + + diff --git a/test/decompiler/reference/jak2/levels/sewer/gator_REF.gc b/test/decompiler/reference/jak2/levels/sewer/gator_REF.gc new file mode 100644 index 0000000000..6605aa3e8e --- /dev/null +++ b/test/decompiler/reference/jak2/levels/sewer/gator_REF.gc @@ -0,0 +1,639 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defskelgroup skel-gator amphibian amphibian-lod0-jg -1 + ((amphibian-lod0-mg (meters 20)) (amphibian-lod1-mg (meters 999999))) + :bounds (static-spherem 0 1 0 5.5) + ) + +;; definition of type gator +(deftype gator (nav-enemy) + ((ocean-y float :offset-assert 604) + (lock-nav-target basic :offset-assert 608) + (new-facing vector :inline :offset-assert 624) + (old-facing vector :inline :offset-assert 640) + (turn-time time-frame :offset-assert 656) + ) + :heap-base #x220 + :method-count-assert 182 + :size-assert #x298 + :flag-assert #xb602200298 + (:methods + (attack-forward () _type_ :state 178) + (gator-method-179 (_type_) float 179) + (gator-method-180 (_type_ vector) vector 180) + (gator-method-181 (_type_ float float symbol) time-frame 181) + ) + ) + +;; definition for method 3 of type gator +(defmethod inspect gator ((obj gator)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~2Tocean-y: ~f~%" (-> obj ocean-y)) + (format #t "~2Tlock-nav-target: ~A~%" (-> obj lock-nav-target)) + (format #t "~2Tnew-facing: #~%" (-> obj new-facing)) + (format #t "~2Told-facing: #~%" (-> obj old-facing)) + (format #t "~2Tturn-time: ~D~%" (-> obj turn-time)) + (label cfg-4) + obj + ) + +;; definition for symbol *gator-nav-enemy-info*, type nav-enemy-info +(define *gator-nav-enemy-info* (new 'static 'nav-enemy-info + :use-die-falling #t + :use-victory #f + :use-jump-blocked #f + :debug-draw-neck #f + :jump-debug-draw #f + :move-to-ground #f + :hover-if-no-ground #f + :idle-anim-script (new 'static 'array uint32 4 #x1e0002 #x64640d01 #x0 #x0) + :idle-anim 13 + :notice-anim 13 + :hostile-anim 14 + :hit-anim 6 + :knocked-anim 6 + :knocked-land-anim 7 + :die-anim 12 + :die-falling-anim 21 + :victory-anim -1 + :jump-wind-up-anim 13 + :jump-in-air-anim 13 + :jump-land-anim 13 + :neck-joint -1 + :look-at-joint 12 + :bullseye-joint 4 + :sound-hit (static-sound-name "gator-hit") + :sound-die (static-sound-name "gator-die") + :notice-distance (meters 80) + :notice-distance-delta (meters 10) + :proximity-notice-distance (meters 40) + :default-hit-points 1 + :gnd-collide-with (collide-spec backgnd) + :overlaps-others-collide-with-filter (collide-spec jak bot player-list) + :movement-gravity (meters -100) + :friction 0.8 + :attack-shove-back (meters 3.5) + :attack-shove-up (meters 2) + :attack-mode 'generic + :attack-damage 2 + :recover-gnd-collide-with (collide-spec backgnd crate obstacle hit-by-others-list pusher) + :jump-height-min (meters 3) + :jump-height-factor 0.5 + :knocked-seek-ry-clamp 6371.5557 + :knocked-soft-vxz-lo 72089.6 + :knocked-soft-vxz-hi 108134.4 + :knocked-soft-vy-lo 81920.0 + :knocked-soft-vy-hi 122880.0 + :knocked-medium-vxz-lo 147456.0 + :knocked-medium-vxz-hi 196608.0 + :knocked-medium-vy-lo 135168.0 + :knocked-medium-vy-hi 151552.0 + :knocked-hard-vxz-lo 78643.2 + :knocked-hard-vxz-hi 117964.8 + :knocked-hard-vy-lo 183500.8 + :knocked-hard-vy-hi 209715.2 + :knocked-huge-vxz-lo 164659.2 + :knocked-huge-vxz-hi 249036.8 + :knocked-huge-vy-lo 183500.8 + :knocked-huge-vy-hi 217907.2 + :knocked-yellow-vxz-lo 40960.0 + :knocked-yellow-vxz-hi 49152.0 + :knocked-yellow-vy-lo 57344.0 + :knocked-yellow-vy-hi 81920.0 + :knocked-red-vxz-lo 24576.0 + :knocked-red-vxz-hi 196608.0 + :knocked-red-vy-lo 94208.0 + :knocked-red-vy-hi 151552.0 + :knocked-blue-vxz-lo 40960.0 + :knocked-blue-vxz-hi 49152.0 + :knocked-blue-vy-lo 24576.0 + :knocked-blue-vy-hi 81920.0 + :shadow-size (meters 1) + :shadow-max-y (meters 1) + :shadow-min-y (meters -1) + :shadow-locus-dist (meters 150) + :gem-joint -1 + :gem-offset (new 'static 'sphere :r 163840.0) + :callback-info #f + :use-momentum #f + :use-frustration #t + :use-stop-chase #f + :use-circling #t + :use-pacing #t + :walk-anim 13 + :turn-anim -1 + :run-anim 14 + :taunt-anim -1 + :run-travel-speed (meters 16) + :run-acceleration (meters 8) + :run-turning-acceleration (meters 40) + :walk-travel-speed (meters 4) + :walk-acceleration (meters 8) + :walk-turning-acceleration (meters 10) + :maximum-rotation-rate (degrees 200.00002) + :notice-nav-radius (meters 2) + :frustration-distance (meters 8) + :frustration-time (seconds 4) + :blocked-time (seconds 0.3) + :circle-dist-lo 20480.0 + :circle-dist-hi 61440.0 + :nav-mesh #f + ) + ) + +;; failed to figure out what this is: +(set! (-> *gator-nav-enemy-info* fact-defaults) *fact-info-enemy-defaults*) + +;; definition for method 74 of type gator +(defmethod enemy-method-74 gator ((obj gator) (arg0 process) (arg1 object) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('hit-knocked) + (when (= (-> obj incoming knocked-type) (knocked-type knocked-type-4)) + (set! (-> obj incoming knocked-type) (knocked-type knocked-type-0)) + 0 + ) + ((method-of-type nav-enemy enemy-method-74) obj arg0 arg1 arg2 arg3) + ) + (('track) + #f + ) + (else + ((method-of-type nav-enemy enemy-method-74) obj arg0 arg1 arg2 arg3) + ) + ) + ) + +;; definition for method 179 of type gator +(defmethod gator-method-179 gator ((obj gator)) + (set! (-> obj ocean-y) (get-height *ocean* (-> obj root-override2 trans) #t)) + (set! (-> obj root-override2 trans y) (+ -10240.0 (-> obj ocean-y))) + ) + +;; definition for method 180 of type gator +;; INFO: Used lq/sq +(defmethod gator-method-180 gator ((obj gator) (arg0 vector)) + (let ((a0-3 (quaternion->matrix (new 'stack-no-clear 'matrix) (-> obj root-override2 quat)))) + (set! (-> arg0 quad) (-> a0-3 vector 2 quad)) + ) + arg0 + ) + +;; definition for method 181 of type gator +(defmethod gator-method-181 gator ((obj gator) (arg0 float) (arg1 float) (arg2 symbol)) + (local-vars (v1-17 object) (a0-5 object)) + (with-pp + (let ((f30-0 (vector-dot (-> obj new-facing) (-> obj old-facing))) + (s5-0 75) + (s4-0 (the-as art-joint-anim (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + ) + (b! (not arg2) cfg-26 :delay (nop!)) + (set! s5-0 18) + (b! (>= f30-0 (cos (* 182.04445 arg0))) cfg-8 :delay #f) + (if (< (-> (vector-cross! (new 'stack-no-clear 'vector) (-> obj new-facing) (-> obj old-facing)) y) 0.0) + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 40))) + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 39))) + ) + (b! #t cfg-25 :delay (nop!)) + (label cfg-8) + (let ((v1-16 (< (cos (* 182.04445 arg1)) f30-0))) + (b! v1-16 cfg-23 :likely-delay (set! v1-17 v1-16)) + ) + (let ((v1-20 (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + (b! (not v1-20) cfg-21 :likely-delay (set! a0-5 v1-20)) + (let ((a1-3 (= v1-20 (-> obj draw art-group data 14)))) + (b! a1-3 cfg-21 :likely-delay (set! a0-5 a1-3)) + ) + (let ((a1-4 (= v1-20 (-> obj draw art-group data 40)))) + (b! a1-4 cfg-21 :likely-delay (set! a0-5 a1-4)) + ) + (set! a0-5 (= v1-20 (-> obj draw art-group data 39))) + ) + (label cfg-21) + (b! (not a0-5) cfg-23 :delay (set! v1-17 #t)) + (set! v1-17 #f) + (label cfg-23) + (if v1-17 + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 14))) + ) + (label cfg-25) + (b! #t cfg-48 :delay (nop!)) + (label cfg-26) + (b! (>= f30-0 (cos (* 182.04445 arg0))) cfg-31 :delay #f) + (if (< (-> (vector-cross! (new 'stack-no-clear 'vector) (-> obj new-facing) (-> obj old-facing)) y) 0.0) + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 38))) + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 37))) + ) + (b! #t cfg-48 :delay (nop!)) + (label cfg-31) + (if (or (< (cos (* 182.04445 arg1)) f30-0) (let ((v1-41 (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + (not (and v1-41 (or (= v1-41 (-> obj draw art-group data 13)) + (= v1-41 (-> obj draw art-group data 38)) + (= v1-41 (-> obj draw art-group data 37)) + ) + ) + ) + ) + ) + (set! s4-0 (the-as art-joint-anim (-> obj draw art-group data 13))) + ) + (label cfg-48) + (let ((v1-50 (if (> (-> obj skel active-channels) 0) + (-> obj skel root-channel 0 frame-group) + ) + ) + ) + (when (and (not (and v1-50 (= v1-50 (the-as art-element s4-0)))) + (>= (- (-> pp clock frame-counter) (the-as time-frame s5-0)) (-> obj turn-time)) + ) + (let ((f30-2 (/ (ja-frame-num 0) (the float (ja-num-frames 0))))) + (ja-channel-push! 1 (the-as time-frame s5-0)) + (set! (-> obj skel root-channel 0 frame-group) s4-0) + (let ((s5-1 (-> obj skel root-channel 0))) + (set! (-> s5-1 num-func) num-func-identity) + (set! (-> s5-1 frame-num) (* f30-2 (the float (ja-num-frames 0)))) + ) + ) + (let ((v0-4 (-> pp clock frame-counter))) + (set! (-> obj turn-time) v0-4) + v0-4 + ) + ) + ) + ) + ) + ) + +;; definition for method 55 of type gator +;; INFO: Used lq/sq +;; WARN: Return type mismatch vector vs none. +(defmethod enemy-method-55 gator ((obj gator)) + (let ((t9-0 (method-of-type nav-enemy enemy-method-55))) + (t9-0 obj) + ) + (gator-method-179 obj) + (set! (-> obj old-facing quad) (-> obj new-facing quad)) + (gator-method-180 obj (-> obj new-facing)) + (none) + ) + +;; definition for method 56 of type gator +(defmethod enemy-method-56 gator ((obj gator) (arg0 process) (arg1 event-message-block)) + 0 + ) + +;; definition for method 70 of type gator +;; WARN: Return type mismatch object vs none. +(defmethod go-hostile gator ((obj gator)) + (go (method-of-object obj hostile)) + (none) + ) + +;; definition for method 107 of type gator +(defmethod enemy-method-107 gator ((obj gator)) + (let ((gp-0 ((method-of-type nav-enemy enemy-method-107) obj))) + (if (and gp-0 (< (+ 1024.0 (get-height *ocean* (get-trans gp-0 0) #t)) (-> (get-trans gp-0 1) y))) + (set! gp-0 (the-as process-focusable #f)) + ) + gp-0 + ) + ) + +;; definition for method 98 of type gator +;; INFO: Used lq/sq +(defmethod enemy-method-98 gator ((obj gator) (arg0 process-focusable) (arg1 vector)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (when (and (= *target* arg0) (not arg1) (= (-> *target* control ground-pat material) (pat-material waterbottom))) + (set! (-> s4-0 quad) (-> (get-trans arg0 0) quad)) + (set! (-> s4-0 y) (get-height *ocean* s4-0 #t)) + (set! arg1 s4-0) + ) + ) + ((method-of-type nav-enemy enemy-method-98) obj arg0 arg1) + ) + +;; failed to figure out what this is: +(defstate hostile (gator) + :virtual #t + :trans (behavior () + (let ((t9-0 (-> (method-of-type nav-enemy hostile) trans))) + (if t9-0 + (t9-0) + ) + ) + (let ((a0-1 (enemy-method-107 self))) + (when a0-1 + (let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (get-trans a0-1 0) (-> self root-override2 trans))) + (a0-4 (-> self nav state)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> a0-4 heading quad)) + 0 + (let ((v1-10 (vector-normalize-ret-len! gp-1 1.0))) + (if (and (>= #x47000000 (the-as int v1-10)) (< (cos 5461.3335) (vector-dot gp-1 s5-0))) + (go-virtual attack-forward) + ) + ) + ) + ) + ) + (none) + ) + :code (behavior () + (let ((f30-0 (get-rand-float-range self 0.9 1.1))) + (until #f + (gator-method-181 self 2.0 0.5 #t) + (suspend) + (ja :num! (loop! f30-0)) + ) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate attack-forward (gator) + :virtual #t + :event (the-as (function process int symbol event-message-block object :behavior gator) enemy-event-handler) + :enter (behavior () + (set! (-> self enemy-flags) (logior (enemy-flag actor-pause-backup) (-> self enemy-flags))) + (let ((v1-2 self)) + (if (not (logtest? (enemy-flag enemy-flag36) (-> v1-2 enemy-flags))) + (set! (-> v1-2 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag38) (-> v1-2 enemy-flags)))) + ) + (set! (-> v1-2 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag36) (-> v1-2 enemy-flags)))) + (set! (-> v1-2 nav callback-info) (-> v1-2 enemy-info-override callback-info)) + ) + 0 + (let ((v1-5 self)) + (set! (-> v1-5 enemy-flags) (the-as enemy-flag (logior (enemy-flag enemy-flag37) (-> v1-5 enemy-flags)))) + ) + 0 + (let ((v1-8 (-> self nav state))) + (set! (-> v1-8 speed) (* 1.25 (-> self enemy-info-override run-travel-speed))) + ) + 0 + (set! (-> self lock-nav-target) #f) + (logior! (-> self focus-status) (focus-status dangerous)) + (let* ((v1-12 *game-info*) + (v0-0 (+ (-> v1-12 attack-id) 1)) + ) + (set! (-> v1-12 attack-id) v0-0) + (set! (-> self attack-id) v0-0) + ) + (none) + ) + :exit (behavior () + (logclear! (-> self enemy-flags) (enemy-flag actor-pause-backup)) + (if (logtest? (-> self enemy-flags) (enemy-flag check-water)) + (logior! (-> self focus-status) (focus-status dangerous)) + (logclear! (-> self focus-status) (focus-status dangerous)) + ) + (none) + ) + :trans (behavior () + (let ((gp-0 (handle->process (-> self focus handle)))) + (if (not gp-0) + (enemy-method-72 self) + ) + (set! (-> self focus-pos quad) (-> (get-trans (the-as process-focusable gp-0) 0) quad)) + ) + (cond + ((-> self lock-nav-target) + ) + ((or (logtest? (-> self enemy-flags) (enemy-flag look-at-focus)) + (logtest? (-> self nav state flags) (nav-state-flag at-target)) + ) + (set! (-> self lock-nav-target) (the-as basic #t)) + (let ((v1-16 (-> self nav))) + (set! (-> v1-16 target-speed) (-> self enemy-info-override walk-travel-speed)) + ) + 0 + (let ((v1-18 (-> self nav))) + (set! (-> v1-18 acceleration) 131072.0) + ) + 0 + (let ((gp-1 (new 'stack-no-clear 'vector))) + (let ((a1-2 (-> self nav state))) + (set! (-> gp-1 quad) (-> a1-2 velocity quad)) + ) + (vector-normalize! gp-1 32768.0) + (vector+! gp-1 gp-1 (-> self root-override2 trans)) + (let ((v1-24 (-> self nav state))) + (logclear! (-> v1-24 flags) (nav-state-flag directional-mode)) + (logior! (-> v1-24 flags) (nav-state-flag target-poly-dirty)) + (set! (-> v1-24 target-post quad) (-> gp-1 quad)) + ) + ) + 0 + ) + (else + (let ((a0-19 (-> self nav state)) + (v1-27 (-> self focus-pos)) + ) + (logclear! (-> a0-19 flags) (nav-state-flag directional-mode)) + (logior! (-> a0-19 flags) (nav-state-flag target-poly-dirty)) + (set! (-> a0-19 target-post quad) (-> v1-27 quad)) + ) + 0 + ) + ) + (none) + ) + :code (behavior () + (ja-channel-push! 1 (seconds 0.07)) + (ja-no-eval :group! (-> self draw art-group data 15) + :num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 15)) frames num-frames) -1))) + :frame-num (ja-aframe 0.0 0) + ) + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (let ((a1-4 (new 'stack-no-clear 'vector))) + (let ((a2-2 (-> self nav state))) + (set! (-> a1-4 quad) (-> a2-2 target-post quad)) + ) + (if (and (-> self lock-nav-target) (< (vector-vector-distance (-> self root-override2 trans) a1-4) 8192.0)) + (enemy-method-72 self) + ) + ) + (suspend) + (ja :num! (seek!)) + ) + (enemy-method-72 self) + (none) + ) + :post (the-as (function none :behavior gator) nav-enemy-travel-post) + ) + +;; failed to figure out what this is: +(defstate pacing (gator) + :virtual #t + :code (behavior () + (let ((f30-0 (get-rand-float-range self 0.9 1.1))) + (until #f + (gator-method-181 self 2.0 0.5 #f) + (suspend) + (ja :num! (loop! f30-0)) + ) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate stare (gator) + :virtual #t + :enter (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (none) + ) + :trans (behavior () + (let ((t9-0 (-> (method-of-type nav-enemy stare) trans))) + (if t9-0 + (t9-0) + ) + ) + (if (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 0.017)) + (go-virtual pacing) + ) + (none) + ) + :code (behavior () + (let ((f30-0 (get-rand-float-range self 0.9 1.1))) + (until #f + (gator-method-181 self 2.0 0.5 #f) + (suspend) + (ja :num! (loop! f30-0)) + ) + ) + #f + (none) + ) + ) + +;; definition for method 60 of type gator +(defmethod coin-flip? gator ((obj gator)) + "@returns The result of a 50/50 RNG roll" + #f + ) + +;; definition for method 114 of type gator +;; WARN: Return type mismatch int vs none. +(defmethod enemy-method-114 gator ((obj gator)) + "@abstract" + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) cshape-reaction-default) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (set! (-> s5-0 penetrated-by) (penetrate + generic-attack + lunge + flop + punch + spin + roll + uppercut + bonk + tube + vehicle + flut-attack + board + mech-punch + dark-punch + dark-giant + ) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 4) 0))) + (set! (-> s5-0 total-prims) (the-as uint 5)) + (set! (-> s4-0 prim-core collide-as) (collide-spec enemy)) + (set! (-> s4-0 prim-core collide-with) + (collide-spec backgnd jak bot crate obstacle hit-by-others-list player-list) + ) + (set! (-> s4-0 prim-core action) (collide-action deadly no-standon)) + (set-vector! (-> s4-0 local-sphere) 0.0 8192.0 0.0 19660.8) + (set! (-> s5-0 root-prim) s4-0) + ) + (let ((v1-13 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-13 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-13 prim-core collide-with) (collide-spec jak bot crate hit-by-others-list player-list)) + (set! (-> v1-13 prim-core action) (collide-action no-standon)) + (set-vector! (-> v1-13 local-sphere) 0.0 4915.2 0.0 4915.2) + ) + (let ((v1-15 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-15 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-15 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-15 prim-core action) (collide-action deadly)) + (set! (-> v1-15 transform-index) 12) + (set-vector! (-> v1-15 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (let ((v1-17 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-17 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-17 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-17 transform-index) 20) + (set-vector! (-> v1-17 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (let ((v1-19 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-19 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-19 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-19 transform-index) 22) + (set-vector! (-> v1-19 local-sphere) 0.0 0.0 0.0 4505.6) + ) + (set! (-> s5-0 nav-radius) 8192.0) + (let ((v1-21 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-21 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-21 prim-core collide-with)) + ) + (set! (-> s5-0 max-iteration-count) (the-as uint 3)) + (set! (-> obj root-override2) s5-0) + ) + 0 + (none) + ) + +;; definition for method 115 of type gator +;; WARN: Return type mismatch int vs none. +(defmethod enemy-method-115 gator ((obj gator)) + "@abstract" + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-gator" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (enemy-method-113 obj *gator-nav-enemy-info*) + (let ((v1-5 (-> obj nav))) + (set! (-> v1-5 speed-scale) 1.0) + ) + 0 + (set-gravity-length (-> obj root-override2 dynam) 573440.0) + (logior! (-> obj nav flags) (nav-control-flag momentum-ignore-heading)) + (gator-method-179 obj) + (set! (-> obj turn-time) 0) + 0 + (none) + ) diff --git a/test/decompiler/reference/jak2/levels/sewer/sewer-obs2_REF.gc b/test/decompiler/reference/jak2/levels/sewer/sewer-obs2_REF.gc new file mode 100644 index 0000000000..248b2080f7 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/sewer/sewer-obs2_REF.gc @@ -0,0 +1,2035 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type sew-elevator +(deftype sew-elevator (elevator) + ((sound-id sound-id :offset-assert 368) + ) + :heap-base #x100 + :method-count-assert 50 + :size-assert #x174 + :flag-assert #x3201000174 + (:methods + (sew-elevator-method-49 (_type_ symbol) none 49) + ) + ) + +;; definition for method 3 of type sew-elevator +(defmethod inspect sew-elevator ((obj sew-elevator)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type elevator inspect))) + (t9-0 obj) + ) + (format #t "~2Tsound-id: ~D~%" (-> obj sound-id)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-elevator sew-elevator sew-elevator-lod0-jg sew-elevator-idle-ja + ((sew-elevator-lod0-mg (meters 999999))) + :bounds (static-spherem 0 0 5.6 9.2) + ) + +;; definition for method 30 of type sew-elevator +(defmethod get-art-group sew-elevator ((obj sew-elevator)) + "@returns The associated [[art-group]]" + (art-group-get-by-name *level* "skel-sew-elevator" (the-as (pointer uint32) #f)) + ) + +;; definition for method 43 of type sew-elevator +(defmethod elevator-method-43 sew-elevator ((obj sew-elevator) (arg0 vector) (arg1 float) (arg2 float)) + (let ((s4-0 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) arg1 'interp)) + (a0-3 (get-point-in-path! (-> obj path) (new 'stack-no-clear 'vector) arg2 'interp)) + (v1-3 (-> obj root-override trans)) + ) + (when (and (< (-> a0-3 y) (-> s4-0 y)) (< (-> arg0 y) (+ -8192.0 (-> v1-3 y)))) + (let ((s4-2 (vector-! (new 'stack-no-clear 'vector) arg0 v1-3))) + (vector-inv-orient-by-quat! s4-2 s4-2 (-> obj root-override quat)) + (and (< (fabs (-> s4-2 x)) 24576.0) (< 0.0 (-> s4-2 z)) (< (-> s4-2 z) 49152.0)) + ) + ) + ) + ) + +;; definition for method 45 of type sew-elevator +(defmethod elevator-method-45 sew-elevator ((obj sew-elevator)) + "@returns Stub, or always returns [[#t]]" + (let* ((gp-0 *target*) + (a0-2 (if (type? gp-0 process-focusable) + gp-0 + ) + ) + ) + (when a0-2 + (let* ((v1-1 (get-trans a0-2 0)) + (gp-2 (vector-! (new 'stack-no-clear 'vector) v1-1 (-> obj root-override trans))) + ) + (vector-inv-orient-by-quat! gp-2 gp-2 (-> obj root-override quat)) + (and (< (fabs (-> gp-2 x)) 20480.0) (< 0.0 (-> gp-2 z)) (< (-> gp-2 z) 40960.0)) + ) + ) + ) + ) + +;; definition for method 49 of type sew-elevator +;; WARN: Return type mismatch int vs none. +(defmethod sew-elevator-method-49 sew-elevator ((obj sew-elevator) (arg0 symbol)) + (let ((v1-3 (-> (the-as collide-shape-prim-group (-> obj root-override root-prim)) child 1))) + (cond + (arg0 + (set! (-> v1-3 prim-core collide-as) (collide-spec obstacle pusher)) + (set! (-> v1-3 prim-core collide-with) (collide-spec jak player-list)) + ) + (else + (set! (-> v1-3 prim-core collide-as) (collide-spec)) + (set! (-> v1-3 prim-core collide-with) (collide-spec)) + 0 + ) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate running (sew-elevator) + :virtual #t + :enter (behavior () + (let ((t9-0 (-> (method-of-type elevator running) enter))) + (if t9-0 + (t9-0) + ) + ) + (when (and (logtest? (-> self elevator-status) (elevator-status elevator-status-0)) + (logtest? (elevator-flags elevator-flags-16) (-> self params flags)) + ) + (sew-elevator-method-49 self #t) + (set-setting! 'jump #f 0 0) + ) + (none) + ) + :post (behavior () + (let ((t9-0 (-> (method-of-type elevator running) post))) + (if t9-0 + ((the-as (function none) t9-0)) + ) + ) + (sound-play "sew-elevator-lp" :id (-> self sound-id) :position (-> self root-override trans)) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate arrived (sew-elevator) + :virtual #t + :enter (behavior () + (let ((t9-0 (-> (method-of-type elevator arrived) enter))) + (if t9-0 + (t9-0) + ) + ) + (sound-stop (-> self sound-id)) + (sound-play "sew-elev-stop") + (when (and (logtest? (-> self elevator-status) (elevator-status elevator-status-0)) + (logtest? (elevator-flags elevator-flags-16) (-> self params flags)) + ) + (sew-elevator-method-49 self #f) + (remove-setting! 'jump) + ) + (none) + ) + ) + +;; definition for method 10 of type sew-elevator +(defmethod deactivate sew-elevator ((obj sew-elevator)) + (sound-stop (-> obj sound-id)) + ((the-as (function elevator none) (find-parent-method sew-elevator 10)) obj) + (none) + ) + +;; definition for method 33 of type sew-elevator +;; WARN: Return type mismatch int vs none. +(defmethod base-plat-method-33 sew-elevator ((obj sew-elevator)) + (set! (-> obj sound-id) (new-sound-id)) + 0 + (none) + ) + +;; definition for method 41 of type sew-elevator +;; WARN: Return type mismatch int vs none. +(defmethod init-defaults! sew-elevator ((obj sew-elevator)) + "Initializes default settings related to the [[elevator]]: + - `elevator-xz-threshold` + - `elevator-y-threshold` + - `elevator-start-pos` + - `elevator-move-rate` + - `elevator-flags`" + (let ((t9-0 (method-of-type elevator init-defaults!))) + (t9-0 obj) + ) + (if (name= (-> obj name) "sew-elevator-15") + (set! (-> obj params xz-threshold) 348160.0) + (set! (-> obj params xz-threshold) 184320.0) + ) + (when (and (logtest? (elevator-flags elevator-flags-17) (-> obj params flags)) + (and (task-node-closed? (game-task-node sewer-escort-introduction)) + (not (task-node-closed? (game-task-node sewer-escort-resolution))) + ) + ) + (set! (-> obj params start-pos) 0.0) + (logior! (-> obj params flags) (elevator-flags elevator-flags-3)) + ) + 0 + (none) + ) + +;; definition for method 31 of type sew-elevator +(defmethod base-plat-method-31 sew-elevator ((obj sew-elevator)) + "TODO - collision stuff" + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) cshape-reaction-default) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) + (set! (-> s5-0 total-prims) (the-as uint 3)) + (set! (-> s4-0 prim-core collide-as) (collide-spec obstacle camera-blocker pusher)) + (set! (-> s4-0 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> s4-0 prim-core action) (collide-action solid rideable)) + (set! (-> s4-0 transform-index) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 22937.6 37683.2) + (set! (-> s5-0 root-prim) s4-0) + ) + (pusher-init s5-0) + (let ((v1-15 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-15 prim-core collide-as) (collide-spec obstacle camera-blocker pusher)) + (set! (-> v1-15 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-15 prim-core action) (collide-action solid rideable)) + (set! (-> v1-15 transform-index) 3) + (set-vector! (-> v1-15 local-sphere) 0.0 0.0 22937.6 37683.2) + ) + (let ((v1-17 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> v1-17 prim-core action) (collide-action solid)) + (set! (-> v1-17 transform-index) 3) + (set-vector! (-> v1-17 local-sphere) 0.0 0.0 22937.6 39321.6) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-20 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-20 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-20 prim-core collide-with)) + ) + (set! (-> obj root-override) s5-0) + ) + (sew-elevator-method-49 obj #f) + (none) + ) + +;; definition of type sew-valve +(deftype sew-valve (process-drawable) + ((joint joint-mod-rotate-local :offset-assert 200) + (actor-group (pointer actor-group) :offset-assert 204) + (actor-group-count int32 :offset-assert 208) + (water-height float :offset-assert 212) + (spin float :offset-assert 216) + (spin-rate float :offset-assert 220) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xe0 + :flag-assert #x16006000e0 + (:methods + (idle () _type_ :state 20) + (turn () _type_ :state 21) + ) + ) + +;; definition for method 3 of type sew-valve +(defmethod inspect sew-valve ((obj sew-valve)) + (when (not obj) + (set! obj obj) + (goto cfg-7) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tjoint: ~A~%" (-> obj joint)) + (format #t "~2Tactor-group: #x~X~%" (-> obj actor-group)) + (dotimes (s5-0 (-> obj actor-group-count)) + (format #t "~T [~D]~2Tactor-group: ~`actor-group`P~%" s5-0 (-> obj actor-group s5-0)) + ) + (format #t "~2Tactor-group-count: ~D~%" (-> obj actor-group-count)) + (format #t "~2Twater-height: ~f~%" (-> obj water-height)) + (format #t "~2Tspin: ~f~%" (-> obj spin)) + (format #t "~2Tspin-rate: ~f~%" (-> obj spin-rate)) + (label cfg-7) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-valve sew-valve sew-valve-lod0-jg sew-valve-idle-ja + ((sew-valve-lod0-mg (meters 20)) (sew-valve-lod1-mg (meters 999999))) + :bounds (static-spherem 0 0 0 2) + ) + +;; failed to figure out what this is: +(defstate idle (sew-valve) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('attack) + (case (-> (the-as attack-info (-> event param 1)) mode) + (('spin 'punch 'flop 'uppercut) + (if (!= (-> self water-height) (get-base-height *ocean-map-sewer*)) + (go-virtual turn) + ) + ) + ) + ) + ) + ) + :code (the-as (function none :behavior sew-valve) transform-and-sleep) + ) + +;; failed to figure out what this is: +(defstate turn (sew-valve) + :virtual #t + :enter (behavior () + (set! (-> self joint enable) #t) + (set! (-> self spin-rate) 196608.0) + (logclear! (-> self mask) (process-mask actor-pause)) + (sound-play "sew-valve") + (dotimes (v1-5 (-> self actor-group-count)) + (dotimes (a0-4 (-> self actor-group v1-5 length)) + (let ((a1-5 (-> self actor-group v1-5 data a0-4 actor))) + (if a1-5 + (logior! (-> a1-5 extra perm status) (entity-perm-status bit-10)) + ) + ) + ) + ) + (let ((gp-1 (res-lump-struct (-> self entity) 'on-activate structure))) + (if gp-1 + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f)) + (the-as pair gp-1) + ) + ) + ) + (none) + ) + :exit (behavior () + (set! (-> self joint enable) #f) + (logior! (-> self mask) (process-mask actor-pause)) + (none) + ) + :trans (behavior () + (if (= (-> self water-height) (get-base-height *ocean-map-sewer*)) + (go-virtual idle) + ) + (none) + ) + :code (the-as (function none :behavior sew-valve) sleep-code) + :post (behavior () + (seek! (-> self spin-rate) 0.0 (* 81920.0 (-> self clock seconds-per-frame))) + (+! (-> self spin) (* (-> self spin-rate) (-> self clock seconds-per-frame))) + (quaternion-axis-angle! (-> self joint rotation) 0.0 0.0 1.0 (-> self spin)) + (let* ((f0-8 (- (get-base-height *ocean-map-sewer*) (-> self water-height))) + (f30-0 f0-8) + (f28-0 (seek-ease + f0-8 + 0.0 + (* (lerp 21299.2 8192.0 (* 0.000005086263 (-> self spin-rate))) (-> self clock seconds-per-frame)) + 12288.0 + 2.0 + ) + ) + ) + (set-height! *ocean-map-sewer* (+ (-> self water-height) f28-0)) + (if (and *target* + (logtest? (focus-status board) (-> *target* focus-status)) + (logtest? (-> *target* focus-status) (focus-status touch-water)) + ) + (+! (-> *target* control trans y) (- f28-0 f30-0)) + ) + ) + (ja-post) + (none) + ) + ) + +;; definition for method 7 of type sew-valve +;; WARN: Return type mismatch process-drawable vs sew-valve. +(defmethod relocate sew-valve ((obj sew-valve) (arg0 int)) + (if (nonzero? (-> obj joint)) + (&+! (-> obj joint) arg0) + ) + (the-as + sew-valve + ((the-as (function process-drawable int process-drawable) (find-parent-method sew-valve 7)) obj arg0) + ) + ) + +;; definition for method 11 of type sew-valve +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-valve ((obj sew-valve) (arg0 entity-actor)) + (local-vars (sv-16 res-tag) (sv-32 res-tag)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((v1-6 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> v1-6 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-6 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-6 prim-core action) (collide-action solid)) + (set! (-> v1-6 transform-index) 3) + (set-vector! (-> v1-6 local-sphere) 0.0 0.0 1638.4 3276.8) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) v1-6) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-9 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-9 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-9 prim-core collide-with)) + ) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-valve" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj spin) 0.0) + (set! (-> obj spin-rate) 0.0) + (set! (-> obj joint) (new 'process 'joint-mod-rotate-local obj 4 #f)) + (set! sv-16 (new 'static 'res-tag)) + (set! (-> obj actor-group) + (res-lump-data (-> obj entity) 'actor-groups (pointer actor-group) :tag-ptr (& sv-16)) + ) + (set! (-> obj actor-group-count) (the-as int (-> sv-16 elt-count))) + (set! sv-32 (new 'static 'res-tag)) + (let ((v1-22 (res-lump-data (-> obj entity) 'extra-float-param pointer :tag-ptr (& sv-32)))) + (if (and v1-22 (nonzero? (-> sv-32 elt-count))) + (set! (-> obj water-height) (-> (the-as (pointer float) v1-22))) + (set! (-> obj water-height) 0.0) + ) + ) + (format #t "~S water-height: ~m~%" (-> obj name) (-> obj water-height)) + (set! (-> obj water-height) (+ -216498.17 (-> obj water-height))) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type sew-mar-statue-debris +(deftype sew-mar-statue-debris (process-drawable) + () + :heap-base #x50 + :method-count-assert 21 + :size-assert #xc8 + :flag-assert #x15005000c8 + (:methods + (idle () _type_ :state 20) + ) + ) + +;; definition for method 3 of type sew-mar-statue-debris +(defmethod inspect sew-mar-statue-debris ((obj sew-mar-statue-debris)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; definition of type sew-mar-statue-debris-b +(deftype sew-mar-statue-debris-b (process-drawable) + () + :heap-base #x50 + :method-count-assert 21 + :size-assert #xc8 + :flag-assert #x15005000c8 + (:methods + (idle () _type_ :state 20) + ) + ) + +;; definition for method 3 of type sew-mar-statue-debris-b +(defmethod inspect sew-mar-statue-debris-b ((obj sew-mar-statue-debris-b)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; definition of type sew-mar-statue +(deftype sew-mar-statue (process-drawable) + ((root-override collide-shape :offset 128) + (spawned-debris? symbol :offset-assert 200) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xcc + :flag-assert #x16005000cc + (:methods + (idle () _type_ :state 20) + (hidden () _type_ :state 21) + ) + ) + +;; definition for method 3 of type sew-mar-statue +(defmethod inspect sew-mar-statue ((obj sew-mar-statue)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tspawned-debris?: ~A~%" (-> obj spawned-debris?)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-mar-statue sew-mar-statue 0 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 7.5 0 14.4) + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-mar-statue-explode-a sew-mar-statue-explode sew-mar-statue-explode-a-lod0-jg sew-mar-statue-explode-a-idle-ja + ((sew-mar-statue-explode-a-lod0-mg (meters 999999))) + :bounds (static-spherem 0 0 0 50) + :origin-joint-index 4 + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-mar-statue-explode-b sew-mar-statue-explode sew-mar-statue-explode-b-lod0-jg sew-mar-statue-explode-b-idle-ja + ((sew-mar-statue-explode-b-lod0-mg (meters 999999))) + :bounds (static-spherem 0 0 0 50) + :origin-joint-index 6 + ) + +;; failed to figure out what this is: +(defstate idle (sew-mar-statue-debris) + :virtual #t + :code (the-as (function none :behavior sew-mar-statue-debris) sleep-code) + ) + +;; definition for function sew-mar-statue-debris-init-by-other +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defbehavior sew-mar-statue-debris-init-by-other sew-mar-statue-debris () + (let ((gp-0 (new 'process 'collide-shape self (collide-list-enum hit-by-player)))) + (let ((s5-0 (new 'process 'collide-shape-prim-group gp-0 (the-as uint 3) 0))) + (set! (-> gp-0 total-prims) (the-as uint 4)) + (set! (-> s5-0 prim-core collide-as) (collide-spec obstacle)) + (set! (-> s5-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s5-0 prim-core action) (collide-action solid)) + (set! (-> s5-0 transform-index) 3) + (set-vector! (-> s5-0 local-sphere) 10240.0 0.0 62464.0 151552.0) + (set! (-> gp-0 root-prim) s5-0) + ) + (let ((v1-9 (new 'process 'collide-shape-prim-mesh gp-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-9 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-9 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-9 prim-core action) (collide-action solid)) + (set! (-> v1-9 transform-index) 3) + (set-vector! (-> v1-9 local-sphere) 0.0 0.0 20480.0 81920.0) + ) + (let ((v1-11 (new 'process 'collide-shape-prim-mesh gp-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> v1-11 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-11 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-11 prim-core action) (collide-action solid)) + (set! (-> v1-11 transform-index) 3) + (set-vector! (-> v1-11 local-sphere) -49152.0 0.0 114688.0 61440.0) + ) + (let ((v1-13 (new 'process 'collide-shape-prim-mesh gp-0 (the-as uint 2) (the-as uint 0)))) + (set! (-> v1-13 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-13 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-13 prim-core action) (collide-action solid)) + (set! (-> v1-13 transform-index) 3) + (set-vector! (-> v1-13 local-sphere) 69632.0 0.0 102400.0 73728.0) + ) + (set! (-> gp-0 nav-radius) (* 0.75 (-> gp-0 root-prim local-sphere w))) + (let ((v1-16 (-> gp-0 root-prim))) + (set! (-> gp-0 backup-collide-as) (-> v1-16 prim-core collide-as)) + (set! (-> gp-0 backup-collide-with) (-> v1-16 prim-core collide-with)) + ) + (set! (-> self root) gp-0) + ) + (let ((gp-1 (ppointer->process (-> self parent)))) + (set! (-> self root trans quad) (-> (the-as process-drawable gp-1) root trans quad)) + (quaternion-copy! (-> self root quat) (-> (the-as process-drawable gp-1) root quat)) + (set! (-> self root scale quad) (-> (the-as process-drawable gp-1) root scale quad)) + ) + (initialize-skeleton + self + (the-as + skeleton-group + (art-group-get-by-name *level* "skel-sew-mar-statue-explode-a" (the-as (pointer uint32) #f)) + ) + (the-as pair 0) + ) + (set! (-> self draw light-index) (the-as uint 10)) + (transform-post) + (go-virtual idle) + (none) + ) + +;; failed to figure out what this is: +(defstate idle (sew-mar-statue-debris-b) + :virtual #t + :code (the-as (function none :behavior sew-mar-statue-debris-b) sleep-code) + ) + +;; definition for function sew-mar-statue-debris-b-init-by-other +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defbehavior sew-mar-statue-debris-b-init-by-other sew-mar-statue-debris-b () + (set! (-> self root) (new 'process 'trsqv)) + (let ((gp-0 (ppointer->process (-> self parent)))) + (set! (-> self root trans quad) (-> (the-as process-drawable gp-0) root trans quad)) + (quaternion-copy! (-> self root quat) (-> (the-as process-drawable gp-0) root quat)) + (set! (-> self root scale quad) (-> (the-as process-drawable gp-0) root scale quad)) + ) + (initialize-skeleton + self + (the-as + skeleton-group + (art-group-get-by-name *level* "skel-sew-mar-statue-explode-b" (the-as (pointer uint32) #f)) + ) + (the-as pair 0) + ) + (set! (-> self draw light-index) (the-as uint 10)) + (ja-post) + (go-virtual idle) + (none) + ) + +;; definition for function sew-mar-statue-event-handler +(defbehavior sew-mar-statue-event-handler sew-mar-statue ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('hide) + (if (not (and (-> self next-state) (= (-> self next-state name) 'hidden))) + (go-virtual hidden) + ) + ) + (('trigger) + (when (not (-> self spawned-debris?)) + (set! (-> self spawned-debris?) #t) + (process-spawn sew-mar-statue-debris :to self) + (process-spawn sew-mar-statue-debris-b :to self) + ) + ) + ) + ) + +;; definition for method 12 of type sew-mar-statue +(defmethod run-logic? sew-mar-statue ((obj sew-mar-statue)) + #t + ) + +;; failed to figure out what this is: +(defstate idle (sew-mar-statue) + :virtual #t + :event sew-mar-statue-event-handler + :trans (behavior () + (if (< (get-base-height *ocean-map-sewer*) -286720.0) + (setup-masks (-> self draw) 4 2) + (setup-masks (-> self draw) 2 4) + ) + (none) + ) + :code (the-as (function none :behavior sew-mar-statue) sleep-code) + ) + +;; failed to figure out what this is: +(defstate hidden (sew-mar-statue) + :virtual #t + :event sew-mar-statue-event-handler + :enter (behavior () + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (collide-spec)) + (set! (-> v1-1 prim-core collide-with) (collide-spec)) + ) + 0 + (logior! (-> self draw status) (draw-control-status no-draw)) + (none) + ) + :code (the-as (function none :behavior sew-mar-statue) sleep-code) + ) + +;; definition for method 11 of type sew-mar-statue +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-mar-statue ((obj sew-mar-statue) (arg0 entity-actor)) + (set! (-> obj spawned-debris?) #f) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((v1-2 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-2 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-2 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-2 prim-core action) (collide-action solid)) + (set! (-> v1-2 transform-index) 0) + (set-vector! (-> v1-2 local-sphere) 0.0 30720.0 0.0 58982.4) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) v1-2) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-5 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-5 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-5 prim-core collide-with)) + ) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-mar-statue" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (transform-post) + (set! (-> obj event-hook) sew-mar-statue-event-handler) + (cond + ((task-node-closed? (game-task-node sewer-escort-resolution)) + (process-spawn sew-mar-statue-debris :to obj) + (process-spawn sew-mar-statue-debris-b :to obj) + (set! (-> obj spawned-debris?) #t) + (go (method-of-object obj hidden)) + ) + (else + (go (method-of-object obj idle)) + ) + ) + (none) + ) + +;; definition of type sew-catwalk +(deftype sew-catwalk (drop-plat) + () + :heap-base #xc0 + :method-count-assert 36 + :size-assert #x140 + :flag-assert #x2400c00140 + ) + +;; definition for method 3 of type sew-catwalk +(defmethod inspect sew-catwalk ((obj sew-catwalk)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type drop-plat inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-catwalk-1 sew-catwalk sew-catwalk-1-lod0-jg sew-catwalk-1-idle-ja + ((sew-catwalk-1-lod0-mg (meters 20)) (sew-catwalk-1-lod1-mg (meters 999999))) + :bounds (static-spherem -7 5 -25 18) + :origin-joint-index 3 + ) + +;; definition for method 29 of type sew-catwalk +;; WARN: Return type mismatch int vs none. +(defmethod start-bouncing! sew-catwalk ((obj sew-catwalk)) + "Sets `bouncing` to [[#t]] and sets up the clock to periodically bounce + and translate the platform via the `smush` + @see [[smush-control]]" + (logclear! (-> obj mask) (process-mask sleep)) + (logclear! (-> obj mask) (process-mask sleep-code)) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate fall (sew-catwalk) + :virtual #t + :trans (the-as (function none :behavior sew-catwalk) rider-trans) + :code (behavior ((arg0 symbol)) + (process-entity-status! self (entity-perm-status subtask-complete) #t) + (set! (-> self draw bounds y) -102400.0) + (set! (-> self draw bounds w) 163840.0) + (set! (-> self root-override root-prim local-sphere w) 163840.0) + (set! (-> self draw force-lod) 0) + (let* ((s5-0 (-> self draw art-group)) + (s4-0 (method-of-object s5-0 get-art-by-name-method)) + ) + (format (clear *temp-string*) "~S-end" (-> self art-name)) + (let ((s5-1 (the-as object (s4-0 s5-0 *temp-string* art-joint-anim)))) + (if (not arg0) + (ja-play-spooled-anim + (-> self anim) + (ja-group) + (the-as art-joint-anim s5-1) + (the-as (function process-drawable symbol) false-func) + ) + ) + (ja-channel-set! 1) + (set! (-> self skel root-channel 0 frame-group) (the-as art-joint-anim s5-1)) + ) + ) + (suspend) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + ) + +;; definition for method 11 of type sew-catwalk +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-catwalk ((obj sew-catwalk) (arg0 entity-actor)) + (local-vars (sv-16 collide-shape-prim-mesh) (sv-32 symbol) (sv-48 type) (sv-64 collide-shape-moving)) + (stack-size-set! (-> obj main-thread) 512) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 14) 0))) + (set! (-> s4-0 total-prims) (the-as uint 15)) + (set! (-> s3-0 prim-core collide-as) (collide-spec obstacle pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid)) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) -28672.0 20480.0 -102400.0 73728.0) + (set! (-> s4-0 root-prim) s3-0) + (pusher-init s4-0) + (let* ((s2-0 + '((0 4 28672) + (1 5 28672) + (2 6 28672) + (3 7 28672) + (4 8 28672) + (5 9 28672) + (6 10 28672) + (7 11 28672) + (8 12 28672) + (9 13 28672) + (10 14 28672) + (11 15 28672) + (12 16 28672) + (13 17 28672) + ) + ) + (s1-0 (car s2-0)) + ) + (while (not (null? s2-0)) + (let ((s0-0 (method-of-type collide-shape-prim-mesh new))) + (set! sv-32 'process) + (set! sv-48 collide-shape-prim-mesh) + (set! sv-64 s4-0) + (let ((a3-2 (command-get-int (car s1-0) 0)) + (t0-1 0) + ) + (set! sv-16 (s0-0 sv-32 sv-48 sv-64 (the-as uint a3-2) (the-as uint t0-1))) + ) + ) + (let ((s0-1 sv-16)) + (set! (-> s0-1 prim-core collide-as) (-> s3-0 prim-core collide-as)) + (set! (-> s0-1 prim-core collide-with) (-> s3-0 prim-core collide-with)) + (set! (-> s0-1 prim-core action) (-> s3-0 prim-core action)) + (set! (-> s0-1 transform-index) (command-get-int (car (cdr s1-0)) 0)) + ) + (set-vector! (-> sv-16 local-sphere) 0.0 0.0 0.0 (command-get-float (car (cdr (cdr s1-0))) 0.0)) + (set! s2-0 (cdr s2-0)) + (set! s1-0 (car s2-0)) + ) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-28 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-28 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-28 prim-core collide-with)) + ) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-catwalk-1" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj art-name) "sew-catwalk-1") + (set! (-> obj anim) + (new 'static 'spool-anim :name "sew-catwalk-1" :anim-name "1-break" :parts 3 :command-list '()) + ) + (set! (-> obj basetrans quad) (-> obj root-override trans quad)) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status subtask-complete))) + (go (method-of-object obj fall) #t) + (go (method-of-object obj idle)) + ) + (none) + ) + +;; definition of type sew-mine +(deftype sew-mine (process-drawable) + ((root-override collide-shape-moving :offset 128) + (last-time time-frame :offset-assert 200) + ) + :heap-base #x50 + :method-count-assert 23 + :size-assert #xd0 + :flag-assert #x17005000d0 + (:methods + (idle () _type_ :state 20) + (die () _type_ :state 21) + (sew-mine-method-22 (_type_) none 22) + ) + ) + +;; definition for method 3 of type sew-mine +(defmethod inspect sew-mine ((obj sew-mine)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tlast-time: ~D~%" (-> obj last-time)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defstate idle (sew-mine) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack) + (let* ((s4-0 proc) + (gp-0 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (when gp-0 + (let ((a0-4 (vector-normalize! + (vector-! (new 'stack-no-clear 'vector) (-> gp-0 root-override trans) (-> self root-override trans)) + 1.0 + ) + ) + (a1-7 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-7 from) (process->ppointer self)) + (set! (-> a1-7 num-params) 2) + (set! (-> a1-7 message) 'attack-or-shove) + (set! (-> a1-7 param 0) (-> event param 0)) + (let ((v1-9 (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up control id)))) + (let* ((a2-3 *game-info*) + (a3-2 (+ (-> a2-3 attack-id) 1)) + ) + (set! (-> a2-3 attack-id) a3-2) + (set! (-> v1-9 id) a3-2) + ) + (set! (-> v1-9 vector quad) (-> a0-4 quad)) + (set! (-> v1-9 shove-back) 20480.0) + (set! (-> v1-9 shove-up) 12288.0) + (set! (-> v1-9 control) (if (logtest? (focus-status board) (-> gp-0 focus-status)) + 1.0 + 0.0 + ) + ) + (set! (-> a1-7 param 1) (the-as uint v1-9)) + ) + (send-event-function gp-0 a1-7) + ) + ) + ) + (go-virtual die) + ) + ) + ) + :code (the-as (function none :behavior sew-mine) transform-and-sleep-code) + :post (behavior () + (spawn (-> self part) (-> self root-override trans)) + (let ((gp-0 (mod (-> *display* part-clock frame-counter) 100))) + (if (< gp-0 (-> self last-time)) + (sound-play "sew-mine-flash") + ) + (set! (-> self last-time) (the-as time-frame gp-0)) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate die (sew-mine) + :virtual #t + :code (behavior () + (let ((v1-1 (-> self root-override root-prim))) + (set! (-> v1-1 prim-core collide-as) (collide-spec)) + (set! (-> v1-1 prim-core collide-with) (collide-spec)) + ) + 0 + (logior! (-> self draw status) (draw-control-status no-draw)) + (sound-play "sew-mine-b") + (process-spawn touch-tracker :init touch-tracker-init (-> self root-override trans) #x47200000 30 :to self) + (let ((gp-2 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-2 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 (the-as part-tracker gp-2) self (symbol->string (-> part-tracker symbol)) (the-as pointer #x70004000)) + ) + (let ((t9-7 run-function-in-process) + (a0-8 gp-2) + (a1-6 part-tracker-init) + (a2-10 (-> *part-group-id-table* 124)) + (a3-4 0) + (t0-2 #f) + (t1-1 #f) + (t2-1 #f) + (t3-0 *launch-matrix*) + ) + (set! (-> t3-0 trans quad) (-> self root-override trans quad)) + ((the-as (function object object object object object object object object none) t9-7) + a0-8 + a1-6 + a2-10 + a3-4 + t0-2 + t1-1 + t2-1 + t3-0 + ) + ) + (-> gp-2 ppointer) + ) + ) + (cleanup-for-death self) + (let ((gp-3 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-3) (seconds 2)) + (suspend) + ) + ) + (none) + ) + ) + +;; definition for method 22 of type sew-mine +;; WARN: Return type mismatch int vs none. +(defmethod sew-mine-method-22 sew-mine ((obj sew-mine)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 345) obj)) + (set! (-> obj last-time) 0) + 0 + (none) + ) + +;; definition of type sew-mine-a +(deftype sew-mine-a (sew-mine) + () + :heap-base #x50 + :method-count-assert 23 + :size-assert #xd0 + :flag-assert #x17005000d0 + ) + +;; definition for method 3 of type sew-mine-a +(defmethod inspect sew-mine-a ((obj sew-mine-a)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type sew-mine inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-mine-a sew-mine-a 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 0 0 3)) + +;; definition for method 11 of type sew-mine-a +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-mine-a ((obj sew-mine-a) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 2048.0 0.0 8192.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-11 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-11 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-11 prim-core collide-with)) + ) + (set! (-> obj root-override) (the-as collide-shape-moving s4-0)) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-mine-a" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (sew-mine-method-22 obj) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type sew-mine-b +(deftype sew-mine-b (sew-mine) + ((base-height float :offset-assert 208) + (center vector :inline :offset-assert 224) + (time-skew uint64 :offset-assert 240) + (period float :offset-assert 248) + ) + :heap-base #x80 + :method-count-assert 23 + :size-assert #xfc + :flag-assert #x17008000fc + ) + +;; definition for method 3 of type sew-mine-b +(defmethod inspect sew-mine-b ((obj sew-mine-b)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type sew-mine inspect))) + (t9-0 obj) + ) + (format #t "~2Tbase-height: ~f~%" (-> obj base-height)) + (format #t "~2Tcenter: #~%" (-> obj center)) + (format #t "~2Ttime-skew: ~D~%" (-> obj time-skew)) + (format #t "~2Tperiod: ~f~%" (-> obj period)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-mine-b sew-mine-b 0 2 ((1 (meters 999999))) :bounds (static-spherem 0 0 0 2.5)) + +;; failed to figure out what this is: +(defstate idle (sew-mine-b) + :virtual #t + :post (behavior () + (let ((t9-0 (-> (method-of-type sew-mine idle) post))) + (if t9-0 + ((the-as (function none) t9-0)) + ) + ) + (let* ((f30-0 (get-base-height *ocean-map-sewer*)) + (f0-0 (-> self period)) + (t9-2 sin-rad) + (f1-0 -3.1415925) + (f2-0 6.283185) + (f3-1 (the float (+ (-> self clock frame-counter) (the-as time-frame (-> self time-skew))))) + (f28-0 (t9-2 (+ f1-0 (* f2-0 (/ (- f3-1 (* (the float (the int (/ f3-1 f0-0))) f0-0)) f0-0))))) + ) + (when (< f30-0 (-> self center y)) + (set! (-> self center y) f30-0) + (if (>= (-> self base-height) (-> self center y)) + (go-virtual die) + ) + ) + (set! (-> self root-override trans quad) (-> self center quad)) + (set! (-> self root-override trans y) (+ (-> self center y) (* 819.2 f28-0))) + ) + (transform-post) + (none) + ) + ) + +;; definition for method 11 of type sew-mine-b +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-mine-b ((obj sew-mine-b) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 2048.0 0.0 8192.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-11 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-11 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-11 prim-core collide-with)) + ) + (set! (-> obj root-override) (the-as collide-shape-moving s4-0)) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-mine-b" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (sew-mine-method-22 obj) + (let ((a0-11 (-> obj entity))) + (set! (-> obj base-height) ((method-of-object a0-11 get-property-value-float) + a0-11 + 'base-height + 'interp + -1000000000.0 + -16384000.0 + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) + (set! (-> obj time-skew) (the-as uint (the int (* 300.0 (rand-vu-float-range 0.1 1.4))))) + (set! (-> obj period) (* 300.0 (rand-vu-float-range 1.2 1.8))) + (set! (-> obj center quad) (-> obj root-override trans quad)) + (set! (-> obj base-height) (+ -216498.17 (-> obj base-height))) + (set! (-> obj root-override pause-adjust-distance) 532480.0) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type sew-wall +(deftype sew-wall (process-focusable) + ((deadly-radius float :offset-assert 204) + (prev-deadly-radius float :offset-assert 208) + (attack-id uint32 :offset-assert 212) + (first-wall? basic :offset-assert 216) + (anim spool-anim :offset-assert 220) + (art-name basic :offset-assert 224) + ) + :heap-base #x70 + :method-count-assert 30 + :size-assert #xe4 + :flag-assert #x1e007000e4 + (:methods + (idle () _type_ :state 27) + (hit (symbol) _type_ :state 28) + (sew-wall-method-29 (_type_) none 29) + ) + ) + +;; definition for method 3 of type sew-wall +(defmethod inspect sew-wall ((obj sew-wall)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-focusable inspect))) + (t9-0 obj) + ) + (format #t "~2Tdeadly-radius: ~f~%" (-> obj deadly-radius)) + (format #t "~2Tprev-deadly-radius: ~f~%" (-> obj prev-deadly-radius)) + (format #t "~2Tattack-id: ~D~%" (-> obj attack-id)) + (format #t "~2Tfirst-wall?: ~A~%" (-> obj first-wall?)) + (format #t "~2Tanim: ~A~%" (-> obj anim)) + (format #t "~2Tart-name: ~A~%" (-> obj art-name)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-wall sew-wall sew-wall-lod0-jg -1 + ((sew-wall-lod0-mg (meters 20)) (sew-wall-lod1-mg (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :origin-joint-index 4 + ) + +;; definition for method 29 of type sew-wall +;; INFO: Used lq/sq +;; WARN: Return type mismatch float vs none. +(defmethod sew-wall-method-29 sew-wall ((obj sew-wall)) + (with-pp + (let ((s4-0 *target*)) + (when s4-0 + (let ((f0-0 (vector-vector-xz-distance (get-trans s4-0 0) (-> obj root-override trans))) + (f2-0 (-> obj deadly-radius)) + (f1-0 (-> obj prev-deadly-radius)) + ) + (set! (-> obj prev-deadly-radius) f2-0) + (when (and (>= f2-0 f0-0) (>= f0-0 (+ -4096.0 f1-0))) + (let ((s5-1 (new 'stack-no-clear 'collide-query))) + (set! (-> s5-1 start-pos quad) (-> obj root-override trans quad)) + (set! (-> s5-1 start-pos y) (+ 12288.0 (-> s5-1 start-pos y))) + (vector-! (-> s5-1 move-dist) (get-trans s4-0 3) (-> s5-1 start-pos)) + (let ((v1-9 s5-1)) + (set! (-> v1-9 radius) 819.2) + (set! (-> v1-9 collide-with) (collide-spec backgnd)) + (set! (-> v1-9 ignore-process0) obj) + (set! (-> v1-9 ignore-process1) #f) + (set! (-> v1-9 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1)) + (set! (-> v1-9 action-mask) (collide-action solid)) + ) + (when (< (fill-and-probe-using-line-sphere *collide-cache* s5-1) 0.0) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) (process->ppointer pp)) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'attack) + (set! (-> a1-4 param 0) (the-as uint #f)) + (let ((v1-15 (new 'static 'attack-info :mask (attack-info-mask mode id attacker-velocity)))) + (set! (-> v1-15 id) (-> obj attack-id)) + (set! (-> v1-15 mode) 'explode) + (set! (-> v1-15 attacker-velocity quad) (-> s5-1 move-dist quad)) + (set! (-> a1-4 param 1) (the-as uint v1-15)) + ) + (send-event-function *target* a1-4) + ) + (set! (-> obj deadly-radius) -1.0) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (sew-wall) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (logclear! (-> self mask) (process-mask actor-pause)) + (if (-> self first-wall?) + (task-node-close! (game-task-node sewer-escort-explode-wall1)) + ) + (go-virtual hit #f) + ) + (('hide) + (logior! (-> self draw status) (draw-control-status no-draw)) + #t + ) + ) + ) + :code (behavior () + (add-process *gui-control* self (gui-channel art-load) (gui-action queue) (-> self anim name) -99.0 0) + (until #f + (transform-post) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + #f + (none) + ) + ) + +;; failed to figure out what this is: +(defstate hit (sew-wall) + :virtual #t + :enter (behavior ((arg0 symbol)) + (set! (-> self deadly-radius) -1.0) + (logclear! (-> self draw status) (draw-control-status no-draw)) + (none) + ) + :exit (behavior () + (ja-abort-spooled-anim (-> self anim) (the-as art-joint-anim #f) -1) + (none) + ) + :trans (behavior () + (let ((f0-0 (-> self deadly-radius))) + (when (>= f0-0 0.0) + (set! (-> self deadly-radius) (seek f0-0 409600.0 (* 368640.0 (-> self clock seconds-per-frame)))) + (sew-wall-method-29 self) + ) + ) + (none) + ) + :code (behavior ((arg0 symbol)) + (if (not (-> self first-wall?)) + (set! arg0 #t) + ) + (let ((v1-4 (-> self root-override root-prim))) + (set! (-> (the-as collide-shape-prim-group v1-4) child 0 prim-core collide-with) (collide-spec)) + (set! (-> (the-as collide-shape-prim-group v1-4) child 0 prim-core collide-as) (collide-spec)) + (if (-> self first-wall?) + (set-vector! (-> v1-4 local-sphere) 43827.2 -16384.0 158924.8 204800.0) + (set-vector! (-> v1-4 local-sphere) 43827.2 -16384.0 110592.0 225280.0) + ) + (set! (-> self draw bounds quad) (-> v1-4 local-sphere quad)) + ) + (update-transforms (-> self root-override)) + (let* ((s5-0 (-> self draw art-group)) + (s4-0 (method-of-object s5-0 get-art-by-name-method)) + ) + (format (clear *temp-string*) "~S-end" (-> self art-name)) + (let ((s5-1 (the-as object (s4-0 s5-0 *temp-string* art-joint-anim)))) + (when (not arg0) + (set! (-> self deadly-radius) 0.0) + (ja-play-spooled-anim + (-> self anim) + (ja-group) + (the-as art-joint-anim s5-1) + (the-as (function process-drawable symbol) false-func) + ) + ) + (ja-channel-set! 1) + (set! (-> self skel root-channel 0 frame-group) (the-as art-joint-anim s5-1)) + ) + ) + (set! (-> self deadly-radius) -1.0) + (let* ((a0-14 (-> self root-override root-prim)) + (a1-11 (-> a0-14 prim-core collide-with)) + (v1-22 (-> a0-14 prim-core collide-as)) + ) + (cond + ((-> self first-wall?) + (set! (-> (the-as collide-shape-prim-group a0-14) child 1 prim-core collide-with) a1-11) + (set! (-> (the-as collide-shape-prim-group a0-14) child 1 prim-core collide-as) v1-22) + (set! (-> (the-as collide-shape-prim-group a0-14) child 2 prim-core collide-with) a1-11) + (set! (-> (the-as collide-shape-prim-group a0-14) child 2 prim-core collide-as) v1-22) + ) + (else + (set! (-> (the-as collide-shape-prim-group a0-14) child 3 prim-core collide-with) a1-11) + (set! (-> (the-as collide-shape-prim-group a0-14) child 3 prim-core collide-as) v1-22) + (set! (-> (the-as collide-shape-prim-group a0-14) child 4 prim-core collide-with) a1-11) + (set! (-> (the-as collide-shape-prim-group a0-14) child 4 prim-core collide-as) v1-22) + ) + ) + ) + (logior! (-> self mask) (process-mask actor-pause)) + (suspend) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + :post (the-as (function none :behavior sew-wall) ja-post) + ) + +;; definition for method 11 of type sew-wall +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-wall ((obj sew-wall) (arg0 entity-actor)) + (with-pp + (stack-size-set! (-> obj main-thread) 512) + (set! (-> obj mask) (logior (process-mask collectable) (-> obj mask))) + (let ((s3-0 ((method-of-type res-lump get-property-struct) + (-> obj entity) + 'art-name + 'interp + -1000000000.0 + "sew-wall-1" + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + (s5-0 (art-group-get-by-name *level* "skel-sew-wall" (the-as (pointer uint32) #f))) + ) + (set! (-> obj art-name) (the-as basic s3-0)) + (let ((s2-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s2-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s2-0 reaction) cshape-reaction-default) + (set! (-> s2-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s1-0 (new 'process 'collide-shape-prim-group s2-0 (the-as uint 5) 0))) + (set! (-> s2-0 total-prims) (the-as uint 6)) + (set! (-> s1-0 prim-core collide-as) (collide-spec obstacle)) + (set! (-> s1-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s1-0 prim-core action) (collide-action solid)) + (set! (-> s1-0 transform-index) 4) + (set-vector! (-> s1-0 local-sphere) 0.0 0.0 0.0 40960.0) + (set! (-> s2-0 root-prim) s1-0) + ) + (let ((v1-19 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-19 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-19 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-19 prim-core action) (collide-action solid)) + (set! (-> v1-19 transform-index) 4) + (set-vector! (-> v1-19 local-sphere) 0.0 0.0 0.0 40960.0) + ) + (let ((v1-21 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> v1-21 prim-core action) (collide-action solid)) + (set! (-> v1-21 transform-index) 4) + (set-vector! (-> v1-21 local-sphere) 77824.0 -16384.0 282624.0 36864.0) + ) + (let ((v1-23 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 2) (the-as uint 0)))) + (set! (-> v1-23 prim-core action) (collide-action solid)) + (set! (-> v1-23 transform-index) 4) + (set-vector! (-> v1-23 local-sphere) 61440.0 -16384.0 112640.0 151552.0) + ) + (let ((v1-25 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 3) (the-as uint 0)))) + (set! (-> v1-25 prim-core action) (collide-action solid)) + (set! (-> v1-25 transform-index) 4) + (set-vector! (-> v1-25 local-sphere) 0.0 -16384.0 40960.0 122880.0) + ) + (let ((v1-27 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 4) (the-as uint 0)))) + (set! (-> v1-27 prim-core action) (collide-action solid)) + (set! (-> v1-27 transform-index) 4) + (set-vector! (-> v1-27 local-sphere) 81920.0 0.0 204800.0 143360.0) + ) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (let ((v1-30 (-> s2-0 root-prim))) + (set! (-> s2-0 backup-collide-as) (-> v1-30 prim-core collide-as)) + (set! (-> s2-0 backup-collide-with) (-> v1-30 prim-core collide-with)) + ) + (set! (-> obj root-override) s2-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (cond + ((string= (the-as string (-> obj art-name)) "sew-wall-1") + (set! (-> obj anim) + (new 'static 'spool-anim :name "sew-wall-1" :anim-name "1-break" :parts 1 :command-list '()) + ) + (set! (-> obj first-wall?) (the-as basic #t)) + ) + ((string= (the-as string (-> obj art-name)) "sew-wall-2") + (set! (-> obj anim) + (new 'static 'spool-anim :name "sew-wall-2" :anim-name "2-break" :parts 1 :command-list '()) + ) + (set! (-> obj root-override trans z) (+ 26624.0 (-> obj root-override trans z))) + (set! (-> obj first-wall?) #f) + ) + (else + (go process-drawable-art-error (the-as string s3-0)) + ) + ) + (initialize-skeleton obj (the-as skeleton-group s5-0) (the-as pair 0)) + ) + (set! (-> obj draw force-lod) 0) + (ja-channel-set! 1) + (let* ((s5-1 (-> obj skel root-channel 0)) + (s4-1 (-> obj draw art-group)) + (s3-1 (method-of-object s4-1 get-art-by-name-method)) + ) + (format (clear *temp-string*) "~S-idle" (-> obj art-name)) + (set! (-> s5-1 frame-group) (the-as art-joint-anim (s3-1 s4-1 *temp-string* (the-as type #f)))) + ) + (let* ((v1-51 *game-info*) + (a0-43 (+ (-> v1-51 attack-id) 1)) + ) + (set! (-> v1-51 attack-id) a0-43) + (set! (-> obj attack-id) a0-43) + ) + (if (eval! + (new 'stack 'script-context (the-as basic (process->ppointer pp)) pp (the-as vector #f)) + (res-lump-struct (-> obj entity) 'on-activate pair) + ) + (go (method-of-object obj hit) #t) + (go (method-of-object obj idle)) + ) + (none) + ) + ) + +;; definition of type sew-grill +(deftype sew-grill (process-drawable) + () + :heap-base #x50 + :method-count-assert 21 + :size-assert #xc8 + :flag-assert #x15005000c8 + (:methods + (idle () _type_ :state 20) + ) + ) + +;; definition for method 3 of type sew-grill +(defmethod inspect sew-grill ((obj sew-grill)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-grill sew-grill 0 3 ((1 (meters 999999))) :bounds (static-spherem 0 3 0 7.5)) + +;; failed to figure out what this is: +(defstate idle (sew-grill) + :virtual #t + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior sew-grill) ja-post) + ) + +;; definition for method 11 of type sew-grill +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-grill ((obj sew-grill) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-grill" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type sew-scare-grunt +(deftype sew-scare-grunt (grunt) + ((anim spool-anim :offset-assert 692) + (manipy (pointer manipy) :offset-assert 696) + (spooled-sound-id uint32 :offset-assert 700) + (grill-actor entity-actor :offset-assert 704) + ) + :heap-base #x250 + :method-count-assert 188 + :size-assert #x2c4 + :flag-assert #xbc025002c4 + (:methods + (waiting () _type_ :state 186) + (scare () _type_ :state 187) + ) + ) + +;; definition for method 3 of type sew-scare-grunt +(defmethod inspect sew-scare-grunt ((obj sew-scare-grunt)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type grunt inspect))) + (t9-0 obj) + ) + (format #t "~2Tanim: ~A~%" (-> obj anim)) + (format #t "~2Tmanipy: #x~X~%" (-> obj manipy)) + (format #t "~2Tspooled-sound-id: ~D~%" (-> obj spooled-sound-id)) + (format #t "~2Tgrill-actor: ~A~%" (-> obj grill-actor)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-scare-grunt grunt grunt-lod0-jg grunt-idle-ja + ((grunt-lod0-mg (meters 999999))) + :bounds (static-spherem 0 5 -12 20) + ) + +;; definition for symbol *sew-scare-grunt-nav-enemy-info*, type nav-enemy-info +(define *sew-scare-grunt-nav-enemy-info* + (new 'static 'nav-enemy-info + :use-die-falling #f + :use-victory #f + :use-jump-blocked #f + :debug-draw-neck #f + :jump-debug-draw #f + :move-to-ground #t + :hover-if-no-ground #f + :idle-anim-script (new 'static 'array uint32 4 #x1e0002 #x3010501 #x0 #x0) + :idle-anim 5 + :notice-anim 13 + :hostile-anim -1 + :hit-anim 34 + :knocked-anim -1 + :knocked-land-anim -1 + :die-anim 19 + :die-falling-anim 32 + :victory-anim -1 + :jump-wind-up-anim 45 + :jump-in-air-anim 46 + :jump-land-anim 47 + :neck-joint 5 + :look-at-joint 6 + :bullseye-joint 18 + :sound-hit (static-sound-name "grunt-hit") + :sound-die (static-sound-name "grunt-die") + :notice-distance (meters 30) + :notice-distance-delta (meters 10) + :default-hit-points 1 + :gnd-collide-with (collide-spec backgnd) + :overlaps-others-collide-with-filter (collide-spec jak bot player-list) + :movement-gravity (meters -100) + :friction 0.8 + :attack-shove-back (meters 3) + :attack-shove-up (meters 2) + :attack-mode 'generic + :attack-damage 2 + :recover-gnd-collide-with (collide-spec backgnd crate obstacle hit-by-others-list pusher) + :jump-height-min (meters 3) + :jump-height-factor 0.5 + :knocked-seek-ry-clamp 2730.6667 + :knocked-soft-vxz-lo 72089.6 + :knocked-soft-vxz-hi 108134.4 + :knocked-soft-vy-lo 81920.0 + :knocked-soft-vy-hi 122880.0 + :knocked-medium-vxz-lo 147456.0 + :knocked-medium-vxz-hi 196608.0 + :knocked-medium-vy-lo 135168.0 + :knocked-medium-vy-hi 151552.0 + :knocked-hard-vxz-lo 78643.2 + :knocked-hard-vxz-hi 117964.8 + :knocked-hard-vy-lo 183500.8 + :knocked-hard-vy-hi 209715.2 + :knocked-huge-vxz-lo 164659.2 + :knocked-huge-vxz-hi 249036.8 + :knocked-huge-vy-lo 183500.8 + :knocked-huge-vy-hi 217907.2 + :knocked-yellow-vxz-lo 40960.0 + :knocked-yellow-vxz-hi 49152.0 + :knocked-yellow-vy-lo 57344.0 + :knocked-yellow-vy-hi 81920.0 + :knocked-red-vxz-lo 4096.0 + :knocked-red-vxz-hi 90112.0 + :knocked-red-vy-lo 106496.0 + :knocked-red-vy-hi 147456.0 + :knocked-blue-vxz-lo 40960.0 + :knocked-blue-vxz-hi 49152.0 + :knocked-blue-vy-lo 24576.0 + :knocked-blue-vy-hi 81920.0 + :shadow-size (meters 2) + :shadow-max-y (meters 1) + :shadow-min-y (meters -1) + :shadow-locus-dist (meters 150) + :gem-joint 6 + :gem-seg #x2 + :gem-no-seg #x4 + :gem-offset (new 'static 'sphere :y 614.4 :z -3276.8 :r 327680.0) + :callback-info #f + :use-momentum #f + :use-frustration #f + :use-stop-chase #f + :use-circling #f + :use-pacing #f + :walk-anim 11 + :turn-anim -1 + :run-anim 14 + :taunt-anim 20 + :run-travel-speed (meters 6) + :run-acceleration (meters 1) + :run-turning-acceleration (meters 2) + :walk-travel-speed (meters 3) + :walk-acceleration (meters 1) + :walk-turning-acceleration (meters 1) + :maximum-rotation-rate (degrees 720.0) + :notice-nav-radius (meters 1) + :frustration-distance (meters 8) + :frustration-time (seconds 4) + :blocked-time (seconds 0.3) + :circle-dist-lo 20480.0 + :circle-dist-hi 61440.0 + :nav-mesh #f + ) + ) + +;; failed to figure out what this is: +(set! (-> *sew-scare-grunt-nav-enemy-info* fact-defaults) *fact-info-enemy-defaults*) + +;; failed to figure out what this is: +(defstate waiting (sew-scare-grunt) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior sew-scare-grunt) + enemy-event-handler + ) + :enter (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (logior! (-> self draw status) (draw-control-status no-draw)) + (none) + ) + :trans (behavior () + (let* ((s5-0 *target*) + (gp-0 (if (type? s5-0 process-focusable) + s5-0 + ) + ) + ) + (when gp-0 + (cond + ((< (vector-vector-distance (-> self root-override2 trans) (get-trans gp-0 0)) 20480.0) + (go-virtual scare) + ) + ((< (vector-vector-distance (-> self root-override2 trans) (get-trans gp-0 0)) 102400.0) + (gui-control-method-12 + *gui-control* + self + (gui-channel art-load) + (gui-action queue) + (-> self anim name) + 0 + -99.0 + (new 'static 'sound-id) + ) + ) + ) + ) + ) + (none) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (-> self draw art-group data 5) + :num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (the-as (function none :behavior sew-scare-grunt) ja-post) + ) + +;; failed to figure out what this is: +(defstate scare (sew-scare-grunt) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior sew-scare-grunt) + enemy-event-handler + ) + :enter (behavior () + (logclear! (-> self draw status) (draw-control-status no-draw)) + (let* ((v1-2 (-> self grill-actor)) + (gp-0 (if v1-2 + (-> v1-2 extra process) + ) + ) + ) + (when gp-0 + (set! (-> self manipy) + (process-spawn + manipy + :init manipy-init + (-> self root-override2 trans) + (-> gp-0 entity) + (art-group-get-by-name *level* "skel-sew-grill" (the-as (pointer uint32) #f)) + #f + 0 + :to self + ) + ) + (send-event (ppointer->process (-> self manipy)) 'anim-mode 'clone-anim) + (set! (-> self manipy 0 draw light-index) (-> (the-as sew-grill gp-0) draw light-index)) + (logior! (-> (the-as sew-grill gp-0) draw status) (draw-control-status no-draw)) + ) + ) + (set! (-> self spooled-sound-id) + (the-as + uint + (lookup-gui-connection-id *gui-control* (-> self anim name) (gui-channel art-load) (gui-action none)) + ) + ) + (none) + ) + :exit (behavior () + (let* ((a0-0 (-> self grill-actor)) + (v1-0 (if a0-0 + (-> a0-0 extra process) + ) + ) + ) + (if v1-0 + (logclear! (-> (the-as sew-grill v1-0) draw status) (draw-control-status no-draw)) + ) + ) + (none) + ) + :code (behavior () + (ja-channel-push! 1 (seconds 0.2)) + (let ((a2-0 (-> self draw art-group data 57))) + (ja-play-spooled-anim + (-> self anim) + (ja-group) + (the-as art-joint-anim a2-0) + (the-as (function process-drawable symbol) false-func) + ) + ) + (let ((v1-8 (-> self root-override2 root-prim))) + (set! (-> v1-8 prim-core collide-as) (collide-spec)) + (set! (-> v1-8 prim-core collide-with) (collide-spec)) + ) + 0 + (suspend) + (logior! (-> self mask) (process-mask sleep)) + (suspend) + 0 + (none) + ) + :post (behavior () + (let* ((a1-1 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 3))) + (f1-0 (vector-vector-xz-distance (-> self root-override2 trans) a1-1)) + ) + (vector-lerp! + (-> self draw color-mult) + *identity-vector* + *null-vector* + (fmax 0.0 (fmin 1.0 (* 0.00001994613 f1-0))) + ) + ) + (let ((f30-0 + (lerp-scale 1.0 0.0 (vector-vector-distance (-> self root-override2 trans) (camera-pos)) 65536.0 204800.0) + ) + ) + (when *sound-player-enable* + (let ((gp-1 (the-as sound-rpc-set-param (get-sound-buffer-entry)))) + (set! (-> gp-1 command) (sound-command set-param)) + (set! (-> gp-1 id) (the-as sound-id (-> self spooled-sound-id))) + (set! (-> gp-1 params volume) (the int (* 1024.0 f30-0))) + (let ((a1-5 (-> self root-override2 trans))) + (let ((s5-1 self)) + (when (= a1-5 #t) + (if (and s5-1 (type? s5-1 process-drawable) (nonzero? (-> s5-1 root-override2))) + (set! a1-5 (-> s5-1 root-override2 trans)) + (set! a1-5 (the-as vector #f)) + ) + ) + ) + (sound-trans-convert (the-as vector3w (-> gp-1 params trans)) a1-5) + ) + (set! (-> gp-1 params mask) (the-as uint 33)) + (-> gp-1 id) + ) + ) + ) + (transform-post) + (none) + ) + ) + +;; definition for method 116 of type sew-scare-grunt +;; WARN: Return type mismatch object vs none. +(defmethod go-idle sew-scare-grunt ((obj sew-scare-grunt)) + (go (method-of-object obj waiting)) + (none) + ) + +;; definition for method 114 of type sew-scare-grunt +;; WARN: Return type mismatch int vs none. +(defmethod enemy-method-114 sew-scare-grunt ((obj sew-scare-grunt)) + "@abstract" + (stack-size-set! (-> obj main-thread) 512) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) cshape-reaction-default) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (set! (-> s5-0 penetrated-by) (penetrate + generic-attack + lunge + flop + punch + spin + roll + uppercut + bonk + tube + vehicle + flut-attack + board + mech-punch + dark-punch + dark-giant + ) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 6) 0))) + (set! (-> s5-0 total-prims) (the-as uint 7)) + (set! (-> s4-0 prim-core collide-as) (collide-spec enemy)) + (set! (-> s4-0 prim-core collide-with) (collide-spec backgnd)) + (set! (-> s4-0 prim-core action) (collide-action solid)) + (set-vector! (-> s4-0 local-sphere) 0.0 6144.0 0.0 17408.0) + (set! (-> s5-0 root-prim) s4-0) + ) + (let ((v1-15 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-15 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-15 prim-core collide-with) (collide-spec backgnd)) + (set! (-> v1-15 prim-core action) (collide-action solid)) + (set-vector! (-> v1-15 local-sphere) 0.0 4915.2 0.0 4915.2) + ) + (let ((v1-17 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-17 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-17 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-17 prim-core action) (collide-action semi-solid)) + (set! (-> v1-17 transform-index) 4) + (set-vector! (-> v1-17 local-sphere) 0.0 0.0 0.0 4915.2) + ) + (let ((v1-19 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-19 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-19 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-19 prim-core action) (collide-action semi-solid)) + (set! (-> v1-19 transform-index) 18) + (set-vector! (-> v1-19 local-sphere) 0.0 0.0 0.0 2252.8) + ) + (let ((v1-21 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-21 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-21 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-21 prim-core action) (collide-action semi-solid)) + (set! (-> v1-21 transform-index) 16) + (set-vector! (-> v1-21 local-sphere) 0.0 0.0 0.0 2048.0) + ) + (let ((v1-23 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-23 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-23 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-23 prim-core action) (collide-action semi-solid)) + (set! (-> v1-23 transform-index) 12) + (set-vector! (-> v1-23 local-sphere) 0.0 0.0 0.0 2048.0) + ) + (let ((v1-25 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> v1-25 prim-core collide-as) (collide-spec enemy)) + (set! (-> v1-25 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-25 prim-core action) (collide-action semi-solid)) + (set! (-> v1-25 transform-index) 6) + (set-vector! (-> v1-25 local-sphere) 0.0 0.0 0.0 8192.0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-28 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-28 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-28 prim-core collide-with)) + ) + (set! (-> s5-0 max-iteration-count) (the-as uint 3)) + (set! (-> obj root-override2) s5-0) + ) + 0 + (none) + ) + +;; definition for method 185 of type sew-scare-grunt +(defmethod grunt-method-185 sew-scare-grunt ((obj sew-scare-grunt)) + *sew-scare-grunt-nav-enemy-info* + ) + +;; definition for method 115 of type sew-scare-grunt +;; WARN: Return type mismatch float vs none. +(defmethod enemy-method-115 sew-scare-grunt ((obj sew-scare-grunt)) + "@abstract" + (set! (-> obj anim) + (new 'static 'spool-anim :name "sew-scare-grunt" :anim-name "sew-scare-grunt" :parts 2 :command-list '()) + ) + (set! (-> obj grill-actor) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (let ((t9-1 (method-of-type grunt enemy-method-115))) + (t9-1 obj) + ) + (set! (-> obj root-override2 trans y) (+ -3276.8 (-> obj root-override2 trans y))) + (none) + ) diff --git a/test/decompiler/reference/jak2/levels/sewer/sewer-obs_REF.gc b/test/decompiler/reference/jak2/levels/sewer/sewer-obs_REF.gc new file mode 100644 index 0000000000..265511efe7 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/sewer/sewer-obs_REF.gc @@ -0,0 +1,1398 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type sew-blade +(deftype sew-blade (process-drawable) + ((y-min float :offset-assert 200) + (y-max float :offset-assert 204) + (snd-water uint128 :offset-assert 208) + (snd-no-water uint128 :offset-assert 224) + (last-sound int32 :offset-assert 240) + (attack-id uint32 :offset-assert 244) + ) + :heap-base #x80 + :method-count-assert 21 + :size-assert #xf8 + :flag-assert #x15008000f8 + (:methods + (sew-blade-method-20 (_type_) none 20) + ) + ) + +;; definition for method 3 of type sew-blade +;; INFO: Used lq/sq +(defmethod inspect sew-blade ((obj sew-blade)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Ty-min: ~f~%" (-> obj y-min)) + (format #t "~2Ty-max: ~f~%" (-> obj y-max)) + (format #t "~2Tsnd-water: ~D~%" (-> obj snd-water)) + (format #t "~2Tsnd-no-water: ~D~%" (-> obj snd-no-water)) + (format #t "~2Tlast-sound: ~D~%" (-> obj last-sound)) + (format #t "~2Tattack-id: ~D~%" (-> obj attack-id)) + (label cfg-4) + obj + ) + +;; definition for method 20 of type sew-blade +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod sew-blade-method-20 sew-blade ((obj sew-blade)) + (when (nonzero? (-> obj sound)) + (let ((f30-0 (+ (-> obj root trans y) (-> obj y-max))) + (f28-0 (+ (-> obj root trans y) (-> obj y-min))) + (f0-2 (get-base-height *ocean-map-sewer*)) + ) + (cond + ((< f30-0 f0-2) + (stop! (-> obj sound)) + ) + ((< f0-2 f28-0) + (when (!= (-> obj last-sound) 1) + (change-sound! (-> obj sound) (the-as sound-name (-> obj snd-no-water))) + (set! (-> obj last-sound) 1) + ) + (update! (-> obj sound)) + ) + (else + (when (!= (-> obj last-sound) 2) + (change-sound! (-> obj sound) (the-as sound-name (-> obj snd-water))) + (set! (-> obj last-sound) 2) + ) + (update! (-> obj sound)) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition of type sew-single-blade +(deftype sew-single-blade (sew-blade) + ((quat quaternion :inline :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 22 + :size-assert #x110 + :flag-assert #x1600900110 + (:methods + (idle () _type_ :state 21) + ) + ) + +;; definition for method 3 of type sew-single-blade +(defmethod inspect sew-single-blade ((obj sew-single-blade)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type sew-blade inspect))) + (t9-0 obj) + ) + (format #t "~2Tquat: #~%" (-> obj quat)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-single-blade sew-single-blade sew-single-blade-lod0-jg sew-single-blade-idle-ja + ((sew-single-blade-lod0-mg (meters 999999))) + :bounds (static-spherem 0 0 4 5.5) + ) + +;; failed to figure out what this is: +(defstate idle (sew-single-blade) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack) + (let* ((s4-0 proc) + (gp-0 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (when gp-0 + (let ((s4-2 (vector-! (new 'stack-no-clear 'vector) (-> gp-0 root-override trans) (-> self root trans))) + (v1-5 (vector-x-quaternion! (new 'stack-no-clear 'vector) (-> self root quat))) + ) + (if (< (vector-dot v1-5 s4-2) 0.0) + (vector-float*! v1-5 v1-5 -1.0) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) (process->ppointer self)) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack-or-shove) + (set! (-> a1-6 param 0) (-> event param 0)) + (let ((a0-14 (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up id)))) + (set! (-> a0-14 id) (-> self attack-id)) + (set! (-> a0-14 vector quad) (-> v1-5 quad)) + (set! (-> a0-14 shove-back) 20480.0) + (set! (-> a0-14 shove-up) 12288.0) + (set! (-> a1-6 param 1) (the-as uint a0-14)) + ) + (send-event-function gp-0 a1-6) + ) + ) + ) + ) + ) + ) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1)) 0.02) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! max 0.02)) + ) + ) + #f + (none) + ) + :post (behavior () + (sew-blade-method-20 self) + (transform-post) + (none) + ) + ) + +;; definition for method 11 of type sew-single-blade +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-single-blade ((obj sew-single-blade) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 16384.0 22528.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-17 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-17 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-17 prim-core collide-with)) + ) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-single-blade" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (quaternion-copy! (-> obj quat) (-> obj root quat)) + (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj root trans))) + (set-falloff-far! (-> obj sound) 286720.0) + (set! (-> obj y-min) -16384.0) + (set! (-> obj y-max) 16384.0) + (set! (-> obj snd-water) + (the-as uint128 (make-u128 (the-as uint #x772d6564616c) (the-as uint #x622d656c676e6973))) + ) + (set! (-> obj snd-no-water) (the-as uint128 (make-u128 #x6564616c (the-as uint #x622d656c676e6973)))) + (let* ((v1-35 *game-info*) + (a0-19 (+ (-> v1-35 attack-id) 1)) + ) + (set! (-> v1-35 attack-id) a0-19) + (set! (-> obj attack-id) a0-19) + ) + (transform-post) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type sew-tri-blade +(deftype sew-tri-blade (sew-blade) + ((anim-time float :offset-assert 248) + (anim-offset float :offset-assert 252) + (switch-state int32 :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 22 + :size-assert #x104 + :flag-assert #x1600900104 + (:methods + (idle () _type_ :state 21) + ) + ) + +;; definition for method 3 of type sew-tri-blade +(defmethod inspect sew-tri-blade ((obj sew-tri-blade)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type sew-blade inspect))) + (t9-0 obj) + ) + (format #t "~2Tanim-time: ~f~%" (-> obj anim-time)) + (format #t "~2Tanim-offset: ~f~%" (-> obj anim-offset)) + (format #t "~2Tswitch-state: ~D~%" (-> obj switch-state)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-tri-blade sew-tri-blade sew-tri-blade-lod0-jg sew-tri-blade-idle-ja + ((sew-tri-blade-lod0-mg (meters 20)) (sew-tri-blade-lod1-mg (meters 999999))) + :bounds (static-spherem 0 2.5 0 9) + ) + +;; definition for function sew-tri-blade-joint-callback +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun sew-tri-blade-joint-callback ((arg0 draw-control) (arg1 cspace-array) (arg2 joint-control)) + (with-pp + (let ((gp-0 (the-as sew-tri-blade (-> arg0 process))) + (s5-0 (new-stack-matrix0)) + (f30-0 (* 182.04445 (* 0.0033333334 (the float (-> pp clock frame-counter))))) + ) + (let ((s3-0 (-> arg1 data 4 bone transform))) + (matrix-rotate-y! s5-0 (* 240.0 f30-0)) + (matrix*! s3-0 s5-0 s3-0) + ) + (let ((s3-1 (-> arg1 data 5 bone transform))) + (matrix-rotate-y! s5-0 (* -240.0 f30-0)) + (matrix*! s3-1 s5-0 s3-1) + (set! (-> gp-0 y-max) (+ (- 25395.2 (-> gp-0 root trans y)) (-> s3-1 trans y))) + ) + (let ((s4-1 (-> arg1 data 6 bone transform))) + (matrix-rotate-y! s5-0 (* 240.0 f30-0)) + (matrix*! s4-1 s5-0 s4-1) + (set! (-> gp-0 y-max) (fmax (-> gp-0 y-max) (+ (- 19251.2 (-> gp-0 root trans y)) (-> s4-1 trans y)))) + ) + ) + 0 + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (sew-tri-blade) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack) + (let* ((s5-0 proc) + (a0-2 (if (type? s5-0 process-focusable) + s5-0 + ) + ) + ) + (when a0-2 + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) (process->ppointer self)) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack-or-shove) + (set! (-> a1-6 param 0) (-> event param 0)) + (let ((v1-5 (new 'static 'attack-info :mask (attack-info-mask shove-back shove-up id)))) + (set! (-> v1-5 id) (-> self attack-id)) + (set! (-> v1-5 shove-back) 20480.0) + (set! (-> v1-5 shove-up) 8192.0) + (set! (-> a1-6 param 1) (the-as uint v1-5)) + ) + (send-event-function a0-2 a1-6) + ) + ) + ) + ) + (('on) + (when (!= (-> self anim-offset) 0.0) + (let ((f30-0 (+ (-> self root trans y) (-> self y-max)))) + (if (< (get-base-height *ocean-map-sewer*) f30-0) + (sound-play "tri-blade-up") + ) + ) + ) + (let ((v0-1 (the-as object 1))) + (set! (-> self switch-state) (the-as int v0-1)) + v0-1 + ) + ) + (('off) + (when (= (-> self anim-offset) 0.0) + (let ((f30-1 (+ (-> self root trans y) (-> self y-max)))) + (if (< (get-base-height *ocean-map-sewer*) f30-1) + (sound-play "tri-blade-up") + ) + ) + ) + (set! (-> self switch-state) 0) + 0 + ) + ) + ) + :code (behavior () + (until #f + (cond + ((zero? (-> self switch-state)) + (cond + ((>= 3.0 (-> self anim-time)) + (+! (-> self anim-time) (* 6.0 (-> self clock seconds-per-frame))) + (set! (-> self anim-time) (fmin 3.0 (-> self anim-time))) + ) + (else + (+! (-> self anim-time) (* 6.0 (-> self clock seconds-per-frame))) + (if (< 6.0 (-> self anim-time)) + (set! (-> self anim-time) 0.0) + ) + ) + ) + ) + (else + (+! (-> self anim-time) (* 6.0 (-> self clock seconds-per-frame))) + (set! (-> self anim-time) (fmin 6.0 (-> self anim-time))) + ) + ) + (let ((f30-0 (+ (-> self anim-time) (-> self anim-offset)))) + (if (< 6.0 f30-0) + (set! f30-0 (+ -6.0 f30-0)) + ) + (ja :group! (-> self draw art-group data 3) :num! (identity f30-0)) + ) + (suspend) + ) + #f + (none) + ) + :post (behavior () + (sew-blade-method-20 self) + (transform-post) + (none) + ) + ) + +;; definition for method 11 of type sew-tri-blade +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-tri-blade ((obj sew-tri-blade) (arg0 entity-actor)) + (with-pp + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s4-0 total-prims) (the-as uint 4)) + (set! (-> s3-0 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set-vector! (-> s3-0 local-sphere) 0.0 10240.0 0.0 36864.0) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (let ((v1-16 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 2) (the-as uint 0)))) + (set! (-> v1-16 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> v1-16 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-16 prim-core action) (collide-action solid deadly)) + (set! (-> v1-16 transform-index) 4) + (set-vector! (-> v1-16 local-sphere) 0.0 8192.0 0.0 18841.6) + ) + (let ((v1-18 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> v1-18 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> v1-18 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-18 prim-core action) (collide-action solid deadly)) + (set! (-> v1-18 transform-index) 5) + (set-vector! (-> v1-18 local-sphere) 0.0 8192.0 0.0 12288.0) + ) + (let ((v1-20 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-20 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> v1-20 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> v1-20 prim-core action) (collide-action solid deadly)) + (set! (-> v1-20 transform-index) 6) + (set-vector! (-> v1-20 local-sphere) 0.0 4915.2 0.0 7372.8) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-23 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-23 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-23 prim-core collide-with)) + ) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-tri-blade" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj state-time) (-> pp clock frame-counter)) + (set! (-> obj anim-time) 0.0) + (set! (-> obj anim-offset) 0.0) + (set! (-> obj skel postbind-function) sew-tri-blade-joint-callback) + (let* ((v1-33 *game-info*) + (a0-33 (+ (-> v1-33 attack-id) 1)) + ) + (set! (-> v1-33 attack-id) a0-33) + (set! (-> obj attack-id) a0-33) + ) + (if (>= (res-lump-value arg0 'extra-id int :default (the-as uint128 -1) :time -1000000000.0) 0) + (set! (-> obj anim-offset) 3.0) + ) + (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj root trans))) + (set-falloff-far! (-> obj sound) 286720.0) + (set! (-> obj y-min) 0.0) + (set! (-> obj y-max) 48332.8) + (set! (-> obj snd-water) (the-as uint128 (make-u128 #x772d65 (the-as uint #x64616c622d697274)))) + (set! (-> obj snd-no-water) (the-as uint128 (make-u128 101 (the-as uint #x64616c622d697274)))) + (transform-post) + (go (method-of-object obj idle)) + (none) + ) + ) + +;; definition of type sew-arm-blade +(deftype sew-arm-blade (sew-blade) + () + :heap-base #x80 + :method-count-assert 22 + :size-assert #xf8 + :flag-assert #x16008000f8 + (:methods + (idle () _type_ :state 21) + ) + ) + +;; definition for method 3 of type sew-arm-blade +(defmethod inspect sew-arm-blade ((obj sew-arm-blade)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type sew-blade inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-arm-blade sew-arm-blade sew-arm-blade-lod0-jg sew-arm-blade-idle-ja + ((sew-arm-blade-lod0-mg (meters 20)) (sew-arm-blade-lod1-mg (meters 999999))) + :bounds (static-spherem 0 -6 0 7) + ) + +;; failed to figure out what this is: +(defstate idle (sew-arm-blade) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack) + (let* ((s5-0 proc) + (a0-2 (if (type? s5-0 process-focusable) + s5-0 + ) + ) + ) + (when a0-2 + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) (process->ppointer self)) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'attack-or-shove) + (set! (-> a1-4 param 0) (-> event param 0)) + (let ((v1-6 (new 'static 'attack-info :mask (attack-info-mask shove-back shove-up id)))) + (set! (-> v1-6 id) (-> self attack-id)) + (set! (-> v1-6 shove-back) 20480.0) + (set! (-> v1-6 shove-up) 8192.0) + (set! (-> a1-4 param 1) (the-as uint v1-6)) + ) + (send-event-function a0-2 a1-4) + ) + ) + ) + ) + ) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1)) 0.02) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! max 0.02)) + ) + ) + #f + (none) + ) + :post (behavior () + (sew-blade-method-20 self) + (transform-post) + (none) + ) + ) + +;; definition for method 11 of type sew-arm-blade +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-arm-blade ((obj sew-arm-blade) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 -24576.0 0.0 28672.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-17 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-17 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-17 prim-core collide-with)) + ) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-arm-blade" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj root trans))) + (set-falloff-far! (-> obj sound) 286720.0) + (set! (-> obj y-min) -43008.0) + (set! (-> obj y-max) -4096.0) + (set! (-> obj snd-water) (the-as uint128 (make-u128 #x772d65 (the-as uint #x64616c622d6d7261)))) + (set! (-> obj snd-no-water) (the-as uint128 (make-u128 101 (the-as uint #x64616c622d6d7261)))) + (let* ((v1-34 *game-info*) + (a0-18 (+ (-> v1-34 attack-id) 1)) + ) + (set! (-> v1-34 attack-id) a0-18) + (set! (-> obj attack-id) a0-18) + ) + (transform-post) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type sew-multi-blade +(deftype sew-multi-blade (sew-blade) + () + :heap-base #x80 + :method-count-assert 22 + :size-assert #xf8 + :flag-assert #x16008000f8 + (:methods + (idle () _type_ :state 21) + ) + ) + +;; definition for method 3 of type sew-multi-blade +(defmethod inspect sew-multi-blade ((obj sew-multi-blade)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type sew-blade inspect))) + (t9-0 obj) + ) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-multi-blade sew-multi-blade sew-multi-blade-lod0-jg sew-multi-blade-idle-ja + ((sew-multi-blade-lod0-mg (meters 20)) (sew-multi-blade-lod1-mg (meters 999999))) + :bounds (static-spherem 18 0 0 22) + ) + +;; failed to figure out what this is: +(defstate idle (sew-multi-blade) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('touch 'attack) + (let* ((s4-0 proc) + (gp-0 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (when gp-0 + (let ((s4-2 (vector-! (new 'stack-no-clear 'vector) (-> gp-0 root-override trans) (-> self root trans))) + (v1-5 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self root quat))) + ) + (if (< (vector-dot v1-5 s4-2) 0.0) + (vector-float*! v1-5 v1-5 -1.0) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) (process->ppointer self)) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack-or-shove) + (set! (-> a1-6 param 0) (-> event param 0)) + (let ((a0-14 (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up id)))) + (set! (-> a0-14 id) (-> self attack-id)) + (set! (-> a0-14 vector quad) (-> v1-5 quad)) + (set! (-> a0-14 shove-back) 28672.0) + (set! (-> a0-14 shove-up) 16384.0) + (set! (-> a1-6 param 1) (the-as uint a0-14)) + ) + (send-event-function gp-0 a1-6) + ) + ) + ) + ) + ) + ) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek!)) + ) + ) + #f + (none) + ) + :post (behavior () + (sew-blade-method-20 self) + (transform-post) + (none) + ) + ) + +;; definition for method 11 of type sew-multi-blade +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-multi-blade ((obj sew-multi-blade) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 73728.0 0.0 0.0 90112.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-17 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-17 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-17 prim-core collide-with)) + ) + (set! (-> obj root) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-multi-blade" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj root trans))) + (set-falloff-far! (-> obj sound) 368640.0) + (set! (-> obj y-min) -16384.0) + (set! (-> obj y-max) 16384.0) + (set! (-> obj snd-water) + (the-as uint128 (make-u128 (the-as uint #x772d656461) (the-as uint #x6c622d69746c756d))) + ) + (set! (-> obj snd-no-water) (the-as uint128 (make-u128 #x656461 (the-as uint #x6c622d69746c756d)))) + (let* ((v1-34 *game-info*) + (a0-18 (+ (-> v1-34 attack-id) 1)) + ) + (set! (-> v1-34 attack-id) a0-18) + (set! (-> obj attack-id) a0-18) + ) + (transform-post) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type sew-twist-blade +(deftype sew-twist-blade (sew-blade) + ((root-overide collide-shape-moving :offset 128) + (no-collision-timer uint64 :offset-assert 248) + ) + :heap-base #x80 + :method-count-assert 22 + :size-assert #x100 + :flag-assert #x1600800100 + (:methods + (idle () _type_ :state 21) + ) + ) + +;; definition for method 3 of type sew-twist-blade +(defmethod inspect sew-twist-blade ((obj sew-twist-blade)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type sew-blade inspect))) + (t9-0 obj) + ) + (format #t "~2Tno-collision-timer: ~D~%" (-> obj no-collision-timer)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-twist-blade sew-twist-blade sew-twist-blade-lod0-jg sew-twist-blade-idle-ja + ((sew-twist-blade-lod0-mg (meters 20)) (sew-twist-blade-lod1-mg (meters 999999))) + :bounds (static-spherem 10 0 0 12) + ) + +;; failed to figure out what this is: +(defstate idle (sew-twist-blade) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (the-as + object + (case event-type + (('touch 'attack) + (let* ((s4-0 proc) + (gp-0 (if (type? s4-0 process-focusable) + (the-as process-focusable s4-0) + ) + ) + ) + (when gp-0 + (let ((s4-2 (vector-! (new 'stack-no-clear 'vector) (-> gp-0 root-override trans) (-> self root-overide trans))) + (v1-5 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self root-overide quat))) + ) + (if (< (vector-dot v1-5 s4-2) 0.0) + (vector-float*! v1-5 v1-5 -1.0) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) (process->ppointer self)) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack-or-shove) + (set! (-> a1-6 param 0) (-> event param 0)) + (let ((a0-14 (new 'static 'attack-info :mask (attack-info-mask vector shove-back shove-up id)))) + (set! (-> a0-14 id) (-> self attack-id)) + (set! (-> a0-14 vector quad) (-> v1-5 quad)) + (set! (-> a0-14 shove-back) 16384.0) + (set! (-> a0-14 shove-up) 8192.0) + (set! (-> a1-6 param 1) (the-as uint a0-14)) + ) + (send-event-function gp-0 a1-6) + ) + ) + (set! (-> self no-collision-timer) (the-as uint (-> self clock frame-counter))) + (let ((v1-13 (-> self root-overide root-prim))) + (set! (-> v1-13 prim-core collide-as) (collide-spec)) + (set! (-> v1-13 prim-core collide-with) (collide-spec)) + ) + 0 + ) + ) + ) + ) + ) + ) + :trans (behavior () + (when (and (nonzero? (-> self no-collision-timer)) + (>= (- (-> self clock frame-counter) (the-as int (-> self no-collision-timer))) + (the-as time-frame (-> *TARGET-bank* hit-invulnerable-timeout)) + ) + ) + (let ((v1-7 (-> self root-overide root-prim))) + (set! (-> v1-7 prim-core collide-as) (-> self root-overide backup-collide-as)) + (set! (-> v1-7 prim-core collide-with) (-> self root-overide backup-collide-with)) + ) + (set! (-> self no-collision-timer) (the-as uint 0)) + 0 + ) + (let ((a1-0 (new 'stack-no-clear 'overlaps-others-params))) + (set! (-> a1-0 options) (overlaps-others-options oo0)) + (set! (-> a1-0 collide-with-filter) (the-as collide-spec -1)) + (set! (-> a1-0 tlist) *touching-list*) + (find-overlapping-shapes (-> self root-overide) a1-0) + ) + (none) + ) + :code (behavior () + (until #f + (ja-no-eval :group! (ja-group) + :num! (seek! (the float (+ (-> (ja-group) frames num-frames) -1)) 0.02) + :frame-num 0.0 + ) + (until (ja-done? 0) + (suspend) + (ja :num! (seek! max 0.02)) + ) + ) + #f + (none) + ) + :post (behavior () + (sew-blade-method-20 self) + (transform-post) + (none) + ) + ) + +;; definition for method 11 of type sew-twist-blade +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-twist-blade ((obj sew-twist-blade) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) cshape-reaction-default) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (collide-spec camera-blocker pusher)) + (set! (-> s3-0 prim-core collide-with) (collide-spec jak player-list)) + (set! (-> s3-0 prim-core action) (collide-action solid deadly)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 40960.0 0.0 0.0 49152.0) + (set! (-> s4-0 total-prims) (the-as uint 1)) + (set! (-> s4-0 root-prim) s3-0) + ) + (pusher-init s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (let ((v1-17 (-> s4-0 root-prim))) + (set! (-> s4-0 backup-collide-as) (-> v1-17 prim-core collide-as)) + (set! (-> s4-0 backup-collide-with) (-> v1-17 prim-core collide-with)) + ) + (set! (-> obj root-overide) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-twist-blade" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (transform-post) + (set! (-> obj sound) (new 'process 'ambient-sound "none" (-> obj root-overide trans))) + (set-falloff-far! (-> obj sound) 245760.0) + (set! (-> obj y-min) -4096.0) + (set! (-> obj y-max) 4096.0) + (set! (-> obj snd-water) + (the-as uint128 (make-u128 (the-as uint #x772d656461) (the-as uint #x6c622d7473697774))) + ) + (set! (-> obj snd-no-water) (the-as uint128 (make-u128 #x656461 (the-as uint #x6c622d7473697774)))) + (let* ((v1-34 *game-info*) + (a0-18 (+ (-> v1-34 attack-id) 1)) + ) + (set! (-> v1-34 attack-id) a0-18) + (set! (-> obj attack-id) a0-18) + ) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type sew-light-switch +(deftype sew-light-switch (process-drawable) + ((light-state symbol :offset-assert 200) + (actor-group (pointer actor-group) :offset-assert 204) + (actor-group-count int32 :offset-assert 208) + ) + :heap-base #x60 + :method-count-assert 24 + :size-assert #xd4 + :flag-assert #x18006000d4 + (:methods + (idle () _type_ :state 20) + (pressed () _type_ :state 21) + (sew-light-switch-method-22 (_type_) none 22) + (sew-light-switch-method-23 (_type_ symbol) none 23) + ) + ) + +;; definition for method 3 of type sew-light-switch +(defmethod inspect sew-light-switch ((obj sew-light-switch)) + (when (not obj) + (set! obj obj) + (goto cfg-7) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tlight-state: ~A~%" (-> obj light-state)) + (format #t "~2Tactor-group: #x~X~%" (-> obj actor-group)) + (dotimes (s5-0 (-> obj actor-group-count)) + (format #t "~T [~D]~2Tactor-group: ~`actor-group`P~%" s5-0 (-> obj actor-group s5-0)) + ) + (format #t "~2Tactor-group-count: ~D~%" (-> obj actor-group-count)) + (label cfg-7) + obj + ) + +;; definition of type sew-light-control +(deftype sew-light-control (process) + ((search-switches basic :offset-assert 128) + (search-turrets basic :offset-assert 132) + (switch-ent entity-actor :offset-assert 136) + (turret-ent entity-actor :offset-assert 140) + ) + :heap-base #x10 + :method-count-assert 17 + :size-assert #x90 + :flag-assert #x1100100090 + (:methods + (idle () _type_ :state 14) + (sew-light-control-method-15 (_type_ symbol symbol) float 15) + (sew-light-control-method-16 (_type_ object vector float) symbol 16) + ) + ) + +;; definition for method 3 of type sew-light-control +(defmethod inspect sew-light-control ((obj sew-light-control)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process inspect))) + (t9-0 obj) + ) + (format #t "~2Tsearch-switches: ~A~%" (-> obj search-switches)) + (format #t "~2Tsearch-turrets: ~A~%" (-> obj search-turrets)) + (format #t "~2Tswitch-ent: ~A~%" (-> obj switch-ent)) + (format #t "~2Tturret-ent: ~A~%" (-> obj turret-ent)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defskelgroup skel-sew-light-switch sew-light-switch 0 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 1.5) + ) + +;; failed to figure out what this is: +(defstate idle (sew-light-switch) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('trigger) + (sew-light-switch-method-23 self 'cue-chase) + (go-virtual pressed) + ) + (('touch 'attack) + (let* ((gp-0 (-> event param 0)) + (s5-0 proc) + (v1-6 (if (type? s5-0 target) + s5-0 + ) + ) + ) + (when (and gp-0 v1-6) + (sew-light-switch-method-23 self 'cue-chase) + (go-virtual pressed) + ) + ) + ) + ) + ) + :enter (behavior () + (set! (-> self light-state) #f) + (none) + ) + :code (behavior () + (ja-channel-set! 1) + (ja :group! (-> self draw art-group data 2) :num! min) + (transform-post) + (sleep-code) + (none) + ) + :post (behavior () + (let ((t9-0 sp-launch-particles-var) + (a0-0 *sp-particle-system-2d*) + (a1-0 (-> *part-id-table* 1442)) + (a2-0 *launch-matrix*) + ) + (set! (-> a2-0 trans quad) (-> self root trans quad)) + (t9-0 a0-0 a1-0 a2-0 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + (ja-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate pressed (sew-light-switch) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('untrigger) + (go-virtual idle) + ) + ) + ) + :enter (behavior () + (set! (-> self light-state) #t) + (sound-play "sew-light-switc") + (none) + ) + :code (behavior () + (ja-no-eval :group! (-> self draw art-group data 2) + :num! (seek! (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) frames num-frames) -1))) + :frame-num 0.0 + ) + (until (ja-done? 0) + (transform-post) + (suspend) + (ja :num! (seek!)) + ) + (sleep-code) + (none) + ) + ) + +;; definition for method 22 of type sew-light-switch +;; WARN: Return type mismatch collide-shape-moving vs none. +(defmethod sew-light-switch-method-22 sew-light-switch ((obj sew-light-switch)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) cshape-reaction-default) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-query vector vector object) nothing) + ) + (let ((v1-6 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> v1-6 prim-core collide-as) (collide-spec obstacle)) + (set! (-> v1-6 prim-core collide-with) (collide-spec jak bot player-list)) + (set! (-> v1-6 prim-core action) (collide-action solid rideable)) + (set! (-> v1-6 transform-index) 3) + (set-vector! (-> v1-6 local-sphere) 0.0 0.0 0.0 4096.0) + (set! (-> s5-0 total-prims) (the-as uint 1)) + (set! (-> s5-0 root-prim) v1-6) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (let ((v1-9 (-> s5-0 root-prim))) + (set! (-> s5-0 backup-collide-as) (-> v1-9 prim-core collide-as)) + (set! (-> s5-0 backup-collide-with) (-> v1-9 prim-core collide-with)) + ) + (set! (-> obj root) s5-0) + ) + (none) + ) + +;; definition for method 23 of type sew-light-switch +;; WARN: Return type mismatch object vs none. +(defmethod sew-light-switch-method-23 sew-light-switch ((obj sew-light-switch) (arg0 symbol)) + (with-pp + (dotimes (s4-0 (-> obj actor-group-count)) + (let ((s3-0 (-> obj actor-group s4-0))) + (dotimes (s2-0 (-> s3-0 length)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) (process->ppointer pp)) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) arg0) + (let ((t9-0 send-event-function) + (v1-5 (-> s3-0 data s2-0 actor)) + ) + (t9-0 + (if v1-5 + (-> v1-5 extra process) + ) + a1-1 + ) + ) + ) + ) + ) + ) + (if (-> *game-info* controller 0) + (send-event (-> *game-info* controller 0 process 0) arg0) + ) + (none) + ) + ) + +;; definition for method 11 of type sew-light-switch +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! sew-light-switch ((obj sew-light-switch) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (sew-light-switch-method-22 obj) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-sew-light-switch" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (process-entity-status! obj (entity-perm-status no-kill) #t) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-6 (res-lump-data (-> obj entity) 'actor-groups pointer :tag-ptr (& sv-16)))) + (cond + ((and v1-6 (nonzero? (-> sv-16 elt-count))) + (set! (-> obj actor-group) (the-as (pointer actor-group) v1-6)) + (set! (-> obj actor-group-count) (the-as int (-> sv-16 elt-count))) + ) + (else + (set! (-> obj actor-group) (the-as (pointer actor-group) #f)) + (set! (-> obj actor-group-count) 0) + 0 + ) + ) + ) + (set! (-> obj light-state) #f) + (go (method-of-object obj idle)) + (none) + ) + +;; definition for method 16 of type sew-light-control +;; ERROR: failed type prop at 53: Could not figure out load: (set! v1 (l.w s4)) +(defmethod sew-light-control-method-16 sew-light-control ((a0-0 sew-light-control) (a1-0 object) (a2-0 vector) (a3-0 float)) + (local-vars + (v0-0 symbol) + (v0-1 none) + (v0-2 none) + (v0-3 none) + (v1-0 int) + (v1-1 none) + (v1-2 none) + (v1-3 none) + (v1-4 none) + (v1-5 none) + (v1-7 none) + (v1-8 none) + (v1-10 none) + (v1-12 none) + (v1-13 none) + (v1-14 none) + (v1-16 none) + (v1-17 none) + (v1-19 none) + (v1-22 none) + (a1-1 none) + (a1-2 none) + (a2-1 none) + (s0-0 none) + (s1-0 none) + (s2-0 int) + (s5-0 symbol) + (t9-0 none) + (t9-1 none) + (t9-2 none) + (sp-0 none) + (f0-0 none) + (f0-1 none) + (f0-2 none) + (f28-0 none) + (f30-0 int) + ) + (when (begin a1-0) + (if (begin + (set! s5-0 #f) + (set! v1-0 -1082130432) + (set! f30-0 (gpr->fpr v1-0)) + (set! s2-0 0) + (while (begin (set! v1-19 (the-as none (l.w a1-0))) (<.si s2-0 v1-19)) + (when (begin + (when (begin + (set! v1-1 (the-as none (sll s2-0 3))) + (set! v1-2 (the-as none (+ v1-1 12))) + (set! v1-3 (the-as none (+ v1-2 a1-0))) + (set! v1-4 (the-as none (l.wu v1-3))) + v1-4 + ) + (set! v1-5 (the-as none (l.wu (+ v1-4 20)))) + (set! s1-0 (the-as none (l.wu (+ v1-5 12)))) + ) + s1-0 + ) + (when (begin + (when (begin + (set! t9-0 (the-as none vector-vector-distance)) + (set! a0-1 (the-as none a2-0)) + (set! v1-7 (the-as none (l.wu (+ s1-0 124)))) + (set! a1-1 (the-as none (+ v1-7 12))) + (set! v0-1 (the-as none (call!))) + (set! f28-0 (the-as none (gpr->fpr v0-1))) + (set! s0-0 (the-as none (+ sp-0 16))) + (set! t9-1 (the-as none sphere<-vector+r!)) + (set! a0-2 (the-as none s0-0)) + (set! v1-8 (the-as none (l.wu (+ s1-0 124)))) + (set! a1-2 (the-as none (+ v1-8 12))) + (set! a2-1 (the-as none #x47f00000)) + (call!) + (set! t9-2 (the-as none sphere-in-view-frustum?)) + (set! a0-3 (the-as none s0-0)) + (set! v0-3 (the-as none (call!))) + v0-3 + ) + (set! v1-10 (the-as none #x3f400000)) + (set! f0-0 (the-as none (gpr->fpr v1-10))) + (set! f28-0 (the-as none (*.s f0-0 f28-0))) + (set! v1-11 (the-as none (fpr->gpr f28-0))) + ) + (set! v1-12 (the-as none -1082130432)) + (set! f0-1 (the-as none (gpr->fpr v1-12))) + (set! v1-13 (the-as none (=.s f30-0 f0-1))) + (or v1-13 (set! v1-14 (the-as none (<.s f28-0 f30-0)))) + v1-14 + ) + (set! f30-0 (the-as int f28-0)) + (set! v1-16 (the-as none (sll s2-0 3))) + (set! v1-17 (the-as none (+ v1-16 12))) + (set! s5-0 (the-as symbol (+ v1-17 a1-0))) + (set! v1-18 (the-as none s5-0)) + ) + ) + (set! s2-0 (the-as int (+ s2-0 1))) + ) + (and (begin s5-0) + (begin (set! f0-2 (the-as none (gpr->fpr a3-0))) (set! v1-22 (the-as none (<.s f30-0 f0-2)))) + ) + v1-22 + ) + (set! v0-0 (the-as symbol s5-0)) + ) + ) + (ret-value v0-0) + ) + +;; failed to figure out what this is: +(defstate idle (sew-light-control) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (local-vars (v0-0 entity)) + (the-as object (case event-type + (('use-switch) + (set! v0-0 (entity-by-name (the-as string (-> event param 0)))) + (set! (-> self switch-ent) (the-as entity-actor v0-0)) + v0-0 + ) + (('use-turret) + (set! v0-0 (entity-by-name (the-as string (-> event param 0)))) + (set! (-> self turret-ent) (the-as entity-actor v0-0)) + v0-0 + ) + ) + ) + ) + :code (behavior () + (until #f + (suspend) + ) + #f + (none) + ) + :post (behavior () + (let* ((gp-0 *target*) + (a0-1 (if (type? gp-0 process-focusable) + gp-0 + ) + ) + ) + (when a0-1 + (get-trans a0-1 0) + (let ((gp-1 #f) + (a2-0 (the-as object #f)) + ) + (let* ((a0-2 (-> self switch-ent)) + (v1-2 (if a0-2 + (-> a0-2 extra process) + ) + ) + ) + (if v1-2 + (set! gp-1 (-> (the-as sew-light-switch v1-2) light-state)) + ) + ) + (let* ((v1-4 (-> self turret-ent)) + (a0-5 (if v1-4 + (-> v1-4 extra process) + ) + ) + ) + (when a0-5 + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) (process->ppointer self)) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'flash-state) + (set! a2-0 (send-event-function a0-5 a1-2)) + ) + ) + ) + (sew-light-control-method-15 self gp-1 (the-as symbol a2-0)) + ) + ) + ) + (none) + ) + ) + +;; definition for method 15 of type sew-light-control +(defmethod sew-light-control-method-15 sew-light-control ((obj sew-light-control) (arg0 symbol) (arg1 symbol)) + (set-sewer-lights-flag! arg0) + (if arg1 + (set-sewer-turret-flash!) + ) + ) + +;; definition for function sew-light-control-init-by-other +;; WARN: Return type mismatch object vs none. +(defbehavior sew-light-control-init-by-other sew-light-control ((arg0 entity-actor) (arg1 entity-actor)) + (process-entity-set! self arg0) + (set! (-> *game-info* controller 0) (process->handle self)) + (set! (-> self switch-ent) arg0) + (set! (-> self turret-ent) arg1) + (sew-light-control-method-15 self #f #f) + (go-virtual idle) + (none) + ) + +;; definition for function sewer-startup +;; WARN: Return type mismatch int vs none. +(defun sewer-startup () + (cond + ((task-node-closed? (game-task-node sewer-board-introduction)) + (set! (-> sewer bigmap-id) (the-as uint 15)) + (set! (-> sewerb bigmap-id) (the-as uint 15)) + ) + (else + (set! (-> sewer bigmap-id) (the-as uint 14)) + (set! (-> sewerb bigmap-id) (the-as uint 14)) + ) + ) + (process-spawn + sew-light-control + (entity-by-name "sew-light-switch-13") + (entity-by-name "sew-gunturret-13") + :to *entity-pool* + ) + 0 + (none) + ) diff --git a/test/decompiler/reference/jak2/levels/sewer/sewer-scenes_REF.gc b/test/decompiler/reference/jak2/levels/sewer/sewer-scenes_REF.gc new file mode 100644 index 0000000000..8dad070507 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/sewer/sewer-scenes_REF.gc @@ -0,0 +1,1427 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defpartgroup group-sewer-explode0 + :id 151 + :duration (seconds 3) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 1458 :fade-after (meters 200) :falloff-to (meters 200) :period 9600 :length 25) + (sp-item 1459 :period 9600 :length 10 :offset 10) + (sp-item 1460 :fade-after (meters 120) :falloff-to (meters 120) :period 9600 :length 100 :offset 25) + (sp-item 1461 :fade-after (meters 60) :period 9600 :length 35 :offset 10) + (sp-item 1462 :period 9600 :length 50 :offset 15) + (sp-item 1463 :period 9600 :length 5) + (sp-item 1464 :period 9600 :length 50 :offset 15) + (sp-item 1465 :period 9600 :length 5) + ) + ) + +;; failed to figure out what this is: +(defpart 1463 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -2.5)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 8192.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters 0.5)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-b -5.1) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 65) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 40960.0) + (sp-int spt-next-time 30) + (sp-launcher-by-id spt-next-launcher 1466) + ) + ) + +;; failed to figure out what this is: +(defpart 1466 + :init-specs ((sp-flt spt-scalevel-x (meters -0.2857143)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -3.6571429) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -2.7428572) + ) + ) + +;; failed to figure out what this is: +(defpart 1465 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 120)) + (sp-flt spt-rot-x 8192.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 24.0) + (sp-flt spt-scalevel-x (meters 0.13333334)) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -4.266667) + (sp-flt spt-fade-b -4.266667) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 glow) + (sp-flt spt-userdata 40960.0) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 1467) + ) + ) + +;; failed to figure out what this is: +(defpart 1467 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.85333335) + (sp-flt spt-fade-g -1.7066667) + (sp-flt spt-fade-b -1.7066667) + (sp-flt spt-fade-a -0.64) + ) + ) + +;; failed to figure out what this is: +(defpart 1461 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x92 :page #xc)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters -3.5) (meters 2) 1.0) + (sp-flt spt-scale-x (meters 2.5)) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-scale-y (meters 0.1) (meters 0.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 12.288) + (sp-rnd-flt spt-vel-y (meters 0.26666668) (meters 0.2) 1.0) + (sp-flt spt-fade-b -8.0) + (sp-rnd-flt spt-accel-y -13.653334 -6.826667 1.0) + (sp-rnd-flt spt-friction 0.9 0.08 1.0) + (sp-int-plain-rnd spt-timer 450 299 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 1468) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 10000.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 1468 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -2.6133332) + (sp-flt spt-fade-b -1.7066667) + (sp-rnd-flt spt-fade-a -0.096 -0.096 1.0) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 1469) + ) + ) + +;; failed to figure out what this is: +(defpart 1469 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0)) + ) + +;; failed to figure out what this is: +(defpart 1464 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x34 :page #xc)) + (sp-rnd-flt spt-num 5.0 5.0 1.0) + (sp-flt spt-y (meters -2.5)) + (sp-rnd-flt spt-scale-x (meters 3) (meters 2) 1.0) + (sp-int spt-rot-x 4) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-rot-z) + :flags (sp-flag spflag7) + :random-rangef 65536.0 + :random-multf 1.0 + ) + (sp-rnd-flt spt-scale-y (meters 8) (meters 4) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.033333335) (meters 0.06666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.13333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.26666668) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 25) + (sp-launcher-by-id spt-next-launcher 1470) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-conerot-x) + :flags (sp-flag from-pointer) + :func '*sp-temp* + ) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 2) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 1470 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.55) + (sp-flt spt-fade-g -2.95) + (sp-flt spt-fade-b -3.3) + (sp-int-plain-rnd spt-next-time 30 9 1) + (sp-launcher-by-id spt-next-launcher 1471) + ) + ) + +;; failed to figure out what this is: +(defpart 1471 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2944444) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.2) + (sp-rnd-flt spt-fade-a -0.225 -0.225 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 1462 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x33 :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-rnd-flt spt-num 16.0 10.0 1.0) + (sp-flt spt-y (meters -2.5)) + (sp-rnd-flt spt-scale-x (meters 3) (meters 2) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-rnd-flt spt-scale-y (meters 6.8) (meters 1.2) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.06666667) (meters 0.13333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-flt spt-fade-a -0.32) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 1000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 40 1 0 #xc00000 #xc03300) + ) + (sp-int spt-next-time 25) + (sp-launcher-by-id spt-next-launcher 1472) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 0) (meters 8) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 1472 + :init-specs ((sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-int-plain-rnd spt-next-time 5 19 1) + (sp-launcher-by-id spt-next-launcher 1473) + ) + ) + +;; failed to figure out what this is: +(defpart 1473 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.44) + (sp-flt spt-fade-g -2.36) + (sp-flt spt-fade-b -2.64) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 1474) + ) + ) + +;; failed to figure out what this is: +(defpart 1474 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.008333334) (meters 0.008333334) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -1.2) + (sp-flt spt-fade-g -0.7111111) + (sp-flt spt-fade-b -0.2) + (sp-rnd-flt spt-fade-a -0.06545454 -0.06545454 1.0) + (sp-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 1475) + ) + ) + +;; failed to figure out what this is: +(defpart 1475 + :init-specs ((sp-flt spt-fade-r 0.0) (sp-flt spt-fade-g 0.0) (sp-flt spt-fade-b 0.0) (sp-flt spt-fade-a -0.1125)) + ) + +;; failed to figure out what this is: +(defpart 1460 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #xc)) + (sp-rnd-flt spt-num 6.0 8.0 1.0) + (sp-flt spt-x (meters 0.25)) + (sp-flt spt-y (meters -2.5)) + (sp-rnd-flt spt-scale-x (meters 3) (meters 5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 16.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.4) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -0.18) + (sp-flt spt-fade-b -2.12) + (sp-rnd-flt spt-accel-y -1.3653333 -9.557333 1.0) + (sp-rnd-flt spt-friction 0.88 0.02 1.0) + (sp-int spt-timer 3000) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 1476) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + (sp-rnd-flt spt-conerot-radius (meters 3) (meters 5) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 1476 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.02) + (sp-flt spt-fade-b 0.23555556) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 1477) + ) + ) + +;; failed to figure out what this is: +(defpart 1477 + :init-specs ((sp-flt spt-fade-r -0.5543478) + (sp-flt spt-fade-g -0.5543478) + (sp-flt spt-fade-b -0.5543478) + (sp-rnd-flt spt-fade-a -0.10666667 -0.10666667 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 1458 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 4.0 8.0 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 0.6) 1.0) + (sp-flt spt-y (meters -2.5)) + (sp-rnd-flt spt-scale-x (meters 8.5) (meters 8) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 20.0 1.0) + (sp-rnd-flt spt-g 70.0 20.0 1.0) + (sp-rnd-flt spt-b 70.0 20.0 1.0) + (sp-rnd-flt spt-a 0.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters 0.2) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.033333335) (meters 0.086666666) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 3.3) + (sp-flt spt-fade-g 3.12) + (sp-flt spt-fade-b 1.18) + (sp-flt spt-fade-a 1.76) + (sp-flt spt-friction 0.89) + (sp-int spt-timer 710) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int-plain-rnd spt-next-time 35 14 1) + (sp-launcher-by-id spt-next-launcher 1478) + (sp-rnd-flt spt-conerot-x (degrees -1440.0) (degrees 2880.0) 1.0) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 1478 + :init-specs ((sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.53333336) + (sp-flt spt-fade-g -1.9666667) + (sp-flt spt-fade-b -2.2) + (sp-flt spt-fade-a -0.41666666) + (sp-int-plain-rnd spt-next-time 45 14 1) + (sp-launcher-by-id spt-next-launcher 1479) + ) + ) + +;; failed to figure out what this is: +(defpart 1479 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.38833332) + (sp-flt spt-fade-g -0.21333334) + (sp-flt spt-fade-b -0.028333334) + (sp-flt spt-fade-a -0.38833332) + ) + ) + +;; failed to figure out what this is: +(defpart 1459 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #xc)) + (sp-flt spt-num 9.0) + (sp-flt spt-y (meters -2.5)) + (sp-rnd-flt spt-scale-x (meters 4) (meters 8) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.13333334) (meters 0.4) 1.0) + (sp-flt spt-fade-g 1.6) + (sp-flt spt-fade-b 3.2) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-sewer-explode1 + :id 346 + :duration (seconds 3) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 1458 :fade-after (meters 200) :falloff-to (meters 200) :period 9600 :length 25) + (sp-item 1459 :period 9600 :length 10 :offset 10) + (sp-item 1460 :fade-after (meters 120) :falloff-to (meters 120) :period 9600 :length 100 :offset 25) + (sp-item 1461 :fade-after (meters 60) :period 9600 :length 35 :offset 10) + (sp-item 1462 :period 9600 :length 50 :offset 15) + (sp-item 1463 :period 9600 :length 5) + (sp-item 1464 :period 9600 :length 50 :offset 15) + (sp-item 1465 :period 9600 :length 5) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-sewer-explode2 + :id 347 + :duration (seconds 3) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 1458 :fade-after (meters 200) :falloff-to (meters 200) :period 9600 :length 20) + (sp-item 1459 :period 9600 :length 10 :offset 10) + (sp-item 1460 :fade-after (meters 120) :falloff-to (meters 120) :period 9600 :length 100 :offset 25) + (sp-item 1461 :fade-after (meters 60) :period 9600 :length 35 :offset 5) + (sp-item 1462 :period 9600 :length 50 :offset 10) + (sp-item 1463 :period 9600 :length 5) + (sp-item 1464 :period 9600 :length 40 :offset 15) + (sp-item 1465 :period 9600 :length 5) + (sp-item 1480 :period 9600 :length 800) + ) + ) + +;; failed to figure out what this is: +(defpart 1480 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-rnd-flt spt-num 0.25 0.2 1.0) + (sp-rnd-flt spt-x (meters 0) (meters 16) 1.0) + (sp-flt spt-y (meters -4)) + (sp-rnd-flt spt-scale-x (meters 4) (meters 4) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.016666668) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.12) (degrees 0.24) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-fade-a 0.10666667 0.13333334 1.0) + (sp-rnd-flt spt-accel-y -0.68266666 -1.3653333 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-int spt-next-time 300) + (sp-launcher-by-id spt-next-launcher 1481) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 1481 + :init-specs ((sp-rnd-flt spt-fade-a -0.08 -0.08 1.0)) + ) + +;; failed to figure out what this is: +(defpartgroup group-sewer-gun-laser-beam + :id 348 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 1) + :parts ((sp-item 1482 :flags (bit6 bit7)) (sp-item 1483 :flags (bit6 bit7)) (sp-item 1484 :flags (is-3d bit6 bit7))) + ) + +;; failed to figure out what this is: +(defpart 1483 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 32.0 8.0 1.0) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 48.0 16.0 1.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 1482 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbb :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 1.0) + (sp-flt spt-rot-x 204.8) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 glow) + (sp-flt spt-userdata 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 1484 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x4c :page #xc)) + (sp-flt spt-num 3.0) + (sp-flt spt-z (meters 8)) + (sp-rnd-flt spt-scale-x (meters 0.025) (meters 0.005) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-flt spt-scale-y (meters 20)) + (sp-flt spt-r 255.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-rnd-flt spt-a 20.0 8.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 sp-cpuinfo-flag-14 left-multiply-quat) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 + 10 + 1 + 0 + #xc04c00 + #xc04d00 + #xc04e00 + #xc04f00 + #xc05000 + #xc05100 + #xc05200 + #xc05300 + #xc05400 + #xc05500 + #xc05600 + #xc05700 + #xc05800 + #xc05900 + #xc05a00 + #xc05b00 + #xc05c00 + #xc05d00 + #xc05e00 + #xc05f00 + #xc06000 + #xc06100 + #xc06200 + #xc06300 + #xc06400 + #xc06500 + #xc06600 + #xc06700 + #xc06800 + #xc06900 + #xc06a00 + #xc06b00 + ) + ) + (sp-func spt-func 'sparticle-texture-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-sewer-key-pull-out + :id 349 + :linger-duration (seconds 1.5) + :bounds (static-bspherem 0 0 0 15) + :parts ((sp-item 1485) (sp-item 1486) (sp-item 1487)) + ) + +;; failed to figure out what this is: +(defpart 1485 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 2.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 138.0) + (sp-rnd-flt spt-g 85.0 16.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.01) 1.0) + (sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.16) + (sp-flt spt-accel-y -1.3653333) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 1486 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-rnd-flt spt-g 96.0 16.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 16.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.02) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-flt spt-accel-y -1.3653333) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-rnd-flt spt-conerot-x (degrees 60.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 1487 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x26 :page #xc)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-x (meters -0.4) (meters 0.8) 1.0) + (sp-rnd-flt spt-y (meters -0.1) (meters 0.4) 1.0) + (sp-rnd-flt spt-z (meters -0.4) (meters 0.8) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.03) (meters 0.02) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 148.0) + (sp-rnd-flt spt-g 85.0 16.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.015) (meters 0.006666667) 1.0) + (sp-flt spt-fade-a -0.42666668) + (sp-rnd-flt spt-accel-y -5.4613333 2.7306666 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 50.000004) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.5)) + ) + ) + +;; failed to figure out what this is: +(scene-method-16 + (new 'static 'scene + :name "sewer-drain-res" + :extra #f + :info #f + :mask-to-clear #x1282000 + :entity "scene-stage-30" + :art-group "scenecamera" + :anim "sewer-drain-res" + :parts 8 + :command-list '((0 (task-close! "sewer-board-resolution") (fadein (frame-time-30 10))) + (400 (part-tracker "group-sewer-key-pull-out" entity "sew-gold-key" joint "key" duration (frame-time 5))) + ) + :cut-list '(70 330 441 498 591) + :wait-ground-time (seconds 1) + :draw-target #f + :abort #t + :actor (new 'static 'boxed-array :type scene-actor + (new 'static 'scene-actor + :name "scenecamera" + :level #f + :art-group "skel-scenecamera" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :camera 4 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sidekick-highres" + :level 'sewer + :art-group "skel-sidekick-highres" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "jak-highres" + :level 'sewer + :art-group "skel-jak-highres" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sew-gold-key" + :level 'sewer + :art-group "skel-sew-gold-key" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + ) + :load-point-obj "sewer-start" + :end-point-obj #f + :borrow '() + :sfx-volume -1.0 + :ambient-volume -1.0 + :music-volume -1.0 + :blackout-end #t + :peaceful #t + :music-delay 1500.0 + :save #t + ) + ) + +;; failed to figure out what this is: +(scene-method-16 + (new 'static 'scene + :name "sewer-blow-up-statue-res" + :extra #f + :info #f + :mask-to-clear #x1282000 + :entity "scene-stage-40" + :art-group "scenecamera" + :anim "sewer-blow-up-statue-res" + :parts 15 + :command-list '((0 + (kill "sewer-part-366") + (kill "sewer-part-367") + (kill "sewer-part-368") + (kill "sewer-part-369") + (fadein (seconds (new 'static 'bfloat :data 0.333))) + (send-event "jinx-sewer-1" 'hide #t) + (send-event "grim-sewer-1" 'hide #t) + (send-event "mog-sewer-1" 'hide #t) + ) + (200 + (send-event "jinx" 'segment 1024 770) + (send-event "mog" 'segment 32768 131074) + (send-event "grim" 'segment 16 770) + ) + (362 (send-event "jinx" 'segment 0 6208) (send-event "mog" 'segment 0 16384) (send-event "grim" 'segment 0 8)) + (365 (send-event "sew-mar-statue-5" 'hide)) + (375 + (part-tracker + "group-sewer-explode0" + entity + "particleman" + joint + "particleA" + track + #t + duration + (frame-range (new 'static 'bfloat :data 375.0) (new 'static 'bfloat :data 475.0)) + ) + ) + (377 (apply ,(lambda :behavior scene-player () (set-sewesc-explosion!)))) + (390 + (apply ,(lambda :behavior scene-player () (set-sewesc-explosion!))) + (part-tracker + "group-sewer-explode1" + entity + "particleman" + joint + "particleB" + track + #t + duration + (frame-range (new 'static 'bfloat :data 390.0) (new 'static 'bfloat :data 490.0)) + ) + ) + (395 + (apply ,(lambda :behavior scene-player () (set-sewesc-explosion!))) + (part-tracker + "group-sewer-explode2" + entity + "particleman" + joint + "particleC" + track + #t + duration + (frame-range (new 'static 'bfloat :data 395.0) (new 'static 'bfloat :data 495.0)) + ) + ) + (418 (apply ,(lambda :behavior scene-player () (set-sewesc-explosion!)))) + (2340 (fadeout (seconds (new 'static 'bfloat :data 0.333)))) + (10000 + (send-event "sew-mar-statue-5" 'trigger) + (task-close! "sewer-escort-resolution") + (talker-spawn "krew003") + ) + ) + :cut-list '(86 161 296 326 361 376 396 416 539 571 620 681 731 781) + :wait-ground-time (seconds 1) + :draw-target #f + :abort #t + :actor (new 'static 'boxed-array :type scene-actor + (new 'static 'scene-actor + :name "scenecamera" + :level #f + :art-group "skel-scenecamera" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :camera 4 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "particleman" + :level 'sewesc + :art-group "skel-particleman" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sidekick-highres" + :level 'sewesc + :art-group "skel-sidekick-highres" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "jak-highres" + :level 'sewesc + :art-group "skel-jak-highres" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sew-mar-statue-explode-a" + :level 'sewesc + :art-group "skel-sew-mar-statue-explode-a" + :prefix "a-" + :draw-frames '((min max)) + :scissor-frames '((369 376) (541 542) (620 692) (731 781)) + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sew-mar-statue-explode-b" + :level 'sewesc + :art-group "skel-sew-mar-statue-explode-b" + :prefix "b-" + :draw-frames '((min max)) + :scissor-frames '((369 376) (541 542) (620 692) (731 781)) + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "heart-of-mar" + :level 'sewesc + :art-group "skel-heart-of-mar" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "jinx" + :level 'sewesc + :art-group "skel-jinx" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x1ae2 + :no-draw-seg #x3e51c + ) + (new 'static 'scene-actor + :name "mog" + :level 'sewesc + :art-group "skel-jinx" + :prefix "mog-" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x26002 + :no-draw-seg #x19ffc + ) + (new 'static 'scene-actor + :name "grim" + :level 'sewesc + :art-group "skel-jinx" + :prefix "grim-" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x28e + :no-draw-seg #x3fd70 + ) + ) + :load-point-obj "sewesc-start" + :end-point-obj (new 'static 'continue-point + :name "sewesc-start" + :level #f + :flags (continue-flags cf2) + :trans (new 'static 'vector :x 5541148.0 :y -363968.9 :z 2435194.5 :w 1.0) + :quat (new 'static 'vector :y 0.0482 :w 0.9988) + :camera-trans (new 'static 'vector :x 5518817.0 :y -344878.7 :z 2399633.5 :w 1.0) + :camera-rot (new 'static 'inline-array vector3s 3 + (new 'static 'vector3s :data (new 'static 'array float 3 0.8481 0.0 -0.5297)) + (new 'static 'vector3s :data (new 'static 'array float 3 0.0787 0.9888 0.126)) + (new 'static 'vector3s :data (new 'static 'array float 3 0.5238 -0.1486 0.8387)) + ) + :on-goto #f + :vis-nick 'sewesc + :want (new 'static 'inline-array level-buffer-state 6 + (new 'static 'level-buffer-state :name 'sewescb :display? 'display :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name 'sewesc :display? 'display :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + ) + :want-sound (new 'static 'array symbol 3 'sewer4 'sewer5 'sewer6) + ) + :borrow '() + :sfx-volume -1.0 + :ambient-volume -1.0 + :music-volume -1.0 + :blackout-end #t + :peaceful #t + :music-delay 1500.0 + :save #t + :scene-task #xb0 + ) + ) + +;; definition of type fake-jinx-bomb-info +(deftype fake-jinx-bomb-info (basic) + ((handle handle :offset-assert 8) + ) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + +;; definition for method 3 of type fake-jinx-bomb-info +(defmethod inspect fake-jinx-bomb-info ((obj fake-jinx-bomb-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~1Thandle: ~D~%" (-> obj handle)) + (label cfg-4) + obj + ) + +;; definition for symbol *fake-jinx-bomb-info*, type fake-jinx-bomb-info +(define *fake-jinx-bomb-info* (new 'static 'fake-jinx-bomb-info)) + +;; failed to figure out what this is: +(set! (-> *fake-jinx-bomb-info* handle) (the-as handle #f)) + +;; failed to figure out what this is: +(scene-method-16 + (new 'static 'scene + :name "sewer-hosehead" + :extra #f + :info #f + :mask-to-clear #x2000 + :entity "scene-stage-66" + :art-group "scenecamera" + :anim "sewer-hosehead" + :parts 4 + :command-list '((0 + (fadein (seconds (new 'static 'bfloat :data 0.333))) + (send-event "jinx-sewer-1" 'hide #t) + (send-event "grim-sewer-1" 'hide #t) + (send-event "mog-sewer-1" 'hide #t) + (send-event "jinx" 'segment 0 1026) + (send-event "mog" 'segment 0 32770) + (send-event "grim" 'segment 0 18) + (kill "sew-wall-3") + (send-event "jinx-sewer-1" 'request 'no-bomb) + (apply + ,(lambda :behavior scene-player + () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'quaternion)) + ) + (set-vector! gp-0 5705928.5 -364089.75 2060228.6 1.0) + (quaternion-identity! s5-0) + (let ((s4-0 (get-process *default-dead-pool* jinx-bomb #x4000))) + (set! (-> *fake-jinx-bomb-info* handle) + (ppointer->handle + (when s4-0 + (let ((t9-2 (method-of-type jinx-bomb activate))) + (t9-2 + (the-as jinx-bomb s4-0) + (ppointer->process (-> *setting-control* user-current movie)) + (symbol->string (-> jinx-bomb symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s3-0 run-function-in-process) + (s2-0 s4-0) + (s1-0 jinx-bomb-init-by-other) + ) + (level-get *level* 'sewesc) + 0 + ((the-as (function object object object object none) s3-0) s2-0 s1-0 gp-0 s5-0) + ) + (-> s4-0 ppointer) + ) + ) + ) + ) + ) + (none) + ) + ) + ) + (13 + (apply + ,(lambda :behavior scene-player + () + (send-event (handle->process (-> *fake-jinx-bomb-info* handle)) 'trigger) + (none) + ) + ) + ) + (128 (apply ,(lambda :behavior scene-player () (spawn-hosehead-fakes) (none)))) + (184 + (apply + ,(lambda :behavior scene-player + () + (hosehead-fake-trigger 8) + (hosehead-fake-trigger 9) + (hosehead-fake-trigger 12) + (hosehead-fake-trigger 19) + (hosehead-fake-trigger 20) + (none) + ) + ) + ) + (211 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 7) (none)))) + (237 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 10) (hosehead-fake-trigger 22) (none)))) + (249 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 3) (none)))) + (256 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 11) (none)))) + (257 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 2) (none)))) + (260 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 25) (none)))) + (262 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 15) (none)))) + (265 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 29) (none)))) + (268 + (send-event "hal-sewer-1" 'hosehead-fake 14) + (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 14) (none))) + ) + (275 + (send-event "hal-sewer-1" 'hosehead-fake 13) + (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 13) (none))) + ) + (293 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 4) (hosehead-fake-trigger 23) (none)))) + (299 (apply ,(lambda :behavior scene-player () (hosehead-fake-trigger 24) (none)))) + (354 (send-event *target* 'change-mode 'gun #f (unbox 1))) + (368 + (part-tracker "group-sewer-gun-laser-beam" entity "gun" joint "laser" track #t duration (frame-range 368 400)) + ) + (10000 + (send-event "jinx-sewer-1" 'hide #f) + (send-event "grim-sewer-1" 'hide #f) + (send-event "mog-sewer-1" 'hide #f) + (task-close! "sewer-escort-explode-wall2") + ) + ) + :cut-list '(55 181 350) + :wait-ground-time (seconds 1) + :draw-target #f + :abort #t + :actor (new 'static 'boxed-array :type scene-actor + (new 'static 'scene-actor + :name "scenecamera" + :level #f + :art-group "skel-scenecamera" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :camera 4 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sidekick-highres" + :level 'sewesc + :art-group "skel-sidekick-highres" + :prefix "" + :draw-frames '((min 181) (350 max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "jak-highres" + :level 'sewesc + :art-group "skel-jak-highres" + :prefix "" + :draw-frames '((min 181) (350 max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "sew-wall" + :level 'sewesc + :art-group "skel-sew-wall" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "hosehead" + :level 'sewesc + :art-group "skel-hosehead" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + ) + (new 'static 'scene-actor + :name "gun" + :level #f + :art-group "skel-gun" + :prefix "" + :draw-frames '((350 max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :no-draw-seg #x4 + ) + (new 'static 'scene-actor + :name "jinx" + :level 'sewesc + :art-group "skel-jinx" + :prefix "" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x1ae2 + :no-draw-seg #x3e51c + ) + (new 'static 'scene-actor + :name "mog" + :level 'sewesc + :art-group "skel-jinx" + :prefix "mog-" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x26002 + :no-draw-seg #x19ffc + ) + (new 'static 'scene-actor + :name "grim" + :level 'sewesc + :art-group "skel-jinx" + :prefix "grim-" + :draw-frames '((min max)) + :scissor-frames '() + :light-index #x1e + :flags #x1 + :shadow-flags -1 + :shadow-volume-joint #f + :draw-seg #x28e + :no-draw-seg #x3fd70 + ) + ) + :load-point-obj "sewesc-start" + :end-point-obj (new 'static 'continue-point + :name "sewesc-start" + :level #f + :flags (continue-flags cf2) + :trans (new 'static 'vector :x 5608474.5 :y -363960.3 :z 1988017.4 :w 1.0) + :quat (new 'static 'vector :y -0.6775 :w -0.7354) + :camera-trans (new 'static 'vector :x 5562796.5 :y -344327.78 :z 1985962.4 :w 1.0) + :camera-rot (new 'static 'inline-array vector3s 3 + (new 'static 'vector3s :data (new 'static 'array float 3 0.0457 0.0 -0.9989)) + (new 'static 'vector3s :data (new 'static 'array float 3 0.1258 0.992 0.0057)) + (new 'static 'vector3s :data (new 'static 'array float 3 0.9909 -0.126 0.0454)) + ) + :on-goto #f + :vis-nick 'sewesc + :want (new 'static 'inline-array level-buffer-state 6 + (new 'static 'level-buffer-state :name 'sewescb :display? 'display :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name 'sewesc :display? 'display :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + (new 'static 'level-buffer-state :name #f :display? #f :force-vis? #f :force-inside? #f) + ) + :want-sound (new 'static 'array symbol 3 'sewer4 'sewer5 'sewer6) + ) + :borrow '() + :sfx-volume -1.0 + :ambient-volume -1.0 + :music-volume -1.0 + :blackout-end #t + :peaceful #t + :music-delay 1500.0 + :save #t + :scene-task #xaf + ) + ) + +;; definition for method 15 of type hud-gunturret +;; WARN: Return type mismatch int vs none. +(defmethod draw hud-gunturret ((obj hud-gunturret)) + (set-hud-piece-position! + (the-as hud-sprite (-> obj sprites)) + (the int (+ 457.0 (* 130.0 (-> obj offset)))) + 205 + ) + (format (clear (-> obj strings 0 text)) "~D" (-> obj values 0 current)) + (set-as-offset-from! (the-as hud-sprite (-> obj strings 0 pos)) (the-as vector4w (-> obj sprites)) -20 24) + ((method-of-type hud draw) obj) + 0 + (none) + ) + +;; definition for method 16 of type hud-gunturret +;; WARN: Return type mismatch int vs none. +(defmethod update-values hud-gunturret ((obj hud-gunturret)) + (set! (-> obj values 0 target) (the int (-> *game-info* counter))) + ((method-of-type hud update-values) obj) + 0 + (none) + ) + +;; definition for method 17 of type hud-gunturret +;; WARN: Return type mismatch int vs none. +(defmethod init-callback hud-gunturret ((obj hud-gunturret)) + (set! (-> obj level) (level-get *level* 'sewerb)) + (set! (-> obj gui-id) + (add-process *gui-control* obj (gui-channel hud-middle-right) (gui-action hidden) (-> obj name) 81920.0 0) + ) + (logior! (-> obj flags) (hud-flags show)) + (set! (-> obj sprites 0 tex) (lookup-texture-by-id (new 'static 'texture-id :page #xd37))) + (set! (-> obj sprites 0 flags) (the-as uint 4)) + (set! (-> obj sprites 0 scale-x) 0.7) + (set! (-> obj sprites 0 scale-y) 0.7) + (alloc-string-if-needed obj 0) + (set! (-> obj strings 0 scale) 0.6) + (set! (-> obj strings 0 flags) (font-flags kerning middle large)) + 0 + (none) + ) + +;; failed to figure out what this is: +(set-subtask-hook! + *game-info* + 41 + 0 + (lambda :behavior task-manager + () + (while (!= (level-status *level* 'sewer) 'active) + (suspend) + ) + (set! (-> *game-info* controller 0) (process->handle self)) + (let ((a0-6 (entity-by-type sew-gunturret))) + (set! (-> self actor-group 0) (res-lump-struct a0-6 'actor-groups (pointer entity-actor))) + ) + (when (-> self actor-group 0) + (set! (-> self data-int32 0) (the-as int (-> self actor-group 0 0))) + (set! (-> self data-int32 1) (the-as int (-> self actor-group 0 0))) + ) + (when (-> self actor-group 0) + (dotimes (gp-1 (the-as int (-> self actor-group 0 0))) + (let ((t0-1 (-> (&+ (-> self actor-group 0) (* gp-1 8)) 3))) + (if t0-1 + (add-icon! *minimap* self (the-as uint 16) (the-as int #f) (the-as vector t0-1) 0) + ) + ) + ) + #f + ) + ) + ) + +;; failed to figure out what this is: +(set-subtask-hook! + *game-info* + 41 + 3 + (lambda :behavior task-manager + () + (local-vars (sv-96 int) (sv-100 float) (sv-104 vector)) + (set! (-> self start-time) (-> self clock frame-counter)) + (set! (-> self hud-timer) (ppointer->handle (process-spawn hud-gunturret :init hud-init-by-other :to self))) + (while (> (-> self data-int32 0) 0) + (when (!= (level-status *level* 'sewer) 'active) + (send-event (handle->process (-> self hud-timer)) 'hide-and-die) + (while (-> self child) + (suspend) + ) + (deactivate self) + ) + (set! sv-96 (-> self data-int32 1)) + (set! sv-100 4095996000.0) + (set! sv-104 (target-pos 0)) + (when (-> self actor-group 0) + (dotimes (gp-2 (the-as int (-> self actor-group 0 0))) + (let ((s5-0 (-> (&+ (-> self actor-group 0) (* gp-2 8)) 3))) + (let ((f0-1 (vector-vector-distance sv-104 (-> s5-0 extra trans)))) + (if (< f0-1 sv-100) + (set! sv-100 f0-1) + ) + ) + (if (and s5-0 (logtest? (-> s5-0 extra perm status) (entity-perm-status dead))) + (set! sv-96 (+ sv-96 -1)) + ) + ) + ) + ) + (when (< sv-96 (-> self data-int32 0)) + (case sv-96 + ((3) + (talker-spawn-func (-> *talker-speech* 462) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((2) + (talker-spawn-func (-> *talker-speech* 463) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((1) + (talker-spawn-func (-> *talker-speech* 464) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + (let ((v1-51 sv-96)) + (set! (-> self data-int32 0) v1-51) + (set! (-> *game-info* counter) (the float v1-51)) + ) + (when (and (= (-> self data-int32 1) sv-96) + (and (< sv-100 122880.0) (>= (- (-> self clock frame-counter) (-> self beep-time)) (seconds 40))) + ) + (talker-spawn-func (-> *talker-speech* 53) *entity-pool* (target-pos 0) (the-as region #f)) + (set! (-> self beep-time) (-> self clock frame-counter)) + ) + (suspend) + ) + (go-virtual complete) + ) + ) diff --git a/test/offline/config/jak2/config.jsonc b/test/offline/config/jak2/config.jsonc index b16bdb126a..6ec9c2d40d 100644 --- a/test/offline/config/jak2/config.jsonc +++ b/test/offline/config/jak2/config.jsonc @@ -272,7 +272,9 @@ "(method 18 minimap)", "(method 16 minimap)", "(method 60 fort-turret)", // they defined the same method twice in the same file, identical impl, just returns #f - "(method 23 dig-tether)" // working around annoying decomp array output + "(method 23 dig-tether)", // working around annoying decomp array output + "(method 16 sew-light-control)", // skipped for now, looking for a caller + "(method 3 rhino)" ], "skip_compile_states": {