From a83bd494264ea4cc06ee13a27cd5b3c14006ae82 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Sat, 4 Feb 2023 20:36:30 -0500 Subject: [PATCH] d/jak2: finish `onin-game` and resolve type-hinting `(array object)` elements (#2188) Fixes https://github.com/open-goal/jak-project/issues/2047 --- common/type_system/TypeSystem.cpp | 2 +- decompiler/IR2/Form.cpp | 2 +- decompiler/IR2/LabelDB.cpp | 6 +- decompiler/IR2/LabelDB.h | 1 + decompiler/ObjectFile/ObjectFileDB_IR2.cpp | 10 +- decompiler/analysis/static_refs.cpp | 1 - decompiler/config/jak2/all-types.gc | 236 +- decompiler/config/jak2/hacks.jsonc | 6 +- decompiler/config/jak2/inputs.jsonc | 5 +- decompiler/config/jak2/label_types.jsonc | 160 +- decompiler/config/jak2/stack_structures.jsonc | 39 +- decompiler/config/jak2/type_casts.jsonc | 14 +- decompiler/util/data_decompile.cpp | 75 +- decompiler/util/data_decompile.h | 2 +- goal_src/jak2/engine/ai/traffic-h.gc | 19 +- .../engine/common_objs/rigid-body-plat.gc | 16 +- goal_src/jak2/engine/debug/default-menu.gc | 8 +- .../jak2/engine/debug/nav/mysql-nav-graph.gc | 4 +- .../jak2/engine/debug/nav/nav-graph-editor.gc | 101 +- goal_src/jak2/engine/draw/drawable.gc | 2 +- goal_src/jak2/engine/entity/entity.gc | 7 +- .../sprite/particles/sparticle-launcher-h.gc | 36 +- goal_src/jak2/engine/level/level-h.gc | 2 +- goal_src/jak2/engine/nav/nav-mesh-h.gc | 2 +- goal_src/jak2/engine/nav/nav-mesh.gc | 2 - goal_src/jak2/engine/physics/rigid-body-h.gc | 37 +- goal_src/jak2/engine/physics/rigid-body.gc | 20 +- .../jak2/levels/city/common/ctyport-obs.gc | 12 +- .../levels/city/common/vehicle-control.gc | 56 +- .../jak2/levels/city/common/vehicle-guard.gc | 1455 +++++- .../levels/city/common/vehicle-physics.gc | 811 ++++ .../levels/city/generic/neon-praxis-part.gc | 1265 +++++ .../jak2/levels/city/onin_tent/onin-game.gc | 2764 +++++++++++ .../jak2/levels/city/palace/ctypal-obs.gc | 3 + .../jak2/levels/city/port/ctyport-part.gc | 3822 ++++++++++++++++ .../levels/common/enemy/bombots/bombbot.gc | 12 +- goal_src/jak2/levels/common/scene-actor.gc | 2 +- goal_src/jak2/levels/dig/dig-obs.gc | 10 +- goal_src/jak2/levels/dig/dig1-obs.gc | 10 +- goal_src/jak2/levels/dig/dig3-obs.gc | 20 +- goal_src/jak2/levels/ruins/ruins-obs.gc | 10 +- goal_src/jak2/levels/underport/under-obs.gc | 65 +- .../engine/common_objs/rigid-body-plat_REF.gc | 26 +- .../jak2/engine/debug/default-menu_REF.gc | 6 +- .../engine/debug/nav/mysql-nav-graph_REF.gc | 7 +- .../jak2/engine/draw/drawable_REF.gc | 2 +- .../jak2/engine/entity/entity_REF.gc | 4 +- .../particles/sparticle-launcher-h_REF.gc | 31 +- .../jak2/engine/level/level-h_REF.gc | 2 +- .../jak2/engine/nav/nav-mesh-h_REF.gc | 2 +- .../reference/jak2/engine/nav/nav-mesh_REF.gc | 2 - .../jak2/engine/physics/rigid-body-h_REF.gc | 47 +- .../jak2/engine/physics/rigid-body_REF.gc | 20 +- .../levels/city/common/ctyport-obs_REF.gc | 12 +- .../levels/city/common/vehicle-control_REF.gc | 336 +- .../levels/city/common/vehicle-guard_REF.gc | 1625 +++++++ .../jak2/levels/city/common/vehicle-h_REF.gc | 10 +- .../levels/city/common/vehicle-physics_REF.gc | 887 ++++ .../city/generic/neon-praxis-part_REF.gc | 1333 ++++++ .../levels/city/onin_tent/onin-game_REF.gc | 2941 ++++++++++++ .../jak2/levels/city/port/ctyport-part_REF.gc | 4060 +++++++++++++++++ .../common/enemy/bombots/bombbot_REF.gc | 12 +- .../reference/jak2/levels/dig/dig-obs_REF.gc | 10 +- .../reference/jak2/levels/dig/dig1-obs_REF.gc | 10 +- .../reference/jak2/levels/dig/dig3-obs_REF.gc | 20 +- .../jak2/levels/ruins/ruins-obs_REF.gc | 10 +- .../jak2/levels/underport/under-obs_REF.gc | 10 +- test/decompiler/test_DataParser.cpp | 2 +- test/offline/config/jak2/config.jsonc | 1 + 69 files changed, 22021 insertions(+), 539 deletions(-) create mode 100644 test/decompiler/reference/jak2/levels/city/common/vehicle-guard_REF.gc create mode 100644 test/decompiler/reference/jak2/levels/city/common/vehicle-physics_REF.gc create mode 100644 test/decompiler/reference/jak2/levels/city/generic/neon-praxis-part_REF.gc create mode 100644 test/decompiler/reference/jak2/levels/city/onin_tent/onin-game_REF.gc create mode 100644 test/decompiler/reference/jak2/levels/city/port/ctyport-part_REF.gc diff --git a/common/type_system/TypeSystem.cpp b/common/type_system/TypeSystem.cpp index 1c023ea876..a90fd4c9be 100644 --- a/common/type_system/TypeSystem.cpp +++ b/common/type_system/TypeSystem.cpp @@ -477,7 +477,7 @@ Type* TypeSystem::lookup_type_allow_partial_def(const std::string& name) const { auto fwd_dec = m_forward_declared_types.find(current_name); if (fwd_dec == m_forward_declared_types.end()) { if (current_name == name) { - throw_typesystem_error("The type {} is unknown (2).\n", name); + throw_typesystem_error("The type '{}' is unknown (2).\n", name); } else { throw_typesystem_error("When looking up forward defined type {}, could not find a type {}.", name, current_name); diff --git a/decompiler/IR2/Form.cpp b/decompiler/IR2/Form.cpp index 0040c4e38c..15ed09a215 100644 --- a/decompiler/IR2/Form.cpp +++ b/decompiler/IR2/Form.cpp @@ -2483,7 +2483,7 @@ void DecompiledDataElement::do_decomp(const Env& env, const LinkedObjectFile* fi if (m_label_info) { m_description = decompile_at_label_with_hint(*m_label_info, m_label, env.file->labels, - env.file->words_by_seg, *env.dts, file, env.version); + env.file->words_by_seg, env.dts->ts, file, env.version); } else { m_description = decompile_at_label_guess_type(m_label, env.file->labels, env.file->words_by_seg, env.dts->ts, file, env.version); diff --git a/decompiler/IR2/LabelDB.cpp b/decompiler/IR2/LabelDB.cpp index 4d9dc8a4b2..7770886df3 100644 --- a/decompiler/IR2/LabelDB.cpp +++ b/decompiler/IR2/LabelDB.cpp @@ -114,4 +114,8 @@ std::optional LabelDB::try_get_index_by_offset(int seg, int offset) const { int LabelDB::get_index_by_name(const std::string& name) const { return m_labels_by_name.at(name); } -} // namespace decompiler \ No newline at end of file + +bool LabelDB::label_exists_by_name(const std::string& name) const { + return m_labels_by_name.count(name) != 0; +} +} // namespace decompiler diff --git a/decompiler/IR2/LabelDB.h b/decompiler/IR2/LabelDB.h index d9247ee939..9ebe98cc53 100644 --- a/decompiler/IR2/LabelDB.h +++ b/decompiler/IR2/LabelDB.h @@ -35,6 +35,7 @@ class LabelDB { int get_index_by_offset(int seg, int offset) const; std::optional try_get_index_by_offset(int seg, int offset) const; int get_index_by_name(const std::string& name) const; + bool label_exists_by_name(const std::string& name) const; LabelInfo set_and_get_previous(int idx, const TypeSpec& type, diff --git a/decompiler/ObjectFile/ObjectFileDB_IR2.cpp b/decompiler/ObjectFile/ObjectFileDB_IR2.cpp index a01411d23a..9da3ec59b2 100644 --- a/decompiler/ObjectFile/ObjectFileDB_IR2.cpp +++ b/decompiler/ObjectFile/ObjectFileDB_IR2.cpp @@ -282,16 +282,14 @@ void ObjectFileDB::ir2_top_level_pass(const Config& config) { func.type = TypeSpec("function"); } - if (config.hacks.asm_functions_by_name.find(name) != - config.hacks.asm_functions_by_name.end()) { - func.warnings.info("Flagged as asm by config"); - func.suspected_asm = true; - } - if (config.hacks.mips2c_functions_by_name.find(name) != config.hacks.mips2c_functions_by_name.end()) { func.warnings.info("Flagged as mips2c by config"); func.suspected_asm = true; + } else if (config.hacks.asm_functions_by_name.find(name) != + config.hacks.asm_functions_by_name.end()) { + func.warnings.error("Flagged as asm by config"); + func.suspected_asm = true; } } } diff --git a/decompiler/analysis/static_refs.cpp b/decompiler/analysis/static_refs.cpp index 7881cfb3f9..d0d0fdfff6 100644 --- a/decompiler/analysis/static_refs.cpp +++ b/decompiler/analysis/static_refs.cpp @@ -58,7 +58,6 @@ bool try_convert_lambda(const Function& parent_function, } } // namespace -// TODO - important entry point! int insert_static_refs(Form* top_level_form, FormPool& pool, const Function& function, diff --git a/decompiler/config/jak2/all-types.gc b/decompiler/config/jak2/all-types.gc index 54ef8290e3..292dc379c4 100644 --- a/decompiler/config/jak2/all-types.gc +++ b/decompiler/config/jak2/all-types.gc @@ -6072,7 +6072,7 @@ (debug-draw-actors (_type_ symbol) none 15) (assign-draw-indices (_type_) none 16) (actors-update (_type_) none 17) - (update-nav-meshes (_type_) none 18) + (update-nav-meshes-method "Clashes with a function name" (_type_) none 18) (level-update (_type_) none 19) (level-get-target-inside (_type_) level 20) (alloc-levels-if-needed (_type_ symbol) none 21) @@ -8958,12 +8958,15 @@ ;; traffic-h ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +++traffic-h:traffic-danger-flags (defenum traffic-danger-flags :type uint8 :bitfield #t (tdf0 0) ) +;; ---traffic-h:traffic-danger-flags +;; +++traffic-h:traffic-danger-type (defenum traffic-danger-type :type uint8 (tdt0 0) @@ -8972,7 +8975,9 @@ (tdt3 3) (tdt4 4) (tdt5 5) + (tdt6 6) ) +;; ---traffic-h:traffic-danger-type (deftype traffic-danger-info (structure) ((sphere sphere :inline :offset-assert 0) @@ -20596,7 +20601,7 @@ (offset uint32 :offset-assert 20) (accum float :offset-assert 24) (spawn-time uint32 :offset-assert 28) - (control basic :offset-assert 32) + (control sparticle-launch-control :offset-assert 32) (swarm basic :offset 20) (seed uint32 :offset 24) (time uint32 :offset 28) @@ -22794,7 +22799,7 @@ (link-by-id "arg1 is a [[nav-mesh-link]] `id`" (_type_ uint) symbol 32) (unlink-by-id "arg1 is a [[nav-mesh-link]] `id`" (_type_ uint) symbol 33) (nav-mesh-method-34 (_type_ vector vector float) float 34) - (nav-mesh-method-35 (_type_ vector vector float) none 35) + (nav-mesh-method-35 (_type_ vector vector float) float 35) (debug-draw-poly (_type_ nav-poly rgba) none 36) (point-in-poly? (_type_ nav-poly vector) symbol 37) (nav-mesh-method-38 (_type_ nav-poly vector vector vector (pointer nav-poly)) vector 38) @@ -31846,7 +31851,7 @@ :size-assert #x41c :flag-assert #x150000041c (:methods - (new (symbol type int string) _type_ 0) + (new (symbol type int symbol) _type_ 0) (init-from-sql! "Query the database and initialize the [[mysql-nav-graph]] and all it's related components" (_type_ string string) symbol 9) @@ -31893,7 +31898,7 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (deftype nav-graph-command (structure) - ((com-type uint32 :offset-assert 0) + ((com-type uint32 :offset-assert 0) ;; TODO - enum (id int32 :offset-assert 4) (index int32 :offset-assert 8) (move-vec vector :inline :offset-assert 16) @@ -31904,15 +31909,16 @@ ) (deftype nav-graph-command-array (inline-array-class) - ((data nav-graph-command :dynamic :offset-assert 16)) + ((data nav-graph-command :inline :dynamic :offset-assert 16)) :method-count-assert 9 :size-assert #x10 :flag-assert #x900000010 ) (deftype nav-graph-editor (process) - ((nav-graph basic :offset-assert 128) - (mode uint32 :offset-assert 132) + ((self-override nav-graph-editor :offset 32 :score 100) + (nav-graph mysql-nav-graph :offset-assert 128) + (mode symbol :offset-assert 132) (command-id int32 :offset-assert 136) (max-command int32 :offset-assert 140) (selected-index int32 :offset-assert 144) @@ -31930,14 +31936,14 @@ (edge-src int32 :offset-assert 256) (edge-dst int32 :offset-assert 260) (edge-visibility int32 :offset-assert 264) - (vehicle-edit-mode basic :offset-assert 268) - (hover-edit-mode basic :offset-assert 272) + (vehicle-edit-mode symbol :offset-assert 268) + (hover-edit-mode symbol :offset-assert 272) (clipping-dist float :offset-assert 276) (plane-height float :offset-assert 280) (plane-height-hold float :offset-assert 284) (default-node mysql-nav-node :inline :offset-assert 288) (default-edge mysql-nav-edge :inline :offset-assert 356) - (command-array basic :offset-assert 424) + (command-array nav-graph-command-array :offset-assert 424) ) :method-count-assert 64 :size-assert #x1ac @@ -31957,57 +31963,57 @@ (adjust-edge-width () _type_ :state 25) (adjust-edge-density () _type_ :state 26) (draw-closest-minimap () _type_ :state 27) - (nav-graph-editor-method-28 () none 28) - (nav-graph-editor-method-29 () none 29) - (nav-graph-editor-method-30 () none 30) - (nav-graph-editor-method-31 () none 31) - (nav-graph-editor-method-32 () none 32) - (nav-graph-editor-method-33 () none 33) - (nav-graph-editor-method-34 () none 34) - (nav-graph-editor-method-35 () none 35) - (nav-graph-editor-method-36 () none 36) - (nav-graph-editor-method-37 () none 37) - (nav-graph-editor-method-38 () none 38) - (nav-graph-editor-method-39 () none 39) - (nav-graph-editor-method-40 () none 40) - (nav-graph-editor-method-41 () none 41) - (nav-graph-editor-method-42 () none 42) - (nav-graph-editor-method-43 () none 43) - (nav-graph-editor-method-44 () none 44) - (nav-graph-editor-method-45 () none 45) - (nav-graph-editor-method-46 () none 46) - (nav-graph-editor-method-47 () none 47) - (nav-graph-editor-method-48 () none 48) - (nav-graph-editor-method-49 () none 49) - (nav-graph-editor-method-50 () none 50) - (nav-graph-editor-method-51 () none 51) - (nav-graph-editor-method-52 () none 52) - (nav-graph-editor-method-53 () none 53) - (nav-graph-editor-method-54 () none 54) - (nav-graph-editor-method-55 () none 55) - (nav-graph-editor-method-56 () none 56) - (nav-graph-editor-method-57 () none 57) - (nav-graph-editor-method-58 () none 58) - (nav-graph-editor-method-59 () none 59) - (nav-graph-editor-method-60 () none 60) - (nav-graph-editor-method-61 () none 61) + (nav-graph-editor-method-28 (_type_) none 28) + (nav-graph-editor-method-29 (_type_ string string string) none 29) + (nav-graph-editor-method-30 (_type_ int) symbol 30) + (nav-graph-editor-method-31 (_type_ int) symbol 31) + (nav-graph-editor-method-32 (_type_ symbol int) none 32) + (nav-graph-editor-method-33 (_type_ int) none 33) + (nav-graph-editor-method-34 (_type_) object 34) + (nav-graph-editor-method-35 (_type_) none 35) + (nav-graph-editor-method-36 (_type_) none 36) + (nav-graph-editor-method-37 (_type_) none 37) + (nav-graph-editor-method-38 (_type_) none 38) + (nav-graph-editor-method-39 (_type_) none 39) + (nav-graph-editor-method-40 (_type_) none 40) + (nav-graph-editor-method-41 (_type_) none 41) + (nav-graph-editor-method-42 (_type_) symbol 42) + (nav-graph-editor-method-43 (_type_) none 43) + (nav-graph-editor-method-44 (_type_) symbol 44) + (nav-graph-editor-method-45 (_type_) none 45) + (nav-graph-editor-method-46 (_type_) pad-buttons 46) + (nav-graph-editor-method-47 (_type_) none 47) + (nav-graph-editor-method-48 "TODO - enum / com-type" (_type_ uint32) nav-graph-command 48) + (nav-graph-editor-method-49 (_type_) nav-graph-command 49) + (nav-graph-editor-method-50 (_type_) none 50) + (nav-graph-editor-method-51 (_type_) none 51) + (nav-graph-editor-method-52 (_type_) none 52) + (nav-graph-editor-method-53 (_type_ int int) none 53) + (nav-graph-editor-method-54 (_type_ int) none 54) + (nav-graph-editor-method-55 (_type_ int) none 55) + (nav-graph-editor-method-56 (_type_ int) none 56) + (nav-graph-editor-method-57 (_type_ int int) int 57) + (nav-graph-editor-method-58 (_type_) symbol 58) + (nav-graph-editor-method-59 (_type_) pad-buttons 59) + (nav-graph-editor-method-60 (_type_) none 60) + (nav-graph-editor-method-61 (_type_) none 61) (nav-graph-editor-method-62 (_type_ symbol symbol) none 62) - (nav-graph-editor-method-63 () none 63) + (nav-graph-editor-method-63 (_type_) none 63) ) ) -(define-extern *nav-graph-editor* nav-graph-editor) -;; (define-extern nav-graph-editor-init-by-other function) -(define-extern run-nav-graph-editor (function symbol none)) +(define-extern *nav-graph-editor* (pointer nav-graph-editor)) +(define-extern nav-graph-editor-init-by-other (function int none :behavior nav-graph-editor)) +(define-extern run-nav-graph-editor (function symbol (pointer process))) (define-extern get-nav-graph-editor (function nav-graph-editor)) (define-extern exit-nav-graph-editor (function none)) -;; (define-extern set-minimap-edge-flag function) -;; (define-extern set-vehicle-edit-mode function) -;; (define-extern translate-nav-graph function) -;; (define-extern update-nav-meshes function) -;; (define-extern smooth-nav-graph function) -;; (define-extern update-height function) -;; (define-extern update-width function) +(define-extern set-minimap-edge-flag (function nav-minimap-edge-flag uint)) +(define-extern set-vehicle-edit-mode (function symbol none)) +(define-extern translate-nav-graph (function float float float symbol)) +(define-extern update-nav-meshes (function symbol)) +(define-extern smooth-nav-graph (function string symbol)) +(define-extern update-height (function string symbol)) +(define-extern update-width (function string symbol)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; sampler ;; @@ -33084,6 +33090,7 @@ (bounce-factor float :offset-assert 16) (friction-factor float :offset-assert 20) (bounce-mult-factor float :offset-assert 24) + (unknown-k1hbn23 float :offset-assert 28) (cm-offset-joint vector :inline :offset-assert 32) (inv-inertial-tensor matrix :inline :offset-assert 48) (inertial-tensor matrix :inline :offset-assert 112) @@ -33111,8 +33118,6 @@ (deftype rigid-body-object-constants (structure) ((info rigid-body-info :inline :offset-assert 0) - (mass float :offset 0) - (inv-mass float :offset 4) (cm-joint vector :inline :offset 32) (cm-joint-x meters :offset 32) (cm-joint-y meters :offset 36) @@ -33125,11 +33130,7 @@ (inertial-tensor-x meters :offset 176) (inertial-tensor-y meters :offset 180) (inertial-tensor-z meters :offset 184) - (extra rigid-body-object-extra-info :inline :offset-assert 188 :score -1) - (max-time-step float :offset 188) - (gravity meters :offset 192) - (idle-distance meters :offset 196) - (attack-force-scale float :offset 200) + (extra rigid-body-object-extra-info :inline :offset-assert 188) (name symbol :offset-assert 204) ) :method-count-assert 9 @@ -45109,7 +45110,6 @@ ;; onin-game ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| (deftype onin-game-event (structure) ((min-count uint16 :offset-assert 0) (max-count uint16 :offset-assert 2) @@ -45120,20 +45120,19 @@ (max-wave uint16 :offset-assert 12) (gravity meters :offset-assert 16) ) + :pack-me :method-count-assert 9 :size-assert #x14 :flag-assert #x900000014 ) -|# -#| (deftype onin-game-bubble (process-drawable) - ((bubble-type int32 :offset-assert 196) - (bubble-start-time time-frame :offset-assert 204) - (gravity meters :offset-assert 212) - (dead? basic :offset-assert 216) - (angle float :offset-assert 220) - (height float :offset-assert 224) + ((bubble-type int32 :offset-assert 200) + (bubble-start-time time-frame :offset-assert 208) + (gravity meters :offset-assert 216) + (dead? symbol :offset-assert 220) + (angle float :offset-assert 224) + (height float :offset-assert 228) ) :method-count-assert 22 :size-assert #xe8 @@ -45143,7 +45142,6 @@ (fall () _type_ :state 21) ) ) -|# (deftype onin-game (process-drawable) ((wave int32 :offset-assert 200) @@ -45153,12 +45151,12 @@ (wave-length uint64 :offset-assert 224) (event-time time-frame :offset-assert 232) (event-length uint64 :offset-assert 240) - (hud-score uint64 :offset-assert 248) - (hud-goal uint64 :offset-assert 256) - (hud-miss uint64 :offset-assert 264) + (hud-score handle :offset-assert 248) + (hud-goal handle :offset-assert 256) + (hud-miss handle :offset-assert 264) (score float :offset-assert 272) (score-time time-frame :offset-assert 280) - (game uint32 :offset-assert 288) + (game (inline-array onin-game-event) :offset-assert 288) (miss-max int32 :offset-assert 292) (miss-count int32 :offset-assert 296) (point-win float :offset-assert 300) @@ -45174,20 +45172,20 @@ (:methods (hide () _type_ :state 20) (wait-for-start () _type_ :state 21) - (active () _type_ :state 22) + (active (symbol) _type_ :state 22) (lose () _type_ :state 23) (win () _type_ :state 24) - (onin-game-method-25 () none 25) - (onin-game-method-26 () none 26) - (onin-game-method-27 () none 27) + (onin-game-method-25 (_type_) none 25) + (onin-game-method-26 (_type_) none 26) + (onin-game-method-27 "TODO - bubble type" (_type_ int) none 27) ) ) -;; (define-extern *onin-game-data* array) -;; (define-extern birth-func-onin-bubble-pop (function int sparticle-cpuinfo sparticle-launchinfo none)) -;; (define-extern birth-func-onin-bubble-birth-pop (function int sparticle-cpuinfo sparticle-launchinfo none)) -;; (define-extern onin-game-bubble-init function) -(define-extern onin-game-init (function entity none)) +(define-extern *onin-game-data* (array object)) +(define-extern birth-func-onin-bubble-pop (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none)) +(define-extern birth-func-onin-bubble-birth-pop (function sparticle-system sparticle-cpuinfo sprite-vec-data-3d sparticle-launcher sparticle-launch-state none)) +(define-extern onin-game-bubble-init "TODO - bubble type enum" (function vector int meters float float none :behavior onin-game-bubble)) +(define-extern onin-game-init (function entity none :behavior onin-game)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; stadiumb-texture ;; @@ -47415,19 +47413,28 @@ ;; neon-praxis-part ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -#| -(deftype city-neon-praxis (UNKNOWN) - () - :method-count-assert 0 - :size-assert #x0 - :flag-assert #x0 - ;; Failed to read fields. +(deftype city-neon-praxis (process-drawable) + ( + (rot vector :inline :offset-assert 208) + (master-enable uint32 :offset-assert 224) + (unknown-k1jn23j1n23 uint32 3 :offset-assert 228) + (praxis-mode uint32 :offset-assert 240) + (back-mode uint32 :offset-assert 244) + (praxis-counter int32 :offset-assert 248) + (back-counter int32 :offset-assert 252) + (parts sparticle-launch-control 2 :offset-assert 256) + ) + :method-count-assert 22 + :size-assert #x108 ;; 264 + :flag-assert #x1600900108 + (:methods + (idle () _type_ :state 20) + (city-neon-praxis-method-21 (_type_) none 21)) ) -|# -;; (define-extern *praxis* array) -;; (define-extern *praxis-backing* array) -;; (define-extern *city-neon-praxis-group-ids* array) +(define-extern *praxis* (array object)) +(define-extern *praxis-backing* (array object)) +(define-extern *city-neon-praxis-group-ids* (array int32)) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ctypal-part ;; @@ -48401,14 +48408,14 @@ (pad-ih12nb312 uint32 3 :offset-assert 228) (mode uint32 :offset-assert 240) (counter int32 :offset-assert 244) - (parts basic 1 :offset-assert 248) + (parts sparticle-launch-control 1 :offset-assert 248) ) :method-count-assert 22 :size-assert #xfc :flag-assert #x16008000fc (:methods (idle () _type_ :state 20) - (hiphog-exterior-marquee-method-21 () none 21)) + (hiphog-exterior-marquee-method-21 (_type_) none 21)) ) (deftype farthy (process-drawable) @@ -48420,7 +48427,7 @@ (idle () _type_ :state 20)) ) -;; (define-extern check-drop-level-ctyport-drop-userdata (function sparticle-system sparticle-cpuinfo matrix none)) +(define-extern check-drop-level-ctyport-drop-userdata (function sparticle-system sparticle-cpuinfo matrix none)) (define-extern *hiphog-exterior-marquee* (array object)) (define-extern *hiphog-exterior-marquee-group-ids* (array int32)) (define-extern *hiphog-exterior-marquee-daxter-group-ids* (array int32)) @@ -49956,6 +49963,7 @@ :flag-assert #x9000000c0 ) +;; +++vehicle-guard:turret-flag (defenum turret-flag :bitfield #t :type uint8 @@ -49966,6 +49974,33 @@ (display-marks 4) (no-rot-y-clamp 5) ) +;; ---vehicle-guard:turret-flag + +(deftype turret-unknown-stack-structure (structure) + "TODO - sigh...another one that i cant seem to find a fit" + ((vec-1 vector :inline :offset-assert 0) + (vec-2 vector :inline :offset-assert 16) + (vec-3 vector :inline :offset-assert 32) + (vec-4 vector :inline :offset-assert 48) + (vec-5 vector :inline :offset-assert 64) + (vec-6 vector :inline :offset-assert 80) + (vec-7 vector :inline :offset-assert 96) + (mat-1 matrix :inline :offset-assert 112) + (vec-8 vector :inline :offset-assert 176) + (vec-9 vector :inline :offset-assert 192) + (vec-10 vector :inline :offset-assert 208) + (vec-11 vector :inline :offset-assert 224) + (vec-12 vector :inline :offset-assert 240)) + ) + +(deftype turret-unknown-stack-structure2 (structure) + "TODO - another one! this one has an entity, but also a matrix!?" + ((proj-params projectile-init-by-other-params :inline :offset-assert 0) + (mat-1 matrix :inline :offset-assert 96) + (vec-1 vector :inline :offset-assert 160) + (vec-2 vector :inline :offset-assert 176) + ) +) (deftype turret-control (structure) ( @@ -50042,7 +50077,6 @@ :method-count-assert 159 :size-assert #x434 :flag-assert #x9f03c00434 - ;; Failed to read fields. (:methods (hostile () _type_ :state 144) (stop-and-shoot () _type_ :state 145) diff --git a/decompiler/config/jak2/hacks.jsonc b/decompiler/config/jak2/hacks.jsonc index 3c81298e23..a2249a2bde 100644 --- a/decompiler/config/jak2/hacks.jsonc +++ b/decompiler/config/jak2/hacks.jsonc @@ -44,7 +44,6 @@ "anim-test-anim-list-handler", "anim-test-sequence-list-handler", "anim-tester-get-playing-item", - "(method 58 nav-graph-editor)", "start-pilot-recorder", "(anon-function 10 pilot-recorder)", "(method 0 hover-nav-control)", @@ -106,7 +105,6 @@ "(method 154 vehicle-racer)", "(method 228 hal-sewer)", "(method 154 vehicle-city-racer)", - "(method 158 vehicle-guard)", "(method 207 metalhead-predator)", "test-to-from-spr", "test-from-spr", @@ -527,7 +525,9 @@ "(method 15 rigid-body-queue)": [5, 6, 7, 8, 9, 10, 11], "(method 13 rigid-body-queue)": [5, 6, 7, 8, 9, 10, 11], "(method 11 rigid-body-queue)": [0, 5, 6, 7, 8, 9, 10, 11, 17, 18, 25], - "(method 10 rigid-body-queue)": [0, 9, 10, 16, 24, 25, 26, 35, 36, 48] + "(method 10 rigid-body-queue)": [0, 9, 10, 16, 24, 25, 26, 35, 36, 48], + "(method 18 vehicle-controller)": [0, 1, 74, 75], + "(method 15 vehicle-controller)": [0, 3, 5, 6, 7, 10] }, // Sometimes the game might use format strings that are fetched dynamically, diff --git a/decompiler/config/jak2/inputs.jsonc b/decompiler/config/jak2/inputs.jsonc index 9d56f3ade9..2e6f87d0fa 100644 --- a/decompiler/config/jak2/inputs.jsonc +++ b/decompiler/config/jak2/inputs.jsonc @@ -226,7 +226,6 @@ "FORDUMPD.DGO", "FRA.DGO", "FRB.DGO", - "LBOMBBOT.DGO", "GGA.DGO", "HIDEOUT.DGO", "HIPHOG.DGO", @@ -235,6 +234,7 @@ "LASHGRD.DGO", "LASHTHRN.DGO", "LBBUSH.DGO", + "LBOMBBOT.DGO", "LCGUARD.DGO", "LCITYLOW.DGO", "LDJAKBRN.DGO", @@ -263,6 +263,7 @@ "LSACK.DGO", "LSAMERGD.DGO", "LSMYSBRT.DGO", + "LTENTOB.DGO", "LTENTOUT.DGO", "LTESS.DGO", "LTHRNOUT.DGO", @@ -273,10 +274,10 @@ "LWIDEA.DGO", "LWIDEB.DGO", "LWIDEC.DGO", + "LYSAMSAM.DGO", "LYSKDCD.DGO", "MTN.DGO", "MTX.DGO", - "LYSAMSAM.DGO", "NEB.DGO", "NES.DGO", "NESTT.DGO", diff --git a/decompiler/config/jak2/label_types.jsonc b/decompiler/config/jak2/label_types.jsonc index 08a6425925..10e745e32f 100644 --- a/decompiler/config/jak2/label_types.jsonc +++ b/decompiler/config/jak2/label_types.jsonc @@ -732,11 +732,6 @@ ["L1470", "vector"], ["L1469", "vector"] ], - "ctyport-part": [ - ["L591", "uint64", true], - ["L592", "uint64", true], - ["L590", "uint64", true] - ], "ruins-scenes": [["L30", "matrix3"]], "hiphog-part": [ ["L22", "(inline-array ripple-wave)", 6], @@ -1380,5 +1375,160 @@ "vortex-data": [ ["L25", "(inline-array vortex-vertex)", 1216], ["L24", "(pointer float)", 20] + ], + "onin-game": [ + ["L422", "(inline-array onin-game-event)", 21], + ["L423", "(inline-array onin-game-event)", 21] + ], + "neon-praxis-part": [ + // TODO - these types are probably wrong, but they are all just single words in a reference + ["L33", "vector4w"], + ["L34", "vector4w"], + ["L36", "vector4w"], + ["L37", "vector4w"], + ["L38", "vector4w"], + ["L39", "vector4w"], + ["L41", "vector4w"], + ["L42", "vector4w"], + ["L43", "vector4w"], + ["L44", "vector4w"], + ["L45", "vector4w"], + ["L46", "vector4w"], + ["L48", "vector4w"], + ["L49", "vector4w"], + ["L50", "vector4w"], + ["L51", "vector4w"], + ["L52", "vector4w"], + ["L53", "vector4w"], + ["L54", "vector4w"], + ["L55", "vector4w"], + ["L56", "vector4w"], + ["L57", "vector4w"], + ["L59", "vector4w"], + ["L60", "vector4w"], + ["L61", "vector4w"], + ["L62", "vector4w"], + ["L63", "vector4w"], + ["L64", "vector4w"], + ["L65", "vector4w"], + ["L66", "vector4w"], + ["L67", "vector4w"], + ["L68", "vector4w"], + ["L70", "vector4w"], + ["L71", "vector4w"], + ["L72", "vector4w"], + ["L73", "vector4w"], + ["L74", "vector4w"], + ["L75", "vector4w"], + ["L76", "vector4w"], + ["L77", "vector4w"], + ["L78", "vector4w"], + ["L79", "vector4w"], + ["L80", "vector4w"], + ["L81", "vector4w"], + ["L83", "vector4w"], + ["L85", "vector4w"], + ["L91", "vector4w"], + ["L92", "vector4w"], + ["L93", "vector4w"], + ["L94", "vector4w"], + ["L95", "vector4w"], + ["L96", "vector4w"], + ["L97", "vector4w"], + ["L98", "vector4w"], + ["L99", "vector4w"], + ["L100", "vector4w"], + ["L101", "vector4w"], + ["L102", "vector4w"], + ["L104", "vector4w"], + ["L105", "vector4w"], + ["L106", "vector4w"], + ["L107", "vector4w"], + ["L108", "vector4w"], + ["L109", "vector4w"], + ["L110", "vector4w"], + ["L111", "vector4w"], + ["L112", "vector4w"], + ["L113", "vector4w"], + ["L114", "vector4w"], + ["L115", "vector4w"], + ["L117", "vector4w"], + ["L118", "vector4w"], + ["L119", "vector4w"], + ["L120", "vector4w"], + ["L121", "vector4w"], + ["L122", "vector4w"], + ["L123", "vector4w"], + ["L124", "vector4w"], + ["L125", "vector4w"], + ["L126", "vector4w"], + ["L127", "vector4w"], + ["L128", "vector4w"], + ["L130", "vector4w"], + ["L132", "vector4w"], + ["L238", "uint64", true] + ], + "ctyport-part": [ + // TODO - these types are probably wrong, but they are all just single words in a reference + ["L215", "vector4w"], + ["L216", "vector4w"], + ["L218", "vector4w"], + ["L219", "vector4w"], + ["L220", "vector4w"], + ["L221", "vector4w"], + ["L223", "vector4w"], + ["L224", "vector4w"], + ["L225", "vector4w"], + ["L226", "vector4w"], + ["L227", "vector4w"], + ["L228", "vector4w"], + ["L229", "vector4w"], + ["L230", "vector4w"], + ["L231", "vector4w"], + ["L233", "vector4w"], + ["L234", "vector4w"], + ["L235", "vector4w"], + ["L236", "vector4w"], + ["L237", "vector4w"], + ["L238", "vector4w"], + ["L239", "vector4w"], + ["L240", "vector4w"], + ["L241", "vector4w"], + ["L242", "vector4w"], + ["L244", "vector4w"], + ["L245", "vector4w"], + ["L246", "vector4w"], + ["L247", "vector4w"], + ["L248", "vector4w"], + ["L249", "vector4w"], + ["L250", "vector4w"], + ["L251", "vector4w"], + ["L252", "vector4w"], + ["L253", "vector4w"], + ["L254", "vector4w"], + ["L255", "vector4w"], + ["L256", "vector4w"], + ["L257", "vector4w"], + ["L258", "vector4w"], + ["L259", "vector4w"], + ["L261", "vector4w"], + ["L262", "vector4w"], + ["L263", "vector4w"], + ["L264", "vector4w"], + ["L265", "vector4w"], + ["L266", "vector4w"], + ["L267", "vector4w"], + ["L268", "vector4w"], + ["L269", "vector4w"], + ["L270", "vector4w"], + ["L271", "vector4w"], + ["L272", "vector4w"], + ["L273", "vector4w"], + ["L274", "vector4w"], + ["L276", "vector4w"], + ["L278", "vector4w"], + ["L591", "uint64", true], + ["L592", "uint64", true], + ["L590", "uint64", true] ] } diff --git a/decompiler/config/jak2/stack_structures.jsonc b/decompiler/config/jak2/stack_structures.jsonc index 9acba93b4d..119876f748 100644 --- a/decompiler/config/jak2/stack_structures.jsonc +++ b/decompiler/config/jak2/stack_structures.jsonc @@ -1535,12 +1535,12 @@ "(method 29 vehicle)": [ [16, ["inline-array", "matrix", 9]], [640, ["inline-array", "vector", 5]], - [736, "rigid-body-vehicle-constants"] + [736, ["inline-array", "vehicle-control-point", 2]] ], "vehicle-guard-choose-branch": [[16, ["inline-array", "vector", 5]]], "(method 155 vehicle-guard)": [ - [192, "rigid-body-impact"], - [256, ["inline-array", "vector", 8]] + [192, "traffic-danger-info"], + [256, "turret-unknown-stack-structure2"] ], "(method 70 traffic-engine)": [ [16, ["inline-array", "traffic-suppression-box", 2]] @@ -1572,7 +1572,7 @@ "(method 133 vehicle)": [[16, "mystery-vehicle-type"]], "(method 153 vehicle-guard)": [[16, "vector"]], "(method 150 vehicle-guard)": [[16, "vehicle-control-point"]], - "(method 9 turret-control)": [[16, "rigid-body-info"]], + "(method 9 turret-control)": [[16, "turret-unknown-stack-structure"]], "(method 21 traffic-manager)": [[16, ["array", "int8", 21]]], "(method 71 traffic-engine)": [[16, "vector"]], "(method 18 city-level-info)": [[16, "bounding-box"]], @@ -1732,7 +1732,7 @@ "(method 74 kid)": [[16, "vector"]], "(trans idle vehicle-turret)": [[16, "vector"]], "(anon-function 9 hal3-course)": [[96, "transport-params"]], - "(method 17 turret-control)": [[16, "attack-info"]], + "(method 17 turret-control)": [[16, "turret-unknown-stack-structure2"]], "(code active lightning-tracker)": [[16, "vector"]], "(anon-function 18 ctywide-bbush)": [ [64, "vector"], @@ -1917,5 +1917,32 @@ "test-gen-perms": [[16, "gen-perms-context"]], "gen-perms": [[16, "gen-perms-context"]], "(method 11 hover-formation-control)": [[16, ["inline-array", "vector", 16]]], - "(method 11 hover-formation)": [[16, "vector"]] + "(method 11 hover-formation)": [[16, "vector"]], + "birth-func-onin-bubble-birth-pop": [[16, "vector"]], + "birth-func-onin-bubble-pop": [[16, "vector"]], + "(exit active onin-game)": [[96, ["array", "pointer", 3]]], + "(enter active onin-game)": [[16, ["array", "pointer", 3]]], + "check-drop-level-ctyport-drop-userdata": [[16, "vector"]], + "update-height": [[16, "vector"]], + "(method 30 nav-graph-editor)": [[16, "matrix"]], + "(method 31 nav-graph-editor)": [[16, "vector"]], + "(method 28 nav-graph-editor)": [ + [16, "vector"], + [32, "vector"], + [48, ["inline-array", "vector", 2]] + ], + "(method 34 nav-graph-editor)": [ + [880, "matrix"], + [80, "vector"] + ], + "(method 42 nav-graph-editor)": [[16, "vector"]], + "(method 45 nav-graph-editor)": [[16, "vector"]], + "(method 43 nav-graph-editor)": [[96, "vector"]], + "(method 32 nav-graph-editor)": [ + [16, "vector"], + [32, "vector"] + ], + "(post draw-closest-minimap nav-graph-editor)": [ + [16, ["inline-array", "vector", 5]] + ] } diff --git a/decompiler/config/jak2/type_casts.jsonc b/decompiler/config/jak2/type_casts.jsonc index 7731dc2645..a9d9e37383 100644 --- a/decompiler/config/jak2/type_casts.jsonc +++ b/decompiler/config/jak2/type_casts.jsonc @@ -8968,5 +8968,17 @@ [37, "s4", "process-focusable"], [18, "v0", "path-control"] ], - "(method 10 hover-formation-control)": [[28, "s4", "process-focusable"]] + "(method 10 hover-formation-control)": [[28, "s4", "process-focusable"]], + "(method 27 onin-game)": [[15, "s1", "onin-game-bubble"]], + "(code idle hiphog-exterior-marquee)": [ + [16, "a0", "(pointer int32)"], + [18, "a0", "(array object)"] + ], + "(code idle city-neon-praxis)": [ + [16, "a0", "(pointer int32)"], + [18, "a0", "(array object)"], + [49, "a0", "(pointer int32)"], + [51, "a0", "(array object)"] + ], + "(method 7 nav-graph-editor)": [[9, "t9", "(function process int none)"]] } diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index 661ff53629..c4532b6041 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -25,7 +25,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, const DecompilerLabel& label, const std::vector& labels, const std::vector>& words, - DecompilerTypeSystem& dts, + const TypeSystem& ts, const LinkedObjectFile* file, GameVersion version) { const auto& type = hint.result_type; @@ -35,7 +35,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, throw std::runtime_error(fmt::format( "Label {} was marked as a value, but is being decompiled as a reference.", hint.name)); } - return decompile_at_label(type, label, labels, words, dts.ts, file, version); + return decompile_at_label(type, label, labels, words, ts, file, version); } if (type.base_type() == "pointer") { @@ -43,7 +43,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, throw std::runtime_error(fmt::format( "Label {} was marked as a value, but is being decompiled as a reference.", hint.name)); } - auto field_type_info = dts.ts.lookup_type(type.get_single_arg()); + auto field_type_info = ts.lookup_type(type.get_single_arg()); if (field_type_info->is_reference()) { throw std::runtime_error( fmt::format("Type {} label {} is not yet supported by the data decompiler.", type.print(), @@ -58,7 +58,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, words.at(label.target_segment).begin() + (label.offset / 4) + word_count); return decompile_value_array(type.get_single_arg(), field_type_info, *hint.array_size, stride, - 0, obj_words, dts.ts); + 0, obj_words, ts); } } @@ -67,7 +67,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, throw std::runtime_error(fmt::format( "Label {} was marked as a value, but is being decompiled as a reference.", hint.name)); } - auto field_type_info = dts.ts.lookup_type(type.get_single_arg()); + auto field_type_info = ts.lookup_type(type.get_single_arg()); if (!field_type_info->is_reference()) { throw std::runtime_error( fmt::format("Type {} for label {} is invalid, the element type is not inlineable.", @@ -96,8 +96,8 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, fake_label.target_segment = label.target_segment; fake_label.offset = label.offset + field_type_info->get_offset() + stride * elt; fake_label.name = fmt::format("fake-label-{}-elt-{}", type.get_single_arg().print(), elt); - array_def.push_back(decompile_at_label(type.get_single_arg(), fake_label, labels, words, - dts.ts, file, version)); + array_def.push_back(decompile_at_label(type.get_single_arg(), fake_label, labels, words, ts, + file, version)); } return pretty_print::build_list(array_def); } @@ -191,28 +191,34 @@ goos::Object decompile_at_label(const TypeSpec& type, const LinkedObjectFile* file, GameVersion version, bool in_static_pair) { - if (type == TypeSpec("string")) { - return decompile_string_at_label(label, words); - } - - if (ts.tc(TypeSpec("function"), type)) { - return decompile_function_at_label(label, file, in_static_pair); - } - - if (ts.tc(TypeSpec("array"), type)) { - std::optional content_type_spec; - if (type.has_single_arg()) { - content_type_spec = type.get_single_arg(); + try { + if (type == TypeSpec("string")) { + return decompile_string_at_label(label, words); } - return decompile_boxed_array(type, label, labels, words, ts, file, content_type_spec, version); - } - if (ts.tc(TypeSpec("structure"), type)) { - return decompile_structure(type, label, labels, words, ts, file, true, version); - } + if (ts.tc(TypeSpec("function"), type)) { + return decompile_function_at_label(label, file, in_static_pair); + } - if (type == TypeSpec("pair")) { - return decompile_pair(label, labels, words, ts, true, file, version); + if (ts.tc(TypeSpec("array"), type)) { + std::optional content_type_spec; + if (type.has_single_arg()) { + content_type_spec = type.get_single_arg(); + } + return decompile_boxed_array(type, label, labels, words, ts, file, content_type_spec, + version); + } + + if (ts.tc(TypeSpec("structure"), type)) { + return decompile_structure(type, label, labels, words, ts, file, true, version); + } + + if (type == TypeSpec("pair")) { + return decompile_pair(label, labels, words, ts, true, file, version); + } + } catch (std::exception& ex) { + throw std::runtime_error( + fmt::format("Unable to 'decompile_at_label' {}, Reason: {}", label.name, ex.what())); } throw std::runtime_error(fmt::format( @@ -1520,6 +1526,7 @@ goos::Object decompile_boxed_array(const TypeSpec& type, if (type_ptr.kind() != LinkedWord::TYPE_PTR) { throw std::runtime_error("Invalid basic in decompile_boxed_array"); } + // TODO - ideally this wouldn't be hard-coded if (type_ptr.symbol_name() == "array" || type_ptr.symbol_name() == "texture-anim-array") { auto content_type_ptr_word_idx = type_ptr_word_idx + 3; auto& content_type_ptr = words.at(label.target_segment).at(content_type_ptr_word_idx); @@ -1576,12 +1583,20 @@ goos::Object decompile_boxed_array(const TypeSpec& type, if (word.kind() == LinkedWord::PLAIN_DATA && word.data == 0) { result.push_back(pretty_print::to_symbol("0")); } else if (word.kind() == LinkedWord::PTR) { + const auto& elt_label = labels.at(word.label_id()); if (content_type == TypeSpec("object")) { - result.push_back(decompile_at_label_guess_type(labels.at(word.label_id()), labels, words, - ts, file, version)); + // if there is a type hint for the label, no need to guess! + if (file->label_db->label_exists_by_name(elt_label.name)) { + result.push_back(decompile_at_label_with_hint(file->label_db->lookup(elt_label.name), + elt_label, labels, words, ts, file, + version)); + } else { + result.push_back( + decompile_at_label_guess_type(elt_label, labels, words, ts, file, version)); + } } else { - result.push_back(decompile_at_label(content_type, labels.at(word.label_id()), labels, - words, ts, file, version)); + result.push_back( + decompile_at_label(content_type, elt_label, labels, words, ts, file, version)); } } else if (word.kind() == LinkedWord::SYM_PTR) { result.push_back(pretty_print::to_symbol(fmt::format("'{}", word.symbol_name()))); diff --git a/decompiler/util/data_decompile.h b/decompiler/util/data_decompile.h index d8ded5a1a8..e9075f8dde 100644 --- a/decompiler/util/data_decompile.h +++ b/decompiler/util/data_decompile.h @@ -32,7 +32,7 @@ goos::Object decompile_at_label_with_hint(const LabelInfo& hint, const DecompilerLabel& label, const std::vector& labels, const std::vector>& words, - DecompilerTypeSystem& dts, + const TypeSystem& dts, const LinkedObjectFile* file, GameVersion version); goos::Object decompile_at_label_guess_type(const DecompilerLabel& label, diff --git a/goal_src/jak2/engine/ai/traffic-h.gc b/goal_src/jak2/engine/ai/traffic-h.gc index 0480d68bc3..77049042ca 100644 --- a/goal_src/jak2/engine/ai/traffic-h.gc +++ b/goal_src/jak2/engine/ai/traffic-h.gc @@ -5,14 +5,7 @@ ;; name in dgo: traffic-h ;; dgos: ENGINE, GAME -;; todo: some types, method names. - -(defenum traffic-danger-flags - :type uint8 - :bitfield #t - (tdf0 0) - ) - +;; +++traffic-danger-type (defenum traffic-danger-type :type uint8 (tdt0 0) @@ -21,7 +14,17 @@ (tdt3 3) (tdt4 4) (tdt5 5) + (tdt6 6) ) +;; ---traffic-danger-type + +;; +++traffic-danger-flags +(defenum traffic-danger-flags + :type uint8 + :bitfield #t + (tdf0 0) + ) +;; ---traffic-danger-flags ;; NOTE - for default-menu (define-extern traffic-start (function none)) diff --git a/goal_src/jak2/engine/common_objs/rigid-body-plat.gc b/goal_src/jak2/engine/common_objs/rigid-body-plat.gc index 6a2cedfec7..0a75219690 100644 --- a/goal_src/jak2/engine/common_objs/rigid-body-plat.gc +++ b/goal_src/jak2/engine/common_objs/rigid-body-plat.gc @@ -126,7 +126,7 @@ *y-vector* (* (-> obj rbody state info mass) (fmin 1.0 f30-0) - (/ (-> obj info-override gravity) (the float (-> obj info-override control-point-count))) + (/ (-> obj info-override extra gravity) (the float (-> obj info-override control-point-count))) (-> obj info-override buoyancy-factor) ) ) @@ -168,7 +168,7 @@ (defmethod rigid-body-platform-method-55 rigid-body-platform ((obj rigid-body-platform)) (let ((a1-0 (new 'stack-no-clear 'vector))) - (vector-float*! a1-0 *y-vector* (* -1.0 (-> obj info-override gravity) (-> obj rbody state info mass))) + (vector-float*! a1-0 *y-vector* (* -1.0 (-> obj info-override extra gravity) (-> obj rbody state info mass))) (rigid-body-method-20 (-> obj rbody state) a1-0) ) 0 @@ -367,7 +367,7 @@ (set! (-> obj player-velocity quad) (-> *null-vector* quad)) (set! (-> obj player-velocity-prev quad) (-> *null-vector* quad)) (set! (-> obj root-override-2 max-iteration-count) (the-as uint 4)) - (set! (-> obj max-time-step) (-> arg0 max-time-step)) + (set! (-> obj max-time-step) (-> arg0 extra max-time-step)) (set! (-> obj water-anim) (the-as water-anim (entity-actor-lookup (-> obj entity) 'water-actor 0))) 0 (none) @@ -413,10 +413,12 @@ :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 4) (meters 4)) ) - :max-time-step 0.033333335 - :gravity (meters 80) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.033333335 + :gravity (meters 80) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*rigid-body-platform-constants* :drag-factor 0.8 :buoyancy-factor 1.5 diff --git a/goal_src/jak2/engine/debug/default-menu.gc b/goal_src/jak2/engine/debug/default-menu.gc index 7d8720ddcd..e1f6cc7908 100644 --- a/goal_src/jak2/engine/debug/default-menu.gc +++ b/goal_src/jak2/engine/debug/default-menu.gc @@ -2797,7 +2797,6 @@ ) (defun dm-play-task-with-continue ((arg0 game-task) (arg1 string)) - (format 0 "hello world - ~D:~S~%" arg0 arg1) (let* ((t9-0 play-task) (a1-1 'debug) (a2-0 (cond @@ -2822,7 +2821,6 @@ ) (defun dm-play-task ((arg0 game-task)) - (format 0 "DEBUG - ~D~%" arg0) (dm-play-task-with-continue (the-as game-task (/ (the-as int arg0) 8)) (the-as string #f)) (none) ) @@ -4133,7 +4131,7 @@ (function "Toggle Plane Mode" #f ,(lambda () (let ((a0-0 (get-nav-graph-editor))) (if a0-0 - ((method-of-object a0-0 nav-graph-editor-method-60)) + (nav-graph-editor-method-60 a0-0) ) ) (none) @@ -4142,7 +4140,7 @@ (function "Toggle Hover Mode" #f ,(lambda () (let ((a0-0 (get-nav-graph-editor))) (if a0-0 - ((method-of-object a0-0 nav-graph-editor-method-61)) + (nav-graph-editor-method-61 a0-0) ) ) (none) @@ -4208,7 +4206,7 @@ (function "Save" #f ,(lambda () (let ((a0-0 (get-nav-graph-editor))) (if a0-0 - ((method-of-object a0-0 nav-graph-editor-method-63)) + (nav-graph-editor-method-63 a0-0) ) ) (none) diff --git a/goal_src/jak2/engine/debug/nav/mysql-nav-graph.gc b/goal_src/jak2/engine/debug/nav/mysql-nav-graph.gc index 405a5ac5a3..534ac8bfad 100644 --- a/goal_src/jak2/engine/debug/nav/mysql-nav-graph.gc +++ b/goal_src/jak2/engine/debug/nav/mysql-nav-graph.gc @@ -217,7 +217,7 @@ :size-assert #x41c :flag-assert #x150000041c (:methods - (new (symbol type int string) _type_ 0) + (new (symbol type int symbol) _type_ 0) (init-from-sql! (_type_ string string) symbol 9) (exec-sql! (_type_) symbol 10) (indexof-nav-node (_type_ int) int 11) @@ -235,7 +235,7 @@ ;; WARN: Return type mismatch object vs mysql-nav-graph. -(defmethod new mysql-nav-graph ((allocation symbol) (type-to-make type) (arg0 int) (arg1 string)) +(defmethod new mysql-nav-graph ((allocation symbol) (type-to-make type) (arg0 int) (arg1 symbol)) (let ((gp-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) (if (zero? gp-0) (return (the-as mysql-nav-graph 0)) diff --git a/goal_src/jak2/engine/debug/nav/nav-graph-editor.gc b/goal_src/jak2/engine/debug/nav/nav-graph-editor.gc index 732f37fec4..d44123c56f 100644 --- a/goal_src/jak2/engine/debug/nav/nav-graph-editor.gc +++ b/goal_src/jak2/engine/debug/nav/nav-graph-editor.gc @@ -8,14 +8,33 @@ ;; NOTE - for default-menu (declare-type nav-graph-editor process) (define-extern get-nav-graph-editor (function nav-graph-editor)) -(define-extern run-nav-graph-editor (function symbol none)) +(define-extern run-nav-graph-editor (function symbol (pointer process))) (define-extern exit-nav-graph-editor (function none)) ;; DECOMP BEGINS +(deftype nav-graph-command (structure) + ((com-type uint32 :offset-assert 0) ;; TODO - enum + (id int32 :offset-assert 4) + (index int32 :offset-assert 8) + (move-vec vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +(deftype nav-graph-command-array (inline-array-class) + ((data nav-graph-command :inline :dynamic :offset-assert 16)) + :method-count-assert 9 + :size-assert #x10 + :flag-assert #x900000010 + ) + (deftype nav-graph-editor (process) - ((nav-graph basic :offset-assert 128) - (mode uint32 :offset-assert 132) + ((self-override nav-graph-editor :offset 32 :score 100) + (nav-graph mysql-nav-graph :offset-assert 128) + (mode symbol :offset-assert 132) (command-id int32 :offset-assert 136) (max-command int32 :offset-assert 140) (selected-index int32 :offset-assert 144) @@ -33,14 +52,14 @@ (edge-src int32 :offset-assert 256) (edge-dst int32 :offset-assert 260) (edge-visibility int32 :offset-assert 264) - (vehicle-edit-mode basic :offset-assert 268) - (hover-edit-mode basic :offset-assert 272) + (vehicle-edit-mode symbol :offset-assert 268) + (hover-edit-mode symbol :offset-assert 272) (clipping-dist float :offset-assert 276) (plane-height float :offset-assert 280) (plane-height-hold float :offset-assert 284) (default-node mysql-nav-node :inline :offset-assert 288) (default-edge mysql-nav-edge :inline :offset-assert 356) - (command-array basic :offset-assert 424) + (command-array nav-graph-command-array :offset-assert 424) ) :method-count-assert 64 :size-assert #x1ac @@ -60,41 +79,41 @@ (adjust-edge-width () _type_ :state 25) (adjust-edge-density () _type_ :state 26) (draw-closest-minimap () _type_ :state 27) - (nav-graph-editor-method-28 () none 28) - (nav-graph-editor-method-29 () none 29) - (nav-graph-editor-method-30 () none 30) - (nav-graph-editor-method-31 () none 31) - (nav-graph-editor-method-32 () none 32) - (nav-graph-editor-method-33 () none 33) - (nav-graph-editor-method-34 () none 34) - (nav-graph-editor-method-35 () none 35) - (nav-graph-editor-method-36 () none 36) - (nav-graph-editor-method-37 () none 37) - (nav-graph-editor-method-38 () none 38) - (nav-graph-editor-method-39 () none 39) - (nav-graph-editor-method-40 () none 40) - (nav-graph-editor-method-41 () none 41) - (nav-graph-editor-method-42 () none 42) - (nav-graph-editor-method-43 () none 43) - (nav-graph-editor-method-44 () none 44) - (nav-graph-editor-method-45 () none 45) - (nav-graph-editor-method-46 () none 46) - (nav-graph-editor-method-47 () none 47) - (nav-graph-editor-method-48 () none 48) - (nav-graph-editor-method-49 () none 49) - (nav-graph-editor-method-50 () none 50) - (nav-graph-editor-method-51 () none 51) - (nav-graph-editor-method-52 () none 52) - (nav-graph-editor-method-53 () none 53) - (nav-graph-editor-method-54 () none 54) - (nav-graph-editor-method-55 () none 55) - (nav-graph-editor-method-56 () none 56) - (nav-graph-editor-method-57 () none 57) - (nav-graph-editor-method-58 () none 58) - (nav-graph-editor-method-59 () none 59) - (nav-graph-editor-method-60 () none 60) - (nav-graph-editor-method-61 () none 61) + (nav-graph-editor-method-28 (_type_) none 28) + (nav-graph-editor-method-29 (_type_ string string string) none 29) + (nav-graph-editor-method-30 (_type_ int) symbol 30) + (nav-graph-editor-method-31 (_type_ int) symbol 31) + (nav-graph-editor-method-32 (_type_ symbol int) none 32) + (nav-graph-editor-method-33 (_type_ int) none 33) + (nav-graph-editor-method-34 (_type_) object 34) + (nav-graph-editor-method-35 (_type_) none 35) + (nav-graph-editor-method-36 (_type_) none 36) + (nav-graph-editor-method-37 (_type_) none 37) + (nav-graph-editor-method-38 (_type_) none 38) + (nav-graph-editor-method-39 (_type_) none 39) + (nav-graph-editor-method-40 (_type_) none 40) + (nav-graph-editor-method-41 (_type_) none 41) + (nav-graph-editor-method-42 (_type_) symbol 42) + (nav-graph-editor-method-43 (_type_) none 43) + (nav-graph-editor-method-44 (_type_) symbol 44) + (nav-graph-editor-method-45 (_type_) none 45) + (nav-graph-editor-method-46 (_type_) pad-buttons 46) + (nav-graph-editor-method-47 (_type_) none 47) + (nav-graph-editor-method-48 "TODO - enum / com-type" (_type_ uint32) nav-graph-command 48) + (nav-graph-editor-method-49 (_type_) nav-graph-command 49) + (nav-graph-editor-method-50 (_type_) none 50) + (nav-graph-editor-method-51 (_type_) none 51) + (nav-graph-editor-method-52 (_type_) none 52) + (nav-graph-editor-method-53 (_type_ int int) none 53) + (nav-graph-editor-method-54 (_type_ int) none 54) + (nav-graph-editor-method-55 (_type_ int) none 55) + (nav-graph-editor-method-56 (_type_ int) none 56) + (nav-graph-editor-method-57 (_type_ int int) int 57) + (nav-graph-editor-method-58 (_type_) symbol 58) + (nav-graph-editor-method-59 (_type_) pad-buttons 59) + (nav-graph-editor-method-60 (_type_) none 60) + (nav-graph-editor-method-61 (_type_) none 61) (nav-graph-editor-method-62 (_type_ symbol symbol) none 62) - (nav-graph-editor-method-63 () none 63) + (nav-graph-editor-method-63 (_type_) none 63) ) ) diff --git a/goal_src/jak2/engine/draw/drawable.gc b/goal_src/jak2/engine/draw/drawable.gc index 0942127086..221a4ba7b6 100644 --- a/goal_src/jak2/engine/draw/drawable.gc +++ b/goal_src/jak2/engine/draw/drawable.gc @@ -1507,7 +1507,7 @@ ) (with-profiler 'nav *profile-nav-color* - (update-nav-meshes *level*) + (update-nav-meshes-method *level*) ) (with-profiler 'background *profile-background-color* diff --git a/goal_src/jak2/engine/entity/entity.gc b/goal_src/jak2/engine/entity/entity.gc index 97c5d08f73..3acf4f2fa4 100644 --- a/goal_src/jak2/engine/entity/entity.gc +++ b/goal_src/jak2/engine/entity/entity.gc @@ -238,7 +238,8 @@ ) ) -(defmethod update-nav-meshes level-group ((obj level-group)) +(defmethod update-nav-meshes-method level-group ((obj level-group)) + "Clashes with a function name" (when (not (paused?)) (dotimes (s5-0 (-> obj length)) (let ((v1-4 (-> obj level s5-0))) @@ -2386,8 +2387,6 @@ ) ) -;; ERROR: Unsupported inline assembly instruction kind - [mtc0 Count, r0] -;; ERROR: Unsupported inline assembly instruction kind - [sync.p] ;; ERROR: Unsupported inline assembly instruction kind - [mfc0 s4, Count] (defun-debug entity-speed-test ((arg0 string)) (local-vars (s4-0 int)) @@ -2397,7 +2396,7 @@ (reset-actors 'debug) 0 (disable-irq) - (.mtc0 Count r0) + (.mtc0 Count 0) (.sync.p) (birth! gp-0) (.mfc0 s4-0 Count) diff --git a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc index 406407d18c..1ea9796172 100644 --- a/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc +++ b/goal_src/jak2/engine/gfx/sprite/particles/sparticle-launcher-h.gc @@ -383,21 +383,21 @@ (deftype sparticle-launch-state (structure) - ((group-item sparticle-group-item :offset-assert 0) - (flags sp-launch-state-flags :offset-assert 4) - (randomize uint16 :offset-assert 6) - (center vector :offset-assert 8) - (sprite3d sprite-vec-data-3d :offset-assert 12) - (sprite sparticle-cpuinfo :offset-assert 16) - (offset uint32 :offset-assert 20) - (accum float :offset-assert 24) - (spawn-time uint32 :offset-assert 28) - (control basic :offset-assert 32) - (swarm basic :offset 20) - (seed uint32 :offset 24) - (time uint32 :offset 28) - (spec basic :offset 16) - (id uint32 :offset 12) + ((group-item sparticle-group-item :offset-assert 0) + (flags sp-launch-state-flags :offset-assert 4) + (randomize uint16 :offset-assert 6) + (center vector :offset-assert 8) + (sprite3d sprite-vec-data-3d :offset-assert 12) + (sprite sparticle-cpuinfo :offset-assert 16) + (offset uint32 :offset-assert 20) + (accum float :offset-assert 24) + (spawn-time uint32 :offset-assert 28) + (control sparticle-launch-control :offset-assert 32) + (swarm basic :offset 20) + (seed uint32 :offset 24) + (time uint32 :offset 28) + (spec basic :offset 16) + (id uint32 :offset 12) ) :method-count-assert 9 :size-assert #x24 @@ -461,9 +461,3 @@ (set! (-> sparticle-launch-control heap-base) (the-as uint 48)) - -0 - - - - diff --git a/goal_src/jak2/engine/level/level-h.gc b/goal_src/jak2/engine/level/level-h.gc index b2eaceae85..6b6dc2a9ed 100644 --- a/goal_src/jak2/engine/level/level-h.gc +++ b/goal_src/jak2/engine/level/level-h.gc @@ -409,7 +409,7 @@ (debug-draw-actors (_type_ symbol) none 15) (assign-draw-indices (_type_) none 16) (actors-update (_type_) none 17) - (update-nav-meshes (_type_) none 18) + (update-nav-meshes-method (_type_) none 18) (level-update (_type_) none 19) (level-get-target-inside (_type_) level 20) (alloc-levels-if-needed (_type_ symbol) none 21) diff --git a/goal_src/jak2/engine/nav/nav-mesh-h.gc b/goal_src/jak2/engine/nav/nav-mesh-h.gc index 84ecc686d1..f90fd1515b 100644 --- a/goal_src/jak2/engine/nav/nav-mesh-h.gc +++ b/goal_src/jak2/engine/nav/nav-mesh-h.gc @@ -247,7 +247,7 @@ and declared out of order (cannot use forward declared structures in inline arra (link-by-id (_type_ uint) symbol 32) (unlink-by-id (_type_ uint) symbol 33) (nav-mesh-method-34 (_type_ vector vector float) float 34) - (nav-mesh-method-35 (_type_ vector vector float) none 35) + (nav-mesh-method-35 (_type_ vector vector float) float 35) (debug-draw-poly (_type_ nav-poly rgba) none 36) (point-in-poly? (_type_ nav-poly vector) symbol 37) (nav-mesh-method-38 (_type_ nav-poly vector vector vector (pointer nav-poly)) vector 38) diff --git a/goal_src/jak2/engine/nav/nav-mesh.gc b/goal_src/jak2/engine/nav/nav-mesh.gc index 9fa7a94661..023bcb7695 100644 --- a/goal_src/jak2/engine/nav/nav-mesh.gc +++ b/goal_src/jak2/engine/nav/nav-mesh.gc @@ -2632,7 +2632,6 @@ ) ) -;; WARN: Return type mismatch float vs none. ;; WARN: new jak 2 until loop case, check carefully (defmethod nav-mesh-method-35 nav-mesh ((obj nav-mesh) (arg0 vector) (arg1 vector) (arg2 float)) (let ((gp-0 (new 'stack-no-clear 'inline-array 'nav-poly 3))) @@ -2670,7 +2669,6 @@ ) (-> gp-0 2 vertex3 y) ) - (none) ) (none) diff --git a/goal_src/jak2/engine/physics/rigid-body-h.gc b/goal_src/jak2/engine/physics/rigid-body-h.gc index cf74d3a7f6..50c2826601 100644 --- a/goal_src/jak2/engine/physics/rigid-body-h.gc +++ b/goal_src/jak2/engine/physics/rigid-body-h.gc @@ -82,6 +82,7 @@ (bounce-factor float :offset-assert 16) (friction-factor float :offset-assert 20) (bounce-mult-factor float :offset-assert 24) + (unknown-k1hbn23 float :offset-assert 28) (cm-offset-joint vector :inline :offset-assert 32) (inv-inertial-tensor matrix :inline :offset-assert 48) (inertial-tensor matrix :inline :offset-assert 112) @@ -110,27 +111,21 @@ (deftype rigid-body-object-constants (structure) - ((info rigid-body-info :inline :offset-assert 0) - (mass float :offset 0) - (inv-mass float :offset 4) - (cm-joint vector :inline :offset 32) - (cm-joint-x meters :offset 32) - (cm-joint-y meters :offset 36) - (cm-joint-z meters :offset 40) - (cm-joint-w meters :offset 44) - (linear-damping float :offset 8) - (angular-damping float :offset 12) - (bounce-factor float :offset 16) - (friction-factor float :offset 20) - (inertial-tensor-x meters :offset 176) - (inertial-tensor-y meters :offset 180) - (inertial-tensor-z meters :offset 184) - (extra rigid-body-object-extra-info :inline :offset-assert 188) - (max-time-step float :offset 188) - (gravity meters :offset 192) - (idle-distance meters :offset 196) - (attack-force-scale float :offset 200) - (name symbol :offset-assert 204) + ((info rigid-body-info :inline :offset-assert 0) + (cm-joint vector :inline :offset 32) + (cm-joint-x meters :offset 32) + (cm-joint-y meters :offset 36) + (cm-joint-z meters :offset 40) + (cm-joint-w meters :offset 44) + (linear-damping float :offset 8) + (angular-damping float :offset 12) + (bounce-factor float :offset 16) + (friction-factor float :offset 20) + (inertial-tensor-x meters :offset 176) + (inertial-tensor-y meters :offset 180) + (inertial-tensor-z meters :offset 184) + (extra rigid-body-object-extra-info :inline :offset-assert 188) + (name symbol :offset-assert 204) ) :method-count-assert 9 :size-assert #xd0 diff --git a/goal_src/jak2/engine/physics/rigid-body.gc b/goal_src/jak2/engine/physics/rigid-body.gc index 2daf94f81b..ca011b2ae0 100644 --- a/goal_src/jak2/engine/physics/rigid-body.gc +++ b/goal_src/jak2/engine/physics/rigid-body.gc @@ -898,7 +898,7 @@ (defmethod rigid-body-object-method-29 rigid-body-object ((obj rigid-body-object) (arg0 float)) (let ((a1-1 (new 'stack-no-clear 'vector))) (vector-reset! a1-1) - (set! (-> a1-1 y) (* -1.0 (-> obj info gravity) (-> obj rbody state info mass))) + (set! (-> a1-1 y) (* -1.0 (-> obj info extra gravity) (-> obj rbody state info mass))) (rigid-body-method-20 (-> obj rbody state) a1-1) ) 0 @@ -944,7 +944,7 @@ (method-of-object obj rigid-body-object-method-29) ) (rigid-body-object-method-35 obj) - (set! (-> obj max-time-step) (-> arg0 max-time-step)) + (set! (-> obj max-time-step) (-> arg0 extra max-time-step)) (set! (-> obj root-override-2 max-iteration-count) (the-as uint 4)) (let ((v1-15 (-> obj skel root-channel 0))) (set! (-> v1-15 num-func) num-func-identity) @@ -993,10 +993,12 @@ :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 4) (meters 4)) ) - :max-time-step 0.033333335 - :gravity (meters 80) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.033333335 + :gravity (meters 80) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*rigid-body-object-constants* ) ) @@ -1182,7 +1184,7 @@ This commonly includes things such as: ) ) ) - (set! (-> s5-0 impulse) (* f0-2 (-> obj info attack-force-scale))) + (set! (-> s5-0 impulse) (* f0-2 (-> obj info extra attack-force-scale))) (apply-damage obj (* 0.667 f1-0) s5-0) ) (rigid-body-object-method-42 obj) @@ -1417,7 +1419,7 @@ This commonly includes things such as: (defstate idle (rigid-body-object) :virtual #t :trans (behavior () - (if (and *target* (and (>= (-> self info idle-distance) + (if (and *target* (and (>= (-> self info extra idle-distance) (vector-vector-distance (-> self root-override-2 trans) (-> *target* control trans)) ) (zero? (logand (focus-status teleporting) (-> *target* focus-status))) @@ -1439,7 +1441,7 @@ This commonly includes things such as: ) :trans (behavior () (if (or (not *target*) - (or (< (+ 4096.0 (-> self info idle-distance)) + (or (< (+ 4096.0 (-> self info extra idle-distance)) (vector-vector-distance (-> self root-override-2 trans) (-> *target* control trans)) ) (logtest? (focus-status teleporting) (-> *target* focus-status)) diff --git a/goal_src/jak2/levels/city/common/ctyport-obs.gc b/goal_src/jak2/levels/city/common/ctyport-obs.gc index d07a9c1f11..7b45f5c29f 100644 --- a/goal_src/jak2/levels/city/common/ctyport-obs.gc +++ b/goal_src/jak2/levels/city/common/ctyport-obs.gc @@ -35,10 +35,12 @@ :cm-offset-joint (new 'static 'vector :z 8192.0 :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 16) (meters 6) (meters 20)) ) - :max-time-step 0.033333335 - :gravity (meters 40) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.033333335 + :gravity (meters 40) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*barge-constants* :flags #x8 :object-type #x11 @@ -505,7 +507,7 @@ (rigid-body-method-18 (-> v1-10 state) a1-9 (the-as vector a2-0)) ) (.svf (&-> (-> s4-0 vector) 0 quad) vf0) - (set! (-> s4-0 vector 0 y) (* -4.0 (-> s2-0 gravity) (-> s2-0 info mass))) + (set! (-> s4-0 vector 0 y) (* -4.0 (-> s2-0 extra gravity) (-> s2-0 info mass))) (let ((a1-10 (-> s4-0 vector))) (rigid-body-method-20 (-> s3-0 state) (the-as vector a1-10)) ) diff --git a/goal_src/jak2/levels/city/common/vehicle-control.gc b/goal_src/jak2/levels/city/common/vehicle-control.gc index 614b6eb14b..8446731e75 100644 --- a/goal_src/jak2/levels/city/common/vehicle-control.gc +++ b/goal_src/jak2/levels/city/common/vehicle-control.gc @@ -147,30 +147,34 @@ (let* ((s5-0 (-> obj branch dest-node)) (s4-0 (-> s5-0 branch-count)) ) - (cond - ((= s4-0 1) - (let ((v1-4 (-> s5-0 branch-array 0))) - (if (!= (-> v1-4 dest-node id) #xffff) - (set! gp-0 v1-4) - ) - ) - ) - ((< 1 s4-0) - (let ((v1-6 (rand-vu-int-count s4-0))) - (countdown (a0-8 s4-0) - (let ((a1-3 (-> s5-0 branch-array v1-6))) - (b! (not (!= (-> a1-3 dest-node id) #xffff)) cfg-8 :delay (empty-form)) - (set! gp-0 a1-3) - ) - (b! #t cfg-12 :delay (nop!)) - (label cfg-8) - (+! v1-6 1) - (if (>= v1-6 s4-0) - (set! v1-6 0) - ) - ) - ) - ) + (b! (!= s4-0 1) cfg-4 :delay (empty-form)) + (let ((v1-4 (-> s5-0 branch-array 0))) + (if (!= (-> v1-4 dest-node id) #xffff) + (set! gp-0 v1-4) + ) + ) + (b! #t cfg-12 :delay (nop!)) + (label cfg-4) + (when (< 1 s4-0) + (let ((v1-6 (rand-vu-int-count s4-0)) + (a0-8 s4-0) + ) + (b! #t cfg-10 :delay (nop!)) + (label cfg-6) + (+! a0-8 -1) + (let ((a1-3 (-> s5-0 branch-array v1-6))) + (b! (not (!= (-> a1-3 dest-node id) #xffff)) cfg-8 :delay (empty-form)) + (set! gp-0 a1-3) + ) + (b! #t cfg-12 :delay (nop!)) + (label cfg-8) + (+! v1-6 1) + (if (>= v1-6 s4-0) + (set! v1-6 0) + ) + (label cfg-10) + (b! (nonzero? a0-8) cfg-6 :delay (nop!)) + ) ) ) (label cfg-12) @@ -318,7 +322,7 @@ 0 (set! sv-16 arg0) (set! sv-20 arg3) - (set! sv-24 (-> arg2 info-override inv-mass)) + (set! sv-24 (-> arg2 info-override info inv-mass)) (let ((gp-0 (new 'stack-no-clear 'inline-array 'vector 16))) (set! (-> gp-0 15 x) (+ (-> obj target-speed) (-> obj target-speed-offset))) (set! (-> gp-0 1 quad) (-> arg1 quad)) @@ -437,7 +441,7 @@ (vector-float*! (-> gp-0 6) (-> gp-0 14) - (* -0.5 (/ sv-24 (+ sv-24 (-> v1-70 info-override inv-mass))) sv-20 f1-14) + (* -0.5 (/ sv-24 (+ sv-24 (-> v1-70 info-override info inv-mass))) sv-20 f1-14) ) (vector+! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6)) ) diff --git a/goal_src/jak2/levels/city/common/vehicle-guard.gc b/goal_src/jak2/levels/city/common/vehicle-guard.gc index d428742142..6b20ae2205 100644 --- a/goal_src/jak2/levels/city/common/vehicle-guard.gc +++ b/goal_src/jak2/levels/city/common/vehicle-guard.gc @@ -5,37 +5,33 @@ ;; name in dgo: vehicle-guard ;; dgos: CWI -;; DECOMP BEGINS - -(deftype turret-barrel-info (structure) - ((local-pos vector :inline :offset-assert 0) - (local-dir vector :inline :offset-assert 16) - ) - :method-count-assert 9 - :size-assert #x20 - :flag-assert #x900000020 +(deftype turret-unknown-stack-structure (structure) + "TODO - sigh...another one that i cant seem to find a fit" + ((vec-1 vector :inline :offset-assert 0) + (vec-2 vector :inline :offset-assert 16) + (vec-3 vector :inline :offset-assert 32) + (vec-4 vector :inline :offset-assert 48) + (vec-5 vector :inline :offset-assert 64) + (vec-6 vector :inline :offset-assert 80) + (vec-7 vector :inline :offset-assert 96) + (mat-1 matrix :inline :offset-assert 112) + (vec-8 vector :inline :offset-assert 176) + (vec-9 vector :inline :offset-assert 192) + (vec-10 vector :inline :offset-assert 208) + (vec-11 vector :inline :offset-assert 224) + (vec-12 vector :inline :offset-assert 240)) ) -(deftype turret-control-info (structure) - ((joint-index int8 :offset-assert 0) - (barrel-count int8 :offset-assert 1) - (shot-speed float :offset-assert 4) - (attack-range float :offset-assert 8) - (rot-min float 2 :offset-assert 12) - (rot-max float 2 :offset-assert 20) - (rot-x-min float :offset 12) - (rot-x-max float :offset 20) - (rot-y-min float :offset 16) - (rot-y-max float :offset 24) - (local-pos vector :inline :offset-assert 32) - (local-dir vector :inline :offset-assert 48) - (barrel-array turret-barrel-info 4 :inline :offset-assert 64) +(deftype turret-unknown-stack-structure2 (structure) + "TODO - another one! this one has an entity, but also a matrix!?" + ((proj-params projectile-init-by-other-params :inline :offset-assert 0) + (mat-1 matrix :inline :offset-assert 96) + (vec-1 vector :inline :offset-assert 160) + (vec-2 vector :inline :offset-assert 176) ) - :method-count-assert 9 - :size-assert #xc0 - :flag-assert #x9000000c0 - ) +) +;; +++turret-flag (defenum turret-flag :bitfield #t :type uint8 @@ -46,29 +42,62 @@ (display-marks 4) (no-rot-y-clamp 5) ) +;; ---turret-flag + +;; DECOMP BEGINS + +(deftype turret-barrel-info (structure) + ((local-pos vector :inline :offset-assert 0) + (local-dir vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + + +(deftype turret-control-info (structure) + ((joint-index int8 :offset-assert 0) + (barrel-count int8 :offset-assert 1) + (shot-speed float :offset-assert 4) + (attack-range float :offset-assert 8) + (rot-min float 2 :offset-assert 12) + (rot-max float 2 :offset-assert 20) + (rot-x-min float :offset 12) + (rot-x-max float :offset 20) + (rot-y-min float :offset 16) + (rot-y-max float :offset 24) + (local-pos vector :inline :offset-assert 32) + (local-dir vector :inline :offset-assert 48) + (barrel-array turret-barrel-info 4 :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) + (deftype turret-control (structure) - ( - (info turret-control-info :offset-assert 0) - (guard-settings traffic-guard-type-settings :offset-assert 4) - (flags turret-flag :offset-assert 8) - (shot-count int8 :offset-assert 9) - (burst-count int16 :offset-assert 10) - (target-dist float :offset-assert 12) - (inaccuracy float :offset-assert 16) - (aim-offset-angle degrees :offset-assert 20) - (aim-rot float 2 :offset-assert 24) ;; elt size: 4 - (aim-rot-vel float 2 :offset-assert 32) ;; elt size: 4 - (aim-rot-offset float 2 :offset-assert 40) ;; elt size: -8 - (aim-rot-x float :offset 24) - (aim-rot-y float :offset 28) - (aim-rot-vel-x float :offset 32) - (aim-rot-vel-y float :offset 36) - (target-in-sight-time time-frame :offset-assert 48) - (aim-acquire-time time-frame :offset-assert 56) - (shoot-time time-frame :offset-assert 64) - (owner-handle handle :offset-assert 72) - ) + ((info turret-control-info :offset-assert 0) + (guard-settings traffic-guard-type-settings :offset-assert 4) + (flags turret-flag :offset-assert 8) + (shot-count int8 :offset-assert 9) + (burst-count int16 :offset-assert 10) + (target-dist float :offset-assert 12) + (inaccuracy float :offset-assert 16) + (aim-offset-angle degrees :offset-assert 20) + (aim-rot float 2 :offset-assert 24) + (aim-rot-vel float 2 :offset-assert 32) + (aim-rot-offset float 2 :offset-assert 40) + (aim-rot-x float :offset 24) + (aim-rot-y float :offset 28) + (aim-rot-vel-x float :offset 32) + (aim-rot-vel-y float :offset 36) + (target-in-sight-time time-frame :offset-assert 48) + (aim-acquire-time time-frame :offset-assert 56) + (shoot-time time-frame :offset-assert 64) + (owner-handle handle :offset-assert 72) + ) :pack-me :method-count-assert 18 :size-assert #x50 @@ -84,4 +113,1332 @@ (turret-control-method-16 (_type_ float float) none 16) (turret-control-method-17 (_type_ vehicle) none 17) ) - ) \ No newline at end of file + ) + + +(defmethod turret-control-method-15 turret-control ((obj turret-control) (arg0 turret-control-info)) + (set! (-> obj info) arg0) + (set! (-> obj owner-handle) (the-as handle #f)) + 0 + (none) + ) + +(defmethod turret-control-method-12 turret-control ((obj turret-control) (arg0 joint-mod-rotate-local)) + (let ((v1-0 (new 'stack-no-clear 'vector))) + (set! (-> v1-0 x) (- (-> obj aim-rot-x))) + (set! (-> v1-0 y) (-> obj aim-rot-y)) + (set! (-> v1-0 z) 0.0) + (quaternion-zxy! (-> arg0 rotation) v1-0) + ) + 0 + (none) + ) + +(defmethod turret-control-method-13 turret-control ((obj turret-control)) + (let ((f30-0 + (/ (* 298261630.0 (-> obj inaccuracy) (-> obj guard-settings inaccuracy)) (fmax 40960.0 (-> obj target-dist))) + ) + ) + (set! (-> obj aim-rot-offset 0) (* f30-0 (cos (-> obj aim-offset-angle)))) + (set! (-> obj aim-rot-offset 1) (* f30-0 (sin (-> obj aim-offset-angle)))) + ) + (+! (-> obj aim-offset-angle) (* 32768.0 (rand-vu))) + 0 + (none) + ) + +(defmethod turret-control-method-14 turret-control ((obj turret-control)) + (logclear! (-> obj flags) (turret-flag firing aiming)) + (set! (-> obj burst-count) 0) + (set! (-> obj aim-offset-angle) (* 65536.0 (rand-vu))) + 0 + (none) + ) + +(defun vehicle-los-clear? ((arg0 vector) (arg1 vector)) + (let ((v1-0 (new 'stack-no-clear 'collide-query))) + (set! (-> v1-0 start-pos quad) (-> arg0 quad)) + (vector-! (-> v1-0 move-dist) arg1 arg0) + (let ((a0-1 v1-0)) + (set! (-> a0-1 radius) 2048.0) + (set! (-> a0-1 collide-with) (collide-spec backgnd)) + (set! (-> a0-1 ignore-process0) #f) + (set! (-> a0-1 ignore-process1) #f) + (set! (-> a0-1 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1)) + (set! (-> a0-1 action-mask) (collide-action solid)) + ) + (< (fill-and-probe-using-line-sphere *collide-cache* v1-0) 0.0) + ) + ) + +(defun vehicle-draw-beam ((arg0 sparticle-launcher) (arg1 vector) (arg2 vector) (arg3 object) (arg4 symbol)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + (vf7 :class vf) + ) + (init-vf0-vector) + (let ((a1-2 (vector+! (new 'stack-no-clear 'vector) arg1 arg2))) + (when (or (not arg4) (line-in-view-frustum? arg1 a1-2)) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'quaternion)) + ) + (if (get-field-spec-by-id arg0 (sp-field-id spt-scale-y)) + (set! (-> *beam-info* y-scale) (vector-length arg2)) + ) + (let ((a0-4 s5-0)) + (let ((v1-10 arg2)) + (let ((a1-5 0.5)) + (.mov vf7 a1-5) + ) + (.lvf vf5 (&-> v1-10 quad)) + ) + (.lvf vf4 (&-> arg1 quad)) + (.add.x.vf vf6 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf5 vf7 :mask #b111) + (.add.mul.w.vf vf6 vf4 vf0 acc :mask #b111) + (.svf (&-> a0-4 quad) vf6) + ) + (forward-up->quaternion s4-0 arg2 (new 'static 'vector :y 1.0 :w 1.0)) + (dotimes (s3-1 3) + (quaternion-rotate-local-z! s4-0 s4-0 10922.667) + (quaternion-copy! *particle-quat* s4-0) + (let ((t9-5 sp-launch-particles-var) + (a0-8 *sp-particle-system-3d*) + (a1-9 arg0) + (a2-3 *launch-matrix*) + ) + (set! (-> a2-3 trans quad) (-> s5-0 quad)) + (t9-5 a0-8 a1-9 a2-3 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + ) + ) + ) + ) + 0 + (none) + ) + ) + +(defun vehicle-draw-laser-spot ((arg0 vector) (arg1 vector) (arg2 symbol)) + (vector+float*! (new 'stack-no-clear 'vector) arg0 arg1 -1638.4) + (cond + (arg2 + (let ((t9-0 sp-launch-particles-var) + (a0-2 *sp-particle-system-2d*) + (a1-1 (-> *part-id-table* 771)) + (a2-1 *launch-matrix*) + ) + (set! (-> a2-1 trans quad) (-> arg0 quad)) + (t9-0 a0-2 a1-1 a2-1 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + (let ((t9-1 sp-launch-particles-var) + (a0-3 *sp-particle-system-2d*) + (a1-2 (-> *part-id-table* 770)) + (a2-2 *launch-matrix*) + ) + (set! (-> a2-2 trans quad) (-> arg0 quad)) + (t9-1 a0-3 a1-2 a2-2 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + ) + (else + (let ((t9-2 sp-launch-particles-var) + (a0-4 *sp-particle-system-2d*) + (a1-3 (-> *part-id-table* 772)) + (a2-3 *launch-matrix*) + ) + (set! (-> a2-3 trans quad) (-> arg0 quad)) + (t9-2 a0-4 a1-3 a2-3 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + ) + ) + 0 + (none) + ) + +(defun vehicle-draw-laser ((arg0 vector) (arg1 vector)) + (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (camera-pos) arg0) 1.0) + (set! (-> (new 'stack-no-clear 'vector) quad) (-> arg0 quad)) + (let ((s5-1 (-> *part-id-table* 769))) + (get-field-spec-by-id s5-1 (sp-field-id spt-timer)) + (let* ((s4-3 (vector-! (new 'stack-no-clear 'vector) arg1 arg0)) + (f30-0 (vector-vector-distance (camera-pos) arg0)) + (s3-2 (get-field-spec-by-id s5-1 (sp-field-id spt-scale-x))) + (f0-4 (cond + ((< f30-0 122.88) + 0.0 + ) + ((< 65536.0 f30-0) + 1.0 + ) + (else + (* 0.000015287453 (+ -122.88 f30-0)) + ) + ) + ) + (f30-1 (-> s3-2 initial-valuef)) + (f28-0 (-> s3-2 random-rangef)) + ) + (set! (-> s3-2 initial-valuef) (* f30-1 f0-4)) + (set! (-> s3-2 random-rangef) (* f28-0 f0-4)) + (vehicle-draw-beam s5-1 arg0 s4-3 #f #t) + (set! (-> s3-2 initial-valuef) f30-1) + (set! (-> s3-2 random-rangef) f28-0) + ) + ) + 0 + (none) + ) + +(defmethod turret-control-method-9 turret-control ((obj turret-control) (arg0 vehicle) (arg1 vector) (arg2 vector)) + (with-pp + (let ((gp-0 (new 'stack-no-clear 'turret-unknown-stack-structure))) + (set! (-> gp-0 vec-12 x) (-> pp clock seconds-per-frame)) + (let* ((v1-1 (-> gp-0 mat-1)) + (a3-1 (-> arg0 node-list data (-> obj info joint-index) bone transform)) + (a0-4 (-> a3-1 quad 0)) + (a1-4 (-> a3-1 quad 1)) + (a2-1 (-> a3-1 quad 2)) + (a3-2 (-> a3-1 trans quad)) + ) + (set! (-> v1-1 quad 0) a0-4) + (set! (-> v1-1 quad 1) a1-4) + (set! (-> v1-1 quad 2) a2-1) + (set! (-> v1-1 trans quad) a3-2) + ) + (set! (-> obj target-dist) (vector-vector-distance (-> gp-0 mat-1 trans) arg1)) + (let ((f0-3 (/ (-> obj target-dist) (-> obj info shot-speed)))) + (vector+float*! (-> gp-0 vec-1) arg1 arg2 f0-3) + ) + (when (not (logtest? (-> obj flags) (turret-flag aiming))) + (logior! (-> obj flags) (turret-flag aiming)) + (turret-control-method-13 obj) + ) + (vector-matrix*! (-> gp-0 vec-6) (-> obj info local-pos) (-> gp-0 mat-1)) + (vector-! (-> gp-0 vec-5) (-> gp-0 vec-1) (-> gp-0 vec-6)) + (let* ((v1-14 (-> gp-0 mat-1)) + (a3-3 (-> arg0 node-list data 0 bone transform)) + (a0-11 (-> a3-3 quad 0)) + (a1-9 (-> a3-3 quad 1)) + (a2-3 (-> a3-3 quad 2)) + (a3-4 (-> a3-3 trans quad)) + ) + (set! (-> v1-14 quad 0) a0-11) + (set! (-> v1-14 quad 1) a1-9) + (set! (-> v1-14 quad 2) a2-3) + (set! (-> v1-14 trans quad) a3-4) + ) + (matrix-transpose! (the-as matrix (-> gp-0 vec-8)) (-> gp-0 mat-1)) + (vector-rotate*! (-> gp-0 vec-3) (-> gp-0 vec-5) (the-as matrix (-> gp-0 vec-8))) + (set! (-> gp-0 vec-4 y) (atan (-> gp-0 vec-3 x) (-> gp-0 vec-3 z))) + (let* ((v1-15 (-> gp-0 vec-3)) + (f0-11 (sqrtf (+ (* (-> v1-15 x) (-> v1-15 x)) (* (-> v1-15 z) (-> v1-15 z))))) + ) + (set! (-> gp-0 vec-4 x) (atan (-> gp-0 vec-3 y) f0-11)) + ) + (+! (-> gp-0 vec-4 x) (-> obj aim-rot-offset 0)) + (+! (-> gp-0 vec-4 y) (-> obj aim-rot-offset 1)) + (dotimes (s3-1 2) + (+! (-> obj aim-rot-vel s3-1) + (* 5.0 + (- (* 8.0 (if (or (zero? s3-1) (zero? (logand (-> obj flags) (turret-flag no-rot-y-clamp)))) + (- (-> gp-0 vec-4 data s3-1) (-> obj aim-rot s3-1)) + (deg- (-> gp-0 vec-4 data s3-1) (-> obj aim-rot s3-1)) + ) + ) + (-> obj aim-rot-vel s3-1) + ) + (-> gp-0 vec-12 x) + ) + ) + (set! (-> obj aim-rot-vel s3-1) (* (-> obj aim-rot-vel s3-1) (fmax 0.0 (- 1.0 (* 0.1 (-> gp-0 vec-12 x)))))) + (+! (-> obj aim-rot s3-1) (* (-> obj aim-rot-vel s3-1) (-> gp-0 vec-12 x))) + (when (or (zero? s3-1) (zero? (logand (-> obj flags) (turret-flag no-rot-y-clamp)))) + (let ((f0-31 (-> obj info rot-min s3-1))) + (when (< (-> obj aim-rot s3-1) f0-31) + (set! (-> obj aim-rot s3-1) f0-31) + (set! (-> obj aim-rot-vel s3-1) 0.0) + ) + ) + (let ((f0-33 (-> obj info rot-max s3-1))) + (when (< f0-33 (-> obj aim-rot s3-1)) + (set! (-> obj aim-rot s3-1) f0-33) + (set! (-> obj aim-rot-vel s3-1) 0.0) + ) + ) + ) + ) + (logclear! (-> obj flags) (turret-flag should-shoot)) + (when (and (< (fabs (deg- (-> obj aim-rot-x) (-> gp-0 vec-4 x))) 2912.7112) + (< (fabs (deg- (-> obj aim-rot-y) (-> gp-0 vec-4 y))) 2912.7112) + (< (-> obj target-dist) (-> obj info attack-range)) + ) + (logior! (-> obj flags) (turret-flag should-shoot)) + (when (logtest? (-> obj flags) (turret-flag targetting-laser)) + (let* ((v1-88 (-> gp-0 mat-1)) + (a3-5 (-> arg0 node-list data (-> obj info joint-index) bone transform)) + (a0-29 (-> a3-5 quad 0)) + (a1-20 (-> a3-5 quad 1)) + (a2-5 (-> a3-5 quad 2)) + (a3-6 (-> a3-5 trans quad)) + ) + (set! (-> v1-88 quad 0) a0-29) + (set! (-> v1-88 quad 1) a1-20) + (set! (-> v1-88 quad 2) a2-5) + (set! (-> v1-88 trans quad) a3-6) + ) + (set! (-> gp-0 vec-7 quad) (-> gp-0 mat-1 vector 2 quad)) + (let ((s3-2 (new 'stack-no-clear 'collide-query))) + (set! (-> s3-2 start-pos quad) (-> gp-0 vec-6 quad)) + (vector-float*! (-> s3-2 move-dist) (-> gp-0 vec-7) (-> obj info attack-range)) + (let ((v1-93 s3-2)) + (set! (-> v1-93 radius) 409.6) + (set! (-> v1-93 collide-with) + (collide-spec backgnd jak bot crate enemy obstacle hit-by-others-list player-list) + ) + (set! (-> v1-93 ignore-process0) arg0) + (set! (-> v1-93 ignore-process1) #f) + (set! (-> v1-93 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1)) + (set! (-> v1-93 action-mask) (collide-action solid)) + ) + (let ((f30-1 (fill-and-probe-using-line-sphere *collide-cache* s3-2)) + (s5-1 #f) + ) + (cond + ((< f30-1 0.0) + (vector+! (-> gp-0 vec-2) (-> s3-2 start-pos) (-> s3-2 move-dist)) + ) + (else + (let* ((s4-1 (-> s3-2 best-other-tri collide-ptr)) + (a0-43 (if (type? s4-1 collide-shape-prim) + s4-1 + ) + ) + ) + (if (and a0-43 (logtest? (-> (the-as collide-shape-prim a0-43) prim-core collide-as) (collide-spec jak))) + (set! s5-1 #t) + ) + ) + (vector+float*! (-> gp-0 vec-2) (-> s3-2 start-pos) (-> s3-2 move-dist) f30-1) + (vehicle-draw-laser-spot (-> gp-0 vec-2) (-> gp-0 vec-7) s5-1) + ) + ) + (when (not s5-1) + ) + ) + ) + (let ((t9-13 vehicle-draw-laser) + (a0-48 (-> gp-0 vec-6)) + (a1-27 (-> gp-0 vec-2)) + ) + (-> gp-0 vec-7) + (t9-13 a0-48 a1-27) + ) + ) + ) + ) + 0 + (none) + ) + ) + +(defmethod turret-control-method-10 turret-control ((obj turret-control) (arg0 vehicle)) + (with-pp + (cond + ((logtest? (-> obj flags) (turret-flag should-shoot)) + (cond + ((logtest? (-> obj flags) (turret-flag firing)) + (cond + ((> (-> obj shot-count) 0) + (if (>= (- (-> pp clock frame-counter) (-> obj shoot-time)) + (the-as time-frame (-> obj guard-settings shot-delay)) + ) + (turret-control-method-17 obj arg0) + ) + ) + (else + (logclear! (-> obj flags) (turret-flag firing)) + (+! (-> obj burst-count) 1) + (turret-control-method-13 obj) + ) + ) + ) + (else + (when (and (>= (- (-> pp clock frame-counter) (-> obj shoot-time)) + (the-as time-frame (-> obj guard-settings burst-delay)) + ) + (>= (- (-> pp clock frame-counter) (-> obj aim-acquire-time)) + (the-as time-frame (-> obj guard-settings acquire-delay)) + ) + ) + (set! (-> obj shot-count) + (+ (-> obj guard-settings shot-count) (rand-vu-int-count (+ (-> obj guard-settings rand-shot-count) 1))) + ) + (logior! (-> obj flags) (turret-flag firing)) + ) + ) + ) + ) + (else + (set! (-> obj aim-acquire-time) (-> pp clock frame-counter)) + (turret-control-method-14 obj) + ) + ) + 0 + (none) + ) + ) + +(defmethod turret-control-method-11 turret-control ((obj turret-control) (arg0 object) (arg1 object) (arg2 vector)) + (when (nonzero? (-> obj info)) + (set! (-> obj inaccuracy) (* 0.000012207031 (+ 20480.0 (vector-length arg2)))) + (turret-control-method-9 obj (the-as vehicle arg0) (the-as vector arg1) arg2) + (turret-control-method-10 obj (the-as vehicle arg0)) + ) + 0 + (none) + ) + +(defmethod turret-control-method-17 turret-control ((obj turret-control) (arg0 vehicle)) + (with-pp + (let ((s4-0 (new 'stack-no-clear 'turret-unknown-stack-structure2))) + (set! (-> s4-0 proj-params ent) (-> arg0 entity)) + (set! (-> s4-0 proj-params charge) 1.0) + (set! (-> s4-0 proj-params options) (projectile-options)) + (set! (-> s4-0 proj-params notify-handle) (process->handle arg0)) + (set! (-> s4-0 proj-params owner-handle) (process->handle (handle->process (-> obj owner-handle)))) + (set! (-> s4-0 proj-params ignore-handle) (process->handle arg0)) + (let* ((v1-14 *game-info*) + (a0-16 (+ (-> v1-14 attack-id) 1)) + ) + (set! (-> v1-14 attack-id) a0-16) + (set! (-> s4-0 proj-params attack-id) a0-16) + ) + (set! (-> s4-0 proj-params timeout) (new 'static 'handle :process #x4b0 :u64 #x4b0)) + (let* ((v1-16 (-> s4-0 mat-1)) + (a3-0 (-> arg0 node-list data (-> obj info joint-index) bone transform)) + (a0-20 (-> a3-0 quad 0)) + (a1-6 (-> a3-0 quad 1)) + (a2-0 (-> a3-0 quad 2)) + (a3-1 (-> a3-0 trans quad)) + ) + (set! (-> v1-16 quad 0) a0-20) + (set! (-> v1-16 quad 1) a1-6) + (set! (-> v1-16 quad 2) a2-0) + (set! (-> v1-16 trans quad) a3-1) + ) + (dotimes (s3-0 (-> obj info barrel-count)) + (vector-matrix*! (-> s4-0 vec-1) (the-as vector (-> obj info barrel-array s3-0)) (-> s4-0 mat-1)) + (set! (-> s4-0 vec-2 quad) (-> s4-0 mat-1 vector 2 quad)) + (set! (-> s4-0 proj-params pos quad) (-> s4-0 vec-1 quad)) + (vector-float*! (-> s4-0 proj-params vel) (-> s4-0 vec-2) (-> obj info shot-speed)) + (spawn-projectile guard-shot (-> s4-0 proj-params) arg0 *default-dead-pool*) + ) + ) + (set! (-> obj shoot-time) (-> pp clock frame-counter)) + (+! (-> obj shot-count) -1) + 0 + (none) + ) + ) + +(defmethod turret-control-method-16 turret-control ((obj turret-control) (arg0 float) (arg1 float)) + (with-pp + (let ((f0-0 (-> pp clock seconds-per-frame))) + (set! (-> obj aim-rot-vel-x) arg1) + (set! (-> obj aim-rot-vel-y) arg0) + (dotimes (v1-1 2) + (+! (-> obj aim-rot v1-1) (* f0-0 (-> obj aim-rot-vel v1-1))) + (let ((f1-4 (-> obj info rot-min v1-1))) + (when (< (-> obj aim-rot v1-1) f1-4) + (set! (-> obj aim-rot v1-1) f1-4) + (set! (-> obj aim-rot-vel v1-1) 0.0) + ) + ) + (let ((f1-6 (-> obj info rot-max v1-1))) + (when (< f1-6 (-> obj aim-rot v1-1)) + (set! (-> obj aim-rot v1-1) f1-6) + (set! (-> obj aim-rot-vel v1-1) 0.0) + ) + ) + ) + ) + 0 + (none) + ) + ) + +(deftype vehicle-guard-target-data (structure) + ((tpos vector :inline :offset-assert 0) + (spos vector :inline :offset-assert 16) + (tvel vector :inline :offset-assert 32) + (svel vector :inline :offset-assert 48) + (tdir vector :inline :offset-assert 64) + (sdir vector :inline :offset-assert 80) + (to-target vector :inline :offset-assert 96) + (to-target-dir vector :inline :offset-assert 112) + (temp vector :inline :offset-assert 128) + (target target :offset-assert 144) + (dist float :offset-assert 148) + (inv-dist float :offset-assert 152) + (attack-range float :offset-assert 156) + ) + :method-count-assert 9 + :size-assert #xa0 + :flag-assert #x9000000a0 + ) + + +(deftype vehicle-guard (vehicle) + ((ai-hook (function vehicle-guard none) :offset-assert 880) + (turret turret-control :inline :offset-assert 888) + (target-flags turret-flag :offset-assert 968) + (target-in-sight-time time-frame :offset-assert 976) + (minimap connection-minimap :offset-assert 984) + (vehicle-guard-pad-k1jn23k1 uint32 :offset-assert 988) + (traffic-target-status traffic-target-status :offset-assert 992) + (pursuit-target handle :offset-assert 1000) + (vehicle-guard-pad-1kjh2nb3k1 uint32 16 :offset-assert 1008) + (lod2 symbol :offset-assert 1072) + ) + :heap-base #x3c0 + :method-count-assert 159 + :size-assert #x434 + :flag-assert #x9f03c00434 + (:methods + (hostile () _type_ :state 144) + (stop-and-shoot () _type_ :state 145) + (slow-pursuit () _type_ :state 146) + (vehicle-guard-method-147 () none 147) + (vehicle-guard-method-148 () none 148) + (waiting-ambush () _type_ :state 149) + (vehicle-guard-method-150 (_type_) none 150) + (vehicle-guard-method-151 (_type_ vehicle-guard-target-data) none 151) + (vehicle-guard-method-152 (_type_ vehicle-guard-target-data) none 152) + (vehicle-guard-method-153 (_type_ target) none 153) + (vehicle-guard-method-154 (_type_) none 154) + (vehicle-guard-method-155 (_type_ vector vector) none 155) + (vehicle-guard-method-156 (_type_) none 156) + (vehicle-guard-method-157 (_type_ vehicle-guard-target-data) symbol 157) + (vehicle-guard-method-158 (_type_) none 158) + ) + ) + + +(defmethod vehicle-guard-method-153 vehicle-guard ((obj vehicle-guard) (arg0 target)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> s5-0 quad) (-> (get-trans arg0 3) quad)) + (turret-control-method-11 (-> obj turret) obj s5-0 (-> arg0 control transv)) + ) + 0 + (none) + ) + +(defmethod vehicle-guard-method-151 vehicle-guard ((obj vehicle-guard) (arg0 vehicle-guard-target-data)) + (let ((s5-0 (handle->process (-> obj pursuit-target)))) + (set! (-> arg0 target) (the-as target s5-0)) + (when s5-0 + (set! (-> arg0 tpos quad) (-> (the-as process-drawable s5-0) root trans quad)) + (set! (-> arg0 spos quad) (-> obj root-override-2 trans quad)) + (set! (-> arg0 tvel quad) (-> (the-as process-drawable s5-0) root transv quad)) + (set! (-> arg0 svel quad) (-> obj root-override-2 transv quad)) + (vector-normalize-copy! (-> arg0 tdir) (-> arg0 tvel) 1.0) + (vector-normalize-copy! (-> arg0 sdir) (-> arg0 svel) 1.0) + (set! (-> arg0 tpos y) (+ 4096.0 (-> arg0 tpos y))) + (vector-! (-> arg0 to-target) (-> arg0 tpos) (-> arg0 spos)) + (let* ((f0-2 (vector-length (-> arg0 to-target))) + (f1-2 (/ 1.0 f0-2)) + ) + (set! (-> arg0 dist) f0-2) + (set! (-> arg0 inv-dist) f1-2) + (vector-float*! (-> arg0 to-target-dir) (-> arg0 to-target) f1-2) + ) + (let ((f0-3 204800.0)) + (if (logtest? (focus-status pilot) (-> (the-as process-focusable s5-0) focus-status)) + (set! f0-3 (+ 102400.0 f0-3)) + ) + (set! (-> arg0 attack-range) f0-3) + ) + ) + ) + 0 + (none) + ) + +(defmethod vehicle-guard-method-152 vehicle-guard ((obj vehicle-guard) (arg0 vehicle-guard-target-data)) + (let ((s4-0 (handle->process (-> obj pursuit-target)))) + (cond + ((logtest? (rigid-body-object-flag target-in-sight) (-> obj flags)) + (logclear! (-> obj controller flags) (vehicle-controller-flag direct-mode)) + (when (>= (- (vector-dot (-> arg0 to-target-dir) (-> arg0 tdir))) (cos 21845.334)) + (logior! (-> obj controller flags) (vehicle-controller-flag direct-mode)) + (vector-! (-> arg0 temp) (-> arg0 svel) (-> arg0 tvel)) + (let* ((f2-0 (vector-dot (-> arg0 temp) (-> arg0 to-target-dir))) + (f0-5 (fmax 0.0 (fmin 1.0 (/ (-> arg0 dist) (fmax 4096.0 f2-0))))) + ) + (vector+float*! (-> arg0 tpos) (-> arg0 tpos) (-> arg0 tvel) f0-5) + (cond + ((or (< f0-5 0.05) (vehicle-los-clear? (-> arg0 tpos) (-> arg0 spos))) + (vector-! (-> arg0 to-target) (-> arg0 tpos) (-> arg0 spos)) + (vector-normalize-copy! (-> arg0 to-target-dir) (-> arg0 to-target) 1.0) + (vector-float*! (-> arg0 tvel) (-> arg0 tvel) -1.0) + ) + (else + (set! (-> arg0 tpos quad) (-> (the-as process-drawable s4-0) root trans quad)) + ) + ) + ) + ) + (vehicle-controller-method-19 (-> obj controller) (-> arg0 spos) #x43cccccd (-> arg0 tpos) (-> arg0 tvel)) + (vector-! (-> arg0 to-target) (-> obj controller target-point) (-> arg0 spos)) + (vector-normalize-copy! (-> arg0 to-target-dir) (-> arg0 to-target) 1.0) + (cond + ((< -12288.0 (- (-> arg0 tpos y) (-> arg0 spos y))) + (logior! (-> obj controller flags) (vehicle-controller-flag ignore-others no-slowing-for-turns)) + (let* ((f0-9 (* 2.0 (-> obj info-override max-xz-speed))) + (f1-8 (fmax 0.0 (vector-dot (-> arg0 sdir) (-> arg0 to-target-dir)))) + (f0-10 (* f0-9 (* f1-8 f1-8))) + ) + (+! (-> obj controller target-speed) f0-10) + ) + ) + (else + (logclear! (-> obj controller flags) (vehicle-controller-flag ignore-others no-slowing-for-turns)) + (let ((f0-13 (* (-> obj info-override max-xz-speed) (fmax 0.0 (vector-dot (-> arg0 sdir) (-> arg0 to-target-dir))))) + ) + (+! (-> obj controller target-speed) f0-13) + ) + ) + ) + ) + (else + ) + ) + ) + 0 + (none) + ) + +(defmethod vehicle-guard-method-150 vehicle-guard ((obj vehicle-guard)) + (with-pp + (cond + ((handle->process (-> obj pursuit-target)) + (let ((v1-3 (new 'stack-no-clear 'vehicle-control-point))) + (set! (-> v1-3 local-pos quad) (-> obj root-override-2 trans quad)) + (let ((v1-4 (traffic-engine-method-49 + (-> obj controller traffic) + (-> v1-3 local-pos) + (-> obj traffic-priority-id) + (the-as traffic-target-status (&-> obj traffic-target-status)) + ) + ) + ) + (when (logtest? (-> v1-4 flags) (traffic-target-flag updated)) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logclear (-> obj flags) (rigid-body-object-flag target-in-sight))) + ) + (when (logtest? (-> v1-4 flags) (traffic-target-flag visible-now)) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logior (rigid-body-object-flag target-in-sight) (-> obj flags))) + ) + (set! (-> obj target-in-sight-time) (-> pp clock frame-counter)) + ) + ) + (set! (-> obj target-flags) (the-as turret-flag (-> v1-4 flags))) + ) + ) + (when (not (logtest? (rigid-body-object-flag in-pursuit) (-> obj flags))) + (if (logtest? (rigid-body-object-flag target-in-sight) (-> obj flags)) + (vehicle-method-108 obj) + ) + ) + ) + (else + (vehicle-method-109 obj) + ) + ) + (let ((v1-22 (if (logtest? (rigid-body-object-flag in-pursuit) (-> obj flags)) + (-> obj draw lod-set lod 1 geo) + (-> obj lod2) + ) + ) + ) + (when (!= v1-22 (-> obj draw lod-set lod 2 geo)) + (set! (-> obj draw lod-set lod 2 geo) (the-as merc-ctrl v1-22)) + (set! (-> obj draw cur-lod) -1) + (lod-set! (-> obj draw) (-> obj draw desired-lod)) + ) + ) + 0 + (none) + ) + ) + +(defmethod vehicle-guard-method-155 vehicle-guard ((obj vehicle-guard) (arg0 vector) (arg1 vector)) + (cond + (#f + (let ((s5-0 (new 'stack-no-clear 'traj3d-params))) + (let ((f0-2 (+ 0.5 (* 0.5 (rand-vu))))) + (set! (-> s5-0 src quad) (-> obj root-override-2 trans quad)) + (vector+float*! (-> s5-0 dest) arg0 arg1 f0-2) + ) + (set! (-> s5-0 initial-tilt) 8192.0) + (set! (-> s5-0 gravity) 184320.0) + (when (traj3d-calc-initial-velocity-using-tilt s5-0) + (let ((a1-1 (new 'stack-no-clear 'projectile-init-by-other-params))) + (set! (-> a1-1 ent) (-> obj entity)) + (set! (-> a1-1 charge) 1.0) + (set! (-> a1-1 options) (projectile-options)) + (set! (-> a1-1 pos quad) (-> s5-0 src quad)) + (set! (-> a1-1 vel quad) (-> s5-0 initial-velocity quad)) + (set! (-> a1-1 notify-handle) (the-as handle #f)) + (set! (-> a1-1 owner-handle) (the-as handle #f)) + (set! (-> a1-1 ignore-handle) (process->handle obj)) + (let* ((v1-15 *game-info*) + (a0-14 (+ (-> v1-15 attack-id) 1)) + ) + (set! (-> v1-15 attack-id) a0-14) + (set! (-> a1-1 attack-id) a0-14) + ) + (set! (-> a1-1 timeout) (new 'static 'handle :process #x4b0 :u64 #x4b0)) + (spawn-projectile vehicle-grenade a1-1 obj *default-dead-pool*) + ) + (let ((a1-2 (new 'stack-no-clear 'traffic-danger-info))) + (set! (-> a1-2 sphere quad) (-> obj root-override-2 trans quad)) + (set! (-> a1-2 sphere r) 40960.0) + (set! (-> a1-2 velocity quad) (-> s5-0 initial-velocity quad)) + (set! (-> a1-2 notify-radius) 122880.0) + (set! (-> a1-2 danger-level) 1.0) + (set! (-> a1-2 decay-rate) 0.0) + (set! (-> a1-2 flags) (traffic-danger-flags tdf0)) + (set! (-> a1-2 danger-type) (traffic-danger-type tdt6)) + (set! (-> a1-2 handle) (the-as uint #f)) + (add-danger-sphere (-> obj controller traffic) a1-2) + ) + ) + ) + ) + (else + (let ((s5-1 (new 'stack-no-clear 'turret-unknown-stack-structure2))) + (set! (-> s5-1 mat-1 quad 0) (-> obj root-override-2 trans quad)) + (vector-! (-> s5-1 mat-1 vector 1) arg0 (the-as vector (-> s5-1 mat-1))) + (vector-normalize! (-> s5-1 mat-1 vector 1) 1.0) + (set! (-> s5-1 proj-params ent) (-> obj entity)) + (set! (-> s5-1 proj-params charge) 1.0) + (set! (-> s5-1 proj-params options) (projectile-options)) + (set! (-> s5-1 proj-params notify-handle) (process->handle obj)) + (set! (-> s5-1 proj-params owner-handle) (the-as handle #f)) + (set! (-> s5-1 proj-params ignore-handle) (process->handle obj)) + (let* ((v1-38 *game-info*) + (a0-36 (+ (-> v1-38 attack-id) 1)) + ) + (set! (-> v1-38 attack-id) a0-36) + (set! (-> s5-1 proj-params attack-id) a0-36) + ) + (set! (-> s5-1 proj-params timeout) (new 'static 'handle :process #x4b0 :u64 #x4b0)) + (vector+float*! (-> s5-1 proj-params pos) (the-as vector (-> s5-1 mat-1)) (-> s5-1 mat-1 vector 1) 16384.0) + (vector-float*! (-> s5-1 proj-params vel) (-> s5-1 mat-1 vector 1) 819200.0) + (spawn-projectile guard-shot (-> s5-1 proj-params) obj *default-dead-pool*) + ) + ) + ) + 0 + (none) + ) + +(defmethod vehicle-method-134 vehicle-guard ((obj vehicle-guard) (arg0 process)) + "Stubbed" + (set! (-> obj pursuit-target) (process->handle arg0)) + (set! (-> obj flags) (logior (rigid-body-object-flag alert) (-> obj flags))) + (vehicle-method-111 obj 2 (the-as target arg0)) + 0 + (none) + ) + +(defmethod rigid-body-object-method-46 vehicle-guard ((obj vehicle-guard) (arg0 process-drawable) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('impact-impulse) + (let ((s5-1 (the-as matrix (-> arg3 param 0)))) + (when (not (logtest? (-> obj flags) (rigid-body-object-flag player-driving))) + (let ((a1-2 (find-offending-process-focusable arg0 (the-as attack-info #f)))) + (when a1-2 + (cond + ((logtest? (rigid-body-object-flag in-pursuit) (-> obj flags)) + (if (= (handle->process (-> obj pursuit-target)) a1-2) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logior (rigid-body-object-flag rammed-target) (-> obj flags))) + ) + ) + ) + (else + (if (and (< (* 49152.0 (-> obj info-override info mass)) (-> s5-1 trans x)) + (logtest? (-> a1-2 mask) (process-mask target)) + ) + (vehicle-method-134 obj a1-2) + ) + ) + ) + ) + ) + ) + (rigid-body-object-method-42 obj) + (rigid-body-object-method-45 obj (the-as rigid-body-impact s5-1)) + ) + (if (and (-> obj next-state) (= (-> obj next-state name) 'idle)) + (go (method-of-object obj waiting)) + ) + ) + (('track) + (zero? (logand (-> obj flags) (rigid-body-object-flag player-driving))) + ) + (('alert-begin) + (when (and (not (logtest? (-> obj focus-status) (focus-status dead))) + (not (logtest? (rigid-body-object-flag alert) (-> obj flags))) + (logtest? (rigid-body-object-flag ai-driving) (-> obj flags)) + (>= (the-as uint (get-alert-level (-> obj controller traffic))) (the-as uint 2)) + ) + (set! (-> obj flags) (logior (rigid-body-object-flag alert) (-> obj flags))) + (set! (-> obj pursuit-target) (process->handle (the-as process (-> arg3 param 0)))) + ) + ) + (('alert-end) + (when (not (logtest? (-> obj focus-status) (focus-status dead))) + (when (logtest? (rigid-body-object-flag alert) (-> obj flags)) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logclear (-> obj flags) (rigid-body-object-flag persistent alert in-pursuit))) + ) + (speech-control-method-12 *speech-control* obj (speech-type speech-type-0 speech-type-2)) + (vehicle-method-109 obj) + (go (method-of-object obj active)) + ) + ) + ) + (('end-pursuit) + (when (logtest? (rigid-body-object-flag alert) (-> obj flags)) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logclear (-> obj flags) (rigid-body-object-flag persistent alert in-pursuit))) + ) + (vehicle-method-109 obj) + (go (method-of-object obj active)) + ) + ) + (else + ((method-of-type vehicle rigid-body-object-method-46) obj arg0 arg1 arg2 arg3) + ) + ) + (none) + ) + +(defmethod vehicle-method-137 vehicle-guard ((obj vehicle-guard) (arg0 traffic-object-spawn-params)) + (vehicle-rider-spawn obj crimson-guard-rider arg0) + 0 + (none) + ) + +(defun vehicle-guard-choose-branch ((arg0 vehicle-controller) (arg1 vehicle)) + (let ((gp-0 (the-as nav-branch #f))) + (cond + ((logtest? (rigid-body-object-flag alert) (-> arg1 flags)) + (let ((s5-0 (-> arg0 branch dest-node)) + (s4-0 (new 'stack-no-clear 'inline-array 'vector 5)) + ) + (set! (-> s4-0 4 x) -10000000000000000000000000000000000000.0) + (set! (-> s4-0 3 quad) (-> arg1 root-override-2 trans quad)) + (vector-! (-> s4-0 0) (-> s4-0 3) (the-as vector (&-> arg1 stack 896))) + (vector-normalize! (-> s4-0 0) 1.0) + (dotimes (s3-0 (-> s5-0 branch-count)) + (let ((s2-0 (-> s5-0 branch-array s3-0))) + (when (!= (-> s2-0 dest-node id) #xffff) + (let ((a1-3 (-> s2-0 dest-node)) + (v1-11 (-> s4-0 2)) + ) + (set! (-> v1-11 quad) (-> a1-3 position quad)) + (set! (-> v1-11 w) 1.0) + ) + (vector-! (-> s4-0 1) (-> s4-0 2) (-> s4-0 3)) + (vector-normalize! (-> s4-0 1) 1.0) + (let ((f0-3 (vector-dot (-> s4-0 0) (-> s4-0 1)))) + (when (< (-> s4-0 4 x) f0-3) + (set! (-> s4-0 4 x) f0-3) + (set! gp-0 s2-0) + ) + ) + ) + ) + ) + ) + ) + (else + (set! gp-0 (vehicle-controller-method-15 arg0)) + ) + ) + gp-0 + ) + ) + +(defmethod rigid-body-object-method-31 vehicle-guard ((obj vehicle-guard) (arg0 rigid-body-vehicle-constants)) + (let ((t9-0 (method-of-type vehicle rigid-body-object-method-31))) + (t9-0 obj arg0) + ) + (set! (-> obj mask) (logior (process-mask enemy guard) (-> obj mask))) + (set! (-> obj pursuit-target) (the-as handle #f)) + (set! (-> obj minimap) #f) + (set! (-> obj lod2) (the-as symbol (-> obj draw lod-set lod 2 geo))) + (set! (-> obj controller choose-branch-callback) vehicle-guard-choose-branch) + 0 + (none) + ) + +;; WARN: Return type mismatch traffic-guard-type-settings vs none. +(defmethod vehicle-method-82 vehicle-guard ((obj vehicle-guard)) + (let ((t9-0 (method-of-type vehicle vehicle-method-82))) + (t9-0 obj) + ) + (set! (-> obj turret guard-settings) + (get-traffic-guard-type-settings (-> obj controller traffic) (the-as int (-> obj info-override guard-type))) + ) + (none) + ) + +(defmethod vehicle-method-128 vehicle-guard ((obj vehicle-guard)) + (if (not (-> obj minimap)) + (set! (-> obj minimap) (add-icon! *minimap* obj (the-as uint 14) (the-as int #f) (the-as vector #t) 0)) + ) + ((method-of-type vehicle vehicle-method-128) obj) + (none) + ) + +(defmethod vehicle-method-127 vehicle-guard ((obj vehicle-guard)) + (when (-> obj minimap) + (logior! (-> obj minimap flags) (minimap-flag fade-out)) + (set! (-> obj minimap) #f) + ) + ((method-of-type vehicle vehicle-method-127) obj) + (none) + ) + +(defmethod vehicle-method-129 vehicle-guard ((obj vehicle-guard)) + (when (-> obj minimap) + (logior! (-> obj minimap flags) (minimap-flag fade-out)) + (set! (-> obj minimap) #f) + ) + ((method-of-type vehicle vehicle-method-129) obj) + (none) + ) + +(defmethod vehicle-method-130 vehicle-guard ((obj vehicle-guard) (arg0 traffic-object-spawn-params)) + (case (-> arg0 behavior) + ((9) + (vehicle-method-128 obj) + (set! (-> obj flags) (logior (rigid-body-object-flag persistent alert) (-> obj flags))) + (set! (-> obj pursuit-target) (the-as handle (-> arg0 handle))) + (go (method-of-object obj waiting-ambush)) + ) + (else + ((method-of-type vehicle vehicle-method-130) obj arg0) + ) + ) + (none) + ) + +(defmethod vehicle-guard-method-157 vehicle-guard ((obj vehicle-guard) (arg0 vehicle-guard-target-data)) + (local-vars (v1-11 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (and (logtest? (rigid-body-object-flag target-in-sight) (-> obj flags)) + (or (and (not (logtest? (focus-status pilot) (-> arg0 target focus-status))) (< (-> arg0 dist) 184320.0)) + (and (< (-> arg0 tpos y) (+ -16384.0 (-> obj root-override-2 trans y))) + (begin + (.lvf vf1 (&-> (-> arg0 tvel) quad)) + (.add.w.vf vf2 vf0 vf0 :mask #b1) + (.mul.vf vf1 vf1 vf1) + (.mul.x.vf acc vf2 vf1 :mask #b1) + (.add.mul.y.vf acc vf2 vf1 acc :mask #b1) + (.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1) + (.mov v1-11 vf1) + (let ((f0-2 v1-11) + (f1-3 61440.0) + ) + (< f0-2 (* f1-3 f1-3)) + ) + ) + (< (-> arg0 dist) 122880.0) + ) + ) + ) + ) + ) + +(defmethod vehicle-guard-method-156 vehicle-guard ((obj vehicle-guard)) + (with-pp + (let ((f30-0 (-> pp clock seconds-per-frame))) + (seek! (-> obj controls throttle) 0.0 (* 4.0 f30-0)) + (+! (-> obj controls brake) (* (- 1.0 (-> obj controls brake)) (fmin 1.0 (* 8.0 f30-0)))) + (let ((s4-0 (-> obj rbody state matrix)) + (s3-0 (-> obj rbody state matrix vector 2)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (vector-reset! s5-0) + (let ((v1-9 (handle->process (-> obj pursuit-target))) + (f28-0 0.0) + ) + (when (and v1-9 (logtest? (rigid-body-object-flag target-in-sight) (-> obj flags))) + (vector-! s5-0 (-> (the-as process-drawable v1-9) root trans) (-> obj root-override-2 trans)) + (set! (-> s5-0 y) 0.0) + (vector-normalize! s5-0 1.0) + (if (< (vector-dot s3-0 s5-0) (cos 2730.6667)) + (set! f28-0 (vector-dot (the-as vector s4-0) s5-0)) + ) + ) + (+! (-> obj controls steering) (* (- f28-0 (-> obj controls steering)) (fmin 1.0 (* 8.0 f30-0)))) + ) + ) + ) + (when (zero? (-> obj flight-level-index)) + (if (logtest? (-> obj flags) (rigid-body-object-flag riding)) + (vehicle-method-80 obj) + ) + ) + 0 + (none) + ) + ) + +(defmethod vehicle-guard-method-154 vehicle-guard ((obj vehicle-guard)) + (with-pp + (if (not (logtest? (-> obj rbody state flags) (rigid-body-flag enable-physics))) + (rigid-body-object-method-38 obj) + ) + (set! (-> obj camera-dist2) (vector-vector-distance-squared (-> obj root-override-2 trans) (camera-pos))) + (set! (-> obj player-dist2) (vector-vector-distance-squared (-> obj root-override-2 trans) (target-pos 0))) + (vehicle-controller-method-18 + (-> obj controller) + (-> obj target-acceleration) + (-> obj root-override-2 transv) + obj + (/ 1.0 (-> pp clock seconds-per-frame)) + ) + ((-> obj ai-hook) obj) + (vehicle-method-121 obj) + (vehicle-method-106 obj) + (when (not (logtest? (rigid-body-object-flag in-pursuit) (-> obj flags))) + (if (not (logtest? (-> obj target-flags) (turret-flag aiming))) + (speech-control-method-12 *speech-control* obj (speech-type speech-type-1)) + ) + (go (method-of-object obj active)) + ) + 0 + (none) + ) + ) + +(defmethod vehicle-guard-method-158 vehicle-guard ((obj vehicle-guard)) + (with-pp + (vehicle-guard-method-150 obj) + (let ((s5-0 (new 'stack-no-clear 'vehicle-guard-target-data))) + (vehicle-guard-method-151 obj s5-0) + (let ((a1-1 (-> s5-0 target))) + (when a1-1 + (cond + ((logtest? (rigid-body-object-flag target-in-sight) (-> obj flags)) + (vehicle-guard-method-153 obj a1-1) + (speech-control-method-15 *speech-control* obj) + ) + (else + (if (and (>= (- (-> pp clock frame-counter) (-> obj target-in-sight-time)) (seconds 4)) + (< 368640.0 (-> s5-0 dist)) + ) + (vehicle-method-109 obj) + ) + ) + ) + ) + ) + ) + (if (not (logtest? (rigid-body-object-flag in-pursuit) (-> obj flags))) + (go (method-of-object obj active)) + ) + (rigid-body-object-method-42 obj) + (vehicle-method-122 obj) + 0 + (none) + ) + ) + +(defmethod vehicle-method-94 vehicle-guard ((obj vehicle-guard)) + (with-pp + (rlet ((acc :class vf) + (vf0 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + (vf7 :class vf) + ) + (init-vf0-vector) + (let ((v1-0 (new 'stack-no-clear 'camera-free-floating-move-info))) + (let* ((a0-1 (-> v1-0 tm)) + (t0-0 (-> obj rbody state matrix)) + (a1-1 (-> t0-0 quad 0)) + (a2-0 (-> t0-0 quad 1)) + (a3-0 (-> t0-0 quad 2)) + (t0-1 (-> t0-0 trans quad)) + ) + (set! (-> a0-1 quad 0) a1-1) + (set! (-> a0-1 quad 1) a2-0) + (set! (-> a0-1 quad 2) a3-0) + (set! (-> a0-1 trans quad) t0-1) + ) + (let ((a0-2 (-> v1-0 rv))) + (let ((a1-3 (-> obj rbody state position))) + (let ((a2-1 (-> v1-0 tm vector 2))) + (let ((a3-2 163840.0)) + (.mov vf7 a3-2) + ) + (.lvf vf5 (&-> a2-1 quad)) + ) + (.lvf vf4 (&-> a1-3 quad)) + ) + (.add.x.vf vf6 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf5 vf7 :mask #b111) + (.add.mul.w.vf vf6 vf4 vf0 acc :mask #b111) + (.svf (&-> a0-2 quad) vf6) + ) + (vector-reset! (-> v1-0 up)) + (set! (-> obj turret inaccuracy) 0.0) + (turret-control-method-9 (-> obj turret) obj (-> v1-0 rv) (-> v1-0 up)) + ) + (when (cpad-hold? 0 r1) + (when (>= (- (-> pp clock frame-counter) (-> obj turret shoot-time)) (seconds 0.35)) + (set! (-> obj turret owner-handle) (process->handle *target*)) + (turret-control-method-17 (-> obj turret) obj) + (set! (-> obj turret owner-handle) (the-as handle #f)) + ) + ) + ((method-of-type vehicle vehicle-method-94) obj) + 0 + (none) + ) + ) + ) + +(defstate active (vehicle-guard) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior vehicle-guard) + vehicle-event-handler + ) + :enter (behavior () + (let ((v1-0 (-> self controller branch))) + (when (or (not v1-0) (zero? v1-0)) + (cond + ((logtest? (-> self draw status) (draw-control-status on-screen)) + (set! (-> self hit-points) 0.0) + (vehicle-method-76 self 2 (the-as uint 3000)) + (go-virtual crash) + ) + (else + (vehicle-method-113 self) + ) + ) + ) + ) + (let ((t9-3 (-> (method-of-type vehicle active) enter))) + (if t9-3 + (t9-3) + ) + ) + (none) + ) + :trans (the-as (function none :behavior vehicle-guard) #f) + :code (the-as (function none :behavior vehicle-guard) sleep-code) + :post (behavior () + (cond + ((logtest? (rigid-body-object-flag alert) (-> self flags)) + (vehicle-guard-method-150 self) + (when (logtest? (rigid-body-object-flag in-pursuit) (-> self flags)) + (logior! (-> self flags) (rigid-body-object-flag persistent)) + (go-virtual hostile) + ) + (speech-control-method-12 *speech-control* self (speech-type speech-type-2)) + (if (or (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 8)) + (let ((f0-0 409600.0)) + (< (* f0-0 f0-0) (-> self player-dist2)) + ) + ) + (logclear! (-> self flags) (rigid-body-object-flag persistent alert)) + ) + ) + (else + (speech-control-method-12 *speech-control* self (speech-type speech-type-0)) + ) + ) + (check-player-get-on self) + (vehicle-method-122 self) + (none) + ) + ) + +(defstate hostile (vehicle-guard) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior vehicle-guard) + vehicle-event-handler + ) + :enter (behavior () + (set! (-> self ai-hook) (method-of-object self vehicle-method-93)) + (none) + ) + :trans (the-as (function none :behavior vehicle-guard) #f) + :code (the-as (function none :behavior vehicle-guard) sleep-code) + :post (behavior () + (vehicle-guard-method-150 self) + (when (logtest? (rigid-body-object-flag in-pursuit) (-> self flags)) + (if (or (>= (- (-> self clock frame-counter) (-> self target-in-sight-time)) (seconds 8)) + (and (>= (-> self controller traffic alert-state guards-in-sight-of-target) 2) + (>= (- (-> self clock frame-counter) (-> self target-in-sight-time)) (seconds 0.5)) + ) + ) + (vehicle-method-109 self) + ) + ) + (let ((gp-0 (new 'stack-no-clear 'vehicle-guard-target-data))) + (vehicle-guard-method-151 self gp-0) + (let ((a1-1 (-> gp-0 target))) + (cond + (a1-1 + (cond + ((logtest? (rigid-body-object-flag target-in-sight) (-> self flags)) + (vehicle-guard-method-153 self a1-1) + (if (vehicle-guard-method-157 self gp-0) + (go-virtual stop-and-shoot) + ) + (speech-control-method-15 *speech-control* self) + ) + (else + ) + ) + (vehicle-guard-method-152 self gp-0) + ) + (else + (vehicle-method-109 self) + ) + ) + ) + ) + (if (logtest? (rigid-body-object-flag rammed-target) (-> self flags)) + (go-virtual slow-pursuit) + ) + (vehicle-guard-method-154 self) + (none) + ) + ) + +(defstate stop-and-shoot (vehicle-guard) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior vehicle-guard) + vehicle-event-handler + ) + :enter (behavior () + (set! (-> self ai-hook) (method-of-object self vehicle-guard-method-156)) + (none) + ) + :trans (the-as (function none :behavior vehicle-guard) #f) + :code (the-as (function none :behavior vehicle-guard) sleep-code) + :post (behavior () + (vehicle-guard-method-150 self) + (let ((s5-0 (new 'stack-no-clear 'vehicle-guard-target-data))) + (vehicle-guard-method-151 self s5-0) + (let ((gp-0 (-> s5-0 target))) + (when gp-0 + (if (not (vehicle-guard-method-157 self s5-0)) + (go-virtual hostile) + ) + (vehicle-guard-method-153 self gp-0) + ) + ) + ) + (vehicle-guard-method-154 self) + (none) + ) + ) + +(defstate slow-pursuit (vehicle-guard) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior vehicle-guard) + vehicle-event-handler + ) + :enter (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (set! (-> self ai-hook) (method-of-object self vehicle-guard-method-156)) + (none) + ) + :trans (the-as (function none :behavior vehicle-guard) #f) + :code (the-as (function none :behavior vehicle-guard) sleep-code) + :post (behavior () + (vehicle-guard-method-150 self) + (let ((s5-0 (new 'stack-no-clear 'vehicle-guard-target-data))) + (vehicle-guard-method-151 self s5-0) + (let ((gp-0 (-> s5-0 target))) + (when gp-0 + (when (or (< (-> s5-0 attack-range) (-> s5-0 dist)) + (not (logtest? (rigid-body-object-flag target-in-sight) (-> self flags))) + (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 2)) + ) + (set! (-> self flags) + (the-as rigid-body-object-flag (logclear (-> self flags) (rigid-body-object-flag rammed-target))) + ) + (go-virtual hostile) + ) + (vehicle-guard-method-153 self gp-0) + ) + ) + ) + (vehicle-guard-method-154 self) + (none) + ) + ) + +(defstate waiting-ambush (vehicle-guard) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior vehicle-guard) + vehicle-event-handler + ) + :enter (behavior () + (set! (-> self flags) (logior (rigid-body-object-flag riding ignition ai-driving) (-> self flags))) + (set! (-> self ai-hook) (method-of-object self vehicle-guard-method-156)) + (none) + ) + :trans (the-as (function none :behavior vehicle-guard) #f) + :code (the-as (function none :behavior vehicle-guard) sleep-code) + :post (behavior () + (vehicle-guard-method-150 self) + (let ((gp-0 (new 'stack-no-clear 'vehicle-guard-target-data))) + (vehicle-guard-method-151 self gp-0) + (let ((s5-0 (-> gp-0 target))) + (when s5-0 + (when (logtest? (rigid-body-object-flag target-in-sight) (-> self flags)) + (vehicle-guard-method-153 self s5-0) + (vehicle-method-111 self 2 s5-0) + (if (< (-> gp-0 dist) 122880.0) + (go-virtual hostile) + ) + ) + ) + ) + ) + (set! (-> self flags) + (the-as rigid-body-object-flag (logior (rigid-body-object-flag in-pursuit) (-> self flags))) + ) + (vehicle-guard-method-154 self) + (none) + ) + ) diff --git a/goal_src/jak2/levels/city/common/vehicle-physics.gc b/goal_src/jak2/levels/city/common/vehicle-physics.gc index 14d00a6437..6a56c7ac3f 100644 --- a/goal_src/jak2/levels/city/common/vehicle-physics.gc +++ b/goal_src/jak2/levels/city/common/vehicle-physics.gc @@ -6,3 +6,814 @@ ;; dgos: CWI ;; DECOMP BEGINS + +(defmethod vehicle-method-99 vehicle ((obj vehicle) (arg0 float)) + (let ((s4-0 (new 'stack-no-clear 'vehicle-grab-rail-info)) + (s3-0 (-> obj root-override-2 root-prim)) + (s2-0 1) + ) + (when (< (-> obj rbody state position y) (+ (-> obj water-height) (-> s3-0 local-sphere w))) + (when (= (-> s3-0 prim-core prim-type) (prim-type group)) + (let ((v1-5 (the-as collide-shape-prim-group s3-0))) + (set! s3-0 (-> v1-5 child 0)) + (set! s2-0 (the-as int (-> v1-5 num-children))) + ) + ) + (countdown (s1-0 s2-0) + (when (= (-> s3-0 prim-core prim-type) (prim-type sphere)) + (let* ((s0-0 (-> s3-0 prim-core)) + (f0-2 (- (-> s0-0 world-sphere y) (-> s0-0 world-sphere w))) + ) + (when (< f0-2 (-> obj water-height)) + (set! (-> s4-0 local-pos 0 quad) (-> s0-0 world-sphere quad)) + (let ((f1-5 (fmin (-> obj water-height) (+ (-> s0-0 world-sphere y) (-> s0-0 world-sphere w))))) + 0.0 + (let* ((f2-5 (fmax -1.0 (fmin 1.0 (/ (- (-> obj water-height) (-> s0-0 world-sphere y)) (-> s0-0 world-sphere w))))) + (f30-0 (+ 0.5 (* -0.25 f2-5 f2-5 f2-5) (* 0.75 f2-5))) + ) + (set! (-> s4-0 local-pos 0 y) (* 0.5 (+ f0-2 f1-5))) + (let ((v1-18 (-> obj rbody)) + (a1-1 (-> s4-0 local-pos)) + (a2-0 (-> s4-0 normal)) + ) + (rigid-body-method-22 (-> v1-18 state) (the-as vector a1-1) a2-0) + ) + (let* ((f0-7 (* 0.062831804 (fmin 200.0 (vector-length (-> s4-0 normal))) f30-0)) + (f1-8 (-> s0-0 world-sphere w)) + (f0-8 (* f0-7 (* f1-8 f1-8))) + (f1-11 4096.0) + (f1-13 (* f1-11 f1-11)) + (f0-10 (fmin (* f0-8 (/ 1.0 f1-13)) (/ (-> obj info-override info mass) (* 2.0 arg0 (the float s2-0))))) + ) + (vector-float*! (-> s4-0 local-pos 1) (-> s4-0 normal) (* -1.0 f0-10)) + ) + (let ((v1-34 (-> obj rbody)) + (a1-3 (-> s4-0 local-pos)) + (a2-1 (-> s4-0 local-pos 1)) + ) + (rigid-body-method-18 (-> v1-34 state) (the-as vector a1-3) a2-1) + ) + (vector-reset! (-> s4-0 local-pos 1)) + (let* ((f0-12 549018.94) + (f1-19 4096.0) + (f2-13 4096.0) + (f1-20 (* f1-19 (* f2-13 f2-13))) + (f0-16 (* f0-12 (/ 1.0 f1-20) (-> obj info-override buoyancy-factor) f30-0 (-> s0-0 world-sphere w))) + (f1-25 (-> s0-0 world-sphere w)) + ) + (set! (-> s4-0 local-pos 1 y) (* f0-16 (* f1-25 f1-25))) + ) + ) + ) + (let ((v1-46 (-> obj rbody)) + (a1-4 (-> s4-0 local-pos)) + (a2-2 (-> s4-0 local-pos 1)) + ) + (rigid-body-method-18 (-> v1-46 state) (the-as vector a1-4) a2-2) + ) + ) + ) + ) + (&+! s3-0 80) + ) + ) + ) + 0 + (none) + ) + +(deftype vehicle-probe-work (structure) + ((local-pos vector :inline :offset-assert 0) + (local-normal vector :inline :offset-assert 16) + (world-pos vector :inline :offset-assert 32) + (world-normal vector :inline :offset-assert 48) + (probe-pos vector :inline :offset-assert 64) + (ground-pos vector :inline :offset-assert 80) + (ground-normal vector :inline :offset-assert 96) + (velocity vector :inline :offset-assert 112) + (tire-force vector :inline :offset-assert 128) + (wheel-axis vector :inline :offset-assert 144) + ) + :method-count-assert 9 + :size-assert #xa0 + :flag-assert #x9000000a0 + ) + + +(deftype vehicle-physics-work (structure) + ((mat matrix :inline :offset-assert 0) + (force vector :inline :offset-assert 64) + (velocity vector :inline :offset-assert 80) + (world-pos vector :inline :offset-assert 96) + (world-normal vector :inline :offset-assert 112) + (local-pos vector :inline :offset-assert 128) + (steering-axis vector :inline :offset-assert 144) + (lift-dir vector :inline :offset-assert 160) + (normal vector :inline :offset-assert 176) + (tmp vector :inline :offset-assert 192) + (p-body vector :inline :offset-assert 208) + (axis vector :inline :offset-assert 224) + (dir vector :inline :offset-assert 240) + (ground-normal vector :inline :offset-assert 256) + (impulse float :offset-assert 272) + (vel-dot-norm float :offset-assert 276) + (friction-coef float :offset-assert 280) + (speed-factor float :offset-assert 284) + (probe-work-array vehicle-probe-work 2 :inline :offset-assert 288) + ) + :method-count-assert 9 + :size-assert #x260 + :flag-assert #x900000260 + ) + + +(defmethod vehicle-method-100 vehicle ((obj vehicle) (arg0 float) (arg1 vehicle-physics-work)) + (local-vars (v1-81 float) (v1-184 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + (vf7 :class vf) + ) + (init-vf0-vector) + (+! (-> obj physics-counter) 1) + (let ((s3-0 (-> obj rbody))) + (mem-copy! (the-as pointer (-> arg1 mat)) (the-as pointer (-> s3-0 state matrix)) 64) + (let* ((f28-0 (* -1.0 (-> obj controls steering) (-> obj info-override tire-steering-angle))) + (f30-0 (cos f28-0)) + (f0-2 (sin f28-0)) + ) + (set! (-> arg1 steering-axis x) f30-0) + (set! (-> arg1 steering-axis y) 0.0) + (set! (-> arg1 steering-axis z) f0-2) + ) + (vector-rotate*! (-> arg1 steering-axis) (-> arg1 steering-axis) (-> arg1 mat)) + (logior! (-> obj flags) (rigid-body-object-flag in-air)) + (logclear! (-> obj flags) (rigid-body-object-flag on-ground on-flight-level)) + (vector-reset! (-> arg1 ground-normal)) + (set! (-> arg1 ground-normal y) 1.0) + (let ((f30-1 (-> obj info-override ground-probe-distance))) + (let ((s2-0 (new 'stack-no-clear 'collide-query))) + (vector-reset! (-> arg1 lift-dir)) + (set! (-> arg1 lift-dir y) -1.0) + (set! (-> arg1 speed-factor) + (fmax 0.0 (fmin 0.9 (* 0.000008138021 (+ -40960.0 (vector-length (-> s3-0 state lin-velocity)))))) + ) + (when (logtest? (-> obj info-override flags) 1) + (vector-float*! (-> arg1 tmp) (-> arg1 mat vector 1) -1.0) + (let ((t9-4 vector-lerp!) + (a0-7 (-> arg1 lift-dir)) + (a1-4 (-> arg1 lift-dir)) + (a2-3 (-> arg1 tmp)) + (f0-8 (-> arg1 speed-factor)) + ) + (t9-4 a0-7 a1-4 a2-3 (* f0-8 f0-8)) + ) + (vector-normalize! (-> arg1 lift-dir) 1.0) + ) + (vector-float*! (-> s2-0 move-dist) (-> arg1 lift-dir) (the-as float f30-1)) + (let ((v1-28 s2-0)) + (set! (-> v1-28 radius) 409.6) + (set! (-> v1-28 collide-with) (collide-spec + backgnd + obstacle + hit-by-player-list + hit-by-others-list + water + collectable + blocking-plane + pusher + vehicle-mesh-probeable + ) + ) + (set! (-> v1-28 ignore-process0) #f) + (set! (-> v1-28 ignore-process1) #f) + (set! (-> v1-28 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nopilot #x1)) + (set! (-> v1-28 action-mask) (collide-action solid)) + ) + (dotimes (s1-0 (-> obj info-override lift-thruster-count)) + (let ((v1-31 (-> obj info-override lift-thruster-array s1-0)) + (s0-0 (-> arg1 probe-work-array s1-0)) + ) + (vector-reset! (-> s0-0 tire-force)) + (set! (-> s0-0 local-pos quad) (-> v1-31 local-pos quad)) + (set! (-> s0-0 local-normal quad) (-> v1-31 normal quad)) + (vector-matrix*! (-> s0-0 world-pos) (-> s0-0 local-pos) (-> arg1 mat)) + (let ((a1-9 (-> s0-0 probe-pos))) + (let ((v1-34 (-> s0-0 world-pos))) + (let ((a0-22 (-> arg1 mat vector 1))) + (let ((a2-6 (-> obj info-override ground-probe-offset))) + (.mov vf7 a2-6) + ) + (.lvf vf5 (&-> a0-22 quad)) + ) + (.lvf vf4 (&-> v1-34 quad)) + ) + (.add.x.vf vf6 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf5 vf7 :mask #b111) + (.add.mul.w.vf vf6 vf4 vf0 acc :mask #b111) + (.svf (&-> a1-9 quad) vf6) + ) + (let ((v1-35 s3-0) + (a1-10 (-> s0-0 probe-pos)) + (a2-7 (-> s0-0 velocity)) + ) + (rigid-body-method-22 (-> v1-35 state) a1-10 a2-7) + ) + (set! (-> s0-0 wheel-axis quad) (-> (the-as vector (if (< 0.0 (-> s0-0 local-pos z)) + (-> arg1 steering-axis) + (the-as vector (-> arg1 mat)) + ) + ) + quad + ) + ) + (set! (-> s0-0 ground-pos quad) (-> s0-0 probe-pos quad)) + (set! (-> s0-0 ground-pos y) 0.0) + (vector-reset! (-> s0-0 ground-normal)) + (when (logtest? (-> obj flags) (rigid-body-object-flag enable-collision)) + (set! (-> s2-0 start-pos quad) (-> s0-0 probe-pos quad)) + (let ((f0-15 (probe-using-line-sphere *collide-cache* s2-0))) + (cond + ((and (>= f0-15 0.0) (!= (-> s2-0 best-other-tri pat mode) 1)) + (logclear! (-> obj flags) (rigid-body-object-flag in-air)) + (logior! (-> obj flags) (rigid-body-object-flag on-ground)) + (set! (-> s0-0 ground-pos y) (- (-> s0-0 probe-pos y) (* f0-15 f30-1))) + (set! (-> s0-0 ground-normal quad) (-> s2-0 best-other-tri normal quad)) + (set! (-> arg1 ground-normal quad) (-> s0-0 ground-normal quad)) + ) + (else + (set! (-> s0-0 ground-pos y) (+ -81920.0 (-> s3-0 state position y))) + ) + ) + ) + 0 + ) + ) + ) + ) + (set! (-> obj lift-thrust 0) 0.0) + (set! (-> obj lift-thrust 1) 0.0) + (set! (-> obj roll-thrust 0) 0.0) + (set! (-> obj roll-thrust 1) 0.0) + (set! (-> obj roll-thrust 0) 0.0) + (set! (-> obj roll-thrust 1) 0.0) + (when (>= 1 (-> obj force-level)) + (dotimes (s2-1 (-> obj info-override lift-thruster-count)) + (let ((s1-1 (-> arg1 probe-work-array s2-1))) + (set! (-> arg1 world-pos quad) (-> s1-1 world-pos quad)) + (set! (-> arg1 velocity quad) (-> s1-1 velocity quad)) + (let ((f28-1 (-> s1-1 probe-pos y))) + (when (> (-> obj flight-level-index) 0) + (set! f28-1 (- f28-1 (+ 6144.0 (-> obj flight-level)))) + (when (>= 0.0 f28-1) + (logclear! (-> obj flags) (rigid-body-object-flag in-air)) + (logior! (-> obj flags) (rigid-body-object-flag on-flight-level)) + (.lvf vf1 (&-> (-> s1-1 ground-normal) quad)) + (.add.w.vf vf2 vf0 vf0 :mask #b1) + (.mul.vf vf1 vf1 vf1) + (.mul.x.vf acc vf2 vf1 :mask #b1) + (.add.mul.y.vf acc vf2 vf1 acc :mask #b1) + (.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1) + (.mov v1-81 vf1) + (if (= v1-81 0.0) + (set! (-> s1-1 ground-normal y) 1.0) + ) + ) + ) + (when (or (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags)) + (and (> (-> obj flight-level-index) 0) (< f28-1 0.0)) + ) + (if (zero? (-> obj flight-level-index)) + (set! f28-1 40960.0) + ) + (let* ((f0-37 (* -1.0 + (-> obj force-scale) + (-> obj info-override inv-lift-thruster-count) + (-> obj info-override info mass) + (-> obj info-override extra gravity) + (+ 1.0 (* 2.0 (the float (-> obj flight-level-index)))) + ) + ) + (f1-17 -1.0) + (f2-4 1.0) + (f3-4 16384.0) + (f3-7 (* f28-1 (/ 1.0 f3-4))) + (f4-2 0.5) + (f5-0 81920.0) + (f0-38 (* f0-37 (fmax f1-17 (fmin f2-4 (+ f3-7 (* f4-2 (/ 1.0 f5-0) (-> arg1 velocity y))))))) + ) + (let ((f1-20 (fmax 0.0 f0-38))) + (+! (-> obj lift-thrust s2-1) f1-20) + (when (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags)) + (+! (-> obj roll-thrust 0) (* 0.05 f1-20)) + (+! (-> obj roll-thrust 1) (* 0.05 f1-20)) + ) + ) + (vector-reset! (-> arg1 force)) + (set! (-> arg1 force y) f0-38) + ) + (let ((v1-122 s3-0) + (a1-12 (-> arg1 world-pos)) + (a2-8 (-> arg1 force)) + ) + (rigid-body-method-18 (-> v1-122 state) a1-12 a2-8) + ) + (vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force)) + ) + (let ((f0-40 (+ 4096.0 f28-1))) + (when (or (and (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags)) + (< 0.0 f0-40) + (< 0.0 (-> arg1 velocity y)) + ) + (and (> (-> obj flight-level-index) 0) (< f0-40 0.0) (< (-> arg1 velocity y) 0.0)) + ) + (vector-reset! (-> arg1 force)) + (let ((f0-43 (* -0.25 (-> obj info-override inv-lift-thruster-count))) + (f1-28 arg0) + ) + (set! (-> arg1 force y) (* f0-43 (/ 1.0 f1-28) (-> obj info-override info mass) (-> arg1 velocity y))) + ) + (let ((v1-140 s3-0) + (a1-16 (-> arg1 world-pos)) + (a2-9 (-> arg1 force)) + ) + (rigid-body-method-18 (-> v1-140 state) a1-16 a2-9) + ) + (vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force)) + ) + ) + ) + (let* ((f1-36 (fmax 4096.0 (fmin (- (-> s1-1 probe-pos y) (-> s1-1 ground-pos y)) f30-1))) + (f28-2 (- 1.0 (/ (+ -4096.0 f1-36) (+ -4096.0 f30-1)))) + ) + (if (>= (-> obj info-override cos-ground-effect-angle) + (vector-dot (-> s1-1 ground-normal) (-> arg1 mat vector 1)) + ) + (set! f28-2 0.0) + ) + (set! (-> arg1 tmp y) 0.0) + (set! (-> arg1 tmp x) (-> arg1 velocity z)) + (set! (-> arg1 tmp z) (- (-> arg1 velocity x))) + (vector-normalize! (-> arg1 tmp) 1.0) + (vector+float*! + (-> arg1 normal) + (-> s1-1 ground-normal) + (-> arg1 tmp) + (- (vector-dot (-> s1-1 ground-normal) (-> arg1 tmp))) + ) + (let ((v1-155 (-> arg1 force)) + (a0-55 (-> arg1 normal)) + (f0-58 (* 2.0 f28-2)) + (f1-41 arg0) + ) + (vector-float*! v1-155 a0-55 (* f0-58 + (/ 1.0 f1-41) + (-> obj info-override inv-lift-thruster-count) + (-> obj info-override info mass) + (fmax 0.0 (- (vector-dot (-> arg1 velocity) (-> arg1 normal)))) + ) + ) + ) + (let ((v1-157 s3-0) + (a1-28 (-> arg1 world-pos)) + (a2-13 (-> arg1 force)) + ) + (rigid-body-method-18 (-> v1-157 state) a1-28 a2-13) + ) + (vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force)) + (let ((f0-72 (* 8.0 + (-> obj info-override info mass) + (-> obj info-override extra gravity) + (-> obj info-override inv-lift-thruster-count) + (+ (* (-> obj info-override spring-lift-factor) f28-2) + (* 0.75 (-> obj jump-thrust) (-> obj info-override jump-thrust-factor)) + ) + (- (+ 1.0 (* 2.0 (rand-vu) (-> obj power-fluctuation-factor))) (-> obj power-fluctuation-factor)) + ) + ) + ) + (+! (-> obj lift-thrust s2-1) f0-72) + (vector-float*! (-> arg1 force) (-> arg1 lift-dir) (* -1.0 f0-72)) + ) + ) + (let ((v1-176 s3-0) + (a1-32 (-> arg1 world-pos)) + (a2-14 (-> arg1 force)) + ) + (rigid-body-method-18 (-> v1-176 state) a1-32 a2-14) + ) + (vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force)) + (when (and (< 0.0 (-> obj info-override tire-friction-factor)) (let ((f0-75 0.0)) + (.lvf vf1 (&-> (-> s1-1 ground-normal) quad)) + (.add.w.vf vf2 vf0 vf0 :mask #b1) + (.mul.vf vf1 vf1 vf1) + (.mul.x.vf acc vf2 vf1 :mask #b1) + (.add.mul.y.vf acc vf2 vf1 acc :mask #b1) + (.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1) + (.mov v1-184 vf1) + (< f0-75 v1-184) + ) + ) + (vector+float*! + (-> arg1 normal) + (-> s1-1 wheel-axis) + (-> s1-1 ground-normal) + (- (vector-dot (-> s1-1 wheel-axis) (-> s1-1 ground-normal))) + ) + (vector-normalize! (-> arg1 normal) 1.0) + (set! (-> arg1 world-pos quad) (-> s3-0 state position quad)) + (set! (-> arg1 velocity quad) (-> s3-0 state lin-velocity quad)) + (vector-! (-> arg1 p-body) (-> arg1 world-pos) (-> s3-0 state position)) + (vector-cross! (-> arg1 tmp) (-> arg1 p-body) (-> arg1 normal)) + (vector-rotate*! (-> arg1 tmp) (-> arg1 tmp) (-> s3-0 state inv-i-world)) + (vector-cross! (-> arg1 tmp) (-> arg1 tmp) (-> arg1 p-body)) + (set! (-> arg1 vel-dot-norm) (vector-dot (-> arg1 velocity) (-> arg1 normal))) + (let ((f0-82 (fabs (-> arg1 vel-dot-norm)))) + (set! (-> arg1 friction-coef) + (smooth-interp + (-> obj info-override tire-static-friction) + (-> obj info-override tire-dynamic-friction) + f0-82 + (-> obj info-override tire-static-friction-speed) + (-> obj info-override tire-dynamic-friction-speed) + ) + ) + ) + (set! (-> arg1 friction-coef) + (* (-> arg1 friction-coef) (+ 1.0 (* -0.75 (fmax 0.0 (fmin 1.0 (-> obj engine-thrust)))))) + ) + (let ((f0-90 + (* (-> arg1 friction-coef) + (-> obj info-override tire-friction-factor) + (fmax 0.0 (vector-dot (-> s1-1 ground-normal) (-> s1-1 tire-force))) + ) + ) + ) + (set! (-> arg1 impulse) + (/ (* -1.0 (-> arg1 vel-dot-norm)) + (* arg0 (+ (-> s3-0 state info inv-mass) (vector-dot (-> arg1 normal) (-> arg1 tmp)))) + ) + ) + (set! (-> arg1 impulse) (fmax (fmin (-> arg1 impulse) f0-90) (- f0-90))) + ) + (vector-float*! (-> arg1 force) (-> arg1 normal) (-> arg1 impulse)) + (let ((v1-213 s3-0) + (a1-45 (-> arg1 world-pos)) + (a2-19 (-> arg1 force)) + ) + (rigid-body-method-18 (-> v1-213 state) a1-45 a2-19) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + ) + +(defmethod rigid-body-object-method-29 vehicle ((obj vehicle) (arg0 float)) + (local-vars (sv-624 float) (sv-720 float) (sv-724 float)) + (rlet ((vf0 :class vf)) + (init-vf0-vector) + (let ((gp-0 (new 'stack-no-clear 'inline-array 'matrix 9)) + (s5-0 (-> obj rbody)) + (s4-0 (-> obj info-override)) + ) + (mem-copy! (the-as pointer (-> gp-0 0)) (the-as pointer (-> s5-0 state matrix)) 64) + (when (not (logtest? (-> obj flags) (rigid-body-object-flag dead))) + (vehicle-method-100 obj arg0 (the-as vehicle-physics-work gp-0)) + (when (>= 1 (-> obj force-level)) + (set! sv-624 (* (-> s4-0 info mass) (-> s4-0 extra gravity))) + (when (!= (-> s4-0 pitch-control-factor) 0.0) + (set! (-> gp-0 3 vector 2 quad) (-> gp-0 0 quad 0)) + (set! (-> gp-0 3 vector 2 y) 0.0) + (let ((f30-0 (vector-dot (-> gp-0 3 vector 2) (-> s5-0 state ang-velocity)))) + (dotimes (s1-0 (-> s4-0 lift-thruster-count)) + (let ((s0-0 (-> s4-0 lift-thruster-array s1-0))) + (vector-matrix*! (-> gp-0 1 vector 2) (-> s0-0 local-pos) (-> gp-0 0)) + (vector-rotate*! (-> gp-0 1 trans) (-> s0-0 normal) (-> gp-0 0)) + (let* ((f0-5 -1.0) + (f1-2 1.0) + (f2-0 0.2) + (a0-9 (the-as number (-> s0-0 local-pos z))) + (a1-5 #xffffffff80000000) + (v1-16 #x3f800000) + (f0-7 + (* (fmax + f0-5 + (fmin + f1-2 + (* f2-0 (the-as float (logior (logand (the-as uint a0-9) a1-5) v1-16)) (-> s4-0 pitch-control-factor) f30-0) + ) + ) + sv-624 + ) + ) + ) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) (* -1.0 f0-7)) + ) + ) + (let ((v1-21 s5-0) + (a1-7 (-> gp-0 1 vector 2)) + (a2-4 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-21 state) a1-7 (the-as vector a2-4)) + ) + ) + ) + ) + (let ((s1-1 (new 'stack-no-clear 'inline-array 'vector 5))) + (let ((f0-12 (* -1.0 (-> obj controls steering) (-> gp-0 4 vector 1 w) (-> s4-0 roll-angle)))) + (if (logtest? (-> obj flags) (rigid-body-object-flag in-air)) + (set! f0-12 0.0) + ) + (quaternion-vector-angle! (the-as quaternion (-> s1-1 0)) (-> gp-0 0 vector 2) f0-12) + ) + (quaternion->matrix (the-as matrix (-> s1-1 1)) (the-as quaternion (-> s1-1 0))) + (set! (-> gp-0 3 trans quad) (-> s1-1 2 quad)) + ) + (let ((f0-14 (vector-dot (the-as vector (-> gp-0 0)) (-> gp-0 3 trans)))) + (set! sv-720 (* (-> s4-0 info mass) (-> s4-0 extra gravity))) + (let ((f1-11 f0-14)) + (set! sv-724 + (+ (* f1-11 f1-11 f0-14) (* 0.075 (vector-dot (-> gp-0 0 vector 2) (-> s5-0 state ang-velocity)))) + ) + ) + ) + (dotimes (s1-2 (-> s4-0 roll-thruster-count)) + (let* ((s0-1 (-> s4-0 roll-thruster-array s1-2)) + (f0-17 0.0) + (f1-16 1.0) + (f2-7 -1.0) + (a0-19 (the-as number (-> s0-1 local-pos x))) + (a1-10 #xffffffff80000000) + (v1-44 #x3f800000) + (f30-1 + (fmax f0-17 (fmin f1-16 (* f2-7 (the-as float (logior (logand (the-as uint a0-19) a1-10) v1-44)) sv-724))) + ) + ) + (when (< 0.0 f30-1) + (let ((f30-2 + (* (+ f30-1 (+ (- (-> obj power-fluctuation-factor)) (* 2.0 (rand-vu) (-> obj power-fluctuation-factor)))) + (-> s4-0 roll-control-factor) + sv-720 + ) + ) + ) + (+! (-> obj roll-thrust s1-2) (fmax 0.0 f30-2)) + (vector-matrix*! (-> gp-0 1 vector 2) (-> s0-1 local-pos) (-> gp-0 0)) + (vector-rotate*! (-> gp-0 1 trans) (-> s0-1 normal) (-> gp-0 0)) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) (* -1.0 f30-2)) + ) + (let ((v1-56 s5-0) + (a1-14 (-> gp-0 1 vector 2)) + (a2-8 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-56 state) a1-14 (the-as vector a2-8)) + ) + 0 + ) + ) + ) + ) + (when #t + (let* ((f0-30 (-> obj controls steering)) + (f1-23 (-> s4-0 steering-thruster-half-gain-speed)) + (f2-10 (-> s4-0 steering-thruster-half-gain-speed)) + (v1-65 (-> s5-0 state lin-velocity)) + (f2-12 (/ f1-23 (+ f2-10 (sqrtf (+ (* (-> v1-65 x) (-> v1-65 x)) (* (-> v1-65 z) (-> v1-65 z))))))) + ) + (if (< (-> obj controls throttle) 0.0) + (set! f0-30 (* -1.0 f0-30)) + ) + (set! (-> gp-0 3 vector 2 quad) (-> gp-0 0 vector 1 quad)) + (let ((f30-3 (* 8192.0 + (-> s4-0 info mass) + (-> obj power-level) + (- (* f0-30 f2-12 (-> s4-0 steering-thruster-max-gain)) + (vector-dot (-> gp-0 3 vector 2) (-> s5-0 state ang-velocity)) + ) + (-> s4-0 steering-thruster-factor) + ) + ) + ) + (if (logtest? (-> obj flags) (rigid-body-object-flag in-air)) + (set! f30-3 (* f30-3 (-> s4-0 air-steering-factor))) + ) + (let ((s1-3 (the-as object (-> s4-0 steering-thruster-array)))) + (countdown (s0-2 (-> s4-0 steering-thruster-count)) + (vector-matrix*! (-> gp-0 1 vector 2) (-> (the-as vehicle-control-point s1-3) local-pos) (-> gp-0 0)) + (vector-rotate*! + (-> gp-0 1 trans) + (-> (the-as (inline-array vehicle-control-point) s1-3) 0 normal) + (-> gp-0 0) + ) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) f30-3) + (let ((v1-80 s5-0) + (a1-17 (-> gp-0 1 vector 2)) + (a2-11 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-80 state) a1-17 (the-as vector a2-11)) + ) + (set! s1-3 (-> (the-as (inline-array vehicle-control-point) s1-3) 1)) + ) + ) + ) + ) + ) + (seek! (-> obj jump-thrust) 0.0 (* 6.0 arg0)) + (when (logtest? (rigid-body-object-flag ignition) (-> obj flags)) + (vector-matrix*! (-> gp-0 1 vector 2) (-> s4-0 engine-thrust-local-pos) (-> gp-0 0)) + (set! (-> gp-0 3 trans quad) (-> gp-0 0 vector 2 quad)) + (let ((f0-45 (* (-> obj engine-thrust) + (-> s4-0 max-engine-thrust) + (-> s4-0 info mass) + (-> obj power-level) + (-> obj force-scale) + ) + ) + ) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 3 trans) f0-45) + ) + (when #t + (let ((v1-94 s5-0) + (a1-20 (-> gp-0 1 vector 2)) + (a2-14 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-94 state) a1-20 (the-as vector a2-14)) + ) + ) + ) + (let ((f30-4 (-> obj controls brake))) + (when (< 0.0 f30-4) + (vector-matrix*! (-> gp-0 1 vector 2) (-> s4-0 brake-local-pos) (-> gp-0 0)) + (let ((v1-98 s5-0) + (a1-22 (-> gp-0 1 vector 2)) + (a2-16 (-> gp-0 1 vector 1)) + ) + (rigid-body-method-22 (-> v1-98 state) a1-22 a2-16) + ) + (let* ((v1-101 (-> gp-0 1 vector 1)) + (f1-38 (sqrtf (+ (* (-> v1-101 x) (-> v1-101 x)) (* (-> v1-101 z) (-> v1-101 z))))) + (f0-53 (* -98304.0 (-> s4-0 brake-factor) (-> s4-0 info mass))) + (f1-39 (fmax 16384.0 f1-38)) + (f0-55 (* f0-53 (/ 1.0 f1-39) f30-4)) + ) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 vector 1) f0-55) + ) + (let ((v1-109 s5-0) + (a1-23 (-> gp-0 1 vector 2)) + (a2-17 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-109 state) a1-23 (the-as vector a2-17)) + ) + ) + ) + ) + (let ((s1-4 (new 'stack-no-clear 'inline-array 'vehicle-control-point 2))) + (quad-copy! + (the-as pointer s1-4) + (the-as pointer (-> s4-0 stabilizer-array)) + (* (-> s4-0 stabilizer-count) 2) + ) + (let ((s0-3 (-> s1-4 3 normal))) + (let ((f0-57 (* -3640.889 (-> obj controls lean-z)))) + (vector-rotate-around-x! s0-3 s0-3 f0-57) + ) + (if (logtest? (-> obj flags) (rigid-body-object-flag in-air)) + (set! (-> s0-3 w) (* 10.0 (-> s0-3 w))) + ) + (if (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags)) + (set! (-> s0-3 w) 0.0) + ) + ) + (let ((f30-5 (* -0.0000006103516 (-> obj force-scale) (-> s4-0 info mass) (-> s4-0 drag-force-factor)))) + (if (logtest? (-> obj flags) (rigid-body-object-flag in-air)) + (set! f30-5 (* f30-5 (-> s4-0 air-drag-factor))) + ) + (let ((s1-5 (-> s1-4 0))) + (countdown (s0-4 (-> s4-0 stabilizer-count)) + (vector-matrix*! (-> gp-0 1 vector 2) (-> s1-5 local-pos) (-> gp-0 0)) + (vector-rotate*! (-> gp-0 1 trans) (-> s1-5 normal) (-> gp-0 0)) + (let ((v1-128 s5-0) + (a1-28 (-> gp-0 1 vector 2)) + (a2-22 (-> gp-0 1 vector 1)) + ) + (rigid-body-method-22 (-> v1-128 state) a1-28 a2-22) + ) + (let ((f0-70 + (* -0.06125 + (vector-dot (-> gp-0 1 trans) (-> gp-0 1 vector 1)) + (-> s1-5 normal w) + (-> obj force-scale) + (-> s4-0 info mass) + (-> s4-0 airfoil-factor) + ) + ) + ) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) f0-70) + ) + (when (<= (-> obj force-level) 0) + (let ((v1-138 s5-0) + (a1-29 (-> gp-0 1 vector 2)) + (a2-23 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-138 state) a1-29 (the-as vector a2-23)) + ) + ) + (vector-float*! + (the-as vector (-> gp-0 1)) + (-> gp-0 1 vector 1) + (* f30-5 + (-> s1-5 normal w) + (+ (* 0.15 (vector-length (-> gp-0 1 vector 1))) (fabs (vector-dot (-> gp-0 1 trans) (-> gp-0 1 vector 1)))) + ) + ) + (when (<= (-> obj force-level) 0) + (let ((v1-145 s5-0) + (a1-35 (-> gp-0 1 vector 2)) + (a2-25 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-145 state) a1-35 (the-as vector a2-25)) + ) + ) + (&+! s1-5 32) + ) + ) + ) + ) + (.svf (&-> (-> gp-0 1) quad 0) vf0) + (set! (-> gp-0 1 vector 0 y) (* -1.0 + (-> s4-0 extra gravity) + (if (< 1 (-> obj force-level)) + 2.0 + 1.0 + ) + (-> s4-0 info mass) + ) + ) + (let ((v1-154 s5-0) + (a1-36 (-> gp-0 1)) + ) + (rigid-body-method-20 (-> v1-154 state) (the-as vector a1-36)) + ) + (when (logtest? (-> obj flags) (rigid-body-object-flag riding)) + (set! (-> gp-0 2 quad 0) (-> s4-0 info cm-offset-joint quad)) + (+! (-> gp-0 2 vector 0 x) (* (-> obj controls steering) (-> s4-0 player-shift-x))) + (+! (-> gp-0 2 vector 0 z) (* (-> obj controls lean-z) (-> s4-0 player-shift-z))) + (vector-matrix*! (-> gp-0 1 vector 2) (the-as vector (-> gp-0 2)) (-> gp-0 0)) + (.svf (&-> (-> gp-0 1) quad 0) vf0) + (set! (-> gp-0 1 vector 0 y) (- (-> s4-0 player-weight))) + (let ((v1-162 s5-0) + (a1-38 (-> gp-0 1 vector 2)) + (a2-27 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-162 state) a1-38 (the-as vector a2-27)) + ) + 0 + ) + (rigid-body-object-method-50 obj arg0) + (vehicle-method-99 obj arg0) + (when (not (logtest? (-> obj flags) (rigid-body-object-flag dead))) + (set! (-> gp-0 1 trans quad) (-> s5-0 state lin-momentum quad)) + (set! (-> gp-0 1 trans y) 0.0) + (vector-normalize! (-> gp-0 1 trans) 1.0) + (let* ((v1-174 (-> s5-0 state lin-velocity)) + (f0-90 (/ (sqrtf (+ (* (-> v1-174 x) (-> v1-174 x)) (* (-> v1-174 z) (-> v1-174 z)))) (-> s4-0 max-xz-speed))) + (v1-176 (-> gp-0 1)) + (a0-65 (-> gp-0 1 trans)) + (f1-67 -1.0) + (f2-29 (* (-> s4-0 speed-limiting-drag) (vector-dot (-> s5-0 state force) (-> gp-0 1 trans)))) + (f3-19 + (* (fabs (-> obj engine-thrust)) (-> s4-0 speed-scrubbing-drag) (vector-length (-> s5-0 state lin-momentum))) + ) + (f4-6 (- 1.0 (fabs (vector-dot (-> s5-0 state matrix vector 2) (-> gp-0 1 trans))))) + ) + (vector-float*! (the-as vector v1-176) a0-65 (* f1-67 (+ f2-29 (* f3-19 (* f4-6 f4-6))) (sqrtf f0-90))) + ) + (let ((a1-51 (-> gp-0 1))) + (rigid-body-method-20 (-> s5-0 state) (the-as vector a1-51)) + ) + ) + ) + 0 + (none) + ) + ) + +(defmethod vehicle-method-125 vehicle ((obj vehicle) (arg0 float)) + (rigid-body-object-method-29 obj arg0) + (none) + ) + +(defmethod vehicle-method-126 vehicle ((obj vehicle) (arg0 float)) + (rigid-body-object-method-29 obj arg0) + (none) + ) diff --git a/goal_src/jak2/levels/city/generic/neon-praxis-part.gc b/goal_src/jak2/levels/city/generic/neon-praxis-part.gc index b6ea43142a..17fda74160 100644 --- a/goal_src/jak2/levels/city/generic/neon-praxis-part.gc +++ b/goal_src/jak2/levels/city/generic/neon-praxis-part.gc @@ -7,3 +7,1268 @@ ;; DECOMP BEGINS +(defpart 3596 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x13 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.7)) + (sp-flt spt-z (meters 9.2)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object '*praxis* 0 (the binteger 146408032) (the binteger 146408064)) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3597 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x15 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.7)) + (sp-flt spt-z (meters 6.4)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis* + (the binteger 1) + (the binteger 146408096) + (the binteger 146408128) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3598 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x8 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.7)) + (sp-flt spt-z (meters 2.7)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis* + (the binteger 2) + (the binteger 146407680) + (the binteger 146407712) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3599 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.7)) + (sp-flt spt-z (meters -0.7)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis* + (the binteger 3) + (the binteger 146408224) + (the binteger 146408256) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3600 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters -4.5)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis* + (the binteger 4) + (the binteger 146407776) + (the binteger 146407808) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3601 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters -8.8)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis* + (the binteger 5) + (the binteger 146408160) + (the binteger 146408192) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3602 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xa :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 24)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 255.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-4 left-multiply-quat) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3603 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 6)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object '*praxis-backing* 0 (the binteger 146407968) (the binteger 146408000)) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3604 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 1) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3605 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 4)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 2) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3606 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 3)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 3) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3607 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 2)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 4) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3608 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 1)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 5) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3609 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 0)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 6) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3610 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -1)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 7) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3611 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -2)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 8) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3612 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -3)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 9) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3613 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -4)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 10) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3614 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 11) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3615 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 5.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 12) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3616 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 4.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 13) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3617 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 3.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 14) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3618 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 2.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 15) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3619 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 16) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3620 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 17) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3621 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 18) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3622 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -1.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 19) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3623 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -2.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 20) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3624 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -3.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 21) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 3625 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -4.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 22) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-praxis-neon + :id 832 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 3596 :flags (is-3d launch-asap bit7)) + (sp-item 3597 :flags (is-3d launch-asap bit7)) + (sp-item 3598 :flags (is-3d launch-asap bit7)) + (sp-item 3599 :flags (is-3d launch-asap bit7)) + (sp-item 3600 :flags (is-3d launch-asap bit7)) + (sp-item 3601 :flags (is-3d launch-asap bit7)) + (sp-item 3602 :flags (is-3d launch-asap bit7)) + ) + ) + +(define *praxis* (new 'static 'boxed-array :type object + (the binteger 6) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w :x 63)) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w)) + (new 'static 'boxed-array :type object + (the binteger 1) + (new 'static 'vector4w :x 1) + (new 'static 'vector4w :x 3) + (new 'static 'vector4w :x 7) + (new 'static 'vector4w :x 15) + (new 'static 'vector4w :x 31) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 62) + (new 'static 'vector4w :x 60) + (new 'static 'vector4w :x 56) + (new 'static 'vector4w :x 48) + (new 'static 'vector4w :x 32) + (new 'static 'vector4w) + ) + (new 'static 'boxed-array :type object + (the binteger 10) + (new 'static 'vector4w) + (new 'static 'vector4w :x 1) + (new 'static 'vector4w :x 2) + (new 'static 'vector4w :x 4) + (new 'static 'vector4w :x 8) + (new 'static 'vector4w :x 16) + (new 'static 'vector4w :x 32) + (new 'static 'vector4w) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 63) + ) + (new 'static 'boxed-array :type object + (the binteger 10) + (new 'static 'vector4w) + (new 'static 'vector4w :x 33) + (new 'static 'vector4w :x 51) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 30) + (new 'static 'vector4w :x 12) + (new 'static 'vector4w) + (new 'static 'vector4w :x 33) + (new 'static 'vector4w :x 51) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 63) + ) + ) + ) + +(defpartgroup group-praxis-neon-back + :id 833 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 3603 :flags (is-3d launch-asap bit7)) + (sp-item 3615 :flags (is-3d launch-asap bit7)) + (sp-item 3604 :flags (is-3d launch-asap bit7)) + (sp-item 3616 :flags (is-3d launch-asap bit7)) + (sp-item 3605 :flags (is-3d launch-asap bit7)) + (sp-item 3617 :flags (is-3d launch-asap bit7)) + (sp-item 3606 :flags (is-3d launch-asap bit7)) + (sp-item 3618 :flags (is-3d launch-asap bit7)) + (sp-item 3607 :flags (is-3d launch-asap bit7)) + (sp-item 3619 :flags (is-3d launch-asap bit7)) + (sp-item 3608 :flags (is-3d launch-asap bit7)) + (sp-item 3620 :flags (is-3d launch-asap bit7)) + (sp-item 3609 :flags (is-3d launch-asap bit7)) + (sp-item 3621 :flags (is-3d launch-asap bit7)) + (sp-item 3610 :flags (is-3d launch-asap bit7)) + (sp-item 3622 :flags (is-3d launch-asap bit7)) + (sp-item 3611 :flags (is-3d launch-asap bit7)) + (sp-item 3623 :flags (is-3d launch-asap bit7)) + (sp-item 3612 :flags (is-3d launch-asap bit7)) + (sp-item 3624 :flags (is-3d launch-asap bit7)) + (sp-item 3613 :flags (is-3d launch-asap bit7)) + (sp-item 3625 :flags (is-3d launch-asap bit7)) + (sp-item 3614 :flags (is-3d launch-asap bit7)) + ) + ) + +(define *praxis-backing* + (new 'static 'boxed-array :type object + (the binteger 23) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w :x #x7fffff)) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w)) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w :x #x400001) + (new 'static 'vector4w :x #x600003) + (new 'static 'vector4w :x #x700007) + (new 'static 'vector4w :x #x78000f) + (new 'static 'vector4w :x #x7c001f) + (new 'static 'vector4w :x #x7e003f) + (new 'static 'vector4w :x #x7f007f) + (new 'static 'vector4w :x #x7f80ff) + (new 'static 'vector4w :x #x7fc1ff) + (new 'static 'vector4w :x #x7fe3ff) + (new 'static 'vector4w :x #x7ff7ff) + (new 'static 'vector4w :x #x7fffff) + ) + (new 'static 'boxed-array :type object + (the binteger 3) + (new 'static 'vector4w :x #x3c00) + (new 'static 'vector4w :x #x6600) + (new 'static 'vector4w :x #xc300) + (new 'static 'vector4w :x #x18180) + (new 'static 'vector4w :x #x300c0) + (new 'static 'vector4w :x #x60060) + (new 'static 'vector4w :x #xc0030) + (new 'static 'vector4w :x #x180018) + (new 'static 'vector4w :x #x30000c) + (new 'static 'vector4w :x #x600006) + ) + (new 'static 'boxed-array :type object + (the binteger 3) + (new 'static 'vector4w :x #x8008) + (new 'static 'vector4w :x #x200100) + (new 'static 'vector4w :x #x4002) + (new 'static 'vector4w :x #x420400) + (new 'static 'vector4w :x #x80040) + (new 'static 'vector4w :x #x2004) + (new 'static 'vector4w :x #x100800) + (new 'static 'vector4w :x #x10020) + (new 'static 'vector4w :x #x40081) + (new 'static 'vector4w :x #x1210) + ) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w :x 96) + (new 'static 'vector4w :x #xf0) + (new 'static 'vector4w :x #x1f8) + (new 'static 'vector4w :x #x3fc) + (new 'static 'vector4w :x #x7fe) + (new 'static 'vector4w :x #xfff) + ) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w :x #x111000) + (new 'static 'vector4w :x #x222000) + (new 'static 'vector4w :x #x444000) + (new 'static 'vector4w :x #x88000) + ) + (new 'static 'boxed-array :type object + (the binteger 15) + (new 'static 'vector4w :x #x7ff000) + (new 'static 'vector4w :x #xfff) + ) + ) + ) + +(define *city-neon-praxis-group-ids* (new 'static 'boxed-array :type int32 #x341 #x340)) + +(deftype city-neon-praxis (process-drawable) + ((rot vector :inline :offset-assert 208) + (master-enable uint32 :offset-assert 224) + (unknown-k1jn23j1n23 uint32 3 :offset-assert 228) + (praxis-mode uint32 :offset-assert 240) + (back-mode uint32 :offset-assert 244) + (praxis-counter int32 :offset-assert 248) + (back-counter int32 :offset-assert 252) + (parts sparticle-launch-control 2 :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 22 + :size-assert #x108 + :flag-assert #x1600900108 + (:methods + (idle () _type_ :state 20) + (city-neon-praxis-method-21 (_type_) none 21) + ) + ) + + +(defmethod deactivate city-neon-praxis ((obj city-neon-praxis)) + (dotimes (s5-0 2) + (let ((a0-1 (-> obj parts s5-0))) + (if (nonzero? a0-1) + (kill-and-free-particles a0-1) + ) + ) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; WARN: Return type mismatch process-drawable vs city-neon-praxis. +(defmethod relocate city-neon-praxis ((obj city-neon-praxis) (arg0 int)) + (dotimes (v1-0 2) + (if (nonzero? (-> obj parts v1-0)) + (&+! (-> obj parts v1-0) arg0) + ) + ) + (the-as city-neon-praxis ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; WARN: Return type mismatch symbol vs none. +(defmethod city-neon-praxis-method-21 city-neon-praxis ((obj city-neon-praxis)) + (+! (-> obj parts 1 state-counter) 1) + (when (!= (-> obj parts 1 state-mode 0) (-> obj praxis-mode)) + (set! (-> obj parts 1 state-mode 0) (-> obj praxis-mode)) + (set! (-> obj parts 1 state-counter) (the-as uint 0)) + 0 + ) + (+! (-> obj parts 0 state-counter) 1) + (when (!= (-> obj parts 0 state-mode 0) (-> obj back-mode)) + (set! (-> obj parts 0 state-mode 0) (-> obj back-mode)) + (set! (-> obj parts 0 state-counter) (the-as uint 0)) + 0 + ) + (let ((s5-0 (-> obj master-enable)) + (s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + (f30-0 (-> obj rot y)) + ) + (set-vector! s4-0 (* 3276.8 (cos (- 49152.0 f30-0))) 0.0 (* 3276.8 (sin (- 49152.0 f30-0))) 1.0) + (vector-! s3-0 (camera-pos) (-> obj root trans)) + (when (< (vector-dot s4-0 s3-0) 0.0) + (vector-negate! s4-0 s4-0) + (set! f30-0 (+ 32768.0 f30-0)) + ) + (vector+! s4-0 s4-0 (-> obj root trans)) + (dotimes (s3-1 2) + (when (logtest? s5-0 1) + (let ((s2-3 (-> obj parts s3-1))) + (matrix-rotate-y! (-> s2-3 origin) (+ 16384.0 f30-0)) + (spawn s2-3 s4-0) + ) + ) + (set! s5-0 (shr s5-0 1)) + ) + ) + (none) + ) + +(defstate idle (city-neon-praxis) + :virtual #t + :code (behavior () + (until #f + (when (<= (-> self praxis-counter) 0) + (set! (-> self praxis-mode) (the-as uint (rand-vu-int-count 5))) + (let ((v0-1 (rand-vu-int-range 3 6)) + (a0-3 (the-as (object object) (-> *praxis* (+ (-> self praxis-mode) 1)))) + ) + (set! (-> self praxis-counter) + (* v0-1 (* (+ (-> (the-as (pointer int32) a0-3) 0) -1) + (the-as int (/ (the-as int (-> (the-as (array object) a0-3) 0)) 8)) + ) + ) + ) + ) + (while (< (-> self praxis-counter) 120) + (set! (-> self praxis-counter) (* (-> self praxis-counter) 2)) + ) + ) + (+! (-> self praxis-counter) -1) + (when (<= (-> self back-counter) 0) + (set! (-> self back-mode) (the-as uint (rand-vu-int-count 8))) + (let ((v0-3 (rand-vu-int-range 3 6)) + (a0-9 (the-as (object object) (-> *praxis-backing* (+ (-> self back-mode) 1)))) + ) + (set! (-> self back-counter) (* v0-3 (* (+ (-> (the-as (pointer int32) a0-9) 0) -1) + (the-as int (/ (the-as int (-> (the-as (array object) a0-9) 0)) 8)) + ) + ) + ) + ) + (while (< (-> self back-counter) 120) + (set! (-> self back-counter) (* (-> self back-counter) 2)) + ) + ) + (+! (-> self back-counter) -1) + (city-neon-praxis-method-21 self) + (suspend) + ) + #f + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! city-neon-praxis ((obj city-neon-praxis) (arg0 entity-actor)) + "Typically the method that does the initial setup on the process, potentially using the [[entity-actor]] provided as part of that. +This commonly includes things such as: +- stack size +- collision information +- loading the skeleton group / bones +- sounds" + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause enemy)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (set! (-> obj master-enable) (the-as uint -1)) + (set! (-> obj praxis-mode) (the-as uint (rand-vu-int-count 5))) + (set! (-> obj back-mode) (the-as uint (rand-vu-int-count 8))) + (-> obj rot y) + (let ((f0-1 16384.0)) + (set! (-> obj rot y) f0-1) + (quaternion-vector-angle! (-> obj root quat) (new 'static 'vector :y 1.0 :w 1.0) f0-1) + ) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (vector-z-quaternion! s5-1 (-> obj root quat)) + (vector-normalize! s5-1 -4096.0) + (vector+! (-> obj root trans) (-> obj root trans) s5-1) + ) + (let ((s5-2 *city-neon-praxis-group-ids*)) + (dotimes (s4-0 2) + (set! (-> obj parts s4-0) (create-launch-control (-> *part-group-id-table* (-> s5-2 s4-0)) obj)) + ) + ) + (go (method-of-object obj idle)) + (none) + ) diff --git a/goal_src/jak2/levels/city/onin_tent/onin-game.gc b/goal_src/jak2/levels/city/onin_tent/onin-game.gc index a04f07a335..5966934a8a 100644 --- a/goal_src/jak2/levels/city/onin_tent/onin-game.gc +++ b/goal_src/jak2/levels/city/onin_tent/onin-game.gc @@ -7,3 +7,2767 @@ ;; DECOMP BEGINS +(deftype onin-game-event (structure) + ((min-count uint16 :offset-assert 0) + (max-count uint16 :offset-assert 2) + (min-event uint16 :offset-assert 4) + (max-event uint16 :offset-assert 6) + (wave-delay uint16 :offset-assert 8) + (min-wave uint16 :offset-assert 10) + (max-wave uint16 :offset-assert 12) + (gravity meters :offset-assert 16) + ) + :pack-me + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + + +(define *onin-game-data* (new 'static 'boxed-array :type object + (new 'static 'inline-array onin-game-event 21 + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x190 + :min-event #x1770 + :max-event #x12c + :wave-delay #x12c + :min-wave #xbb8 + :max-wave #xbb8 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x1 + :min-event #x12c + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -3) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x5 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x1 + :min-event #x4b + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x6 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #xe1 + :max-event #x12c + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x5 + :max-count #x7 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x96 + :max-event #xe1 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x6 + :max-count #x8 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x3 + :min-event #x12c + :max-event #x177 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x5 + :min-event #x12c + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x3 + :min-event #xe1 + :max-event #x12c + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x7 + :max-count #x9 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x4 + :min-event #x177 + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x8 + :max-count #xa + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x4 + :min-event #x12c + :max-event #x177 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x9 + :max-count #xb + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x78 + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #xa + :max-count #xc + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x4b + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :max-count #xc + :min-event #x12c + :max-event #x12c + :wave-delay #x12c + :min-wave #xbb8 + :max-wave #xbb8 + :gravity (meters -2) + ) + ) + (new 'static 'inline-array onin-game-event 21 + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x3e8 + :min-event #x1770 + :max-event #x12c + :wave-delay #x12c + :min-wave #xbb8 + :max-wave #xbb8 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x1 + :min-event #x12c + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -3) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x5 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x1 + :min-event #x4b + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x6 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #xe1 + :max-event #x12c + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x5 + :max-count #x7 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x96 + :max-event #xe1 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x6 + :max-count #x8 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x3 + :min-event #x12c + :max-event #x177 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x5 + :min-event #x12c + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x3 + :min-event #xe1 + :max-event #x12c + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x7 + :max-count #x9 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x4 + :min-event #x177 + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x8 + :max-count #xa + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x4 + :min-event #x12c + :max-event #x177 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x9 + :max-count #xb + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x78 + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #xa + :max-count #xc + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x4b + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :max-count #xc + :min-event #x12c + :max-event #x12c + :wave-delay #x12c + :min-wave #xbb8 + :max-wave #xbb8 + :gravity (meters -2) + ) + ) + ) + ) + +(defpartgroup group-onin-bubble-triangle + :id 799 + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3484 :flags (bit6)) (sp-item 3485) (sp-item 3486) (sp-item 3487) (sp-item 3488 :flags (bit6))) + ) + +(defpart 3485 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.33) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters -0.18) (meters -0.02) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees 0.0)) + (sp-rnd-flt spt-conerot-radius (meters 0.09) (meters 0.01) 1.0) + ) + ) + +(defpart 3486 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.33) + (sp-rnd-flt spt-y (meters 0.075) (meters -0.03) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees 30.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.18) (meters 0.2) 1.0) + ) + ) + +(defpart 3487 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.33) + (sp-rnd-flt spt-y (meters 0.075) (meters -0.03) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees -30.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.18) (meters 0.2) 1.0) + ) + ) + +(defpart 3489 + :init-specs ((sp-flt spt-r 0.0) + (sp-flt spt-g 214.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-fade-a -0.3 -1.2 1.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3490) + ) + ) + +(defpart 3490 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 3491) + ) + ) + +(defpart 3491 + :init-specs ((sp-flt spt-r 0.0) + (sp-flt spt-g 214.0) + (sp-flt spt-b 32.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3490) + ) + ) + +(defpart 3484 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + ) + ) + +(defpart 3488 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.26)) + (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-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-4) + ) + ) + +(defpartgroup group-onin-bubble-circle + :id 800 + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3492 :flags (bit6)) (sp-item 3493) (sp-item 3494 :flags (bit6))) + ) + +(defpart 3493 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3495) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.09) (meters 0.01) 1.0) + ) + ) + +(defpart 3495 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 8.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-fade-a -0.3 -1.2 1.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3496) + ) + ) + +(defpart 3496 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 3497) + ) + ) + +(defpart 3497 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 8.0) + (sp-flt spt-b 32.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3496) + ) + ) + +(defpart 3492 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x7 :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + ) + ) + +(defpart 3494 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x8 :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.26)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 32.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-4) + ) + ) + +(defpartgroup group-onin-bubble-square + :id 801 + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3498 :flags (bit6)) + (sp-item 3499) + (sp-item 3500) + (sp-item 3501) + (sp-item 3502) + (sp-item 3503 :flags (bit6)) + ) + ) + +(defpart 3499 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters 0.08) (meters 0.01) 1.0) + (sp-rnd-flt spt-y (meters -0.09) (meters 0.18) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +(defpart 3500 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters -0.08) (meters -0.01) 1.0) + (sp-rnd-flt spt-y (meters -0.09) (meters 0.18) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +(defpart 3501 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters -0.08) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +(defpart 3502 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters 0.08) (meters 0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +(defpart 3504 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 0.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-fade-a -0.3 -1.2 1.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3505) + ) + ) + +(defpart 3505 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 3506) + ) + ) + +(defpart 3506 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 0.0) + (sp-flt spt-b 128.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3505) + ) + ) + +(defpart 3498 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-rnd-int-flt spt-rot-z (degrees 0.0) 359 16384.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + ) + ) + +(defpart 3503 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xa :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.26)) + (sp-rnd-int-flt spt-rot-z (degrees 0.0) 359 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-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-4) + ) + ) + +(defpartgroup group-onin-bubble-x + :id 802 + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3507 :flags (bit6)) (sp-item 3508) (sp-item 3509) (sp-item 3510 :flags (bit6))) + ) + +(defpart 3508 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-y (meters 0.005) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3511) + (sp-flt spt-conerot-z (degrees 45.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.12) (meters 0.24) 1.0) + ) + ) + +(defpart 3509 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-y (meters 0.005) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3511) + (sp-flt spt-conerot-z (degrees -45.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.12) (meters 0.24) 1.0) + ) + ) + +(defpart 3511 + :init-specs ((sp-flt spt-r 48.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-fade-a -0.3 -1.2 1.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3512) + ) + ) + +(defpart 3512 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 3513) + ) + ) + +(defpart 3513 + :init-specs ((sp-flt spt-r 48.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 255.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3512) + ) + ) + +(defpart 3507 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xd :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-rnd-int-flt spt-rot-z (degrees 0.0) 359 16384.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + ) + ) + +(defpart 3510 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.26)) + (sp-rnd-int-flt spt-rot-z (degrees 0.0) 359 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-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-4) + ) + ) + +(defpartgroup group-onin-bubble-pop-triangle + :id 803 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3514) (sp-item 3515) (sp-item 3516) (sp-item 3517 :flags (bit6))) + ) + +(defpart 3514 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 21.0) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters -0.18) (meters -0.02) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees 0.0)) + (sp-rnd-flt spt-conerot-radius (meters 0.09) (meters 0.01) 1.0) + ) + ) + +(defpart 3515 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 21.0) + (sp-rnd-flt spt-y (meters 0.075) (meters -0.03) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees 30.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.18) (meters 0.2) 1.0) + ) + ) + +(defpart 3516 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 21.0) + (sp-rnd-flt spt-y (meters 0.075) (meters -0.03) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees -30.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.18) (meters 0.2) 1.0) + ) + ) + +(defpart 3517 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbc :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (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-flt spt-a 64.0) + (sp-flt spt-fade-r -6.375) + (sp-flt spt-fade-g -1.025) + (sp-flt spt-fade-b -5.575) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +(defpartgroup group-onin-bubble-pop-circle + :id 804 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3518) (sp-item 3519 :flags (bit6))) + ) + +(defpart 3518 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 64.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3495) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.09) (meters 0.01) 1.0) + ) + ) + +(defun birth-func-onin-bubble-pop ((arg0 sparticle-system) + (arg1 sparticle-cpuinfo) + (arg2 sprite-vec-data-3d) + (arg3 sparticle-launcher) + (arg4 sparticle-launch-state) + ) + (let* ((a0-1 (-> arg4 control)) + (v1-1 (vector-! (new 'stack-no-clear 'vector) (-> arg2 x-y-z-sx) (-> a0-1 origin trans))) + ) + (set! (-> arg1 vel-sxvel x) (* 0.083333336 (-> v1-1 x))) + (set! (-> arg1 vel-sxvel y) (* 0.083333336 (-> v1-1 y))) + ) + 0 + (none) + ) + +(defpart 3519 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbc :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (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-flt spt-a 64.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -6.1) + (sp-flt spt-fade-b -4.6) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +(defpartgroup group-onin-bubble-pop-square + :id 805 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3520) (sp-item 3521) (sp-item 3522) (sp-item 3523) (sp-item 3524 :flags (bit6))) + ) + +(defpart 3520 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters 0.08) (meters 0.01) 1.0) + (sp-rnd-flt spt-y (meters -0.09) (meters 0.18) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +(defpart 3521 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -0.08) (meters -0.01) 1.0) + (sp-rnd-flt spt-y (meters -0.09) (meters 0.18) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +(defpart 3522 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters -0.08) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +(defpart 3523 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters 0.08) (meters 0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +(defpart 3524 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbc :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (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-flt spt-a 64.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b -6.375) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +(defpartgroup group-onin-bubble-pop-x + :id 806 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3525) (sp-item 3526) (sp-item 3527 :flags (bit6))) + ) + +(defpart 3525 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-y (meters 0.005) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3511) + (sp-flt spt-conerot-z (degrees 45.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.12) (meters 0.24) 1.0) + ) + ) + +(defpart 3526 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-y (meters 0.005) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3511) + (sp-flt spt-conerot-z (degrees -45.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.12) (meters 0.24) 1.0) + ) + ) + +(defpart 3527 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbc :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (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-flt spt-a 64.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -5.175) + (sp-flt spt-fade-b -4.9) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 20) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +(defpartgroup group-onin-bubble-birth-triangle + :id 807 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3528) (sp-item 3529 :flags (bit6))) + ) + +(defpart 3528 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-birth-pop) + (sp-flt spt-num 32.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-flt spt-g 214.0) + (sp-flt spt-b 16.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-omega 1.2288 1.2288 1.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.771875) + (sp-flt spt-fade-b 0.7) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees -70.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.6) (meters 0.9) 1.0) + ) + ) + +(defpart 3529 + :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.2)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 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-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-3) + (sp-flt spt-userdata 0.0) + (sp-int spt-next-time 80) + (sp-launcher-by-id spt-next-launcher 3530) + ) + ) + +(defpart 3530 + :init-specs ((sp-flt spt-a 255.0) + (sp-flt spt-vel-y (meters 0.0033333334)) + (sp-flt spt-scalevel-x (meters -0.01)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -6.375) + (sp-flt spt-fade-b -3.2) + (sp-flt spt-fade-a -6.375) + ) + ) + +(defpartgroup group-onin-bubble-birth-circle + :id 808 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3531) (sp-item 3532 :flags (bit6))) + ) + +(defpart 3531 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-birth-pop) + (sp-flt spt-num 32.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 8.0) + (sp-flt spt-b 32.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-omega 1.2288 1.2288 1.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.771875) + (sp-flt spt-fade-b 0.7) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees -70.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.6) (meters 0.9) 1.0) + ) + ) + +(defun birth-func-onin-bubble-birth-pop ((arg0 sparticle-system) + (arg1 sparticle-cpuinfo) + (arg2 sprite-vec-data-3d) + (arg3 sparticle-launcher) + (arg4 sparticle-launch-state) + ) + (let* ((a0-1 (-> arg4 control)) + (v1-1 (vector-! (new 'stack-no-clear 'vector) (-> arg2 x-y-z-sx) (-> a0-1 origin trans))) + ) + (set! (-> arg1 vel-sxvel x) (* -0.008333334 (-> v1-1 x))) + (set! (-> arg1 vel-sxvel y) (* -0.008333334 (-> v1-1 y))) + (set! (-> arg1 vel-sxvel z) (* -0.008333334 (-> v1-1 z))) + ) + 0 + (none) + ) + +(defpart 3532 + :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.2)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 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-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-3) + (sp-flt spt-userdata 0.0) + (sp-int spt-next-time 80) + (sp-launcher-by-id spt-next-launcher 3533) + ) + ) + +(defpart 3533 + :init-specs ((sp-flt spt-a 255.0) + (sp-flt spt-vel-y (meters 0.0033333334)) + (sp-flt spt-scalevel-x (meters -0.01)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -6.1) + (sp-flt spt-fade-b -4.6) + (sp-flt spt-fade-a -6.375) + ) + ) + +(defpartgroup group-onin-bubble-birth-square + :id 809 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3534) (sp-item 3535 :flags (bit6))) + ) + +(defpart 3534 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-birth-pop) + (sp-flt spt-num 32.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 0.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-omega 1.2288 1.2288 1.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.771875) + (sp-flt spt-fade-b 0.7) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees -70.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.6) (meters 0.9) 1.0) + ) + ) + +(defpart 3535 + :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.2)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 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-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-3) + (sp-flt spt-userdata 0.0) + (sp-int spt-next-time 80) + (sp-launcher-by-id spt-next-launcher 3536) + ) + ) + +(defpart 3536 + :init-specs ((sp-flt spt-a 255.0) + (sp-flt spt-vel-y (meters 0.0033333334)) + (sp-flt spt-scalevel-x (meters -0.01)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -6.375) + (sp-flt spt-fade-g -1.025) + (sp-flt spt-fade-b -5.6) + (sp-flt spt-fade-a -6.375) + ) + ) + +(defpartgroup group-onin-bubble-birth-x + :id 810 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3537) (sp-item 3538 :flags (bit6))) + ) + +(defpart 3537 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-birth-pop) + (sp-flt spt-num 32.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 48.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-omega 1.2288 1.2288 1.0) + (sp-flt spt-fade-r 0.646875) + (sp-flt spt-fade-g 0.6125) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees -70.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.6) (meters 0.9) 1.0) + ) + ) + +(defpart 3538 + :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.2)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 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-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-3) + (sp-flt spt-userdata 0.0) + (sp-int spt-next-time 80) + (sp-launcher-by-id spt-next-launcher 3539) + ) + ) + +(defpart 3539 + :init-specs ((sp-flt spt-a 255.0) + (sp-flt spt-vel-y (meters 0.0033333334)) + (sp-flt spt-scalevel-x (meters -0.01)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -5.7) + (sp-flt spt-fade-g -4.9) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -6.375) + ) + ) + +(defpartgroup group-onin-bubble-land-triangle + :id 811 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3540 :flags (bit6)) (sp-item 3541 :flags (is-3d bit6))) + ) + +(defpart 3541 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x40b)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters -0.05)) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-flt spt-g 214.0) + (sp-flt spt-b 16.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-scalevel-x (meters 0.02) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 3542) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +(defpart 3540 + :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.1)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -5.7) + (sp-flt spt-fade-g -4.9) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +(defpartgroup group-onin-bubble-land-circle + :id 812 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3543 :flags (bit6)) (sp-item 3544 :flags (is-3d bit6))) + ) + +(defpart 3544 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x40b)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters -0.05)) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 4.0) + (sp-flt spt-b 16.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-scalevel-x (meters 0.02) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 3542) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +(defpart 3543 + :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.1)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -5.7) + (sp-flt spt-fade-g -4.9) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +(defpartgroup group-onin-bubble-land-square + :id 813 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3545 :flags (bit6)) (sp-item 3546 :flags (is-3d bit6))) + ) + +(defpart 3545 + :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.1)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -5.7) + (sp-flt spt-fade-g -4.9) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +(defpart 3546 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x40b)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters -0.05)) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 0.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-scalevel-x (meters 0.02) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 3542) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +(defpartgroup group-onin-bubble-land-x + :id 814 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3547 :flags (bit6)) (sp-item 3548 :flags (is-3d bit6))) + ) + +(defpart 3548 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x40b)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters -0.05)) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 24.0) + (sp-flt spt-g 32.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-scalevel-x (meters 0.02) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 left-multiply-quat) + (sp-int-plain-rnd spt-next-time 20 14 1) + (sp-launcher-by-id spt-next-launcher 3542) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +(defpart 3542 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) (sp-flt spt-scalevel-y (meters 0)) (sp-flt spt-fade-a -0.8)) + ) + +(defpart 3547 + :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.1)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 64.0) + (sp-flt spt-scalevel-x (meters -0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -5.7) + (sp-flt spt-fade-g -4.9) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +(deftype onin-game-bubble (process-drawable) + ((bubble-type int32 :offset-assert 200) + (bubble-start-time time-frame :offset-assert 208) + (gravity meters :offset-assert 216) + (dead? symbol :offset-assert 220) + (angle float :offset-assert 224) + (height float :offset-assert 228) + ) + :heap-base #x70 + :method-count-assert 22 + :size-assert #xe8 + :flag-assert #x16007000e8 + (:methods + (idle () _type_ :state 20) + (fall () _type_ :state 21) + ) + ) + + +(defstate idle (onin-game-bubble) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('die) + (go empty-state) + ) + (('attack) + (if (-> event param 0) + (go empty-state) + ) + ) + ) + ) + :code (behavior () + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 + (the-as part-tracker gp-0) + *entity-pool* + (symbol->string (-> part-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let* ((t9-2 run-function-in-process) + (a0-2 gp-0) + (a1-2 part-tracker-init) + (v1-5 (-> self bubble-type)) + (a2-4 (cond + ((zero? v1-5) + (-> *part-group-id-table* 807) + ) + ((= v1-5 1) + (-> *part-group-id-table* 808) + ) + ((= v1-5 2) + (-> *part-group-id-table* 810) + ) + (else + (-> *part-group-id-table* 809) + ) + ) + ) + (a3-1 0) + (t0-0 #f) + (t1-0 #f) + (t2-0 #f) + (t3-0 *launch-matrix*) + ) + (set! (-> t3-0 trans quad) (-> self root trans quad)) + ((the-as (function object object object object object object object object none) t9-2) + a0-2 + a1-2 + a2-4 + a3-1 + t0-0 + t1-0 + t2-0 + t3-0 + ) + ) + (-> gp-0 ppointer) + ) + ) + (let ((gp-1 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-1) (seconds 0.25)) + (suspend) + ) + ) + (go-virtual fall) + (none) + ) + ) + +(defstate fall (onin-game-bubble) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('attack) + (when (not (-> self dead?)) + (sound-play "onin-pop") + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 + (the-as part-tracker gp-1) + *entity-pool* + (symbol->string (-> part-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let* ((t9-4 run-function-in-process) + (a0-6 gp-1) + (a1-4 part-tracker-init) + (v1-8 (-> self bubble-type)) + (a2-6 (cond + ((zero? v1-8) + (-> *part-group-id-table* 803) + ) + ((= v1-8 1) + (-> *part-group-id-table* 804) + ) + ((= v1-8 2) + (-> *part-group-id-table* 806) + ) + (else + (-> *part-group-id-table* 805) + ) + ) + ) + (a3-3 0) + (t0-1 #f) + (t1-1 #f) + (t2-1 #f) + (t3-0 *launch-matrix*) + ) + (set! (-> t3-0 trans quad) (-> self root trans quad)) + ((the-as (function object object object object object object object object none) t9-4) + a0-6 + a1-4 + a2-6 + a3-3 + t0-1 + t1-1 + t2-1 + t3-0 + ) + ) + (-> gp-1 ppointer) + ) + ) + (go empty-state) + ) + ) + (('die) + (set! (-> self dead?) #t) + (go empty-state) + ) + ) + ) + :enter (behavior () + (set-vector! + (-> self root transv) + (-> self angle) + (- (sqrtf (* 2.0 (-> self gravity) (-> self height))) (* 0.008333334 (- (-> self gravity)))) + 819.2 + 1.0 + ) + (none) + ) + :code (behavior () + (while (and (not (and (< (-> self root transv y) 0.0) (< (-> self root trans y) 36044.8))) (not (-> self dead?))) + (suspend) + ) + (set! (-> self root trans y) 35799.04) + (set! (-> self dead?) #t) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 + (the-as part-tracker gp-0) + *entity-pool* + (symbol->string (-> part-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let* ((t9-2 run-function-in-process) + (a0-2 gp-0) + (a1-2 part-tracker-init) + (v1-16 (-> self bubble-type)) + (a2-4 (cond + ((zero? v1-16) + (-> *part-group-id-table* 811) + ) + ((= v1-16 1) + (-> *part-group-id-table* 812) + ) + ((= v1-16 2) + (-> *part-group-id-table* 814) + ) + (else + (-> *part-group-id-table* 813) + ) + ) + ) + (a3-1 0) + (t0-0 #f) + (t1-0 #f) + (t2-0 #f) + (t3-0 *launch-matrix*) + ) + (set! (-> t3-0 trans quad) (-> self root trans quad)) + ((the-as (function object object object object object object object object none) t9-2) + a0-2 + a1-2 + a2-4 + a3-1 + t0-0 + t1-0 + t2-0 + t3-0 + ) + ) + (-> gp-0 ppointer) + ) + ) + (send-event (ppointer->process (-> self parent)) 'done) + (while (not (and (< (-> self root transv y) 0.0) (< (-> self root trans y) 31948.8))) + (suspend) + ) + (none) + ) + :post (behavior () + (+! (-> self root transv y) (* (-> self gravity) (-> self clock seconds-per-frame))) + (set! (-> self root transv x) (* 0.999 (-> self root transv x))) + (vector-v+! (-> self root trans) (-> self root trans) (-> self root transv)) + (spawn (-> self part) (-> self root trans)) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior onin-game-bubble-init onin-game-bubble ((arg0 vector) (arg1 int) (arg2 meters) (arg3 float) (arg4 float)) + "TODO - bubble type enum" + (sound-play "onin-launch") + (set! (-> self bubble-start-time) (-> self clock frame-counter)) + (set! (-> self bubble-type) arg1) + (set! (-> self gravity) arg2) + (set! (-> self angle) arg3) + (set! (-> self height) arg4) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg0 quad)) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self dead?) #f) + (set! (-> self part) (create-launch-control + (cond + ((zero? arg1) + (-> *part-group-id-table* 799) + ) + ((= arg1 1) + (-> *part-group-id-table* 800) + ) + ((= arg1 2) + (-> *part-group-id-table* 802) + ) + (else + (-> *part-group-id-table* 801) + ) + ) + self + ) + ) + (set! (-> self event-hook) (-> (method-of-type onin-game-bubble idle) event)) + (go-virtual idle) + (none) + ) + +(deftype onin-game (process-drawable) + ((wave int32 :offset-assert 200) + (event int32 :offset-assert 204) + (wave-time time-frame :offset-assert 208) + (wave-delay-time time-frame :offset-assert 216) + (wave-length uint64 :offset-assert 224) + (event-time time-frame :offset-assert 232) + (event-length uint64 :offset-assert 240) + (hud-score handle :offset-assert 248) + (hud-goal handle :offset-assert 256) + (hud-miss handle :offset-assert 264) + (score float :offset-assert 272) + (score-time time-frame :offset-assert 280) + (game (inline-array onin-game-event) :offset-assert 288) + (miss-max int32 :offset-assert 292) + (miss-count int32 :offset-assert 296) + (point-win float :offset-assert 300) + (game-start-time time-frame :offset-assert 304) + (last-type int32 :offset-assert 312) + (current-bonus float :offset-assert 316) + (last-angle float :offset-assert 320) + (wave-start-miss int32 :offset-assert 324) + ) + :heap-base #xd0 + :method-count-assert 28 + :size-assert #x148 + :flag-assert #x1c00d00148 + (:methods + (hide () _type_ :state 20) + (wait-for-start () _type_ :state 21) + (active (symbol) _type_ :state 22) + (lose () _type_ :state 23) + (win () _type_ :state 24) + (onin-game-method-25 (_type_) none 25) + (onin-game-method-26 (_type_) none 26) + (onin-game-method-27 (_type_ int) none 27) + ) + ) + + +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 112 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 112 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 112 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 112 mismatch: defined as size 4, got size 16 +(defmethod onin-game-method-25 onin-game ((obj onin-game)) + (local-vars + (v0-18 int) + (sv-32 process) + (sv-48 (function vector int meters float float none :behavior onin-game-bubble)) + (sv-64 vector) + (sv-80 int) + (sv-96 meters) + (sv-112 float) + ) + (with-pp + (when (>= (- (-> pp clock frame-counter) (-> obj game-start-time)) (seconds 2)) + (let ((s5-0 (-> obj game (-> obj wave)))) + (when (>= (- (-> pp clock frame-counter) (the-as int (-> obj wave-length))) (-> obj wave-time)) + (let ((s4-0 (-> obj child))) + (while s4-0 + (if (type? (ppointer->process s4-0) onin-game-bubble) + (goto cfg-58) + ) + (set! s4-0 (-> s4-0 0 brother)) + ) + ) + (if (zero? (-> obj wave-delay-time)) + (set! (-> obj wave-delay-time) (-> pp clock frame-counter)) + ) + (if (< (- (-> pp clock frame-counter) (-> obj wave-delay-time)) (the-as time-frame (-> s5-0 wave-delay))) + (goto cfg-58) + ) + (set! (-> obj event-length) (the-as uint 0)) + (+! (-> obj wave) 1) + (set! s5-0 (-> obj game (-> obj wave))) + (when (zero? (-> s5-0 min-count)) + (set! (-> obj wave) (the-as int (-> s5-0 max-count))) + (set! s5-0 (-> obj game (-> obj wave))) + ) + (set! (-> obj wave-time) (-> pp clock frame-counter)) + (set! (-> obj wave-length) + (the-as uint (rand-vu-int-range (the-as int (-> s5-0 min-wave)) (the-as int (-> s5-0 max-wave)))) + ) + (set! (-> obj wave-delay-time) 0) + (when (< 1 (-> obj wave)) + (cond + ((< 4 (- (-> obj miss-count) (-> obj wave-start-miss))) + (let ((v0-2 (rand-vu-int-count 5))) + (cond + ((zero? v0-2) + (talker-spawn-func (-> *talker-speech* 148) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-2 1) + (talker-spawn-func (-> *talker-speech* 153) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-2 2) + (talker-spawn-func (-> *talker-speech* 154) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-2 3) + (talker-spawn-func (-> *talker-speech* 157) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-2 4) + (talker-spawn-func (-> *talker-speech* 158) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + ) + ((>= 1 (- (-> obj miss-count) (-> obj wave-start-miss))) + (let ((v0-9 (rand-vu-int-count 7))) + (cond + ((zero? v0-9) + (talker-spawn-func (-> *talker-speech* 141) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 1) + (talker-spawn-func (-> *talker-speech* 142) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 2) + (talker-spawn-func (-> *talker-speech* 143) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 3) + (talker-spawn-func (-> *talker-speech* 150) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 4) + (talker-spawn-func (-> *talker-speech* 156) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 5) + (talker-spawn-func (-> *talker-speech* 159) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 6) + (talker-spawn-func (-> *talker-speech* 160) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + ) + ) + ) + (set! (-> obj wave-start-miss) (-> obj miss-count)) + ) + (set! v0-18 + (when (>= (- (-> pp clock frame-counter) (-> obj event-time)) (the-as time-frame (-> obj event-length))) + (set! (-> obj event-time) (-> pp clock frame-counter)) + (let ((s4-14 (vector+! (new 'stack-no-clear 'vector) (-> obj root trans) (new 'static 'vector :w 1.0))) + (s3-12 (rand-vu-int-range (the-as int (-> s5-0 min-count)) (the-as int (-> s5-0 max-count)))) + ) + (dotimes (s2-12 s3-12) + (let ((f0-0 (-> obj last-angle))) + (while (< (fabs (- (-> obj last-angle) f0-0)) 819.2) + (set! f0-0 (rand-vu-float-range -1720.32 1720.32)) + ) + (set! (-> obj last-angle) f0-0) + ) + (let ((s1-0 (get-process *default-dead-pool* onin-game-bubble #x4000))) + (when s1-0 + (let ((t9-31 (method-of-type onin-game-bubble activate))) + (t9-31 + (the-as onin-game-bubble s1-0) + obj + (symbol->string (-> onin-game-bubble symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s0-0 run-function-in-process)) + (set! sv-32 s1-0) + (set! sv-48 onin-game-bubble-init) + (set! sv-64 s4-14) + (set! sv-80 (rand-vu-int-range 0 3)) + (set! sv-96 (-> s5-0 gravity)) + (set! sv-112 (-> obj last-angle)) + (let ((t2-0 (rand-vu-float-range 4096.0 7372.8))) + ((the-as (function object object object object object object object none) s0-0) + sv-32 + sv-48 + sv-64 + sv-80 + sv-96 + sv-112 + t2-0 + ) + ) + ) + (-> s1-0 ppointer) + ) + ) + ) + ) + (set! v0-18 (rand-vu-int-range (the-as int (-> s5-0 min-event)) (the-as int (-> s5-0 max-event)))) + (set! (-> obj event-length) (the-as uint v0-18)) + v0-18 + ) + ) + ) + ) + (label cfg-58) + (onin-game-method-26 obj) + 0 + (none) + ) + ) + +(defmethod onin-game-method-26 onin-game ((obj onin-game)) + (with-pp + (cond + ((>= (-> *game-info* score) (-> obj score)) + (set! (-> *game-info* score) (-> obj score)) + ) + ((and (< (-> *game-info* score) (-> obj score)) + (>= (- (-> pp clock frame-counter) (-> obj score-time)) (seconds 0.1)) + ) + (sound-play "onin-score") + (seek! (-> *game-info* score) (-> obj score) 1.0) + (set! (-> obj score-time) (-> pp clock frame-counter)) + ) + ) + (set! (-> *game-info* miss) (the float (-> obj miss-count))) + 0 + (none) + ) + ) + +;; WARN: Return type mismatch number vs none. +(defmethod onin-game-method-27 onin-game ((obj onin-game) (arg0 int)) + "TODO - bubble type" + (let ((s4-0 (the-as onin-game-bubble #f))) + (let ((s3-0 0) + (s2-0 (-> obj child)) + ) + (while s2-0 + (let* ((s1-0 (ppointer->process s2-0)) + (v1-2 (if (type? s1-0 onin-game-bubble) + (the-as onin-game-bubble s1-0) + ) + ) + ) + (when (and v1-2 (= (-> v1-2 bubble-type) arg0) (or (not s4-0) (< (-> v1-2 bubble-start-time) s3-0))) + (set! s4-0 v1-2) + (set! s3-0 (the-as int (-> v1-2 bubble-start-time))) + ) + ) + (set! s2-0 (-> s2-0 0 brother)) + ) + ) + (cond + (s4-0 + (when (send-event s4-0 'attack #f) + (cond + ((= arg0 (-> obj last-type)) + (+! (-> obj current-bonus) (-> obj current-bonus)) + (if (>= (-> obj current-bonus) 16.0) + (set! (-> obj current-bonus) 16.0) + ) + ) + (else + (set! (-> obj current-bonus) 1.0) + ) + ) + (set! (-> obj last-type) arg0) + (+! (-> obj score) (-> obj current-bonus)) + ) + ) + (else + (sound-play "onin-wrong") + (set! (-> obj last-type) -1) + (+! (-> obj miss-count) 1) + (let ((v1-20 (rand-vu-int-count 4))) + (cond + ((zero? v1-20) + (talker-spawn-func (-> *talker-speech* 144) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-20 1) + (talker-spawn-func (-> *talker-speech* 146) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-20 2) + (talker-spawn-func (-> *talker-speech* 147) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-20 3) + (talker-spawn-func (-> *talker-speech* 149) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + ) + ) + ) + (none) + ) + +(defstate hide (onin-game) + :virtual #t + :code (behavior () + (ja-channel-set! 0) + (ja-post) + (sleep-code) + (none) + ) + ) + +(defstate wait-for-start (onin-game) + :virtual #t + :code (behavior () + (while (or (not *target*) (not (process-grab? *target* #f))) + (suspend) + ) + (go-virtual active #t) + (none) + ) + ) + +(defstate active (onin-game) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('done) + (sound-play "onin-splat") + (set! (-> self last-type) -1) + (+! (-> self miss-count) 1) + (let ((v1-5 (rand-vu-int-count 2))) + (cond + ((zero? v1-5) + (talker-spawn-func (-> *talker-speech* 151) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-5 1) + (talker-spawn-func (-> *talker-speech* 152) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + ) + (('retry) + enter-state + (go-virtual lose) + ) + ) + ) + :enter (behavior ((arg0 symbol)) + (when arg0 + (add-connection *task-manager-engine* self nothing self (-> *game-info* sub-task-list 151) #f) + (let ((a1-1 (new 'stack-no-clear 'array 'pointer 3))) + (set! (-> a1-1 2) (the-as pointer 'onin2)) + (set! (-> a1-1 1) (the-as pointer 'onin1)) + (set! (-> a1-1 0) (the-as pointer 'ctywide1)) + (want-sound-banks *load-state* (the-as (pointer symbol) a1-1)) + ) + (talker-speech-class-method-11 (-> *talker-speech* 141)) + (talker-speech-class-method-11 (-> *talker-speech* 142)) + (talker-speech-class-method-11 (-> *talker-speech* 143)) + (talker-speech-class-method-11 (-> *talker-speech* 144)) + (talker-speech-class-method-11 (-> *talker-speech* 146)) + (talker-speech-class-method-11 (-> *talker-speech* 147)) + (talker-speech-class-method-11 (-> *talker-speech* 148)) + (talker-speech-class-method-11 (-> *talker-speech* 149)) + (talker-speech-class-method-11 (-> *talker-speech* 150)) + (talker-speech-class-method-11 (-> *talker-speech* 151)) + (talker-speech-class-method-11 (-> *talker-speech* 152)) + (talker-speech-class-method-11 (-> *talker-speech* 153)) + (talker-speech-class-method-11 (-> *talker-speech* 154)) + (talker-speech-class-method-11 (-> *talker-speech* 155)) + (talker-speech-class-method-11 (-> *talker-speech* 156)) + (talker-speech-class-method-11 (-> *talker-speech* 157)) + (talker-speech-class-method-11 (-> *talker-speech* 158)) + (talker-speech-class-method-11 (-> *talker-speech* 159)) + (talker-speech-class-method-11 (-> *talker-speech* 160)) + (add-setting! 'music 'danger3 0 0) + (set-setting! 'entity-name (res-lump-struct (-> self entity) 'camera-name structure) 0 0) + (set-setting! 'airlock #f 0 0) + (set-setting! 'minimap 'clear 0 128) + (set! (-> self hud-score) (ppointer->handle (process-spawn hud-big-score :init hud-init-by-other :to self))) + (set! (-> self hud-goal) (ppointer->handle (process-spawn hud-goal :init hud-init-by-other :to self))) + (set! (-> self hud-miss) (ppointer->handle (process-spawn hud-miss :init hud-init-by-other :to self))) + (set! (-> self game-start-time) (-> self clock frame-counter)) + (send-event *target* 'draw #f) + (set-setting! 'gun #f 0 0) + (set-setting! 'calm #t 0 0) + (set-setting! 'gem #f 0 0) + (let ((a0-50 (-> *part-id-table* 3429))) + (when a0-50 + (let ((v1-110 (get-field-spec-by-id a0-50 (sp-field-id spt-num)))) + (when v1-110 + (set! (-> v1-110 initial-valuef) 0.0) + (set! (-> v1-110 random-rangef) 0.0) + ) + ) + ) + ) + (let ((a0-51 (-> *part-id-table* 3437))) + (when a0-51 + (let ((v1-113 (get-field-spec-by-id a0-51 (sp-field-id spt-num)))) + (when v1-113 + (set! (-> v1-113 initial-valuef) 0.0) + (set! (-> v1-113 random-rangef) 0.0) + ) + ) + ) + ) + ) + (none) + ) + :exit (behavior () + (when (not (and (-> self next-state) (let ((v1-3 (-> self next-state name))) + (or (= v1-3 'active) (= v1-3 'attack) (= v1-3 'win) (= v1-3 'lose)) + ) + ) + ) + (format #t "score of ~f~%" (-> self score)) + (let ((gp-0 (-> self child))) + (while gp-0 + (if (type? (ppointer->process gp-0) onin-game-bubble) + (send-event (ppointer->process gp-0) 'die) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (remove-from-process *task-manager-engine* self) + (remove-setting! 'music) + (send-event (handle->process (-> self hud-score)) 'hide-and-die) + (send-event (handle->process (-> self hud-miss)) 'hide-and-die) + (send-event (handle->process (-> self hud-goal)) 'hide-and-die) + (remove-setting! 'entity-name) + (if (and *target* (logtest? (-> *target* focus-status) (focus-status grabbed))) + (process-release? *target*) + ) + (remove-setting! 'airlock) + (remove-setting! 'borrow) + (remove-setting! 'minimap) + (remove-setting! 'gun) + (remove-setting! 'calm) + (remove-setting! 'gem) + (persist-with-delay *setting-control* 'gun (seconds 0.5) 'gun #f 0.0 0) + (send-event *target* 'draw #t) + (let ((a0-39 (-> *part-id-table* 3429))) + (when a0-39 + (let ((v1-64 (get-field-spec-by-id a0-39 (sp-field-id spt-num)))) + (when v1-64 + (set! (-> v1-64 initial-valuef) 0.0) + (set! (-> v1-64 random-rangef) 1.0) + ) + ) + ) + ) + (let ((a0-41 (-> *part-id-table* 3437))) + (when a0-41 + (let ((v1-67 (get-field-spec-by-id a0-41 (sp-field-id spt-num)))) + (when v1-67 + (set! (-> v1-67 initial-valuef) 1.0) + (set! (-> v1-67 random-rangef) 0.0) + ) + ) + ) + ) + (game-info-method-28 *game-info* (game-score onin-game) (-> self score)) + (logclear! + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons up right down left l1 r1 triangle circle x square) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons up right down left l1 r1 triangle circle x square) + ) + (let ((a1-29 (new 'stack-no-clear 'array 'pointer 3))) + (set! (-> a1-29 2) (the-as pointer 'onin1)) + (set! (-> a1-29 1) (the-as pointer 'ctywide1)) + (set! (-> a1-29 0) (the-as pointer 'ctywide1)) + (want-sound-banks *load-state* (the-as (pointer symbol) a1-29)) + ) + ) + (none) + ) + :trans (behavior () + (cond + ((or (and *cheat-mode* (cpad-pressed? 0 r1)) + (and (>= (-> self score) (-> self point-win)) + (or (not (task-node-closed? (game-task-node city-play-onin-game-resolution))) + (>= (-> self miss-count) (-> self miss-max)) + ) + ) + ) + (go-virtual win) + ) + ((or (and *cheat-mode* (cpad-pressed? 0 l1)) (>= (-> self miss-count) (-> self miss-max))) + enter-state + #t + (go-virtual lose) + ) + ((and *cheat-mode* (cpad-pressed? 0 up)) + (sound-play-by-spec (static-sound-spec "beep" :fo-curve 1) (new-sound-id) (the-as vector #t)) + (set! (-> self wave-time) 0) + 0 + ) + ((and *cheat-mode* (cpad-pressed? 0 down)) + (sound-play-by-spec (static-sound-spec "beep" :fo-curve 1) (new-sound-id) (the-as vector #t)) + (seekl! (-> self wave) 0 2) + (set! (-> self wave-time) 0) + 0 + ) + ((cpad-pressed? 0 triangle) + (onin-game-method-27 self 0) + ) + ((cpad-pressed? 0 circle) + (onin-game-method-27 self 1) + ) + ((cpad-pressed? 0 x) + (onin-game-method-27 self 2) + ) + ((cpad-pressed? 0 square) + (onin-game-method-27 self 3) + ) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons up right down left l1 r1 triangle circle x square) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons up right down left l1 r1 triangle circle x square) + ) + (none) + ) + :code (behavior ((arg0 symbol)) + (ja-channel-set! 0) + (let ((gp-0 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-0) (seconds 1)) + (suspend) + ) + ) + (talker-spawn-func (-> *talker-speech* 145) *entity-pool* (target-pos 0) (the-as region #f)) + (sleep-code) + (none) + ) + :post (behavior () + (onin-game-method-25 self) + (ja-post) + (none) + ) + ) + +(defstate lose (onin-game) + :virtual #t + :exit (-> (method-of-type onin-game active) exit) + :code (behavior () + (let ((gp-0 (-> self child))) + (while gp-0 + (if (type? (ppointer->process gp-0) onin-game-bubble) + (send-event (ppointer->process gp-0) 'attack #t) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (let* ((v1-14 (-> *game-info* sub-task-list 151)) + (gp-1 (if (-> v1-14 info) + (-> v1-14 info manager) + (the-as handle #f) + ) + ) + ) + (if (not (handle->process gp-1)) + (auto-save-user) + ) + (let* ((v1-21 (rand-vu-int-count 7)) + (s5-1 (cond + ((zero? v1-21) + (talker-spawn-func (-> *talker-speech* 163) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-21 1) + (talker-spawn-func (-> *talker-speech* 164) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-21 2) + (talker-spawn-func (-> *talker-speech* 165) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-21 3) + (talker-spawn-func (-> *talker-speech* 166) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-21 4) + (talker-spawn-func (-> *talker-speech* 167) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-21 5) + (talker-spawn-func (-> *talker-speech* 168) *entity-pool* (target-pos 0) (the-as region #f)) + ) + (else + (talker-spawn-func (-> *talker-speech* 169) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + ) + (while (nonzero? (get-status *gui-control* (the-as sound-id s5-1))) + (suspend) + ) + ) + (send-event (handle->process gp-1) 'fail) + ) + (if (task-node-closed? (game-task-node city-play-onin-game-resolution)) + (set-blackout-frames (seconds 0.1)) + (sleep-code) + ) + (none) + ) + :post (behavior () + (onin-game-method-26 self) + (none) + ) + ) + +(defstate win (onin-game) + :virtual #t + :exit (-> (method-of-type onin-game active) exit) + :code (behavior () + (let ((gp-0 (-> self child))) + (while gp-0 + (if (type? (ppointer->process gp-0) onin-game-bubble) + (send-event (ppointer->process gp-0) 'attack #t) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (while (nonzero? (lookup-gui-connection-id *gui-control* (the-as string #f) (gui-channel daxter) (gui-action none))) + (suspend) + ) + (when (and (task-node-closed? (game-task-node city-play-onin-game-resolution)) + (not (task-node-closed? (game-task-node city-play-onin-game-skill))) + ) + (let ((gp-1 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-1) (seconds 1)) + (suspend) + ) + ) + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f)) + '(birth-pickup ("pecker-npc-1" "head") skill FACT_SUPER_SKILL_INC flags (suck-in)) + ) + (task-node-close! (game-task-node city-play-onin-game-skill)) + ) + (let* ((s5-1 (if (zero? (rand-vu-int-count 2)) + (talker-spawn-func (-> *talker-speech* 161) *entity-pool* (target-pos 0) (the-as region #f)) + (talker-spawn-func (-> *talker-speech* 162) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + (v1-31 (-> *game-info* sub-task-list 151)) + (gp-4 (if (-> v1-31 info) + (-> v1-31 info manager) + (the-as handle #f) + ) + ) + ) + (if (not (handle->process gp-4)) + (auto-save-user) + ) + (while (nonzero? (get-status *gui-control* (the-as sound-id s5-1))) + (suspend) + ) + (let ((s5-3 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) s5-3) (seconds 2)) + (suspend) + ) + ) + (set-blackout-frames (seconds 0.1)) + (send-event (handle->process gp-4) 'complete) + ) + (none) + ) + :post (-> (method-of-type onin-game lose) post) + ) + +;; WARN: Return type mismatch object vs none. +(defbehavior onin-game-init onin-game ((arg0 entity)) + (set-blackout-frames (seconds 0.1)) + (stack-size-set! (-> self main-thread) 512) + (set! (-> self entity) (the-as entity-actor arg0)) + (set! (-> self level) (level-get *level* 'onintent)) + (set! (-> self root) (new 'process 'trsqv)) + (set-vector! (-> self root trans) 2918698.5 36044.8 3025589.5 1.0) + (logclear! (-> self mask) (process-mask actor-pause)) + (initialize-skeleton + self + (the-as skeleton-group (art-group-get-by-name *level* "skel-sidekick-highres" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (logior! (-> self skel status) (joint-control-status blend-shape eye-anim)) + (set-setting! 'minimap 'clear 0 128) + (set! (-> self hud-score) (the-as handle #f)) + (set! (-> self hud-goal) (the-as handle #f)) + (set! (-> self hud-miss) (the-as handle #f)) + (set! (-> self last-type) -1) + (if (not (task-node-closed? (game-task-node city-play-onin-game-resolution))) + (set! (-> self game) (the-as (inline-array onin-game-event) (-> *onin-game-data* 0))) + (set! (-> self game) (the-as (inline-array onin-game-event) (-> *onin-game-data* 1))) + ) + (set! (-> self miss-max) (the int (* 0.0033333334 (the float (-> self game 0 min-event))))) + (set! (-> self point-win) (the float (-> self game 0 max-count))) + (set! (-> *game-info* score) 0.0) + (set! (-> *game-info* goal) (-> self point-win)) + (set! (-> *game-info* miss) 0.0) + (set! (-> *game-info* miss-max) (the float (-> self miss-max))) + (go-virtual wait-for-start) + (none) + ) diff --git a/goal_src/jak2/levels/city/palace/ctypal-obs.gc b/goal_src/jak2/levels/city/palace/ctypal-obs.gc index a1bc0b3df9..c71bedef63 100644 --- a/goal_src/jak2/levels/city/palace/ctypal-obs.gc +++ b/goal_src/jak2/levels/city/palace/ctypal-obs.gc @@ -5,6 +5,8 @@ ;; name in dgo: ctypal-obs ;; dgos: CPA +;; og:update-with-merge:substr + ;; DECOMP BEGINS (deftype water-anim-ctypal (water-anim) @@ -86,6 +88,7 @@ This commonly includes things such as: - collision information - loading the skeleton group / bones - sounds" + (stack-size-set! (-> obj main-thread) 1024) (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) (set! (-> s5-0 penetrated-by) (penetrate)) (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 2) 0))) diff --git a/goal_src/jak2/levels/city/port/ctyport-part.gc b/goal_src/jak2/levels/city/port/ctyport-part.gc index f1c6c57088..41ffe45432 100644 --- a/goal_src/jak2/levels/city/port/ctyport-part.gc +++ b/goal_src/jak2/levels/city/port/ctyport-part.gc @@ -7,3 +7,3825 @@ ;; DECOMP BEGINS +(deftype ctyport-part (part-spawner) + () + :heap-base #x30 + :method-count-assert 16 + :size-assert #xb0 + :flag-assert #x10003000b0 + ) + + +(defpartgroup group-ctyport-roundvent + :id 929 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 12) + :parts ((sp-item 4148 :fade-after (meters 250) :falloff-to (meters 180) :flags (bit7))) + ) + +(defpartgroup group-ctyport-roundvent-small + :id 930 + :flags (unk-4 unk-7) + :bounds (static-bspherem 0 0 0 12) + :scale (0.0 0.0 0.0) + :parts ((sp-item 4148 :fade-after (meters 250) :falloff-to (meters 150) :flags (bit7))) + ) + +(defpart 4148 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -2) (meters 4) 1.0) + (sp-rnd-int-flt spt-y (meters -1.5) 3 6144.0) + (sp-rnd-flt spt-z (meters -2) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 4) (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 64.0 64.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.083333336) (meters -0.016666668) 1.0) + (sp-rnd-flt spt-vel-z (meters 0.06666667) (meters 0.06666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.023333333) 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-a 0.64) + (sp-rnd-flt spt-accel-y 3.4133334 3.4133334 1.0) + (sp-rnd-flt spt-friction 0.95 0.025 1.0) + (sp-int spt-timer 250) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 25 24 1) + (sp-launcher-by-id spt-next-launcher 4149) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4149 + :init-specs ((sp-rnd-flt spt-fade-a -0.16 -0.16 1.0)) + ) + +(defpartgroup group-ctyport-low-vent + :id 931 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 12) + :parts ((sp-item 4150 :fade-after (meters 200) :falloff-to (meters 140) :flags (bit7)) + (sp-item 4151 :fade-after (meters 200) :falloff-to (meters 140) :flags (bit7)) + (sp-item 4152 :fade-after (meters 200) :falloff-to (meters 140) :flags (bit7)) + ) + ) + +(defpart 4150 + :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-int-flt spt-x (meters -0.1) 9829 1.0) + (sp-rnd-flt spt-y (meters 0.6) (meters 0.7) 1.0) + (sp-flt spt-z (meters 1.6)) + (sp-rnd-flt spt-scale-x (meters 0.75) (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 0.0) + (sp-rnd-flt spt-vel-z (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.005) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.32) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-int-plain-rnd spt-next-time 25 24 1) + (sp-launcher-by-id spt-next-launcher 4153) + (sp-rnd-flt spt-launchrot-x (degrees -5.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -5.0) (degrees 10.0) 1.0) + (sp-flt spt-rotate-y (degrees 45.0)) + ) + ) + +(defpart 4151 + :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-int-flt spt-x (meters -1.2) 9829 1.0) + (sp-rnd-flt spt-y (meters 0.6) (meters 0.7) 1.0) + (sp-flt spt-z (meters 1.1)) + (sp-rnd-flt spt-scale-x (meters 0.75) (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 0.0) + (sp-rnd-flt spt-vel-z (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.005) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.32) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-int-plain-rnd spt-next-time 25 24 1) + (sp-launcher-by-id spt-next-launcher 4153) + (sp-rnd-flt spt-launchrot-x (degrees -5.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -5.0) (degrees 10.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4152 + :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-int-flt spt-x (meters -2.3) 9829 1.0) + (sp-rnd-flt spt-y (meters 0.6) (meters 0.7) 1.0) + (sp-flt spt-z (meters 1.6)) + (sp-rnd-flt spt-scale-x (meters 0.75) (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 0.0) + (sp-rnd-flt spt-vel-z (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.005) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.32) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-int-plain-rnd spt-next-time 25 24 1) + (sp-launcher-by-id spt-next-launcher 4153) + (sp-rnd-flt spt-launchrot-x (degrees -5.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -5.0) (degrees 10.0) 1.0) + (sp-flt spt-rotate-y (degrees -45.0)) + ) + ) + +(defpart 4153 + :init-specs ((sp-rnd-flt spt-fade-a -0.032 -0.032 1.0)) + ) + +(defpartgroup group-ctyport-waterspout + :id 932 + :flags (unk-4) + :bounds (static-bspherem 0 -8 0 24) + :parts ((sp-item 4154 :fade-after (meters 140) :falloff-to (meters 120) :flags (bit7)) + (sp-item 4155 :fade-after (meters 100) :falloff-to (meters 80) :flags (bit7)) + ) + ) + +(defpart 4156 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x52d)) + (sp-rnd-flt spt-num 3.0 1.0 1.0) + (sp-rnd-flt spt-x (meters -0.05) (meters 0.1) 1.0) + (sp-rnd-flt spt-y (meters -0.05) (meters 0.1) 1.0) + (sp-flt spt-z (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.1) 1.0) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 8.192) + (sp-rnd-flt spt-vel-z (meters 0.1) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-fade-a -0.14222223 -0.42666668 1.0) + (sp-rnd-flt spt-accel-y -13.653334 1.3653333 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 75) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12 use-global-acc) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int-plain-rnd spt-next-time 0 224 1) + (sp-launcher-by-id spt-next-launcher 4157) + (sp-rnd-flt spt-launchrot-x (degrees -7.0000005) (degrees 14.000001) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -7.0000005) (degrees 14.000001) 1.0) + ) + ) + +(defpart 4157 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 4158) + ) + ) + +(defpart 4158 + :init-specs ((sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.0) + (sp-int-plain-rnd spt-next-time 0 224 1) + (sp-launcher-by-id spt-next-launcher 4157) + ) + ) + +(defun check-drop-level-ctyport-drop-userdata ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) + (when (< (-> arg2 vector 0 y) (-> arg1 user-float)) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (sp-kill-particle arg0 arg1) + (set-vector! s3-0 (-> arg2 vector 0 x) (-> arg1 user-float) (-> arg2 vector 0 z) 1.0) + (let ((t9-1 sp-launch-particles-var) + (a0-3 *sp-particle-system-2d*) + (a1-2 (-> *part-id-table* 4159)) + (a2-1 *launch-matrix*) + ) + (set! (-> a2-1 trans quad) (-> s3-0 quad)) + (t9-1 a0-3 a1-2 a2-1 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + (let ((t9-2 sp-launch-particles-var) + (a0-4 *sp-particle-system-2d*) + (a1-3 (-> *part-id-table* 4160)) + (a2-2 *launch-matrix*) + ) + (set! (-> a2-2 trans quad) (-> s3-0 quad)) + (t9-2 a0-4 a1-3 a2-2 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + (let ((t9-3 sp-launch-particles-var) + (a0-5 *sp-particle-system-3d*) + (a1-4 (-> *part-id-table* 4161)) + (a2-3 *launch-matrix*) + ) + (set! (-> a2-3 trans quad) (-> s3-0 quad)) + (t9-3 a0-5 a1-4 a2-3 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + ) + ) + (sparticle-motion-blur arg0 arg1 (the-as vector arg2)) + (none) + ) + +(defpart 4154 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x52d)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -0.05) (meters 0.1) 1.0) + (sp-rnd-flt spt-y (meters -0.05) (meters 0.1) 1.0) + (sp-flt spt-z (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.1) 1.0) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 8.192) + (sp-rnd-flt spt-vel-z (meters 0.1) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-fade-a -0.14222223 -0.42666668 1.0) + (sp-rnd-flt spt-accel-y -13.653334 1.3653333 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12 use-global-acc) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-drop-level-ctyport-drop-userdata) + (sp-int-plain-rnd spt-next-time 0 224 1) + (sp-launcher-by-id spt-next-launcher 4157) + (sp-rnd-flt spt-launchrot-x (degrees -7.0000005) (degrees 14.000001) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -7.0000005) (degrees 14.000001) 1.0) + ) + ) + +(defpart 4155 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x52d)) + (sp-rnd-flt spt-num 0.0 0.5 1.0) + (sp-flt spt-z (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.1) 1.0) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 8.192) + (sp-rnd-flt spt-vel-z (meters 0.1) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-fade-a -0.14222223 -0.42666668 1.0) + (sp-rnd-flt spt-accel-y -13.653334 1.3653333 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12 use-global-acc) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-drop-level-ctyport-drop-userdata) + (sp-int-plain-rnd spt-next-time 0 224 1) + (sp-launcher-by-id spt-next-launcher 4157) + (sp-rnd-flt spt-launchrot-x (degrees -15.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -15.0) (degrees 30.0) 1.0) + ) + ) + +(defpart 4159 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x52d)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.1) 1.0) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.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.026666667) (meters 0.026666667) 1.0) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -8.192 -0.68266666 1.0) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int-plain-rnd spt-next-time 0 224 1) + (sp-launcher-by-id spt-next-launcher 4157) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpart 4160 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -2) (meters 4) 1.0) + (sp-rnd-flt spt-y (meters 0.25) (meters 0.75) 1.0) + (sp-rnd-flt spt-z (meters -2) (meters 4) 1.0) + (sp-rnd-flt spt-scale-x (meters 8) (meters 0.3) 1.0) + (sp-rnd-flt spt-scale-y (meters 4) (meters 0.3) 1.0) + (sp-rnd-flt spt-r 64.0 64.0 1.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-flt spt-b 16.0) + (sp-flt spt-a 0.0) + (sp-flt spt-vel-y (meters 0)) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.1) (degrees 0.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.21333334) + (sp-rnd-flt spt-accel-y 0.0 0.27306667 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-int-plain-rnd spt-next-time 60 14 1) + (sp-launcher-by-id spt-next-launcher 4162) + ) + ) + +(defpart 4162 + :init-specs ((sp-flt spt-fade-a -0.21333334)) + ) + +(defpart 4161 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2c :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.2)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-rnd-flt spt-b 16.0 16.0 1.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters -0.006666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-scalevel-y (meters 0.026666667) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-fade-a -0.96 -0.96 1.0) + (sp-int spt-timer 100) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +(defpartgroup group-ctyport-chimney + :id 933 + :flags (unk-8) + :bounds (static-bspherem 0 0 -10 64) + :parts ((sp-item 4163 :fade-after (meters 950) :falloff-to (meters 950)) + (sp-item 4164 :fade-after (meters 900) :flags (bit6)) + ) + ) + +(defpart 4164 + :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 1)) + (sp-rnd-flt spt-scale-x (meters 24) (meters 1.1) 1.0) + (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 240.0) + (sp-flt spt-b 100.0) + (sp-rnd-flt spt-a 12.0 4.0 1.0) + (sp-flt spt-omega 3688857.5) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 16384.0) + ) + ) + +(defpart 4163 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-rnd-flt spt-num 0.0 0.5 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (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 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.03) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.053333335) (meters 0.053333335) 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.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-rnd-flt spt-fade-a -0.053333335 -0.053333335 1.0) + (sp-rnd-flt spt-accel-x -4.096 -1.3653333 1.0) + (sp-rnd-flt spt-accel-y 0.4096 0.4096 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 2400) + (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-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 4165) + ) + ) + +(defpart 4165 + :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 10 39 1) + (sp-launcher-by-id spt-next-launcher 4166) + ) + ) + +(defpart 4166 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.14666666) + (sp-flt spt-fade-g -0.7866667) + (sp-flt spt-fade-b -0.88) + (sp-int-plain-rnd spt-next-time 105 44 1) + (sp-launcher-by-id spt-next-launcher 4167) + ) + ) + +(defpart 4167 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.013333334) 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-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 4168) + ) + ) + +(defpart 4168 + :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.024)) + ) + +(defpartgroup group-ctyport-chimney-smoke + :id 934 + :flags (unk-8) + :bounds (static-bspherem 0 0 -12 48) + :parts ((sp-item 4169 :fade-after (meters 950) :falloff-to (meters 950))) + ) + +(defpart 4169 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-rnd-flt spt-num 0.0 0.5 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (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-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-rnd-flt spt-a 24.0 24.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.03) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.026666667) 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.026666667 -0.026666667 1.0) + (sp-rnd-flt spt-accel-x -4.096 -1.3653333 1.0) + (sp-rnd-flt spt-accel-y 0.4096 0.4096 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 1800) + (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-plain-rnd spt-next-time 75 4 1) + (sp-launcher-by-id spt-next-launcher 4170) + ) + ) + +(defpart 4170 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int-plain-rnd spt-next-time 105 44 1) + (sp-launcher-by-id spt-next-launcher 4171) + ) + ) + +(defpart 4171 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + ) + ) + +(defpartgroup group-ctyport-drip + :id 935 + :duration (seconds 0.017) + :flags (use-local-clock unk-4 unk-6) + :bounds (static-bspherem 0 -12 0 24) + :rotate ((degrees 0) (degrees 8) (degrees 0)) + :parts ((sp-item 4172 :fade-after (meters 160) :falloff-to (meters 60) :flags (bit7))) + ) + +(defpart 4172 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x52d)) + (sp-flt spt-num 0.1) + (sp-flt spt-y (meters 0.3)) + (sp-flt spt-z (meters -0.45)) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 6.144) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12 use-global-acc) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-drop-level-ctyport-drop-userdata) + (sp-int-plain-rnd spt-next-time 0 599 1) + (sp-launcher-by-id spt-next-launcher 4173) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4173 + :init-specs ((sp-flt spt-accel-y -5.4613333) (sp-flt spt-friction 0.0)) + ) + +(defpartgroup group-ctyport-blue-floor-vent + :id 936 + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4174 :fade-after (meters 200) :flags (bit6)) + (sp-item 4175 :fade-after (meters 100) :falloff-to (meters 100)) + ) + ) + +(defpart 4174 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-flt spt-scale-x (meters 12)) + (sp-flt spt-rot-x 12288.0) + (sp-flt spt-scale-y (meters 24)) + (sp-flt spt-r 32.0) + (sp-rnd-flt spt-g 192.0 16.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 822067.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 4096.0) + ) + ) + +(defpart 4175 + :init-specs ((sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters 1) (meters 2.5) 1.0) + (sp-int spt-rot-x 7) + (sp-flt spt-r 4096.0) + (sp-flt spt-g 3072.0) + (sp-flt spt-b 2867.2) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.006666667) 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 300) + (sp-cpuinfo-flags distort) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 4176) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +(defpart 4176 + :init-specs ((sp-flt spt-fade-b 1.3653333)) + ) + +(defpartgroup group-ctyport-blue-floor-vent-small + :id 937 + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4177 :fade-after (meters 200) :flags (bit6)) + (sp-item 4178 :fade-after (meters 100) :falloff-to (meters 100)) + ) + ) + +(defpart 4177 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 12288.0) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 32.0) + (sp-rnd-flt spt-g 192.0 16.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 822067.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 4096.0) + ) + ) + +(defpart 4178 + :init-specs ((sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters -2) (meters 4) 1.0) + (sp-int spt-rot-x 7) + (sp-flt spt-r 2457.6) + (sp-flt spt-g 1843.2) + (sp-flt spt-b 1720.32) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 300) + (sp-cpuinfo-flags distort) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 4176) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +(defpartgroup group-ctyport-red-big-lights-1 + :id 938 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5)) + ) + +(defpartgroup group-ctyport-red-big-lights-2 + :id 939 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 200)) + ) + +(defpartgroup group-ctyport-red-big-lights-3 + :id 940 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 400)) + ) + +(defpartgroup group-ctyport-red-big-lights-4 + :id 941 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 600)) + ) + +(defpartgroup group-ctyport-red-big-lights-5 + :id 942 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 800)) + ) + +(defpartgroup group-ctyport-red-big-lights-6 + :id 943 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 1000)) + ) + +(defpart 4179 + :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-flt spt-scale-y (meters 4)) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 4918067.0) + (sp-flt spt-scalevel-x (meters 0.05)) + (sp-flt spt-scalevel-y (meters 0.04)) + (sp-flt spt-fade-a 0.04) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-int spt-next-time 100) + (sp-launcher-by-id spt-next-launcher 4180) + ) + ) + +(defpart 4180 + :init-specs ((sp-flt spt-scale-y (meters 8)) + (sp-flt spt-a 12.0) + (sp-flt spt-scalevel-x (meters 0)) + (sp-flt spt-scalevel-y (meters 0)) + (sp-flt spt-fade-a 0.0) + (sp-int spt-next-time 600) + (sp-launcher-by-id spt-next-launcher 4181) + ) + ) + +(defpart 4181 + :init-specs ((sp-flt spt-scalevel-x (meters -0.05)) + (sp-flt spt-scalevel-y (meters -0.04)) + (sp-flt spt-fade-a -0.04) + (sp-int spt-next-time 100) + (sp-launcher-by-id spt-next-launcher 4182) + ) + ) + +(defpart 4182 + :init-specs ((sp-flt spt-scale-y (meters 4)) + (sp-flt spt-a 8.0) + (sp-flt spt-scalevel-x (meters 0)) + (sp-flt spt-scalevel-y (meters 0)) + (sp-flt spt-fade-a 0.0) + ) + ) + +(defpartgroup group-ctyport-blue-big-lights-1 + :id 944 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5)) + ) + +(defpartgroup group-ctyport-blue-big-lights-2 + :id 945 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 200)) + ) + +(defpartgroup group-ctyport-blue-big-lights-3 + :id 946 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 400)) + ) + +(defpartgroup group-ctyport-blue-big-lights-4 + :id 947 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 600)) + ) + +(defpartgroup group-ctyport-blue-big-lights-5 + :id 948 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 800)) + ) + +(defpartgroup group-ctyport-blue-big-lights-6 + :id 949 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 1000)) + ) + +(defpart 4183 + :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-flt spt-scale-y (meters 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 8.0) + (sp-flt spt-omega 4918067.0) + (sp-flt spt-scalevel-x (meters 0.05)) + (sp-flt spt-scalevel-y (meters 0.04)) + (sp-flt spt-fade-a 0.04) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-int spt-next-time 100) + (sp-launcher-by-id spt-next-launcher 4180) + ) + ) + +(defpartgroup group-ctyport-red-lights + :id 950 + :flags (unk-8) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4184 :fade-after (meters 80) :flags (bit6)) (sp-item 4185 :fade-after (meters 120) :flags (bit6))) + ) + +(defpart 4184 + :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.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 32.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 2048.0) + ) + ) + +(defpart 4185 + :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 7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 494387.2) + (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-ctyport-blue-lights + :id 951 + :flags (unk-8) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4186 :fade-after (meters 80) :flags (bit6)) (sp-item 4187 :fade-after (meters 120) :flags (bit6))) + ) + +(defpart 4186 + :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.05)) + (sp-rnd-flt spt-scale-x (meters 1.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 64.0 32.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 2048.0) + ) + ) + +(defpart 4187 + :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 7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 494387.2) + (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-ctyport-long-blue-lights + :id 952 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4188 :fade-after (meters 60) :flags (bit6 bit7)) + (sp-item 4189 :fade-after (meters 100) :flags (bit6 bit7)) + (sp-item 4190 :fade-after (meters 60) :flags (bit6 bit7)) + (sp-item 4191 :fade-after (meters 100) :flags (bit6 bit7)) + (sp-item 4192 :fade-after (meters 60) :flags (bit6 bit7)) + (sp-item 4193 :fade-after (meters 100) :flags (bit6 bit7)) + ) + ) + +(defpart 4188 + :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 1.5)) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 247808.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4189 + :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 1.5)) + (sp-rnd-flt spt-scale-x (meters 8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.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 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4190 + :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.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 247808.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4191 + :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 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.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 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4192 + :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 -1.5)) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 247808.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4193 + :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 -1.5)) + (sp-rnd-flt spt-scale-x (meters 8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.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 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-green-lights + :id 953 + :flags (unk-8) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4194 :fade-after (meters 100) :flags (bit6)) (sp-item 4195 :fade-after (meters 140) :flags (bit6))) + ) + +(defpart 4194 + :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.4)) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (sp-rnd-flt spt-scale-y (meters 3) (meters 0.1) 1.0) + (sp-flt spt-r 0.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 24.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 2048.0) + ) + ) + +(defpart 4195 + :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.05)) + (sp-rnd-flt spt-scale-x (meters 6.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (sp-rnd-flt spt-scale-y (meters 12) (meters 0.1) 1.0) + (sp-flt spt-r 0.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 576307.2) + (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-ctyport-green-lights-2 + :id 954 + :flags (unk-8) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4196 :fade-after (meters 100) :flags (bit6)) (sp-item 4197 :fade-after (meters 140) :flags (bit6))) + ) + +(defpart 4196 + :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.1)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (sp-rnd-flt spt-scale-y (meters 2) (meters 0.1) 1.0) + (sp-flt spt-r 0.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 24.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 0.0) + ) + ) + +(defpart 4197 + :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.01)) + (sp-rnd-flt spt-scale-x (meters 4.3) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (sp-rnd-flt spt-scale-y (meters 8) (meters 0.1) 1.0) + (sp-flt spt-r 0.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-flt spt-a 6.0) + (sp-flt spt-omega 576307.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +(defpartgroup group-ctyport-sign-crimson-4x8 + :id 955 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4198 :flags (is-3d launch-asap bit7)) + (sp-item 4199 :flags (is-3d launch-asap bit7)) + (sp-item 4200 :fade-after (meters 200) :flags (bit6) :hour-mask #b11111111111111000000) + ) + ) + +(defpart 4200 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 48) (meters 0.1) 1.0) + (sp-flt spt-rot-x 2048.0) + (sp-rnd-flt spt-scale-y (meters 32) (meters 0.1) 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 8.0 4.0 1.0) + (sp-flt spt-omega 822476.8) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + ) + ) + +(defpart 4198 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1b :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01b00 -2139062144 0 1 #x52d01b00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4199 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1b :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01b00 -2139062144 0 1 #x52d01b00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-sign-hiphog-4x4 + :id 956 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 4) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4201 :flags (is-3d launch-asap bit7)) + (sp-item 4202 :flags (is-3d launch-asap bit7)) + (sp-item 4203 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111111111100000) + ) + ) + +(defpart 4203 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 32) (meters 0.1) 1.0) + (sp-flt spt-rot-x 2048.0) + (sp-rnd-flt spt-scale-y (meters 32) (meters 0.1) 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 8.0 4.0 1.0) + (sp-flt spt-omega 822476.8) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + ) + ) + +(defpart 4201 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x5 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00500 -2139062144 0 1 #x52d00500 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4202 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x5 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00500 -2139062144 0 1 #x52d00500 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-sign-blank-4x4 + :id 957 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 4) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4204 :flags (is-3d launch-asap bit7)) + (sp-item 4205 :flags (is-3d launch-asap bit7)) + (sp-item 4203 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111111111100000) + ) + ) + +(defpart 4204 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00100 -2139062144 0 1 #x52d00100 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4205 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00100 -2139062144 0 1 #x52d00100 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-sign-vert-right-arrow-4x8 + :id 958 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4206 :flags (is-3d launch-asap bit7)) + (sp-item 4207 :flags (is-3d launch-asap bit7)) + (sp-item 4200 :fade-after (meters 200) :flags (bit6) :hour-mask #b11111111111111000000) + ) + ) + +(defpart 4206 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01100 -2139062144 0 1 #x52d01100 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4207 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01100 -2139062144 0 1 #x52d01100 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-sign-hiphog-entrance-4x8 + :id 959 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4208 :flags (is-3d launch-asap bit7)) + (sp-item 4209 :flags (is-3d launch-asap bit7)) + (sp-item 4200 :fade-after (meters 200) :flags (bit6) :hour-mask #b11111111111111000000) + ) + ) + +(defpart 4208 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01900 -2139062144 0 1 #x52d01900 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4209 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01900 -2139062144 0 1 #x52d01900 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-sign-loading-left-8x4 + :id 960 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4210 :flags (is-3d launch-asap bit7)) + (sp-item 4211 :flags (is-3d launch-asap bit7)) + (sp-item 4212 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111110000000) + ) + ) + +(defpart 4212 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 32) (meters 0.1) 1.0) + (sp-flt spt-rot-x 2048.0) + (sp-rnd-flt spt-scale-y (meters 48) (meters 0.1) 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 8.0 4.0 1.0) + (sp-flt spt-omega 822476.8) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4210 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00b00 -2139062144 0 1 #x52d00b00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4211 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00b00 -2139062144 0 1 #x52d00b00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-sign-holding-right-8x4 + :id 961 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4213 :flags (is-3d launch-asap bit7)) + (sp-item 4214 :flags (is-3d launch-asap bit7)) + (sp-item 4212 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111110000000) + ) + ) + +(defpart 4213 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x7 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00700 -2139062144 0 1 #x52d00700 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4214 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x7 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00700 -2139062144 0 1 #x52d00700 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-sign-arrows-8x4 + :id 962 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4215 :flags (is-3d launch-asap bit7)) + (sp-item 4216 :flags (is-3d launch-asap bit7)) + (sp-item 4212 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111110000000) + ) + ) + +(defpart 4215 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00f00 -2139062144 0 1 #x52d00f00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4216 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00f00 -2139062144 0 1 #x52d00f00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-sign-krew-international-8x4 + :id 963 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4217 :flags (is-3d launch-asap bit7)) + (sp-item 4218 :flags (is-3d launch-asap bit7)) + (sp-item 4212 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111110000000) + ) + ) + +(defpart 4217 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00900 -2139062144 0 1 #x52d00900 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4218 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00900 -2139062144 0 1 #x52d00900 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-sign-no-unloading-8x4 + :id 964 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4219 :flags (is-3d launch-asap bit7)) + (sp-item 4220 :flags (is-3d launch-asap bit7)) + (sp-item 4212 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111110000000) + ) + ) + +(defpart 4219 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xd :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00d00 -2139062144 0 1 #x52d00d00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4220 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xd :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00d00 -2139062144 0 1 #x52d00d00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpartgroup group-ctyport-hiphog-neon + :id 965 + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4221 :fade-after (meters 350) :flags (is-3d bit6) :period 600 :length 300) + (sp-item 11 :flags (is-3d bit6) :period 600 :length 300 :offset 300) + (sp-item 4222 :fade-after (meters 400) :flags (bit6) :period 600 :length 300 :offset 300) + ) + ) + +(defpart 4222 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-rnd-flt spt-scale-x (meters 28) (meters 0.1) 1.0) + (sp-flt spt-rot-x 18432.0) + (sp-rnd-flt spt-scale-y (meters 38) (meters 0.1) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 8.0 4.0 1.0) + (sp-flt spt-omega 1641676.8) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + ) + ) + +(defpart 4221 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x15 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-flt spt-z (meters 0.25)) + (sp-flt spt-scale-x (meters 24)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 116.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-flt spt-rotate-y (degrees 33.436)) + ) + ) + +(defpart 11 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x16 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-flt spt-z (meters 0.25)) + (sp-flt spt-scale-x (meters 24)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-flt spt-rotate-y (degrees 33.436)) + ) + ) + +(defpartgroup group-ctyport-hiphog-neon-daxter + :id 966 + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4223 :fade-after (meters 350) :flags (is-3d bit6) :period 600 :length 300) + (sp-item 4224 :flags (is-3d bit6) :period 600 :length 300 :offset 300) + (sp-item 4225 :fade-after (meters 400) :flags (bit6) :period 600 :length 300 :offset 300) + ) + ) + +(defpart 4225 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-rnd-flt spt-scale-x (meters 28) (meters 0.1) 1.0) + (sp-flt spt-rot-x 18432.0) + (sp-rnd-flt spt-scale-y (meters 38) (meters 0.1) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 8.0 4.0 1.0) + (sp-flt spt-omega 1641676.8) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + ) + ) + +(defpart 4223 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-flt spt-z (meters 0.25)) + (sp-flt spt-scale-x (meters 24)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 116.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-flt spt-rotate-y (degrees 33.436)) + ) + ) + +(defpart 4224 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-flt spt-z (meters 0.25)) + (sp-flt spt-scale-x (meters 24)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-flt spt-rotate-y (degrees 33.436)) + ) + ) + +(define *hiphog-exterior-marquee* + (new 'static 'boxed-array :type object + (the binteger 25) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w :x #x1ffffff)) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w)) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w) + (new 'static 'vector4w :x #x1000001) + (new 'static 'vector4w :x #x1800003) + (new 'static 'vector4w :x #x1c00007) + (new 'static 'vector4w :x #x1e0000f) + (new 'static 'vector4w :x #x1f0001f) + (new 'static 'vector4w :x #x1f8003f) + (new 'static 'vector4w :x #x1fc007f) + (new 'static 'vector4w :x #x1fe00ff) + (new 'static 'vector4w :x #x1ff01ff) + (new 'static 'vector4w :x #x1ff83ff) + (new 'static 'vector4w :x #x1ffc7ff) + (new 'static 'vector4w :x #x1ffcfff) + (new 'static 'vector4w :x #x1ffffff) + ) + (new 'static 'boxed-array :type object + (the binteger 3) + (new 'static 'vector4w) + (new 'static 'vector4w :x #x3000) + (new 'static 'vector4w :x #x7800) + (new 'static 'vector4w :x #xcc00) + (new 'static 'vector4w :x #xc600) + (new 'static 'vector4w :x #x18300) + (new 'static 'vector4w :x #x30180) + (new 'static 'vector4w :x #x600c0) + (new 'static 'vector4w :x #xc0060) + (new 'static 'vector4w :x #x180030) + (new 'static 'vector4w :x #x300018) + (new 'static 'vector4w :x #x60000c) + (new 'static 'vector4w :x #xc00006) + (new 'static 'vector4w :x #x1800003) + (new 'static 'vector4w :x #x1000001) + (new 'static 'vector4w) + ) + (new 'static 'boxed-array :type object + (the binteger 3) + (new 'static 'vector4w :x #x8008) + (new 'static 'vector4w :x #x200100) + (new 'static 'vector4w :x #x4002) + (new 'static 'vector4w :x #x420400) + (new 'static 'vector4w :x #x80040) + (new 'static 'vector4w :x #x802004) + (new 'static 'vector4w :x #x100800) + (new 'static 'vector4w :x #x1010020) + (new 'static 'vector4w :x #x40081) + (new 'static 'vector4w :x #x1210) + ) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w) + (new 'static 'vector4w :x 64) + (new 'static 'vector4w :x #xe0) + (new 'static 'vector4w :x #x1f0) + (new 'static 'vector4w :x #x3f8) + (new 'static 'vector4w :x #x7fc) + (new 'static 'vector4w :x #xffe) + (new 'static 'vector4w :x #x1fff) + (new 'static 'vector4w :x #x1fff) + ) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w :x #x222000) + (new 'static 'vector4w :x #x444000) + (new 'static 'vector4w :x #x888000) + (new 'static 'vector4w :x #x1110000) + ) + (new 'static 'boxed-array :type object + (the binteger 15) + (new 'static 'vector4w :x #x1ffe000) + (new 'static 'vector4w :x #x1fff) + ) + ) + ) + +(defpartgroup group-ctyport-hiphog-marquee + :id 967 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 24) + :rotate ((degrees 0) (degrees -3.942222) (degrees 0)) + :parts ((sp-item 4226 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4227 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4228 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4229 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4230 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4231 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4232 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4233 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4234 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4235 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4236 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4237 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4238 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4239 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4240 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4241 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4242 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4243 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4244 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4245 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4246 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4247 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4248 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4249 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4250 :flags (is-3d launch-asap bit6 bit7)) + ) + ) + +(defpart 4226 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + 0 + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -54.000004)) + ) + ) + +(defpart 4227 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 1) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -45.0)) + ) + ) + +(defpart 4228 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 2) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -36.0)) + ) + ) + +(defpart 4229 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 3) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -27.000002)) + ) + ) + +(defpart 4230 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 4) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -18.0)) + ) + ) + +(defpart 4231 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 5) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -9.0)) + ) + ) + +(defpart 4232 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 6) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4233 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 7) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 9.0)) + ) + ) + +(defpart 4234 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 8) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 18.0)) + ) + ) + +(defpart 4235 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 9) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 27.000002)) + ) + ) + +(defpart 4236 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 10) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 36.0)) + ) + ) + +(defpart 4237 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 11) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 45.0)) + ) + ) + +(defpart 4238 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 12) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 54.000004)) + ) + ) + +(defpart 4239 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 13) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -49.5)) + ) + ) + +(defpart 4240 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 14) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -40.5)) + ) + ) + +(defpart 4241 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 15) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -31.5)) + ) + ) + +(defpart 4242 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 16) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -22.5)) + ) + ) + +(defpart 4243 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 17) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -13.500001)) + ) + ) + +(defpart 4244 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 18) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -4.5)) + ) + ) + +(defpart 4245 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 19) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 4.5)) + ) + ) + +(defpart 4246 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 20) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 13.500001)) + ) + ) + +(defpart 4247 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 21) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 22.5)) + ) + ) + +(defpart 4248 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 22) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 31.5)) + ) + ) + +(defpart 4249 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 23) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 40.5)) + ) + ) + +(defpart 4250 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 24) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 49.5)) + ) + ) + +(defpartgroup group-ctyport-hiphog-marquee-daxter + :id 968 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 24) + :rotate ((degrees 0) (degrees -3.942222) (degrees 0)) + :parts ((sp-item 4251 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4252 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4253 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4254 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4255 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4256 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4257 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4258 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4259 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4260 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4261 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4262 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4263 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4264 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4265 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4266 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4267 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4268 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4269 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4270 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4271 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4272 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4273 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4274 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4275 :flags (is-3d launch-asap bit6 bit7)) + ) + ) + +(defpart 4251 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + 0 + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -54.000004)) + ) + ) + +(defpart 4252 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 1) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -45.0)) + ) + ) + +(defpart 4253 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 2) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -36.0)) + ) + ) + +(defpart 4254 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 3) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -27.000002)) + ) + ) + +(defpart 4255 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 4) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -18.0)) + ) + ) + +(defpart 4256 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 5) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -9.0)) + ) + ) + +(defpart 4257 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 6) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4258 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 7) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 9.0)) + ) + ) + +(defpart 4259 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 8) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 18.0)) + ) + ) + +(defpart 4260 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 9) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 27.000002)) + ) + ) + +(defpart 4261 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 10) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 36.0)) + ) + ) + +(defpart 4262 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 11) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 45.0)) + ) + ) + +(defpart 4263 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 128.0 1.0) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 12) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 54.000004)) + ) + ) + +(defpart 4264 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 13) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -49.5)) + ) + ) + +(defpart 4265 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 14) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -40.5)) + ) + ) + +(defpart 4266 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 15) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -31.5)) + ) + ) + +(defpart 4267 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 16) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -22.5)) + ) + ) + +(defpart 4268 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 17) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -13.500001)) + ) + ) + +(defpart 4269 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 18) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -4.5)) + ) + ) + +(defpart 4270 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 19) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 4.5)) + ) + ) + +(defpart 4271 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 20) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 13.500001)) + ) + ) + +(defpart 4272 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 21) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 22.5)) + ) + ) + +(defpart 4273 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 22) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 31.5)) + ) + ) + +(defpart 4274 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 23) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 40.5)) + ) + ) + +(defpart 4275 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 24) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 49.5)) + ) + ) + +(define *hiphog-exterior-marquee-group-ids* (new 'static 'boxed-array :type int32 #x3c7)) + +(define *hiphog-exterior-marquee-daxter-group-ids* (new 'static 'boxed-array :type int32 #x3c8)) + +(deftype hiphog-exterior-marquee (process-drawable) + ((rot vector :inline :offset-assert 208) + (master-enable uint32 :offset-assert 224) + (pad-ih12nb312 uint32 3 :offset-assert 228) + (mode uint32 :offset-assert 240) + (counter int32 :offset-assert 244) + (parts sparticle-launch-control 1 :offset-assert 248) + ) + :heap-base #x80 + :method-count-assert 22 + :size-assert #xfc + :flag-assert #x16008000fc + (:methods + (idle () _type_ :state 20) + (hiphog-exterior-marquee-method-21 (_type_) none 21) + ) + ) + + +(defmethod deactivate hiphog-exterior-marquee ((obj hiphog-exterior-marquee)) + (dotimes (s5-0 1) + (let ((a0-1 (-> obj parts s5-0))) + (if (nonzero? a0-1) + (kill-and-free-particles a0-1) + ) + ) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; WARN: Return type mismatch process-drawable vs hiphog-exterior-marquee. +(defmethod relocate hiphog-exterior-marquee ((obj hiphog-exterior-marquee) (arg0 int)) + (dotimes (v1-0 1) + (if (nonzero? (-> obj parts v1-0)) + (&+! (-> obj parts v1-0) arg0) + ) + ) + (the-as hiphog-exterior-marquee ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; WARN: Return type mismatch symbol vs none. +(defmethod hiphog-exterior-marquee-method-21 hiphog-exterior-marquee ((obj hiphog-exterior-marquee)) + (+! (-> obj parts 0 state-counter) 1) + (when (!= (-> obj parts 0 state-mode 0) (-> obj mode)) + (set! (-> obj parts 0 state-mode 0) (-> obj mode)) + (set! (-> obj parts 0 state-counter) (the-as uint 0)) + 0 + ) + (let ((s5-0 (-> obj master-enable))) + (dotimes (s4-0 1) + (if (logtest? s5-0 1) + (spawn (-> obj parts s4-0) (-> obj root trans)) + ) + (set! s5-0 (shr s5-0 1)) + ) + ) + (none) + ) + +(defstate idle (hiphog-exterior-marquee) + :virtual #t + :code (behavior () + (until #f + (when (<= (-> self counter) 0) + (set! (-> self mode) (the-as uint (rand-vu-int-count 8))) + (let ((v0-1 (rand-vu-int-range 3 6)) + (a0-3 (the-as (object object) (-> *hiphog-exterior-marquee* (+ (-> self mode) 1)))) + ) + (set! (-> self counter) (* v0-1 (* (+ (-> (the-as (pointer int32) a0-3) 0) -1) + (the-as int (/ (the-as int (-> (the-as (array object) a0-3) 0)) 8)) + ) + ) + ) + ) + (while (< (-> self counter) 120) + (set! (-> self counter) (* (-> self counter) 2)) + ) + ) + (+! (-> self counter) -1) + (hiphog-exterior-marquee-method-21 self) + (suspend) + ) + #f + (none) + ) + :post (the-as (function none :behavior hiphog-exterior-marquee) ja-post) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! hiphog-exterior-marquee ((obj hiphog-exterior-marquee) (arg0 entity-actor)) + "Typically the method that does the initial setup on the process, potentially using the [[entity-actor]] provided as part of that. +This commonly includes things such as: +- stack size +- collision information +- loading the skeleton group / bones +- sounds" + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause enemy)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (set! (-> obj master-enable) (the-as uint -1)) + (set! (-> obj mode) (the-as uint (rand-vu-int-count 8))) + (let ((s5-1 (if (task-node-closed? (game-task-node nest-boss-resolution)) + *hiphog-exterior-marquee-daxter-group-ids* + *hiphog-exterior-marquee-group-ids* + ) + ) + ) + (dotimes (s4-0 1) + (set! (-> obj parts s4-0) (create-launch-control (-> *part-group-id-table* (-> s5-1 s4-0)) obj)) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + +(defpartgroup group-farthy-halo + :id 969 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 4) + :rotate ((degrees 2.2222223) (degrees 0) (degrees 0)) + :parts ((sp-item 4276 :fade-after (meters 400) :flags (is-3d bit6 bit7)) (sp-item 4277 :fade-after (meters 200))) + ) + +(defpart 4277 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 20) (meters 0.4) 1.0) + (sp-flt spt-rot-x 4096.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 128.0 1.0) + (sp-rnd-flt spt-a 12.0 4.0 1.0) + (sp-flt spt-omega 822476.8) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +(defpart 4276 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.1)) + (sp-flt spt-y (meters 0)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 127.0) + (sp-int spt-timer 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +(deftype farthy (process-drawable) + () + :heap-base #x50 + :method-count-assert 21 + :size-assert #xc8 + :flag-assert #x15005000c8 + (:methods + (idle () _type_ :state 20) + ) + ) + + +(defskelgroup skel-farthy farthy farthy-lod0-jg farthy-idle-ja + ((farthy-lod0-mg (meters 999999))) + :bounds (static-spherem 0 8 0 11) + ) + +(defskelgroup skel-mecha-daxter mecha-daxter mecha-daxter-lod0-jg mecha-daxter-idle-ja + ((mecha-daxter-lod0-mg (meters 999999))) + :bounds (static-spherem 0 8 0 11) + :origin-joint-index 3 + ) + +(defstate idle (farthy) + :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 (behavior () + (ja-post) + (if (nonzero? (-> self part)) + (spawn-with-cspace (-> self part) (-> self node-list data 5)) + ) + (none) + ) + ) + +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! farthy ((obj farthy) (arg0 entity-actor)) + "Typically the method that does the initial setup on the process, potentially using the [[entity-actor]] provided as part of that. +This commonly includes things such as: +- stack size +- collision information +- loading the skeleton group / bones +- sounds" + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! (-> obj root pause-adjust-distance) 1228800.0) + (cond + ((task-node-closed? (game-task-node nest-boss-resolution)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-mecha-daxter" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + ) + (else + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-farthy" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 969) obj)) + ) + ) + (set! (-> obj draw light-index) (the-as uint 10)) + (go (method-of-object obj idle)) + (none) + ) diff --git a/goal_src/jak2/levels/common/enemy/bombots/bombbot.gc b/goal_src/jak2/levels/common/enemy/bombots/bombbot.gc index 4758ed292a..df0063ce9d 100644 --- a/goal_src/jak2/levels/common/enemy/bombots/bombbot.gc +++ b/goal_src/jak2/levels/common/enemy/bombots/bombbot.gc @@ -18,10 +18,12 @@ :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 2) (meters 2) (meters 2)) ) - :max-time-step 0.02 - :gravity (meters 10) - :idle-distance (meters 200) - :attack-force-scale 2.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 10) + :idle-distance (meters 200) + :attack-force-scale 2.0 + ) :name '*bombbot-body-constants* ) ) @@ -2808,7 +2810,7 @@ (init-vf0-vector) (let ((a1-0 (new 'stack-no-clear 'vector))) (vector-reset! a1-0) - (set! (-> a1-0 y) (* -1.0 (-> obj info gravity) (-> obj rigidbody state info mass))) + (set! (-> a1-0 y) (* -1.0 (-> obj info extra gravity) (-> obj rigidbody state info mass))) (rigid-body-method-20 (-> obj rigidbody state) a1-0) ) (rigid-body-method-24 (-> obj rigidbody state)) diff --git a/goal_src/jak2/levels/common/scene-actor.gc b/goal_src/jak2/levels/common/scene-actor.gc index 6f83673fef..824a3f5b3d 100644 --- a/goal_src/jak2/levels/common/scene-actor.gc +++ b/goal_src/jak2/levels/common/scene-actor.gc @@ -6,7 +6,7 @@ ;; dgos: GAME, COMMON (declare-type onin-game process-drawable) -(define-extern onin-game-init (function entity none)) +(define-extern onin-game-init (function entity none :behavior onin-game)) ;; DECOMP BEGINS diff --git a/goal_src/jak2/levels/dig/dig-obs.gc b/goal_src/jak2/levels/dig/dig-obs.gc index a57df0c7a6..72fb580697 100644 --- a/goal_src/jak2/levels/dig/dig-obs.gc +++ b/goal_src/jak2/levels/dig/dig-obs.gc @@ -75,10 +75,12 @@ :cm-offset-joint (new 'static 'vector :y -8192.0 :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 6) (meters 4) (meters 6)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 200) - :attack-force-scale 2.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 200) + :attack-force-scale 2.0 + ) :name '*dig-sinking-platform-constants* ) ) diff --git a/goal_src/jak2/levels/dig/dig1-obs.gc b/goal_src/jak2/levels/dig/dig1-obs.gc index 345a6a91a5..968462eefc 100644 --- a/goal_src/jak2/levels/dig/dig1-obs.gc +++ b/goal_src/jak2/levels/dig/dig1-obs.gc @@ -385,10 +385,12 @@ :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 1) (meters 3) (meters 1)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 200) - :attack-force-scale 2.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 200) + :attack-force-scale 2.0 + ) :name '*dig-bomb-crate-cylinder-constants* ) ) diff --git a/goal_src/jak2/levels/dig/dig3-obs.gc b/goal_src/jak2/levels/dig/dig3-obs.gc index 40b81fc35f..a25056fbbf 100644 --- a/goal_src/jak2/levels/dig/dig3-obs.gc +++ b/goal_src/jak2/levels/dig/dig3-obs.gc @@ -1347,10 +1347,12 @@ This commonly includes things such as: :cm-offset-joint (new 'static 'vector :z -24576.0 :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 3) (meters 21)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*dig-tipping-rock-constants* :drag-factor 2.0 :buoyancy-factor 1.2 @@ -1621,10 +1623,12 @@ This commonly includes things such as: :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 1) (meters 3) (meters 1)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 200) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 200) + :attack-force-scale 1.0 + ) :name '*dig-stomp-block-constants* ) ) diff --git a/goal_src/jak2/levels/ruins/ruins-obs.gc b/goal_src/jak2/levels/ruins/ruins-obs.gc index d4df3b3ca8..269dbe2d3b 100644 --- a/goal_src/jak2/levels/ruins/ruins-obs.gc +++ b/goal_src/jak2/levels/ruins/ruins-obs.gc @@ -67,10 +67,12 @@ :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 2) (meters 1) (meters 2)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*ruins-sinking-platform-constants* :drag-factor 2.0 :buoyancy-factor 1.5 diff --git a/goal_src/jak2/levels/underport/under-obs.gc b/goal_src/jak2/levels/underport/under-obs.gc index befbdae51e..cd1fb4e2fe 100644 --- a/goal_src/jak2/levels/underport/under-obs.gc +++ b/goal_src/jak2/levels/underport/under-obs.gc @@ -923,36 +923,39 @@ This commonly includes things such as: (none) ) -(define *under-buoy-plat-platform-constants* (new 'static 'rigid-body-platform-constants - :mass 1.48 - :inv-mass 0.6756757 - :cm-joint (new 'static 'vector :w 1.0) - :linear-damping 0.8 - :angular-damping 0.5 - :friction-factor 0.1 - :inertial-tensor-x (meters 5) - :inertial-tensor-y (meters 1) - :inertial-tensor-z (meters 5) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 50) - :attack-force-scale 1.0 - :name '*under-buoy-plat-platform-constants* - :drag-factor 2.0 - :buoyancy-factor 2.3 - :max-buoyancy-depth (meters 1.5) - :player-weight (meters 150) - :player-bonk-factor 0.5 - :player-dive-factor 1.0 - :player-force-distance (meters 2) - :player-force-clamp (meters 1000000) - :player-force-timeout #x1e - :explosion-force (meters 1000) - :control-point-count 5 - :platform #t - :sound-name "ruins-plat" - ) - ) +(define *under-buoy-plat-platform-constants* + (new 'static 'rigid-body-platform-constants + :info (new 'static 'rigid-body-info + :mass 1.48 + :inv-mass 0.6756757 + :linear-damping 0.8 + :angular-damping 0.5 + :friction-factor 0.1 + :cm-offset-joint (new 'static 'vector :w 1.0) + :inertial-tensor-box (new 'static 'array meters 3 (meters 5) (meters 1) (meters 5)) + ) + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) + :name '*under-buoy-plat-platform-constants* + :drag-factor 2.0 + :buoyancy-factor 2.3 + :max-buoyancy-depth (meters 1.5) + :player-weight (meters 150) + :player-bonk-factor 0.5 + :player-dive-factor 1.0 + :player-force-distance (meters 2) + :player-force-clamp (meters 1000000) + :player-force-timeout #x1e + :explosion-force (meters 1000) + :control-point-count 5 + :platform #t + :sound-name "ruins-plat" + ) + ) (defmethod rigid-body-platform-method-53 under-buoy-plat ((obj under-buoy-plat) (arg0 vector)) -220341.05 @@ -985,7 +988,7 @@ This commonly includes things such as: (set! (-> obj orig-trans quad) (-> obj root-override-2 trans quad)) (set! (-> obj anchor-point quad) (-> obj root-override-2 trans quad)) (set! (-> obj surface-height) (-> obj root-override-2 trans y)) - (set! (-> obj info-override cm-joint y) 6144.0) + (set! (-> obj info-override info cm-offset-joint y) 6144.0) (let ((s5-1 (-> obj info-override control-point-count))) (dotimes (s4-1 s5-1) (let ((s3-0 (-> obj control-point-array data s4-1))) diff --git a/test/decompiler/reference/jak2/engine/common_objs/rigid-body-plat_REF.gc b/test/decompiler/reference/jak2/engine/common_objs/rigid-body-plat_REF.gc index 9d89ba44c0..604d5e7c6f 100644 --- a/test/decompiler/reference/jak2/engine/common_objs/rigid-body-plat_REF.gc +++ b/test/decompiler/reference/jak2/engine/common_objs/rigid-body-plat_REF.gc @@ -42,11 +42,11 @@ (format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x)) (format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y)) (format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z)) - (format #t "~1Textra: #~%" (&-> obj max-time-step)) - (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) - (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) - (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) - (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (format #t "~1Textra: #~%" (-> obj extra)) + (format #t "~1Tmax-time-step: ~f~%" (-> obj extra max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj extra gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj extra idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj extra attack-force-scale)) (format #t "~1Tname: ~A~%" (-> obj name)) (format #t "~1Tdrag-factor: ~f~%" (-> obj drag-factor)) (format #t "~1Tbuoyancy-factor: ~f~%" (-> obj buoyancy-factor)) @@ -217,7 +217,7 @@ *y-vector* (* (-> obj rbody state info mass) (fmin 1.0 f30-0) - (/ (-> obj info-override gravity) (the float (-> obj info-override control-point-count))) + (/ (-> obj info-override extra gravity) (the float (-> obj info-override control-point-count))) (-> obj info-override buoyancy-factor) ) ) @@ -263,7 +263,7 @@ ;; WARN: Return type mismatch int vs none. (defmethod rigid-body-platform-method-55 rigid-body-platform ((obj rigid-body-platform)) (let ((a1-0 (new 'stack-no-clear 'vector))) - (vector-float*! a1-0 *y-vector* (* -1.0 (-> obj info-override gravity) (-> obj rbody state info mass))) + (vector-float*! a1-0 *y-vector* (* -1.0 (-> obj info-override extra gravity) (-> obj rbody state info mass))) (rigid-body-method-20 (-> obj rbody state) a1-0) ) 0 @@ -476,7 +476,7 @@ (set! (-> obj player-velocity quad) (-> *null-vector* quad)) (set! (-> obj player-velocity-prev quad) (-> *null-vector* quad)) (set! (-> obj root-override-2 max-iteration-count) (the-as uint 4)) - (set! (-> obj max-time-step) (-> arg0 max-time-step)) + (set! (-> obj max-time-step) (-> arg0 extra max-time-step)) (set! (-> obj water-anim) (the-as water-anim (entity-actor-lookup (-> obj entity) 'water-actor 0))) 0 (none) @@ -525,10 +525,12 @@ :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 4) (meters 4)) ) - :max-time-step 0.033333335 - :gravity (meters 80) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.033333335 + :gravity (meters 80) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*rigid-body-platform-constants* :drag-factor 0.8 :buoyancy-factor 1.5 diff --git a/test/decompiler/reference/jak2/engine/debug/default-menu_REF.gc b/test/decompiler/reference/jak2/engine/debug/default-menu_REF.gc index 6488c59cc5..b060e54bff 100644 --- a/test/decompiler/reference/jak2/engine/debug/default-menu_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/default-menu_REF.gc @@ -4214,7 +4214,7 @@ (function "Toggle Plane Mode" #f ,(lambda () (let ((a0-0 (get-nav-graph-editor))) (if a0-0 - ((method-of-object a0-0 nav-graph-editor-method-60)) + (nav-graph-editor-method-60 a0-0) ) ) (none) @@ -4223,7 +4223,7 @@ (function "Toggle Hover Mode" #f ,(lambda () (let ((a0-0 (get-nav-graph-editor))) (if a0-0 - ((method-of-object a0-0 nav-graph-editor-method-61)) + (nav-graph-editor-method-61 a0-0) ) ) (none) @@ -4289,7 +4289,7 @@ (function "Save" #f ,(lambda () (let ((a0-0 (get-nav-graph-editor))) (if a0-0 - ((method-of-object a0-0 nav-graph-editor-method-63)) + (nav-graph-editor-method-63 a0-0) ) ) (none) diff --git a/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc b/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc index 86622e8eea..a1f12159ca 100644 --- a/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc +++ b/test/decompiler/reference/jak2/engine/debug/nav/mysql-nav-graph_REF.gc @@ -271,7 +271,7 @@ :size-assert #x41c :flag-assert #x150000041c (:methods - (new (symbol type int string) _type_ 0) + (new (symbol type int symbol) _type_ 0) (init-from-sql! (_type_ string string) symbol 9) (exec-sql! (_type_) symbol 10) (indexof-nav-node (_type_ int) int 11) @@ -307,7 +307,7 @@ ;; definition for method 0 of type mysql-nav-graph ;; WARN: Return type mismatch object vs mysql-nav-graph. -(defmethod new mysql-nav-graph ((allocation symbol) (type-to-make type) (arg0 int) (arg1 string)) +(defmethod new mysql-nav-graph ((allocation symbol) (type-to-make type) (arg0 int) (arg1 symbol)) (let ((gp-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) (if (zero? gp-0) (return (the-as mysql-nav-graph 0)) @@ -1374,6 +1374,3 @@ returns `-1` if none is found" ) ) - - - diff --git a/test/decompiler/reference/jak2/engine/draw/drawable_REF.gc b/test/decompiler/reference/jak2/engine/draw/drawable_REF.gc index 035fee7d9a..31fa8ff1fc 100644 --- a/test/decompiler/reference/jak2/engine/draw/drawable_REF.gc +++ b/test/decompiler/reference/jak2/engine/draw/drawable_REF.gc @@ -1589,7 +1589,7 @@ ) 0 ) - (update-nav-meshes *level*) + (update-nav-meshes-method *level*) (when *debug-segment* (let ((gp-10 (-> *display* frames (-> *display* on-screen) profile-array data 0))) (when (and *dproc* *debug-segment*) diff --git a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc index b0603bc2a0..9d5eb987c9 100644 --- a/test/decompiler/reference/jak2/engine/entity/entity_REF.gc +++ b/test/decompiler/reference/jak2/engine/entity/entity_REF.gc @@ -71,7 +71,6 @@ ) ;; definition for method 3 of type actor-group -;; INFO: this function exists in multiple non-identical object files (defmethod inspect actor-group ((obj actor-group)) (format #t "[~8x] ~A~%" obj (-> obj type)) (format #t "~Tlength: ~D~%" (-> obj length)) @@ -258,7 +257,8 @@ ;; definition for method 18 of type level-group ;; WARN: Return type mismatch int vs none. -(defmethod update-nav-meshes level-group ((obj level-group)) +(defmethod update-nav-meshes-method level-group ((obj level-group)) + "Clashes with a function name" (when (not (paused?)) (dotimes (s5-0 (-> obj length)) (let ((v1-4 (-> obj level s5-0))) diff --git a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc index 7d29221fad..28e3e7649f 100644 --- a/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/gfx/sprite/particles/sparticle-launcher-h_REF.gc @@ -101,7 +101,6 @@ ) ;; definition for method 3 of type sparticle-launcher -;; INFO: this function exists in multiple non-identical object files (defmethod inspect sparticle-launcher ((obj sparticle-launcher)) (when (not obj) (set! obj obj) @@ -154,21 +153,21 @@ ;; definition of type sparticle-launch-state (deftype sparticle-launch-state (structure) - ((group-item sparticle-group-item :offset-assert 0) - (flags sp-launch-state-flags :offset-assert 4) - (randomize uint16 :offset-assert 6) - (center vector :offset-assert 8) - (sprite3d sprite-vec-data-3d :offset-assert 12) - (sprite sparticle-cpuinfo :offset-assert 16) - (offset uint32 :offset-assert 20) - (accum float :offset-assert 24) - (spawn-time uint32 :offset-assert 28) - (control basic :offset-assert 32) - (swarm basic :offset 20) - (seed uint32 :offset 24) - (time uint32 :offset 28) - (spec basic :offset 16) - (id uint32 :offset 12) + ((group-item sparticle-group-item :offset-assert 0) + (flags sp-launch-state-flags :offset-assert 4) + (randomize uint16 :offset-assert 6) + (center vector :offset-assert 8) + (sprite3d sprite-vec-data-3d :offset-assert 12) + (sprite sparticle-cpuinfo :offset-assert 16) + (offset uint32 :offset-assert 20) + (accum float :offset-assert 24) + (spawn-time uint32 :offset-assert 28) + (control sparticle-launch-control :offset-assert 32) + (swarm basic :offset 20) + (seed uint32 :offset 24) + (time uint32 :offset 28) + (spec basic :offset 16) + (id uint32 :offset 12) ) :method-count-assert 9 :size-assert #x24 diff --git a/test/decompiler/reference/jak2/engine/level/level-h_REF.gc b/test/decompiler/reference/jak2/engine/level/level-h_REF.gc index f30025957a..d5ec806261 100644 --- a/test/decompiler/reference/jak2/engine/level/level-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/level/level-h_REF.gc @@ -694,7 +694,7 @@ (debug-draw-actors (_type_ symbol) none 15) (assign-draw-indices (_type_) none 16) (actors-update (_type_) none 17) - (update-nav-meshes (_type_) none 18) + (update-nav-meshes-method (_type_) none 18) (level-update (_type_) none 19) (level-get-target-inside (_type_) level 20) (alloc-levels-if-needed (_type_ symbol) none 21) diff --git a/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc b/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc index 661ddc60bf..b2a9f25640 100644 --- a/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/nav/nav-mesh-h_REF.gc @@ -437,7 +437,7 @@ and declared out of order (cannot use forward declared structures in inline arra (link-by-id (_type_ uint) symbol 32) (unlink-by-id (_type_ uint) symbol 33) (nav-mesh-method-34 (_type_ vector vector float) float 34) - (nav-mesh-method-35 (_type_ vector vector float) none 35) + (nav-mesh-method-35 (_type_ vector vector float) float 35) (debug-draw-poly (_type_ nav-poly rgba) none 36) (point-in-poly? (_type_ nav-poly vector) symbol 37) (nav-mesh-method-38 (_type_ nav-poly vector vector vector (pointer nav-poly)) vector 38) diff --git a/test/decompiler/reference/jak2/engine/nav/nav-mesh_REF.gc b/test/decompiler/reference/jak2/engine/nav/nav-mesh_REF.gc index 1543f6aba9..4b190d0b2c 100644 --- a/test/decompiler/reference/jak2/engine/nav/nav-mesh_REF.gc +++ b/test/decompiler/reference/jak2/engine/nav/nav-mesh_REF.gc @@ -2792,7 +2792,6 @@ ;; definition for method 35 of type nav-mesh ;; INFO: Used lq/sq -;; WARN: Return type mismatch float vs none. ;; WARN: new jak 2 until loop case, check carefully (defmethod nav-mesh-method-35 nav-mesh ((obj nav-mesh) (arg0 vector) (arg1 vector) (arg2 float)) (let ((gp-0 (new 'stack-no-clear 'inline-array 'nav-poly 3))) @@ -2830,7 +2829,6 @@ ) (-> gp-0 2 vertex3 y) ) - (none) ) ;; failed to figure out what this is: diff --git a/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc b/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc index fb35c7bd61..76a31450a6 100644 --- a/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc +++ b/test/decompiler/reference/jak2/engine/physics/rigid-body-h_REF.gc @@ -10,6 +10,7 @@ (bounce-factor float :offset-assert 16) (friction-factor float :offset-assert 20) (bounce-mult-factor float :offset-assert 24) + (unknown-k1hbn23 float :offset-assert 28) (cm-offset-joint vector :inline :offset-assert 32) (inv-inertial-tensor matrix :inline :offset-assert 48) (inertial-tensor matrix :inline :offset-assert 112) @@ -75,27 +76,21 @@ ;; definition of type rigid-body-object-constants (deftype rigid-body-object-constants (structure) - ((info rigid-body-info :inline :offset-assert 0) - (mass float :offset 0) - (inv-mass float :offset 4) - (cm-joint vector :inline :offset 32) - (cm-joint-x meters :offset 32) - (cm-joint-y meters :offset 36) - (cm-joint-z meters :offset 40) - (cm-joint-w meters :offset 44) - (linear-damping float :offset 8) - (angular-damping float :offset 12) - (bounce-factor float :offset 16) - (friction-factor float :offset 20) - (inertial-tensor-x meters :offset 176) - (inertial-tensor-y meters :offset 180) - (inertial-tensor-z meters :offset 184) - (extra rigid-body-object-extra-info :inline :offset-assert 188) - (max-time-step float :offset 188) - (gravity meters :offset 192) - (idle-distance meters :offset 196) - (attack-force-scale float :offset 200) - (name symbol :offset-assert 204) + ((info rigid-body-info :inline :offset-assert 0) + (cm-joint vector :inline :offset 32) + (cm-joint-x meters :offset 32) + (cm-joint-y meters :offset 36) + (cm-joint-z meters :offset 40) + (cm-joint-w meters :offset 44) + (linear-damping float :offset 8) + (angular-damping float :offset 12) + (bounce-factor float :offset 16) + (friction-factor float :offset 20) + (inertial-tensor-x meters :offset 176) + (inertial-tensor-y meters :offset 180) + (inertial-tensor-z meters :offset 184) + (extra rigid-body-object-extra-info :inline :offset-assert 188) + (name symbol :offset-assert 204) ) :method-count-assert 9 :size-assert #xd0 @@ -122,11 +117,11 @@ (format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x)) (format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y)) (format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z)) - (format #t "~1Textra: #~%" (&-> obj max-time-step)) - (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) - (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) - (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) - (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (format #t "~1Textra: #~%" (-> obj extra)) + (format #t "~1Tmax-time-step: ~f~%" (-> obj extra max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj extra gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj extra idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj extra attack-force-scale)) (format #t "~1Tname: ~A~%" (-> obj name)) (label cfg-4) obj diff --git a/test/decompiler/reference/jak2/engine/physics/rigid-body_REF.gc b/test/decompiler/reference/jak2/engine/physics/rigid-body_REF.gc index 8b74657e5c..583569756b 100644 --- a/test/decompiler/reference/jak2/engine/physics/rigid-body_REF.gc +++ b/test/decompiler/reference/jak2/engine/physics/rigid-body_REF.gc @@ -957,7 +957,7 @@ (defmethod rigid-body-object-method-29 rigid-body-object ((obj rigid-body-object) (arg0 float)) (let ((a1-1 (new 'stack-no-clear 'vector))) (vector-reset! a1-1) - (set! (-> a1-1 y) (* -1.0 (-> obj info gravity) (-> obj rbody state info mass))) + (set! (-> a1-1 y) (* -1.0 (-> obj info extra gravity) (-> obj rbody state info mass))) (rigid-body-method-20 (-> obj rbody state) a1-1) ) 0 @@ -1013,7 +1013,7 @@ (method-of-object obj rigid-body-object-method-29) ) (rigid-body-object-method-35 obj) - (set! (-> obj max-time-step) (-> arg0 max-time-step)) + (set! (-> obj max-time-step) (-> arg0 extra max-time-step)) (set! (-> obj root-override-2 max-iteration-count) (the-as uint 4)) (let ((v1-15 (-> obj skel root-channel 0))) (set! (-> v1-15 num-func) num-func-identity) @@ -1065,10 +1065,12 @@ :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 4) (meters 4)) ) - :max-time-step 0.033333335 - :gravity (meters 80) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.033333335 + :gravity (meters 80) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*rigid-body-object-constants* ) ) @@ -1283,7 +1285,7 @@ This commonly includes things such as: ) ) ) - (set! (-> s5-0 impulse) (* f0-2 (-> obj info attack-force-scale))) + (set! (-> s5-0 impulse) (* f0-2 (-> obj info extra attack-force-scale))) (apply-damage obj (* 0.667 f1-0) s5-0) ) (rigid-body-object-method-42 obj) @@ -1524,7 +1526,7 @@ This commonly includes things such as: (defstate idle (rigid-body-object) :virtual #t :trans (behavior () - (if (and *target* (and (>= (-> self info idle-distance) + (if (and *target* (and (>= (-> self info extra idle-distance) (vector-vector-distance (-> self root-override-2 trans) (-> *target* control trans)) ) (zero? (logand (focus-status teleporting) (-> *target* focus-status))) @@ -1547,7 +1549,7 @@ This commonly includes things such as: ) :trans (behavior () (if (or (not *target*) - (or (< (+ 4096.0 (-> self info idle-distance)) + (or (< (+ 4096.0 (-> self info extra idle-distance)) (vector-vector-distance (-> self root-override-2 trans) (-> *target* control trans)) ) (logtest? (focus-status teleporting) (-> *target* focus-status)) diff --git a/test/decompiler/reference/jak2/levels/city/common/ctyport-obs_REF.gc b/test/decompiler/reference/jak2/levels/city/common/ctyport-obs_REF.gc index cb5c235c13..ceed2eec50 100644 --- a/test/decompiler/reference/jak2/levels/city/common/ctyport-obs_REF.gc +++ b/test/decompiler/reference/jak2/levels/city/common/ctyport-obs_REF.gc @@ -45,10 +45,12 @@ :cm-offset-joint (new 'static 'vector :z 8192.0 :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 16) (meters 6) (meters 20)) ) - :max-time-step 0.033333335 - :gravity (meters 40) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.033333335 + :gravity (meters 40) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*barge-constants* :flags #x8 :object-type #x11 @@ -551,7 +553,7 @@ (rigid-body-method-18 (-> v1-10 state) a1-9 (the-as vector a2-0)) ) (.svf (&-> (-> s4-0 vector) 0 quad) vf0) - (set! (-> s4-0 vector 0 y) (* -4.0 (-> s2-0 gravity) (-> s2-0 info mass))) + (set! (-> s4-0 vector 0 y) (* -4.0 (-> s2-0 extra gravity) (-> s2-0 info mass))) (let ((a1-10 (-> s4-0 vector))) (rigid-body-method-20 (-> s3-0 state) (the-as vector a1-10)) ) diff --git a/test/decompiler/reference/jak2/levels/city/common/vehicle-control_REF.gc b/test/decompiler/reference/jak2/levels/city/common/vehicle-control_REF.gc index 7b9fde517e..30dcc80e1a 100644 --- a/test/decompiler/reference/jak2/levels/city/common/vehicle-control_REF.gc +++ b/test/decompiler/reference/jak2/levels/city/common/vehicle-control_REF.gc @@ -149,7 +149,45 @@ ) ;; definition for method 15 of type vehicle-controller -;; ERROR: function was not converted to expressions. Cannot decompile. +(defmethod vehicle-controller-method-15 vehicle-controller ((obj vehicle-controller)) + (let ((gp-0 (the-as nav-branch #f))) + (let* ((s5-0 (-> obj branch dest-node)) + (s4-0 (-> s5-0 branch-count)) + ) + (b! (!= s4-0 1) cfg-4 :delay (empty-form)) + (let ((v1-4 (-> s5-0 branch-array 0))) + (if (!= (-> v1-4 dest-node id) #xffff) + (set! gp-0 v1-4) + ) + ) + (b! #t cfg-12 :delay (nop!)) + (label cfg-4) + (when (< 1 s4-0) + (let ((v1-6 (rand-vu-int-count s4-0)) + (a0-8 s4-0) + ) + (b! #t cfg-10 :delay (nop!)) + (label cfg-6) + (+! a0-8 -1) + (let ((a1-3 (-> s5-0 branch-array v1-6))) + (b! (not (!= (-> a1-3 dest-node id) #xffff)) cfg-8 :delay (empty-form)) + (set! gp-0 a1-3) + ) + (b! #t cfg-12 :delay (nop!)) + (label cfg-8) + (+! v1-6 1) + (if (>= v1-6 s4-0) + (set! v1-6 0) + ) + (label cfg-10) + (b! (nonzero? a0-8) cfg-6 :delay (nop!)) + ) + ) + ) + (label cfg-12) + gp-0 + ) + ) ;; definition for method 14 of type vehicle-controller ;; INFO: Used lq/sq @@ -261,7 +299,297 @@ ) ;; definition for method 18 of type vehicle-controller -;; ERROR: function was not converted to expressions. Cannot decompile. +;; INFO: Used lq/sq +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 24 signed mismatch +;; WARN: Stack slot offset 24 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 24 signed mismatch +;; WARN: Stack slot offset 24 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 24 signed mismatch +;; WARN: Stack slot offset 24 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Stack slot offset 24 signed mismatch +;; WARN: Stack slot offset 24 signed mismatch +;; WARN: Stack slot offset 20 signed mismatch +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-controller-method-18 vehicle-controller ((obj vehicle-controller) (arg0 vector) (arg1 vector) (arg2 vehicle) (arg3 float)) + (local-vars + (v1-24 float) + (v1-88 float) + (a0-35 float) + (a0-96 int) + (a0-98 int) + (sv-16 vector) + (sv-20 float) + (sv-24 float) + ) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let* ((v1-1 (-> *perf-stats* data 21)) + (a0-1 (-> v1-1 ctrl)) + ) + (+! (-> v1-1 count) 1) + (b! (zero? a0-1) cfg-2 :delay (nop!)) + (.mtc0 Perf 0) + (.sync.l) + (.sync.p) + (.mtpc pcr0 0) + (.mtpc pcr1 0) + (.sync.l) + (.sync.p) + (.mtc0 Perf a0-1) + ) + (.sync.l) + (.sync.p) + (label cfg-2) + 0 + (set! sv-16 arg0) + (set! sv-20 arg3) + (set! sv-24 (-> arg2 info-override info inv-mass)) + (let ((gp-0 (new 'stack-no-clear 'inline-array 'vector 16))) + (set! (-> gp-0 15 x) (+ (-> obj target-speed) (-> obj target-speed-offset))) + (set! (-> gp-0 1 quad) (-> arg1 quad)) + (set! (-> gp-0 0 quad) (-> arg2 root-override-2 trans quad)) + (vector-z-quaternion! (-> gp-0 3) (-> arg2 root-override-2 quat)) + (vector-reset! (-> gp-0 2)) + (cond + ((logtest? (-> obj flags) (vehicle-controller-flag on-straightaway)) + (vector-! (-> gp-0 6) (-> obj turn-enter-point) (-> gp-0 0)) + (let ((f0-5 (vector-dot (-> gp-0 6) (-> obj turn-enter-dir)))) + (vector+float*! (-> gp-0 4) (-> obj turn-enter-point) (-> obj turn-enter-dir) (- f0-5)) + (set! (-> gp-0 5 quad) (-> obj turn-enter-dir quad)) + (if (>= 0.0 f0-5) + (logclear! (-> obj flags) (vehicle-controller-flag on-straightaway)) + ) + (when (not (logtest? (-> obj flags) (vehicle-controller-flag no-slowing-for-turns))) + (let ((f1-4 (* 0.5 (/ 1.0 (-> obj turn-accel))))) + (.lvf vf1 (&-> arg1 quad)) + (.add.w.vf vf2 vf0 vf0 :mask #b1) + (.mul.vf vf1 vf1 vf1) + (.mul.x.vf acc vf2 vf1 :mask #b1) + (.add.mul.y.vf acc vf2 vf1 acc :mask #b1) + (.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1) + (.mov v1-24 vf1) + (let ((f2-2 v1-24) + (f3-1 (-> obj max-turn-speed)) + ) + (if (>= (* f1-4 (- f2-2 (* f3-1 f3-1))) f0-5) + (set! (-> gp-0 15 x) (fmin (-> gp-0 15 x) (-> obj max-turn-speed))) + ) + ) + ) + ) + ) + ) + (else + (if (not (logtest? (-> obj flags) (vehicle-controller-flag no-slowing-for-turns))) + (set! (-> gp-0 15 x) (fmin (-> gp-0 15 x) (-> obj max-turn-speed))) + ) + (vector-! (-> gp-0 6) (-> gp-0 0) (-> obj dest-circle)) + (vector-normalize! (-> gp-0 6) 1.0) + (set! (-> gp-0 5 x) (- (-> gp-0 6 z))) + (set! (-> gp-0 5 y) 0.0) + (set! (-> gp-0 5 z) (-> gp-0 6 x)) + (if (logtest? (-> obj flags) (vehicle-controller-flag left-turn)) + (vector-float*! (-> gp-0 5) (-> gp-0 5) -1.0) + ) + (vector-float*! (-> gp-0 6) (-> gp-0 6) (-> obj dest-circle w)) + (vector+! (-> gp-0 4) (-> obj dest-circle) (-> gp-0 6)) + (when (logtest? (-> obj flags) (vehicle-controller-flag attached)) + (vector-! (-> gp-0 9) (-> obj turn-exit-point) (-> gp-0 0)) + (when (and (< (vector-dot (-> obj turn-exit-dir) (-> gp-0 9)) 0.0) + (>= (vector-dot (-> obj turn-exit-dir) (-> gp-0 3)) (cos 8192.0)) + ) + (if (not (vehicle-controller-method-14 obj arg2)) + (set! (-> gp-0 15 x) 0.0) + ) + ) + ) + ) + ) + (set! (-> gp-0 4 y) (-> gp-0 0 y)) + (when (and (nonzero? (-> obj traffic)) + (not (logtest? (-> obj flags) (vehicle-controller-flag ignore-others))) + (let ((f0-22 (-> arg2 camera-dist2)) + (f1-9 1228800.0) + ) + (< f0-22 (* f1-9 f1-9)) + ) + ) + (let ((s3-1 (new 'stack-no-clear 'array 'collide-shape 12)) + (f30-1 (-> arg2 root-override-2 root-prim prim-core world-sphere w)) + ) + (countdown (s4-1 (fill-actor-list-for-line-sphere + (-> obj traffic object-hash) + (-> gp-0 0) + (-> gp-0 1) + (* 1.5 f30-1) + s3-1 + 10 + (-> arg2 traffic-hash-id) + ) + ) + (let* ((s2-0 (the-as basic (-> s3-1 s4-1))) + (v1-70 (if (type? (the-as collide-shape s2-0) vehicle) + (the-as vehicle s2-0) + ) + ) + ) + (when (and v1-70 + (not (logtest? (-> v1-70 flags) (rigid-body-object-flag dead))) + (nonzero? (-> v1-70 flight-level-index)) + ) + (set! (-> gp-0 10 quad) (-> v1-70 root-override-2 trans quad)) + (set! (-> gp-0 11 quad) (-> v1-70 root-override-2 transv quad)) + (vector-! (-> gp-0 12) (-> gp-0 0) (-> gp-0 10)) + (.lvf vf1 (&-> (-> gp-0 12) quad)) + (.add.w.vf vf2 vf0 vf0 :mask #b1) + (.mul.vf vf1 vf1 vf1) + (.mul.x.vf acc vf2 vf1 :mask #b1) + (.add.mul.y.vf acc vf2 vf1 acc :mask #b1) + (.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1) + (.mov a0-35 vf1) + (let ((f1-12 a0-35)) + (vector-float*! (-> gp-0 14) (-> gp-0 12) (/ 1.0 (sqrtf f1-12))) + (when #t + (let* ((f0-28 (+ f30-1 (-> v1-70 root-override-2 root-prim prim-core world-sphere w))) + (f28-0 (* f0-28 f0-28)) + ) + (let ((f0-31 (fmax 0.0 (/ (- f28-0 f1-12) f28-0)))) + (when (not (logtest? (-> v1-70 flags) (rigid-body-object-flag player-driving))) + (when (and (< 0.0 sv-20) (< f1-12 f28-0)) + (vector-! (-> gp-0 13) (-> gp-0 1) (-> gp-0 11)) + (let ((f1-14 (vector-dot (-> gp-0 14) (-> gp-0 13)))) + (when (< f1-14 0.0) + (vector-float*! + (-> gp-0 6) + (-> gp-0 14) + (* -0.5 (/ sv-24 (+ sv-24 (-> v1-70 info-override info inv-mass))) sv-20 f1-14) + ) + (vector+! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6)) + ) + ) + ) + (vector-float*! (-> gp-0 6) (-> gp-0 14) (* 163840.0 f0-31)) + (set! (-> gp-0 6 y) 0.0) + (vector+! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6)) + ) + ) + (when (< (cos 8192.0) (- (vector-dot (-> gp-0 3) (-> gp-0 14)))) + (when (< (nearest-dist2-between-moving-points (-> gp-0 0) (-> gp-0 1) (-> gp-0 10) (-> gp-0 11) 2.0) f28-0) + (let ((f0-37 (fmax 0.0 (vector-dot (-> gp-0 3) (-> gp-0 11))))) + (set! (-> gp-0 15 x) (fmin (-> gp-0 15 x) f0-37)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + (when (not (logtest? (-> obj flags) (vehicle-controller-flag ignore-others))) + (vector-! (-> gp-0 6) (-> gp-0 4) (-> gp-0 0)) + (.lvf vf1 (&-> (-> gp-0 6) quad)) + (.add.w.vf vf2 vf0 vf0 :mask #b1) + (.mul.vf vf1 vf1 vf1) + (.mul.x.vf acc vf2 vf1 :mask #b1) + (.add.mul.y.vf acc vf2 vf1 acc :mask #b1) + (.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1) + (.mov v1-88 vf1) + (let ((f0-39 v1-88)) + (logclear! (-> obj flags) (vehicle-controller-flag off-path)) + (let ((f1-23 4096.0)) + (when (< (* f1-23 f1-23) f0-39) + (logior! (-> obj flags) (vehicle-controller-flag off-path)) + (let ((t9-8 vector-normalize!) + (a0-69 (-> gp-0 6)) + (f1-26 12288.0) + (f2-12 4096.0) + ) + (t9-8 a0-69 (fmin f1-26 (- f0-39 (* f2-12 f2-12)))) + ) + (vector+! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6)) + ) + ) + ) + (vector+float*! (-> gp-0 6) (-> gp-0 1) (-> gp-0 5) (- (vector-dot (-> gp-0 5) (-> gp-0 1)))) + (vector-! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6)) + ) + (cond + ((logtest? (-> obj flags) (vehicle-controller-flag direct-mode)) + (vector-! (-> gp-0 7) (-> obj turn-exit-point) (-> gp-0 0)) + (vector-normalize! (-> gp-0 7) (-> gp-0 15 x)) + (vector-! (-> gp-0 6) (-> gp-0 7) (-> gp-0 1)) + (vector-float*! (-> gp-0 6) (-> gp-0 6) 3.0) + (let ((f0-48 (vector-dot (-> gp-0 3) (-> gp-0 6)))) + (if (< f0-48 0.0) + (vector+float*! (-> gp-0 6) (-> gp-0 6) (-> gp-0 3) (* -0.875 f0-48)) + ) + ) + ) + (else + (vector+float*! (-> gp-0 8) (-> gp-0 0) (-> gp-0 1) 0.4) + (vector-! (-> gp-0 6) (-> gp-0 8) (-> obj turn-enter-point)) + (cond + ((< (vector-dot (-> gp-0 6) (-> obj turn-enter-dir)) 0.0) + (vector-! (-> gp-0 7) (-> obj turn-enter-point) (-> gp-0 0)) + ) + ((begin + (vector-! (-> gp-0 6) (-> gp-0 8) (-> obj turn-exit-point)) + (< (vector-dot (-> gp-0 6) (-> obj turn-exit-dir)) 0.0) + ) + (vector-! (-> gp-0 6) (-> gp-0 8) (-> obj dest-circle)) + (set! (-> gp-0 7 x) (- (-> gp-0 6 z))) + (set! (-> gp-0 7 y) 0.0) + (set! (-> gp-0 7 z) (-> gp-0 6 x)) + (if (logtest? (-> obj flags) (vehicle-controller-flag left-turn)) + (vector-float*! (-> gp-0 7) (-> gp-0 7) -1.0) + ) + ) + (else + (set! (-> gp-0 7 quad) (-> obj turn-exit-dir quad)) + ) + ) + (let ((f0-60 (vector-length (-> gp-0 7)))) + (if (< 0.1 f0-60) + (vector-float*! (-> gp-0 7) (-> gp-0 7) (/ (-> gp-0 15 x) f0-60)) + ) + ) + (vector-! (-> gp-0 6) (-> gp-0 7) (-> gp-0 1)) + (vector-float*! (-> gp-0 6) (-> gp-0 6) 2.0) + ) + ) + (vector+! (-> gp-0 2) (-> gp-0 2) (-> gp-0 6)) + (set! (-> sv-16 quad) (-> gp-0 2 quad)) + ) + (let ((v1-145 (-> *perf-stats* data 21))) + (b! (zero? (-> v1-145 ctrl)) cfg-76 :delay (nop!)) + (.mtc0 Perf 0) + (.sync.l) + (.sync.p) + (.mfpc a0-96 pcr0) + (+! (-> v1-145 accum0) a0-96) + (.mfpc a0-98 pcr1) + (+! (-> v1-145 accum1) a0-98) + ) + (label cfg-76) + 0 + 0 + (none) + ) + ) ;; definition for method 10 of type vehicle-controller ;; WARN: Return type mismatch int vs none. @@ -386,3 +714,7 @@ 0 (none) ) + + + + diff --git a/test/decompiler/reference/jak2/levels/city/common/vehicle-guard_REF.gc b/test/decompiler/reference/jak2/levels/city/common/vehicle-guard_REF.gc new file mode 100644 index 0000000000..7ab43ba20e --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/common/vehicle-guard_REF.gc @@ -0,0 +1,1625 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type turret-barrel-info +(deftype turret-barrel-info (structure) + ((local-pos vector :inline :offset-assert 0) + (local-dir vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; definition for method 3 of type turret-barrel-info +(defmethod inspect turret-barrel-info ((obj turret-barrel-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'turret-barrel-info) + (format #t "~1Tlocal-pos: #~%" (-> obj local-pos)) + (format #t "~1Tlocal-dir: #~%" (-> obj local-dir)) + (label cfg-4) + obj + ) + +;; definition of type turret-control-info +(deftype turret-control-info (structure) + ((joint-index int8 :offset-assert 0) + (barrel-count int8 :offset-assert 1) + (shot-speed float :offset-assert 4) + (attack-range float :offset-assert 8) + (rot-min float 2 :offset-assert 12) + (rot-max float 2 :offset-assert 20) + (rot-x-min float :offset 12) + (rot-x-max float :offset 20) + (rot-y-min float :offset 16) + (rot-y-max float :offset 24) + (local-pos vector :inline :offset-assert 32) + (local-dir vector :inline :offset-assert 48) + (barrel-array turret-barrel-info 4 :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #xc0 + :flag-assert #x9000000c0 + ) + +;; definition for method 3 of type turret-control-info +(defmethod inspect turret-control-info ((obj turret-control-info)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'turret-control-info) + (format #t "~1Tjoint-index: ~D~%" (-> obj joint-index)) + (format #t "~1Tbarrel-count: ~D~%" (-> obj barrel-count)) + (format #t "~1Tshot-speed: ~f~%" (-> obj shot-speed)) + (format #t "~1Tattack-range: ~f~%" (-> obj attack-range)) + (format #t "~1Trot-min[2] @ #x~X~%" (-> obj rot-min)) + (format #t "~1Trot-max[2] @ #x~X~%" (-> obj rot-max)) + (format #t "~1Trot-x-min: ~f~%" (-> obj rot-x-min)) + (format #t "~1Trot-x-max: ~f~%" (-> obj rot-x-max)) + (format #t "~1Trot-y-min: ~f~%" (-> obj rot-y-min)) + (format #t "~1Trot-y-max: ~f~%" (-> obj rot-y-max)) + (format #t "~1Tlocal-pos: #~%" (-> obj local-pos)) + (format #t "~1Tlocal-dir: #~%" (-> obj local-dir)) + (format #t "~1Tbarrel-array[4] @ #x~X~%" (-> obj barrel-array)) + (label cfg-4) + obj + ) + +;; definition of type turret-control +(deftype turret-control (structure) + ((info turret-control-info :offset-assert 0) + (guard-settings traffic-guard-type-settings :offset-assert 4) + (flags turret-flag :offset-assert 8) + (shot-count int8 :offset-assert 9) + (burst-count int16 :offset-assert 10) + (target-dist float :offset-assert 12) + (inaccuracy float :offset-assert 16) + (aim-offset-angle degrees :offset-assert 20) + (aim-rot float 2 :offset-assert 24) + (aim-rot-vel float 2 :offset-assert 32) + (aim-rot-offset float 2 :offset-assert 40) + (aim-rot-x float :offset 24) + (aim-rot-y float :offset 28) + (aim-rot-vel-x float :offset 32) + (aim-rot-vel-y float :offset 36) + (target-in-sight-time time-frame :offset-assert 48) + (aim-acquire-time time-frame :offset-assert 56) + (shoot-time time-frame :offset-assert 64) + (owner-handle handle :offset-assert 72) + ) + :pack-me + :method-count-assert 18 + :size-assert #x50 + :flag-assert #x1200000050 + (:methods + (turret-control-method-9 (_type_ vehicle vector vector) none 9) + (turret-control-method-10 (_type_ vehicle) none 10) + (turret-control-method-11 (_type_ object object vector) none 11) + (turret-control-method-12 (_type_ joint-mod-rotate-local) none 12) + (turret-control-method-13 (_type_) none 13) + (turret-control-method-14 (_type_) none 14) + (turret-control-method-15 (_type_ turret-control-info) none 15) + (turret-control-method-16 (_type_ float float) none 16) + (turret-control-method-17 (_type_ vehicle) none 17) + ) + ) + +;; definition for method 3 of type turret-control +(defmethod inspect turret-control ((obj turret-control)) + (when (not obj) + (set! obj obj) + (goto cfg-16) + ) + (format #t "[~8x] ~A~%" obj 'turret-control) + (format #t "~1Tinfo: #~%" (-> obj info)) + (format #t "~1Tguard-settings: #~%" (-> obj guard-settings)) + (format #t "~1Tflags: #x~X : (turret-flag " (-> obj flags)) + (let ((s5-0 (-> obj flags))) + (if (= (logand s5-0 (turret-flag no-rot-y-clamp)) (turret-flag no-rot-y-clamp)) + (format #t "no-rot-y-clamp ") + ) + (if (= (logand s5-0 (turret-flag should-shoot)) (turret-flag should-shoot)) + (format #t "should-shoot ") + ) + (if (= (logand s5-0 (turret-flag aiming)) (turret-flag aiming)) + (format #t "aiming ") + ) + (if (= (logand s5-0 (turret-flag display-marks)) (turret-flag display-marks)) + (format #t "display-marks ") + ) + (if (= (logand s5-0 (turret-flag targetting-laser)) (turret-flag targetting-laser)) + (format #t "targetting-laser ") + ) + (if (= (logand s5-0 (turret-flag firing)) (turret-flag firing)) + (format #t "firing ") + ) + ) + (format #t ")~%") + (format #t "~1Tshot-count: ~D~%" (-> obj shot-count)) + (format #t "~1Tburst-count: ~D~%" (-> obj burst-count)) + (format #t "~1Ttarget-dist: ~f~%" (-> obj target-dist)) + (format #t "~1Tinaccuracy: ~f~%" (-> obj inaccuracy)) + (format #t "~1Taim-offset-angle: ~f~%" (-> obj aim-offset-angle)) + (format #t "~1Taim-rot[2] @ #x~X~%" (-> obj aim-rot)) + (format #t "~1Taim-rot-vel[2] @ #x~X~%" (-> obj aim-rot-vel)) + (format #t "~1Taim-rot-offset[2] @ #x~X~%" (-> obj aim-rot-offset)) + (format #t "~1Taim-rot-x: ~f~%" (-> obj aim-rot-x)) + (format #t "~1Taim-rot-y: ~f~%" (-> obj aim-rot-y)) + (format #t "~1Taim-rot-vel-x: ~f~%" (-> obj aim-rot-vel-x)) + (format #t "~1Taim-rot-vel-y: ~f~%" (-> obj aim-rot-vel-y)) + (format #t "~1Ttarget-in-sight-time: ~D~%" (-> obj target-in-sight-time)) + (format #t "~1Taim-acquire-time: ~D~%" (-> obj aim-acquire-time)) + (format #t "~1Tshoot-time: ~D~%" (-> obj shoot-time)) + (format #t "~1Towner-handle: ~D~%" (-> obj owner-handle)) + (label cfg-16) + obj + ) + +;; definition for method 15 of type turret-control +;; WARN: Return type mismatch int vs none. +(defmethod turret-control-method-15 turret-control ((obj turret-control) (arg0 turret-control-info)) + (set! (-> obj info) arg0) + (set! (-> obj owner-handle) (the-as handle #f)) + 0 + (none) + ) + +;; definition for method 12 of type turret-control +;; WARN: Return type mismatch int vs none. +(defmethod turret-control-method-12 turret-control ((obj turret-control) (arg0 joint-mod-rotate-local)) + (let ((v1-0 (new 'stack-no-clear 'vector))) + (set! (-> v1-0 x) (- (-> obj aim-rot-x))) + (set! (-> v1-0 y) (-> obj aim-rot-y)) + (set! (-> v1-0 z) 0.0) + (quaternion-zxy! (-> arg0 rotation) v1-0) + ) + 0 + (none) + ) + +;; definition for method 13 of type turret-control +;; WARN: Return type mismatch int vs none. +(defmethod turret-control-method-13 turret-control ((obj turret-control)) + (let ((f30-0 + (/ (* 298261630.0 (-> obj inaccuracy) (-> obj guard-settings inaccuracy)) (fmax 40960.0 (-> obj target-dist))) + ) + ) + (set! (-> obj aim-rot-offset 0) (* f30-0 (cos (-> obj aim-offset-angle)))) + (set! (-> obj aim-rot-offset 1) (* f30-0 (sin (-> obj aim-offset-angle)))) + ) + (+! (-> obj aim-offset-angle) (* 32768.0 (rand-vu))) + 0 + (none) + ) + +;; definition for method 14 of type turret-control +;; WARN: Return type mismatch int vs none. +(defmethod turret-control-method-14 turret-control ((obj turret-control)) + (logclear! (-> obj flags) (turret-flag firing aiming)) + (set! (-> obj burst-count) 0) + (set! (-> obj aim-offset-angle) (* 65536.0 (rand-vu))) + 0 + (none) + ) + +;; definition for function vehicle-los-clear? +;; INFO: Used lq/sq +(defun vehicle-los-clear? ((arg0 vector) (arg1 vector)) + (let ((v1-0 (new 'stack-no-clear 'collide-query))) + (set! (-> v1-0 start-pos quad) (-> arg0 quad)) + (vector-! (-> v1-0 move-dist) arg1 arg0) + (let ((a0-1 v1-0)) + (set! (-> a0-1 radius) 2048.0) + (set! (-> a0-1 collide-with) (collide-spec backgnd)) + (set! (-> a0-1 ignore-process0) #f) + (set! (-> a0-1 ignore-process1) #f) + (set! (-> a0-1 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1)) + (set! (-> a0-1 action-mask) (collide-action solid)) + ) + (< (fill-and-probe-using-line-sphere *collide-cache* v1-0) 0.0) + ) + ) + +;; definition for function vehicle-draw-beam +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun vehicle-draw-beam ((arg0 sparticle-launcher) (arg1 vector) (arg2 vector) (arg3 object) (arg4 symbol)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + (vf7 :class vf) + ) + (init-vf0-vector) + (let ((a1-2 (vector+! (new 'stack-no-clear 'vector) arg1 arg2))) + (when (or (not arg4) (line-in-view-frustum? arg1 a1-2)) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'quaternion)) + ) + (if (get-field-spec-by-id arg0 (sp-field-id spt-scale-y)) + (set! (-> *beam-info* y-scale) (vector-length arg2)) + ) + (let ((a0-4 s5-0)) + (let ((v1-10 arg2)) + (let ((a1-5 0.5)) + (.mov vf7 a1-5) + ) + (.lvf vf5 (&-> v1-10 quad)) + ) + (.lvf vf4 (&-> arg1 quad)) + (.add.x.vf vf6 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf5 vf7 :mask #b111) + (.add.mul.w.vf vf6 vf4 vf0 acc :mask #b111) + (.svf (&-> a0-4 quad) vf6) + ) + (forward-up->quaternion s4-0 arg2 (new 'static 'vector :y 1.0 :w 1.0)) + (dotimes (s3-1 3) + (quaternion-rotate-local-z! s4-0 s4-0 10922.667) + (quaternion-copy! *particle-quat* s4-0) + (let ((t9-5 sp-launch-particles-var) + (a0-8 *sp-particle-system-3d*) + (a1-9 arg0) + (a2-3 *launch-matrix*) + ) + (set! (-> a2-3 trans quad) (-> s5-0 quad)) + (t9-5 a0-8 a1-9 a2-3 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for function vehicle-draw-laser-spot +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun vehicle-draw-laser-spot ((arg0 vector) (arg1 vector) (arg2 symbol)) + (vector+float*! (new 'stack-no-clear 'vector) arg0 arg1 -1638.4) + (cond + (arg2 + (let ((t9-0 sp-launch-particles-var) + (a0-2 *sp-particle-system-2d*) + (a1-1 (-> *part-id-table* 771)) + (a2-1 *launch-matrix*) + ) + (set! (-> a2-1 trans quad) (-> arg0 quad)) + (t9-0 a0-2 a1-1 a2-1 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + (let ((t9-1 sp-launch-particles-var) + (a0-3 *sp-particle-system-2d*) + (a1-2 (-> *part-id-table* 770)) + (a2-2 *launch-matrix*) + ) + (set! (-> a2-2 trans quad) (-> arg0 quad)) + (t9-1 a0-3 a1-2 a2-2 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + ) + (else + (let ((t9-2 sp-launch-particles-var) + (a0-4 *sp-particle-system-2d*) + (a1-3 (-> *part-id-table* 772)) + (a2-3 *launch-matrix*) + ) + (set! (-> a2-3 trans quad) (-> arg0 quad)) + (t9-2 a0-4 a1-3 a2-3 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + ) + ) + 0 + (none) + ) + +;; definition for function vehicle-draw-laser +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defun vehicle-draw-laser ((arg0 vector) (arg1 vector)) + (vector-normalize! (vector-! (new 'stack-no-clear 'vector) (camera-pos) arg0) 1.0) + (set! (-> (new 'stack-no-clear 'vector) quad) (-> arg0 quad)) + (let ((s5-1 (-> *part-id-table* 769))) + (get-field-spec-by-id s5-1 (sp-field-id spt-timer)) + (let* ((s4-3 (vector-! (new 'stack-no-clear 'vector) arg1 arg0)) + (f30-0 (vector-vector-distance (camera-pos) arg0)) + (s3-2 (get-field-spec-by-id s5-1 (sp-field-id spt-scale-x))) + (f0-4 (cond + ((< f30-0 122.88) + 0.0 + ) + ((< 65536.0 f30-0) + 1.0 + ) + (else + (* 0.000015287453 (+ -122.88 f30-0)) + ) + ) + ) + (f30-1 (-> s3-2 initial-valuef)) + (f28-0 (-> s3-2 random-rangef)) + ) + (set! (-> s3-2 initial-valuef) (* f30-1 f0-4)) + (set! (-> s3-2 random-rangef) (* f28-0 f0-4)) + (vehicle-draw-beam s5-1 arg0 s4-3 #f #t) + (set! (-> s3-2 initial-valuef) f30-1) + (set! (-> s3-2 random-rangef) f28-0) + ) + ) + 0 + (none) + ) + +;; definition for method 9 of type turret-control +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod turret-control-method-9 turret-control ((obj turret-control) (arg0 vehicle) (arg1 vector) (arg2 vector)) + (with-pp + (let ((gp-0 (new 'stack-no-clear 'turret-unknown-stack-structure))) + (set! (-> gp-0 vec-12 x) (-> pp clock seconds-per-frame)) + (let* ((v1-1 (-> gp-0 mat-1)) + (a3-1 (-> arg0 node-list data (-> obj info joint-index) bone transform)) + (a0-4 (-> a3-1 quad 0)) + (a1-4 (-> a3-1 quad 1)) + (a2-1 (-> a3-1 quad 2)) + (a3-2 (-> a3-1 trans quad)) + ) + (set! (-> v1-1 quad 0) a0-4) + (set! (-> v1-1 quad 1) a1-4) + (set! (-> v1-1 quad 2) a2-1) + (set! (-> v1-1 trans quad) a3-2) + ) + (set! (-> obj target-dist) (vector-vector-distance (-> gp-0 mat-1 trans) arg1)) + (let ((f0-3 (/ (-> obj target-dist) (-> obj info shot-speed)))) + (vector+float*! (-> gp-0 vec-1) arg1 arg2 f0-3) + ) + (when (not (logtest? (-> obj flags) (turret-flag aiming))) + (logior! (-> obj flags) (turret-flag aiming)) + (turret-control-method-13 obj) + ) + (vector-matrix*! (-> gp-0 vec-6) (-> obj info local-pos) (-> gp-0 mat-1)) + (vector-! (-> gp-0 vec-5) (-> gp-0 vec-1) (-> gp-0 vec-6)) + (let* ((v1-14 (-> gp-0 mat-1)) + (a3-3 (-> arg0 node-list data 0 bone transform)) + (a0-11 (-> a3-3 quad 0)) + (a1-9 (-> a3-3 quad 1)) + (a2-3 (-> a3-3 quad 2)) + (a3-4 (-> a3-3 trans quad)) + ) + (set! (-> v1-14 quad 0) a0-11) + (set! (-> v1-14 quad 1) a1-9) + (set! (-> v1-14 quad 2) a2-3) + (set! (-> v1-14 trans quad) a3-4) + ) + (matrix-transpose! (the-as matrix (-> gp-0 vec-8)) (-> gp-0 mat-1)) + (vector-rotate*! (-> gp-0 vec-3) (-> gp-0 vec-5) (the-as matrix (-> gp-0 vec-8))) + (set! (-> gp-0 vec-4 y) (atan (-> gp-0 vec-3 x) (-> gp-0 vec-3 z))) + (let* ((v1-15 (-> gp-0 vec-3)) + (f0-11 (sqrtf (+ (* (-> v1-15 x) (-> v1-15 x)) (* (-> v1-15 z) (-> v1-15 z))))) + ) + (set! (-> gp-0 vec-4 x) (atan (-> gp-0 vec-3 y) f0-11)) + ) + (+! (-> gp-0 vec-4 x) (-> obj aim-rot-offset 0)) + (+! (-> gp-0 vec-4 y) (-> obj aim-rot-offset 1)) + (dotimes (s3-1 2) + (+! (-> obj aim-rot-vel s3-1) + (* 5.0 + (- (* 8.0 (if (or (zero? s3-1) (zero? (logand (-> obj flags) (turret-flag no-rot-y-clamp)))) + (- (-> gp-0 vec-4 data s3-1) (-> obj aim-rot s3-1)) + (deg- (-> gp-0 vec-4 data s3-1) (-> obj aim-rot s3-1)) + ) + ) + (-> obj aim-rot-vel s3-1) + ) + (-> gp-0 vec-12 x) + ) + ) + (set! (-> obj aim-rot-vel s3-1) (* (-> obj aim-rot-vel s3-1) (fmax 0.0 (- 1.0 (* 0.1 (-> gp-0 vec-12 x)))))) + (+! (-> obj aim-rot s3-1) (* (-> obj aim-rot-vel s3-1) (-> gp-0 vec-12 x))) + (when (or (zero? s3-1) (zero? (logand (-> obj flags) (turret-flag no-rot-y-clamp)))) + (let ((f0-31 (-> obj info rot-min s3-1))) + (when (< (-> obj aim-rot s3-1) f0-31) + (set! (-> obj aim-rot s3-1) f0-31) + (set! (-> obj aim-rot-vel s3-1) 0.0) + ) + ) + (let ((f0-33 (-> obj info rot-max s3-1))) + (when (< f0-33 (-> obj aim-rot s3-1)) + (set! (-> obj aim-rot s3-1) f0-33) + (set! (-> obj aim-rot-vel s3-1) 0.0) + ) + ) + ) + ) + (logclear! (-> obj flags) (turret-flag should-shoot)) + (when (and (< (fabs (deg- (-> obj aim-rot-x) (-> gp-0 vec-4 x))) 2912.7112) + (< (fabs (deg- (-> obj aim-rot-y) (-> gp-0 vec-4 y))) 2912.7112) + (< (-> obj target-dist) (-> obj info attack-range)) + ) + (logior! (-> obj flags) (turret-flag should-shoot)) + (when (logtest? (-> obj flags) (turret-flag targetting-laser)) + (let* ((v1-88 (-> gp-0 mat-1)) + (a3-5 (-> arg0 node-list data (-> obj info joint-index) bone transform)) + (a0-29 (-> a3-5 quad 0)) + (a1-20 (-> a3-5 quad 1)) + (a2-5 (-> a3-5 quad 2)) + (a3-6 (-> a3-5 trans quad)) + ) + (set! (-> v1-88 quad 0) a0-29) + (set! (-> v1-88 quad 1) a1-20) + (set! (-> v1-88 quad 2) a2-5) + (set! (-> v1-88 trans quad) a3-6) + ) + (set! (-> gp-0 vec-7 quad) (-> gp-0 mat-1 vector 2 quad)) + (let ((s3-2 (new 'stack-no-clear 'collide-query))) + (set! (-> s3-2 start-pos quad) (-> gp-0 vec-6 quad)) + (vector-float*! (-> s3-2 move-dist) (-> gp-0 vec-7) (-> obj info attack-range)) + (let ((v1-93 s3-2)) + (set! (-> v1-93 radius) 409.6) + (set! (-> v1-93 collide-with) + (collide-spec backgnd jak bot crate enemy obstacle hit-by-others-list player-list) + ) + (set! (-> v1-93 ignore-process0) arg0) + (set! (-> v1-93 ignore-process1) #f) + (set! (-> v1-93 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nojak #x1 :probe #x1 :noendlessfall #x1)) + (set! (-> v1-93 action-mask) (collide-action solid)) + ) + (let ((f30-1 (fill-and-probe-using-line-sphere *collide-cache* s3-2)) + (s5-1 #f) + ) + (cond + ((< f30-1 0.0) + (vector+! (-> gp-0 vec-2) (-> s3-2 start-pos) (-> s3-2 move-dist)) + ) + (else + (let* ((s4-1 (-> s3-2 best-other-tri collide-ptr)) + (a0-43 (if (type? s4-1 collide-shape-prim) + s4-1 + ) + ) + ) + (if (and a0-43 (logtest? (-> (the-as collide-shape-prim a0-43) prim-core collide-as) (collide-spec jak))) + (set! s5-1 #t) + ) + ) + (vector+float*! (-> gp-0 vec-2) (-> s3-2 start-pos) (-> s3-2 move-dist) f30-1) + (vehicle-draw-laser-spot (-> gp-0 vec-2) (-> gp-0 vec-7) s5-1) + ) + ) + (when (not s5-1) + ) + ) + ) + (let ((t9-13 vehicle-draw-laser) + (a0-48 (-> gp-0 vec-6)) + (a1-27 (-> gp-0 vec-2)) + ) + (-> gp-0 vec-7) + (t9-13 a0-48 a1-27) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 10 of type turret-control +;; WARN: Return type mismatch int vs none. +(defmethod turret-control-method-10 turret-control ((obj turret-control) (arg0 vehicle)) + (with-pp + (cond + ((logtest? (-> obj flags) (turret-flag should-shoot)) + (cond + ((logtest? (-> obj flags) (turret-flag firing)) + (cond + ((> (-> obj shot-count) 0) + (if (>= (- (-> pp clock frame-counter) (-> obj shoot-time)) + (the-as time-frame (-> obj guard-settings shot-delay)) + ) + (turret-control-method-17 obj arg0) + ) + ) + (else + (logclear! (-> obj flags) (turret-flag firing)) + (+! (-> obj burst-count) 1) + (turret-control-method-13 obj) + ) + ) + ) + (else + (when (and (>= (- (-> pp clock frame-counter) (-> obj shoot-time)) + (the-as time-frame (-> obj guard-settings burst-delay)) + ) + (>= (- (-> pp clock frame-counter) (-> obj aim-acquire-time)) + (the-as time-frame (-> obj guard-settings acquire-delay)) + ) + ) + (set! (-> obj shot-count) + (+ (-> obj guard-settings shot-count) (rand-vu-int-count (+ (-> obj guard-settings rand-shot-count) 1))) + ) + (logior! (-> obj flags) (turret-flag firing)) + ) + ) + ) + ) + (else + (set! (-> obj aim-acquire-time) (-> pp clock frame-counter)) + (turret-control-method-14 obj) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 11 of type turret-control +;; WARN: Return type mismatch int vs none. +(defmethod turret-control-method-11 turret-control ((obj turret-control) (arg0 object) (arg1 object) (arg2 vector)) + (when (nonzero? (-> obj info)) + (set! (-> obj inaccuracy) (* 0.000012207031 (+ 20480.0 (vector-length arg2)))) + (turret-control-method-9 obj (the-as vehicle arg0) (the-as vector arg1) arg2) + (turret-control-method-10 obj (the-as vehicle arg0)) + ) + 0 + (none) + ) + +;; definition for method 17 of type turret-control +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod turret-control-method-17 turret-control ((obj turret-control) (arg0 vehicle)) + (with-pp + (let ((s4-0 (new 'stack-no-clear 'turret-unknown-stack-structure2))) + (set! (-> s4-0 proj-params ent) (-> arg0 entity)) + (set! (-> s4-0 proj-params charge) 1.0) + (set! (-> s4-0 proj-params options) (projectile-options)) + (set! (-> s4-0 proj-params notify-handle) (process->handle arg0)) + (set! (-> s4-0 proj-params owner-handle) (process->handle (handle->process (-> obj owner-handle)))) + (set! (-> s4-0 proj-params ignore-handle) (process->handle arg0)) + (let* ((v1-14 *game-info*) + (a0-16 (+ (-> v1-14 attack-id) 1)) + ) + (set! (-> v1-14 attack-id) a0-16) + (set! (-> s4-0 proj-params attack-id) a0-16) + ) + (set! (-> s4-0 proj-params timeout) (new 'static 'handle :process #x4b0 :u64 #x4b0)) + (let* ((v1-16 (-> s4-0 mat-1)) + (a3-0 (-> arg0 node-list data (-> obj info joint-index) bone transform)) + (a0-20 (-> a3-0 quad 0)) + (a1-6 (-> a3-0 quad 1)) + (a2-0 (-> a3-0 quad 2)) + (a3-1 (-> a3-0 trans quad)) + ) + (set! (-> v1-16 quad 0) a0-20) + (set! (-> v1-16 quad 1) a1-6) + (set! (-> v1-16 quad 2) a2-0) + (set! (-> v1-16 trans quad) a3-1) + ) + (dotimes (s3-0 (-> obj info barrel-count)) + (vector-matrix*! (-> s4-0 vec-1) (the-as vector (-> obj info barrel-array s3-0)) (-> s4-0 mat-1)) + (set! (-> s4-0 vec-2 quad) (-> s4-0 mat-1 vector 2 quad)) + (set! (-> s4-0 proj-params pos quad) (-> s4-0 vec-1 quad)) + (vector-float*! (-> s4-0 proj-params vel) (-> s4-0 vec-2) (-> obj info shot-speed)) + (spawn-projectile guard-shot (-> s4-0 proj-params) arg0 *default-dead-pool*) + ) + ) + (set! (-> obj shoot-time) (-> pp clock frame-counter)) + (+! (-> obj shot-count) -1) + 0 + (none) + ) + ) + +;; definition for method 16 of type turret-control +;; WARN: Return type mismatch int vs none. +(defmethod turret-control-method-16 turret-control ((obj turret-control) (arg0 float) (arg1 float)) + (with-pp + (let ((f0-0 (-> pp clock seconds-per-frame))) + (set! (-> obj aim-rot-vel-x) arg1) + (set! (-> obj aim-rot-vel-y) arg0) + (dotimes (v1-1 2) + (+! (-> obj aim-rot v1-1) (* f0-0 (-> obj aim-rot-vel v1-1))) + (let ((f1-4 (-> obj info rot-min v1-1))) + (when (< (-> obj aim-rot v1-1) f1-4) + (set! (-> obj aim-rot v1-1) f1-4) + (set! (-> obj aim-rot-vel v1-1) 0.0) + ) + ) + (let ((f1-6 (-> obj info rot-max v1-1))) + (when (< f1-6 (-> obj aim-rot v1-1)) + (set! (-> obj aim-rot v1-1) f1-6) + (set! (-> obj aim-rot-vel v1-1) 0.0) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition of type vehicle-guard-target-data +(deftype vehicle-guard-target-data (structure) + ((tpos vector :inline :offset-assert 0) + (spos vector :inline :offset-assert 16) + (tvel vector :inline :offset-assert 32) + (svel vector :inline :offset-assert 48) + (tdir vector :inline :offset-assert 64) + (sdir vector :inline :offset-assert 80) + (to-target vector :inline :offset-assert 96) + (to-target-dir vector :inline :offset-assert 112) + (temp vector :inline :offset-assert 128) + (target target :offset-assert 144) + (dist float :offset-assert 148) + (inv-dist float :offset-assert 152) + (attack-range float :offset-assert 156) + ) + :method-count-assert 9 + :size-assert #xa0 + :flag-assert #x9000000a0 + ) + +;; definition for method 3 of type vehicle-guard-target-data +(defmethod inspect vehicle-guard-target-data ((obj vehicle-guard-target-data)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-guard-target-data) + (format #t "~1Ttpos: #~%" (-> obj tpos)) + (format #t "~1Tspos: #~%" (-> obj spos)) + (format #t "~1Ttvel: #~%" (-> obj tvel)) + (format #t "~1Tsvel: #~%" (-> obj svel)) + (format #t "~1Ttdir: #~%" (-> obj tdir)) + (format #t "~1Tsdir: #~%" (-> obj sdir)) + (format #t "~1Tto-target: #~%" (-> obj to-target)) + (format #t "~1Tto-target-dir: #~%" (-> obj to-target-dir)) + (format #t "~1Ttemp: #~%" (-> obj temp)) + (format #t "~1Ttarget: ~A~%" (-> obj target)) + (format #t "~1Tdist: ~f~%" (-> obj dist)) + (format #t "~1Tinv-dist: ~f~%" (-> obj inv-dist)) + (format #t "~1Tattack-range: ~f~%" (-> obj attack-range)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-guard +(deftype vehicle-guard (vehicle) + ((ai-hook (function vehicle-guard none) :offset-assert 880) + (turret turret-control :inline :offset-assert 888) + (target-flags turret-flag :offset-assert 968) + (target-in-sight-time time-frame :offset-assert 976) + (minimap connection-minimap :offset-assert 984) + (vehicle-guard-pad-k1jn23k1 uint32 :offset-assert 988) + (traffic-target-status traffic-target-status :offset-assert 992) + (pursuit-target handle :offset-assert 1000) + (vehicle-guard-pad-1kjh2nb3k1 uint32 16 :offset-assert 1008) + (lod2 symbol :offset-assert 1072) + ) + :heap-base #x3c0 + :method-count-assert 159 + :size-assert #x434 + :flag-assert #x9f03c00434 + (:methods + (hostile () _type_ :state 144) + (stop-and-shoot () _type_ :state 145) + (slow-pursuit () _type_ :state 146) + (vehicle-guard-method-147 () none 147) + (vehicle-guard-method-148 () none 148) + (waiting-ambush () _type_ :state 149) + (vehicle-guard-method-150 (_type_) none 150) + (vehicle-guard-method-151 (_type_ vehicle-guard-target-data) none 151) + (vehicle-guard-method-152 (_type_ vehicle-guard-target-data) none 152) + (vehicle-guard-method-153 (_type_ target) none 153) + (vehicle-guard-method-154 (_type_) none 154) + (vehicle-guard-method-155 (_type_ vector vector) none 155) + (vehicle-guard-method-156 (_type_) none 156) + (vehicle-guard-method-157 (_type_ vehicle-guard-target-data) symbol 157) + (vehicle-guard-method-158 (_type_) none 158) + ) + ) + +;; definition for method 3 of type vehicle-guard +(defmethod inspect vehicle-guard ((obj vehicle-guard)) + (when (not obj) + (set! obj obj) + (goto cfg-14) + ) + (let ((t9-0 (method-of-type vehicle inspect))) + (t9-0 obj) + ) + (format #t "~2Tai-hook: ~A~%" (-> obj ai-hook)) + (format #t "~2Tturret: #~%" (-> obj turret)) + (format #t "~2Ttarget-flags: #x~X : (traffic-target-flag " (-> obj target-flags)) + (let ((s5-0 (-> obj target-flags))) + (if (= (logand s5-0 (turret-flag firing)) (turret-flag firing)) + (format #t "visible-now ") + ) + (if (= (logand s5-0 (turret-flag should-shoot)) (turret-flag should-shoot)) + (format #t "visible-ever ") + ) + (if (= (logand s5-0 (turret-flag display-marks)) (turret-flag display-marks)) + (format #t "force-visible ") + ) + (if (= (logand s5-0 (turret-flag aiming)) (turret-flag aiming)) + (format #t "visible-recently ") + ) + (if (= (logand s5-0 (turret-flag targetting-laser)) (turret-flag targetting-laser)) + (format #t "updated ") + ) + ) + (format #t ")~%") + (format #t "~2Ttarget-in-sight-time: ~D~%" (-> obj target-in-sight-time)) + (format #t "~2Tminimap: #~%" (-> obj minimap)) + (format #t "~2Ttraffic-target-status: #~%" (&-> obj traffic-target-status)) + (format #t "~2Tpursuit-target: ~D~%" (-> obj pursuit-target)) + (format #t "~2Tlod2: ~A~%" (-> obj lod2)) + (label cfg-14) + obj + ) + +;; definition for method 153 of type vehicle-guard +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-guard-method-153 vehicle-guard ((obj vehicle-guard) (arg0 target)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> s5-0 quad) (-> (get-trans arg0 3) quad)) + (turret-control-method-11 (-> obj turret) obj s5-0 (-> arg0 control transv)) + ) + 0 + (none) + ) + +;; definition for method 151 of type vehicle-guard +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-guard-method-151 vehicle-guard ((obj vehicle-guard) (arg0 vehicle-guard-target-data)) + (let ((s5-0 (handle->process (-> obj pursuit-target)))) + (set! (-> arg0 target) (the-as target s5-0)) + (when s5-0 + (set! (-> arg0 tpos quad) (-> (the-as process-drawable s5-0) root trans quad)) + (set! (-> arg0 spos quad) (-> obj root-override-2 trans quad)) + (set! (-> arg0 tvel quad) (-> (the-as process-drawable s5-0) root transv quad)) + (set! (-> arg0 svel quad) (-> obj root-override-2 transv quad)) + (vector-normalize-copy! (-> arg0 tdir) (-> arg0 tvel) 1.0) + (vector-normalize-copy! (-> arg0 sdir) (-> arg0 svel) 1.0) + (set! (-> arg0 tpos y) (+ 4096.0 (-> arg0 tpos y))) + (vector-! (-> arg0 to-target) (-> arg0 tpos) (-> arg0 spos)) + (let* ((f0-2 (vector-length (-> arg0 to-target))) + (f1-2 (/ 1.0 f0-2)) + ) + (set! (-> arg0 dist) f0-2) + (set! (-> arg0 inv-dist) f1-2) + (vector-float*! (-> arg0 to-target-dir) (-> arg0 to-target) f1-2) + ) + (let ((f0-3 204800.0)) + (if (logtest? (focus-status pilot) (-> (the-as process-focusable s5-0) focus-status)) + (set! f0-3 (+ 102400.0 f0-3)) + ) + (set! (-> arg0 attack-range) f0-3) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 152 of type vehicle-guard +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-guard-method-152 vehicle-guard ((obj vehicle-guard) (arg0 vehicle-guard-target-data)) + (let ((s4-0 (handle->process (-> obj pursuit-target)))) + (cond + ((logtest? (rigid-body-object-flag target-in-sight) (-> obj flags)) + (logclear! (-> obj controller flags) (vehicle-controller-flag direct-mode)) + (when (>= (- (vector-dot (-> arg0 to-target-dir) (-> arg0 tdir))) (cos 21845.334)) + (logior! (-> obj controller flags) (vehicle-controller-flag direct-mode)) + (vector-! (-> arg0 temp) (-> arg0 svel) (-> arg0 tvel)) + (let* ((f2-0 (vector-dot (-> arg0 temp) (-> arg0 to-target-dir))) + (f0-5 (fmax 0.0 (fmin 1.0 (/ (-> arg0 dist) (fmax 4096.0 f2-0))))) + ) + (vector+float*! (-> arg0 tpos) (-> arg0 tpos) (-> arg0 tvel) f0-5) + (cond + ((or (< f0-5 0.05) (vehicle-los-clear? (-> arg0 tpos) (-> arg0 spos))) + (vector-! (-> arg0 to-target) (-> arg0 tpos) (-> arg0 spos)) + (vector-normalize-copy! (-> arg0 to-target-dir) (-> arg0 to-target) 1.0) + (vector-float*! (-> arg0 tvel) (-> arg0 tvel) -1.0) + ) + (else + (set! (-> arg0 tpos quad) (-> (the-as process-drawable s4-0) root trans quad)) + ) + ) + ) + ) + (vehicle-controller-method-19 (-> obj controller) (-> arg0 spos) #x43cccccd (-> arg0 tpos) (-> arg0 tvel)) + (vector-! (-> arg0 to-target) (-> obj controller target-point) (-> arg0 spos)) + (vector-normalize-copy! (-> arg0 to-target-dir) (-> arg0 to-target) 1.0) + (cond + ((< -12288.0 (- (-> arg0 tpos y) (-> arg0 spos y))) + (logior! (-> obj controller flags) (vehicle-controller-flag ignore-others no-slowing-for-turns)) + (let* ((f0-9 (* 2.0 (-> obj info-override max-xz-speed))) + (f1-8 (fmax 0.0 (vector-dot (-> arg0 sdir) (-> arg0 to-target-dir)))) + (f0-10 (* f0-9 (* f1-8 f1-8))) + ) + (+! (-> obj controller target-speed) f0-10) + ) + ) + (else + (logclear! (-> obj controller flags) (vehicle-controller-flag ignore-others no-slowing-for-turns)) + (let ((f0-13 (* (-> obj info-override max-xz-speed) (fmax 0.0 (vector-dot (-> arg0 sdir) (-> arg0 to-target-dir))))) + ) + (+! (-> obj controller target-speed) f0-13) + ) + ) + ) + ) + (else + ) + ) + ) + 0 + (none) + ) + +;; definition for method 150 of type vehicle-guard +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-guard-method-150 vehicle-guard ((obj vehicle-guard)) + (with-pp + (cond + ((handle->process (-> obj pursuit-target)) + (let ((v1-3 (new 'stack-no-clear 'vehicle-control-point))) + (set! (-> v1-3 local-pos quad) (-> obj root-override-2 trans quad)) + (let ((v1-4 (traffic-engine-method-49 + (-> obj controller traffic) + (-> v1-3 local-pos) + (-> obj traffic-priority-id) + (the-as traffic-target-status (&-> obj traffic-target-status)) + ) + ) + ) + (when (logtest? (-> v1-4 flags) (traffic-target-flag updated)) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logclear (-> obj flags) (rigid-body-object-flag target-in-sight))) + ) + (when (logtest? (-> v1-4 flags) (traffic-target-flag visible-now)) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logior (rigid-body-object-flag target-in-sight) (-> obj flags))) + ) + (set! (-> obj target-in-sight-time) (-> pp clock frame-counter)) + ) + ) + (set! (-> obj target-flags) (the-as turret-flag (-> v1-4 flags))) + ) + ) + (when (not (logtest? (rigid-body-object-flag in-pursuit) (-> obj flags))) + (if (logtest? (rigid-body-object-flag target-in-sight) (-> obj flags)) + (vehicle-method-108 obj) + ) + ) + ) + (else + (vehicle-method-109 obj) + ) + ) + (let ((v1-22 (if (logtest? (rigid-body-object-flag in-pursuit) (-> obj flags)) + (-> obj draw lod-set lod 1 geo) + (-> obj lod2) + ) + ) + ) + (when (!= v1-22 (-> obj draw lod-set lod 2 geo)) + (set! (-> obj draw lod-set lod 2 geo) (the-as merc-ctrl v1-22)) + (set! (-> obj draw cur-lod) -1) + (lod-set! (-> obj draw) (-> obj draw desired-lod)) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 155 of type vehicle-guard +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-guard-method-155 vehicle-guard ((obj vehicle-guard) (arg0 vector) (arg1 vector)) + (cond + (#f + (let ((s5-0 (new 'stack-no-clear 'traj3d-params))) + (let ((f0-2 (+ 0.5 (* 0.5 (rand-vu))))) + (set! (-> s5-0 src quad) (-> obj root-override-2 trans quad)) + (vector+float*! (-> s5-0 dest) arg0 arg1 f0-2) + ) + (set! (-> s5-0 initial-tilt) 8192.0) + (set! (-> s5-0 gravity) 184320.0) + (when (traj3d-calc-initial-velocity-using-tilt s5-0) + (let ((a1-1 (new 'stack-no-clear 'projectile-init-by-other-params))) + (set! (-> a1-1 ent) (-> obj entity)) + (set! (-> a1-1 charge) 1.0) + (set! (-> a1-1 options) (projectile-options)) + (set! (-> a1-1 pos quad) (-> s5-0 src quad)) + (set! (-> a1-1 vel quad) (-> s5-0 initial-velocity quad)) + (set! (-> a1-1 notify-handle) (the-as handle #f)) + (set! (-> a1-1 owner-handle) (the-as handle #f)) + (set! (-> a1-1 ignore-handle) (process->handle obj)) + (let* ((v1-15 *game-info*) + (a0-14 (+ (-> v1-15 attack-id) 1)) + ) + (set! (-> v1-15 attack-id) a0-14) + (set! (-> a1-1 attack-id) a0-14) + ) + (set! (-> a1-1 timeout) (new 'static 'handle :process #x4b0 :u64 #x4b0)) + (spawn-projectile vehicle-grenade a1-1 obj *default-dead-pool*) + ) + (let ((a1-2 (new 'stack-no-clear 'traffic-danger-info))) + (set! (-> a1-2 sphere quad) (-> obj root-override-2 trans quad)) + (set! (-> a1-2 sphere r) 40960.0) + (set! (-> a1-2 velocity quad) (-> s5-0 initial-velocity quad)) + (set! (-> a1-2 notify-radius) 122880.0) + (set! (-> a1-2 danger-level) 1.0) + (set! (-> a1-2 decay-rate) 0.0) + (set! (-> a1-2 flags) (traffic-danger-flags tdf0)) + (set! (-> a1-2 danger-type) (traffic-danger-type tdt6)) + (set! (-> a1-2 handle) (the-as uint #f)) + (add-danger-sphere (-> obj controller traffic) a1-2) + ) + ) + ) + ) + (else + (let ((s5-1 (new 'stack-no-clear 'turret-unknown-stack-structure2))) + (set! (-> s5-1 mat-1 quad 0) (-> obj root-override-2 trans quad)) + (vector-! (-> s5-1 mat-1 vector 1) arg0 (the-as vector (-> s5-1 mat-1))) + (vector-normalize! (-> s5-1 mat-1 vector 1) 1.0) + (set! (-> s5-1 proj-params ent) (-> obj entity)) + (set! (-> s5-1 proj-params charge) 1.0) + (set! (-> s5-1 proj-params options) (projectile-options)) + (set! (-> s5-1 proj-params notify-handle) (process->handle obj)) + (set! (-> s5-1 proj-params owner-handle) (the-as handle #f)) + (set! (-> s5-1 proj-params ignore-handle) (process->handle obj)) + (let* ((v1-38 *game-info*) + (a0-36 (+ (-> v1-38 attack-id) 1)) + ) + (set! (-> v1-38 attack-id) a0-36) + (set! (-> s5-1 proj-params attack-id) a0-36) + ) + (set! (-> s5-1 proj-params timeout) (new 'static 'handle :process #x4b0 :u64 #x4b0)) + (vector+float*! (-> s5-1 proj-params pos) (the-as vector (-> s5-1 mat-1)) (-> s5-1 mat-1 vector 1) 16384.0) + (vector-float*! (-> s5-1 proj-params vel) (-> s5-1 mat-1 vector 1) 819200.0) + (spawn-projectile guard-shot (-> s5-1 proj-params) obj *default-dead-pool*) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 134 of type vehicle-guard +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-method-134 vehicle-guard ((obj vehicle-guard) (arg0 process)) + "Stubbed" + (set! (-> obj pursuit-target) (process->handle arg0)) + (set! (-> obj flags) (logior (rigid-body-object-flag alert) (-> obj flags))) + (vehicle-method-111 obj 2 (the-as target arg0)) + 0 + (none) + ) + +;; definition for method 46 of type vehicle-guard +(defmethod rigid-body-object-method-46 vehicle-guard ((obj vehicle-guard) (arg0 process-drawable) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('impact-impulse) + (let ((s5-1 (the-as matrix (-> arg3 param 0)))) + (when (not (logtest? (-> obj flags) (rigid-body-object-flag player-driving))) + (let ((a1-2 (find-offending-process-focusable arg0 (the-as attack-info #f)))) + (when a1-2 + (cond + ((logtest? (rigid-body-object-flag in-pursuit) (-> obj flags)) + (if (= (handle->process (-> obj pursuit-target)) a1-2) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logior (rigid-body-object-flag rammed-target) (-> obj flags))) + ) + ) + ) + (else + (if (and (< (* 49152.0 (-> obj info-override info mass)) (-> s5-1 trans x)) + (logtest? (-> a1-2 mask) (process-mask target)) + ) + (vehicle-method-134 obj a1-2) + ) + ) + ) + ) + ) + ) + (rigid-body-object-method-42 obj) + (rigid-body-object-method-45 obj (the-as rigid-body-impact s5-1)) + ) + (if (and (-> obj next-state) (= (-> obj next-state name) 'idle)) + (go (method-of-object obj waiting)) + ) + ) + (('track) + (zero? (logand (-> obj flags) (rigid-body-object-flag player-driving))) + ) + (('alert-begin) + (when (and (not (logtest? (-> obj focus-status) (focus-status dead))) + (not (logtest? (rigid-body-object-flag alert) (-> obj flags))) + (logtest? (rigid-body-object-flag ai-driving) (-> obj flags)) + (>= (the-as uint (get-alert-level (-> obj controller traffic))) (the-as uint 2)) + ) + (set! (-> obj flags) (logior (rigid-body-object-flag alert) (-> obj flags))) + (set! (-> obj pursuit-target) (process->handle (the-as process (-> arg3 param 0)))) + ) + ) + (('alert-end) + (when (not (logtest? (-> obj focus-status) (focus-status dead))) + (when (logtest? (rigid-body-object-flag alert) (-> obj flags)) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logclear (-> obj flags) (rigid-body-object-flag persistent alert in-pursuit))) + ) + (speech-control-method-12 *speech-control* obj (speech-type speech-type-0 speech-type-2)) + (vehicle-method-109 obj) + (go (method-of-object obj active)) + ) + ) + ) + (('end-pursuit) + (when (logtest? (rigid-body-object-flag alert) (-> obj flags)) + (set! (-> obj flags) + (the-as rigid-body-object-flag (logclear (-> obj flags) (rigid-body-object-flag persistent alert in-pursuit))) + ) + (vehicle-method-109 obj) + (go (method-of-object obj active)) + ) + ) + (else + ((method-of-type vehicle rigid-body-object-method-46) obj arg0 arg1 arg2 arg3) + ) + ) + (none) + ) + +;; definition for method 137 of type vehicle-guard +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-method-137 vehicle-guard ((obj vehicle-guard) (arg0 traffic-object-spawn-params)) + (vehicle-rider-spawn obj crimson-guard-rider arg0) + 0 + (none) + ) + +;; definition for function vehicle-guard-choose-branch +;; INFO: Used lq/sq +(defun vehicle-guard-choose-branch ((arg0 vehicle-controller) (arg1 vehicle)) + (let ((gp-0 (the-as nav-branch #f))) + (cond + ((logtest? (rigid-body-object-flag alert) (-> arg1 flags)) + (let ((s5-0 (-> arg0 branch dest-node)) + (s4-0 (new 'stack-no-clear 'inline-array 'vector 5)) + ) + (set! (-> s4-0 4 x) -10000000000000000000000000000000000000.0) + (set! (-> s4-0 3 quad) (-> arg1 root-override-2 trans quad)) + (vector-! (-> s4-0 0) (-> s4-0 3) (the-as vector (&-> arg1 stack 896))) + (vector-normalize! (-> s4-0 0) 1.0) + (dotimes (s3-0 (-> s5-0 branch-count)) + (let ((s2-0 (-> s5-0 branch-array s3-0))) + (when (!= (-> s2-0 dest-node id) #xffff) + (let ((a1-3 (-> s2-0 dest-node)) + (v1-11 (-> s4-0 2)) + ) + (set! (-> v1-11 quad) (-> a1-3 position quad)) + (set! (-> v1-11 w) 1.0) + ) + (vector-! (-> s4-0 1) (-> s4-0 2) (-> s4-0 3)) + (vector-normalize! (-> s4-0 1) 1.0) + (let ((f0-3 (vector-dot (-> s4-0 0) (-> s4-0 1)))) + (when (< (-> s4-0 4 x) f0-3) + (set! (-> s4-0 4 x) f0-3) + (set! gp-0 s2-0) + ) + ) + ) + ) + ) + ) + ) + (else + (set! gp-0 (vehicle-controller-method-15 arg0)) + ) + ) + gp-0 + ) + ) + +;; definition for method 31 of type vehicle-guard +;; WARN: Return type mismatch int vs none. +(defmethod rigid-body-object-method-31 vehicle-guard ((obj vehicle-guard) (arg0 rigid-body-vehicle-constants)) + (let ((t9-0 (method-of-type vehicle rigid-body-object-method-31))) + (t9-0 obj arg0) + ) + (set! (-> obj mask) (logior (process-mask enemy guard) (-> obj mask))) + (set! (-> obj pursuit-target) (the-as handle #f)) + (set! (-> obj minimap) #f) + (set! (-> obj lod2) (the-as symbol (-> obj draw lod-set lod 2 geo))) + (set! (-> obj controller choose-branch-callback) vehicle-guard-choose-branch) + 0 + (none) + ) + +;; definition for method 82 of type vehicle-guard +;; WARN: Return type mismatch traffic-guard-type-settings vs none. +(defmethod vehicle-method-82 vehicle-guard ((obj vehicle-guard)) + (let ((t9-0 (method-of-type vehicle vehicle-method-82))) + (t9-0 obj) + ) + (set! (-> obj turret guard-settings) + (get-traffic-guard-type-settings (-> obj controller traffic) (the-as int (-> obj info-override guard-type))) + ) + (none) + ) + +;; definition for method 128 of type vehicle-guard +(defmethod vehicle-method-128 vehicle-guard ((obj vehicle-guard)) + (if (not (-> obj minimap)) + (set! (-> obj minimap) (add-icon! *minimap* obj (the-as uint 14) (the-as int #f) (the-as vector #t) 0)) + ) + ((method-of-type vehicle vehicle-method-128) obj) + (none) + ) + +;; definition for method 127 of type vehicle-guard +(defmethod vehicle-method-127 vehicle-guard ((obj vehicle-guard)) + (when (-> obj minimap) + (logior! (-> obj minimap flags) (minimap-flag fade-out)) + (set! (-> obj minimap) #f) + ) + ((method-of-type vehicle vehicle-method-127) obj) + (none) + ) + +;; definition for method 129 of type vehicle-guard +(defmethod vehicle-method-129 vehicle-guard ((obj vehicle-guard)) + (when (-> obj minimap) + (logior! (-> obj minimap flags) (minimap-flag fade-out)) + (set! (-> obj minimap) #f) + ) + ((method-of-type vehicle vehicle-method-129) obj) + (none) + ) + +;; definition for method 130 of type vehicle-guard +(defmethod vehicle-method-130 vehicle-guard ((obj vehicle-guard) (arg0 traffic-object-spawn-params)) + (case (-> arg0 behavior) + ((9) + (vehicle-method-128 obj) + (set! (-> obj flags) (logior (rigid-body-object-flag persistent alert) (-> obj flags))) + (set! (-> obj pursuit-target) (the-as handle (-> arg0 handle))) + (go (method-of-object obj waiting-ambush)) + ) + (else + ((method-of-type vehicle vehicle-method-130) obj arg0) + ) + ) + (none) + ) + +;; definition for method 157 of type vehicle-guard +(defmethod vehicle-guard-method-157 vehicle-guard ((obj vehicle-guard) (arg0 vehicle-guard-target-data)) + (local-vars (v1-11 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (and (logtest? (rigid-body-object-flag target-in-sight) (-> obj flags)) + (or (and (not (logtest? (focus-status pilot) (-> arg0 target focus-status))) (< (-> arg0 dist) 184320.0)) + (and (< (-> arg0 tpos y) (+ -16384.0 (-> obj root-override-2 trans y))) + (begin + (.lvf vf1 (&-> (-> arg0 tvel) quad)) + (.add.w.vf vf2 vf0 vf0 :mask #b1) + (.mul.vf vf1 vf1 vf1) + (.mul.x.vf acc vf2 vf1 :mask #b1) + (.add.mul.y.vf acc vf2 vf1 acc :mask #b1) + (.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1) + (.mov v1-11 vf1) + (let ((f0-2 v1-11) + (f1-3 61440.0) + ) + (< f0-2 (* f1-3 f1-3)) + ) + ) + (< (-> arg0 dist) 122880.0) + ) + ) + ) + ) + ) + +;; definition for method 156 of type vehicle-guard +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-guard-method-156 vehicle-guard ((obj vehicle-guard)) + (with-pp + (let ((f30-0 (-> pp clock seconds-per-frame))) + (seek! (-> obj controls throttle) 0.0 (* 4.0 f30-0)) + (+! (-> obj controls brake) (* (- 1.0 (-> obj controls brake)) (fmin 1.0 (* 8.0 f30-0)))) + (let ((s4-0 (-> obj rbody state matrix)) + (s3-0 (-> obj rbody state matrix vector 2)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (vector-reset! s5-0) + (let ((v1-9 (handle->process (-> obj pursuit-target))) + (f28-0 0.0) + ) + (when (and v1-9 (logtest? (rigid-body-object-flag target-in-sight) (-> obj flags))) + (vector-! s5-0 (-> (the-as process-drawable v1-9) root trans) (-> obj root-override-2 trans)) + (set! (-> s5-0 y) 0.0) + (vector-normalize! s5-0 1.0) + (if (< (vector-dot s3-0 s5-0) (cos 2730.6667)) + (set! f28-0 (vector-dot (the-as vector s4-0) s5-0)) + ) + ) + (+! (-> obj controls steering) (* (- f28-0 (-> obj controls steering)) (fmin 1.0 (* 8.0 f30-0)))) + ) + ) + ) + (when (zero? (-> obj flight-level-index)) + (if (logtest? (-> obj flags) (rigid-body-object-flag riding)) + (vehicle-method-80 obj) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 154 of type vehicle-guard +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-guard-method-154 vehicle-guard ((obj vehicle-guard)) + (with-pp + (if (not (logtest? (-> obj rbody state flags) (rigid-body-flag enable-physics))) + (rigid-body-object-method-38 obj) + ) + (set! (-> obj camera-dist2) (vector-vector-distance-squared (-> obj root-override-2 trans) (camera-pos))) + (set! (-> obj player-dist2) (vector-vector-distance-squared (-> obj root-override-2 trans) (target-pos 0))) + (vehicle-controller-method-18 + (-> obj controller) + (-> obj target-acceleration) + (-> obj root-override-2 transv) + obj + (/ 1.0 (-> pp clock seconds-per-frame)) + ) + ((-> obj ai-hook) obj) + (vehicle-method-121 obj) + (vehicle-method-106 obj) + (when (not (logtest? (rigid-body-object-flag in-pursuit) (-> obj flags))) + (if (not (logtest? (-> obj target-flags) (turret-flag aiming))) + (speech-control-method-12 *speech-control* obj (speech-type speech-type-1)) + ) + (go (method-of-object obj active)) + ) + 0 + (none) + ) + ) + +;; definition for method 158 of type vehicle-guard +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-guard-method-158 vehicle-guard ((obj vehicle-guard)) + (with-pp + (vehicle-guard-method-150 obj) + (let ((s5-0 (new 'stack-no-clear 'vehicle-guard-target-data))) + (vehicle-guard-method-151 obj s5-0) + (let ((a1-1 (-> s5-0 target))) + (when a1-1 + (cond + ((logtest? (rigid-body-object-flag target-in-sight) (-> obj flags)) + (vehicle-guard-method-153 obj a1-1) + (speech-control-method-15 *speech-control* obj) + ) + (else + (if (and (>= (- (-> pp clock frame-counter) (-> obj target-in-sight-time)) (seconds 4)) + (< 368640.0 (-> s5-0 dist)) + ) + (vehicle-method-109 obj) + ) + ) + ) + ) + ) + ) + (if (not (logtest? (rigid-body-object-flag in-pursuit) (-> obj flags))) + (go (method-of-object obj active)) + ) + (rigid-body-object-method-42 obj) + (vehicle-method-122 obj) + 0 + (none) + ) + ) + +;; definition for method 94 of type vehicle-guard +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-method-94 vehicle-guard ((obj vehicle-guard)) + (with-pp + (rlet ((acc :class vf) + (vf0 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + (vf7 :class vf) + ) + (init-vf0-vector) + (let ((v1-0 (new 'stack-no-clear 'camera-free-floating-move-info))) + (let* ((a0-1 (-> v1-0 tm)) + (t0-0 (-> obj rbody state matrix)) + (a1-1 (-> t0-0 quad 0)) + (a2-0 (-> t0-0 quad 1)) + (a3-0 (-> t0-0 quad 2)) + (t0-1 (-> t0-0 trans quad)) + ) + (set! (-> a0-1 quad 0) a1-1) + (set! (-> a0-1 quad 1) a2-0) + (set! (-> a0-1 quad 2) a3-0) + (set! (-> a0-1 trans quad) t0-1) + ) + (let ((a0-2 (-> v1-0 rv))) + (let ((a1-3 (-> obj rbody state position))) + (let ((a2-1 (-> v1-0 tm vector 2))) + (let ((a3-2 163840.0)) + (.mov vf7 a3-2) + ) + (.lvf vf5 (&-> a2-1 quad)) + ) + (.lvf vf4 (&-> a1-3 quad)) + ) + (.add.x.vf vf6 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf5 vf7 :mask #b111) + (.add.mul.w.vf vf6 vf4 vf0 acc :mask #b111) + (.svf (&-> a0-2 quad) vf6) + ) + (vector-reset! (-> v1-0 up)) + (set! (-> obj turret inaccuracy) 0.0) + (turret-control-method-9 (-> obj turret) obj (-> v1-0 rv) (-> v1-0 up)) + ) + (when (cpad-hold? 0 r1) + (when (>= (- (-> pp clock frame-counter) (-> obj turret shoot-time)) (seconds 0.35)) + (set! (-> obj turret owner-handle) (process->handle *target*)) + (turret-control-method-17 (-> obj turret) obj) + (set! (-> obj turret owner-handle) (the-as handle #f)) + ) + ) + ((method-of-type vehicle vehicle-method-94) obj) + 0 + (none) + ) + ) + ) + +;; failed to figure out what this is: +(defstate active (vehicle-guard) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior vehicle-guard) + vehicle-event-handler + ) + :enter (behavior () + (let ((v1-0 (-> self controller branch))) + (when (or (not v1-0) (zero? v1-0)) + (cond + ((logtest? (-> self draw status) (draw-control-status on-screen)) + (set! (-> self hit-points) 0.0) + (vehicle-method-76 self 2 (the-as uint 3000)) + (go-virtual crash) + ) + (else + (vehicle-method-113 self) + ) + ) + ) + ) + (let ((t9-3 (-> (method-of-type vehicle active) enter))) + (if t9-3 + (t9-3) + ) + ) + (none) + ) + :trans (the-as (function none :behavior vehicle-guard) #f) + :code (the-as (function none :behavior vehicle-guard) sleep-code) + :post (behavior () + (cond + ((logtest? (rigid-body-object-flag alert) (-> self flags)) + (vehicle-guard-method-150 self) + (when (logtest? (rigid-body-object-flag in-pursuit) (-> self flags)) + (logior! (-> self flags) (rigid-body-object-flag persistent)) + (go-virtual hostile) + ) + (speech-control-method-12 *speech-control* self (speech-type speech-type-2)) + (if (or (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 8)) + (let ((f0-0 409600.0)) + (< (* f0-0 f0-0) (-> self player-dist2)) + ) + ) + (logclear! (-> self flags) (rigid-body-object-flag persistent alert)) + ) + ) + (else + (speech-control-method-12 *speech-control* self (speech-type speech-type-0)) + ) + ) + (check-player-get-on self) + (vehicle-method-122 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate hostile (vehicle-guard) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior vehicle-guard) + vehicle-event-handler + ) + :enter (behavior () + (set! (-> self ai-hook) (method-of-object self vehicle-method-93)) + (none) + ) + :trans (the-as (function none :behavior vehicle-guard) #f) + :code (the-as (function none :behavior vehicle-guard) sleep-code) + :post (behavior () + (vehicle-guard-method-150 self) + (when (logtest? (rigid-body-object-flag in-pursuit) (-> self flags)) + (if (or (>= (- (-> self clock frame-counter) (-> self target-in-sight-time)) (seconds 8)) + (and (>= (-> self controller traffic alert-state guards-in-sight-of-target) 2) + (>= (- (-> self clock frame-counter) (-> self target-in-sight-time)) (seconds 0.5)) + ) + ) + (vehicle-method-109 self) + ) + ) + (let ((gp-0 (new 'stack-no-clear 'vehicle-guard-target-data))) + (vehicle-guard-method-151 self gp-0) + (let ((a1-1 (-> gp-0 target))) + (cond + (a1-1 + (cond + ((logtest? (rigid-body-object-flag target-in-sight) (-> self flags)) + (vehicle-guard-method-153 self a1-1) + (if (vehicle-guard-method-157 self gp-0) + (go-virtual stop-and-shoot) + ) + (speech-control-method-15 *speech-control* self) + ) + (else + ) + ) + (vehicle-guard-method-152 self gp-0) + ) + (else + (vehicle-method-109 self) + ) + ) + ) + ) + (if (logtest? (rigid-body-object-flag rammed-target) (-> self flags)) + (go-virtual slow-pursuit) + ) + (vehicle-guard-method-154 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate stop-and-shoot (vehicle-guard) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior vehicle-guard) + vehicle-event-handler + ) + :enter (behavior () + (set! (-> self ai-hook) (method-of-object self vehicle-guard-method-156)) + (none) + ) + :trans (the-as (function none :behavior vehicle-guard) #f) + :code (the-as (function none :behavior vehicle-guard) sleep-code) + :post (behavior () + (vehicle-guard-method-150 self) + (let ((s5-0 (new 'stack-no-clear 'vehicle-guard-target-data))) + (vehicle-guard-method-151 self s5-0) + (let ((gp-0 (-> s5-0 target))) + (when gp-0 + (if (not (vehicle-guard-method-157 self s5-0)) + (go-virtual hostile) + ) + (vehicle-guard-method-153 self gp-0) + ) + ) + ) + (vehicle-guard-method-154 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate slow-pursuit (vehicle-guard) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior vehicle-guard) + vehicle-event-handler + ) + :enter (behavior () + (set! (-> self state-time) (-> self clock frame-counter)) + (set! (-> self ai-hook) (method-of-object self vehicle-guard-method-156)) + (none) + ) + :trans (the-as (function none :behavior vehicle-guard) #f) + :code (the-as (function none :behavior vehicle-guard) sleep-code) + :post (behavior () + (vehicle-guard-method-150 self) + (let ((s5-0 (new 'stack-no-clear 'vehicle-guard-target-data))) + (vehicle-guard-method-151 self s5-0) + (let ((gp-0 (-> s5-0 target))) + (when gp-0 + (when (or (< (-> s5-0 attack-range) (-> s5-0 dist)) + (not (logtest? (rigid-body-object-flag target-in-sight) (-> self flags))) + (>= (- (-> self clock frame-counter) (-> self state-time)) (seconds 2)) + ) + (set! (-> self flags) + (the-as rigid-body-object-flag (logclear (-> self flags) (rigid-body-object-flag rammed-target))) + ) + (go-virtual hostile) + ) + (vehicle-guard-method-153 self gp-0) + ) + ) + ) + (vehicle-guard-method-154 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate waiting-ambush (vehicle-guard) + :virtual #t + :event (the-as + (function process int symbol event-message-block object :behavior vehicle-guard) + vehicle-event-handler + ) + :enter (behavior () + (set! (-> self flags) (logior (rigid-body-object-flag riding ignition ai-driving) (-> self flags))) + (set! (-> self ai-hook) (method-of-object self vehicle-guard-method-156)) + (none) + ) + :trans (the-as (function none :behavior vehicle-guard) #f) + :code (the-as (function none :behavior vehicle-guard) sleep-code) + :post (behavior () + (vehicle-guard-method-150 self) + (let ((gp-0 (new 'stack-no-clear 'vehicle-guard-target-data))) + (vehicle-guard-method-151 self gp-0) + (let ((s5-0 (-> gp-0 target))) + (when s5-0 + (when (logtest? (rigid-body-object-flag target-in-sight) (-> self flags)) + (vehicle-guard-method-153 self s5-0) + (vehicle-method-111 self 2 s5-0) + (if (< (-> gp-0 dist) 122880.0) + (go-virtual hostile) + ) + ) + ) + ) + ) + (set! (-> self flags) + (the-as rigid-body-object-flag (logior (rigid-body-object-flag in-pursuit) (-> self flags))) + ) + (vehicle-guard-method-154 self) + (none) + ) + ) diff --git a/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc b/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc index 01306c735c..9e197b168f 100644 --- a/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc +++ b/test/decompiler/reference/jak2/levels/city/common/vehicle-h_REF.gc @@ -305,11 +305,11 @@ (format #t "~1Tinertial-tensor-x: (meters ~m)~%" (-> obj inertial-tensor-x)) (format #t "~1Tinertial-tensor-y: (meters ~m)~%" (-> obj inertial-tensor-y)) (format #t "~1Tinertial-tensor-z: (meters ~m)~%" (-> obj inertial-tensor-z)) - (format #t "~1Textra: #~%" (&-> obj max-time-step)) - (format #t "~1Tmax-time-step: ~f~%" (-> obj max-time-step)) - (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) - (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj idle-distance)) - (format #t "~1Tattack-force-scale: ~f~%" (-> obj attack-force-scale)) + (format #t "~1Textra: #~%" (-> obj extra)) + (format #t "~1Tmax-time-step: ~f~%" (-> obj extra max-time-step)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj extra gravity)) + (format #t "~1Tidle-distance: (meters ~m)~%" (-> obj extra idle-distance)) + (format #t "~1Tattack-force-scale: ~f~%" (-> obj extra attack-force-scale)) (format #t "~1Tname: ~A~%" (-> obj name)) (format #t "~1Tflags: ~D~%" (-> obj flags)) (format #t "~1Tobject-type: ~D~%" (-> obj object-type)) diff --git a/test/decompiler/reference/jak2/levels/city/common/vehicle-physics_REF.gc b/test/decompiler/reference/jak2/levels/city/common/vehicle-physics_REF.gc new file mode 100644 index 0000000000..9148880d05 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/common/vehicle-physics_REF.gc @@ -0,0 +1,887 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 99 of type vehicle +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-method-99 vehicle ((obj vehicle) (arg0 float)) + (let ((s4-0 (new 'stack-no-clear 'vehicle-grab-rail-info)) + (s3-0 (-> obj root-override-2 root-prim)) + (s2-0 1) + ) + (when (< (-> obj rbody state position y) (+ (-> obj water-height) (-> s3-0 local-sphere w))) + (when (= (-> s3-0 prim-core prim-type) (prim-type group)) + (let ((v1-5 (the-as collide-shape-prim-group s3-0))) + (set! s3-0 (-> v1-5 child 0)) + (set! s2-0 (the-as int (-> v1-5 num-children))) + ) + ) + (countdown (s1-0 s2-0) + (when (= (-> s3-0 prim-core prim-type) (prim-type sphere)) + (let* ((s0-0 (-> s3-0 prim-core)) + (f0-2 (- (-> s0-0 world-sphere y) (-> s0-0 world-sphere w))) + ) + (when (< f0-2 (-> obj water-height)) + (set! (-> s4-0 local-pos 0 quad) (-> s0-0 world-sphere quad)) + (let ((f1-5 (fmin (-> obj water-height) (+ (-> s0-0 world-sphere y) (-> s0-0 world-sphere w))))) + 0.0 + (let* ((f2-5 (fmax -1.0 (fmin 1.0 (/ (- (-> obj water-height) (-> s0-0 world-sphere y)) (-> s0-0 world-sphere w))))) + (f30-0 (+ 0.5 (* -0.25 f2-5 f2-5 f2-5) (* 0.75 f2-5))) + ) + (set! (-> s4-0 local-pos 0 y) (* 0.5 (+ f0-2 f1-5))) + (let ((v1-18 (-> obj rbody)) + (a1-1 (-> s4-0 local-pos)) + (a2-0 (-> s4-0 normal)) + ) + (rigid-body-method-22 (-> v1-18 state) (the-as vector a1-1) a2-0) + ) + (let* ((f0-7 (* 0.062831804 (fmin 200.0 (vector-length (-> s4-0 normal))) f30-0)) + (f1-8 (-> s0-0 world-sphere w)) + (f0-8 (* f0-7 (* f1-8 f1-8))) + (f1-11 4096.0) + (f1-13 (* f1-11 f1-11)) + (f0-10 (fmin (* f0-8 (/ 1.0 f1-13)) (/ (-> obj info-override info mass) (* 2.0 arg0 (the float s2-0))))) + ) + (vector-float*! (-> s4-0 local-pos 1) (-> s4-0 normal) (* -1.0 f0-10)) + ) + (let ((v1-34 (-> obj rbody)) + (a1-3 (-> s4-0 local-pos)) + (a2-1 (-> s4-0 local-pos 1)) + ) + (rigid-body-method-18 (-> v1-34 state) (the-as vector a1-3) a2-1) + ) + (vector-reset! (-> s4-0 local-pos 1)) + (let* ((f0-12 549018.94) + (f1-19 4096.0) + (f2-13 4096.0) + (f1-20 (* f1-19 (* f2-13 f2-13))) + (f0-16 (* f0-12 (/ 1.0 f1-20) (-> obj info-override buoyancy-factor) f30-0 (-> s0-0 world-sphere w))) + (f1-25 (-> s0-0 world-sphere w)) + ) + (set! (-> s4-0 local-pos 1 y) (* f0-16 (* f1-25 f1-25))) + ) + ) + ) + (let ((v1-46 (-> obj rbody)) + (a1-4 (-> s4-0 local-pos)) + (a2-2 (-> s4-0 local-pos 1)) + ) + (rigid-body-method-18 (-> v1-46 state) (the-as vector a1-4) a2-2) + ) + ) + ) + ) + (&+! s3-0 80) + ) + ) + ) + 0 + (none) + ) + +;; definition of type vehicle-probe-work +(deftype vehicle-probe-work (structure) + ((local-pos vector :inline :offset-assert 0) + (local-normal vector :inline :offset-assert 16) + (world-pos vector :inline :offset-assert 32) + (world-normal vector :inline :offset-assert 48) + (probe-pos vector :inline :offset-assert 64) + (ground-pos vector :inline :offset-assert 80) + (ground-normal vector :inline :offset-assert 96) + (velocity vector :inline :offset-assert 112) + (tire-force vector :inline :offset-assert 128) + (wheel-axis vector :inline :offset-assert 144) + ) + :method-count-assert 9 + :size-assert #xa0 + :flag-assert #x9000000a0 + ) + +;; definition for method 3 of type vehicle-probe-work +(defmethod inspect vehicle-probe-work ((obj vehicle-probe-work)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-probe-work) + (format #t "~1Tlocal-pos: #~%" (-> obj local-pos)) + (format #t "~1Tlocal-normal: #~%" (-> obj local-normal)) + (format #t "~1Tworld-pos: #~%" (-> obj world-pos)) + (format #t "~1Tworld-normal: #~%" (-> obj world-normal)) + (format #t "~1Tprobe-pos: #~%" (-> obj probe-pos)) + (format #t "~1Tground-pos: #~%" (-> obj ground-pos)) + (format #t "~1Tground-normal: #~%" (-> obj ground-normal)) + (format #t "~1Tvelocity: #~%" (-> obj velocity)) + (format #t "~1Ttire-force: #~%" (-> obj tire-force)) + (format #t "~1Twheel-axis: #~%" (-> obj wheel-axis)) + (label cfg-4) + obj + ) + +;; definition of type vehicle-physics-work +(deftype vehicle-physics-work (structure) + ((mat matrix :inline :offset-assert 0) + (force vector :inline :offset-assert 64) + (velocity vector :inline :offset-assert 80) + (world-pos vector :inline :offset-assert 96) + (world-normal vector :inline :offset-assert 112) + (local-pos vector :inline :offset-assert 128) + (steering-axis vector :inline :offset-assert 144) + (lift-dir vector :inline :offset-assert 160) + (normal vector :inline :offset-assert 176) + (tmp vector :inline :offset-assert 192) + (p-body vector :inline :offset-assert 208) + (axis vector :inline :offset-assert 224) + (dir vector :inline :offset-assert 240) + (ground-normal vector :inline :offset-assert 256) + (impulse float :offset-assert 272) + (vel-dot-norm float :offset-assert 276) + (friction-coef float :offset-assert 280) + (speed-factor float :offset-assert 284) + (probe-work-array vehicle-probe-work 2 :inline :offset-assert 288) + ) + :method-count-assert 9 + :size-assert #x260 + :flag-assert #x900000260 + ) + +;; definition for method 3 of type vehicle-physics-work +(defmethod inspect vehicle-physics-work ((obj vehicle-physics-work)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'vehicle-physics-work) + (format #t "~1Tmat: #~%" (-> obj mat)) + (format #t "~1Tforce: #~%" (-> obj force)) + (format #t "~1Tvelocity: #~%" (-> obj velocity)) + (format #t "~1Tworld-pos: #~%" (-> obj world-pos)) + (format #t "~1Tworld-normal: #~%" (-> obj world-normal)) + (format #t "~1Tlocal-pos: #~%" (-> obj local-pos)) + (format #t "~1Tsteering-axis: #~%" (-> obj steering-axis)) + (format #t "~1Tlift-dir: #~%" (-> obj lift-dir)) + (format #t "~1Tnormal: #~%" (-> obj normal)) + (format #t "~1Ttmp: #~%" (-> obj tmp)) + (format #t "~1Tp-body: #~%" (-> obj p-body)) + (format #t "~1Taxis: #~%" (-> obj axis)) + (format #t "~1Tdir: #~%" (-> obj dir)) + (format #t "~1Tground-normal: #~%" (-> obj ground-normal)) + (format #t "~1Timpulse: ~f~%" (-> obj impulse)) + (format #t "~1Tvel-dot-norm: ~f~%" (-> obj vel-dot-norm)) + (format #t "~1Tfriction-coef: ~f~%" (-> obj friction-coef)) + (format #t "~1Tspeed-factor: ~f~%" (-> obj speed-factor)) + (format #t "~1Tprobe-work-array[2] @ #x~X~%" (-> obj probe-work-array)) + (label cfg-4) + obj + ) + +;; definition for method 100 of type vehicle +;; INFO: Used lq/sq +;; WARN: Return type mismatch int vs none. +(defmethod vehicle-method-100 vehicle ((obj vehicle) (arg0 float) (arg1 vehicle-physics-work)) + (local-vars (v1-81 float) (v1-184 float)) + (rlet ((acc :class vf) + (vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + (vf4 :class vf) + (vf5 :class vf) + (vf6 :class vf) + (vf7 :class vf) + ) + (init-vf0-vector) + (+! (-> obj physics-counter) 1) + (let ((s3-0 (-> obj rbody))) + (mem-copy! (the-as pointer (-> arg1 mat)) (the-as pointer (-> s3-0 state matrix)) 64) + (let* ((f28-0 (* -1.0 (-> obj controls steering) (-> obj info-override tire-steering-angle))) + (f30-0 (cos f28-0)) + (f0-2 (sin f28-0)) + ) + (set! (-> arg1 steering-axis x) f30-0) + (set! (-> arg1 steering-axis y) 0.0) + (set! (-> arg1 steering-axis z) f0-2) + ) + (vector-rotate*! (-> arg1 steering-axis) (-> arg1 steering-axis) (-> arg1 mat)) + (logior! (-> obj flags) (rigid-body-object-flag in-air)) + (logclear! (-> obj flags) (rigid-body-object-flag on-ground on-flight-level)) + (vector-reset! (-> arg1 ground-normal)) + (set! (-> arg1 ground-normal y) 1.0) + (let ((f30-1 (-> obj info-override ground-probe-distance))) + (let ((s2-0 (new 'stack-no-clear 'collide-query))) + (vector-reset! (-> arg1 lift-dir)) + (set! (-> arg1 lift-dir y) -1.0) + (set! (-> arg1 speed-factor) + (fmax 0.0 (fmin 0.9 (* 0.000008138021 (+ -40960.0 (vector-length (-> s3-0 state lin-velocity)))))) + ) + (when (logtest? (-> obj info-override flags) 1) + (vector-float*! (-> arg1 tmp) (-> arg1 mat vector 1) -1.0) + (let ((t9-4 vector-lerp!) + (a0-7 (-> arg1 lift-dir)) + (a1-4 (-> arg1 lift-dir)) + (a2-3 (-> arg1 tmp)) + (f0-8 (-> arg1 speed-factor)) + ) + (t9-4 a0-7 a1-4 a2-3 (* f0-8 f0-8)) + ) + (vector-normalize! (-> arg1 lift-dir) 1.0) + ) + (vector-float*! (-> s2-0 move-dist) (-> arg1 lift-dir) (the-as float f30-1)) + (let ((v1-28 s2-0)) + (set! (-> v1-28 radius) 409.6) + (set! (-> v1-28 collide-with) (collide-spec + backgnd + obstacle + hit-by-player-list + hit-by-others-list + water + collectable + blocking-plane + pusher + vehicle-mesh-probeable + ) + ) + (set! (-> v1-28 ignore-process0) #f) + (set! (-> v1-28 ignore-process1) #f) + (set! (-> v1-28 ignore-pat) (new 'static 'pat-surface :noentity #x1 :nopilot #x1)) + (set! (-> v1-28 action-mask) (collide-action solid)) + ) + (dotimes (s1-0 (-> obj info-override lift-thruster-count)) + (let ((v1-31 (-> obj info-override lift-thruster-array s1-0)) + (s0-0 (-> arg1 probe-work-array s1-0)) + ) + (vector-reset! (-> s0-0 tire-force)) + (set! (-> s0-0 local-pos quad) (-> v1-31 local-pos quad)) + (set! (-> s0-0 local-normal quad) (-> v1-31 normal quad)) + (vector-matrix*! (-> s0-0 world-pos) (-> s0-0 local-pos) (-> arg1 mat)) + (let ((a1-9 (-> s0-0 probe-pos))) + (let ((v1-34 (-> s0-0 world-pos))) + (let ((a0-22 (-> arg1 mat vector 1))) + (let ((a2-6 (-> obj info-override ground-probe-offset))) + (.mov vf7 a2-6) + ) + (.lvf vf5 (&-> a0-22 quad)) + ) + (.lvf vf4 (&-> v1-34 quad)) + ) + (.add.x.vf vf6 vf0 vf0 :mask #b1000) + (.mul.x.vf acc vf5 vf7 :mask #b111) + (.add.mul.w.vf vf6 vf4 vf0 acc :mask #b111) + (.svf (&-> a1-9 quad) vf6) + ) + (let ((v1-35 s3-0) + (a1-10 (-> s0-0 probe-pos)) + (a2-7 (-> s0-0 velocity)) + ) + (rigid-body-method-22 (-> v1-35 state) a1-10 a2-7) + ) + (set! (-> s0-0 wheel-axis quad) (-> (the-as vector (if (< 0.0 (-> s0-0 local-pos z)) + (-> arg1 steering-axis) + (the-as vector (-> arg1 mat)) + ) + ) + quad + ) + ) + (set! (-> s0-0 ground-pos quad) (-> s0-0 probe-pos quad)) + (set! (-> s0-0 ground-pos y) 0.0) + (vector-reset! (-> s0-0 ground-normal)) + (when (logtest? (-> obj flags) (rigid-body-object-flag enable-collision)) + (set! (-> s2-0 start-pos quad) (-> s0-0 probe-pos quad)) + (let ((f0-15 (probe-using-line-sphere *collide-cache* s2-0))) + (cond + ((and (>= f0-15 0.0) (!= (-> s2-0 best-other-tri pat mode) 1)) + (logclear! (-> obj flags) (rigid-body-object-flag in-air)) + (logior! (-> obj flags) (rigid-body-object-flag on-ground)) + (set! (-> s0-0 ground-pos y) (- (-> s0-0 probe-pos y) (* f0-15 f30-1))) + (set! (-> s0-0 ground-normal quad) (-> s2-0 best-other-tri normal quad)) + (set! (-> arg1 ground-normal quad) (-> s0-0 ground-normal quad)) + ) + (else + (set! (-> s0-0 ground-pos y) (+ -81920.0 (-> s3-0 state position y))) + ) + ) + ) + 0 + ) + ) + ) + ) + (set! (-> obj lift-thrust 0) 0.0) + (set! (-> obj lift-thrust 1) 0.0) + (set! (-> obj roll-thrust 0) 0.0) + (set! (-> obj roll-thrust 1) 0.0) + (set! (-> obj roll-thrust 0) 0.0) + (set! (-> obj roll-thrust 1) 0.0) + (when (>= 1 (-> obj force-level)) + (dotimes (s2-1 (-> obj info-override lift-thruster-count)) + (let ((s1-1 (-> arg1 probe-work-array s2-1))) + (set! (-> arg1 world-pos quad) (-> s1-1 world-pos quad)) + (set! (-> arg1 velocity quad) (-> s1-1 velocity quad)) + (let ((f28-1 (-> s1-1 probe-pos y))) + (when (> (-> obj flight-level-index) 0) + (set! f28-1 (- f28-1 (+ 6144.0 (-> obj flight-level)))) + (when (>= 0.0 f28-1) + (logclear! (-> obj flags) (rigid-body-object-flag in-air)) + (logior! (-> obj flags) (rigid-body-object-flag on-flight-level)) + (.lvf vf1 (&-> (-> s1-1 ground-normal) quad)) + (.add.w.vf vf2 vf0 vf0 :mask #b1) + (.mul.vf vf1 vf1 vf1) + (.mul.x.vf acc vf2 vf1 :mask #b1) + (.add.mul.y.vf acc vf2 vf1 acc :mask #b1) + (.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1) + (.mov v1-81 vf1) + (if (= v1-81 0.0) + (set! (-> s1-1 ground-normal y) 1.0) + ) + ) + ) + (when (or (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags)) + (and (> (-> obj flight-level-index) 0) (< f28-1 0.0)) + ) + (if (zero? (-> obj flight-level-index)) + (set! f28-1 40960.0) + ) + (let* ((f0-37 (* -1.0 + (-> obj force-scale) + (-> obj info-override inv-lift-thruster-count) + (-> obj info-override info mass) + (-> obj info-override extra gravity) + (+ 1.0 (* 2.0 (the float (-> obj flight-level-index)))) + ) + ) + (f1-17 -1.0) + (f2-4 1.0) + (f3-4 16384.0) + (f3-7 (* f28-1 (/ 1.0 f3-4))) + (f4-2 0.5) + (f5-0 81920.0) + (f0-38 (* f0-37 (fmax f1-17 (fmin f2-4 (+ f3-7 (* f4-2 (/ 1.0 f5-0) (-> arg1 velocity y))))))) + ) + (let ((f1-20 (fmax 0.0 f0-38))) + (+! (-> obj lift-thrust s2-1) f1-20) + (when (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags)) + (+! (-> obj roll-thrust 0) (* 0.05 f1-20)) + (+! (-> obj roll-thrust 1) (* 0.05 f1-20)) + ) + ) + (vector-reset! (-> arg1 force)) + (set! (-> arg1 force y) f0-38) + ) + (let ((v1-122 s3-0) + (a1-12 (-> arg1 world-pos)) + (a2-8 (-> arg1 force)) + ) + (rigid-body-method-18 (-> v1-122 state) a1-12 a2-8) + ) + (vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force)) + ) + (let ((f0-40 (+ 4096.0 f28-1))) + (when (or (and (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags)) + (< 0.0 f0-40) + (< 0.0 (-> arg1 velocity y)) + ) + (and (> (-> obj flight-level-index) 0) (< f0-40 0.0) (< (-> arg1 velocity y) 0.0)) + ) + (vector-reset! (-> arg1 force)) + (let ((f0-43 (* -0.25 (-> obj info-override inv-lift-thruster-count))) + (f1-28 arg0) + ) + (set! (-> arg1 force y) (* f0-43 (/ 1.0 f1-28) (-> obj info-override info mass) (-> arg1 velocity y))) + ) + (let ((v1-140 s3-0) + (a1-16 (-> arg1 world-pos)) + (a2-9 (-> arg1 force)) + ) + (rigid-body-method-18 (-> v1-140 state) a1-16 a2-9) + ) + (vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force)) + ) + ) + ) + (let* ((f1-36 (fmax 4096.0 (fmin (- (-> s1-1 probe-pos y) (-> s1-1 ground-pos y)) f30-1))) + (f28-2 (- 1.0 (/ (+ -4096.0 f1-36) (+ -4096.0 f30-1)))) + ) + (if (>= (-> obj info-override cos-ground-effect-angle) + (vector-dot (-> s1-1 ground-normal) (-> arg1 mat vector 1)) + ) + (set! f28-2 0.0) + ) + (set! (-> arg1 tmp y) 0.0) + (set! (-> arg1 tmp x) (-> arg1 velocity z)) + (set! (-> arg1 tmp z) (- (-> arg1 velocity x))) + (vector-normalize! (-> arg1 tmp) 1.0) + (vector+float*! + (-> arg1 normal) + (-> s1-1 ground-normal) + (-> arg1 tmp) + (- (vector-dot (-> s1-1 ground-normal) (-> arg1 tmp))) + ) + (let ((v1-155 (-> arg1 force)) + (a0-55 (-> arg1 normal)) + (f0-58 (* 2.0 f28-2)) + (f1-41 arg0) + ) + (vector-float*! v1-155 a0-55 (* f0-58 + (/ 1.0 f1-41) + (-> obj info-override inv-lift-thruster-count) + (-> obj info-override info mass) + (fmax 0.0 (- (vector-dot (-> arg1 velocity) (-> arg1 normal)))) + ) + ) + ) + (let ((v1-157 s3-0) + (a1-28 (-> arg1 world-pos)) + (a2-13 (-> arg1 force)) + ) + (rigid-body-method-18 (-> v1-157 state) a1-28 a2-13) + ) + (vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force)) + (let ((f0-72 (* 8.0 + (-> obj info-override info mass) + (-> obj info-override extra gravity) + (-> obj info-override inv-lift-thruster-count) + (+ (* (-> obj info-override spring-lift-factor) f28-2) + (* 0.75 (-> obj jump-thrust) (-> obj info-override jump-thrust-factor)) + ) + (- (+ 1.0 (* 2.0 (rand-vu) (-> obj power-fluctuation-factor))) (-> obj power-fluctuation-factor)) + ) + ) + ) + (+! (-> obj lift-thrust s2-1) f0-72) + (vector-float*! (-> arg1 force) (-> arg1 lift-dir) (* -1.0 f0-72)) + ) + ) + (let ((v1-176 s3-0) + (a1-32 (-> arg1 world-pos)) + (a2-14 (-> arg1 force)) + ) + (rigid-body-method-18 (-> v1-176 state) a1-32 a2-14) + ) + (vector+! (-> s1-1 tire-force) (-> s1-1 tire-force) (-> arg1 force)) + (when (and (< 0.0 (-> obj info-override tire-friction-factor)) (let ((f0-75 0.0)) + (.lvf vf1 (&-> (-> s1-1 ground-normal) quad)) + (.add.w.vf vf2 vf0 vf0 :mask #b1) + (.mul.vf vf1 vf1 vf1) + (.mul.x.vf acc vf2 vf1 :mask #b1) + (.add.mul.y.vf acc vf2 vf1 acc :mask #b1) + (.add.mul.z.vf vf1 vf2 vf1 acc :mask #b1) + (.mov v1-184 vf1) + (< f0-75 v1-184) + ) + ) + (vector+float*! + (-> arg1 normal) + (-> s1-1 wheel-axis) + (-> s1-1 ground-normal) + (- (vector-dot (-> s1-1 wheel-axis) (-> s1-1 ground-normal))) + ) + (vector-normalize! (-> arg1 normal) 1.0) + (set! (-> arg1 world-pos quad) (-> s3-0 state position quad)) + (set! (-> arg1 velocity quad) (-> s3-0 state lin-velocity quad)) + (vector-! (-> arg1 p-body) (-> arg1 world-pos) (-> s3-0 state position)) + (vector-cross! (-> arg1 tmp) (-> arg1 p-body) (-> arg1 normal)) + (vector-rotate*! (-> arg1 tmp) (-> arg1 tmp) (-> s3-0 state inv-i-world)) + (vector-cross! (-> arg1 tmp) (-> arg1 tmp) (-> arg1 p-body)) + (set! (-> arg1 vel-dot-norm) (vector-dot (-> arg1 velocity) (-> arg1 normal))) + (let ((f0-82 (fabs (-> arg1 vel-dot-norm)))) + (set! (-> arg1 friction-coef) + (smooth-interp + (-> obj info-override tire-static-friction) + (-> obj info-override tire-dynamic-friction) + f0-82 + (-> obj info-override tire-static-friction-speed) + (-> obj info-override tire-dynamic-friction-speed) + ) + ) + ) + (set! (-> arg1 friction-coef) + (* (-> arg1 friction-coef) (+ 1.0 (* -0.75 (fmax 0.0 (fmin 1.0 (-> obj engine-thrust)))))) + ) + (let ((f0-90 + (* (-> arg1 friction-coef) + (-> obj info-override tire-friction-factor) + (fmax 0.0 (vector-dot (-> s1-1 ground-normal) (-> s1-1 tire-force))) + ) + ) + ) + (set! (-> arg1 impulse) + (/ (* -1.0 (-> arg1 vel-dot-norm)) + (* arg0 (+ (-> s3-0 state info inv-mass) (vector-dot (-> arg1 normal) (-> arg1 tmp)))) + ) + ) + (set! (-> arg1 impulse) (fmax (fmin (-> arg1 impulse) f0-90) (- f0-90))) + ) + (vector-float*! (-> arg1 force) (-> arg1 normal) (-> arg1 impulse)) + (let ((v1-213 s3-0) + (a1-45 (-> arg1 world-pos)) + (a2-19 (-> arg1 force)) + ) + (rigid-body-method-18 (-> v1-213 state) a1-45 a2-19) + ) + ) + ) + ) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 29 of type vehicle +;; INFO: Used lq/sq +;; WARN: Stack slot offset 624 signed mismatch +;; WARN: Stack slot offset 724 signed mismatch +;; WARN: Stack slot offset 720 signed mismatch +;; WARN: Stack slot offset 624 signed mismatch +;; WARN: Stack slot offset 724 signed mismatch +;; WARN: Stack slot offset 720 signed mismatch +;; WARN: Stack slot offset 624 signed mismatch +;; WARN: Stack slot offset 724 signed mismatch +;; WARN: Stack slot offset 720 signed mismatch +;; WARN: Stack slot offset 624 signed mismatch +;; WARN: Stack slot offset 724 signed mismatch +;; WARN: Stack slot offset 720 signed mismatch +;; WARN: Return type mismatch int vs none. +(defmethod rigid-body-object-method-29 vehicle ((obj vehicle) (arg0 float)) + (local-vars (sv-624 float) (sv-720 float) (sv-724 float)) + (rlet ((vf0 :class vf)) + (init-vf0-vector) + (let ((gp-0 (new 'stack-no-clear 'inline-array 'matrix 9)) + (s5-0 (-> obj rbody)) + (s4-0 (-> obj info-override)) + ) + (mem-copy! (the-as pointer (-> gp-0 0)) (the-as pointer (-> s5-0 state matrix)) 64) + (when (not (logtest? (-> obj flags) (rigid-body-object-flag dead))) + (vehicle-method-100 obj arg0 (the-as vehicle-physics-work gp-0)) + (when (>= 1 (-> obj force-level)) + (set! sv-624 (* (-> s4-0 info mass) (-> s4-0 extra gravity))) + (when (!= (-> s4-0 pitch-control-factor) 0.0) + (set! (-> gp-0 3 vector 2 quad) (-> gp-0 0 quad 0)) + (set! (-> gp-0 3 vector 2 y) 0.0) + (let ((f30-0 (vector-dot (-> gp-0 3 vector 2) (-> s5-0 state ang-velocity)))) + (dotimes (s1-0 (-> s4-0 lift-thruster-count)) + (let ((s0-0 (-> s4-0 lift-thruster-array s1-0))) + (vector-matrix*! (-> gp-0 1 vector 2) (-> s0-0 local-pos) (-> gp-0 0)) + (vector-rotate*! (-> gp-0 1 trans) (-> s0-0 normal) (-> gp-0 0)) + (let* ((f0-5 -1.0) + (f1-2 1.0) + (f2-0 0.2) + (a0-9 (the-as number (-> s0-0 local-pos z))) + (a1-5 #xffffffff80000000) + (v1-16 #x3f800000) + (f0-7 + (* (fmax + f0-5 + (fmin + f1-2 + (* f2-0 (the-as float (logior (logand (the-as uint a0-9) a1-5) v1-16)) (-> s4-0 pitch-control-factor) f30-0) + ) + ) + sv-624 + ) + ) + ) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) (* -1.0 f0-7)) + ) + ) + (let ((v1-21 s5-0) + (a1-7 (-> gp-0 1 vector 2)) + (a2-4 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-21 state) a1-7 (the-as vector a2-4)) + ) + ) + ) + ) + (let ((s1-1 (new 'stack-no-clear 'inline-array 'vector 5))) + (let ((f0-12 (* -1.0 (-> obj controls steering) (-> gp-0 4 vector 1 w) (-> s4-0 roll-angle)))) + (if (logtest? (-> obj flags) (rigid-body-object-flag in-air)) + (set! f0-12 0.0) + ) + (quaternion-vector-angle! (the-as quaternion (-> s1-1 0)) (-> gp-0 0 vector 2) f0-12) + ) + (quaternion->matrix (the-as matrix (-> s1-1 1)) (the-as quaternion (-> s1-1 0))) + (set! (-> gp-0 3 trans quad) (-> s1-1 2 quad)) + ) + (let ((f0-14 (vector-dot (the-as vector (-> gp-0 0)) (-> gp-0 3 trans)))) + (set! sv-720 (* (-> s4-0 info mass) (-> s4-0 extra gravity))) + (let ((f1-11 f0-14)) + (set! sv-724 + (+ (* f1-11 f1-11 f0-14) (* 0.075 (vector-dot (-> gp-0 0 vector 2) (-> s5-0 state ang-velocity)))) + ) + ) + ) + (dotimes (s1-2 (-> s4-0 roll-thruster-count)) + (let* ((s0-1 (-> s4-0 roll-thruster-array s1-2)) + (f0-17 0.0) + (f1-16 1.0) + (f2-7 -1.0) + (a0-19 (the-as number (-> s0-1 local-pos x))) + (a1-10 #xffffffff80000000) + (v1-44 #x3f800000) + (f30-1 + (fmax f0-17 (fmin f1-16 (* f2-7 (the-as float (logior (logand (the-as uint a0-19) a1-10) v1-44)) sv-724))) + ) + ) + (when (< 0.0 f30-1) + (let ((f30-2 + (* (+ f30-1 (+ (- (-> obj power-fluctuation-factor)) (* 2.0 (rand-vu) (-> obj power-fluctuation-factor)))) + (-> s4-0 roll-control-factor) + sv-720 + ) + ) + ) + (+! (-> obj roll-thrust s1-2) (fmax 0.0 f30-2)) + (vector-matrix*! (-> gp-0 1 vector 2) (-> s0-1 local-pos) (-> gp-0 0)) + (vector-rotate*! (-> gp-0 1 trans) (-> s0-1 normal) (-> gp-0 0)) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) (* -1.0 f30-2)) + ) + (let ((v1-56 s5-0) + (a1-14 (-> gp-0 1 vector 2)) + (a2-8 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-56 state) a1-14 (the-as vector a2-8)) + ) + 0 + ) + ) + ) + ) + (when #t + (let* ((f0-30 (-> obj controls steering)) + (f1-23 (-> s4-0 steering-thruster-half-gain-speed)) + (f2-10 (-> s4-0 steering-thruster-half-gain-speed)) + (v1-65 (-> s5-0 state lin-velocity)) + (f2-12 (/ f1-23 (+ f2-10 (sqrtf (+ (* (-> v1-65 x) (-> v1-65 x)) (* (-> v1-65 z) (-> v1-65 z))))))) + ) + (if (< (-> obj controls throttle) 0.0) + (set! f0-30 (* -1.0 f0-30)) + ) + (set! (-> gp-0 3 vector 2 quad) (-> gp-0 0 vector 1 quad)) + (let ((f30-3 (* 8192.0 + (-> s4-0 info mass) + (-> obj power-level) + (- (* f0-30 f2-12 (-> s4-0 steering-thruster-max-gain)) + (vector-dot (-> gp-0 3 vector 2) (-> s5-0 state ang-velocity)) + ) + (-> s4-0 steering-thruster-factor) + ) + ) + ) + (if (logtest? (-> obj flags) (rigid-body-object-flag in-air)) + (set! f30-3 (* f30-3 (-> s4-0 air-steering-factor))) + ) + (let ((s1-3 (the-as object (-> s4-0 steering-thruster-array)))) + (countdown (s0-2 (-> s4-0 steering-thruster-count)) + (vector-matrix*! (-> gp-0 1 vector 2) (-> (the-as vehicle-control-point s1-3) local-pos) (-> gp-0 0)) + (vector-rotate*! + (-> gp-0 1 trans) + (-> (the-as (inline-array vehicle-control-point) s1-3) 0 normal) + (-> gp-0 0) + ) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) f30-3) + (let ((v1-80 s5-0) + (a1-17 (-> gp-0 1 vector 2)) + (a2-11 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-80 state) a1-17 (the-as vector a2-11)) + ) + (set! s1-3 (-> (the-as (inline-array vehicle-control-point) s1-3) 1)) + ) + ) + ) + ) + ) + (seek! (-> obj jump-thrust) 0.0 (* 6.0 arg0)) + (when (logtest? (rigid-body-object-flag ignition) (-> obj flags)) + (vector-matrix*! (-> gp-0 1 vector 2) (-> s4-0 engine-thrust-local-pos) (-> gp-0 0)) + (set! (-> gp-0 3 trans quad) (-> gp-0 0 vector 2 quad)) + (let ((f0-45 (* (-> obj engine-thrust) + (-> s4-0 max-engine-thrust) + (-> s4-0 info mass) + (-> obj power-level) + (-> obj force-scale) + ) + ) + ) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 3 trans) f0-45) + ) + (when #t + (let ((v1-94 s5-0) + (a1-20 (-> gp-0 1 vector 2)) + (a2-14 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-94 state) a1-20 (the-as vector a2-14)) + ) + ) + ) + (let ((f30-4 (-> obj controls brake))) + (when (< 0.0 f30-4) + (vector-matrix*! (-> gp-0 1 vector 2) (-> s4-0 brake-local-pos) (-> gp-0 0)) + (let ((v1-98 s5-0) + (a1-22 (-> gp-0 1 vector 2)) + (a2-16 (-> gp-0 1 vector 1)) + ) + (rigid-body-method-22 (-> v1-98 state) a1-22 a2-16) + ) + (let* ((v1-101 (-> gp-0 1 vector 1)) + (f1-38 (sqrtf (+ (* (-> v1-101 x) (-> v1-101 x)) (* (-> v1-101 z) (-> v1-101 z))))) + (f0-53 (* -98304.0 (-> s4-0 brake-factor) (-> s4-0 info mass))) + (f1-39 (fmax 16384.0 f1-38)) + (f0-55 (* f0-53 (/ 1.0 f1-39) f30-4)) + ) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 vector 1) f0-55) + ) + (let ((v1-109 s5-0) + (a1-23 (-> gp-0 1 vector 2)) + (a2-17 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-109 state) a1-23 (the-as vector a2-17)) + ) + ) + ) + ) + (let ((s1-4 (new 'stack-no-clear 'inline-array 'vehicle-control-point 2))) + (quad-copy! + (the-as pointer s1-4) + (the-as pointer (-> s4-0 stabilizer-array)) + (* (-> s4-0 stabilizer-count) 2) + ) + (let ((s0-3 (-> s1-4 3 normal))) + (let ((f0-57 (* -3640.889 (-> obj controls lean-z)))) + (vector-rotate-around-x! s0-3 s0-3 f0-57) + ) + (if (logtest? (-> obj flags) (rigid-body-object-flag in-air)) + (set! (-> s0-3 w) (* 10.0 (-> s0-3 w))) + ) + (if (logtest? (rigid-body-object-flag flight-level-transition) (-> obj flags)) + (set! (-> s0-3 w) 0.0) + ) + ) + (let ((f30-5 (* -0.0000006103516 (-> obj force-scale) (-> s4-0 info mass) (-> s4-0 drag-force-factor)))) + (if (logtest? (-> obj flags) (rigid-body-object-flag in-air)) + (set! f30-5 (* f30-5 (-> s4-0 air-drag-factor))) + ) + (let ((s1-5 (-> s1-4 0))) + (countdown (s0-4 (-> s4-0 stabilizer-count)) + (vector-matrix*! (-> gp-0 1 vector 2) (-> s1-5 local-pos) (-> gp-0 0)) + (vector-rotate*! (-> gp-0 1 trans) (-> s1-5 normal) (-> gp-0 0)) + (let ((v1-128 s5-0) + (a1-28 (-> gp-0 1 vector 2)) + (a2-22 (-> gp-0 1 vector 1)) + ) + (rigid-body-method-22 (-> v1-128 state) a1-28 a2-22) + ) + (let ((f0-70 + (* -0.06125 + (vector-dot (-> gp-0 1 trans) (-> gp-0 1 vector 1)) + (-> s1-5 normal w) + (-> obj force-scale) + (-> s4-0 info mass) + (-> s4-0 airfoil-factor) + ) + ) + ) + (vector-float*! (the-as vector (-> gp-0 1)) (-> gp-0 1 trans) f0-70) + ) + (when (<= (-> obj force-level) 0) + (let ((v1-138 s5-0) + (a1-29 (-> gp-0 1 vector 2)) + (a2-23 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-138 state) a1-29 (the-as vector a2-23)) + ) + ) + (vector-float*! + (the-as vector (-> gp-0 1)) + (-> gp-0 1 vector 1) + (* f30-5 + (-> s1-5 normal w) + (+ (* 0.15 (vector-length (-> gp-0 1 vector 1))) (fabs (vector-dot (-> gp-0 1 trans) (-> gp-0 1 vector 1)))) + ) + ) + (when (<= (-> obj force-level) 0) + (let ((v1-145 s5-0) + (a1-35 (-> gp-0 1 vector 2)) + (a2-25 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-145 state) a1-35 (the-as vector a2-25)) + ) + ) + (&+! s1-5 32) + ) + ) + ) + ) + (.svf (&-> (-> gp-0 1) quad 0) vf0) + (set! (-> gp-0 1 vector 0 y) (* -1.0 + (-> s4-0 extra gravity) + (if (< 1 (-> obj force-level)) + 2.0 + 1.0 + ) + (-> s4-0 info mass) + ) + ) + (let ((v1-154 s5-0) + (a1-36 (-> gp-0 1)) + ) + (rigid-body-method-20 (-> v1-154 state) (the-as vector a1-36)) + ) + (when (logtest? (-> obj flags) (rigid-body-object-flag riding)) + (set! (-> gp-0 2 quad 0) (-> s4-0 info cm-offset-joint quad)) + (+! (-> gp-0 2 vector 0 x) (* (-> obj controls steering) (-> s4-0 player-shift-x))) + (+! (-> gp-0 2 vector 0 z) (* (-> obj controls lean-z) (-> s4-0 player-shift-z))) + (vector-matrix*! (-> gp-0 1 vector 2) (the-as vector (-> gp-0 2)) (-> gp-0 0)) + (.svf (&-> (-> gp-0 1) quad 0) vf0) + (set! (-> gp-0 1 vector 0 y) (- (-> s4-0 player-weight))) + (let ((v1-162 s5-0) + (a1-38 (-> gp-0 1 vector 2)) + (a2-27 (-> gp-0 1)) + ) + (rigid-body-method-18 (-> v1-162 state) a1-38 (the-as vector a2-27)) + ) + 0 + ) + (rigid-body-object-method-50 obj arg0) + (vehicle-method-99 obj arg0) + (when (not (logtest? (-> obj flags) (rigid-body-object-flag dead))) + (set! (-> gp-0 1 trans quad) (-> s5-0 state lin-momentum quad)) + (set! (-> gp-0 1 trans y) 0.0) + (vector-normalize! (-> gp-0 1 trans) 1.0) + (let* ((v1-174 (-> s5-0 state lin-velocity)) + (f0-90 (/ (sqrtf (+ (* (-> v1-174 x) (-> v1-174 x)) (* (-> v1-174 z) (-> v1-174 z)))) (-> s4-0 max-xz-speed))) + (v1-176 (-> gp-0 1)) + (a0-65 (-> gp-0 1 trans)) + (f1-67 -1.0) + (f2-29 (* (-> s4-0 speed-limiting-drag) (vector-dot (-> s5-0 state force) (-> gp-0 1 trans)))) + (f3-19 + (* (fabs (-> obj engine-thrust)) (-> s4-0 speed-scrubbing-drag) (vector-length (-> s5-0 state lin-momentum))) + ) + (f4-6 (- 1.0 (fabs (vector-dot (-> s5-0 state matrix vector 2) (-> gp-0 1 trans))))) + ) + (vector-float*! (the-as vector v1-176) a0-65 (* f1-67 (+ f2-29 (* f3-19 (* f4-6 f4-6))) (sqrtf f0-90))) + ) + (let ((a1-51 (-> gp-0 1))) + (rigid-body-method-20 (-> s5-0 state) (the-as vector a1-51)) + ) + ) + ) + 0 + (none) + ) + ) + +;; definition for method 125 of type vehicle +(defmethod vehicle-method-125 vehicle ((obj vehicle) (arg0 float)) + (rigid-body-object-method-29 obj arg0) + (none) + ) + +;; definition for method 126 of type vehicle +(defmethod vehicle-method-126 vehicle ((obj vehicle) (arg0 float)) + (rigid-body-object-method-29 obj arg0) + (none) + ) diff --git a/test/decompiler/reference/jak2/levels/city/generic/neon-praxis-part_REF.gc b/test/decompiler/reference/jak2/levels/city/generic/neon-praxis-part_REF.gc new file mode 100644 index 0000000000..2923cf6a2d --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/generic/neon-praxis-part_REF.gc @@ -0,0 +1,1333 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defpart 3596 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x13 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.7)) + (sp-flt spt-z (meters 9.2)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object '*praxis* 0 (the binteger 146408032) (the binteger 146408064)) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3597 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x15 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.7)) + (sp-flt spt-z (meters 6.4)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis* + (the binteger 1) + (the binteger 146408096) + (the binteger 146408128) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3598 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x8 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.7)) + (sp-flt spt-z (meters 2.7)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis* + (the binteger 2) + (the binteger 146407680) + (the binteger 146407712) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3599 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.7)) + (sp-flt spt-z (meters -0.7)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis* + (the binteger 3) + (the binteger 146408224) + (the binteger 146408256) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3600 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters -4.5)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis* + (the binteger 4) + (the binteger 146407776) + (the binteger 146407808) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3601 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 1)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters -8.8)) + (sp-flt spt-scale-x (meters 6)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis* + (the binteger 5) + (the binteger 146408160) + (the binteger 146408192) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3602 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xa :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 24)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 255.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-4 left-multiply-quat) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3603 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 6)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object '*praxis-backing* 0 (the binteger 146407968) (the binteger 146408000)) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3604 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 1) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3605 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 4)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 2) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3606 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 3)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 3) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3607 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 2)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 4) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3608 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 1)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 5) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3609 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 0)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 6) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3610 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -1)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 7) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3611 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -2)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 8) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3612 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -3)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 9) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3613 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -4)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 10) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3614 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 32.0 16.0 1.0) + (sp-flt spt-g 0.0) + (sp-copy-from-other spt-b -2) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 11) + (the binteger 146407968) + (the binteger 146408000) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3615 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 5.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 12) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3616 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 4.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 13) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3617 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 3.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 14) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3618 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 2.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 15) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3619 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 16) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3620 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 17) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3621 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 18) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3622 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -1.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 19) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3623 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -2.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 20) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3624 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -3.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 21) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 3625 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x45d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0)) + (sp-flt spt-y (meters -4.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 32)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-flt spt-r 0.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 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 object + '*praxis-backing* + (the binteger 22) + (the binteger 146407872) + (the binteger 146407904) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-praxis-neon + :id 832 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 3596 :flags (is-3d launch-asap bit7)) + (sp-item 3597 :flags (is-3d launch-asap bit7)) + (sp-item 3598 :flags (is-3d launch-asap bit7)) + (sp-item 3599 :flags (is-3d launch-asap bit7)) + (sp-item 3600 :flags (is-3d launch-asap bit7)) + (sp-item 3601 :flags (is-3d launch-asap bit7)) + (sp-item 3602 :flags (is-3d launch-asap bit7)) + ) + ) + +;; definition for symbol *praxis*, type (array object) +(define *praxis* (new 'static 'boxed-array :type object + (the binteger 6) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w :x 63)) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w)) + (new 'static 'boxed-array :type object + (the binteger 1) + (new 'static 'vector4w :x 1) + (new 'static 'vector4w :x 3) + (new 'static 'vector4w :x 7) + (new 'static 'vector4w :x 15) + (new 'static 'vector4w :x 31) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 62) + (new 'static 'vector4w :x 60) + (new 'static 'vector4w :x 56) + (new 'static 'vector4w :x 48) + (new 'static 'vector4w :x 32) + (new 'static 'vector4w) + ) + (new 'static 'boxed-array :type object + (the binteger 10) + (new 'static 'vector4w) + (new 'static 'vector4w :x 1) + (new 'static 'vector4w :x 2) + (new 'static 'vector4w :x 4) + (new 'static 'vector4w :x 8) + (new 'static 'vector4w :x 16) + (new 'static 'vector4w :x 32) + (new 'static 'vector4w) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 63) + ) + (new 'static 'boxed-array :type object + (the binteger 10) + (new 'static 'vector4w) + (new 'static 'vector4w :x 33) + (new 'static 'vector4w :x 51) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 30) + (new 'static 'vector4w :x 12) + (new 'static 'vector4w) + (new 'static 'vector4w :x 33) + (new 'static 'vector4w :x 51) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 63) + (new 'static 'vector4w :x 63) + ) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-praxis-neon-back + :id 833 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 3603 :flags (is-3d launch-asap bit7)) + (sp-item 3615 :flags (is-3d launch-asap bit7)) + (sp-item 3604 :flags (is-3d launch-asap bit7)) + (sp-item 3616 :flags (is-3d launch-asap bit7)) + (sp-item 3605 :flags (is-3d launch-asap bit7)) + (sp-item 3617 :flags (is-3d launch-asap bit7)) + (sp-item 3606 :flags (is-3d launch-asap bit7)) + (sp-item 3618 :flags (is-3d launch-asap bit7)) + (sp-item 3607 :flags (is-3d launch-asap bit7)) + (sp-item 3619 :flags (is-3d launch-asap bit7)) + (sp-item 3608 :flags (is-3d launch-asap bit7)) + (sp-item 3620 :flags (is-3d launch-asap bit7)) + (sp-item 3609 :flags (is-3d launch-asap bit7)) + (sp-item 3621 :flags (is-3d launch-asap bit7)) + (sp-item 3610 :flags (is-3d launch-asap bit7)) + (sp-item 3622 :flags (is-3d launch-asap bit7)) + (sp-item 3611 :flags (is-3d launch-asap bit7)) + (sp-item 3623 :flags (is-3d launch-asap bit7)) + (sp-item 3612 :flags (is-3d launch-asap bit7)) + (sp-item 3624 :flags (is-3d launch-asap bit7)) + (sp-item 3613 :flags (is-3d launch-asap bit7)) + (sp-item 3625 :flags (is-3d launch-asap bit7)) + (sp-item 3614 :flags (is-3d launch-asap bit7)) + ) + ) + +;; definition for symbol *praxis-backing*, type (array object) +(define *praxis-backing* + (new 'static 'boxed-array :type object + (the binteger 23) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w :x #x7fffff)) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w)) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w :x #x400001) + (new 'static 'vector4w :x #x600003) + (new 'static 'vector4w :x #x700007) + (new 'static 'vector4w :x #x78000f) + (new 'static 'vector4w :x #x7c001f) + (new 'static 'vector4w :x #x7e003f) + (new 'static 'vector4w :x #x7f007f) + (new 'static 'vector4w :x #x7f80ff) + (new 'static 'vector4w :x #x7fc1ff) + (new 'static 'vector4w :x #x7fe3ff) + (new 'static 'vector4w :x #x7ff7ff) + (new 'static 'vector4w :x #x7fffff) + ) + (new 'static 'boxed-array :type object + (the binteger 3) + (new 'static 'vector4w :x #x3c00) + (new 'static 'vector4w :x #x6600) + (new 'static 'vector4w :x #xc300) + (new 'static 'vector4w :x #x18180) + (new 'static 'vector4w :x #x300c0) + (new 'static 'vector4w :x #x60060) + (new 'static 'vector4w :x #xc0030) + (new 'static 'vector4w :x #x180018) + (new 'static 'vector4w :x #x30000c) + (new 'static 'vector4w :x #x600006) + ) + (new 'static 'boxed-array :type object + (the binteger 3) + (new 'static 'vector4w :x #x8008) + (new 'static 'vector4w :x #x200100) + (new 'static 'vector4w :x #x4002) + (new 'static 'vector4w :x #x420400) + (new 'static 'vector4w :x #x80040) + (new 'static 'vector4w :x #x2004) + (new 'static 'vector4w :x #x100800) + (new 'static 'vector4w :x #x10020) + (new 'static 'vector4w :x #x40081) + (new 'static 'vector4w :x #x1210) + ) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w :x 96) + (new 'static 'vector4w :x #xf0) + (new 'static 'vector4w :x #x1f8) + (new 'static 'vector4w :x #x3fc) + (new 'static 'vector4w :x #x7fe) + (new 'static 'vector4w :x #xfff) + ) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w :x #x111000) + (new 'static 'vector4w :x #x222000) + (new 'static 'vector4w :x #x444000) + (new 'static 'vector4w :x #x88000) + ) + (new 'static 'boxed-array :type object + (the binteger 15) + (new 'static 'vector4w :x #x7ff000) + (new 'static 'vector4w :x #xfff) + ) + ) + ) + +;; definition for symbol *city-neon-praxis-group-ids*, type (array int32) +(define *city-neon-praxis-group-ids* (new 'static 'boxed-array :type int32 #x341 #x340)) + +;; definition of type city-neon-praxis +(deftype city-neon-praxis (process-drawable) + ((rot vector :inline :offset-assert 208) + (master-enable uint32 :offset-assert 224) + (unknown-k1jn23j1n23 uint32 3 :offset-assert 228) + (praxis-mode uint32 :offset-assert 240) + (back-mode uint32 :offset-assert 244) + (praxis-counter int32 :offset-assert 248) + (back-counter int32 :offset-assert 252) + (parts sparticle-launch-control 2 :offset-assert 256) + ) + :heap-base #x90 + :method-count-assert 22 + :size-assert #x108 + :flag-assert #x1600900108 + (:methods + (idle () _type_ :state 20) + (city-neon-praxis-method-21 (_type_) none 21) + ) + ) + +;; definition for method 3 of type city-neon-praxis +(defmethod inspect city-neon-praxis ((obj city-neon-praxis)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Trot: ~`vector`P~%" (-> obj rot)) + (format #t "~2Tmaster-enable: ~D~%" (-> obj master-enable)) + (format #t "~2Tstate-time: ~D~%" (-> obj state-time)) + (format #t "~2Tpraxis-mode: ~D~%" (-> obj praxis-mode)) + (format #t "~2Tback-mode: ~D~%" (-> obj back-mode)) + (format #t "~2Tpraxis-counter: ~D~%" (-> obj praxis-counter)) + (format #t "~2Tback-counter: ~D~%" (-> obj back-counter)) + (format #t "~2Tparts[2] @ #x~X~%" (-> obj parts)) + (label cfg-4) + obj + ) + +;; definition for method 10 of type city-neon-praxis +(defmethod deactivate city-neon-praxis ((obj city-neon-praxis)) + (dotimes (s5-0 2) + (let ((a0-1 (-> obj parts s5-0))) + (if (nonzero? a0-1) + (kill-and-free-particles a0-1) + ) + ) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 7 of type city-neon-praxis +;; WARN: Return type mismatch process-drawable vs city-neon-praxis. +(defmethod relocate city-neon-praxis ((obj city-neon-praxis) (arg0 int)) + (dotimes (v1-0 2) + (if (nonzero? (-> obj parts v1-0)) + (&+! (-> obj parts v1-0) arg0) + ) + ) + (the-as city-neon-praxis ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; definition for method 21 of type city-neon-praxis +;; WARN: Return type mismatch symbol vs none. +(defmethod city-neon-praxis-method-21 city-neon-praxis ((obj city-neon-praxis)) + (+! (-> obj parts 1 state-counter) 1) + (when (!= (-> obj parts 1 state-mode 0) (-> obj praxis-mode)) + (set! (-> obj parts 1 state-mode 0) (-> obj praxis-mode)) + (set! (-> obj parts 1 state-counter) (the-as uint 0)) + 0 + ) + (+! (-> obj parts 0 state-counter) 1) + (when (!= (-> obj parts 0 state-mode 0) (-> obj back-mode)) + (set! (-> obj parts 0 state-mode 0) (-> obj back-mode)) + (set! (-> obj parts 0 state-counter) (the-as uint 0)) + 0 + ) + (let ((s5-0 (-> obj master-enable)) + (s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + (f30-0 (-> obj rot y)) + ) + (set-vector! s4-0 (* 3276.8 (cos (- 49152.0 f30-0))) 0.0 (* 3276.8 (sin (- 49152.0 f30-0))) 1.0) + (vector-! s3-0 (camera-pos) (-> obj root trans)) + (when (< (vector-dot s4-0 s3-0) 0.0) + (vector-negate! s4-0 s4-0) + (set! f30-0 (+ 32768.0 f30-0)) + ) + (vector+! s4-0 s4-0 (-> obj root trans)) + (dotimes (s3-1 2) + (when (logtest? s5-0 1) + (let ((s2-3 (-> obj parts s3-1))) + (matrix-rotate-y! (-> s2-3 origin) (+ 16384.0 f30-0)) + (spawn s2-3 s4-0) + ) + ) + (set! s5-0 (shr s5-0 1)) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate idle (city-neon-praxis) + :virtual #t + :code (behavior () + (until #f + (when (<= (-> self praxis-counter) 0) + (set! (-> self praxis-mode) (the-as uint (rand-vu-int-count 5))) + (let ((v0-1 (rand-vu-int-range 3 6)) + (a0-3 (the-as (object object) (-> *praxis* (+ (-> self praxis-mode) 1)))) + ) + (set! (-> self praxis-counter) + (* v0-1 (* (+ (-> (the-as (pointer int32) a0-3) 0) -1) + (the-as int (/ (the-as int (-> (the-as (array object) a0-3) 0)) 8)) + ) + ) + ) + ) + (while (< (-> self praxis-counter) 120) + (set! (-> self praxis-counter) (* (-> self praxis-counter) 2)) + ) + ) + (+! (-> self praxis-counter) -1) + (when (<= (-> self back-counter) 0) + (set! (-> self back-mode) (the-as uint (rand-vu-int-count 8))) + (let ((v0-3 (rand-vu-int-range 3 6)) + (a0-9 (the-as (object object) (-> *praxis-backing* (+ (-> self back-mode) 1)))) + ) + (set! (-> self back-counter) (* v0-3 (* (+ (-> (the-as (pointer int32) a0-9) 0) -1) + (the-as int (/ (the-as int (-> (the-as (array object) a0-9) 0)) 8)) + ) + ) + ) + ) + (while (< (-> self back-counter) 120) + (set! (-> self back-counter) (* (-> self back-counter) 2)) + ) + ) + (+! (-> self back-counter) -1) + (city-neon-praxis-method-21 self) + (suspend) + ) + #f + (none) + ) + ) + +;; definition for method 11 of type city-neon-praxis +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! city-neon-praxis ((obj city-neon-praxis) (arg0 entity-actor)) + "Typically the method that does the initial setup on the process, potentially using the [[entity-actor]] provided as part of that. +This commonly includes things such as: +- stack size +- collision information +- loading the skeleton group / bones +- sounds" + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause enemy)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (set! (-> obj master-enable) (the-as uint -1)) + (set! (-> obj praxis-mode) (the-as uint (rand-vu-int-count 5))) + (set! (-> obj back-mode) (the-as uint (rand-vu-int-count 8))) + (-> obj rot y) + (let ((f0-1 16384.0)) + (set! (-> obj rot y) f0-1) + (quaternion-vector-angle! (-> obj root quat) (new 'static 'vector :y 1.0 :w 1.0) f0-1) + ) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (vector-z-quaternion! s5-1 (-> obj root quat)) + (vector-normalize! s5-1 -4096.0) + (vector+! (-> obj root trans) (-> obj root trans) s5-1) + ) + (let ((s5-2 *city-neon-praxis-group-ids*)) + (dotimes (s4-0 2) + (set! (-> obj parts s4-0) (create-launch-control (-> *part-group-id-table* (-> s5-2 s4-0)) obj)) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + + + + diff --git a/test/decompiler/reference/jak2/levels/city/onin_tent/onin-game_REF.gc b/test/decompiler/reference/jak2/levels/city/onin_tent/onin-game_REF.gc new file mode 100644 index 0000000000..5a28d69fa7 --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/onin_tent/onin-game_REF.gc @@ -0,0 +1,2941 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type onin-game-event +(deftype onin-game-event (structure) + ((min-count uint16 :offset-assert 0) + (max-count uint16 :offset-assert 2) + (min-event uint16 :offset-assert 4) + (max-event uint16 :offset-assert 6) + (wave-delay uint16 :offset-assert 8) + (min-wave uint16 :offset-assert 10) + (max-wave uint16 :offset-assert 12) + (gravity meters :offset-assert 16) + ) + :pack-me + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +;; definition for method 3 of type onin-game-event +(defmethod inspect onin-game-event ((obj onin-game-event)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (format #t "[~8x] ~A~%" obj 'onin-game-event) + (format #t "~1Tmin-count: ~D~%" (-> obj min-count)) + (format #t "~1Tmax-count: ~D~%" (-> obj max-count)) + (format #t "~1Tmin-event: ~D~%" (-> obj min-event)) + (format #t "~1Tmax-event: ~D~%" (-> obj max-event)) + (format #t "~1Twave-delay: ~D~%" (-> obj wave-delay)) + (format #t "~1Tmin-wave: ~D~%" (-> obj min-wave)) + (format #t "~1Tmax-wave: ~D~%" (-> obj max-wave)) + (format #t "~1Tgravity: (meters ~m)~%" (-> obj gravity)) + (label cfg-4) + obj + ) + +;; definition for symbol *onin-game-data*, type (array object) +(define *onin-game-data* (new 'static 'boxed-array :type object + (new 'static 'inline-array onin-game-event 21 + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x190 + :min-event #x1770 + :max-event #x12c + :wave-delay #x12c + :min-wave #xbb8 + :max-wave #xbb8 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x1 + :min-event #x12c + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -3) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x5 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x1 + :min-event #x4b + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x6 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #xe1 + :max-event #x12c + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x5 + :max-count #x7 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x96 + :max-event #xe1 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x6 + :max-count #x8 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x3 + :min-event #x12c + :max-event #x177 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x5 + :min-event #x12c + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x3 + :min-event #xe1 + :max-event #x12c + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x7 + :max-count #x9 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x4 + :min-event #x177 + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x8 + :max-count #xa + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x4 + :min-event #x12c + :max-event #x177 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x9 + :max-count #xb + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x78 + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #xa + :max-count #xc + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x4b + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :max-count #xc + :min-event #x12c + :max-event #x12c + :wave-delay #x12c + :min-wave #xbb8 + :max-wave #xbb8 + :gravity (meters -2) + ) + ) + (new 'static 'inline-array onin-game-event 21 + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x3e8 + :min-event #x1770 + :max-event #x12c + :wave-delay #x12c + :min-wave #xbb8 + :max-wave #xbb8 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x1 + :min-event #x12c + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -3) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x5 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x1 + :min-event #x4b + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x6 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #xe1 + :max-event #x12c + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x5 + :max-count #x7 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x96 + :max-event #xe1 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x6 + :max-count #x8 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x3 + :min-event #x12c + :max-event #x177 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x1 + :max-count #x5 + :min-event #x12c + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x3 + :max-count #x3 + :min-event #xe1 + :max-event #x12c + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x7 + :max-count #x9 + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x4 + :min-event #x177 + :max-event #x1c2 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x8 + :max-count #xa + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x4 + :max-count #x4 + :min-event #x12c + :max-event #x177 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #x9 + :max-count #xb + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x78 + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :min-count #xa + :max-count #xc + :min-event #x258 + :max-event #x384 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -1) + ) + (new 'static 'onin-game-event + :min-count #x2 + :max-count #x2 + :min-event #x4b + :max-event #x96 + :wave-delay #x12c + :min-wave #x1194 + :max-wave #x1194 + :gravity (meters -2) + ) + (new 'static 'onin-game-event + :max-count #xc + :min-event #x12c + :max-event #x12c + :wave-delay #x12c + :min-wave #xbb8 + :max-wave #xbb8 + :gravity (meters -2) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-triangle + :id 799 + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3484 :flags (bit6)) (sp-item 3485) (sp-item 3486) (sp-item 3487) (sp-item 3488 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3485 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.33) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters -0.18) (meters -0.02) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees 0.0)) + (sp-rnd-flt spt-conerot-radius (meters 0.09) (meters 0.01) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3486 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.33) + (sp-rnd-flt spt-y (meters 0.075) (meters -0.03) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees 30.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.18) (meters 0.2) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3487 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.33) + (sp-rnd-flt spt-y (meters 0.075) (meters -0.03) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees -30.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.18) (meters 0.2) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3489 + :init-specs ((sp-flt spt-r 0.0) + (sp-flt spt-g 214.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-fade-a -0.3 -1.2 1.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3490) + ) + ) + +;; failed to figure out what this is: +(defpart 3490 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 3491) + ) + ) + +;; failed to figure out what this is: +(defpart 3491 + :init-specs ((sp-flt spt-r 0.0) + (sp-flt spt-g 214.0) + (sp-flt spt-b 32.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3490) + ) + ) + +;; failed to figure out what this is: +(defpart 3484 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + ) + ) + +;; failed to figure out what this is: +(defpart 3488 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.26)) + (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-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-4) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-circle + :id 800 + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3492 :flags (bit6)) (sp-item 3493) (sp-item 3494 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3493 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3495) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.09) (meters 0.01) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3495 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 8.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-fade-a -0.3 -1.2 1.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3496) + ) + ) + +;; failed to figure out what this is: +(defpart 3496 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 3497) + ) + ) + +;; failed to figure out what this is: +(defpart 3497 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 8.0) + (sp-flt spt-b 32.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3496) + ) + ) + +;; failed to figure out what this is: +(defpart 3492 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x7 :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + ) + ) + +;; failed to figure out what this is: +(defpart 3494 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x8 :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.26)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 32.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-4) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-square + :id 801 + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3498 :flags (bit6)) + (sp-item 3499) + (sp-item 3500) + (sp-item 3501) + (sp-item 3502) + (sp-item 3503 :flags (bit6)) + ) + ) + +;; failed to figure out what this is: +(defpart 3499 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters 0.08) (meters 0.01) 1.0) + (sp-rnd-flt spt-y (meters -0.09) (meters 0.18) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +;; failed to figure out what this is: +(defpart 3500 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters -0.08) (meters -0.01) 1.0) + (sp-rnd-flt spt-y (meters -0.09) (meters 0.18) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +;; failed to figure out what this is: +(defpart 3501 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters -0.08) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +;; failed to figure out what this is: +(defpart 3502 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters 0.08) (meters 0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +;; failed to figure out what this is: +(defpart 3504 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 0.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-fade-a -0.3 -1.2 1.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3505) + ) + ) + +;; failed to figure out what this is: +(defpart 3505 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 3506) + ) + ) + +;; failed to figure out what this is: +(defpart 3506 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 0.0) + (sp-flt spt-b 128.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3505) + ) + ) + +;; failed to figure out what this is: +(defpart 3498 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-rnd-int-flt spt-rot-z (degrees 0.0) 359 16384.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + ) + ) + +;; failed to figure out what this is: +(defpart 3503 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xa :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.26)) + (sp-rnd-int-flt spt-rot-z (degrees 0.0) 359 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-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-4) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-x + :id 802 + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3507 :flags (bit6)) (sp-item 3508) (sp-item 3509) (sp-item 3510 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3508 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-y (meters 0.005) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3511) + (sp-flt spt-conerot-z (degrees 45.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.12) (meters 0.24) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3509 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-y (meters 0.005) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.13653333 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 3511) + (sp-flt spt-conerot-z (degrees -45.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.12) (meters 0.24) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3511 + :init-specs ((sp-flt spt-r 48.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-rnd-flt spt-fade-a -0.3 -1.2 1.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3512) + ) + ) + +;; failed to figure out what this is: +(defpart 3512 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 3513) + ) + ) + +;; failed to figure out what this is: +(defpart 3513 + :init-specs ((sp-flt spt-r 48.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 255.0) + (sp-int-plain-rnd spt-next-time 25 149 1) + (sp-launcher-by-id spt-next-launcher 3512) + ) + ) + +;; failed to figure out what this is: +(defpart 3507 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xd :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-rnd-int-flt spt-rot-z (degrees 0.0) 359 16384.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 128.0 64.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + ) + ) + +;; failed to figure out what this is: +(defpart 3510 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xe :page #x40b)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.26)) + (sp-rnd-int-flt spt-rot-z (degrees 0.0) 359 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-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-4) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-pop-triangle + :id 803 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3514) (sp-item 3515) (sp-item 3516) (sp-item 3517 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3514 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 21.0) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters -0.18) (meters -0.02) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees 0.0)) + (sp-rnd-flt spt-conerot-radius (meters 0.09) (meters 0.01) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3515 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 21.0) + (sp-rnd-flt spt-y (meters 0.075) (meters -0.03) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees 30.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.18) (meters 0.2) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3516 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 21.0) + (sp-rnd-flt spt-y (meters 0.075) (meters -0.03) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3489) + (sp-flt spt-conerot-z (degrees -30.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.18) (meters 0.2) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3517 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbc :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (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-flt spt-a 64.0) + (sp-flt spt-fade-r -6.375) + (sp-flt spt-fade-g -1.025) + (sp-flt spt-fade-b -5.575) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-pop-circle + :id 804 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3518) (sp-item 3519 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3518 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 64.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3495) + (sp-rnd-flt spt-conerot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.09) (meters 0.01) 1.0) + ) + ) + +;; definition for function birth-func-onin-bubble-pop +;; WARN: Return type mismatch int vs none. +(defun birth-func-onin-bubble-pop ((arg0 sparticle-system) + (arg1 sparticle-cpuinfo) + (arg2 sprite-vec-data-3d) + (arg3 sparticle-launcher) + (arg4 sparticle-launch-state) + ) + (let* ((a0-1 (-> arg4 control)) + (v1-1 (vector-! (new 'stack-no-clear 'vector) (-> arg2 x-y-z-sx) (-> a0-1 origin trans))) + ) + (set! (-> arg1 vel-sxvel x) (* 0.083333336 (-> v1-1 x))) + (set! (-> arg1 vel-sxvel y) (* 0.083333336 (-> v1-1 y))) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defpart 3519 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbc :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (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-flt spt-a 64.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -6.1) + (sp-flt spt-fade-b -4.6) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-pop-square + :id 805 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3520) (sp-item 3521) (sp-item 3522) (sp-item 3523) (sp-item 3524 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3520 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters 0.08) (meters 0.01) 1.0) + (sp-rnd-flt spt-y (meters -0.09) (meters 0.18) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +;; failed to figure out what this is: +(defpart 3521 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -0.08) (meters -0.01) 1.0) + (sp-rnd-flt spt-y (meters -0.09) (meters 0.18) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +;; failed to figure out what this is: +(defpart 3522 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters -0.08) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +;; failed to figure out what this is: +(defpart 3523 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -0.09) (meters 0.18) 1.0) + (sp-rnd-flt spt-y (meters 0.08) (meters 0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3504) + ) + ) + +;; failed to figure out what this is: +(defpart 3524 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbc :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (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-flt spt-a 64.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b -6.375) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-pop-x + :id 806 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3525) (sp-item 3526) (sp-item 3527 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3525 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-y (meters 0.005) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3511) + (sp-flt spt-conerot-z (degrees 45.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.12) (meters 0.24) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3526 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-pop) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-y (meters 0.005) (meters -0.01) 1.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-rnd-flt spt-omega 2.048 2.048 1.0) + (sp-rnd-flt spt-accel-y -0.13653333 -0.4096 1.0) + (sp-rnd-flt spt-friction 0.94 0.01 1.0) + (sp-int spt-timer 320) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int spt-next-time 40) + (sp-launcher-by-id spt-next-launcher 3511) + (sp-flt spt-conerot-z (degrees -45.0)) + (sp-rnd-flt spt-conerot-radius (meters -0.12) (meters 0.24) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3527 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xbc :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (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-flt spt-a 64.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -5.175) + (sp-flt spt-fade-b -4.9) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 20) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-birth-triangle + :id 807 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3528) (sp-item 3529 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3528 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-birth-pop) + (sp-flt spt-num 32.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-flt spt-g 214.0) + (sp-flt spt-b 16.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-omega 1.2288 1.2288 1.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.771875) + (sp-flt spt-fade-b 0.7) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees -70.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.6) (meters 0.9) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3529 + :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.2)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 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-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-3) + (sp-flt spt-userdata 0.0) + (sp-int spt-next-time 80) + (sp-launcher-by-id spt-next-launcher 3530) + ) + ) + +;; failed to figure out what this is: +(defpart 3530 + :init-specs ((sp-flt spt-a 255.0) + (sp-flt spt-vel-y (meters 0.0033333334)) + (sp-flt spt-scalevel-x (meters -0.01)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -6.375) + (sp-flt spt-fade-b -3.2) + (sp-flt spt-fade-a -6.375) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-birth-circle + :id 808 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3531) (sp-item 3532 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3531 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-birth-pop) + (sp-flt spt-num 32.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 8.0) + (sp-flt spt-b 32.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-omega 1.2288 1.2288 1.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.771875) + (sp-flt spt-fade-b 0.7) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees -70.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.6) (meters 0.9) 1.0) + ) + ) + +;; definition for function birth-func-onin-bubble-birth-pop +;; WARN: Return type mismatch int vs none. +(defun birth-func-onin-bubble-birth-pop ((arg0 sparticle-system) + (arg1 sparticle-cpuinfo) + (arg2 sprite-vec-data-3d) + (arg3 sparticle-launcher) + (arg4 sparticle-launch-state) + ) + (let* ((a0-1 (-> arg4 control)) + (v1-1 (vector-! (new 'stack-no-clear 'vector) (-> arg2 x-y-z-sx) (-> a0-1 origin trans))) + ) + (set! (-> arg1 vel-sxvel x) (* -0.008333334 (-> v1-1 x))) + (set! (-> arg1 vel-sxvel y) (* -0.008333334 (-> v1-1 y))) + (set! (-> arg1 vel-sxvel z) (* -0.008333334 (-> v1-1 z))) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defpart 3532 + :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.2)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 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-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-3) + (sp-flt spt-userdata 0.0) + (sp-int spt-next-time 80) + (sp-launcher-by-id spt-next-launcher 3533) + ) + ) + +;; failed to figure out what this is: +(defpart 3533 + :init-specs ((sp-flt spt-a 255.0) + (sp-flt spt-vel-y (meters 0.0033333334)) + (sp-flt spt-scalevel-x (meters -0.01)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g -6.1) + (sp-flt spt-fade-b -4.6) + (sp-flt spt-fade-a -6.375) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-birth-square + :id 809 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3534) (sp-item 3535 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3534 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-birth-pop) + (sp-flt spt-num 32.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 0.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-omega 1.2288 1.2288 1.0) + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.771875) + (sp-flt spt-fade-b 0.7) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees -70.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.6) (meters 0.9) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3535 + :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.2)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 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-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-3) + (sp-flt spt-userdata 0.0) + (sp-int spt-next-time 80) + (sp-launcher-by-id spt-next-launcher 3536) + ) + ) + +;; failed to figure out what this is: +(defpart 3536 + :init-specs ((sp-flt spt-a 255.0) + (sp-flt spt-vel-y (meters 0.0033333334)) + (sp-flt spt-scalevel-x (meters -0.01)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -6.375) + (sp-flt spt-fade-g -1.025) + (sp-flt spt-fade-b -5.6) + (sp-flt spt-fade-a -6.375) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-birth-x + :id 810 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3537) (sp-item 3538 :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 3537 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xc9 :page #xc)) + (sp-func spt-birth-func 'birth-func-onin-bubble-birth-pop) + (sp-flt spt-num 32.0) + (sp-flt spt-scale-x (meters 0.04)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 48.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-omega 1.2288 1.2288 1.0) + (sp-flt spt-fade-r 0.646875) + (sp-flt spt-fade-g 0.6125) + (sp-flt spt-fade-a 0.8) + (sp-int spt-timer 90) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-func spt-func 'sparticle-motion-blur) + (sp-rnd-flt spt-conerot-x (degrees -70.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.6) (meters 0.9) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3538 + :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.2)) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.1) 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-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-3) + (sp-flt spt-userdata 0.0) + (sp-int spt-next-time 80) + (sp-launcher-by-id spt-next-launcher 3539) + ) + ) + +;; failed to figure out what this is: +(defpart 3539 + :init-specs ((sp-flt spt-a 255.0) + (sp-flt spt-vel-y (meters 0.0033333334)) + (sp-flt spt-scalevel-x (meters -0.01)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -5.7) + (sp-flt spt-fade-g -4.9) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -6.375) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-land-triangle + :id 811 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3540 :flags (bit6)) (sp-item 3541 :flags (is-3d bit6))) + ) + +;; failed to figure out what this is: +(defpart 3541 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x40b)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters -0.05)) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-flt spt-g 214.0) + (sp-flt spt-b 16.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-scalevel-x (meters 0.02) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 3542) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3540 + :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.1)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -5.7) + (sp-flt spt-fade-g -4.9) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-land-circle + :id 812 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3543 :flags (bit6)) (sp-item 3544 :flags (is-3d bit6))) + ) + +;; failed to figure out what this is: +(defpart 3544 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x40b)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters -0.05)) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 4.0) + (sp-flt spt-b 16.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-scalevel-x (meters 0.02) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 3542) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3543 + :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.1)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -5.7) + (sp-flt spt-fade-g -4.9) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-land-square + :id 813 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3545 :flags (bit6)) (sp-item 3546 :flags (is-3d bit6))) + ) + +;; failed to figure out what this is: +(defpart 3545 + :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.1)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters -0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -5.7) + (sp-flt spt-fade-g -4.9) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3546 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x40b)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters -0.05)) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 0.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-scalevel-x (meters 0.02) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 3542) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-onin-bubble-land-x + :id 814 + :duration (seconds 0.017) + :linger-duration (seconds 2) + :flags (use-local-clock) + :bounds (static-bspherem 0 0 0 2) + :parts ((sp-item 3547 :flags (bit6)) (sp-item 3548 :flags (is-3d bit6))) + ) + +;; failed to figure out what this is: +(defpart 3548 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x40b)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters -0.05)) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 24.0) + (sp-flt spt-g 32.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-scalevel-x (meters 0.02) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 160) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 left-multiply-quat) + (sp-int-plain-rnd spt-next-time 20 14 1) + (sp-launcher-by-id spt-next-launcher 3542) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 3542 + :init-specs ((sp-flt spt-scalevel-x (meters 0)) (sp-flt spt-scalevel-y (meters 0)) (sp-flt spt-fade-a -0.8)) + ) + +;; failed to figure out what this is: +(defpart 3547 + :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.1)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 3600.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-flt spt-a 64.0) + (sp-flt spt-scalevel-x (meters -0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -5.7) + (sp-flt spt-fade-g -4.9) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 40) + (sp-cpuinfo-flags sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +;; definition of type onin-game-bubble +(deftype onin-game-bubble (process-drawable) + ((bubble-type int32 :offset-assert 200) + (bubble-start-time time-frame :offset-assert 208) + (gravity meters :offset-assert 216) + (dead? symbol :offset-assert 220) + (angle float :offset-assert 224) + (height float :offset-assert 228) + ) + :heap-base #x70 + :method-count-assert 22 + :size-assert #xe8 + :flag-assert #x16007000e8 + (:methods + (idle () _type_ :state 20) + (fall () _type_ :state 21) + ) + ) + +;; definition for method 3 of type onin-game-bubble +(defmethod inspect onin-game-bubble ((obj onin-game-bubble)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Tbubble-type: ~D~%" (-> obj bubble-type)) + (format #t "~2Tbubble-start-time: ~D~%" (-> obj bubble-start-time)) + (format #t "~2Tgravity: (meters ~m)~%" (-> obj gravity)) + (format #t "~2Tdead?: ~A~%" (-> obj dead?)) + (format #t "~2Tangle: ~f~%" (-> obj angle)) + (format #t "~2Theight: ~f~%" (-> obj height)) + (label cfg-4) + obj + ) + +;; failed to figure out what this is: +(defstate idle (onin-game-bubble) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('die) + (go empty-state) + ) + (('attack) + (if (-> event param 0) + (go empty-state) + ) + ) + ) + ) + :code (behavior () + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 + (the-as part-tracker gp-0) + *entity-pool* + (symbol->string (-> part-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let* ((t9-2 run-function-in-process) + (a0-2 gp-0) + (a1-2 part-tracker-init) + (v1-5 (-> self bubble-type)) + (a2-4 (cond + ((zero? v1-5) + (-> *part-group-id-table* 807) + ) + ((= v1-5 1) + (-> *part-group-id-table* 808) + ) + ((= v1-5 2) + (-> *part-group-id-table* 810) + ) + (else + (-> *part-group-id-table* 809) + ) + ) + ) + (a3-1 0) + (t0-0 #f) + (t1-0 #f) + (t2-0 #f) + (t3-0 *launch-matrix*) + ) + (set! (-> t3-0 trans quad) (-> self root trans quad)) + ((the-as (function object object object object object object object object none) t9-2) + a0-2 + a1-2 + a2-4 + a3-1 + t0-0 + t1-0 + t2-0 + t3-0 + ) + ) + (-> gp-0 ppointer) + ) + ) + (let ((gp-1 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-1) (seconds 0.25)) + (suspend) + ) + ) + (go-virtual fall) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate fall (onin-game-bubble) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('attack) + (when (not (-> self dead?)) + (sound-play "onin-pop") + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 + (the-as part-tracker gp-1) + *entity-pool* + (symbol->string (-> part-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let* ((t9-4 run-function-in-process) + (a0-6 gp-1) + (a1-4 part-tracker-init) + (v1-8 (-> self bubble-type)) + (a2-6 (cond + ((zero? v1-8) + (-> *part-group-id-table* 803) + ) + ((= v1-8 1) + (-> *part-group-id-table* 804) + ) + ((= v1-8 2) + (-> *part-group-id-table* 806) + ) + (else + (-> *part-group-id-table* 805) + ) + ) + ) + (a3-3 0) + (t0-1 #f) + (t1-1 #f) + (t2-1 #f) + (t3-0 *launch-matrix*) + ) + (set! (-> t3-0 trans quad) (-> self root trans quad)) + ((the-as (function object object object object object object object object none) t9-4) + a0-6 + a1-4 + a2-6 + a3-3 + t0-1 + t1-1 + t2-1 + t3-0 + ) + ) + (-> gp-1 ppointer) + ) + ) + (go empty-state) + ) + ) + (('die) + (set! (-> self dead?) #t) + (go empty-state) + ) + ) + ) + :enter (behavior () + (set-vector! + (-> self root transv) + (-> self angle) + (- (sqrtf (* 2.0 (-> self gravity) (-> self height))) (* 0.008333334 (- (-> self gravity)))) + 819.2 + 1.0 + ) + (none) + ) + :code (behavior () + (while (and (not (and (< (-> self root transv y) 0.0) (< (-> self root trans y) 36044.8))) (not (-> self dead?))) + (suspend) + ) + (set! (-> self root trans y) 35799.04) + (set! (-> self dead?) #t) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 + (the-as part-tracker gp-0) + *entity-pool* + (symbol->string (-> part-tracker symbol)) + (the-as pointer #x70004000) + ) + ) + (let* ((t9-2 run-function-in-process) + (a0-2 gp-0) + (a1-2 part-tracker-init) + (v1-16 (-> self bubble-type)) + (a2-4 (cond + ((zero? v1-16) + (-> *part-group-id-table* 811) + ) + ((= v1-16 1) + (-> *part-group-id-table* 812) + ) + ((= v1-16 2) + (-> *part-group-id-table* 814) + ) + (else + (-> *part-group-id-table* 813) + ) + ) + ) + (a3-1 0) + (t0-0 #f) + (t1-0 #f) + (t2-0 #f) + (t3-0 *launch-matrix*) + ) + (set! (-> t3-0 trans quad) (-> self root trans quad)) + ((the-as (function object object object object object object object object none) t9-2) + a0-2 + a1-2 + a2-4 + a3-1 + t0-0 + t1-0 + t2-0 + t3-0 + ) + ) + (-> gp-0 ppointer) + ) + ) + (send-event (ppointer->process (-> self parent)) 'done) + (while (not (and (< (-> self root transv y) 0.0) (< (-> self root trans y) 31948.8))) + (suspend) + ) + (none) + ) + :post (behavior () + (+! (-> self root transv y) (* (-> self gravity) (-> self clock seconds-per-frame))) + (set! (-> self root transv x) (* 0.999 (-> self root transv x))) + (vector-v+! (-> self root trans) (-> self root trans) (-> self root transv)) + (spawn (-> self part) (-> self root trans)) + (none) + ) + ) + +;; definition for function onin-game-bubble-init +;; INFO: Used lq/sq +;; WARN: Return type mismatch object vs none. +(defbehavior onin-game-bubble-init onin-game-bubble ((arg0 vector) (arg1 int) (arg2 meters) (arg3 float) (arg4 float)) + "TODO - bubble type enum" + (sound-play "onin-launch") + (set! (-> self bubble-start-time) (-> self clock frame-counter)) + (set! (-> self bubble-type) arg1) + (set! (-> self gravity) arg2) + (set! (-> self angle) arg3) + (set! (-> self height) arg4) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg0 quad)) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self dead?) #f) + (set! (-> self part) (create-launch-control + (cond + ((zero? arg1) + (-> *part-group-id-table* 799) + ) + ((= arg1 1) + (-> *part-group-id-table* 800) + ) + ((= arg1 2) + (-> *part-group-id-table* 802) + ) + (else + (-> *part-group-id-table* 801) + ) + ) + self + ) + ) + (set! (-> self event-hook) (-> (method-of-type onin-game-bubble idle) event)) + (go-virtual idle) + (none) + ) + +;; definition of type onin-game +(deftype onin-game (process-drawable) + ((wave int32 :offset-assert 200) + (event int32 :offset-assert 204) + (wave-time time-frame :offset-assert 208) + (wave-delay-time time-frame :offset-assert 216) + (wave-length uint64 :offset-assert 224) + (event-time time-frame :offset-assert 232) + (event-length uint64 :offset-assert 240) + (hud-score handle :offset-assert 248) + (hud-goal handle :offset-assert 256) + (hud-miss handle :offset-assert 264) + (score float :offset-assert 272) + (score-time time-frame :offset-assert 280) + (game (inline-array onin-game-event) :offset-assert 288) + (miss-max int32 :offset-assert 292) + (miss-count int32 :offset-assert 296) + (point-win float :offset-assert 300) + (game-start-time time-frame :offset-assert 304) + (last-type int32 :offset-assert 312) + (current-bonus float :offset-assert 316) + (last-angle float :offset-assert 320) + (wave-start-miss int32 :offset-assert 324) + ) + :heap-base #xd0 + :method-count-assert 28 + :size-assert #x148 + :flag-assert #x1c00d00148 + (:methods + (hide () _type_ :state 20) + (wait-for-start () _type_ :state 21) + (active (symbol) _type_ :state 22) + (lose () _type_ :state 23) + (win () _type_ :state 24) + (onin-game-method-25 (_type_) none 25) + (onin-game-method-26 (_type_) none 26) + (onin-game-method-27 (_type_ int) none 27) + ) + ) + +;; definition for method 3 of type onin-game +(defmethod inspect onin-game ((obj onin-game)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Twave: ~D~%" (-> obj wave)) + (format #t "~2Tevent: ~D~%" (-> obj event)) + (format #t "~2Twave-time: ~D~%" (-> obj wave-time)) + (format #t "~2Twave-delay-time: ~D~%" (-> obj wave-delay-time)) + (format #t "~2Twave-length: ~D~%" (-> obj wave-length)) + (format #t "~2Tevent-time: ~D~%" (-> obj event-time)) + (format #t "~2Tevent-length: ~D~%" (-> obj event-length)) + (format #t "~2Thud-score: ~D~%" (-> obj hud-score)) + (format #t "~2Thud-goal: ~D~%" (-> obj hud-goal)) + (format #t "~2Thud-miss: ~D~%" (-> obj hud-miss)) + (format #t "~2Tscore: ~f~%" (-> obj score)) + (format #t "~2Tscore-time: ~D~%" (-> obj score-time)) + (format #t "~2Tgame: #x~X~%" (-> obj game)) + (format #t "~2Tmiss-max: ~D~%" (-> obj miss-max)) + (format #t "~2Tmiss-count: ~D~%" (-> obj miss-count)) + (format #t "~2Tpoint-win: ~f~%" (-> obj point-win)) + (format #t "~2Tgame-start-time: ~D~%" (-> obj game-start-time)) + (format #t "~2Tlast-type: ~D~%" (-> obj last-type)) + (format #t "~2Tcurrent-bonus: ~f~%" (-> obj current-bonus)) + (format #t "~2Tlast-angle: ~f~%" (-> obj last-angle)) + (format #t "~2Twave-start-miss: ~D~%" (-> obj wave-start-miss)) + (label cfg-4) + obj + ) + +;; definition for method 25 of type onin-game +;; INFO: Used lq/sq +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 112 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 112 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 112 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 96 mismatch: defined as size 4, got size 16 +;; ERROR: Stack slot load at 112 mismatch: defined as size 4, got size 16 +;; WARN: Return type mismatch int vs none. +(defmethod onin-game-method-25 onin-game ((obj onin-game)) + (local-vars + (v0-18 int) + (sv-32 process) + (sv-48 (function vector int meters float float none :behavior onin-game-bubble)) + (sv-64 vector) + (sv-80 int) + (sv-96 meters) + (sv-112 float) + ) + (with-pp + (when (>= (- (-> pp clock frame-counter) (-> obj game-start-time)) (seconds 2)) + (let ((s5-0 (-> obj game (-> obj wave)))) + (when (>= (- (-> pp clock frame-counter) (the-as int (-> obj wave-length))) (-> obj wave-time)) + (let ((s4-0 (-> obj child))) + (while s4-0 + (if (type? (ppointer->process s4-0) onin-game-bubble) + (goto cfg-58) + ) + (set! s4-0 (-> s4-0 0 brother)) + ) + ) + (if (zero? (-> obj wave-delay-time)) + (set! (-> obj wave-delay-time) (-> pp clock frame-counter)) + ) + (if (< (- (-> pp clock frame-counter) (-> obj wave-delay-time)) (the-as time-frame (-> s5-0 wave-delay))) + (goto cfg-58) + ) + (set! (-> obj event-length) (the-as uint 0)) + (+! (-> obj wave) 1) + (set! s5-0 (-> obj game (-> obj wave))) + (when (zero? (-> s5-0 min-count)) + (set! (-> obj wave) (the-as int (-> s5-0 max-count))) + (set! s5-0 (-> obj game (-> obj wave))) + ) + (set! (-> obj wave-time) (-> pp clock frame-counter)) + (set! (-> obj wave-length) + (the-as uint (rand-vu-int-range (the-as int (-> s5-0 min-wave)) (the-as int (-> s5-0 max-wave)))) + ) + (set! (-> obj wave-delay-time) 0) + (when (< 1 (-> obj wave)) + (cond + ((< 4 (- (-> obj miss-count) (-> obj wave-start-miss))) + (let ((v0-2 (rand-vu-int-count 5))) + (cond + ((zero? v0-2) + (talker-spawn-func (-> *talker-speech* 148) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-2 1) + (talker-spawn-func (-> *talker-speech* 153) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-2 2) + (talker-spawn-func (-> *talker-speech* 154) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-2 3) + (talker-spawn-func (-> *talker-speech* 157) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-2 4) + (talker-spawn-func (-> *talker-speech* 158) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + ) + ((>= 1 (- (-> obj miss-count) (-> obj wave-start-miss))) + (let ((v0-9 (rand-vu-int-count 7))) + (cond + ((zero? v0-9) + (talker-spawn-func (-> *talker-speech* 141) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 1) + (talker-spawn-func (-> *talker-speech* 142) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 2) + (talker-spawn-func (-> *talker-speech* 143) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 3) + (talker-spawn-func (-> *talker-speech* 150) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 4) + (talker-spawn-func (-> *talker-speech* 156) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 5) + (talker-spawn-func (-> *talker-speech* 159) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v0-9 6) + (talker-spawn-func (-> *talker-speech* 160) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + ) + ) + ) + (set! (-> obj wave-start-miss) (-> obj miss-count)) + ) + (set! v0-18 + (when (>= (- (-> pp clock frame-counter) (-> obj event-time)) (the-as time-frame (-> obj event-length))) + (set! (-> obj event-time) (-> pp clock frame-counter)) + (let ((s4-14 (vector+! (new 'stack-no-clear 'vector) (-> obj root trans) (new 'static 'vector :w 1.0))) + (s3-12 (rand-vu-int-range (the-as int (-> s5-0 min-count)) (the-as int (-> s5-0 max-count)))) + ) + (dotimes (s2-12 s3-12) + (let ((f0-0 (-> obj last-angle))) + (while (< (fabs (- (-> obj last-angle) f0-0)) 819.2) + (set! f0-0 (rand-vu-float-range -1720.32 1720.32)) + ) + (set! (-> obj last-angle) f0-0) + ) + (let ((s1-0 (get-process *default-dead-pool* onin-game-bubble #x4000))) + (when s1-0 + (let ((t9-31 (method-of-type onin-game-bubble activate))) + (t9-31 + (the-as onin-game-bubble s1-0) + obj + (symbol->string (-> onin-game-bubble symbol)) + (the-as pointer #x70004000) + ) + ) + (let ((s0-0 run-function-in-process)) + (set! sv-32 s1-0) + (set! sv-48 onin-game-bubble-init) + (set! sv-64 s4-14) + (set! sv-80 (rand-vu-int-range 0 3)) + (set! sv-96 (-> s5-0 gravity)) + (set! sv-112 (-> obj last-angle)) + (let ((t2-0 (rand-vu-float-range 4096.0 7372.8))) + ((the-as (function object object object object object object object none) s0-0) + sv-32 + sv-48 + sv-64 + sv-80 + sv-96 + sv-112 + t2-0 + ) + ) + ) + (-> s1-0 ppointer) + ) + ) + ) + ) + (set! v0-18 (rand-vu-int-range (the-as int (-> s5-0 min-event)) (the-as int (-> s5-0 max-event)))) + (set! (-> obj event-length) (the-as uint v0-18)) + v0-18 + ) + ) + ) + ) + (label cfg-58) + (onin-game-method-26 obj) + 0 + (none) + ) + ) + +;; definition for method 26 of type onin-game +;; WARN: Return type mismatch int vs none. +(defmethod onin-game-method-26 onin-game ((obj onin-game)) + (with-pp + (cond + ((>= (-> *game-info* score) (-> obj score)) + (set! (-> *game-info* score) (-> obj score)) + ) + ((and (< (-> *game-info* score) (-> obj score)) + (>= (- (-> pp clock frame-counter) (-> obj score-time)) (seconds 0.1)) + ) + (sound-play "onin-score") + (seek! (-> *game-info* score) (-> obj score) 1.0) + (set! (-> obj score-time) (-> pp clock frame-counter)) + ) + ) + (set! (-> *game-info* miss) (the float (-> obj miss-count))) + 0 + (none) + ) + ) + +;; definition for method 27 of type onin-game +;; WARN: Return type mismatch number vs none. +(defmethod onin-game-method-27 onin-game ((obj onin-game) (arg0 int)) + "TODO - bubble type" + (let ((s4-0 (the-as onin-game-bubble #f))) + (let ((s3-0 0) + (s2-0 (-> obj child)) + ) + (while s2-0 + (let* ((s1-0 (ppointer->process s2-0)) + (v1-2 (if (type? s1-0 onin-game-bubble) + (the-as onin-game-bubble s1-0) + ) + ) + ) + (when (and v1-2 (= (-> v1-2 bubble-type) arg0) (or (not s4-0) (< (-> v1-2 bubble-start-time) s3-0))) + (set! s4-0 v1-2) + (set! s3-0 (the-as int (-> v1-2 bubble-start-time))) + ) + ) + (set! s2-0 (-> s2-0 0 brother)) + ) + ) + (cond + (s4-0 + (when (send-event s4-0 'attack #f) + (cond + ((= arg0 (-> obj last-type)) + (+! (-> obj current-bonus) (-> obj current-bonus)) + (if (>= (-> obj current-bonus) 16.0) + (set! (-> obj current-bonus) 16.0) + ) + ) + (else + (set! (-> obj current-bonus) 1.0) + ) + ) + (set! (-> obj last-type) arg0) + (+! (-> obj score) (-> obj current-bonus)) + ) + ) + (else + (sound-play "onin-wrong") + (set! (-> obj last-type) -1) + (+! (-> obj miss-count) 1) + (let ((v1-20 (rand-vu-int-count 4))) + (cond + ((zero? v1-20) + (talker-spawn-func (-> *talker-speech* 144) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-20 1) + (talker-spawn-func (-> *talker-speech* 146) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-20 2) + (talker-spawn-func (-> *talker-speech* 147) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-20 3) + (talker-spawn-func (-> *talker-speech* 149) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate hide (onin-game) + :virtual #t + :code (behavior () + (ja-channel-set! 0) + (ja-post) + (sleep-code) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate wait-for-start (onin-game) + :virtual #t + :code (behavior () + (while (or (not *target*) (not (process-grab? *target* #f))) + (suspend) + ) + (go-virtual active #t) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate active (onin-game) + :virtual #t + :event (behavior ((proc process) (arg1 int) (event-type symbol) (event event-message-block)) + (case event-type + (('done) + (sound-play "onin-splat") + (set! (-> self last-type) -1) + (+! (-> self miss-count) 1) + (let ((v1-5 (rand-vu-int-count 2))) + (cond + ((zero? v1-5) + (talker-spawn-func (-> *talker-speech* 151) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-5 1) + (talker-spawn-func (-> *talker-speech* 152) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + ) + (('retry) + enter-state + (go-virtual lose) + ) + ) + ) + :enter (behavior ((arg0 symbol)) + (when arg0 + (add-connection *task-manager-engine* self nothing self (-> *game-info* sub-task-list 151) #f) + (let ((a1-1 (new 'stack-no-clear 'array 'pointer 3))) + (set! (-> a1-1 2) (the-as pointer 'onin2)) + (set! (-> a1-1 1) (the-as pointer 'onin1)) + (set! (-> a1-1 0) (the-as pointer 'ctywide1)) + (want-sound-banks *load-state* (the-as (pointer symbol) a1-1)) + ) + (talker-speech-class-method-11 (-> *talker-speech* 141)) + (talker-speech-class-method-11 (-> *talker-speech* 142)) + (talker-speech-class-method-11 (-> *talker-speech* 143)) + (talker-speech-class-method-11 (-> *talker-speech* 144)) + (talker-speech-class-method-11 (-> *talker-speech* 146)) + (talker-speech-class-method-11 (-> *talker-speech* 147)) + (talker-speech-class-method-11 (-> *talker-speech* 148)) + (talker-speech-class-method-11 (-> *talker-speech* 149)) + (talker-speech-class-method-11 (-> *talker-speech* 150)) + (talker-speech-class-method-11 (-> *talker-speech* 151)) + (talker-speech-class-method-11 (-> *talker-speech* 152)) + (talker-speech-class-method-11 (-> *talker-speech* 153)) + (talker-speech-class-method-11 (-> *talker-speech* 154)) + (talker-speech-class-method-11 (-> *talker-speech* 155)) + (talker-speech-class-method-11 (-> *talker-speech* 156)) + (talker-speech-class-method-11 (-> *talker-speech* 157)) + (talker-speech-class-method-11 (-> *talker-speech* 158)) + (talker-speech-class-method-11 (-> *talker-speech* 159)) + (talker-speech-class-method-11 (-> *talker-speech* 160)) + (add-setting! 'music 'danger3 0 0) + (set-setting! 'entity-name (res-lump-struct (-> self entity) 'camera-name structure) 0 0) + (set-setting! 'airlock #f 0 0) + (set-setting! 'minimap 'clear 0 128) + (set! (-> self hud-score) (ppointer->handle (process-spawn hud-big-score :init hud-init-by-other :to self))) + (set! (-> self hud-goal) (ppointer->handle (process-spawn hud-goal :init hud-init-by-other :to self))) + (set! (-> self hud-miss) (ppointer->handle (process-spawn hud-miss :init hud-init-by-other :to self))) + (set! (-> self game-start-time) (-> self clock frame-counter)) + (send-event *target* 'draw #f) + (set-setting! 'gun #f 0 0) + (set-setting! 'calm #t 0 0) + (set-setting! 'gem #f 0 0) + (let ((a0-50 (-> *part-id-table* 3429))) + (when a0-50 + (let ((v1-110 (get-field-spec-by-id a0-50 (sp-field-id spt-num)))) + (when v1-110 + (set! (-> v1-110 initial-valuef) 0.0) + (set! (-> v1-110 random-rangef) 0.0) + ) + ) + ) + ) + (let ((a0-51 (-> *part-id-table* 3437))) + (when a0-51 + (let ((v1-113 (get-field-spec-by-id a0-51 (sp-field-id spt-num)))) + (when v1-113 + (set! (-> v1-113 initial-valuef) 0.0) + (set! (-> v1-113 random-rangef) 0.0) + ) + ) + ) + ) + ) + (none) + ) + :exit (behavior () + (when (not (and (-> self next-state) (let ((v1-3 (-> self next-state name))) + (or (= v1-3 'active) (= v1-3 'attack) (= v1-3 'win) (= v1-3 'lose)) + ) + ) + ) + (format #t "score of ~f~%" (-> self score)) + (let ((gp-0 (-> self child))) + (while gp-0 + (if (type? (ppointer->process gp-0) onin-game-bubble) + (send-event (ppointer->process gp-0) 'die) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (remove-from-process *task-manager-engine* self) + (remove-setting! 'music) + (send-event (handle->process (-> self hud-score)) 'hide-and-die) + (send-event (handle->process (-> self hud-miss)) 'hide-and-die) + (send-event (handle->process (-> self hud-goal)) 'hide-and-die) + (remove-setting! 'entity-name) + (if (and *target* (logtest? (-> *target* focus-status) (focus-status grabbed))) + (process-release? *target*) + ) + (remove-setting! 'airlock) + (remove-setting! 'borrow) + (remove-setting! 'minimap) + (remove-setting! 'gun) + (remove-setting! 'calm) + (remove-setting! 'gem) + (persist-with-delay *setting-control* 'gun (seconds 0.5) 'gun #f 0.0 0) + (send-event *target* 'draw #t) + (let ((a0-39 (-> *part-id-table* 3429))) + (when a0-39 + (let ((v1-64 (get-field-spec-by-id a0-39 (sp-field-id spt-num)))) + (when v1-64 + (set! (-> v1-64 initial-valuef) 0.0) + (set! (-> v1-64 random-rangef) 1.0) + ) + ) + ) + ) + (let ((a0-41 (-> *part-id-table* 3437))) + (when a0-41 + (let ((v1-67 (get-field-spec-by-id a0-41 (sp-field-id spt-num)))) + (when v1-67 + (set! (-> v1-67 initial-valuef) 1.0) + (set! (-> v1-67 random-rangef) 0.0) + ) + ) + ) + ) + (game-info-method-28 *game-info* (game-score onin-game) (-> self score)) + (logclear! + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons up right down left l1 r1 triangle circle x square) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons up right down left l1 r1 triangle circle x square) + ) + (let ((a1-29 (new 'stack-no-clear 'array 'pointer 3))) + (set! (-> a1-29 2) (the-as pointer 'onin1)) + (set! (-> a1-29 1) (the-as pointer 'ctywide1)) + (set! (-> a1-29 0) (the-as pointer 'ctywide1)) + (want-sound-banks *load-state* (the-as (pointer symbol) a1-29)) + ) + ) + (none) + ) + :trans (behavior () + (cond + ((or (and *cheat-mode* (cpad-pressed? 0 r1)) + (and (>= (-> self score) (-> self point-win)) + (or (not (task-node-closed? (game-task-node city-play-onin-game-resolution))) + (>= (-> self miss-count) (-> self miss-max)) + ) + ) + ) + (go-virtual win) + ) + ((or (and *cheat-mode* (cpad-pressed? 0 l1)) (>= (-> self miss-count) (-> self miss-max))) + enter-state + #t + (go-virtual lose) + ) + ((and *cheat-mode* (cpad-pressed? 0 up)) + (sound-play-by-spec (static-sound-spec "beep" :fo-curve 1) (new-sound-id) (the-as vector #t)) + (set! (-> self wave-time) 0) + 0 + ) + ((and *cheat-mode* (cpad-pressed? 0 down)) + (sound-play-by-spec (static-sound-spec "beep" :fo-curve 1) (new-sound-id) (the-as vector #t)) + (seekl! (-> self wave) 0 2) + (set! (-> self wave-time) 0) + 0 + ) + ((cpad-pressed? 0 triangle) + (onin-game-method-27 self 0) + ) + ((cpad-pressed? 0 circle) + (onin-game-method-27 self 1) + ) + ((cpad-pressed? 0 x) + (onin-game-method-27 self 2) + ) + ((cpad-pressed? 0 square) + (onin-game-method-27 self 3) + ) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-abs 0) + (pad-buttons up right down left l1 r1 triangle circle x square) + ) + (logclear! + (-> *cpad-list* cpads 0 button0-rel 0) + (pad-buttons up right down left l1 r1 triangle circle x square) + ) + (none) + ) + :code (behavior ((arg0 symbol)) + (ja-channel-set! 0) + (let ((gp-0 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-0) (seconds 1)) + (suspend) + ) + ) + (talker-spawn-func (-> *talker-speech* 145) *entity-pool* (target-pos 0) (the-as region #f)) + (sleep-code) + (none) + ) + :post (behavior () + (onin-game-method-25 self) + (ja-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate lose (onin-game) + :virtual #t + :exit (-> (method-of-type onin-game active) exit) + :code (behavior () + (let ((gp-0 (-> self child))) + (while gp-0 + (if (type? (ppointer->process gp-0) onin-game-bubble) + (send-event (ppointer->process gp-0) 'attack #t) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (let* ((v1-14 (-> *game-info* sub-task-list 151)) + (gp-1 (if (-> v1-14 info) + (-> v1-14 info manager) + (the-as handle #f) + ) + ) + ) + (if (not (handle->process gp-1)) + (auto-save-user) + ) + (let* ((v1-21 (rand-vu-int-count 7)) + (s5-1 (cond + ((zero? v1-21) + (talker-spawn-func (-> *talker-speech* 163) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-21 1) + (talker-spawn-func (-> *talker-speech* 164) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-21 2) + (talker-spawn-func (-> *talker-speech* 165) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-21 3) + (talker-spawn-func (-> *talker-speech* 166) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-21 4) + (talker-spawn-func (-> *talker-speech* 167) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ((= v1-21 5) + (talker-spawn-func (-> *talker-speech* 168) *entity-pool* (target-pos 0) (the-as region #f)) + ) + (else + (talker-spawn-func (-> *talker-speech* 169) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + ) + ) + (while (nonzero? (get-status *gui-control* (the-as sound-id s5-1))) + (suspend) + ) + ) + (send-event (handle->process gp-1) 'fail) + ) + (if (task-node-closed? (game-task-node city-play-onin-game-resolution)) + (set-blackout-frames (seconds 0.1)) + (sleep-code) + ) + (none) + ) + :post (behavior () + (onin-game-method-26 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate win (onin-game) + :virtual #t + :exit (-> (method-of-type onin-game active) exit) + :code (behavior () + (let ((gp-0 (-> self child))) + (while gp-0 + (if (type? (ppointer->process gp-0) onin-game-bubble) + (send-event (ppointer->process gp-0) 'attack #t) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (while (nonzero? (lookup-gui-connection-id *gui-control* (the-as string #f) (gui-channel daxter) (gui-action none))) + (suspend) + ) + (when (and (task-node-closed? (game-task-node city-play-onin-game-resolution)) + (not (task-node-closed? (game-task-node city-play-onin-game-skill))) + ) + (let ((gp-1 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) gp-1) (seconds 1)) + (suspend) + ) + ) + (eval! + (new 'stack 'script-context (the-as basic (process->ppointer self)) self (the-as vector #f)) + '(birth-pickup ("pecker-npc-1" "head") skill FACT_SUPER_SKILL_INC flags (suck-in)) + ) + (task-node-close! (game-task-node city-play-onin-game-skill)) + ) + (let* ((s5-1 (if (zero? (rand-vu-int-count 2)) + (talker-spawn-func (-> *talker-speech* 161) *entity-pool* (target-pos 0) (the-as region #f)) + (talker-spawn-func (-> *talker-speech* 162) *entity-pool* (target-pos 0) (the-as region #f)) + ) + ) + (v1-31 (-> *game-info* sub-task-list 151)) + (gp-4 (if (-> v1-31 info) + (-> v1-31 info manager) + (the-as handle #f) + ) + ) + ) + (if (not (handle->process gp-4)) + (auto-save-user) + ) + (while (nonzero? (get-status *gui-control* (the-as sound-id s5-1))) + (suspend) + ) + (let ((s5-3 (-> self clock frame-counter))) + (until (>= (- (-> self clock frame-counter) s5-3) (seconds 2)) + (suspend) + ) + ) + (set-blackout-frames (seconds 0.1)) + (send-event (handle->process gp-4) 'complete) + ) + (none) + ) + :post (-> (method-of-type onin-game lose) post) + ) + +;; definition for function onin-game-init +;; WARN: Return type mismatch object vs none. +(defbehavior onin-game-init onin-game ((arg0 entity)) + (set-blackout-frames (seconds 0.1)) + (stack-size-set! (-> self main-thread) 512) + (set! (-> self entity) (the-as entity-actor arg0)) + (set! (-> self level) (level-get *level* 'onintent)) + (set! (-> self root) (new 'process 'trsqv)) + (set-vector! (-> self root trans) 2918698.5 36044.8 3025589.5 1.0) + (logclear! (-> self mask) (process-mask actor-pause)) + (initialize-skeleton + self + (the-as skeleton-group (art-group-get-by-name *level* "skel-sidekick-highres" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (logior! (-> self skel status) (joint-control-status blend-shape eye-anim)) + (set-setting! 'minimap 'clear 0 128) + (set! (-> self hud-score) (the-as handle #f)) + (set! (-> self hud-goal) (the-as handle #f)) + (set! (-> self hud-miss) (the-as handle #f)) + (set! (-> self last-type) -1) + (if (not (task-node-closed? (game-task-node city-play-onin-game-resolution))) + (set! (-> self game) (the-as (inline-array onin-game-event) (-> *onin-game-data* 0))) + (set! (-> self game) (the-as (inline-array onin-game-event) (-> *onin-game-data* 1))) + ) + (set! (-> self miss-max) (the int (* 0.0033333334 (the float (-> self game 0 min-event))))) + (set! (-> self point-win) (the float (-> self game 0 max-count))) + (set! (-> *game-info* score) 0.0) + (set! (-> *game-info* goal) (-> self point-win)) + (set! (-> *game-info* miss) 0.0) + (set! (-> *game-info* miss-max) (the float (-> self miss-max))) + (go-virtual wait-for-start) + (none) + ) diff --git a/test/decompiler/reference/jak2/levels/city/port/ctyport-part_REF.gc b/test/decompiler/reference/jak2/levels/city/port/ctyport-part_REF.gc new file mode 100644 index 0000000000..7b5a9fd18d --- /dev/null +++ b/test/decompiler/reference/jak2/levels/city/port/ctyport-part_REF.gc @@ -0,0 +1,4060 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type ctyport-part +(deftype ctyport-part (part-spawner) + () + :heap-base #x30 + :method-count-assert 16 + :size-assert #xb0 + :flag-assert #x10003000b0 + ) + +;; definition for method 3 of type ctyport-part +(defmethod inspect ctyport-part ((obj ctyport-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-ctyport-roundvent + :id 929 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 12) + :parts ((sp-item 4148 :fade-after (meters 250) :falloff-to (meters 180) :flags (bit7))) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-roundvent-small + :id 930 + :flags (unk-4 unk-7) + :bounds (static-bspherem 0 0 0 12) + :scale (0.0 0.0 0.0) + :parts ((sp-item 4148 :fade-after (meters 250) :falloff-to (meters 150) :flags (bit7))) + ) + +;; failed to figure out what this is: +(defpart 4148 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -2) (meters 4) 1.0) + (sp-rnd-int-flt spt-y (meters -1.5) 3 6144.0) + (sp-rnd-flt spt-z (meters -2) (meters 1) 1.0) + (sp-rnd-flt spt-scale-x (meters 4) (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 64.0 64.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.083333336) (meters -0.016666668) 1.0) + (sp-rnd-flt spt-vel-z (meters 0.06666667) (meters 0.06666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.016666668) (meters 0.023333333) 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-a 0.64) + (sp-rnd-flt spt-accel-y 3.4133334 3.4133334 1.0) + (sp-rnd-flt spt-friction 0.95 0.025 1.0) + (sp-int spt-timer 250) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12 sp-cpuinfo-flag-21) + (sp-int-plain-rnd spt-next-time 25 24 1) + (sp-launcher-by-id spt-next-launcher 4149) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4149 + :init-specs ((sp-rnd-flt spt-fade-a -0.16 -0.16 1.0)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-low-vent + :id 931 + :flags (unk-4) + :bounds (static-bspherem 0 0 0 12) + :parts ((sp-item 4150 :fade-after (meters 200) :falloff-to (meters 140) :flags (bit7)) + (sp-item 4151 :fade-after (meters 200) :falloff-to (meters 140) :flags (bit7)) + (sp-item 4152 :fade-after (meters 200) :falloff-to (meters 140) :flags (bit7)) + ) + ) + +;; failed to figure out what this is: +(defpart 4150 + :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-int-flt spt-x (meters -0.1) 9829 1.0) + (sp-rnd-flt spt-y (meters 0.6) (meters 0.7) 1.0) + (sp-flt spt-z (meters 1.6)) + (sp-rnd-flt spt-scale-x (meters 0.75) (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 0.0) + (sp-rnd-flt spt-vel-z (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.005) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.32) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-int-plain-rnd spt-next-time 25 24 1) + (sp-launcher-by-id spt-next-launcher 4153) + (sp-rnd-flt spt-launchrot-x (degrees -5.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -5.0) (degrees 10.0) 1.0) + (sp-flt spt-rotate-y (degrees 45.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4151 + :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-int-flt spt-x (meters -1.2) 9829 1.0) + (sp-rnd-flt spt-y (meters 0.6) (meters 0.7) 1.0) + (sp-flt spt-z (meters 1.1)) + (sp-rnd-flt spt-scale-x (meters 0.75) (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 0.0) + (sp-rnd-flt spt-vel-z (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.005) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.32) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-int-plain-rnd spt-next-time 25 24 1) + (sp-launcher-by-id spt-next-launcher 4153) + (sp-rnd-flt spt-launchrot-x (degrees -5.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -5.0) (degrees 10.0) 1.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4152 + :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-int-flt spt-x (meters -2.3) 9829 1.0) + (sp-rnd-flt spt-y (meters 0.6) (meters 0.7) 1.0) + (sp-flt spt-z (meters 1.6)) + (sp-rnd-flt spt-scale-x (meters 0.75) (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 0.0) + (sp-rnd-flt spt-vel-z (meters 0.006666667) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.005) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.32) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 600) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-int-plain-rnd spt-next-time 25 24 1) + (sp-launcher-by-id spt-next-launcher 4153) + (sp-rnd-flt spt-launchrot-x (degrees -5.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -5.0) (degrees 10.0) 1.0) + (sp-flt spt-rotate-y (degrees -45.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4153 + :init-specs ((sp-rnd-flt spt-fade-a -0.032 -0.032 1.0)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-waterspout + :id 932 + :flags (unk-4) + :bounds (static-bspherem 0 -8 0 24) + :parts ((sp-item 4154 :fade-after (meters 140) :falloff-to (meters 120) :flags (bit7)) + (sp-item 4155 :fade-after (meters 100) :falloff-to (meters 80) :flags (bit7)) + ) + ) + +;; failed to figure out what this is: +(defpart 4156 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x52d)) + (sp-rnd-flt spt-num 3.0 1.0 1.0) + (sp-rnd-flt spt-x (meters -0.05) (meters 0.1) 1.0) + (sp-rnd-flt spt-y (meters -0.05) (meters 0.1) 1.0) + (sp-flt spt-z (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.1) 1.0) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 8.192) + (sp-rnd-flt spt-vel-z (meters 0.1) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-fade-a -0.14222223 -0.42666668 1.0) + (sp-rnd-flt spt-accel-y -13.653334 1.3653333 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 75) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12 use-global-acc) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int-plain-rnd spt-next-time 0 224 1) + (sp-launcher-by-id spt-next-launcher 4157) + (sp-rnd-flt spt-launchrot-x (degrees -7.0000005) (degrees 14.000001) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -7.0000005) (degrees 14.000001) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4157 + :init-specs ((sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 4158) + ) + ) + +;; failed to figure out what this is: +(defpart 4158 + :init-specs ((sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.0) + (sp-int-plain-rnd spt-next-time 0 224 1) + (sp-launcher-by-id spt-next-launcher 4157) + ) + ) + +;; definition for function check-drop-level-ctyport-drop-userdata +;; INFO: Used lq/sq +(defun check-drop-level-ctyport-drop-userdata ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) + (when (< (-> arg2 vector 0 y) (-> arg1 user-float)) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (sp-kill-particle arg0 arg1) + (set-vector! s3-0 (-> arg2 vector 0 x) (-> arg1 user-float) (-> arg2 vector 0 z) 1.0) + (let ((t9-1 sp-launch-particles-var) + (a0-3 *sp-particle-system-2d*) + (a1-2 (-> *part-id-table* 4159)) + (a2-1 *launch-matrix*) + ) + (set! (-> a2-1 trans quad) (-> s3-0 quad)) + (t9-1 a0-3 a1-2 a2-1 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + (let ((t9-2 sp-launch-particles-var) + (a0-4 *sp-particle-system-2d*) + (a1-3 (-> *part-id-table* 4160)) + (a2-2 *launch-matrix*) + ) + (set! (-> a2-2 trans quad) (-> s3-0 quad)) + (t9-2 a0-4 a1-3 a2-2 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + (let ((t9-3 sp-launch-particles-var) + (a0-5 *sp-particle-system-3d*) + (a1-4 (-> *part-id-table* 4161)) + (a2-3 *launch-matrix*) + ) + (set! (-> a2-3 trans quad) (-> s3-0 quad)) + (t9-3 a0-5 a1-4 a2-3 (the-as sparticle-launch-state #f) (the-as sparticle-launch-control #f) 1.0) + ) + ) + ) + (sparticle-motion-blur arg0 arg1 (the-as vector arg2)) + (none) + ) + +;; failed to figure out what this is: +(defpart 4154 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x52d)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -0.05) (meters 0.1) 1.0) + (sp-rnd-flt spt-y (meters -0.05) (meters 0.1) 1.0) + (sp-flt spt-z (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.1) 1.0) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 8.192) + (sp-rnd-flt spt-vel-z (meters 0.1) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-fade-a -0.14222223 -0.42666668 1.0) + (sp-rnd-flt spt-accel-y -13.653334 1.3653333 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12 use-global-acc) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-drop-level-ctyport-drop-userdata) + (sp-int-plain-rnd spt-next-time 0 224 1) + (sp-launcher-by-id spt-next-launcher 4157) + (sp-rnd-flt spt-launchrot-x (degrees -7.0000005) (degrees 14.000001) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -7.0000005) (degrees 14.000001) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4155 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x52d)) + (sp-rnd-flt spt-num 0.0 0.5 1.0) + (sp-flt spt-z (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.1) 1.0) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 8.192) + (sp-rnd-flt spt-vel-z (meters 0.1) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-fade-a -0.14222223 -0.42666668 1.0) + (sp-rnd-flt spt-accel-y -13.653334 1.3653333 1.0) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 450) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12 use-global-acc) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-drop-level-ctyport-drop-userdata) + (sp-int-plain-rnd spt-next-time 0 224 1) + (sp-launcher-by-id spt-next-launcher 4157) + (sp-rnd-flt spt-launchrot-x (degrees -15.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-launchrot-y (degrees -15.0) (degrees 30.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4159 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x52d)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.1) 1.0) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.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.026666667) (meters 0.026666667) 1.0) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -8.192 -0.68266666 1.0) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-func spt-func 'sparticle-motion-blur) + (sp-int-plain-rnd spt-next-time 0 224 1) + (sp-launcher-by-id spt-next-launcher 4157) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 60.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 4160 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -2) (meters 4) 1.0) + (sp-rnd-flt spt-y (meters 0.25) (meters 0.75) 1.0) + (sp-rnd-flt spt-z (meters -2) (meters 4) 1.0) + (sp-rnd-flt spt-scale-x (meters 8) (meters 0.3) 1.0) + (sp-rnd-flt spt-scale-y (meters 4) (meters 0.3) 1.0) + (sp-rnd-flt spt-r 64.0 64.0 1.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-flt spt-b 16.0) + (sp-flt spt-a 0.0) + (sp-flt spt-vel-y (meters 0)) + (sp-rnd-flt spt-scalevel-x (meters 0.006666667) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.1) (degrees 0.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.21333334) + (sp-rnd-flt spt-accel-y 0.0 0.27306667 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-int-plain-rnd spt-next-time 60 14 1) + (sp-launcher-by-id spt-next-launcher 4162) + ) + ) + +;; failed to figure out what this is: +(defpart 4162 + :init-specs ((sp-flt spt-fade-a -0.21333334)) + ) + +;; failed to figure out what this is: +(defpart 4161 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2c :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -0.2)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-rnd-flt spt-b 16.0 16.0 1.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0) (meters -0.006666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-scalevel-y (meters 0.026666667) (meters 0.013333334) 1.0) + (sp-rnd-flt spt-fade-a -0.96 -0.96 1.0) + (sp-int spt-timer 100) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-chimney + :id 933 + :flags (unk-8) + :bounds (static-bspherem 0 0 -10 64) + :parts ((sp-item 4163 :fade-after (meters 950) :falloff-to (meters 950)) + (sp-item 4164 :fade-after (meters 900) :flags (bit6)) + ) + ) + +;; failed to figure out what this is: +(defpart 4164 + :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 1)) + (sp-rnd-flt spt-scale-x (meters 24) (meters 1.1) 1.0) + (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 240.0) + (sp-flt spt-b 100.0) + (sp-rnd-flt spt-a 12.0 4.0 1.0) + (sp-flt spt-omega 3688857.5) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 16384.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4163 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-rnd-flt spt-num 0.0 0.5 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (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 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.03) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.053333335) (meters 0.053333335) 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.0) + (sp-flt spt-fade-g -0.36) + (sp-flt spt-fade-b -4.24) + (sp-rnd-flt spt-fade-a -0.053333335 -0.053333335 1.0) + (sp-rnd-flt spt-accel-x -4.096 -1.3653333 1.0) + (sp-rnd-flt spt-accel-y 0.4096 0.4096 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 2400) + (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-plain-rnd spt-next-time 25 4 1) + (sp-launcher-by-id spt-next-launcher 4165) + ) + ) + +;; failed to figure out what this is: +(defpart 4165 + :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 10 39 1) + (sp-launcher-by-id spt-next-launcher 4166) + ) + ) + +;; failed to figure out what this is: +(defpart 4166 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -0.14666666) + (sp-flt spt-fade-g -0.7866667) + (sp-flt spt-fade-b -0.88) + (sp-int-plain-rnd spt-next-time 105 44 1) + (sp-launcher-by-id spt-next-launcher 4167) + ) + ) + +;; failed to figure out what this is: +(defpart 4167 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.013333334) 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-int-plain-rnd spt-next-time 150 29 1) + (sp-launcher-by-id spt-next-launcher 4168) + ) + ) + +;; failed to figure out what this is: +(defpart 4168 + :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.024)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-chimney-smoke + :id 934 + :flags (unk-8) + :bounds (static-bspherem 0 0 -12 48) + :parts ((sp-item 4169 :fade-after (meters 950) :falloff-to (meters 950))) + ) + +;; failed to figure out what this is: +(defpart 4169 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #xc)) + (sp-func spt-birth-func 'birth-func-texture-group) + (sp-rnd-flt spt-num 0.0 0.5 1.0) + (sp-rnd-flt spt-scale-x (meters 2) (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-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-rnd-flt spt-a 24.0 24.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.03) (meters 0.01) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.026666667) 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.026666667 -0.026666667 1.0) + (sp-rnd-flt spt-accel-x -4.096 -1.3653333 1.0) + (sp-rnd-flt spt-accel-y 0.4096 0.4096 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 1800) + (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-plain-rnd spt-next-time 75 4 1) + (sp-launcher-by-id spt-next-launcher 4170) + ) + ) + +;; failed to figure out what this is: +(defpart 4170 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int-plain-rnd spt-next-time 105 44 1) + (sp-launcher-by-id spt-next-launcher 4171) + ) + ) + +;; failed to figure out what this is: +(defpart 4171 + :init-specs ((sp-rnd-flt spt-scalevel-x (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-drip + :id 935 + :duration (seconds 0.017) + :flags (use-local-clock unk-4 unk-6) + :bounds (static-bspherem 0 -12 0 24) + :rotate ((degrees 0) (degrees 8) (degrees 0)) + :parts ((sp-item 4172 :fade-after (meters 160) :falloff-to (meters 60) :flags (bit7))) + ) + +;; failed to figure out what this is: +(defpart 4172 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :page #x52d)) + (sp-flt spt-num 0.1) + (sp-flt spt-y (meters 0.3)) + (sp-flt spt-z (meters -0.45)) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-int spt-rot-x 4) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 32.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-omega 6.144) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12 use-global-acc) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-drop-level-ctyport-drop-userdata) + (sp-int-plain-rnd spt-next-time 0 599 1) + (sp-launcher-by-id spt-next-launcher 4173) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4173 + :init-specs ((sp-flt spt-accel-y -5.4613333) (sp-flt spt-friction 0.0)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-blue-floor-vent + :id 936 + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4174 :fade-after (meters 200) :flags (bit6)) + (sp-item 4175 :fade-after (meters 100) :falloff-to (meters 100)) + ) + ) + +;; failed to figure out what this is: +(defpart 4174 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-flt spt-scale-x (meters 12)) + (sp-flt spt-rot-x 12288.0) + (sp-flt spt-scale-y (meters 24)) + (sp-flt spt-r 32.0) + (sp-rnd-flt spt-g 192.0 16.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 822067.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 4096.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4175 + :init-specs ((sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters 1) (meters 2.5) 1.0) + (sp-int spt-rot-x 7) + (sp-flt spt-r 4096.0) + (sp-flt spt-g 3072.0) + (sp-flt spt-b 2867.2) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.006666667) 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 300) + (sp-cpuinfo-flags distort) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 4176) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4176 + :init-specs ((sp-flt spt-fade-b 1.3653333)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-blue-floor-vent-small + :id 937 + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4177 :fade-after (meters 200) :flags (bit6)) + (sp-item 4178 :fade-after (meters 100) :falloff-to (meters 100)) + ) + ) + +;; failed to figure out what this is: +(defpart 4177 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 12288.0) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 32.0) + (sp-rnd-flt spt-g 192.0 16.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 822067.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 4096.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4178 + :init-specs ((sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters -2) (meters 4) 1.0) + (sp-int spt-rot-x 7) + (sp-flt spt-r 2457.6) + (sp-flt spt-g 1843.2) + (sp-flt spt-b 1720.32) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.013333334) 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 300) + (sp-cpuinfo-flags distort) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 4176) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 3600.0) 1.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-red-big-lights-1 + :id 938 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-red-big-lights-2 + :id 939 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 200)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-red-big-lights-3 + :id 940 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 400)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-red-big-lights-4 + :id 941 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 600)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-red-big-lights-5 + :id 942 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 800)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-red-big-lights-6 + :id 943 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4179 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 1000)) + ) + +;; failed to figure out what this is: +(defpart 4179 + :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-flt spt-scale-y (meters 4)) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 4918067.0) + (sp-flt spt-scalevel-x (meters 0.05)) + (sp-flt spt-scalevel-y (meters 0.04)) + (sp-flt spt-fade-a 0.04) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-int spt-next-time 100) + (sp-launcher-by-id spt-next-launcher 4180) + ) + ) + +;; failed to figure out what this is: +(defpart 4180 + :init-specs ((sp-flt spt-scale-y (meters 8)) + (sp-flt spt-a 12.0) + (sp-flt spt-scalevel-x (meters 0)) + (sp-flt spt-scalevel-y (meters 0)) + (sp-flt spt-fade-a 0.0) + (sp-int spt-next-time 600) + (sp-launcher-by-id spt-next-launcher 4181) + ) + ) + +;; failed to figure out what this is: +(defpart 4181 + :init-specs ((sp-flt spt-scalevel-x (meters -0.05)) + (sp-flt spt-scalevel-y (meters -0.04)) + (sp-flt spt-fade-a -0.04) + (sp-int spt-next-time 100) + (sp-launcher-by-id spt-next-launcher 4182) + ) + ) + +;; failed to figure out what this is: +(defpart 4182 + :init-specs ((sp-flt spt-scale-y (meters 4)) + (sp-flt spt-a 8.0) + (sp-flt spt-scalevel-x (meters 0)) + (sp-flt spt-scalevel-y (meters 0)) + (sp-flt spt-fade-a 0.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-blue-big-lights-1 + :id 944 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-blue-big-lights-2 + :id 945 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 200)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-blue-big-lights-3 + :id 946 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 400)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-blue-big-lights-4 + :id 947 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 600)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-blue-big-lights-5 + :id 948 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 800)) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-blue-big-lights-6 + :id 949 + :bounds (static-bspherem 0 0 0 16) + :parts ((sp-item 4183 :fade-after (meters 300) :flags (bit6) :period 1200 :length 5 :offset 1000)) + ) + +;; failed to figure out what this is: +(defpart 4183 + :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-flt spt-scale-y (meters 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 8.0) + (sp-flt spt-omega 4918067.0) + (sp-flt spt-scalevel-x (meters 0.05)) + (sp-flt spt-scalevel-y (meters 0.04)) + (sp-flt spt-fade-a 0.04) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-int spt-next-time 100) + (sp-launcher-by-id spt-next-launcher 4180) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-red-lights + :id 950 + :flags (unk-8) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4184 :fade-after (meters 80) :flags (bit6)) (sp-item 4185 :fade-after (meters 120) :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 4184 + :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.2) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 32.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 2048.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4185 + :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 7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 494387.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: +(defpartgroup group-ctyport-blue-lights + :id 951 + :flags (unk-8) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4186 :fade-after (meters 80) :flags (bit6)) (sp-item 4187 :fade-after (meters 120) :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 4186 + :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.05)) + (sp-rnd-flt spt-scale-x (meters 1.4) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 64.0 32.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 2048.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4187 + :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 7) (meters 0.1) 1.0) + (sp-flt spt-rot-x 819.2) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.0) + (sp-flt spt-omega 494387.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: +(defpartgroup group-ctyport-long-blue-lights + :id 952 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4188 :fade-after (meters 60) :flags (bit6 bit7)) + (sp-item 4189 :fade-after (meters 100) :flags (bit6 bit7)) + (sp-item 4190 :fade-after (meters 60) :flags (bit6 bit7)) + (sp-item 4191 :fade-after (meters 100) :flags (bit6 bit7)) + (sp-item 4192 :fade-after (meters 60) :flags (bit6 bit7)) + (sp-item 4193 :fade-after (meters 100) :flags (bit6 bit7)) + ) + ) + +;; failed to figure out what this is: +(defpart 4188 + :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 1.5)) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 247808.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4189 + :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 1.5)) + (sp-rnd-flt spt-scale-x (meters 8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.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 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4190 + :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.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 247808.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4191 + :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 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.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 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4192 + :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 -1.5)) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 4.0 1.0) + (sp-flt spt-omega 247808.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4193 + :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 -1.5)) + (sp-rnd-flt spt-scale-x (meters 8) (meters 0.1) 1.0) + (sp-flt spt-rot-x 409.6) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 32.0 32.0 1.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 8.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 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-green-lights + :id 953 + :flags (unk-8) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4194 :fade-after (meters 100) :flags (bit6)) (sp-item 4195 :fade-after (meters 140) :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 4194 + :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.4)) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (sp-rnd-flt spt-scale-y (meters 3) (meters 0.1) 1.0) + (sp-flt spt-r 0.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 24.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 2048.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4195 + :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.05)) + (sp-rnd-flt spt-scale-x (meters 6.5) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (sp-rnd-flt spt-scale-y (meters 12) (meters 0.1) 1.0) + (sp-flt spt-r 0.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 576307.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: +(defpartgroup group-ctyport-green-lights-2 + :id 954 + :flags (unk-8) + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4196 :fade-after (meters 100) :flags (bit6)) (sp-item 4197 :fade-after (meters 140) :flags (bit6))) + ) + +;; failed to figure out what this is: +(defpart 4196 + :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.1)) + (sp-rnd-flt spt-scale-x (meters 1) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (sp-rnd-flt spt-scale-y (meters 2) (meters 0.1) 1.0) + (sp-flt spt-r 0.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-rnd-flt spt-a 24.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 0.0) + ) + ) + +;; failed to figure out what this is: +(defpart 4197 + :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.01)) + (sp-rnd-flt spt-scale-x (meters 4.3) (meters 0.1) 1.0) + (sp-flt spt-rot-x 1228.8) + (sp-rnd-flt spt-scale-y (meters 8) (meters 0.1) 1.0) + (sp-flt spt-r 0.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-flt spt-a 6.0) + (sp-flt spt-omega 576307.2) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 0.0) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-sign-crimson-4x8 + :id 955 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4198 :flags (is-3d launch-asap bit7)) + (sp-item 4199 :flags (is-3d launch-asap bit7)) + (sp-item 4200 :fade-after (meters 200) :flags (bit6) :hour-mask #b11111111111111000000) + ) + ) + +;; failed to figure out what this is: +(defpart 4200 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 48) (meters 0.1) 1.0) + (sp-flt spt-rot-x 2048.0) + (sp-rnd-flt spt-scale-y (meters 32) (meters 0.1) 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 8.0 4.0 1.0) + (sp-flt spt-omega 822476.8) + (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 4198 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1b :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01b00 -2139062144 0 1 #x52d01b00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4199 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1b :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01b00 -2139062144 0 1 #x52d01b00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-sign-hiphog-4x4 + :id 956 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 4) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4201 :flags (is-3d launch-asap bit7)) + (sp-item 4202 :flags (is-3d launch-asap bit7)) + (sp-item 4203 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111111111100000) + ) + ) + +;; failed to figure out what this is: +(defpart 4203 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 32) (meters 0.1) 1.0) + (sp-flt spt-rot-x 2048.0) + (sp-rnd-flt spt-scale-y (meters 32) (meters 0.1) 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 8.0 4.0 1.0) + (sp-flt spt-omega 822476.8) + (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 4201 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x5 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00500 -2139062144 0 1 #x52d00500 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4202 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x5 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00500 -2139062144 0 1 #x52d00500 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-sign-blank-4x4 + :id 957 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 4) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4204 :flags (is-3d launch-asap bit7)) + (sp-item 4205 :flags (is-3d launch-asap bit7)) + (sp-item 4203 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111111111100000) + ) + ) + +;; failed to figure out what this is: +(defpart 4204 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00100 -2139062144 0 1 #x52d00100 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4205 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00100 -2139062144 0 1 #x52d00100 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-sign-vert-right-arrow-4x8 + :id 958 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4206 :flags (is-3d launch-asap bit7)) + (sp-item 4207 :flags (is-3d launch-asap bit7)) + (sp-item 4200 :fade-after (meters 200) :flags (bit6) :hour-mask #b11111111111111000000) + ) + ) + +;; failed to figure out what this is: +(defpart 4206 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01100 -2139062144 0 1 #x52d01100 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4207 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x11 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01100 -2139062144 0 1 #x52d01100 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-sign-hiphog-entrance-4x8 + :id 959 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4208 :flags (is-3d launch-asap bit7)) + (sp-item 4209 :flags (is-3d launch-asap bit7)) + (sp-item 4200 :fade-after (meters 200) :flags (bit6) :hour-mask #b11111111111111000000) + ) + ) + +;; failed to figure out what this is: +(defpart 4208 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01900 -2139062144 0 1 #x52d01900 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4209 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.05)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 16)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d01900 -2139062144 0 1 #x52d01900 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-sign-loading-left-8x4 + :id 960 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4210 :flags (is-3d launch-asap bit7)) + (sp-item 4211 :flags (is-3d launch-asap bit7)) + (sp-item 4212 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111110000000) + ) + ) + +;; failed to figure out what this is: +(defpart 4212 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 32) (meters 0.1) 1.0) + (sp-flt spt-rot-x 2048.0) + (sp-rnd-flt spt-scale-y (meters 48) (meters 0.1) 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 8.0 4.0 1.0) + (sp-flt spt-omega 822476.8) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4210 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00b00 -2139062144 0 1 #x52d00b00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4211 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00b00 -2139062144 0 1 #x52d00b00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-sign-holding-right-8x4 + :id 961 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4213 :flags (is-3d launch-asap bit7)) + (sp-item 4214 :flags (is-3d launch-asap bit7)) + (sp-item 4212 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111110000000) + ) + ) + +;; failed to figure out what this is: +(defpart 4213 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x7 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00700 -2139062144 0 1 #x52d00700 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4214 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x7 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00700 -2139062144 0 1 #x52d00700 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-sign-arrows-8x4 + :id 962 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4215 :flags (is-3d launch-asap bit7)) + (sp-item 4216 :flags (is-3d launch-asap bit7)) + (sp-item 4212 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111110000000) + ) + ) + +;; failed to figure out what this is: +(defpart 4215 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00f00 -2139062144 0 1 #x52d00f00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4216 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00f00 -2139062144 0 1 #x52d00f00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-sign-krew-international-8x4 + :id 963 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4217 :flags (is-3d launch-asap bit7)) + (sp-item 4218 :flags (is-3d launch-asap bit7)) + (sp-item 4212 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111110000000) + ) + ) + +;; failed to figure out what this is: +(defpart 4217 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00900 -2139062144 0 1 #x52d00900 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4218 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00900 -2139062144 0 1 #x52d00900 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-sign-no-unloading-8x4 + :id 964 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 8) + :rotate ((degrees 0) (degrees 4) (degrees 0)) + :parts ((sp-item 4219 :flags (is-3d launch-asap bit7)) + (sp-item 4220 :flags (is-3d launch-asap bit7)) + (sp-item 4212 :fade-after (meters 200) :flags (bit6) :hour-mask #b111111111110000000) + ) + ) + +;; failed to figure out what this is: +(defpart 4219 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xd :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters 0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00d00 -2139062144 0 1 #x52d00d00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4220 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xd :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-z (meters -0.1)) + (sp-flt spt-scale-x (meters 16)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-12) + (new 'static 'sp-field-init-spec + :field (sp-field-id spt-userdata) + :flags (sp-flag plain-v2) + :object (new 'static 'boxed-array :type int32 5 0 0 #x52d00d00 -2139062144 0 1 #x52d00d00 -2143272896 #x404040 0) + ) + (sp-func spt-func 'sparticle-texture-day-night) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-hiphog-neon + :id 965 + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4221 :fade-after (meters 350) :flags (is-3d bit6) :period 600 :length 300) + (sp-item 11 :flags (is-3d bit6) :period 600 :length 300 :offset 300) + (sp-item 4222 :fade-after (meters 400) :flags (bit6) :period 600 :length 300 :offset 300) + ) + ) + +;; failed to figure out what this is: +(defpart 4222 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-rnd-flt spt-scale-x (meters 28) (meters 0.1) 1.0) + (sp-flt spt-rot-x 18432.0) + (sp-rnd-flt spt-scale-y (meters 38) (meters 0.1) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 8.0 4.0 1.0) + (sp-flt spt-omega 1641676.8) + (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 4221 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x15 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-flt spt-z (meters 0.25)) + (sp-flt spt-scale-x (meters 24)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 116.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-flt spt-rotate-y (degrees 33.436)) + ) + ) + +;; failed to figure out what this is: +(defpart 11 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x16 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-flt spt-z (meters 0.25)) + (sp-flt spt-scale-x (meters 24)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-flt spt-rotate-y (degrees 33.436)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-hiphog-neon-daxter + :id 966 + :bounds (static-bspherem 0 0 0 8) + :parts ((sp-item 4223 :fade-after (meters 350) :flags (is-3d bit6) :period 600 :length 300) + (sp-item 4224 :flags (is-3d bit6) :period 600 :length 300 :offset 300) + (sp-item 4225 :fade-after (meters 400) :flags (bit6) :period 600 :length 300 :offset 300) + ) + ) + +;; failed to figure out what this is: +(defpart 4225 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-rnd-flt spt-scale-x (meters 28) (meters 0.1) 1.0) + (sp-flt spt-rot-x 18432.0) + (sp-rnd-flt spt-scale-y (meters 38) (meters 0.1) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 8.0 4.0 1.0) + (sp-flt spt-omega 1641676.8) + (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 4223 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-flt spt-z (meters 0.25)) + (sp-flt spt-scale-x (meters 24)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 116.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-flt spt-rotate-y (degrees 33.436)) + ) + ) + +;; failed to figure out what this is: +(defpart 4224 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -1)) + (sp-flt spt-z (meters 0.25)) + (sp-flt spt-scale-x (meters 24)) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-flt spt-r 128.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-flt spt-rotate-y (degrees 33.436)) + ) + ) + +;; definition for symbol *hiphog-exterior-marquee*, type (array object) +(define *hiphog-exterior-marquee* + (new 'static 'boxed-array :type object + (the binteger 25) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w :x #x1ffffff)) + (new 'static 'boxed-array :type object (the binteger 1) (new 'static 'vector4w)) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w) + (new 'static 'vector4w :x #x1000001) + (new 'static 'vector4w :x #x1800003) + (new 'static 'vector4w :x #x1c00007) + (new 'static 'vector4w :x #x1e0000f) + (new 'static 'vector4w :x #x1f0001f) + (new 'static 'vector4w :x #x1f8003f) + (new 'static 'vector4w :x #x1fc007f) + (new 'static 'vector4w :x #x1fe00ff) + (new 'static 'vector4w :x #x1ff01ff) + (new 'static 'vector4w :x #x1ff83ff) + (new 'static 'vector4w :x #x1ffc7ff) + (new 'static 'vector4w :x #x1ffcfff) + (new 'static 'vector4w :x #x1ffffff) + ) + (new 'static 'boxed-array :type object + (the binteger 3) + (new 'static 'vector4w) + (new 'static 'vector4w :x #x3000) + (new 'static 'vector4w :x #x7800) + (new 'static 'vector4w :x #xcc00) + (new 'static 'vector4w :x #xc600) + (new 'static 'vector4w :x #x18300) + (new 'static 'vector4w :x #x30180) + (new 'static 'vector4w :x #x600c0) + (new 'static 'vector4w :x #xc0060) + (new 'static 'vector4w :x #x180030) + (new 'static 'vector4w :x #x300018) + (new 'static 'vector4w :x #x60000c) + (new 'static 'vector4w :x #xc00006) + (new 'static 'vector4w :x #x1800003) + (new 'static 'vector4w :x #x1000001) + (new 'static 'vector4w) + ) + (new 'static 'boxed-array :type object + (the binteger 3) + (new 'static 'vector4w :x #x8008) + (new 'static 'vector4w :x #x200100) + (new 'static 'vector4w :x #x4002) + (new 'static 'vector4w :x #x420400) + (new 'static 'vector4w :x #x80040) + (new 'static 'vector4w :x #x802004) + (new 'static 'vector4w :x #x100800) + (new 'static 'vector4w :x #x1010020) + (new 'static 'vector4w :x #x40081) + (new 'static 'vector4w :x #x1210) + ) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w) + (new 'static 'vector4w :x 64) + (new 'static 'vector4w :x #xe0) + (new 'static 'vector4w :x #x1f0) + (new 'static 'vector4w :x #x3f8) + (new 'static 'vector4w :x #x7fc) + (new 'static 'vector4w :x #xffe) + (new 'static 'vector4w :x #x1fff) + (new 'static 'vector4w :x #x1fff) + ) + (new 'static 'boxed-array :type object + (the binteger 5) + (new 'static 'vector4w :x #x222000) + (new 'static 'vector4w :x #x444000) + (new 'static 'vector4w :x #x888000) + (new 'static 'vector4w :x #x1110000) + ) + (new 'static 'boxed-array :type object + (the binteger 15) + (new 'static 'vector4w :x #x1ffe000) + (new 'static 'vector4w :x #x1fff) + ) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-hiphog-marquee + :id 967 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 24) + :rotate ((degrees 0) (degrees -3.942222) (degrees 0)) + :parts ((sp-item 4226 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4227 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4228 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4229 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4230 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4231 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4232 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4233 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4234 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4235 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4236 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4237 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4238 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4239 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4240 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4241 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4242 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4243 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4244 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4245 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4246 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4247 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4248 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4249 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4250 :flags (is-3d launch-asap bit6 bit7)) + ) + ) + +;; failed to figure out what this is: +(defpart 4226 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + 0 + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -54.000004)) + ) + ) + +;; failed to figure out what this is: +(defpart 4227 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 1) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -45.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4228 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 2) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -36.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4229 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 3) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -27.000002)) + ) + ) + +;; failed to figure out what this is: +(defpart 4230 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 4) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -18.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4231 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 5) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -9.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4232 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 6) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4233 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 7) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 9.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4234 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 8) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 18.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4235 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 9) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 27.000002)) + ) + ) + +;; failed to figure out what this is: +(defpart 4236 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 10) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 36.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4237 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 11) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 45.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4238 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x14 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 12) + (the binteger 173671008) + (the binteger 173671040) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 54.000004)) + ) + ) + +;; failed to figure out what this is: +(defpart 4239 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 13) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -49.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4240 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 14) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -40.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4241 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 15) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -31.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4242 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 16) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -22.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4243 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 17) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -13.500001)) + ) + ) + +;; failed to figure out what this is: +(defpart 4244 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 18) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -4.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4245 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 19) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 4.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4246 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 20) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 13.500001)) + ) + ) + +;; failed to figure out what this is: +(defpart 4247 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 21) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 22.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4248 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 22) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 31.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4249 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 23) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 40.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4250 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x18 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 24) + (the binteger 173671136) + (the binteger 173671168) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 49.5)) + ) + ) + +;; failed to figure out what this is: +(defpartgroup group-ctyport-hiphog-marquee-daxter + :id 968 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 24) + :rotate ((degrees 0) (degrees -3.942222) (degrees 0)) + :parts ((sp-item 4251 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4252 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4253 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4254 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4255 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4256 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4257 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4258 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4259 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4260 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4261 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4262 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4263 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4264 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4265 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4266 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4267 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4268 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4269 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4270 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4271 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4272 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4273 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4274 :flags (is-3d launch-asap bit6 bit7)) + (sp-item 4275 :flags (is-3d launch-asap bit6 bit7)) + ) + ) + +;; failed to figure out what this is: +(defpart 4251 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + 0 + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -54.000004)) + ) + ) + +;; failed to figure out what this is: +(defpart 4252 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 1) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -45.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4253 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 2) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -36.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4254 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 3) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -27.000002)) + ) + ) + +;; failed to figure out what this is: +(defpart 4255 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 4) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -18.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4256 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 5) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -9.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4257 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 6) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4258 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 7) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 9.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4259 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 8) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 18.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4260 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 9) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 27.000002)) + ) + ) + +;; failed to figure out what this is: +(defpart 4261 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 10) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 36.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4262 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 11) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 45.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4263 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 64.0 128.0 1.0) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 12) + (the binteger 173671840) + (the binteger 173671872) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 54.000004)) + ) + ) + +;; failed to figure out what this is: +(defpart 4264 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 13) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -49.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4265 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 14) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -40.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4266 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 15) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -31.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4267 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 16) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -22.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4268 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 17) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -13.500001)) + ) + ) + +;; failed to figure out what this is: +(defpart 4269 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 18) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees -4.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4270 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 19) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 4.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4271 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 20) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 13.500001)) + ) + ) + +;; failed to figure out what this is: +(defpart 4272 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 21) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 22.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4273 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 22) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 31.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4274 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 23) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 40.5)) + ) + ) + +;; failed to figure out what this is: +(defpart 4275 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 15.5)) + (sp-flt spt-y (meters 0.5)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 2)) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 1)) + (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 128.0) + (sp-int spt-timer -1) + (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 object + '*hiphog-exterior-marquee* + (the binteger 24) + (the binteger 173671904) + (the binteger 173671936) + ) + ) + (sp-func spt-func 'sparticle-mode-animate) + (sp-flt spt-rotate-y (degrees 49.5)) + ) + ) + +;; definition for symbol *hiphog-exterior-marquee-group-ids*, type (array int32) +(define *hiphog-exterior-marquee-group-ids* (new 'static 'boxed-array :type int32 #x3c7)) + +;; definition for symbol *hiphog-exterior-marquee-daxter-group-ids*, type (array int32) +(define *hiphog-exterior-marquee-daxter-group-ids* (new 'static 'boxed-array :type int32 #x3c8)) + +;; definition of type hiphog-exterior-marquee +(deftype hiphog-exterior-marquee (process-drawable) + ((rot vector :inline :offset-assert 208) + (master-enable uint32 :offset-assert 224) + (pad-ih12nb312 uint32 3 :offset-assert 228) + (mode uint32 :offset-assert 240) + (counter int32 :offset-assert 244) + (parts sparticle-launch-control 1 :offset-assert 248) + ) + :heap-base #x80 + :method-count-assert 22 + :size-assert #xfc + :flag-assert #x16008000fc + (:methods + (idle () _type_ :state 20) + (hiphog-exterior-marquee-method-21 (_type_) none 21) + ) + ) + +;; definition for method 3 of type hiphog-exterior-marquee +(defmethod inspect hiphog-exterior-marquee ((obj hiphog-exterior-marquee)) + (when (not obj) + (set! obj obj) + (goto cfg-4) + ) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~2Trot: ~`vector`P~%" (-> obj rot)) + (format #t "~2Tmaster-enable: ~D~%" (-> obj master-enable)) + (format #t "~2Tstate-time: ~D~%" (-> obj state-time)) + (format #t "~2Tmode: ~D~%" (-> obj mode)) + (format #t "~2Tcounter: ~D~%" (-> obj counter)) + (format #t "~2Tparts[1] @ #x~X~%" (-> obj parts)) + (label cfg-4) + obj + ) + +;; definition for method 10 of type hiphog-exterior-marquee +(defmethod deactivate hiphog-exterior-marquee ((obj hiphog-exterior-marquee)) + (dotimes (s5-0 1) + (let ((a0-1 (-> obj parts s5-0))) + (if (nonzero? a0-1) + (kill-and-free-particles a0-1) + ) + ) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 7 of type hiphog-exterior-marquee +;; WARN: Return type mismatch process-drawable vs hiphog-exterior-marquee. +(defmethod relocate hiphog-exterior-marquee ((obj hiphog-exterior-marquee) (arg0 int)) + (dotimes (v1-0 1) + (if (nonzero? (-> obj parts v1-0)) + (&+! (-> obj parts v1-0) arg0) + ) + ) + (the-as hiphog-exterior-marquee ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; definition for method 21 of type hiphog-exterior-marquee +;; WARN: Return type mismatch symbol vs none. +(defmethod hiphog-exterior-marquee-method-21 hiphog-exterior-marquee ((obj hiphog-exterior-marquee)) + (+! (-> obj parts 0 state-counter) 1) + (when (!= (-> obj parts 0 state-mode 0) (-> obj mode)) + (set! (-> obj parts 0 state-mode 0) (-> obj mode)) + (set! (-> obj parts 0 state-counter) (the-as uint 0)) + 0 + ) + (let ((s5-0 (-> obj master-enable))) + (dotimes (s4-0 1) + (if (logtest? s5-0 1) + (spawn (-> obj parts s4-0) (-> obj root trans)) + ) + (set! s5-0 (shr s5-0 1)) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate idle (hiphog-exterior-marquee) + :virtual #t + :code (behavior () + (until #f + (when (<= (-> self counter) 0) + (set! (-> self mode) (the-as uint (rand-vu-int-count 8))) + (let ((v0-1 (rand-vu-int-range 3 6)) + (a0-3 (the-as (object object) (-> *hiphog-exterior-marquee* (+ (-> self mode) 1)))) + ) + (set! (-> self counter) (* v0-1 (* (+ (-> (the-as (pointer int32) a0-3) 0) -1) + (the-as int (/ (the-as int (-> (the-as (array object) a0-3) 0)) 8)) + ) + ) + ) + ) + (while (< (-> self counter) 120) + (set! (-> self counter) (* (-> self counter) 2)) + ) + ) + (+! (-> self counter) -1) + (hiphog-exterior-marquee-method-21 self) + (suspend) + ) + #f + (none) + ) + :post (the-as (function none :behavior hiphog-exterior-marquee) ja-post) + ) + +;; definition for method 11 of type hiphog-exterior-marquee +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! hiphog-exterior-marquee ((obj hiphog-exterior-marquee) (arg0 entity-actor)) + "Typically the method that does the initial setup on the process, potentially using the [[entity-actor]] provided as part of that. +This commonly includes things such as: +- stack size +- collision information +- loading the skeleton group / bones +- sounds" + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause enemy)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (set! (-> obj master-enable) (the-as uint -1)) + (set! (-> obj mode) (the-as uint (rand-vu-int-count 8))) + (let ((s5-1 (if (task-node-closed? (game-task-node nest-boss-resolution)) + *hiphog-exterior-marquee-daxter-group-ids* + *hiphog-exterior-marquee-group-ids* + ) + ) + ) + (dotimes (s4-0 1) + (set! (-> obj parts s4-0) (create-launch-control (-> *part-group-id-table* (-> s5-1 s4-0)) obj)) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + +;; failed to figure out what this is: +(defpartgroup group-farthy-halo + :id 969 + :flags (unk-4 unk-6) + :bounds (static-bspherem 0 0 0 4) + :rotate ((degrees 2.2222223) (degrees 0) (degrees 0)) + :parts ((sp-item 4276 :fade-after (meters 400) :flags (is-3d bit6 bit7)) (sp-item 4277 :fade-after (meters 200))) + ) + +;; failed to figure out what this is: +(defpart 4277 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #xca :page #xc)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 1)) + (sp-rnd-flt spt-scale-x (meters 20) (meters 0.4) 1.0) + (sp-flt spt-rot-x 4096.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 128.0 1.0) + (sp-rnd-flt spt-a 12.0 4.0 1.0) + (sp-flt spt-omega 822476.8) + (sp-int spt-timer 5) + (sp-cpuinfo-flags sp-cpuinfo-flag-2 sp-cpuinfo-flag-3 glow) + (sp-flt spt-userdata 2048.0) + (sp-flt spt-rotate-y (degrees 0.0)) + ) + ) + +;; failed to figure out what this is: +(defpart 4276 + :init-specs ((sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x52d)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.1)) + (sp-flt spt-y (meters 0)) + (sp-flt spt-z (meters 0)) + (sp-flt spt-scale-x (meters 8)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-flt spt-scale-y (meters 8)) + (sp-rnd-flt spt-r 32.0 128.0 1.0) + (sp-copy-from-other spt-g -1) + (sp-copy-from-other spt-b -1) + (sp-flt spt-a 127.0) + (sp-int spt-timer 1) + (sp-cpuinfo-flags sp-cpuinfo-flag-2) + (sp-flt spt-rotate-y (degrees 90.0)) + ) + ) + +;; definition of type farthy +(deftype farthy (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 farthy +(defmethod inspect farthy ((obj farthy)) + (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-farthy farthy farthy-lod0-jg farthy-idle-ja + ((farthy-lod0-mg (meters 999999))) + :bounds (static-spherem 0 8 0 11) + ) + +;; failed to figure out what this is: +(defskelgroup skel-mecha-daxter mecha-daxter mecha-daxter-lod0-jg mecha-daxter-idle-ja + ((mecha-daxter-lod0-mg (meters 999999))) + :bounds (static-spherem 0 8 0 11) + :origin-joint-index 3 + ) + +;; failed to figure out what this is: +(defstate idle (farthy) + :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 (behavior () + (ja-post) + (if (nonzero? (-> self part)) + (spawn-with-cspace (-> self part) (-> self node-list data 5)) + ) + (none) + ) + ) + +;; definition for method 11 of type farthy +;; WARN: Return type mismatch object vs none. +(defmethod init-from-entity! farthy ((obj farthy) (arg0 entity-actor)) + "Typically the method that does the initial setup on the process, potentially using the [[entity-actor]] provided as part of that. +This commonly includes things such as: +- stack size +- collision information +- loading the skeleton group / bones +- sounds" + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! (-> obj root pause-adjust-distance) 1228800.0) + (cond + ((task-node-closed? (game-task-node nest-boss-resolution)) + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-mecha-daxter" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + ) + (else + (initialize-skeleton + obj + (the-as skeleton-group (art-group-get-by-name *level* "skel-farthy" (the-as (pointer uint32) #f))) + (the-as pair 0) + ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 969) obj)) + ) + ) + (set! (-> obj draw light-index) (the-as uint 10)) + (go (method-of-object obj idle)) + (none) + ) + + + + diff --git a/test/decompiler/reference/jak2/levels/common/enemy/bombots/bombbot_REF.gc b/test/decompiler/reference/jak2/levels/common/enemy/bombots/bombbot_REF.gc index 1998a25109..5d073e7c11 100644 --- a/test/decompiler/reference/jak2/levels/common/enemy/bombots/bombbot_REF.gc +++ b/test/decompiler/reference/jak2/levels/common/enemy/bombots/bombbot_REF.gc @@ -13,10 +13,12 @@ :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 2) (meters 2) (meters 2)) ) - :max-time-step 0.02 - :gravity (meters 10) - :idle-distance (meters 200) - :attack-force-scale 2.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 10) + :idle-distance (meters 200) + :attack-force-scale 2.0 + ) :name '*bombbot-body-constants* ) ) @@ -2981,7 +2983,7 @@ (init-vf0-vector) (let ((a1-0 (new 'stack-no-clear 'vector))) (vector-reset! a1-0) - (set! (-> a1-0 y) (* -1.0 (-> obj info gravity) (-> obj rigidbody state info mass))) + (set! (-> a1-0 y) (* -1.0 (-> obj info extra gravity) (-> obj rigidbody state info mass))) (rigid-body-method-20 (-> obj rigidbody state) a1-0) ) (rigid-body-method-24 (-> obj rigidbody state)) diff --git a/test/decompiler/reference/jak2/levels/dig/dig-obs_REF.gc b/test/decompiler/reference/jak2/levels/dig/dig-obs_REF.gc index 71014d6d69..3366fe24b0 100644 --- a/test/decompiler/reference/jak2/levels/dig/dig-obs_REF.gc +++ b/test/decompiler/reference/jak2/levels/dig/dig-obs_REF.gc @@ -96,10 +96,12 @@ :cm-offset-joint (new 'static 'vector :y -8192.0 :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 6) (meters 4) (meters 6)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 200) - :attack-force-scale 2.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 200) + :attack-force-scale 2.0 + ) :name '*dig-sinking-platform-constants* ) ) diff --git a/test/decompiler/reference/jak2/levels/dig/dig1-obs_REF.gc b/test/decompiler/reference/jak2/levels/dig/dig1-obs_REF.gc index dea7d644ef..fd21a8c8d1 100644 --- a/test/decompiler/reference/jak2/levels/dig/dig1-obs_REF.gc +++ b/test/decompiler/reference/jak2/levels/dig/dig1-obs_REF.gc @@ -448,10 +448,12 @@ :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 1) (meters 3) (meters 1)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 200) - :attack-force-scale 2.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 200) + :attack-force-scale 2.0 + ) :name '*dig-bomb-crate-cylinder-constants* ) ) diff --git a/test/decompiler/reference/jak2/levels/dig/dig3-obs_REF.gc b/test/decompiler/reference/jak2/levels/dig/dig3-obs_REF.gc index 1dfaf239de..0351074e4f 100644 --- a/test/decompiler/reference/jak2/levels/dig/dig3-obs_REF.gc +++ b/test/decompiler/reference/jak2/levels/dig/dig3-obs_REF.gc @@ -1511,10 +1511,12 @@ This commonly includes things such as: :cm-offset-joint (new 'static 'vector :z -24576.0 :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 4) (meters 3) (meters 21)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*dig-tipping-rock-constants* :drag-factor 2.0 :buoyancy-factor 1.2 @@ -1833,10 +1835,12 @@ This commonly includes things such as: :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 1) (meters 3) (meters 1)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 200) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 200) + :attack-force-scale 1.0 + ) :name '*dig-stomp-block-constants* ) ) diff --git a/test/decompiler/reference/jak2/levels/ruins/ruins-obs_REF.gc b/test/decompiler/reference/jak2/levels/ruins/ruins-obs_REF.gc index 2e6b3417f8..1790b1aca7 100644 --- a/test/decompiler/reference/jak2/levels/ruins/ruins-obs_REF.gc +++ b/test/decompiler/reference/jak2/levels/ruins/ruins-obs_REF.gc @@ -81,10 +81,12 @@ :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 2) (meters 1) (meters 2)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*ruins-sinking-platform-constants* :drag-factor 2.0 :buoyancy-factor 1.5 diff --git a/test/decompiler/reference/jak2/levels/underport/under-obs_REF.gc b/test/decompiler/reference/jak2/levels/underport/under-obs_REF.gc index 76c3acc12b..0059b55371 100644 --- a/test/decompiler/reference/jak2/levels/underport/under-obs_REF.gc +++ b/test/decompiler/reference/jak2/levels/underport/under-obs_REF.gc @@ -1054,10 +1054,12 @@ This commonly includes things such as: :cm-offset-joint (new 'static 'vector :w 1.0) :inertial-tensor-box (new 'static 'array meters 3 (meters 5) (meters 1) (meters 5)) ) - :max-time-step 0.02 - :gravity (meters 80) - :idle-distance (meters 50) - :attack-force-scale 1.0 + :extra (new 'static 'rigid-body-object-extra-info + :max-time-step 0.02 + :gravity (meters 80) + :idle-distance (meters 50) + :attack-force-scale 1.0 + ) :name '*under-buoy-plat-platform-constants* :drag-factor 2.0 :buoyancy-factor 2.3 diff --git a/test/decompiler/test_DataParser.cpp b/test/decompiler/test_DataParser.cpp index cd73380de0..ca41304ba9 100644 --- a/test/decompiler/test_DataParser.cpp +++ b/test/decompiler/test_DataParser.cpp @@ -345,7 +345,7 @@ TEST_F(DataDecompTest, FloatArray) { info.array_size = 7; info.is_value = false; auto decomp = decompile_at_label_with_hint(info, parsed.label("L63"), parsed.labels, - {parsed.words}, *dts, nullptr, GameVersion::Jak1); + {parsed.words}, dts->ts, nullptr, GameVersion::Jak1); check_forms_equal(decomp.print(), "(new 'static 'array float 7\n" "1.0 0.0 1.0 0.0 1.0 0.0 1.0)"); diff --git a/test/offline/config/jak2/config.jsonc b/test/offline/config/jak2/config.jsonc index 90bdc9b685..5148431126 100644 --- a/test/offline/config/jak2/config.jsonc +++ b/test/offline/config/jak2/config.jsonc @@ -19,6 +19,7 @@ "DGO/COB.DGO", "DGO/CPA.DGO", "DGO/CTA.DGO", + "DGO/CPO.DGO", "DGO/CTB.DGO", "DGO/CTC.DGO", "DGO/CTYASHA.DGO",