From c6f0c5cd296ac3612094ba88cc3c7cb4f0c9c884 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Tue, 28 Dec 2021 23:16:42 -0500 Subject: [PATCH] decomp: merge all `s6-*` remappings and finish `training-obs` | `villagep-obs` | `lavatube-obs` | `rolling-robber` | `snow-obs` (#1018) * decompiler: merge all `s6-*` usages * decomp: finish `training-obs` * decomp: finish `rolling-robber` * decomp: finish `villagep-obs` * decomp: finish `lavatube-obs` * skip function in `lavatube-obs` over #1029 * closes #1029 * kick nasm * merge s6 and sp in variable naming pass * revert my fix * fix mistakes and a bad method signature Co-authored-by: water111 --- decompiler/IR2/Env.cpp | 2 +- decompiler/IR2/FormExpressionAnalysis.cpp | 2 +- decompiler/analysis/variable_naming.cpp | 19 + decompiler/analysis/variable_naming.h | 2 + decompiler/config/all-types.gc | 91 +- .../stack_structures.jsonc | 2 +- .../jak1_ntsc_black_label/type_casts.jsonc | 19 +- .../jak1_ntsc_black_label/var_names.jsonc | 6 + goal_src/engine/geometry/vol.gc | 6 +- goal_src/engine/gfx/water/water-h.gc | 40 +- goal_src/engine/gfx/water/water.gc | 3458 +++++++---------- goal_src/engine/target/target-death.gc | 14 +- goal_src/engine/target/target-h.gc | 4 +- goal_src/engine/ui/text-h.gc | 4 +- goal_src/levels/common/battlecontroller.gc | 23 +- goal_src/levels/common/dark-eco-pool.gc | 793 ++-- goal_src/levels/common/water-anim.gc | 3 +- goal_src/levels/jungle/jungle-obs.gc | 6 +- goal_src/levels/lavatube/lavatube-obs.gc | 1801 +++++++++ goal_src/levels/misty/mud.gc | 111 +- goal_src/levels/ogre/ogre-obs.gc | 6 +- goal_src/levels/rolling/rolling-robber.gc | 904 +++++ goal_src/levels/snow/snow-obs.gc | 2318 ++++++++++- goal_src/levels/sunken/sunken-water.gc | 489 +-- goal_src/levels/training/training-obs.gc | 1299 +++++++ goal_src/levels/village1/village-obs-VI1.gc | 6 +- goal_src/levels/village2/village2-obs.gc | 6 +- .../levels/village_common/villagep-obs.gc | 1257 ++++++ .../reference/engine/game/generic-obs_REF.gc | 6 +- .../reference/engine/geometry/vol_REF.gc | 10 +- .../reference/engine/gfx/water/water-h_REF.gc | 2 +- .../reference/engine/gfx/water/water_REF.gc | 5 +- .../reference/engine/load/loader_REF.gc | 18 +- .../engine/target/target-death_REF.gc | 4 +- .../reference/engine/target/target-h_REF.gc | 2 +- .../reference/kernel/gkernel_REF.gc | 6 +- .../decompiler/reference/kernel/gstate_REF.gc | 12 +- .../levels/common/battlecontroller_REF.gc | 6 +- .../levels/common/dark-eco-pool_REF.gc | 19 +- .../reference/levels/common/water-anim_REF.gc | 4 +- .../reference/levels/jungle/jungle-obs_REF.gc | 7 +- .../levels/lavatube/lavatube-obs_REF.gc | 1995 ++++++++++ .../reference/levels/misty/mud_REF.gc | 7 +- .../reference/levels/ogre/ogre-obs_REF.gc | 8 +- .../levels/rolling/rolling-robber_REF.gc | 948 +++++ .../reference/levels/snow/snow-obs_REF.gc | 2500 ++++++++++++ .../levels/sunken/sunken-water_REF.gc | 8 +- .../levels/training/training-obs_REF.gc | 1403 +++++++ .../levels/village1/village-obs-VI1_REF.gc | 7 +- .../levels/village2/village2-obs_REF.gc | 7 +- .../levels/village_common/villagep-obs_REF.gc | 1333 +++++++ test/offline/config.jsonc | 1 - 52 files changed, 17962 insertions(+), 3047 deletions(-) create mode 100644 test/decompiler/reference/levels/lavatube/lavatube-obs_REF.gc create mode 100644 test/decompiler/reference/levels/rolling/rolling-robber_REF.gc create mode 100644 test/decompiler/reference/levels/snow/snow-obs_REF.gc create mode 100644 test/decompiler/reference/levels/training/training-obs_REF.gc create mode 100644 test/decompiler/reference/levels/village_common/villagep-obs_REF.gc diff --git a/decompiler/IR2/Env.cpp b/decompiler/IR2/Env.cpp index 05e22000e9..aecab89250 100644 --- a/decompiler/IR2/Env.cpp +++ b/decompiler/IR2/Env.cpp @@ -566,4 +566,4 @@ void Env::set_stack_structure_hints(const std::vector& hints } } -} // namespace decompiler \ No newline at end of file +} // namespace decompiler diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index 0f1d42d99e..cd0ee3421d 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -1572,7 +1572,7 @@ FormElement* SimpleExpressionElement::update_from_stack_logor_or_logand_helper( if (m_expr.get_arg(1).is_var()) { auto eti = env.dts->ts.try_enum_lookup(arg1_type.base_type()); if (eti) { - auto integer = get_goal_integer_constant(args.at(0), env); + auto integer = get_goal_integer_constant(strip_int_or_uint_cast(args.at(0)), env); if (integer && ((s64)*integer) < 0) { // clearing a bitfield. auto elts = decompile_bitfield_enum_from_int(arg1_type, env.dts->ts, ~*integer); diff --git a/decompiler/analysis/variable_naming.cpp b/decompiler/analysis/variable_naming.cpp index 2991b1c6a8..dba89a7e7b 100644 --- a/decompiler/analysis/variable_naming.cpp +++ b/decompiler/analysis/variable_naming.cpp @@ -86,6 +86,14 @@ void VarMapSSA::merge(const VarSSA& var_a, const VarSSA& var_b) { } } +void VarMapSSA::merge_reg(Register reg) { + for (auto& entry : m_entries) { + if (entry.reg == reg) { + entry.var_id = 0; + } + } +} + /*! * Make all Bs A. */ @@ -491,6 +499,13 @@ std::string SSA::print() const { return result; } +/*! + * Merge all variables in the same register to the given register. + */ +void SSA::merge_reg_to_single_variable(Register reg) { + map.merge_reg(reg); +} + /*! * Simplify the SSA while still keeping it in SSA form. * This does only a single pass of simplifications and returns true if it made changes. @@ -1070,6 +1085,10 @@ std::optional run_variable_renaming(const Function& function, fmt::print("Simplified SSA\n{}-------------------------------\n", ssa.print()); } + // merge special registers + ssa.merge_reg_to_single_variable(Register(Reg::GPR, Reg::SP)); + ssa.merge_reg_to_single_variable(Register(Reg::GPR, Reg::S6)); + // remember what the SSA mapping was: auto ssa_mapping = ssa.get_ssa_mapping(); diff --git a/decompiler/analysis/variable_naming.h b/decompiler/analysis/variable_naming.h index 654ab56fbd..cb1a6d5af1 100644 --- a/decompiler/analysis/variable_naming.h +++ b/decompiler/analysis/variable_naming.h @@ -77,6 +77,7 @@ class VarMapSSA { bool same(const VarSSA& var_a, const VarSSA& var_b) const; int var_id(const VarSSA& var) const; void remap_reg(Register reg, const std::unordered_map& remap); + void merge_reg(Register reg); void debug_print_map() const; private: @@ -143,6 +144,7 @@ struct SSA { RegAccessMap get_ssa_mapping(); bool simplify(); + void merge_reg_to_single_variable(Register reg); void merge_all_phis(); void remap(int nargs); void make_vars(const Function& function, const DecompilerTypeSystem& dts); diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index c50ec98a6a..51a3f4ee31 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -1155,12 +1155,12 @@ (dark-crystal-run-away #x439) (cave-trap-nest-hint #x440) (snow-fort-reminder #x443) - - (ram-boss-red-eco-hint #x444) (ice-cube-hint #x448) + (snowy-turned-on-yellow-vents #x44c) + (village3-warp-gate-reminder #x452) (village3-warp-gate-reminder=annoyed #x453) (village3-warp-gate-reminder-very-annoyed #x454) @@ -12077,7 +12077,7 @@ (target-clone-anim handle) target-title target-demo - target-warp-in + (target-warp-in vector vector) ) ) @@ -18644,7 +18644,7 @@ (:methods (water-vol-idle () _type_ :state 20) (water-vol-startup () _type_ :state 21) - (TODO-RENAME-22 (_type_) ripple-wave-set 22) ;; can also return an obs? + (TODO-RENAME-22 (_type_) none 22) ;; can also return an obs? (reset-root! (_type_) none 23) (set-stack-size! (_type_) none 24) (TODO-RENAME-25 (_type_) object 25) @@ -34264,13 +34264,23 @@ :size-assert #x118 :heap-base #xb0 :flag-assert #x1400b00118 + (:states + robber-die + robber-dead + robber-initial + robber-initial-notice + robber-flee + robber-got-away + robber-tired + robber-idle + robber-debug) ) ;; - Functions (define-extern robber-find-ground (function symbol :behavior robber)) (define-extern robber-move (function float :behavior robber)) -(define-extern robber-calc-speed (function float float vector vector symbol float :behavior robber)) +(define-extern robber-calc-speed (function float float float float symbol float :behavior robber)) (define-extern robber-rotate (function target float vector :behavior robber)) (define-extern robber-calc-anim-speed (function float :behavior robber)) (define-extern robber-task-complete? (function symbol :behavior robber)) @@ -34280,16 +34290,7 @@ ;; - Unknowns (define-extern *robber-sg* skeleton-group) -(define-extern robber-die (state robber)) ;; unknown type -(define-extern robber-dead (state robber)) ;; unknown type -(define-extern robber-initial (state robber)) ;; unknown type -(define-extern robber-initial-notice (state robber)) ;; unknown type -(define-extern robber-flee (state robber)) ;; unknown type -(define-extern robber-got-away (state robber)) ;; unknown type -(define-extern robber-tired (state robber)) ;; unknown type -(define-extern robber-idle (state robber)) ;; unknown type (define-extern fuel-cell-spline-slider (state handle float float fuel-cell)) ;; unknown type -(define-extern robber-debug (state robber)) ;; unknown type ;; ---------------------- @@ -35369,19 +35370,25 @@ :size-assert #xc4 :heap-base #x60 :flag-assert #x14006000c4 + (:states + snow-eggtop-idle-down + snow-eggtop-idle-up + snow-eggtop-activate) ) (deftype snowpusher (process-drawable) ((root-override collide-shape-moving :score 100 :offset 112) (max-frame float :offset-assert 176) - (open-sound uint128 :offset-assert 192) - (close-sound uint128 :offset-assert 208) + (open-sound sound-name :offset-assert 192) + (close-sound sound-name :offset-assert 208) (sync sync-info-paused :inline :offset-assert 224) ) :method-count-assert 20 :size-assert #xf0 :heap-base #x80 :flag-assert #x14008000f0 + (:states + snowpusher-idle) ) (deftype snow-spatula (baseplat) @@ -35392,6 +35399,8 @@ :size-assert #x130 :heap-base #xc0 :flag-assert #x1b00c00130 + (:states + snow-spatula-idle) ) (deftype snow-fort-gate (process-drawable) @@ -35405,6 +35414,10 @@ :size-assert #xe0 :heap-base #x70 :flag-assert #x14007000e0 + (:states + snow-fort-gate-idle-open + snow-fort-gate-idle-closed + snow-fort-gate-activate) ) (deftype snow-gears (process-drawable) @@ -35416,6 +35429,11 @@ (:methods (TODO-RENAME-20 (_type_) none 20) ) + (:states + snow-gears-idle + snow-gears-stopped + snow-gears-halt + snow-gears-activate) ) (deftype snow-switch (process-drawable) @@ -35428,6 +35446,10 @@ :size-assert #xd0 :heap-base #x60 :flag-assert #x14006000d0 + (:states + snow-switch-idle-down + snow-switch-idle-up + snow-switch-activate) ) (deftype snow-log (process-drawable) @@ -35438,6 +35460,11 @@ :size-assert #xb4 :heap-base #x50 :flag-assert #x14005000b4 + (:states + snow-log-wait-for-master + snow-log-active + snow-log-activate + snow-log-hidden) ) (deftype snow-log-button (process-drawable) @@ -35449,6 +35476,10 @@ :size-assert #xd0 :heap-base #x60 :flag-assert #x14006000d0 + (:states + snow-log-button-idle-down + snow-log-button-idle-up + snow-log-button-activate) ) ;; - Functions @@ -35459,35 +35490,13 @@ ;; - Unknowns (define-extern *snow-switch-sg* skeleton-group) -(define-extern snow-log-button-idle-down (state snow-log-button)) ;; unknown type -(define-extern snow-log-button-idle-up (state snow-log-button)) ;; unknown type -(define-extern snow-log-button-activate (state snow-log-button)) ;; unknown type (define-extern *snow-log-sg* skeleton-group) -(define-extern snow-log-wait-for-master (state snow-log)) ;; unknown type -(define-extern snow-log-active (state snow-log)) ;; unknown type -(define-extern snow-log-activate (state snow-log)) ;; unknown type -(define-extern snow-log-hidden (state snow-log)) ;; unknown type -(define-extern snow-switch-idle-down (state snow-switch)) ;; unknown type -(define-extern snow-switch-idle-up (state snow-switch)) ;; unknown type (define-extern *snowcam-sg* skeleton-group) -(define-extern snow-switch-activate (state snow-switch)) ;; unknown type (define-extern *snow-gears-sg* skeleton-group) -(define-extern snow-gears-idle (state snow-gears)) ;; unknown type -(define-extern snow-gears-stopped (state snow-gears)) ;; unknown type -(define-extern snow-gears-halt (state snow-gears)) ;; unknown type -(define-extern snow-gears-activate (state snow-gears)) ;; unknown type (define-extern *snow-fort-gate-sg* skeleton-group) -(define-extern snow-fort-gate-idle-open (state snow-fort-gate)) ;; unknown type -(define-extern snow-fort-gate-idle-closed (state snow-fort-gate)) ;; unknown type -(define-extern snow-fort-gate-activate (state snow-fort-gate)) ;; unknown type (define-extern *snow-spatula-sg* skeleton-group) -(define-extern snow-spatula-idle (state snow-spatula)) ;; unknown type (define-extern *snowpusher-sg* skeleton-group) -(define-extern snowpusher-idle (state snowpusher)) ;; unknown type (define-extern *snow-eggtop-sg* skeleton-group) -(define-extern snow-eggtop-idle-down (state snow-eggtop)) ;; unknown type -(define-extern snow-eggtop-idle-up (state snow-eggtop)) ;; unknown type -(define-extern snow-eggtop-activate (state snow-eggtop)) ;; unknown type ;; ---------------------- @@ -35916,7 +35925,7 @@ (deftype darkecobarrel (darkecobarrel-base) ((self-override darkecobarrel :score 100 :offset 28) - (spawn-array (array handle) :offset-assert 192) ;; likely to darkecobarrels + (spawn-array (array int64) :offset-assert 192) ;; likely to darkecobarrels (cur-spawn int32 :offset-assert 196) ) :method-count-assert 20 @@ -35987,12 +35996,12 @@ (define-extern darkecobarrel-base-init (function res-lump path-control-flag :behavior darkecobarrel-base)) (define-extern darkecobarrel-base-time (function int :behavior darkecobarrel-base)) -(define-extern darkecobarrel-cycle-time (function handle :behavior darkecobarrel)) ;; likely to darkecobarrels +(define-extern darkecobarrel-cycle-time (function int :behavior darkecobarrel)) ;; likely to darkecobarrels (define-extern darkecobarrel-advance-curspawn (function none :behavior darkecobarrel)) (define-extern darkecobarrel-mover-init-by-other (function res-lump float uint uint none :behavior darkecobarrel-mover)) (define-extern darkecobarrel-base-done? (function float symbol :behavior darkecobarrel-base)) (define-extern darkecobarrel-base-pos (function int float :behavior darkecobarrel-base)) -(define-extern darkecobarrel-mover-pos (function uint :behavior darkecobarrel-mover)) +(define-extern darkecobarrel-mover-pos (function none :behavior darkecobarrel-mover)) ;; - Unknowns diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index c4c7836945..c44584b662 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -4682,7 +4682,7 @@ "robber-find-ground": [ [16, "vector"], - [32, "collide-mesh-cache-tri"], + [32, "collide-tri-result"], [128, "vector"] ], diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index d09d662224..2b5f2b520e 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -4779,6 +4779,7 @@ ], "(code snow-eggtop-activate)": [ + [56, "v1", "snowcam"], [87, "v1", "art-joint-anim"] ], @@ -4808,8 +4809,7 @@ [12, "v1", "art-joint-anim"], [62, "v1", "art-joint-anim"], [112, "v1", "art-joint-anim"], - [242, "gp", "handle"], - [245, "gp", "handle"], + [[242, 249], "gp", "handle"], [274, "v1", "art-joint-anim"], [346, "v1", "art-joint-anim"] ], @@ -7356,13 +7356,24 @@ "ray-cylinder-intersect": [ [20, "v1", "uint"], [20, "a0", "uint"] - // [25, "v1", "uint"], - // [25, "a0", "uint"] ], "(anon-function 15 pelican)": [ [24, "v1", "collectable"] ], + "(method 11 darkecobarrel)": [ + ["_stack_", 16, "res-tag"] + ], + + "(method 11 snowpusher)": [ + ["_stack_", 16, "res-tag"], + [19, "v0", "(pointer int32)"] + ], + + "(code snow-switch-activate)": [ + [53, "v1", "snowcam"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc index d9b8d4d619..38b4796b87 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -3857,5 +3857,11 @@ } }, + "(code pov-camera-playing snowcam)": { + "vars": { + "gp-2": ["gp-2", "handle"] + } + }, + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/goal_src/engine/geometry/vol.gc b/goal_src/engine/geometry/vol.gc index 24971afaba..6e47a897eb 100644 --- a/goal_src/engine/geometry/vol.gc +++ b/goal_src/engine/geometry/vol.gc @@ -221,8 +221,7 @@ (when (and (and *display-vol-marks* (logtest? (-> a0-1 flags) 1)) (logtest? (-> obj flags) 2)) (when (zero? (-> obj debug-point)) (let ((s5-0 pp)) - (let ((s6-1 (-> obj process))) - ) + (set! pp (-> obj process)) (let ((s4-0 0)) (dotimes (v1-8 (-> obj pos-vol-count)) (+! s4-0 (-> obj pos-vol v1-8 num-planes)) @@ -233,8 +232,7 @@ (set! (-> obj debug-point) (new 'debug 'vector-array (* 10 s4-0))) (set! (-> obj debug-normal) (new 'debug 'vector-array (* 10 s4-0))) ) - (let ((s6-2 s5-0)) - ) + (set! pp s5-0) ) (set! (-> obj debug-point length) 0) (set! (-> obj debug-normal length) 0) diff --git a/goal_src/engine/gfx/water/water-h.gc b/goal_src/engine/gfx/water/water-h.gc index 7914a22df7..d14d39d716 100644 --- a/goal_src/engine/gfx/water/water-h.gc +++ b/goal_src/engine/gfx/water/water-h.gc @@ -113,33 +113,19 @@ (and *display-water-marks* (logtest? (-> obj flags) 1)) ) -(defmethod - new - water-control - ((allocation symbol) - (type-to-make type) - (arg0 process) - (arg1 int) - (arg2 float) - (arg3 float) - (arg4 float) - ) - (let - ((v0-0 - (object-new allocation type-to-make (the-as int (-> type-to-make size))) - ) +(defmethod new water-control ((allocation symbol) (type-to-make type) (arg0 process) (arg1 int) (arg2 float) (arg3 float) (arg4 float)) + (let ((v0-0 (object-new allocation type-to-make (the-as int (-> type-to-make size))))) + (set! (-> v0-0 process) (the-as process-drawable arg0)) + (set! (-> v0-0 joint-index) arg1) + (set! (-> v0-0 wade-height) arg4) + (set! (-> v0-0 swim-height) arg3) + (set! (-> v0-0 bottom-height) 32768.0) + (set! (-> v0-0 ripple-size) 1638.4) + (set! (-> v0-0 volume) (the-as handle #f)) + (set! (-> v0-0 drip-mult) 1.0) + (set! (-> v0-0 top-y-offset) arg2) + v0-0 ) - (set! (-> v0-0 process) (the-as process-drawable arg0)) - (set! (-> v0-0 joint-index) arg1) - (set! (-> v0-0 wade-height) arg4) - (set! (-> v0-0 swim-height) arg3) - (set! (-> v0-0 bottom-height) 32768.0) - (set! (-> v0-0 ripple-size) 1638.4) - (set! (-> v0-0 volume) (the-as handle #f)) - (set! (-> v0-0 drip-mult) 1.0) - (set! (-> v0-0 top-y-offset) arg2) - v0-0 - ) ) (defmethod distance-from-surface water-control ((obj water-control)) @@ -162,7 +148,7 @@ (:methods (water-vol-idle () _type_ :state 20) (water-vol-startup () _type_ :state 21) - (TODO-RENAME-22 (_type_) ripple-wave-set 22) + (TODO-RENAME-22 (_type_) none 22) (reset-root! (_type_) none 23) (set-stack-size! (_type_) none 24) (TODO-RENAME-25 (_type_) object 25) diff --git a/goal_src/engine/gfx/water/water.gc b/goal_src/engine/gfx/water/water.gc index 20f971224f..a77bdc26fa 100644 --- a/goal_src/engine/gfx/water/water.gc +++ b/goal_src/engine/gfx/water/water.gc @@ -7,919 +7,793 @@ ;; DECOMP BEGINS -(set! - (-> *part-id-table* 108) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 16 - (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.6) 1.0) - (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.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 64.0 64.0 1.0) - (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.001) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) - (sp-int spt-next-time 150) - (sp-launcher-by-id spt-next-launcher 109) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 108) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.6) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.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 64.0 64.0 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.001) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 109) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 109) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 2 - (sp-flt spt-fade-a -0.2) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 109) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.2) (sp-end)) + ) + ) -(defun - birth-func-y->userdata - ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) +(defun birth-func-y->userdata ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) (+! (-> arg1 user-float) (-> arg2 vector 0 y)) 0 (none) ) -(defun - birth-func-ocean-height - ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) - (set! - (-> arg2 vector 0 y) - (+ (ocean-get-height (the-as vector (-> arg2 vector))) (-> arg1 user-float)) - ) +(defun birth-func-ocean-height ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) + (set! (-> arg2 vector 0 y) (+ (ocean-get-height (the-as vector (-> arg2 vector))) (-> arg1 user-float))) 0 (none) ) -(defun - check-water-level-drop - ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) +(defun check-water-level-drop ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) (when (and (< (-> arg2 y) (-> arg1 user-float)) (< (-> arg1 vel-sxvel y) 0.0)) - (let ((s5-0 (new 'stack-no-clear 'vector))) - (sp-kill-particle arg0 arg1) - (set-vector! s5-0 (-> arg2 x) (-> arg1 user-float) (-> arg2 z) 1.0) - (sound-play-by-name - (static-sound-name "water-drop") - (new-sound-id) - 1024 - 0 - 0 - 1 - (the-as symbol s5-0) - ) - (sp-launch-particles-var - *sp-particle-system-3d* - (-> *part-id-table* 108) - s5-0 - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (sp-kill-particle arg0 arg1) + (set-vector! s5-0 (-> arg2 x) (-> arg1 user-float) (-> arg2 z) 1.0) + (sound-play-by-name (static-sound-name "water-drop") (new-sound-id) 1024 0 0 1 (the-as symbol s5-0)) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 108) + s5-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) ) - ) 0 (none) ) -(defun - check-water-level-drop-and-die - ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) +(defun check-water-level-drop-and-die ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) (if (and (< (-> arg2 y) (-> arg1 user-float)) (< (-> arg1 vel-sxvel y) 0.0)) - (sp-kill-particle arg0 arg1) - ) + (sp-kill-particle arg0 arg1) + ) (none) ) -(defun - check-water-level-above-and-die - ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) +(defun check-water-level-above-and-die ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 vector)) (if (>= (-> arg2 y) (-> arg1 user-float)) - (sp-kill-particle arg0 arg1) - ) + (sp-kill-particle arg0 arg1) + ) (none) ) -(set! - (-> *part-id-table* 110) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 21 - (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) - (sp-flt spt-num 12.0) - (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0) - (sp-rnd-flt spt-y (meters -0.05) (meters 0.1) 1.0) - (sp-rnd-flt spt-z -1024.0 2048.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.05) (meters 0.05) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-rnd-flt spt-a 24.0 40.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.006666667) 1.0) - (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) - (sp-flt spt-friction 0.96) - (sp-int spt-timer 1500) - (sp-cpuinfo-flags bit2 bit3) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-above-and-die) - (sp-flt spt-conerot-x (degrees 90.0)) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 110) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 12.0) + (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0) + (sp-rnd-flt spt-y (meters -0.05) (meters 0.1) 1.0) + (sp-rnd-flt spt-z -1024.0 2048.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.05) (meters 0.05) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 24.0 40.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags bit2 bit3) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-above-and-die) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 111) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 21 - (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) - (sp-flt spt-num 0.1) - (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0) - (sp-flt spt-y (meters 0.15)) - (sp-rnd-flt spt-z -1024.0 2048.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.05) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-rnd-flt spt-a 40.0 24.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.006666667) 1.0) - (sp-flt spt-accel-y 1.3653333) - (sp-flt spt-friction 0.96) - (sp-int spt-timer 1500) - (sp-cpuinfo-flags bit2 bit3) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-above-and-die) - (sp-flt spt-conerot-x (degrees 90.0)) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 111) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 0.1) + (sp-rnd-flt spt-x (meters -0.25) (meters 0.5) 1.0) + (sp-flt spt-y (meters 0.15)) + (sp-rnd-flt spt-z -1024.0 2048.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.05) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 40.0 24.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.006666667) 1.0) + (sp-flt spt-accel-y 1.3653333) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags bit2 bit3) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-above-and-die) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 112) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 19 - (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) - (sp-flt spt-num 0.05) - (sp-rnd-flt spt-x (meters -1.0) (meters 2.0) 1.0) - (sp-rnd-flt spt-z -4096.0 8192.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.5) 1.0) - (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.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-flt spt-a 0.0) - (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.001) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a 0.42666668) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) - (sp-int spt-next-time 150) - (sp-launcher-by-id spt-next-launcher 113) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 112) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 0.05) + (sp-rnd-flt spt-x (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -4096.0 8192.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.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-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.001) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.42666668) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 113) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 113) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 4 - (sp-flt spt-fade-a 0.0) - (sp-int spt-next-time 360) - (sp-launcher-by-id spt-next-launcher 114) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 113) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a 0.0) + (sp-int spt-next-time 360) + (sp-launcher-by-id spt-next-launcher 114) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 114) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 2 - (sp-flt spt-fade-a -0.7111111) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 114) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.7111111) (sp-end)) + ) + ) -(set! - (-> *part-id-table* 115) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 19 - (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) - (sp-rnd-flt spt-num 0.04 0.03 1.0) - (sp-rnd-flt spt-x (meters -0.2) (meters 0.4) 1.0) - (sp-rnd-flt spt-z -819.2 1638.4 1.0) - (sp-flt spt-scale-x (meters 0.5)) - (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.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-flt spt-a 0.0) - (sp-flt spt-scalevel-x (meters 0.008333334)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a 0.64) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) - (sp-int spt-next-time 150) - (sp-launcher-by-id spt-next-launcher 116) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 115) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-rnd-flt spt-num 0.04 0.03 1.0) + (sp-rnd-flt spt-x (meters -0.2) (meters 0.4) 1.0) + (sp-rnd-flt spt-z -819.2 1638.4 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.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-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.008333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.64) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 116) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 116) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 6 - (sp-flt spt-scalevel-x (meters 0.006666667)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a 0.0) - (sp-int spt-next-time 150) - (sp-launcher-by-id spt-next-launcher 117) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 116) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 6 + (sp-flt spt-scalevel-x (meters 0.006666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.0) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 117) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 117) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 4 - (sp-flt spt-scalevel-x (meters 0.005)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.32) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 117) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.32) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 118) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 21 - (sp-tex spt-texture (new 'static 'texture-id :index #xa :page #x2)) - (sp-flt spt-num 0.06) - (sp-flt spt-x (meters 10.0)) - (sp-rnd-flt spt-scale-x (meters 0.75) (meters 1.5) 1.0) - (sp-flt spt-rot-y (degrees 0.0)) - (sp-rnd-flt spt-scale-y (meters 0.75) (meters 1.5) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 0.0) - (sp-rnd-flt spt-vel-x (meters 0.01) (meters 0.006666667) 1.0) - (sp-rnd-flt spt-scalevel-x (meters 0.0033333334) (meters 0.004333333) 1.0) - (sp-rnd-flt spt-scalevel-y (meters 0.0033333334) (meters 0.004333333) 1.0) - (sp-flt spt-fade-a 0.7111111) - (sp-flt spt-friction 0.94) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) - (sp-int spt-next-time 90) - (sp-launcher-by-id spt-next-launcher 119) - (sp-flt spt-rotate-y (degrees 0.0)) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 118) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xa :page #x2)) + (sp-flt spt-num 0.06) + (sp-flt spt-x (meters 10.0)) + (sp-rnd-flt spt-scale-x (meters 0.75) (meters 1.5) 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-rnd-flt spt-scale-y (meters 0.75) (meters 1.5) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters 0.01) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0033333334) (meters 0.004333333) 1.0) + (sp-rnd-flt spt-scalevel-y (meters 0.0033333334) (meters 0.004333333) 1.0) + (sp-flt spt-fade-a 0.7111111) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 119) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 119) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 4 - (sp-flt spt-fade-a 0.0) - (sp-int-plain-rnd spt-next-time 90 119 1) - (sp-launcher-by-id spt-next-launcher 120) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 119) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a 0.0) + (sp-int-plain-rnd spt-next-time 90 119 1) + (sp-launcher-by-id spt-next-launcher 120) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 120) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 2 - (sp-flt spt-fade-a -0.21333334) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 120) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.21333334) (sp-end)) + ) + ) -(set! - (-> *part-id-table* 121) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 20 - (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) - (sp-rnd-flt spt-num 0.05 0.4 1.0) - (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) - (sp-rnd-flt spt-z 2048.0 6144.0 1.0) - (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.7) 1.0) - (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.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-flt spt-a 0.0) - (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.003) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a 0.42666668) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) - (sp-int spt-next-time 150) - (sp-launcher-by-id spt-next-launcher 122) - (sp-flt spt-rotate-y (degrees 0.0)) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 121) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-rnd-flt spt-num 0.05 0.4 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-z 2048.0 6144.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.7) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.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-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.0016666667) (meters 0.003) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.42666668) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 122) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 122) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 4 - (sp-flt spt-fade-a 0.0) - (sp-int spt-next-time 360) - (sp-launcher-by-id spt-next-launcher 123) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 122) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a 0.0) + (sp-int spt-next-time 360) + (sp-launcher-by-id spt-next-launcher 123) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 123) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 2 - (sp-flt spt-fade-a -0.7111111) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 123) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.7111111) (sp-end)) + ) + ) -(set! - (-> *part-group-id-table* 40) - (new 'static 'sparticle-launch-group - :length 30 - :duration #x384 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-part-water-splash" - :launcher - (new 'static 'inline-array sparticle-group-item 30 - (sp-item 124 :flags (is-3d) :period 900 :length 63) - (sp-item 125 :period 900 :length 15) - (sp-item 126 :flags (is-3d) :period 900 :length 15) - (sp-item 127 :flags (is-3d) :period 900 :length 15) - (sp-item 128 :period 900 :length 15 :binding 129) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 130 :flags (is-3d) :period 900 :length 15 :offset 840) - (sp-item 131 :flags (is-3d) :period 900 :length 60 :offset 840) - (sp-item 132 :period 900 :length 10 :offset 840 :binding 133) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) - ) - :bounds - (new 'static 'sphere :y -49152.0 :w 57344.0) - ) - ) +(set! (-> *part-group-id-table* 40) (new 'static 'sparticle-launch-group + :length 30 + :duration #x384 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-part-water-splash" + :launcher + (new 'static 'inline-array sparticle-group-item 30 + (sp-item 124 :flags (is-3d) :period 900 :length 63) + (sp-item 125 :period 900 :length 15) + (sp-item 126 :flags (is-3d) :period 900 :length 15) + (sp-item 127 :flags (is-3d) :period 900 :length 15) + (sp-item 128 :period 900 :length 15 :binding 129) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 130 :flags (is-3d) :period 900 :length 15 :offset 840) + (sp-item 131 :flags (is-3d) :period 900 :length 60 :offset 840) + (sp-item 132 :period 900 :length 10 :offset 840 :binding 133) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + (sp-item 133 :flags (start-dead) :period 900 :length 120 :offset 840) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) -(set! - (-> *part-group-id-table* 41) - (new 'static 'sparticle-launch-group - :length 16 - :duration #x384 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-part-water-splash-small" - :launcher - (new 'static 'inline-array sparticle-group-item 16 - (sp-item 124 :flags (is-3d) :period 900 :length 63) - (sp-item 125 :period 900 :length 15) - (sp-item 126 :flags (is-3d) :period 900 :length 15) - (sp-item 127 :flags (is-3d) :period 900 :length 15) - (sp-item 128 :period 900 :length 10 :binding 129) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - ) - :bounds - (new 'static 'sphere :y -49152.0 :w 57344.0) - ) - ) +(set! (-> *part-group-id-table* 41) (new 'static 'sparticle-launch-group + :length 16 + :duration #x384 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-part-water-splash-small" + :launcher + (new 'static 'inline-array sparticle-group-item 16 + (sp-item 124 :flags (is-3d) :period 900 :length 63) + (sp-item 125 :period 900 :length 15) + (sp-item 126 :flags (is-3d) :period 900 :length 15) + (sp-item 127 :flags (is-3d) :period 900 :length 15) + (sp-item 128 :period 900 :length 10 :binding 129) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) -(set! - (-> *part-id-table* 129) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 18 - (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) - (sp-flt spt-num 0.4) - (sp-rnd-flt spt-x (meters -0.2) (meters 0.4) 1.0) - (sp-rnd-flt spt-y (meters -0.2) (meters 0.4) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.05) (meters 0.15) 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 40.0 24.0 1.0) - (sp-flt spt-scalevel-x (meters 0.000033333334)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-rnd-flt spt-accel-y -1.6384001 -0.81920004 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit3) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-drop-and-die) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 129) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 0.4) + (sp-rnd-flt spt-x (meters -0.2) (meters 0.4) 1.0) + (sp-rnd-flt spt-y (meters -0.2) (meters 0.4) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.05) (meters 0.15) 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 40.0 24.0 1.0) + (sp-flt spt-scalevel-x (meters 0.000033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -1.6384001 -0.81920004 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit3) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop-and-die) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 133) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 18 - (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) - (sp-flt spt-num 0.4) - (sp-rnd-flt spt-x (meters -0.2) (meters 0.4) 1.0) - (sp-rnd-flt spt-y (meters -0.2) (meters 0.4) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.05) (meters 0.15) 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 40.0 24.0 1.0) - (sp-flt spt-scalevel-x (meters 0.000033333334)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-rnd-flt spt-accel-y -1.6384001 -0.81920004 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit3) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-drop-and-die) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 133) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 0.4) + (sp-rnd-flt spt-x (meters -0.2) (meters 0.4) 1.0) + (sp-rnd-flt spt-y (meters -0.2) (meters 0.4) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.05) (meters 0.15) 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 40.0 24.0 1.0) + (sp-flt spt-scalevel-x (meters 0.000033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -1.6384001 -0.81920004 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit3) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop-and-die) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 131) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) - (sp-flt spt-num 0.3) - (sp-rnd-flt spt-scale-x (meters 0.080000006) (meters 0.32000002) 1.0) - (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.080000006) (meters 0.32000002) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 0.0) - (sp-rnd-flt spt-scalevel-x (meters 0.004) (meters 0.0090666665) 1.0) - (sp-rnd-flt spt-scalevel-y (meters 0.004) (meters 0.0090666665) 1.0) - (sp-flt spt-fade-a 0.32) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) - (sp-int spt-next-time 150) - (sp-launcher-by-id spt-next-launcher 134) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 131) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 0.3) + (sp-rnd-flt spt-scale-x (meters 0.080000006) (meters 0.32000002) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.080000006) (meters 0.32000002) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.004) (meters 0.0090666665) 1.0) + (sp-rnd-flt spt-scalevel-y (meters 0.004) (meters 0.0090666665) 1.0) + (sp-flt spt-fade-a 0.32) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 134) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 132) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 23 - (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) - (sp-flt spt-num 3.2) - (sp-rnd-flt spt-x (meters -0.2) (meters 0.4) 1.0) - (sp-rnd-flt spt-y (meters -0.2) (meters 0.4) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.075) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.075) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-rnd-flt spt-a 40.0 24.0 1.0) - (sp-rnd-flt spt-vel-x (meters -0.002) (meters 0.004) 1.0) - (sp-rnd-flt spt-vel-y (meters 0.018666666) (meters 0.0053333333) 1.0) - (sp-rnd-flt spt-vel-z (meters -0.002) (meters 0.004) 1.0) - (sp-flt spt-scalevel-x (meters -0.00066666666)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-rnd-flt spt-accel-y -3.2768002 -0.81920004 1.0) - (sp-int spt-timer 900) - (sp-cpuinfo-flags bit3) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-drop) - (sp-int spt-next-time 120) - (sp-launcher-by-id spt-next-launcher 135) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 132) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 3.2) + (sp-rnd-flt spt-x (meters -0.2) (meters 0.4) 1.0) + (sp-rnd-flt spt-y (meters -0.2) (meters 0.4) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.075) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.075) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 40.0 24.0 1.0) + (sp-rnd-flt spt-vel-x (meters -0.002) (meters 0.004) 1.0) + (sp-rnd-flt spt-vel-y (meters 0.018666666) (meters 0.0053333333) 1.0) + (sp-rnd-flt spt-vel-z (meters -0.002) (meters 0.004) 1.0) + (sp-flt spt-scalevel-x (meters -0.00066666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -3.2768002 -0.81920004 1.0) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit3) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-int spt-next-time 120) + (sp-launcher-by-id spt-next-launcher 135) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 130) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #x10 :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 0.24000001) (meters 0.71999997) 1.0) - (sp-flt spt-rot-x 16384.0) - (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-flt spt-rot-z (degrees 0.0)) - (sp-rnd-flt spt-scale-y (meters 0.8) (meters 1.7600001) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-rnd-flt spt-scalevel-y (meters 0.053333335) (meters 0.013333334) 1.0) - (sp-int spt-timer 240) - (sp-cpuinfo-flags bit2 bit3 left-multiply-quat set-conerot) - (sp-int-plain-rnd spt-next-time 20 19 1) - (sp-launcher-by-id spt-next-launcher 136) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 130) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x10 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.24000001) (meters 0.71999997) 1.0) + (sp-flt spt-rot-x 16384.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-rnd-flt spt-scale-y (meters 0.8) (meters 1.7600001) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-scalevel-y (meters 0.053333335) (meters 0.013333334) 1.0) + (sp-int spt-timer 240) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat set-conerot) + (sp-int-plain-rnd spt-next-time 20 19 1) + (sp-launcher-by-id spt-next-launcher 136) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 136) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 4 - (sp-flt spt-scalevel-y (meters 0.026666667)) - (sp-int spt-next-time 20) - (sp-launcher-by-id spt-next-launcher 137) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 136) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-scalevel-y (meters 0.026666667)) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 137) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 137) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 5 - (sp-flt spt-scalevel-y (meters 0.0)) - (sp-flt spt-fade-a -0.64) - (sp-int spt-next-time 20) - (sp-launcher-by-id spt-next-launcher 138) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 137) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-scalevel-y (meters 0.0)) + (sp-flt spt-fade-a -0.64) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 138) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 138) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 5 - (sp-flt spt-scalevel-x (meters 0.0016666667)) - (sp-flt spt-scalevel-y (meters -0.026666667)) - (sp-int spt-next-time 20) - (sp-launcher-by-id spt-next-launcher 139) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 138) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-flt spt-scalevel-y (meters -0.026666667)) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 139) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 139) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 3 - (sp-flt spt-scalevel-x (meters 0.0033333334)) - (sp-flt spt-scalevel-y (meters -0.053333335)) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 139) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 3 + (sp-flt spt-scalevel-x (meters 0.0033333334)) + (sp-flt spt-scalevel-y (meters -0.053333335)) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 126) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 2.4) (meters 1.6) 1.0) - (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-rnd-flt spt-scale-y (meters 2.4) (meters 1.6) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 0.0) - (sp-rnd-flt spt-scalevel-x (meters 0.004) (meters 0.0037333334) 1.0) - (sp-rnd-flt spt-scalevel-y (meters 0.004) (meters 0.0037333334) 1.0) - (sp-flt spt-fade-a 0.32) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) - (sp-int spt-next-time 150) - (sp-launcher-by-id spt-next-launcher 134) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 126) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 2.4) (meters 1.6) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 2.4) (meters 1.6) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.004) (meters 0.0037333334) 1.0) + (sp-rnd-flt spt-scalevel-y (meters 0.004) (meters 0.0037333334) 1.0) + (sp-flt spt-fade-a 0.32) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 134) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 134) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 4 - (sp-flt spt-fade-a 0.0) - (sp-int spt-next-time 360) - (sp-launcher-by-id spt-next-launcher 140) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 134) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a 0.0) + (sp-int spt-next-time 360) + (sp-launcher-by-id spt-next-launcher 140) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 140) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 2 - (sp-flt spt-fade-a -0.53333336) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 140) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.53333336) (sp-end)) + ) + ) -(set! - (-> *part-id-table* 127) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 19 - (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) - (sp-rnd-flt spt-num 0.5 1.0 1.0) - (sp-rnd-flt spt-x (meters -0.4) (meters 0.8) 1.0) - (sp-rnd-flt spt-y (meters -0.4) (meters 0.8) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0) - (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.4) (meters 0.8) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 0.0) - (sp-rnd-flt spt-scalevel-x (meters 0.004) (meters 0.0026666666) 1.0) - (sp-rnd-flt spt-scalevel-y (meters 0.004) (meters 0.0026666666) 1.0) - (sp-flt spt-fade-a 0.32) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) - (sp-int spt-next-time 150) - (sp-launcher-by-id spt-next-launcher 134) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 127) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-rnd-flt spt-num 0.5 1.0 1.0) + (sp-rnd-flt spt-x (meters -0.4) (meters 0.8) 1.0) + (sp-rnd-flt spt-y (meters -0.4) (meters 0.8) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.4) (meters 0.8) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.004) (meters 0.0026666666) 1.0) + (sp-rnd-flt spt-scalevel-y (meters 0.004) (meters 0.0026666666) 1.0) + (sp-flt spt-fade-a 0.32) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 134) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 128) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 22 - (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) - (sp-flt spt-num 3.2) - (sp-flt spt-x (meters 0.96000004)) - (sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.075) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.075) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-rnd-flt spt-a 40.0 24.0 1.0) - (sp-rnd-flt spt-vel-x (meters 0.0026666666) (meters 0.0053333333) 1.0) - (sp-rnd-flt spt-vel-y (meters 0.016) (meters 0.0053333333) 1.0) - (sp-flt spt-scalevel-x (meters -0.00066666666)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-rnd-flt spt-accel-y -3.2768002 -0.81920004 1.0) - (sp-int spt-timer 900) - (sp-cpuinfo-flags bit3) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-drop) - (sp-int spt-next-time 120) - (sp-launcher-by-id spt-next-launcher 135) - (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 128) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 3.2) + (sp-flt spt-x (meters 0.96000004)) + (sp-rnd-flt spt-scale-x (meters 0.35) (meters 0.075) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.2) (meters 0.075) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 40.0 24.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.0026666666) (meters 0.0053333333) 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016) (meters 0.0053333333) 1.0) + (sp-flt spt-scalevel-x (meters -0.00066666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -3.2768002 -0.81920004 1.0) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit3) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-int spt-next-time 120) + (sp-launcher-by-id spt-next-launcher 135) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 135) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 3 - (sp-flt spt-scalevel-x (meters 0.0)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 135) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 3 + (sp-flt spt-scalevel-x (meters 0.0)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 125) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 20 - (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) - (sp-flt spt-num 8.0) - (sp-flt spt-x (meters 0.8)) - (sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.05) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.05) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-rnd-flt spt-a 40.0 24.0 1.0) - (sp-rnd-flt spt-vel-x (meters 0.0026666666) (meters 0.0053333333) 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0053333333) (meters 0.0053333333) 1.0) - (sp-flt spt-scalevel-x (meters -0.00033333333)) - (sp-flt spt-scalevel-y (meters -0.00033333333)) - (sp-rnd-flt spt-accel-y -2.1845336 -0.5461334 1.0) - (sp-int spt-timer 375) - (sp-cpuinfo-flags bit2 bit3) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-drop-and-die) - (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 125) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 8.0) + (sp-flt spt-x (meters 0.8)) + (sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.05) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.15) (meters 0.05) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 40.0 24.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.0026666666) (meters 0.0053333333) 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0053333333) (meters 0.0053333333) 1.0) + (sp-flt spt-scalevel-x (meters -0.00033333333)) + (sp-flt spt-scalevel-y (meters -0.00033333333)) + (sp-rnd-flt spt-accel-y -2.1845336 -0.5461334 1.0) + (sp-int spt-timer 375) + (sp-cpuinfo-flags bit2 bit3) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop-and-die) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 124) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 22 - (sp-tex spt-texture (new 'static 'texture-id :index #x10 :page #x2)) - (sp-flt spt-num 1.5) - (sp-rnd-flt spt-x (meters 0.96000004) (meters 0.16000001) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.32000002) (meters 0.96000004) 1.0) - (sp-flt spt-rot-x 16384.0) - (sp-flt spt-rot-y (degrees 90.0)) - (sp-flt spt-rot-z (degrees 0.0)) - (sp-rnd-flt spt-scale-y (meters 0.16000001) (meters 1.7600001) 1.0) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-rnd-flt spt-a 48.0 24.0 1.0) - (sp-flt spt-vel-x (meters 0.0026666666)) - (sp-rnd-flt spt-scalevel-x (meters 0.0) (meters 0.0016666667) 1.0) - (sp-flt spt-rotvel-x (degrees 0.2)) - (sp-flt spt-scalevel-y (meters 0.04)) - (sp-int spt-timer 240) - (sp-cpuinfo-flags bit2 bit3 left-multiply-quat set-conerot) - (sp-int-plain-rnd spt-next-time 20 19 1) - (sp-launcher-by-id spt-next-launcher 141) - (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 124) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #x10 :page #x2)) + (sp-flt spt-num 1.5) + (sp-rnd-flt spt-x (meters 0.96000004) (meters 0.16000001) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.32000002) (meters 0.96000004) 1.0) + (sp-flt spt-rot-x 16384.0) + (sp-flt spt-rot-y (degrees 90.0)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-rnd-flt spt-scale-y (meters 0.16000001) (meters 1.7600001) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 48.0 24.0 1.0) + (sp-flt spt-vel-x (meters 0.0026666666)) + (sp-rnd-flt spt-scalevel-x (meters 0.0) (meters 0.0016666667) 1.0) + (sp-flt spt-rotvel-x (degrees 0.2)) + (sp-flt spt-scalevel-y (meters 0.04)) + (sp-int spt-timer 240) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat set-conerot) + (sp-int-plain-rnd spt-next-time 20 19 1) + (sp-launcher-by-id spt-next-launcher 141) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 141) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 6 - (sp-flt spt-scalevel-x (meters 0.0)) - (sp-flt spt-rotvel-x (degrees 0.16666667)) - (sp-flt spt-scalevel-y (meters 0.016666668)) - (sp-int spt-next-time 20) - (sp-launcher-by-id spt-next-launcher 142) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 141) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 6 + (sp-flt spt-scalevel-x (meters 0.0)) + (sp-flt spt-rotvel-x (degrees 0.16666667)) + (sp-flt spt-scalevel-y (meters 0.016666668)) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 142) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 142) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 6 - (sp-flt spt-rotvel-x (degrees 0.13333334)) - (sp-flt spt-scalevel-y (meters 0.0)) - (sp-flt spt-fade-a -0.64) - (sp-int spt-next-time 20) - (sp-launcher-by-id spt-next-launcher 143) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 142) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 6 + (sp-flt spt-rotvel-x (degrees 0.13333334)) + (sp-flt spt-scalevel-y (meters 0.0)) + (sp-flt spt-fade-a -0.64) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 143) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 143) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 5 - (sp-flt spt-rotvel-x (degrees 0.1)) - (sp-flt spt-scalevel-y (meters -0.016666668)) - (sp-int spt-next-time 20) - (sp-launcher-by-id spt-next-launcher 144) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 143) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-rotvel-x (degrees 0.1)) + (sp-flt spt-scalevel-y (meters -0.016666668)) + (sp-int spt-next-time 20) + (sp-launcher-by-id spt-next-launcher 144) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 144) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 3 - (sp-flt spt-rotvel-x (degrees 0.06666667)) - (sp-flt spt-scalevel-y (meters -0.033333335)) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 144) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 3 + (sp-flt spt-rotvel-x (degrees 0.06666667)) + (sp-flt spt-scalevel-y (meters -0.033333335)) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 145) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 21 - (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.05) 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 40.0 24.0 1.0) - (sp-rnd-flt spt-vel-x (meters -0.016666668) (meters 0.0016666667) 1.0) - (sp-flt spt-vel-y (meters 0.016666668)) - (sp-rnd-flt spt-vel-z (meters -0.016666668) (meters 0.0016666667) 1.0) - (sp-flt spt-scalevel-x (meters -0.00016666666)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-accel-y -2.7306666) - (sp-int spt-timer 300) - (sp-cpuinfo-flags bit2 bit3) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-drop-and-die) - (sp-int spt-next-time 225) - (sp-launcher-by-id spt-next-launcher 114) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 145) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.15) (meters 0.05) 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 40.0 24.0 1.0) + (sp-rnd-flt spt-vel-x (meters -0.016666668) (meters 0.0016666667) 1.0) + (sp-flt spt-vel-y (meters 0.016666668)) + (sp-rnd-flt spt-vel-z (meters -0.016666668) (meters 0.0016666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.00016666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-accel-y -2.7306666) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop-and-die) + (sp-int spt-next-time 225) + (sp-launcher-by-id spt-next-launcher 114) + (sp-end) + ) + ) + ) (defmethod dummy-9 water-control ((obj water-control)) 0 @@ -928,715 +802,404 @@ (defmethod dummy-10 water-control ((obj water-control)) (with-pp - (let ((s5-0 (-> obj flags))) - (cond - ((zero? (logand (-> obj flags) 2)) - (set! (-> obj flags) (logand -97793 (-> obj flags))) - ) - ((and - (logtest? #x200000 (-> obj flags)) - (logtest? (-> obj process state-flags) 256) - ) - (set! (-> obj flags) (logior #x10000 (-> obj flags))) - ) - ((begin - (set! (-> obj top 1 quad) (-> obj top 0 quad)) - (vector<-cspace! - (the-as vector (-> obj top)) - (-> obj process node-list data (-> obj joint-index)) - ) - (+! (-> obj top 0 y) (-> obj top-y-offset)) - (set! (-> obj bottom 1 quad) (-> obj bottom 0 quad)) - (set! (-> obj bottom 0 quad) (-> obj process root trans quad)) - (set! (-> obj flags) (logand -31745 (-> obj flags))) - (set! (-> obj bob-offset) (update! (-> obj bob))) - (cond - ((and - (logtest? (-> obj flags) 256) - (zero? - (logand - (-> - (the-as collide-shape-moving (-> obj process root)) - root-prim - prim-core - action - ) - 512 - ) - ) - ) - (set! - (-> obj real-ocean-offset) - (- - (ocean-get-height (the-as vector (-> obj bottom))) - (-> obj base-height) - ) - ) - (if (zero? (logand (-> obj flags) 512)) - (set! (-> obj ocean-offset) (-> obj real-ocean-offset)) - (set! - (-> obj ocean-offset) - (lerp (-> obj ocean-offset) (-> obj real-ocean-offset) 0.2) - ) - ) - ) - ((logtest? #x100000 (-> obj flags)) - (let* ((a0-26 (-> obj volume process 0)) - (f30-0 - (ripple-find-height - (the-as process-drawable a0-26) - 0 - (the-as vector (-> obj bottom)) - ) - ) - ) - (set! (-> obj real-ocean-offset) (- f30-0 (-> obj base-height))) - (if (zero? (logand (-> obj flags) 512)) - (set! (-> obj ocean-offset) (-> obj real-ocean-offset)) - (set! - (-> obj ocean-offset) - (lerp (-> obj ocean-offset) (-> obj real-ocean-offset) 0.2) - ) - ) - (let ((v1-36 (new 'stack-no-clear 'vector))) - (set! (-> v1-36 quad) (-> obj bottom 0 quad)) - (set! (-> v1-36 y) f30-0) - ) - ) - ) - (else - (set! (-> obj real-ocean-offset) 0.0) - (set! (-> obj ocean-offset) 0.0) - ) - ) - (if - (logtest? - (-> - (the-as collide-shape-moving (-> obj process root)) - root-prim - prim-core - action - ) - 512 - ) - (set! (-> obj bob-offset) 0.0) - ) - (set! - (-> obj height) - (+ - (-> obj base-height) - (-> obj ocean-offset) - (-> obj bob-offset) - (-> obj align-offset) - ) - ) - (set! - (-> obj surface-height) - (+ (-> obj base-height) (-> obj real-ocean-offset)) - ) - (set! - (-> obj swim-depth) - (fmax - 0.0 - (- - (- (-> obj surface-height) (-> obj swim-height)) - (-> obj bottom 0 y) - ) - ) - ) - (>= (-> obj height) (-> obj bottom 0 y)) - ) - (if - (logtest? - (-> (the-as collide-shape-moving (-> obj process root)) status) - 1024 - ) - (set! - (-> obj on-water-time) - (the-as uint (-> *display* base-frame-counter)) - ) - ) - (set! (-> obj drip-wetness) 1.0) - (set! - (-> obj drip-height) - (fmax - (- (-> obj surface-height) (-> obj bottom 0 y)) - (-> obj drip-height) - ) - ) - (set! (-> obj drip-speed) 15.0) - (if (zero? (logand (-> obj flags) 512)) - (TODO-RENAME-15 obj) - ) + (let ((s5-0 (-> obj flags))) (cond - ((>= (-> obj top 0 y) (-> obj height)) - (let ((s4-0 (new 'stack-no-clear 'vector))) - (set! (-> s4-0 quad) (-> obj bottom 0 quad)) - (vector-xz-length (-> obj process root transv)) - (set! (-> s4-0 y) (-> obj surface-height)) - (when - (and - (logtest? (-> obj process draw status) 8) - (zero? (-> obj process draw cur-lod)) - (logtest? #x400000 (-> obj flags)) - (logtest? #x800000 (-> obj flags)) - ) - (let ((f30-1 (y-angle (-> obj process root))) - (f28-0 (vector-xz-length (-> obj process root transv))) + ((zero? (logand (-> obj flags) 2)) + (set! (-> obj flags) (logand -97793 (-> obj flags))) + ) + ((and (logtest? #x200000 (-> obj flags)) (logtest? (-> obj process state-flags) 256)) + (set! (-> obj flags) (logior #x10000 (-> obj flags))) + ) + ((begin + (set! (-> obj top 1 quad) (-> obj top 0 quad)) + (vector<-cspace! (the-as vector (-> obj top)) (-> obj process node-list data (-> obj joint-index))) + (+! (-> obj top 0 y) (-> obj top-y-offset)) + (set! (-> obj bottom 1 quad) (-> obj bottom 0 quad)) + (set! (-> obj bottom 0 quad) (-> obj process root trans quad)) + (set! (-> obj flags) (logand -31745 (-> obj flags))) + (set! (-> obj bob-offset) (update! (-> obj bob))) + (cond + ((and + (logtest? (-> obj flags) 256) + (zero? (logand (-> (the-as collide-shape-moving (-> obj process root)) root-prim prim-core action) 512)) ) - (set! - (-> *part-id-table* 118 init-specs 4 initial-valuef) - (+ 24576.0 f30-1) - ) - (set! - (-> *part-id-table* 118 init-specs 19 initial-valuef) - (+ 49152.0 f30-1) - ) - (set! - (-> *part-id-table* 118 init-specs 1 initial-valuef) - (* 0.0000036621095 f28-0) - ) - (set! - (-> *part-id-table* 118 init-specs 2 initial-valuef) - (* 0.1 f28-0) - ) - (set! - (-> *part-id-table* 118 init-specs 13 initial-valuef) - 0.7111111 - ) - (sp-launch-particles-var - *sp-particle-system-3d* - (-> *part-id-table* 118) - s4-0 - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) - (set! - (-> *part-id-table* 121 init-specs 1 initial-valuef) - (* 0.000004150391 f28-0) - ) - (set! (-> *part-id-table* 121 init-specs 18 initial-valuef) f30-1) - (sp-launch-particles-var - *sp-particle-system-3d* - (-> *part-id-table* 121) - s4-0 - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) - (when (< f28-0 4096.0) - (set! - (-> *part-id-table* 112 init-specs 4 random-rangef) - (-> obj ripple-size) - ) - (sp-launch-particles-var - *sp-particle-system-3d* - (-> *part-id-table* 112) - s4-0 - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) - (sp-launch-particles-var - *sp-particle-system-3d* - (-> *part-id-table* 115) - s4-0 - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) - ) - ) - ) - (if (< (-> obj top 1 y) (-> obj height)) - (dummy-13 obj 0.2 s4-0 1 (-> obj process root transv)) - ) - ) - ) - (else - (logior! (-> obj flags) 8192) - ) - ) - (when - (and (logtest? (-> obj flags) 32) (logtest? #x800000 (-> obj flags))) - (let* - ((v1-124 (rand-vu-int-range 3 (+ (-> obj process node-list length) -1))) - (s4-1 - (vector<-cspace! - (new 'stack-no-clear 'vector) - (-> obj process node-list data v1-124) - ) - ) - ) - (set! - (-> *part-id-table* 110 init-specs 16 initial-valuef) - (-> obj surface-height) - ) - (set! - (-> *part-id-table* 110 init-specs 1 initial-valuef) - (+ - (lerp-scale - 12.0 - 0.4 - (the - float - (- - (-> *display* base-frame-counter) - (the-as int (-> obj enter-water-time)) - ) - ) - 0.0 - 600.0 - ) - (* 0.00012207031 (vector-xz-length (-> obj process root transv))) - ) - ) - (sp-launch-particles-var - *sp-particle-system-2d* - (-> *part-id-table* 110) - s4-1 - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) - (set! - (-> *part-id-table* 111 init-specs 16 initial-valuef) - (-> obj surface-height) - ) - (sp-launch-particles-var - *sp-particle-system-2d* - (-> *part-id-table* 111) - s4-1 - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) - ) - ) - (let - ((f30-3 - (- - (+ - (-> obj base-height) - (-> obj ocean-offset) - (-> obj bob-offset) - (-> obj align-offset) - ) - (-> obj swim-height) - ) - ) - ) - (let* ((s4-2 (-> obj process root)) - (v1-146 - (if - (and (nonzero? s4-2) (type-type? (-> s4-2 type) control-info)) - s4-2 - ) - ) - (s4-3 - (and - v1-146 - (< - (- - (-> *display* base-frame-counter) - (-> (the-as control-info v1-146) unknown-dword11) + (set! (-> obj real-ocean-offset) (- (ocean-get-height (the-as vector (-> obj bottom))) (-> obj base-height))) + (if (zero? (logand (-> obj flags) 512)) + (set! (-> obj ocean-offset) (-> obj real-ocean-offset)) + (set! (-> obj ocean-offset) (lerp (-> obj ocean-offset) (-> obj real-ocean-offset) 0.2)) ) - 150 - ) - ) - ) ) - (if - (and - (logtest? (-> obj flags) 16) - (and - s4-3 - (zero? - (logand - (-> (the-as collide-shape-moving (-> obj process root)) status) - 1024 - ) - ) - ) - ) - (set! (-> obj bob amp) (* 0.8 (-> obj bob amp))) - ) - (cond - ((and - (logtest? (-> obj flags) 8) - (or - (logtest? - (-> (the-as collide-shape-moving (-> obj process root)) status) - 1024 - ) - (>= f30-3 (-> obj bottom 0 y)) - (and - (logtest? s5-0 2048) - (logtest? - (-> (the-as collide-shape-moving (-> obj process root)) status) - 4 - ) - (zero? - (logand - (-> (the-as collide-shape-moving (-> obj process root)) status) - 1 - ) - ) - (>= (+ 204.8 f30-3) (-> obj bottom 0 y)) - ) - ) - (or - (logtest? s5-0 2048) - (< 12288.0 (vector-xz-length (-> obj process root transv))) - (< - (+ (-> *display* base-frame-counter) -60) - (the-as int (-> obj enter-water-time)) - ) - (>= - (+ - (- - 204.8 - (fmin - 6144.0 - (+ - (-> obj ocean-offset) - (-> obj bob-offset) - (-> obj align-offset) - ) - ) - ) - f30-3 - ) - (-> obj bottom 0 y) - ) - ) - ) - (set! - (-> obj swim-time) - (the-as uint (-> *display* base-frame-counter)) - ) - (send-event (-> obj process) 'swim) - (logior! (-> obj flags) 2048) - (if (zero? (logand s5-0 2048)) - (set! - (-> obj enter-swim-time) - (the-as uint (-> *display* base-frame-counter)) - ) - ) - (cond - ((and - (logtest? (-> obj flags) 16) - (logtest? - (-> (the-as collide-shape-moving (-> obj process root)) status) - 4 - ) - (zero? (logand #x10000 (-> obj flags))) - ) - (let ((v1-200 (new 'stack-no-clear 'vector))) - (set! (-> v1-200 quad) (-> obj bottom 0 quad)) - (set! (-> v1-200 y) (- (-> obj height) (-> obj swim-height))) - (let ((s4-4 (-> obj process root))) - (when - (and - (zero? - (logand (-> (the-as collide-shape-moving s4-4) status) 4096) - ) - (logtest? (-> obj flags) 2048) - (zero? - (logand - (-> - (the-as collide-shape-moving s4-4) - root-prim - prim-core - action - ) - 512 + ((logtest? #x100000 (-> obj flags)) + (let* ((a0-26 (-> obj volume process 0)) + (f30-0 (ripple-find-height (the-as process-drawable a0-26) 0 (the-as vector (-> obj bottom)))) + ) + (set! (-> obj real-ocean-offset) (- f30-0 (-> obj base-height))) + (if (zero? (logand (-> obj flags) 512)) + (set! (-> obj ocean-offset) (-> obj real-ocean-offset)) + (set! (-> obj ocean-offset) (lerp (-> obj ocean-offset) (-> obj real-ocean-offset) 0.2)) + ) + (let ((v1-36 (new 'stack-no-clear 'vector))) + (set! (-> v1-36 quad) (-> obj bottom 0 quad)) + (set! (-> v1-36 y) f30-0) ) - ) ) - (let - ((a1-27 - (vector-! - (new 'stack-no-clear 'vector) - v1-200 - (-> s4-4 trans) - ) + ) + (else + (set! (-> obj real-ocean-offset) 0.0) + (set! (-> obj ocean-offset) 0.0) + ) + ) + (if (logtest? (-> (the-as collide-shape-moving (-> obj process root)) root-prim prim-core action) 512) + (set! (-> obj bob-offset) 0.0) + ) + (set! (-> obj height) + (+ (-> obj base-height) (-> obj ocean-offset) (-> obj bob-offset) (-> obj align-offset)) + ) + (set! (-> obj surface-height) (+ (-> obj base-height) (-> obj real-ocean-offset))) + (set! (-> obj swim-depth) (fmax 0.0 (- (- (-> obj surface-height) (-> obj swim-height)) (-> obj bottom 0 y)))) + (>= (-> obj height) (-> obj bottom 0 y)) + ) + (if (logtest? (-> (the-as collide-shape-moving (-> obj process root)) status) 1024) + (set! (-> obj on-water-time) (the-as uint (-> *display* base-frame-counter))) + ) + (set! (-> obj drip-wetness) 1.0) + (set! (-> obj drip-height) (fmax (- (-> obj surface-height) (-> obj bottom 0 y)) (-> obj drip-height))) + (set! (-> obj drip-speed) 15.0) + (if (zero? (logand (-> obj flags) 512)) + (TODO-RENAME-15 obj) + ) + (cond + ((>= (-> obj top 0 y) (-> obj height)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set! (-> s4-0 quad) (-> obj bottom 0 quad)) + (vector-xz-length (-> obj process root transv)) + (set! (-> s4-0 y) (-> obj surface-height)) + (when (and + (logtest? (-> obj process draw status) (draw-status drwf03)) + (zero? (-> obj process draw cur-lod)) + (logtest? #x400000 (-> obj flags)) + (logtest? #x800000 (-> obj flags)) + ) + (let ((f30-1 (y-angle (-> obj process root))) + (f28-0 (vector-xz-length (-> obj process root transv))) + ) + (set! (-> *part-id-table* 118 init-specs 4 initial-valuef) (+ 24576.0 f30-1)) + (set! (-> *part-id-table* 118 init-specs 19 initial-valuef) (+ 49152.0 f30-1)) + (set! (-> *part-id-table* 118 init-specs 1 initial-valuef) (* 0.0000036621095 f28-0)) + (set! (-> *part-id-table* 118 init-specs 2 initial-valuef) (* 0.1 f28-0)) + (set! (-> *part-id-table* 118 init-specs 13 initial-valuef) 0.7111111) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 118) + s4-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (set! (-> *part-id-table* 121 init-specs 1 initial-valuef) (* 0.000004150391 f28-0)) + (set! (-> *part-id-table* 121 init-specs 18 initial-valuef) f30-1) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 121) + s4-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (when (< f28-0 4096.0) + (set! (-> *part-id-table* 112 init-specs 4 random-rangef) (-> obj ripple-size)) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 112) + s4-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 115) + s4-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) ) - ) - (vector-float*! a1-27 a1-27 (-> *display* frames-per-second)) - (dummy-37 (the-as collide-shape-moving s4-4) a1-27) ) - (logior! (-> (the-as collide-shape-moving s4-4) status) 1031) - ) + (if (< (-> obj top 1 y) (-> obj height)) + (dummy-13 obj 0.2 s4-0 1 (-> obj process root transv)) + ) ) - ) - ) - ((and - (< (-> obj bottom 0 y) f30-3) - (zero? (logand #x10000 (-> obj flags))) - ) - (logior! (-> obj flags) 4096) - ) - ) - ) - ((begin - (set! - s4-3 - (and - (logtest? (-> obj flags) 4) - (or - (not (!= (-> obj bob amp) 0.0)) - (>= - (- - (-> *display* base-frame-counter) - (the-as int (-> obj swim-time)) - ) - 15 - ) - ) - (and - (>= (- (-> obj height) (-> obj wade-height)) (-> obj bottom 0 y)) - s4-3 - ) - ) - ) - s4-3 - ) - (set! - (-> obj wade-time) - (the-as uint (-> *display* base-frame-counter)) - ) - (send-event (-> obj process) 'wade) - (logior! (-> obj flags) 1024) - ) - ) - ) - (when - (and - (logtest? (-> obj flags) 8) - (< (-> obj bottom 1 y) f30-3) - (and (< f30-3 (-> obj bottom 0 y)) (logtest? s5-0 4096)) - ) - (logior! (-> obj flags) 2048) - (let ((a1-30 (new 'stack-no-clear 'vector))) - (set! (-> a1-30 quad) (-> obj bottom 0 quad)) - (let ((s5-1 (-> obj process root))) - (set! (-> a1-30 y) f30-3) - (when - (zero? - (logand - (-> (the-as collide-shape-moving s5-1) root-prim prim-core action) - 512 - ) - ) - (let - ((f30-4 (-> (the-as collide-shape-moving s5-1) ground-impact-vel))) - (TODO-RENAME-61 - (the-as collide-shape-moving s5-1) - a1-30 - (-> s5-1 transv) - *up-vector* - ) - (logior! (-> (the-as collide-shape-moving s5-1) status) 1024) - (set! - (-> (the-as collide-shape-moving s5-1) ground-impact-vel) - f30-4 - ) - ) - ) - ) - ) - ) - ) - (when - (and (logtest? #x20000 (-> obj flags)) (= (-> obj process type) target)) - (when - (and - (logtest? - (-> (the-as collide-shape-moving (-> obj process root)) status) - 1025 - ) - (zero? - (logand - (-> - (the-as collide-shape-moving (-> obj process root)) - root-prim - prim-core - action - ) - 512 - ) - ) - ) - (when (< (-> obj process root trans y) -409.6) - (send-event (-> obj process) 'no-look-around 450) - (when - (zero? - (logand - (-> - (the-as collide-shape-moving (-> obj process root)) - root-prim - prim-core - action - ) - #x4000 - ) - ) - (cond - ((= (-> obj process type) target) - (let ((a1-32 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-32 from) pp) - (set! (-> a1-32 num-params) 2) - (set! (-> a1-32 message) 'attack) - (set! (-> a1-32 param 0) (the-as uint #f)) - (let ((v1-275 (new 'static 'attack-info :mask #xe0))) - (set! (-> v1-275 shove-up) 2048.0) - (set! (-> v1-275 shove-back) 0.0) - (set! (-> v1-275 mode) 'tar) - (set! (-> a1-32 param 1) (the-as uint v1-275)) - ) - (send-event-function (-> obj process) a1-32) - ) ) (else - (let ((a1-33 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-33 from) pp) - (set! (-> a1-33 num-params) 4) - (set! (-> a1-33 message) 'attack) - (set! (-> a1-33 param 0) (the-as uint #f)) - (set! (-> a1-33 param 1) (the-as uint 'tar)) - (let ((v1-281 (+ *global-attack-id* 1))) - (set! *global-attack-id* v1-281) - (set! (-> a1-33 param 2) (the-as uint v1-281)) - ) - (set! (-> a1-33 param 3) (the-as uint 0)) - (send-event-function (-> obj process) a1-33) + (logior! (-> obj flags) 8192) ) + ) + (when (and (logtest? (-> obj flags) 32) (logtest? #x800000 (-> obj flags))) + (let* ((v1-124 (rand-vu-int-range 3 (+ (-> obj process node-list length) -1))) + (s4-1 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj process node-list data v1-124))) + ) + (set! (-> *part-id-table* 110 init-specs 16 initial-valuef) (-> obj surface-height)) + (set! (-> *part-id-table* 110 init-specs 1 initial-valuef) + (+ (lerp-scale + 12.0 + 0.4 + (the float (- (-> *display* base-frame-counter) (the-as int (-> obj enter-water-time)))) + 0.0 + 600.0 + ) + (* 0.00012207031 (vector-xz-length (-> obj process root transv))) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 110) + s4-1 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (set! (-> *part-id-table* 111 init-specs 16 initial-valuef) (-> obj surface-height)) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 111) + s4-1 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (let ((f30-3 (- (+ (-> obj base-height) (-> obj ocean-offset) (-> obj bob-offset) (-> obj align-offset)) + (-> obj swim-height) + ) + ) + ) + (let* ((s4-2 (-> obj process root)) + (v1-146 (if (and (nonzero? s4-2) (type-type? (-> s4-2 type) control-info)) + s4-2 + ) + ) + (s4-3 + (and v1-146 (< (- (-> *display* base-frame-counter) (-> (the-as control-info v1-146) unknown-dword11)) 150)) + ) + ) + (if (and + (logtest? (-> obj flags) 16) + (and s4-3 (zero? (logand (-> (the-as collide-shape-moving (-> obj process root)) status) 1024))) + ) + (set! (-> obj bob amp) (* 0.8 (-> obj bob amp))) + ) + (cond + ((and + (logtest? (-> obj flags) 8) + (or + (logtest? (-> (the-as collide-shape-moving (-> obj process root)) status) 1024) + (>= f30-3 (-> obj bottom 0 y)) + (and + (logtest? s5-0 2048) + (logtest? (-> (the-as collide-shape-moving (-> obj process root)) status) 4) + (zero? (logand (-> (the-as collide-shape-moving (-> obj process root)) status) 1)) + (>= (+ 204.8 f30-3) (-> obj bottom 0 y)) + ) + ) + (or + (logtest? s5-0 2048) + (< 12288.0 (vector-xz-length (-> obj process root transv))) + (< (+ (-> *display* base-frame-counter) -60) (the-as int (-> obj enter-water-time))) + (>= (+ (- 204.8 (fmin 6144.0 (+ (-> obj ocean-offset) (-> obj bob-offset) (-> obj align-offset)))) f30-3) + (-> obj bottom 0 y) + ) + ) + ) + (set! (-> obj swim-time) (the-as uint (-> *display* base-frame-counter))) + (send-event (-> obj process) 'swim) + (logior! (-> obj flags) 2048) + (if (zero? (logand s5-0 2048)) + (set! (-> obj enter-swim-time) (the-as uint (-> *display* base-frame-counter))) + ) + (cond + ((and + (logtest? (-> obj flags) 16) + (logtest? (-> (the-as collide-shape-moving (-> obj process root)) status) 4) + (zero? (logand #x10000 (-> obj flags))) + ) + (let ((v1-200 (new 'stack-no-clear 'vector))) + (set! (-> v1-200 quad) (-> obj bottom 0 quad)) + (set! (-> v1-200 y) (- (-> obj height) (-> obj swim-height))) + (let ((s4-4 (-> obj process root))) + (when (and + (zero? (logand (-> (the-as collide-shape-moving s4-4) status) 4096)) + (logtest? (-> obj flags) 2048) + (zero? (logand (-> (the-as collide-shape-moving s4-4) root-prim prim-core action) 512)) + ) + (let ((a1-27 (vector-! (new 'stack-no-clear 'vector) v1-200 (-> s4-4 trans)))) + (vector-float*! a1-27 a1-27 (-> *display* frames-per-second)) + (dummy-37 (the-as collide-shape-moving s4-4) a1-27) + ) + (logior! (-> (the-as collide-shape-moving s4-4) status) 1031) + ) + ) + ) + ) + ((and (< (-> obj bottom 0 y) f30-3) (zero? (logand #x10000 (-> obj flags)))) + (logior! (-> obj flags) 4096) + ) + ) + ) + ((begin + (set! s4-3 (and + (logtest? (-> obj flags) 4) + (or + (not (!= (-> obj bob amp) 0.0)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> obj swim-time))) 15) + ) + (and (>= (- (-> obj height) (-> obj wade-height)) (-> obj bottom 0 y)) s4-3) + ) + ) + s4-3 + ) + (set! (-> obj wade-time) (the-as uint (-> *display* base-frame-counter))) + (send-event (-> obj process) 'wade) + (logior! (-> obj flags) 1024) + ) + ) + ) + (when (and + (logtest? (-> obj flags) 8) + (< (-> obj bottom 1 y) f30-3) + (and (< f30-3 (-> obj bottom 0 y)) (logtest? s5-0 4096)) + ) + (logior! (-> obj flags) 2048) + (let ((a1-30 (new 'stack-no-clear 'vector))) + (set! (-> a1-30 quad) (-> obj bottom 0 quad)) + (let ((s5-1 (-> obj process root))) + (set! (-> a1-30 y) f30-3) + (when (zero? (logand (-> (the-as collide-shape-moving s5-1) root-prim prim-core action) 512)) + (let ((f30-4 (-> (the-as collide-shape-moving s5-1) ground-impact-vel))) + (TODO-RENAME-61 (the-as collide-shape-moving s5-1) a1-30 (-> s5-1 transv) *up-vector*) + (logior! (-> (the-as collide-shape-moving s5-1) status) 1024) + (set! (-> (the-as collide-shape-moving s5-1) ground-impact-vel) f30-4) + ) + ) + ) + ) + ) + ) + (when (and (logtest? #x20000 (-> obj flags)) (= (-> obj process type) target)) + (when (and + (logtest? (-> (the-as collide-shape-moving (-> obj process root)) status) 1025) + (zero? (logand (-> (the-as collide-shape-moving (-> obj process root)) root-prim prim-core action) 512)) + ) + (when (< (-> obj process root trans y) -409.6) + (send-event (-> obj process) 'no-look-around 450) + (when (zero? (logand (-> (the-as collide-shape-moving (-> obj process root)) root-prim prim-core action) #x4000)) + (cond + ((= (-> obj process type) target) + (let ((a1-32 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-32 from) pp) + (set! (-> a1-32 num-params) 2) + (set! (-> a1-32 message) 'attack) + (set! (-> a1-32 param 0) (the-as uint #f)) + (let ((v1-275 (new 'static 'attack-info :mask #xe0))) + (set! (-> v1-275 shove-up) 2048.0) + (set! (-> v1-275 shove-back) 0.0) + (set! (-> v1-275 mode) 'tar) + (set! (-> a1-32 param 1) (the-as uint v1-275)) + ) + (send-event-function (-> obj process) a1-32) + ) + ) + (else + (let ((a1-33 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-33 from) pp) + (set! (-> a1-33 num-params) 4) + (set! (-> a1-33 message) 'attack) + (set! (-> a1-33 param 0) (the-as uint #f)) + (set! (-> a1-33 param 1) (the-as uint 'tar)) + (let ((v1-281 (+ *global-attack-id* 1))) + (set! *global-attack-id* v1-281) + (set! (-> a1-33 param 2) (the-as uint v1-281)) + ) + (set! (-> a1-33 param 3) (the-as uint 0)) + (send-event-function (-> obj process) a1-33) + ) + ) + ) + ) + (let ((v1-283 (-> obj process))) + (set! (-> (the-as collide-shape-moving (-> v1-283 root)) surf) *tar-surface*) + (set! (-> (the-as collide-shape-moving (-> v1-283 root)) ground-pat material) 4) + ) + ) + (set! (-> obj swim-height) (lerp (-> obj swim-height) 7372.8 0.05)) + ) + ) + ) + (else + (if (logtest? (-> obj flags) 512) + (TODO-RENAME-16 obj) + ) + ) + ) + ) + (when (not + (or (zero? (logand (-> obj flags) 64)) (zero? (logand #x800000 (-> obj flags))) (= (-> obj drip-wetness) 0.0)) ) + (cond + ((logtest? (-> obj flags) #x8000) + (let ((a2-15 + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj process node-list data (-> obj drip-joint-index))) + ) + ) + (set! (-> *part-id-table* 145 init-specs 16 initial-valuef) + (fmax (-> obj surface-height) (-> obj bottom 0 y)) + ) + (set! (-> *part-id-table* 145 init-specs 8 initial-valuef) (* 0.05 (- (-> a2-15 x) (-> obj drip-old-pos x)))) + (set! (-> *part-id-table* 145 init-specs 9 initial-valuef) (* 0.05 (- (-> a2-15 y) (-> obj drip-old-pos y)))) + (set! (-> *part-id-table* 145 init-specs 10 initial-valuef) (* 0.05 (- (-> a2-15 z) (-> obj drip-old-pos z)))) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 145) + a2-15 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (set! (-> obj drip-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> obj flags) (logand -32769 (-> obj flags))) + (set! (-> obj drip-wetness) (seek (-> obj drip-wetness) 0.0 (* 0.001 (-> obj drip-speed)))) + (set! (-> obj drip-speed) (* 1.05 (-> obj drip-speed))) + (if (= (-> obj drip-wetness) 0.0) + (set! (-> obj drip-height) 0.0) + ) + ) + ((>= (- (-> *display* base-frame-counter) (the int (/ (the float (-> obj drip-time)) (-> obj drip-mult)))) + (the int (-> obj drip-speed)) + ) + (let* ((s5-2 (rand-vu-int-range 3 (+ (-> obj process node-list length) -1))) + (v1-328 (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj process node-list data s5-2))) + ) + (when (and + (< (- (-> v1-328 y) (-> obj process root trans y)) (-> obj drip-height)) + (< (-> obj height) (-> v1-328 y)) + ) + (set! (-> obj drip-joint-index) s5-2) + (set! (-> obj drip-old-pos quad) (-> v1-328 quad)) + (logior! (-> obj flags) #x8000) + ) ) - ) - (let ((v1-283 (-> obj process))) - (set! - (-> (the-as collide-shape-moving (-> v1-283 root)) surf) - *tar-surface* - ) - (set! - (-> - (the-as collide-shape-moving (-> v1-283 root)) - ground-pat - material - ) - 4 - ) - ) ) - (set! (-> obj swim-height) (lerp (-> obj swim-height) 7372.8 0.05)) ) - ) ) - (else - (if (logtest? (-> obj flags) 512) - (TODO-RENAME-16 obj) - ) - ) - ) + 0 + (none) ) - (when - (not - (or - (zero? (logand (-> obj flags) 64)) - (zero? (logand #x800000 (-> obj flags))) - (= (-> obj drip-wetness) 0.0) - ) - ) - (cond - ((logtest? (-> obj flags) #x8000) - (let - ((a2-15 - (vector<-cspace! - (new 'stack-no-clear 'vector) - (-> obj process node-list data (-> obj drip-joint-index)) - ) - ) - ) - (set! - (-> *part-id-table* 145 init-specs 16 initial-valuef) - (fmax (-> obj surface-height) (-> obj bottom 0 y)) - ) - (set! - (-> *part-id-table* 145 init-specs 8 initial-valuef) - (* 0.05 (- (-> a2-15 x) (-> obj drip-old-pos x))) - ) - (set! - (-> *part-id-table* 145 init-specs 9 initial-valuef) - (* 0.05 (- (-> a2-15 y) (-> obj drip-old-pos y))) - ) - (set! - (-> *part-id-table* 145 init-specs 10 initial-valuef) - (* 0.05 (- (-> a2-15 z) (-> obj drip-old-pos z))) - ) - (sp-launch-particles-var - *sp-particle-system-2d* - (-> *part-id-table* 145) - a2-15 - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) - ) - (set! (-> obj drip-time) (the-as uint (-> *display* base-frame-counter))) - (set! (-> obj flags) (logand -32769 (-> obj flags))) - (set! - (-> obj drip-wetness) - (seek (-> obj drip-wetness) 0.0 (* 0.001 (-> obj drip-speed))) - ) - (set! (-> obj drip-speed) (* 1.05 (-> obj drip-speed))) - (if (= (-> obj drip-wetness) 0.0) - (set! (-> obj drip-height) 0.0) - ) - ) - ((>= - (- - (-> *display* base-frame-counter) - (the int (/ (the float (-> obj drip-time)) (-> obj drip-mult))) - ) - (the int (-> obj drip-speed)) - ) - (let* - ((s5-2 (rand-vu-int-range 3 (+ (-> obj process node-list length) -1))) - (v1-328 - (vector<-cspace! - (new 'stack-no-clear 'vector) - (-> obj process node-list data s5-2) - ) - ) - ) - (when - (and - (< - (- (-> v1-328 y) (-> obj process root trans y)) - (-> obj drip-height) - ) - (< (-> obj height) (-> v1-328 y)) - ) - (set! (-> obj drip-joint-index) s5-2) - (set! (-> obj drip-old-pos quad) (-> v1-328 quad)) - (logior! (-> obj flags) #x8000) - ) - ) - ) - ) - ) - 0 - (none) - ) ) -(defmethod - start-bobbing! - water-control - ((obj water-control) (arg0 float) (arg1 int) (arg2 int)) +(defmethod start-bobbing! water-control ((obj water-control) (arg0 float) (arg1 int) (arg2 int)) (activate! (-> obj bob) (- arg0) arg1 arg2 0.9 1.0) 0 (none) @@ -1646,549 +1209,303 @@ (let ((f1-0 (-> arg0 root trans y)) (f0-0 (the-as float (-> arg0 userdata))) ) - (set! (-> *part-id-table* 128 init-specs 16 initial-valuef) f1-0) - (set! (-> *part-id-table* 132 init-specs 18 initial-valuef) f1-0) - (set! (-> *part-id-table* 125 init-specs 16 initial-valuef) f1-0) - (set! (-> *part-id-table* 129 init-specs 15 initial-valuef) f1-0) - (set! (-> *part-id-table* 133 init-specs 15 initial-valuef) f1-0) - (set! - (-> *part-id-table* 129 init-specs 12 initial-valuef) - (* 13.653334 (* -0.15 f0-0)) + (set! (-> *part-id-table* 128 init-specs 16 initial-valuef) f1-0) + (set! (-> *part-id-table* 132 init-specs 18 initial-valuef) f1-0) + (set! (-> *part-id-table* 125 init-specs 16 initial-valuef) f1-0) + (set! (-> *part-id-table* 129 init-specs 15 initial-valuef) f1-0) + (set! (-> *part-id-table* 133 init-specs 15 initial-valuef) f1-0) + (set! (-> *part-id-table* 129 init-specs 12 initial-valuef) (* 13.653334 (* -0.15 f0-0))) + (set! (-> *part-id-table* 129 init-specs 12 random-rangef) (* 13.653334 (* -0.075 f0-0))) + (set! (-> *part-id-table* 133 init-specs 12 initial-valuef) (* 13.653334 (* -0.15 f0-0))) + (set! (-> *part-id-table* 133 init-specs 12 random-rangef) (* 13.653334 (* -0.075 f0-0))) + (set! (-> *part-id-table* 131 init-specs 2 initial-valuef) (* 4096.0 (* 0.1 f0-0))) + (set! (-> *part-id-table* 131 init-specs 2 random-rangef) (* 4096.0 (* 0.4 f0-0))) + (set! (-> *part-id-table* 131 init-specs 4 initial-valuef) (* 4096.0 (* 0.1 f0-0))) + (set! (-> *part-id-table* 131 init-specs 4 random-rangef) (* 4096.0 (* 0.4 f0-0))) + (set! (-> *part-id-table* 131 init-specs 9 initial-valuef) (* 13.653334 (* 1.5 f0-0))) + (set! (-> *part-id-table* 131 init-specs 9 random-rangef) (* 13.653334 (* 3.4 f0-0))) + (set! (-> *part-id-table* 131 init-specs 10 initial-valuef) (* 13.653334 (* 1.5 f0-0))) + (set! (-> *part-id-table* 131 init-specs 10 random-rangef) (* 13.653334 (* 3.4 f0-0))) + (set! (-> *part-id-table* 126 init-specs 2 initial-valuef) (* 4096.0 (* 3.0 f0-0))) + (set! (-> *part-id-table* 126 init-specs 2 random-rangef) (* 4096.0 (* 2.0 f0-0))) + (set! (-> *part-id-table* 126 init-specs 4 initial-valuef) (* 4096.0 (* 3.0 f0-0))) + (set! (-> *part-id-table* 126 init-specs 4 random-rangef) (* 4096.0 (* 2.0 f0-0))) + (set! (-> *part-id-table* 126 init-specs 9 initial-valuef) (* 13.653334 (* 1.5 f0-0))) + (set! (-> *part-id-table* 126 init-specs 9 random-rangef) (* 13.653334 (* 1.4 f0-0))) + (set! (-> *part-id-table* 126 init-specs 10 initial-valuef) (* 13.653334 (* 1.5 f0-0))) + (set! (-> *part-id-table* 126 init-specs 10 random-rangef) (* 13.653334 (* 1.4 f0-0))) + (set! (-> *part-id-table* 127 init-specs 2 initial-valuef) (* 4096.0 (* -0.5 f0-0))) + (set! (-> *part-id-table* 127 init-specs 2 random-rangef) (* 4096.0 f0-0)) + (set! (-> *part-id-table* 127 init-specs 3 initial-valuef) (* 4096.0 (* -0.5 f0-0))) + (set! (-> *part-id-table* 127 init-specs 3 random-rangef) (* 4096.0 f0-0)) + (set! (-> *part-id-table* 127 init-specs 4 initial-valuef) (* 4096.0 (* 0.5 f0-0))) + (set! (-> *part-id-table* 127 init-specs 4 random-rangef) (* 4096.0 f0-0)) + (set! (-> *part-id-table* 127 init-specs 6 initial-valuef) (* 4096.0 (* 0.5 f0-0))) + (set! (-> *part-id-table* 127 init-specs 6 random-rangef) (* 4096.0 f0-0)) + (set! (-> *part-id-table* 127 init-specs 11 initial-valuef) (* 13.653334 (* 1.5 f0-0))) + (set! (-> *part-id-table* 127 init-specs 11 random-rangef) (* 13.653334 f0-0)) + (set! (-> *part-id-table* 127 init-specs 12 initial-valuef) (* 13.653334 (* 1.5 f0-0))) + (set! (-> *part-id-table* 127 init-specs 12 random-rangef) (* 13.653334 f0-0)) + (set! (-> *part-id-table* 132 init-specs 1 initial-valuef) (* 4.0 f0-0)) + (set! (-> *part-id-table* 132 init-specs 2 initial-valuef) (* 4096.0 (* -0.25 f0-0))) + (set! (-> *part-id-table* 132 init-specs 2 random-rangef) (* 4096.0 (* 0.5 f0-0))) + (set! (-> *part-id-table* 132 init-specs 3 initial-valuef) (* 4096.0 (* -0.25 f0-0))) + (set! (-> *part-id-table* 132 init-specs 3 random-rangef) (* 4096.0 (* 0.5 f0-0))) + (set! (-> *part-id-table* 132 init-specs 10 initial-valuef) (* 13.653334 (* -0.75 f0-0))) + (set! (-> *part-id-table* 132 init-specs 10 random-rangef) (* 13.653334 (* 1.5 f0-0))) + (set! (-> *part-id-table* 132 init-specs 12 initial-valuef) (* 13.653334 (* -0.75 f0-0))) + (set! (-> *part-id-table* 132 init-specs 12 random-rangef) (* 13.653334 (* 1.5 f0-0))) + (set! (-> *part-id-table* 132 init-specs 11 initial-valuef) (* 13.653334 (* 7.0 f0-0))) + (set! (-> *part-id-table* 132 init-specs 11 random-rangef) (* 13.653334 (* 2.0 f0-0))) + (set! (-> *part-id-table* 132 init-specs 15 initial-valuef) (* 13.653334 (* -0.3 f0-0))) + (set! (-> *part-id-table* 132 init-specs 15 random-rangef) (* 13.653334 (* -0.075 f0-0))) + (set! (-> *part-id-table* 128 init-specs 1 initial-valuef) (* 4.0 f0-0)) + (set! (-> *part-id-table* 128 init-specs 2 initial-valuef) (* 1.2 f0-0)) + (set! (-> *part-id-table* 128 init-specs 9 initial-valuef) (* 13.653334 f0-0)) + (set! (-> *part-id-table* 128 init-specs 9 random-rangef) (* 13.653334 (* 2.0 f0-0))) + (set! (-> *part-id-table* 128 init-specs 10 initial-valuef) (* 13.653334 (* 6.0 f0-0))) + (set! (-> *part-id-table* 128 init-specs 10 random-rangef) (* 13.653334 (* 2.0 f0-0))) + (set! (-> *part-id-table* 128 init-specs 13 initial-valuef) (* 13.653334 (* -0.3 f0-0))) + (set! (-> *part-id-table* 128 init-specs 13 random-rangef) (* 13.653334 (* -0.075 f0-0))) + (set! (-> *part-id-table* 128 init-specs 9 initial-valuef) (* 13.653334 f0-0)) + (set! (-> *part-id-table* 128 init-specs 9 random-rangef) (* 13.653334 (* 2.0 f0-0))) + (set! (-> *part-id-table* 128 init-specs 10 initial-valuef) (* 13.653334 (* 6.0 f0-0))) + (set! (-> *part-id-table* 128 init-specs 10 random-rangef) (* 13.653334 (* 2.0 f0-0))) + (set! (-> *part-id-table* 128 init-specs 13 initial-valuef) (* 13.653334 (* -0.3 f0-0))) + (set! (-> *part-id-table* 128 init-specs 13 random-rangef) (* 13.653334 (* -0.075 f0-0))) + (set! (-> *part-id-table* 125 init-specs 1 initial-valuef) (* 8.0 f0-0)) + (set! (-> *part-id-table* 125 init-specs 2 initial-valuef) (* 4096.0 f0-0)) + (set! (-> *part-id-table* 125 init-specs 9 initial-valuef) (* 13.653334 f0-0)) + (set! (-> *part-id-table* 125 init-specs 9 random-rangef) (* 13.653334 (* 2.0 f0-0))) + (set! (-> *part-id-table* 125 init-specs 10 initial-valuef) (* 13.653334 (* 6.0 f0-0))) + (set! (-> *part-id-table* 125 init-specs 10 random-rangef) (* 13.653334 (* 2.0 f0-0))) + (set! (-> *part-id-table* 125 init-specs 13 initial-valuef) (* 13.653334 (* -0.3 f0-0))) + (set! (-> *part-id-table* 125 init-specs 13 random-rangef) (* 13.653334 (* -0.075 f0-0))) + (set! (-> *part-id-table* 124 init-specs 2 initial-valuef) (* 4096.0 (* 1.2 f0-0))) + (set! (-> *part-id-table* 124 init-specs 2 random-rangef) (* 4096.0 (* 0.2 f0-0))) + (set! (-> *part-id-table* 124 init-specs 3 initial-valuef) (* 4096.0 (* 0.4 f0-0))) + (set! (-> *part-id-table* 124 init-specs 3 random-rangef) (* 4096.0 (* 1.2 f0-0))) + (set! (-> *part-id-table* 124 init-specs 7 initial-valuef) (* 4096.0 (* 0.2 f0-0))) + (set! (-> *part-id-table* 124 init-specs 7 random-rangef) (* 4096.0 (* 2.2 f0-0))) + (set! (-> *part-id-table* 130 init-specs 2 initial-valuef) (* 4096.0 (* 0.3 f0-0))) + (set! (-> *part-id-table* 130 init-specs 2 random-rangef) (* 4096.0 (* 0.9 f0-0))) + (set! (-> *part-id-table* 130 init-specs 6 initial-valuef) (* 4096.0 f0-0)) + (set! (-> *part-id-table* 130 init-specs 6 random-rangef) (* 4096.0 (* 2.2 f0-0))) ) - (set! - (-> *part-id-table* 129 init-specs 12 random-rangef) - (* 13.653334 (* -0.075 f0-0)) - ) - (set! - (-> *part-id-table* 133 init-specs 12 initial-valuef) - (* 13.653334 (* -0.15 f0-0)) - ) - (set! - (-> *part-id-table* 133 init-specs 12 random-rangef) - (* 13.653334 (* -0.075 f0-0)) - ) - (set! - (-> *part-id-table* 131 init-specs 2 initial-valuef) - (* 4096.0 (* 0.1 f0-0)) - ) - (set! - (-> *part-id-table* 131 init-specs 2 random-rangef) - (* 4096.0 (* 0.4 f0-0)) - ) - (set! - (-> *part-id-table* 131 init-specs 4 initial-valuef) - (* 4096.0 (* 0.1 f0-0)) - ) - (set! - (-> *part-id-table* 131 init-specs 4 random-rangef) - (* 4096.0 (* 0.4 f0-0)) - ) - (set! - (-> *part-id-table* 131 init-specs 9 initial-valuef) - (* 13.653334 (* 1.5 f0-0)) - ) - (set! - (-> *part-id-table* 131 init-specs 9 random-rangef) - (* 13.653334 (* 3.4 f0-0)) - ) - (set! - (-> *part-id-table* 131 init-specs 10 initial-valuef) - (* 13.653334 (* 1.5 f0-0)) - ) - (set! - (-> *part-id-table* 131 init-specs 10 random-rangef) - (* 13.653334 (* 3.4 f0-0)) - ) - (set! - (-> *part-id-table* 126 init-specs 2 initial-valuef) - (* 4096.0 (* 3.0 f0-0)) - ) - (set! - (-> *part-id-table* 126 init-specs 2 random-rangef) - (* 4096.0 (* 2.0 f0-0)) - ) - (set! - (-> *part-id-table* 126 init-specs 4 initial-valuef) - (* 4096.0 (* 3.0 f0-0)) - ) - (set! - (-> *part-id-table* 126 init-specs 4 random-rangef) - (* 4096.0 (* 2.0 f0-0)) - ) - (set! - (-> *part-id-table* 126 init-specs 9 initial-valuef) - (* 13.653334 (* 1.5 f0-0)) - ) - (set! - (-> *part-id-table* 126 init-specs 9 random-rangef) - (* 13.653334 (* 1.4 f0-0)) - ) - (set! - (-> *part-id-table* 126 init-specs 10 initial-valuef) - (* 13.653334 (* 1.5 f0-0)) - ) - (set! - (-> *part-id-table* 126 init-specs 10 random-rangef) - (* 13.653334 (* 1.4 f0-0)) - ) - (set! - (-> *part-id-table* 127 init-specs 2 initial-valuef) - (* 4096.0 (* -0.5 f0-0)) - ) - (set! (-> *part-id-table* 127 init-specs 2 random-rangef) (* 4096.0 f0-0)) - (set! - (-> *part-id-table* 127 init-specs 3 initial-valuef) - (* 4096.0 (* -0.5 f0-0)) - ) - (set! (-> *part-id-table* 127 init-specs 3 random-rangef) (* 4096.0 f0-0)) - (set! - (-> *part-id-table* 127 init-specs 4 initial-valuef) - (* 4096.0 (* 0.5 f0-0)) - ) - (set! (-> *part-id-table* 127 init-specs 4 random-rangef) (* 4096.0 f0-0)) - (set! - (-> *part-id-table* 127 init-specs 6 initial-valuef) - (* 4096.0 (* 0.5 f0-0)) - ) - (set! (-> *part-id-table* 127 init-specs 6 random-rangef) (* 4096.0 f0-0)) - (set! - (-> *part-id-table* 127 init-specs 11 initial-valuef) - (* 13.653334 (* 1.5 f0-0)) - ) - (set! - (-> *part-id-table* 127 init-specs 11 random-rangef) - (* 13.653334 f0-0) - ) - (set! - (-> *part-id-table* 127 init-specs 12 initial-valuef) - (* 13.653334 (* 1.5 f0-0)) - ) - (set! - (-> *part-id-table* 127 init-specs 12 random-rangef) - (* 13.653334 f0-0) - ) - (set! (-> *part-id-table* 132 init-specs 1 initial-valuef) (* 4.0 f0-0)) - (set! - (-> *part-id-table* 132 init-specs 2 initial-valuef) - (* 4096.0 (* -0.25 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 2 random-rangef) - (* 4096.0 (* 0.5 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 3 initial-valuef) - (* 4096.0 (* -0.25 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 3 random-rangef) - (* 4096.0 (* 0.5 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 10 initial-valuef) - (* 13.653334 (* -0.75 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 10 random-rangef) - (* 13.653334 (* 1.5 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 12 initial-valuef) - (* 13.653334 (* -0.75 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 12 random-rangef) - (* 13.653334 (* 1.5 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 11 initial-valuef) - (* 13.653334 (* 7.0 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 11 random-rangef) - (* 13.653334 (* 2.0 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 15 initial-valuef) - (* 13.653334 (* -0.3 f0-0)) - ) - (set! - (-> *part-id-table* 132 init-specs 15 random-rangef) - (* 13.653334 (* -0.075 f0-0)) - ) - (set! (-> *part-id-table* 128 init-specs 1 initial-valuef) (* 4.0 f0-0)) - (set! (-> *part-id-table* 128 init-specs 2 initial-valuef) (* 1.2 f0-0)) - (set! - (-> *part-id-table* 128 init-specs 9 initial-valuef) - (* 13.653334 f0-0) - ) - (set! - (-> *part-id-table* 128 init-specs 9 random-rangef) - (* 13.653334 (* 2.0 f0-0)) - ) - (set! - (-> *part-id-table* 128 init-specs 10 initial-valuef) - (* 13.653334 (* 6.0 f0-0)) - ) - (set! - (-> *part-id-table* 128 init-specs 10 random-rangef) - (* 13.653334 (* 2.0 f0-0)) - ) - (set! - (-> *part-id-table* 128 init-specs 13 initial-valuef) - (* 13.653334 (* -0.3 f0-0)) - ) - (set! - (-> *part-id-table* 128 init-specs 13 random-rangef) - (* 13.653334 (* -0.075 f0-0)) - ) - (set! - (-> *part-id-table* 128 init-specs 9 initial-valuef) - (* 13.653334 f0-0) - ) - (set! - (-> *part-id-table* 128 init-specs 9 random-rangef) - (* 13.653334 (* 2.0 f0-0)) - ) - (set! - (-> *part-id-table* 128 init-specs 10 initial-valuef) - (* 13.653334 (* 6.0 f0-0)) - ) - (set! - (-> *part-id-table* 128 init-specs 10 random-rangef) - (* 13.653334 (* 2.0 f0-0)) - ) - (set! - (-> *part-id-table* 128 init-specs 13 initial-valuef) - (* 13.653334 (* -0.3 f0-0)) - ) - (set! - (-> *part-id-table* 128 init-specs 13 random-rangef) - (* 13.653334 (* -0.075 f0-0)) - ) - (set! (-> *part-id-table* 125 init-specs 1 initial-valuef) (* 8.0 f0-0)) - (set! (-> *part-id-table* 125 init-specs 2 initial-valuef) (* 4096.0 f0-0)) - (set! - (-> *part-id-table* 125 init-specs 9 initial-valuef) - (* 13.653334 f0-0) - ) - (set! - (-> *part-id-table* 125 init-specs 9 random-rangef) - (* 13.653334 (* 2.0 f0-0)) - ) - (set! - (-> *part-id-table* 125 init-specs 10 initial-valuef) - (* 13.653334 (* 6.0 f0-0)) - ) - (set! - (-> *part-id-table* 125 init-specs 10 random-rangef) - (* 13.653334 (* 2.0 f0-0)) - ) - (set! - (-> *part-id-table* 125 init-specs 13 initial-valuef) - (* 13.653334 (* -0.3 f0-0)) - ) - (set! - (-> *part-id-table* 125 init-specs 13 random-rangef) - (* 13.653334 (* -0.075 f0-0)) - ) - (set! - (-> *part-id-table* 124 init-specs 2 initial-valuef) - (* 4096.0 (* 1.2 f0-0)) - ) - (set! - (-> *part-id-table* 124 init-specs 2 random-rangef) - (* 4096.0 (* 0.2 f0-0)) - ) - (set! - (-> *part-id-table* 124 init-specs 3 initial-valuef) - (* 4096.0 (* 0.4 f0-0)) - ) - (set! - (-> *part-id-table* 124 init-specs 3 random-rangef) - (* 4096.0 (* 1.2 f0-0)) - ) - (set! - (-> *part-id-table* 124 init-specs 7 initial-valuef) - (* 4096.0 (* 0.2 f0-0)) - ) - (set! - (-> *part-id-table* 124 init-specs 7 random-rangef) - (* 4096.0 (* 2.2 f0-0)) - ) - (set! - (-> *part-id-table* 130 init-specs 2 initial-valuef) - (* 4096.0 (* 0.3 f0-0)) - ) - (set! - (-> *part-id-table* 130 init-specs 2 random-rangef) - (* 4096.0 (* 0.9 f0-0)) - ) - (set! (-> *part-id-table* 130 init-specs 6 initial-valuef) (* 4096.0 f0-0)) - (set! - (-> *part-id-table* 130 init-specs 6 random-rangef) - (* 4096.0 (* 2.2 f0-0)) - ) - ) 0 (none) ) (defmethod TODO-RENAME-15 water-control ((obj water-control)) (with-pp - (logior! (-> obj flags) 512) - (set! (-> obj flags) (logand -65537 (-> obj flags))) - (set! - (-> obj enter-water-time) - (the-as uint (-> *display* base-frame-counter)) - ) - (set-vector! - (-> obj enter-water-pos) - (-> obj bottom 0 x) - (-> obj surface-height) - (-> obj bottom 0 z) - 1.0 - ) - (when (and (logtest? (-> obj flags) 32) (logtest? #x800000 (-> obj flags))) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) pp) - (set! (-> a1-1 num-params) 1) - (set! (-> a1-1 message) 'query) - (set! (-> a1-1 param 0) (the-as uint 'ground-height)) - (let* ((f0-4 (the-as float (send-event-function (-> obj process) a1-1))) - (f30-0 (lerp-scale 0.3 1.0 f0-4 2048.0 24576.0)) - ) - (if (nonzero? (-> obj process skel effect)) - (dummy-10 (-> obj process skel effect) 'swim-stroke 0.0 -1) - ) - (dummy-13 - obj - f30-0 - (-> obj enter-water-pos) - 1 - (-> obj process root transv) - ) + (logior! (-> obj flags) 512) + (set! (-> obj flags) (logand -65537 (-> obj flags))) + (set! (-> obj enter-water-time) (the-as uint (-> *display* base-frame-counter))) + (set-vector! (-> obj enter-water-pos) (-> obj bottom 0 x) (-> obj surface-height) (-> obj bottom 0 z) 1.0) + (when (and (logtest? (-> obj flags) 32) (logtest? #x800000 (-> obj flags))) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) pp) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'query) + (set! (-> a1-1 param 0) (the-as uint 'ground-height)) + (let* ((f0-4 (the-as float (send-event-function (-> obj process) a1-1))) + (f30-0 (lerp-scale 0.3 1.0 f0-4 2048.0 24576.0)) + ) + (if (nonzero? (-> obj process skel effect)) + (dummy-10 (-> obj process skel effect) 'swim-stroke 0.0 -1) + ) + (dummy-13 obj f30-0 (-> obj enter-water-pos) 1 (-> obj process root transv)) + ) + ) ) - ) + (if (logtest? #x20000 (-> obj flags)) + (set! (-> obj swim-height) 2867.2) + ) + 0 + (none) ) - (if (logtest? #x20000 (-> obj flags)) - (set! (-> obj swim-height) 2867.2) - ) - 0 - (none) - ) ) (defmethod TODO-RENAME-16 water-control ((obj water-control)) (set! (-> obj flags) (logand -513 (-> obj flags))) (set-zero! (-> obj bob)) (if (logtest? #x20000 (-> obj flags)) - (set! (-> obj swim-height) 2867.2) - ) + (set! (-> obj swim-height) 2867.2) + ) 0 (none) ) (defun splash-spawn ((arg0 basic) (arg1 basic) (arg2 int)) (let ((s4-0 (get-process *default-dead-pool* part-tracker #x4000))) - (when s4-0 - (let ((t9-1 (method-of-type part-tracker activate))) - (t9-1 - (the-as part-tracker s4-0) - *entity-pool* - 'part-tracker - (the-as pointer #x70004000) + (when s4-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 (the-as part-tracker s4-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-0 + part-tracker-init + (if (zero? arg2) + (-> *part-group-id-table* 41) + (-> *part-group-id-table* 40) + ) + -1 + part-water-splash-callback + arg0 + #f + arg1 + ) + (-> s4-0 ppointer) ) - ) - (run-now-in-process s4-0 part-tracker-init (if (zero? arg2) - (-> *part-group-id-table* 41) - (-> *part-group-id-table* 40) - ) - -1 - part-water-splash-callback - arg0 - #f - arg1 - ) - (-> s4-0 ppointer) ) - ) 0 (none) ) -(defmethod - dummy-13 - water-control - ((obj water-control) (arg0 float) (arg1 vector) (arg2 int) (arg3 vector)) +(defmethod dummy-13 water-control ((obj water-control) (arg0 float) (arg1 vector) (arg2 int) (arg3 vector)) (when (and (logtest? (-> obj flags) 32) (logtest? #x800000 (-> obj flags))) - (let ((a1-3 (vector+float*! (new 'stack-no-clear 'vector) arg1 arg3 0.05))) - (set! (-> a1-3 y) (-> obj surface-height)) - (splash-spawn (the-as basic arg0) (the-as basic a1-3) arg2) + (let ((a1-3 (vector+float*! (new 'stack-no-clear 'vector) arg1 arg3 0.05))) + (set! (-> a1-3 y) (-> obj surface-height)) + (splash-spawn (the-as basic arg0) (the-as basic a1-3) arg2) + ) ) - ) 0 (none) ) (defmethod dummy-27 water-vol ((obj water-vol)) (when (handle->process (-> obj target)) - (let ((v1-7 (-> (the-as target (-> obj target process 0)) water))) - (set! (-> v1-7 flags) (logand -129892623 (-> v1-7 flags))) - (set! (-> v1-7 volume) (the-as handle #f)) + (let ((v1-7 (-> (the-as target (-> obj target process 0)) water))) + (set! (-> v1-7 flags) (logand -129892623 (-> v1-7 flags))) + (set! (-> v1-7 volume) (the-as handle #f)) + ) + (set! (-> obj target) (the-as handle #f)) + (iterate-process-tree + *entity-pool* + (lambda ((arg0 water-vol)) (with-pp + (if (and (type-type? (-> arg0 type) water-vol) (!= arg0 pp)) + (send-event arg0 'update) + ) + ) + ) + *null-kernel-context* + ) + (process-entity-status! obj (entity-perm-status bit-3) #f) ) - (set! (-> obj target) (the-as handle #f)) - (iterate-process-tree *entity-pool* (lambda ((arg0 water-vol)) - (with-pp - (if - (and - (type-type? (-> arg0 type) water-vol) - (!= arg0 pp) - ) - (send-event arg0 'update) - ) - ) - ) - *null-kernel-context* - ) - (process-entity-status! obj (entity-perm-status bit-3) #f) - ) 0 (none) ) (defmethod TODO-RENAME-26 water-vol ((obj water-vol)) (with-pp - (cond - ((handle->process (-> obj target)) - (cond - ((not - (dummy-10 - (-> obj vol) - (-> (the-as target (-> obj target process 0)) control trans) - ) - ) - (dummy-27 obj) - ) - (else - (let ((v1-15 (-> (the-as target (-> obj target process 0)) water))) - (when - (and - (logtest? #x80000 (-> obj flags)) - (logtest? (-> v1-15 flags) 512) - (>= (-> v1-15 surface-height) (-> v1-15 bottom 0 y)) + (cond + ((handle->process (-> obj target)) + (cond + ((not (dummy-10 (-> obj vol) (-> (the-as target (-> obj target process 0)) control trans))) + (dummy-27 obj) ) - (let ((v1-18 (-> obj attack-event))) - (case v1-18 - ((#f) + (else + (let ((v1-15 (-> (the-as target (-> obj target process 0)) water))) + (when (and + (logtest? #x80000 (-> obj flags)) + (logtest? (-> v1-15 flags) 512) + (>= (-> v1-15 surface-height) (-> v1-15 bottom 0 y)) + ) + (let ((v1-18 (-> obj attack-event))) + (case v1-18 + ((#f) + ) + (('heat) + (send-event (handle->process (-> obj target)) 'heat (* 10.0 (-> *display* seconds-per-frame))) + ) + (('drown-death 'lava 'dark-eco-pool) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) pp) + (set! (-> a1-8 num-params) 2) + (set! (-> a1-8 message) 'attack-invinc) + (set! (-> a1-8 param 0) (the-as uint #f)) + (let ((a0-19 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-19 mode) v1-18) + (set! (-> a1-8 param 1) (the-as uint a0-19)) + ) + (if (send-event-function (handle->process (-> obj target)) a1-8) + (send-event obj 'notify 'attack) + ) + ) + ) + (else + (let ((a1-10 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-10 from) pp) + (set! (-> a1-10 num-params) 2) + (set! (-> a1-10 message) 'attack) + (set! (-> a1-10 param 0) (the-as uint #f)) + (let ((a0-27 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-27 mode) v1-18) + (set! (-> a1-10 param 1) (the-as uint a0-27)) + ) + (if (send-event-function (handle->process (-> obj target)) a1-10) + (send-event obj 'notify 'attack) + ) + ) + ) + ) + ) + ) ) - (('heat) - (send-event - (handle->process (-> obj target)) - 'heat - (* 10.0 (-> *display* seconds-per-frame)) - ) - ) - (('drown-death 'lava 'dark-eco-pool) - (let ((a1-8 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-8 from) pp) - (set! (-> a1-8 num-params) 2) - (set! (-> a1-8 message) 'attack-invinc) - (set! (-> a1-8 param 0) (the-as uint #f)) - (let ((a0-19 (new 'static 'attack-info :mask #x20))) - (set! (-> a0-19 mode) v1-18) - (set! (-> a1-8 param 1) (the-as uint a0-19)) - ) - (if (send-event-function (handle->process (-> obj target)) a1-8) - (send-event obj 'notify 'attack) - ) - ) - ) - (else - (let ((a1-10 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-10 from) pp) - (set! (-> a1-10 num-params) 2) - (set! (-> a1-10 message) 'attack) - (set! (-> a1-10 param 0) (the-as uint #f)) - (let ((a0-27 (new 'static 'attack-info :mask #x20))) - (set! (-> a0-27 mode) v1-18) - (set! (-> a1-10 param 1) (the-as uint a0-27)) - ) - (if (send-event-function (handle->process (-> obj target)) a1-10) - (send-event obj 'notify 'attack) - ) - ) - ) ) - ) ) - ) + ) + ((and + *target* + (and (not (handle->process (-> *target* water volume))) (dummy-10 (-> obj vol) (-> *target* control trans))) + ) + (let ((s5-0 (-> *target* water))) + (process-entity-status! obj (entity-perm-status bit-3) #t) + (set! (-> s5-0 volume) (process->handle obj)) + (set! (-> obj target) (process->handle *target*)) + (logior! (-> s5-0 flags) 2) + (set! (-> s5-0 base-height) (-> obj water-height)) + (set! (-> s5-0 ocean-offset) 0.0) + (logior! (-> s5-0 flags) (-> obj flags)) + (if (< 0.0 (-> obj wade-height)) + (set! (-> s5-0 wade-height) (-> obj wade-height)) + ) + (if (< 0.0 (-> obj swim-height)) + (set! (-> s5-0 swim-height) (-> obj swim-height)) + ) + (if (< 0.0 (-> obj bottom-height)) + (set! (-> s5-0 bottom-height) (-> obj bottom-height)) + ) + (set-zero! (-> s5-0 bob)) + ) ) ) - ) - ((and - *target* - (and - (not (handle->process (-> *target* water volume))) - (dummy-10 (-> obj vol) (-> *target* control trans)) - ) - ) - (let ((s5-0 (-> *target* water))) - (process-entity-status! obj (entity-perm-status bit-3) #t) - (set! (-> s5-0 volume) (process->handle obj)) - (set! (-> obj target) (process->handle *target*)) - (logior! (-> s5-0 flags) 2) - (set! (-> s5-0 base-height) (-> obj water-height)) - (set! (-> s5-0 ocean-offset) 0.0) - (logior! (-> s5-0 flags) (-> obj flags)) - (if (< 0.0 (-> obj wade-height)) - (set! (-> s5-0 wade-height) (-> obj wade-height)) - ) - (if (< 0.0 (-> obj swim-height)) - (set! (-> s5-0 swim-height) (-> obj swim-height)) - ) - (if (< 0.0 (-> obj bottom-height)) - (set! (-> s5-0 bottom-height) (-> obj bottom-height)) - ) - (set-zero! (-> s5-0 bob)) - ) - ) + 0 + (none) ) - 0 - (none) - ) ) (defstate water-vol-startup (water-vol) :virtual #t :code - (behavior () - (go-virtual water-vol-idle) - (none) - ) + (behavior () (go-virtual water-vol-idle) (none)) ) (defstate water-vol-idle (water-vol) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'update) - (TODO-RENAME-26 self) - ) - ) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'update) + (TODO-RENAME-26 self) + ) + ) + ) ) - ) :exit - (behavior () - (dummy-27 self) - (none) - ) + (behavior () (dummy-27 self) (none)) :trans - (behavior () - (TODO-RENAME-26 self) - (none) - ) + (behavior () (TODO-RENAME-26 self) (none)) :code (the-as (function none :behavior water-vol) anim-loop) ) @@ -2210,21 +1527,17 @@ ;; WARN: disable def twice: 85. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. (defmethod TODO-RENAME-29 water-vol ((obj water-vol)) (local-vars (sv-16 res-tag)) - (set! - (-> obj attack-event) - (the-as - symbol - ((method-of-type res-lump get-property-struct) - (-> obj entity) - 'attack-event - 'interp - -1000000000.0 - 'drown - (the-as (pointer res-tag) #f) - *res-static-buf* - ) - ) - ) + (set! (-> obj attack-event) (the-as symbol ((method-of-type res-lump get-property-struct) + (-> obj entity) + 'attack-event + 'interp + -1000000000.0 + 'drown + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) (process-drawable-from-entity! obj (the-as entity-actor (-> obj entity))) (logclear! (-> obj mask) (process-mask actor-pause)) (set! (-> obj vol) (new 'process 'vol-control obj)) @@ -2232,55 +1545,52 @@ (set! (-> obj bottom-height) 32768.0) (set! (-> obj target) (the-as handle #f)) (set! sv-16 (new 'static 'res-tag)) - (let - ((v1-8 - (the-as - (pointer float) - ((method-of-type res-lump get-property-data) - (-> obj entity) - 'water-height - 'exact - -1000000000.0 - (the-as pointer #f) - (& sv-16) - *res-static-buf* - ) + (let ((v1-8 (the-as (pointer float) ((method-of-type res-lump get-property-data) + (-> obj entity) + 'water-height + 'exact + -1000000000.0 + (the-as pointer #f) + (& sv-16) + *res-static-buf* + ) + ) + ) + ) + (when v1-8 + (set! (-> obj water-height) (-> v1-8 0)) + (set! (-> obj wade-height) (-> v1-8 1)) + (set! (-> obj swim-height) (-> v1-8 2)) + (if (>= (-> sv-16 elt-count) (the-as uint 4)) + (set! (-> obj flags) (the-as uint (the int (-> v1-8 3)))) + ) + (if (>= (-> sv-16 elt-count) (the-as uint 5)) + (set! (-> obj bottom-height) (-> v1-8 4)) + ) ) - ) ) - (when v1-8 - (set! (-> obj water-height) (-> v1-8 0)) - (set! (-> obj wade-height) (-> v1-8 1)) - (set! (-> obj swim-height) (-> v1-8 2)) - (if (>= (-> sv-16 elt-count) (the-as uint 4)) - (set! (-> obj flags) (the-as uint (the int (-> v1-8 3)))) - ) - (if (>= (-> sv-16 elt-count) (the-as uint 5)) - (set! (-> obj bottom-height) (-> v1-8 4)) - ) - ) - ) (set! (-> obj flags) (logior #x800000 (-> obj flags))) (cond - ((zero? (-> obj flags)) - (if (< 0.0 (-> obj wade-height)) - (logior! (-> obj flags) 4) + ((zero? (-> obj flags)) + (if (< 0.0 (-> obj wade-height)) + (logior! (-> obj flags) 4) + ) + (when (< 0.0 (-> obj swim-height)) + (let ((v0-4 (logior (-> obj flags) 8))) + (set! (-> obj flags) v0-4) + v0-4 + ) + ) ) - (when (< 0.0 (-> obj swim-height)) - (let ((v0-4 (logior (-> obj flags) 8))) - (set! (-> obj flags) v0-4) - v0-4 + (else + (the-as uint #f) ) - ) ) - (else - (the-as uint #f) - ) - ) ) (defmethod TODO-RENAME-22 water-vol ((obj water-vol)) - (the-as ripple-wave-set 0) + 0 + (none) ) (defbehavior water-vol-init-by-other water-vol ((arg0 entity)) diff --git a/goal_src/engine/target/target-death.gc b/goal_src/engine/target/target-death.gc index 243f8fe80d..dcf3d4301c 100644 --- a/goal_src/engine/target/target-death.gc +++ b/goal_src/engine/target/target-death.gc @@ -5,16 +5,6 @@ ;; name in dgo: target-death ;; dgos: GAME, ENGINE -;; TODO - for target-flut -; (define-extern target-hit-effect (function attack-info none :behavior target)) -; (define-extern *smack-mods* surface) ;; unknown type -; (define-extern target-hit-orient (function attack-info vector symbol :behavior target)) -; (define-extern target-hit-move (function attack-info symbol (function none :behavior target) float none :behavior target)) - -(define-extern target-title (state target)) ;; unknown type -(define-extern target-demo (state target)) ;; unknown type -(define-extern target-warp-in (state target)) ;; unknown type - ;; DECOMP BEGINS (defskelgroup *deathcam-sg* deathcam @@ -454,10 +444,8 @@ (set-continue! *game-info* "lavatube-end") ) ) + (go target-warp-in s5-6 (-> arg0 trans)) ) - enter-state - (-> arg0 trans) - (go target-warp-in) ) (else (let ((s5-7 (-> *display* base-frame-counter))) diff --git a/goal_src/engine/target/target-h.gc b/goal_src/engine/target/target-h.gc index d7f45c581e..3fe95866aa 100644 --- a/goal_src/engine/target/target-h.gc +++ b/goal_src/engine/target/target-h.gc @@ -90,6 +90,7 @@ (:states (target-clone-anim handle) (target-death symbol) + target-demo (target-hit-ground symbol) (target-racing-bounce float float symbol) (target-racing-clone-anim handle) @@ -103,8 +104,7 @@ (target-racing-hit handle attack-info) (target-racing-jump float float symbol) target-title - target-demo - target-warp-in + (target-warp-in vector vector) ) ) diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc index f71d3b1741..fb173932b5 100644 --- a/goal_src/engine/ui/text-h.gc +++ b/goal_src/engine/ui/text-h.gc @@ -368,12 +368,12 @@ (dark-crystal-run-away #x439) (cave-trap-nest-hint #x440) (snow-fort-reminder #x443) - - (ram-boss-red-eco-hint #x444) (ice-cube-hint #x448) + (snowy-turned-on-yellow-vents #x44c) + (village3-warp-gate-reminder #x452) (village3-warp-gate-reminder=annoyed #x453) (village3-warp-gate-reminder-very-annoyed #x454) diff --git a/goal_src/levels/common/battlecontroller.gc b/goal_src/levels/common/battlecontroller.gc index c94ddb5220..f83952c329 100644 --- a/goal_src/levels/common/battlecontroller.gc +++ b/goal_src/levels/common/battlecontroller.gc @@ -741,22 +741,15 @@ battlecontroller-default-event-handler (defmethod deactivate battlecontroller ((obj battlecontroller)) (with-pp - (let ((gp-0 pp)) - (let ((s6-1 obj)) - ) - (battlecontroller-off) - (let ((s6-2 gp-0)) - ) + (let ((gp-0 pp)) + (set! pp obj) + (battlecontroller-off) + (set! pp gp-0) + ) + ((the-as (function process-drawable none) (find-parent-method battlecontroller 10)) obj) + 0 + (none) ) - ((the-as - (function process-drawable none) - (find-parent-method battlecontroller 10) - ) - obj - ) - 0 - (none) - ) ) (defmethod TODO-RENAME-27 battlecontroller ((obj battlecontroller)) diff --git a/goal_src/levels/common/dark-eco-pool.gc b/goal_src/levels/common/dark-eco-pool.gc index ad9c9109ed..959ed318cd 100644 --- a/goal_src/levels/common/dark-eco-pool.gc +++ b/goal_src/levels/common/dark-eco-pool.gc @@ -16,485 +16,430 @@ ) -(define - ripple-for-misty-dark-eco-pool - (new 'static 'ripple-wave-set - :count 3 - :converted #f - :normal-scale 3.0 - :wave - (new 'static 'inline-array ripple-wave 4 - (new 'static 'ripple-wave :scale 40.0 :xdiv 2 :speed 0.5) - (new 'static 'ripple-wave :scale 15.0 :xdiv -2 :zdiv 2 :speed 2.0) - (new 'static 'ripple-wave :scale 3.0 :xdiv 5 :zdiv 3 :speed 2.0) - (new 'static 'ripple-wave) - ) - ) - ) +(define ripple-for-misty-dark-eco-pool (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 3.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 2 :speed 0.5) + (new 'static 'ripple-wave :scale 15.0 :xdiv -2 :zdiv 2 :speed 2.0) + (new 'static 'ripple-wave :scale 3.0 :xdiv 5 :zdiv 3 :speed 2.0) + (new 'static 'ripple-wave) + ) + ) + ) (define ripple-for-maincave-dark-eco-pool (new 'static 'ripple-wave-set - :count 3 - :converted #f - :normal-scale 8.57 - :wave - (new 'static 'inline-array ripple-wave 4 - (new 'static 'ripple-wave :scale 14.0 :xdiv 1 :speed 1.0) - (new 'static 'ripple-wave :scale 5.25 :xdiv -1 :zdiv 1 :speed 4.0) - (new 'static 'ripple-wave :scale 0.7 :xdiv 5 :zdiv 3 :speed 2.0) - (new 'static 'ripple-wave) + :count 3 + :converted #f + :normal-scale 8.57 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 14.0 :xdiv 1 :speed 1.0) + (new 'static 'ripple-wave :scale 5.25 :xdiv -1 :zdiv 1 :speed 4.0) + (new 'static 'ripple-wave :scale 0.7 :xdiv 5 :zdiv 3 :speed 2.0) + (new 'static 'ripple-wave) + ) ) - ) ) (define ripple-for-finalboss-dark-eco-pool (new 'static 'ripple-wave-set - :count 3 - :converted #f - :normal-scale 4.0 - :wave - (new 'static 'inline-array ripple-wave 4 - (new 'static 'ripple-wave :scale 25.0 :xdiv 2 :speed -2.0) - (new 'static 'ripple-wave :scale 15.0 :xdiv -2 :zdiv 2 :speed 3.0) - (new 'static 'ripple-wave :scale 4.0 :xdiv 5 :zdiv 3 :speed 4.0) - (new 'static 'ripple-wave) + :count 3 + :converted #f + :normal-scale 4.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 25.0 :xdiv 2 :speed -2.0) + (new 'static 'ripple-wave :scale 15.0 :xdiv -2 :zdiv 2 :speed 3.0) + (new 'static 'ripple-wave :scale 4.0 :xdiv 5 :zdiv 3 :speed 4.0) + (new 'static 'ripple-wave) + ) ) - ) ) -(define - ripple-for-dark-eco-pool - (new 'static 'ripple-wave-set - :count 3 - :converted #f - :normal-scale 3.0 - :wave - (new 'static 'inline-array ripple-wave 4 - (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.0) - (new 'static 'ripple-wave :scale 15.0 :xdiv -1 :zdiv 1 :speed 4.0) - (new 'static 'ripple-wave :scale 2.0 :xdiv 5 :zdiv 3 :speed 2.0) - (new 'static 'ripple-wave) - ) - ) - ) +(define ripple-for-dark-eco-pool (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 3.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.0) + (new 'static 'ripple-wave :scale 15.0 :xdiv -1 :zdiv 1 :speed 4.0) + (new 'static 'ripple-wave :scale 2.0 :xdiv 5 :zdiv 3 :speed 2.0) + (new 'static 'ripple-wave) + ) + ) + ) (define ripple-for-sunken-dark-eco-helix-room (new 'static 'ripple-wave-set - :count 3 - :converted #f - :normal-scale 8.0 - :wave - (new 'static 'inline-array ripple-wave 4 - (new 'static 'ripple-wave :scale 15.0 :xdiv 1 :speed 1.0) - (new 'static 'ripple-wave :scale 5.625 :xdiv -1 :zdiv 1 :speed 4.0) - (new 'static 'ripple-wave :scale 0.75 :xdiv 5 :zdiv 3 :speed 2.0) - (new 'static 'ripple-wave) + :count 3 + :converted #f + :normal-scale 8.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 15.0 :xdiv 1 :speed 1.0) + (new 'static 'ripple-wave :scale 5.625 :xdiv -1 :zdiv 1 :speed 4.0) + (new 'static 'ripple-wave :scale 0.75 :xdiv 5 :zdiv 3 :speed 2.0) + (new 'static 'ripple-wave) + ) ) - ) ) (defmethod TODO-RENAME-25 dark-eco-pool ((obj dark-eco-pool)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-25))) - (t9-0 obj) - ) + (t9-0 obj) + ) (set! (-> obj flags) (logand -8388609 (-> obj flags))) (set! (-> obj flags) (logior #x1000000 (-> obj flags))) - (let - ((v0-1 - ((the-as - (function res-lump symbol symbol float structure (pointer res-tag) pointer object) - (method-of-type res-lump get-property-struct) - ) - (-> obj entity) - 'attack-event - 'interp - -1000000000.0 - 'dark-eco-pool - (the-as (pointer res-tag) #f) - *res-static-buf* - ) - ) + (let ((v0-1 ((the-as + (function res-lump symbol symbol float structure (pointer res-tag) pointer object) + (method-of-type res-lump get-property-struct) + ) + (-> obj entity) + 'attack-event + 'interp + -1000000000.0 + 'dark-eco-pool + (the-as (pointer res-tag) #f) + *res-static-buf* + ) + ) + ) + (set! (-> obj attack-event) (the-as symbol v0-1)) + v0-1 ) - (set! (-> obj attack-event) (the-as symbol v0-1)) - v0-1 - ) ) (defmethod TODO-RENAME-22 dark-eco-pool ((obj dark-eco-pool)) - (local-vars (v0-3 ripple-wave-set)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) - (t9-0 obj) - ) + (t9-0 obj) + ) (let ((gp-0 (new 'process 'ripple-control))) - (set! (-> obj draw ripple) gp-0) - (set! (-> gp-0 global-scale) 3072.0) - (set! (-> gp-0 close-fade-dist) 163840.0) - (set! (-> gp-0 far-fade-dist) 245760.0) - (set! (-> gp-0 waveform) ripple-for-dark-eco-pool) - (set! (-> gp-0 query) (new 'process 'ripple-merc-query 100)) - (case (-> obj look) - ((32) - (set! v0-3 ripple-for-misty-dark-eco-pool) - (set! (-> gp-0 waveform) v0-3) - v0-3 + (set! (-> obj draw ripple) gp-0) + (set! (-> gp-0 global-scale) 3072.0) + (set! (-> gp-0 close-fade-dist) 163840.0) + (set! (-> gp-0 far-fade-dist) 245760.0) + (set! (-> gp-0 waveform) ripple-for-dark-eco-pool) + (set! (-> gp-0 query) (new 'process 'ripple-merc-query 100)) + (case (-> obj look) + ((32) + (set! (-> gp-0 waveform) ripple-for-misty-dark-eco-pool) + ) + ((15 16 17 18 19 20) + (set! (-> gp-0 waveform) ripple-for-maincave-dark-eco-pool) + ) + ((40) + (set! (-> gp-0 waveform) ripple-for-sunken-dark-eco-helix-room) + ) + ((41) + (set! (-> gp-0 waveform) ripple-for-finalboss-dark-eco-pool) + ) ) - ((15 16 17 18 19 20) - (set! v0-3 ripple-for-maincave-dark-eco-pool) - (set! (-> gp-0 waveform) v0-3) - v0-3 - ) - ((40) - (set! v0-3 ripple-for-sunken-dark-eco-helix-room) - (set! (-> gp-0 waveform) v0-3) - v0-3 - ) - ((41) - (set! v0-3 ripple-for-finalboss-dark-eco-pool) - (set! (-> gp-0 waveform) v0-3) - v0-3 - ) ) - ) + (none) ) -(set! - (-> *part-group-id-table* 444) - (new 'static 'sparticle-launch-group - :length 1 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-dark-eco-nasty" - :launcher - (new 'static 'inline-array sparticle-group-item 1 - (sp-item 2020 :fade-after (meters 50.0)) - ) - :bounds (new 'static 'sphere :w 32768.0) - ) - ) +(set! (-> *part-group-id-table* 444) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-dark-eco-nasty" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2020 :fade-after (meters 50.0))) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) -(set! - (-> *part-id-table* 2020) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-y (meters 0.0)) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) - (sp-flt spt-scale-y (meters 0.25)) - (sp-flt spt-r 255.0) - (sp-flt spt-g 255.0) - (sp-flt spt-b 255.0) - (sp-rnd-flt spt-a 96.0 32.0 1.0) - (sp-flt spt-scalevel-x (meters 0.1875)) - (sp-flt spt-scalevel-y (meters -0.001875)) - (sp-flt spt-fade-a -3.2) - (sp-int spt-timer 10) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-int spt-next-time 15) - (sp-launcher-by-id spt-next-launcher 2021) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2020) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) + (sp-flt spt-scale-y (meters 0.25)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.1875)) + (sp-flt spt-scalevel-y (meters -0.001875)) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 2021) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2021) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 5 - (sp-flt spt-r 255.0) - (sp-rnd-flt spt-g 128.0 128.0 1.0) - (sp-flt spt-b 0.0) - (sp-flt spt-fade-a -1.28) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2021) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-fade-a -1.28) + (sp-end) + ) + ) + ) -(set! - (-> *part-group-id-table* 445) - (new 'static 'sparticle-launch-group - :length 19 - :duration #x258 - :linger-duration #x258 - :flags (sp-group-flag use-local-clock) - :name "group-dark-eco-pool-nasty" - :launcher - (new 'static 'inline-array sparticle-group-item 19 - (sp-item 2056 :fade-after (meters 100.0) :period 600 :length 5) - (sp-item 2057 :fade-after (meters 100.0) :period 600 :length 5 :binding 2052) - (sp-item 2052 :flags (start-dead launch-asap) :binding 2053) - (sp-item 2053 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) - (sp-item 2052 :flags (start-dead launch-asap) :binding 2053) - (sp-item 2053 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) - (sp-item 2052 :flags (start-dead launch-asap) :binding 2053) - (sp-item 2053 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) - (sp-item 2052 :flags (start-dead launch-asap) :binding 2053) - (sp-item 2053 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) - (sp-item 2058 :fade-after (meters 100.0) :period 600 :length 5 :binding 2054) - (sp-item 2054 :flags (start-dead launch-asap) :binding 2055) - (sp-item 2055 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) - (sp-item 2054 :flags (start-dead launch-asap) :binding 2055) - (sp-item 2055 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) - (sp-item 2054 :flags (start-dead launch-asap) :binding 2055) - (sp-item 2055 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) - (sp-item 2054 :flags (start-dead launch-asap) :binding 2055) - (sp-item 2055 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) - ) - :bounds (new 'static 'sphere :w 49152.0) - ) - ) +(set! (-> *part-group-id-table* 445) + (new 'static 'sparticle-launch-group + :length 19 + :duration #x258 + :linger-duration #x258 + :flags (sp-group-flag use-local-clock) + :name "group-dark-eco-pool-nasty" + :launcher + (new 'static 'inline-array sparticle-group-item 19 + (sp-item 2056 :fade-after (meters 100.0) :period 600 :length 5) + (sp-item 2057 :fade-after (meters 100.0) :period 600 :length 5 :binding 2052) + (sp-item 2052 :flags (start-dead launch-asap) :binding 2053) + (sp-item 2053 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2052 :flags (start-dead launch-asap) :binding 2053) + (sp-item 2053 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2052 :flags (start-dead launch-asap) :binding 2053) + (sp-item 2053 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2052 :flags (start-dead launch-asap) :binding 2053) + (sp-item 2053 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2058 :fade-after (meters 100.0) :period 600 :length 5 :binding 2054) + (sp-item 2054 :flags (start-dead launch-asap) :binding 2055) + (sp-item 2055 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2054 :flags (start-dead launch-asap) :binding 2055) + (sp-item 2055 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2054 :flags (start-dead launch-asap) :binding 2055) + (sp-item 2055 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 2054 :flags (start-dead launch-asap) :binding 2055) + (sp-item 2055 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + ) + :bounds (new 'static 'sphere :w 49152.0) + ) + ) -(set! - (-> *part-id-table* 2056) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 13 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 8.0)) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 0.0 96.0 1.0) - (sp-rnd-flt spt-g 0.0 32.0 1.0) - (sp-rnd-flt spt-b 64.0 32.0 1.0) - (sp-flt spt-a 64.0) - (sp-flt spt-fade-a -1.8285716) - (sp-int spt-timer 54) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2056) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 8.0)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-a -1.8285716) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2057) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 14 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-rnd-flt spt-num 1.0 6.0 1.0) - (sp-flt spt-y (meters 1.0)) - (sp-flt spt-scale-x (meters 0.1)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-a 0.0) - (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.02) 1.0) - (sp-flt spt-accel-y -3.4133334) - (sp-flt spt-friction 0.94) - (sp-int spt-timer 240) - (sp-cpuinfo-flags bit3) - (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2057) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-rnd-flt spt-num 1.0 6.0 1.0) + (sp-flt spt-y (meters 1.0)) + (sp-flt spt-scale-x (meters 0.1)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.02) 1.0) + (sp-flt spt-accel-y -3.4133334) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 240) + (sp-cpuinfo-flags bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2052) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 21 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) - (sp-rnd-flt spt-z 1228.8 1228.8 1.0) - (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.3) 1.0) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 0.0 96.0 1.0) - (sp-rnd-flt spt-g 0.0 32.0 1.0) - (sp-rnd-flt spt-b 64.0 32.0 1.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-rnd-flt spt-omega 0.0 65536.0 1.0) - (sp-rnd-flt spt-vel-x (meters 0.026666667) (meters 0.10666667) 1.0) - (sp-flt spt-scalevel-x (meters -0.000909091)) - (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-g -0.26666668) - (sp-flt spt-fade-a -0.19393939) - (sp-int-plain-rnd spt-timer 60 179 1) - (sp-cpuinfo-flags bit2 bit3 bit7 bit14) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2052) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) + (sp-rnd-flt spt-z 1228.8 1228.8 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.026666667) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.000909091)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.26666668) + (sp-flt spt-fade-a -0.19393939) + (sp-int-plain-rnd spt-timer 60 179 1) + (sp-cpuinfo-flags bit2 bit3 bit7 bit14) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2053) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 32.0 96.0 1.0) - (sp-rnd-flt spt-g 0.0 32.0 1.0) - (sp-rnd-flt spt-b 64.0 32.0 1.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-flt spt-scalevel-x (meters -0.0006190476)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.01904762) - (sp-rnd-flt spt-accel-y -0.40960002 -0.6144 1.0) - (sp-int-plain-rnd spt-timer 30 239 1) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-int spt-next-time 240) - (sp-launcher-by-id spt-next-launcher 198) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2053) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.0006190476)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.01904762) + (sp-rnd-flt spt-accel-y -0.40960002 -0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 239 1) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 198) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2058) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 14 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-rnd-flt spt-num 1.0 6.0 1.0) - (sp-flt spt-y (meters 1.0)) - (sp-flt spt-scale-x (meters 0.1)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-a 0.0) - (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.02) 1.0) - (sp-flt spt-accel-y -3.4133334) - (sp-flt spt-friction 0.94) - (sp-int spt-timer 240) - (sp-cpuinfo-flags bit3) - (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2058) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-rnd-flt spt-num 1.0 6.0 1.0) + (sp-flt spt-y (meters 1.0)) + (sp-flt spt-scale-x (meters 0.1)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.02) 1.0) + (sp-flt spt-accel-y -3.4133334) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 240) + (sp-cpuinfo-flags bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 140.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2054) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 21 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) - (sp-rnd-flt spt-z 1228.8 1228.8 1.0) - (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.3) 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 16.0 32.0 1.0) - (sp-rnd-flt spt-g 0.0 16.0 1.0) - (sp-rnd-flt spt-b 192.0 64.0 1.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-rnd-flt spt-omega 0.0 65536.0 1.0) - (sp-rnd-flt spt-vel-x (meters 0.026666667) (meters 0.10666667) 1.0) - (sp-flt spt-scalevel-x (meters -0.000909091)) - (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-g -0.26666668) - (sp-flt spt-fade-a -0.19393939) - (sp-int-plain-rnd spt-timer 60 179 1) - (sp-cpuinfo-flags bit2 bit3 bit7 bit14) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2054) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) + (sp-rnd-flt spt-z 1228.8 1228.8 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.3) 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 16.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 16.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.026666667) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters -0.000909091)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.26666668) + (sp-flt spt-fade-a -0.19393939) + (sp-int-plain-rnd spt-timer 60 179 1) + (sp-cpuinfo-flags bit2 bit3 bit7 bit14) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2055) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 16.0 32.0 1.0) - (sp-rnd-flt spt-g 0.0 16.0 1.0) - (sp-rnd-flt spt-b 192.0 64.0 1.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-flt spt-scalevel-x (meters -0.0006190476)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.01904762) - (sp-rnd-flt spt-accel-y -0.40960002 -0.6144 1.0) - (sp-int-plain-rnd spt-timer 30 239 1) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-int spt-next-time 240) - (sp-launcher-by-id spt-next-launcher 198) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2055) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 16.0 32.0 1.0) + (sp-rnd-flt spt-g 0.0 16.0 1.0) + (sp-rnd-flt spt-b 192.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.0006190476)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.01904762) + (sp-rnd-flt spt-accel-y -0.40960002 -0.6144 1.0) + (sp-int-plain-rnd spt-timer 30 239 1) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 240) + (sp-launcher-by-id spt-next-launcher 198) + (sp-end) + ) + ) + ) (defstate water-vol-idle (dark-eco-pool) :virtual #t :trans (behavior () - (let ((t9-0 (-> (method-of-type water-anim water-vol-idle) trans))) - (if t9-0 - (t9-0) - ) - ) - (let* ((gp-0 (-> self draw ripple)) - (f0-1 (the float (logand (-> *display* base-frame-counter) #xffff))) - (f0-3 (cos (* 5.0 f0-1))) - (f30-0 (* f0-3 f0-3)) + (let ((t9-0 (-> (method-of-type water-anim water-vol-idle) trans))) + (if t9-0 + (t9-0) ) - (let ((s5-0 (-> self draw ripple query))) - (set! (-> self draw ripple send-query) #t) - (set! (-> s5-0 start-vertex) (rand-vu-int-range 0 255)) - (set! (-> s5-0 vertex-skip) 256) - (when (zero? (rand-vu-int-range 0 15)) - (when - (and - (nonzero? (-> s5-0 vertex-count)) - (< #x32000 (memory-free *nk-dead-pool*)) - ) - (let ((s3-0 (rand-vu-int-range 0 (+ (-> s5-0 vertex-count) -1))) - (s4-1 (get-process *default-dead-pool* part-tracker #x4000)) - ) - (when s4-1 - (let ((t9-7 (method-of-type part-tracker activate))) - (t9-7 - (the-as part-tracker s4-1) - *entity-pool* - 'part-tracker - (the-as pointer #x70004000) + ) + (let* ((gp-0 (-> self draw ripple)) + (f0-1 (the float (logand (-> *display* base-frame-counter) #xffff))) + (f0-3 (cos (* 5.0 f0-1))) + (f30-0 (* f0-3 f0-3)) ) + (let ((s5-0 (-> self draw ripple query))) + (set! (-> self draw ripple send-query) #t) + (set! (-> s5-0 start-vertex) (rand-vu-int-range 0 255)) + (set! (-> s5-0 vertex-skip) 256) + (when (zero? (rand-vu-int-range 0 15)) + (when (and (nonzero? (-> s5-0 vertex-count)) (< #x32000 (memory-free *nk-dead-pool*))) + (let ((s3-0 (rand-vu-int-range 0 (+ (-> s5-0 vertex-count) -1))) + (s4-1 (get-process *default-dead-pool* part-tracker #x4000)) + ) + (when s4-1 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker s4-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s4-1 part-tracker-init (-> *part-group-id-table* 445) -1 #f #f #f (-> s5-0 data s3-0)) + (-> s4-1 ppointer) + ) + ) + ) + ) + ) + (case (-> self look) + ((32) + (set! (-> gp-0 global-scale) (* 4096.0 (* 1.5 (+ 1.0 f30-0)))) + (set! (-> gp-0 individual-normal-scale) (+ 0.5 (* 0.5 f30-0))) + ) + (else + (set! (-> gp-0 global-scale) (* 4096.0 (* 3.0 (+ 1.0 f30-0)))) + (set! (-> gp-0 individual-normal-scale) (+ 0.5 (* 0.5 f30-0))) ) - (run-now-in-process - s4-1 - part-tracker-init - (-> *part-group-id-table* 445) - -1 - #f - #f - #f - (-> s5-0 data s3-0) - ) - (-> s4-1 ppointer) - ) ) - ) ) - ) - (case (-> self look) - ((32) - (set! (-> gp-0 global-scale) (* 4096.0 (* 1.5 (+ 1.0 f30-0)))) - (set! (-> gp-0 individual-normal-scale) (+ 0.5 (* 0.5 f30-0))) - ) - (else - (set! (-> gp-0 global-scale) (* 4096.0 (* 3.0 (+ 1.0 f30-0)))) - (set! (-> gp-0 individual-normal-scale) (+ 0.5 (* 0.5 f30-0))) - ) - ) + (none) ) - (none) - ) ) diff --git a/goal_src/levels/common/water-anim.gc b/goal_src/levels/common/water-anim.gc index 353265527d..88635725ab 100644 --- a/goal_src/levels/common/water-anim.gc +++ b/goal_src/levels/common/water-anim.gc @@ -964,7 +964,8 @@ ) ) ) - (the-as ripple-wave-set (ja-post)) + (ja-post) + (none) ) diff --git a/goal_src/levels/jungle/jungle-obs.gc b/goal_src/levels/jungle/jungle-obs.gc index 6cf4215b77..c64ad673ca 100644 --- a/goal_src/levels/jungle/jungle-obs.gc +++ b/goal_src/levels/jungle/jungle-obs.gc @@ -1493,11 +1493,9 @@ (set! (-> v1-2 global-scale) 3072.0) (set! (-> v1-2 close-fade-dist) 163840.0) (set! (-> v1-2 far-fade-dist) 245760.0) - (let ((v0-2 ripple-for-jungle-water)) - (set! (-> v1-2 waveform) v0-2) - v0-2 - ) + (set! (-> v1-2 waveform) ripple-for-jungle-water) ) + (none) ) diff --git a/goal_src/levels/lavatube/lavatube-obs.gc b/goal_src/levels/lavatube/lavatube-obs.gc index b8f656717c..298e824ecf 100644 --- a/goal_src/levels/lavatube/lavatube-obs.gc +++ b/goal_src/levels/lavatube/lavatube-obs.gc @@ -5,3 +5,1804 @@ ;; name in dgo: lavatube-obs ;; dgos: L1, LAV +;; DECOMP BEGINS + +(deftype lavabase (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + + +(defskelgroup *lavabase-sg* lavabase + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 22) + :longest-edge (meters 9.4) + ) + +(defstate lavabase-idle (lavabase) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavabase) ja-post) + ) + +(defmethod init-from-entity! lavabase ((obj lavabase) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavabase-sg* '()) + (go lavabase-idle) + (none) + ) + +(deftype lavafall (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + + +(defskelgroup *lavafall-sg* lavafall + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 10 0 13) + :longest-edge (meters 5.4) + ) + +(defstate lavafall-idle (lavafall) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavafall) ja-post) + ) + +(defmethod init-from-entity! lavafall ((obj lavafall) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavafall-sg* '()) + (go lavafall-idle) + (none) + ) + +(deftype lavashortcut (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + + +(defskelgroup *lavashortcut-sg* lavashortcut + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 -34 0 105) + :longest-edge (meters 11.9) + ) + +(defstate lavashortcut-idle (lavashortcut) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavashortcut) ja-post) + ) + +(defmethod init-from-entity! lavashortcut ((obj lavashortcut) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavashortcut-sg* '()) + (go lavashortcut-idle) + (none) + ) + +(set! (-> *part-group-id-table* 540) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-darkecobarrel-hit" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1932 :period 15 :length 5)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1932) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters 4.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-rnd-flt spt-scale-x (meters 4.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.14222223) + (sp-rnd-flt spt-accel-y -0.34133333 -0.34133333 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 541) + (new 'static 'sparticle-launch-group + :length 69 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-darkecobarrel-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 69 + (sp-item 2125 :period 600 :length 5) + (sp-item 2126 :period 600 :length 40) + (sp-item 2127 :period 600 :length 20) + (sp-item 2128 :period 600 :length 20) + (sp-item 2166 :fade-after (meters 100.0) :period 600 :length 20 :binding 296) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 2166) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-flt spt-scale-x (meters 0.1)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-flt spt-accel-y -1.3653333) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 240) + (sp-cpuinfo-flags bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2126) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 8.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.21333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 89 1) + (sp-launcher-by-id spt-next-launcher 2129) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2129) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.0666667) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2128) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 6.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 0.4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 16.0)) + (sp-rnd-flt spt-r 64.0 192.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.04)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2125) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 32.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 192.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2127) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -4096.0 8192.0 1.0) + (sp-rnd-flt spt-scale-x (meters 4.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 6.0) 1.0) + (sp-end) + ) + ) + ) + +(deftype darkecobarrel-leak (structure) + ((offset vector :inline :offset-assert 0) + (first-frame basic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + + +(deftype darkecobarrel-base (process-drawable) + ((root-override collide-shape-moving :offset 112) + (speed float :offset-assert 176) + (sync uint64 :offset-assert 184) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xc0 + :flag-assert #x14005000c0 + ) + + +(deftype darkecobarrel-mover (darkecobarrel-base) + ((start-time uint64 :offset-assert 192) + (hits int32 :offset-assert 200) + (leak darkecobarrel-leak 1 :inline :offset-assert 208) + (y-offset bouncing-float :inline :offset-assert 240) + (y-offset-tgt delayed-rand-float :inline :offset-assert 280) + (down oscillating-vector :inline :offset-assert 320) + (down-tgt delayed-rand-vector :inline :offset-assert 384) + ) + :heap-base #x140 + :method-count-assert 20 + :size-assert #x1b0 + :flag-assert #x14014001b0 + ) + + +(deftype darkecobarrel (darkecobarrel-base) + ((self-override darkecobarrel :offset 28) + (spawn-array (array int64) :offset-assert 192) + (cur-spawn int32 :offset-assert 196) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xc8 + :flag-assert #x14006000c8 + ) + + +(defmethod relocate darkecobarrel ((obj darkecobarrel) (arg0 int)) + (if (nonzero? (-> obj spawn-array)) + (&+! (-> obj spawn-array) arg0) + ) + (the-as + darkecobarrel + ((the-as (function darkecobarrel-base int darkecobarrel-base) (find-parent-method darkecobarrel 7)) obj arg0) + ) + ) + +(defskelgroup *darkecobarrel-sg* darkecobarrel + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 -7.75 0 8.6) + :longest-edge (meters 2.8) + ) + +(defbehavior darkecobarrel-base-time darkecobarrel-base () + (+ (-> *display* base-frame-counter) (-> self sync)) + ) + +(defbehavior darkecobarrel-base-pos darkecobarrel-base ((arg0 int)) + (if (< 0.0 (-> self speed)) + (* (-> self speed) (the float (- (darkecobarrel-base-time) arg0))) + (+ 1.0 (* (-> self speed) (the float (- (darkecobarrel-base-time) arg0)))) + ) + ) + +(defbehavior darkecobarrel-base-done? darkecobarrel-base ((arg0 float)) + (or (and (< 0.0 (-> self speed)) (< 1.0 arg0)) (and (< (-> self speed) 0.0) (< arg0 0.0))) + ) + +(defbehavior darkecobarrel-base-init darkecobarrel-base ((arg0 res-lump)) + (process-drawable-from-entity! self (the-as entity-actor arg0)) + (initialize-skeleton self *darkecobarrel-sg* '()) + (set! (-> self path) (new 'process 'path-control self 'path 0.0)) + (let ((v0-3 (logior (-> self path flags) (path-control-flag display draw-line draw-point draw-text)))) + (set! (-> self path flags) v0-3) + v0-3 + ) + ) + +(defbehavior darkecobarrel-mover-pos darkecobarrel-mover () + (let ((f30-0 (darkecobarrel-base-pos (the-as int (-> self start-time))))) + (if (darkecobarrel-base-done? f30-0) + (deactivate self) + ) + (eval-path-curve! (-> self path) (-> self root-override trans) f30-0 'interp) + (+! (-> self root-override trans y) (* 4096.0 (-> self y-offset osc value))) + (set! (-> self root-override trans y) (+ -4096.0 (-> self root-override trans y))) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'matrix)) + ) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (TODO-RENAME-14 (-> self path) s5-0 f30-0) + (set! (-> s4-0 quad) (-> self down value quad)) + (set! (-> s4-0 y) -1.0) + (vector-normalize! s4-0 1.0) + (forward-down-nopitch->inv-matrix gp-0 s5-0 s4-0) + ) + (matrix->quaternion (-> self root-override quat) gp-0) + (dotimes (s5-1 (-> self hits)) + (when (-> self leak s5-1 first-frame) + (set! (-> self leak s5-1 first-frame) #f) + (let ((s4-1 (new 'stack-no-clear 'matrix))) + (matrix-transpose! s4-1 gp-0) + (vector-matrix*! (the-as vector (-> self leak s5-1)) (the-as vector (-> self leak s5-1)) s4-1) + ) + ) + (let ((s4-2 (new 'stack-no-clear 'vector))) + (vector-matrix*! s4-2 (the-as vector (-> self leak s5-1)) gp-0) + (vector+! s4-2 s4-2 (-> self root-override trans)) + (spawn (-> self part) s4-2) + ) + ) + ) + ) + (if (< (vector-vector-xz-distance-squared (-> self root-override trans) (camera-pos)) 1073741800.0) + (logior! (-> self draw status) (draw-status drwf05)) + (set! (-> self draw status) (the-as draw-status (logclear (-> self draw status) (draw-status drwf05)))) + ) + (none) + ) + +(defstate darkecobarrel-mover-die (darkecobarrel-mover) + :code + (behavior () + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (sound-play-by-name (static-sound-name "dcrate-break") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (set! (-> gp-1 quad) (-> self root-override trans quad)) + (set! (-> gp-1 y) (+ -49152.0 (-> gp-1 y))) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 part-tracker-init (-> *part-group-id-table* 541) 600 #f #f #f gp-1) + (-> s5-1 ppointer) + ) + ) + ) + (suspend) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (suspend) + ) + (dummy-18 self) + (deactivate self) + (none) + ) + ) + +(defstate darkecobarrel-mover-move (darkecobarrel-mover) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (cond + ((= arg0 *target*) + (let ((s5-0 (-> arg3 param 0))) + (if (and + s5-0 + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry s5-0) + (-> self root-override) + (the-as uint 1) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack-invinc) + (set! (-> a1-2 param 0) s5-0) + (let ((a0-4 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-4 mode) 'death) + (set! (-> a1-2 param 1) (the-as uint a0-4)) + ) + (send-event-function arg0 a1-2) + ) + ) + (go darkecobarrel-mover-die) + ) + ) + ) + ((>= arg1 2) + (case (-> arg3 param 1) + (('eco-yellow) + (+! (-> self hits) 1) + (cond + ((>= (-> self hits) 2) + (go darkecobarrel-mover-die) + ) + (else + (let ((v1-17 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) + arg0 + ) + ) + (gp-1 (new 'stack-no-clear 'vector)) + ) + (set! (-> self leak (+ (-> self hits) -1) first-frame) #t) + (cond + (v1-17 + (vector-! gp-1 (-> (the-as process-drawable v1-17) root trans) (-> self root-override trans)) + (set! (-> self leak (+ (-> self hits) -1) offset quad) (-> gp-1 quad)) + (vector-normalize! gp-1 -0.04) + (let ((v0-0 (the-as object (-> self down vel)))) + (set! (-> (the-as vector v0-0) quad) (-> gp-1 quad)) + v0-0 + ) + ) + (else + (set! (-> self leak (+ (-> self hits) -1) offset quad) (-> self root-override trans quad)) + (let ((f0-1 (+ -49152.0 (-> self leak (+ (-> self hits) -1) offset y)))) + (set! (-> self leak (+ (-> self hits) -1) offset y) f0-1) + f0-1 + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :trans + (behavior () + (update! (-> self y-offset) 0.0) + (if (and (at-min? (-> self y-offset)) (< (-> self y-offset osc vel) 0.03)) + (set! (-> self y-offset osc vel) (fabs (update! (-> self y-offset-tgt)))) + ) + (update! (-> self down) (update-with-delay! (-> self down-tgt))) + (darkecobarrel-mover-pos) + (none) + ) + :code + (behavior () + (let* ((f30-0 0.9) + (f28-0 0.25) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + ) + (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2)))) + ) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 num-func) num-func-identity) + (let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-9 (the-as number (logior #x3f800000 v1-8))) + ) + (set! (-> gp-0 frame-num) (* (+ -1.0 (the-as float v1-9)) (the float (ja-num-frames 0)))) + ) + ) + (while #t + (let ((v1-14 (-> self skel root-channel 0))) + (set! (-> v1-14 num-func) num-func-identity) + (set! (-> v1-14 frame-num) 0.0) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior darkecobarrel-mover) pusher-post) + ) + +(defbehavior darkecobarrel-mover-init-by-other darkecobarrel-mover ((arg0 res-lump) (arg1 float) (arg2 uint) (arg3 uint)) + (let ((s2-0 (new 'process 'collide-shape-moving self (collide-list-enum usually-hit-by-player)))) + (set! (-> s2-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s2-0 reaction) default-collision-reaction) + (set! (-> s2-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s1-0 (new 'process 'collide-shape-prim-group s2-0 (the-as uint 2) 0))) + (set! (-> s1-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s1-0 collide-with) (the-as uint 16)) + (set! (-> s1-0 prim-core action) (the-as uint 1)) + (set! (-> s1-0 transform-index) 3) + (set-vector! (-> s1-0 local-sphere) 0.0 -32768.0 0.0 32768.0) + (set-root-prim! s2-0 s1-0) + (let ((s0-0 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 0) (the-as uint 1)))) + (set! (-> s0-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s0-0 collide-with) (the-as uint 16)) + (set! (-> s0-0 prim-core action) (the-as uint 1)) + (set! (-> s0-0 prim-core offense) 4) + (set! (-> s0-0 transform-index) 3) + (set-vector! (-> s0-0 local-sphere) 0.0 -32768.0 0.0 32768.0) + (append-prim s1-0 s0-0) + ) + (let ((s0-1 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> s0-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s0-1 collide-with) (the-as uint 16)) + (set! (-> s0-1 prim-core action) (the-as uint 1)) + (set! (-> s0-1 prim-core offense) 4) + (set! (-> s0-1 transform-index) 3) + (set-vector! (-> s0-1 local-sphere) 0.0 -32768.0 0.0 32768.0) + (append-prim s1-0 s0-1) + ) + ) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (backup-collide-with-as s2-0) + (set! (-> self root-override) s2-0) + ) + (darkecobarrel-base-init arg0) + (set! (-> self part) (create-launch-control (-> *part-group-id-table* 540) self)) + (set! (-> self speed) arg1) + (set! (-> self start-time) arg2) + (set! (-> self sync) arg3) + (set! (-> self hits) 0) + (set-params! (-> self y-offset-tgt) 300 900 0.5) + (set-params! (-> self y-offset) 0.0 1.0 0.0 0.7 0.08 0.1 0.97) + (set-params! (-> self down) (the-as vector #f) 0.005 0.05 0.999) + (set-params! (-> self down-tgt) 300 600 0.05 0.9) + (darkecobarrel-mover-pos) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self mask) (logior (process-mask attackable) (-> self mask))) + (go darkecobarrel-mover-move) + (none) + ) + +(defbehavior darkecobarrel-advance-curspawn darkecobarrel () + (+! (-> self cur-spawn) 1) + (when (>= (-> self cur-spawn) (-> self spawn-array length)) + (set! (-> self self-override cur-spawn) 0) + 0 + ) + (none) + ) + +(defbehavior darkecobarrel-cycle-time darkecobarrel () + (-> self spawn-array (+ (-> self spawn-array length) -1)) + ) + +(defstate darkecobarrel-spawner (darkecobarrel) + :trans + (behavior () + (let ((gp-1 (mod (darkecobarrel-base-time) (darkecobarrel-cycle-time)))) + (if (and (> (-> self cur-spawn) 0) (< gp-1 (-> self spawn-array (+ (-> self cur-spawn) -1)))) + (+! gp-1 (darkecobarrel-cycle-time)) + ) + (let ((gp-2 (- gp-1 (-> self spawn-array (-> self cur-spawn))))) + (when (>= gp-2 0) + (let ((s5-0 (get-process *default-dead-pool* darkecobarrel-mover #x4000))) + (when s5-0 + (let ((t9-4 (method-of-type darkecobarrel-mover activate))) + (t9-4 (the-as darkecobarrel-mover s5-0) self 'darkecobarrel-mover (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + darkecobarrel-mover-init-by-other + (-> self entity) + (-> self speed) + (- (darkecobarrel-base-time) gp-2) + (-> self sync) + ) + (-> s5-0 ppointer) + ) + ) + (darkecobarrel-advance-curspawn) + ) + ) + ) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + ) + +(defmethod init-from-entity! darkecobarrel ((obj darkecobarrel) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (set! (-> obj root-override) (the-as collide-shape-moving (new 'process 'trsqv))) + (darkecobarrel-base-init arg0) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "lav-dark-eco") + :volume #x400 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) + (logior! (-> obj draw status) (draw-status drwf01)) + (set! (-> obj speed) (/ 300.0 (res-lump-float (-> obj entity) 'speed :default 61440.0))) + (set! sv-16 (new 'static 'res-tag)) + (let ((s5-1 (res-lump-data arg0 'delay pointer :tag-ptr (& sv-16)))) + (cond + (s5-1 + (set! (-> obj spawn-array) + (the-as (array int64) (new 'process 'boxed-array time-frame (the-as int (-> sv-16 elt-count)))) + ) + (dotimes (v1-12 (the-as int (-> sv-16 elt-count))) + (set! (-> obj spawn-array v1-12) + (the int (* (fabs (-> obj speed)) (-> (the-as (pointer float) (&+ s5-1 (* v1-12 4)))))) + ) + ) + ) + (else + (set! (-> obj spawn-array) (the-as (array int64) (new 'process 'boxed-array time-frame 4))) + (set! (-> obj spawn-array 0) (the int (* 45056.0 (fabs (-> obj speed))))) + (set! (-> obj spawn-array 1) (the int (* 90112.0 (fabs (-> obj speed))))) + (set! (-> obj spawn-array 2) (the int (* 45056.0 (fabs (-> obj speed))))) + (set! (-> obj spawn-array 3) (the int (* 135168.0 (fabs (-> obj speed))))) + ) + ) + ) + (dotimes (v1-19 (+ (-> obj spawn-array length) -1)) + (+! (-> obj spawn-array (+ v1-19 1)) (-> obj spawn-array v1-19)) + ) + (set! (-> obj sync) (the-as uint (the int (* (fabs (-> obj speed)) (res-lump-float (-> obj entity) 'sync))))) + (set! (-> obj speed) (/ 1.0 (* (-> obj speed) (path-distance (-> obj path))))) + (let ((s5-3 (mod (darkecobarrel-base-time) (darkecobarrel-cycle-time)))) + (set! (-> obj cur-spawn) 0) + (while (>= s5-3 (-> obj spawn-array (-> obj cur-spawn))) + (darkecobarrel-advance-curspawn) + ) + (+! (-> obj cur-spawn) -1) + (when (< (-> obj cur-spawn) 0) + (set! (-> obj cur-spawn) (+ (-> obj spawn-array length) -1)) + (+! s5-3 (-> obj spawn-array (-> obj cur-spawn))) + ) + (let ((s4-0 (-> obj cur-spawn)) + (s5-4 (- (darkecobarrel-base-time) (- s5-3 (-> obj spawn-array (-> obj cur-spawn))))) + ) + (until (darkecobarrel-base-done? (darkecobarrel-base-pos s5-4)) + (let ((s3-0 (get-process *default-dead-pool* darkecobarrel-mover #x4000))) + (when s3-0 + (let ((t9-14 (method-of-type darkecobarrel-mover activate))) + (t9-14 (the-as darkecobarrel-mover s3-0) obj 'darkecobarrel-mover (the-as pointer #x70004000)) + ) + (run-now-in-process s3-0 darkecobarrel-mover-init-by-other (-> obj entity) (-> obj speed) s5-4 (-> obj sync)) + (-> s3-0 ppointer) + ) + ) + (set! s5-4 (- s5-4 (-> obj spawn-array s4-0))) + (+! s4-0 -1) + (if (< s4-0 0) + (set! s4-0 (+ (-> obj spawn-array length) -1)) + (+! s5-4 (-> obj spawn-array s4-0)) + ) + ) + ) + ) + (darkecobarrel-advance-curspawn) + (go darkecobarrel-spawner) + (none) + ) + +(deftype lavafallsewera (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + + +(defskelgroup *lavafallsewera-sg* lavafallsewera + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem -15 0 -5 185) + :longest-edge (meters 0) + ) + +(defstate lavafallsewera-idle (lavafallsewera) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavafallsewera) ja-post) + ) + +(defmethod init-from-entity! lavafallsewera ((obj lavafallsewera) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavafallsewera-sg* '()) + (go lavafallsewera-idle) + (none) + ) + +(deftype lavafallsewerb (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + + +(defskelgroup *lavafallsewerb-sg* lavafallsewerb + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 120) + :longest-edge (meters 0) + ) + +(defstate lavafallsewerb-idle (lavafallsewerb) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavafallsewerb) ja-post) + ) + +(defmethod init-from-entity! lavafallsewerb ((obj lavafallsewerb) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavafallsewerb-sg* '()) + (go lavafallsewerb-idle) + (none) + ) + +(deftype chainmine (process-drawable) + ((root-override collide-shape-moving :offset 112) + ) + :heap-base #x40 + :method-count-assert 22 + :size-assert #xb0 + :flag-assert #x16004000b0 + (:methods + (die () _type_ :state 20) + (idle () _type_ :state 21) + ) + ) + + +(set! (-> *part-group-id-table* 542) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-chainmine-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 2132 :period 600 :length 5) + (sp-item 2133 :period 600 :length 40) + (sp-item 2134 :period 600 :length 20) + (sp-item 2135 :period 600 :length 20) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 2133) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 8.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.21333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -2.1333334) + (sp-flt spt-fade-b -1.4222223) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 89 1) + (sp-launcher-by-id spt-next-launcher 2136) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2136) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (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 -1.0666667) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2135) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 6.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 0.4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 16.0)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.04)) + (sp-flt spt-fade-g -3.2666667) + (sp-flt spt-fade-b -1.0666667) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2132) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 32.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 192.0 32.0 1.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2134) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-scale-x (meters 4.0) (meters 2.0) 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-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-int spt-next-time 42) + (sp-launcher-by-id spt-next-launcher 2137) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 2.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2137) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 6 + (sp-flt spt-fade-r -1.0666667) + (sp-flt spt-fade-g -1.0666667) + (sp-flt spt-fade-b -2.1166666) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 2138) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2138) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-flt spt-fade-r -0.5688889) + (sp-flt spt-fade-g -0.28444445) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -0.21333334) + (sp-int spt-next-time 225) + (sp-launcher-by-id spt-next-launcher 2139) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2139) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-end) + ) + ) + ) + +(defskelgroup *chainmine-sg* chainmine + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 -10.75 0 12.75) + :longest-edge (meters 2.4) + ) + +(defstate die (chainmine) + :virtual #t + :code + (behavior () + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (sound-play-by-name (static-sound-name "dcrate-break") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (set! (-> gp-1 quad) (-> self root-override trans quad)) + (set! (-> gp-1 y) (+ -73728.0 (-> gp-1 y))) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 part-tracker-init (-> *part-group-id-table* 542) 600 #f #f #f gp-1) + (-> s5-1 ppointer) + ) + ) + ) + (suspend) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (suspend) + ) + (dummy-18 self) + (deactivate self) + (none) + ) + ) + +(defstate idle (chainmine) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack 'touch) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'attack) + (set! (-> a1-3 param 0) (-> arg3 param 0)) + (let ((a2-2 (new 'static 'attack-info :mask #x20))) + (set! (-> a2-2 mode) 'deadly) + (set! (-> a1-3 param 1) (the-as uint a2-2)) + ) + (send-event-function arg0 a1-3) + ) + (go-virtual die) + ) + ) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior chainmine) ja-post) + ) + +(defmethod init-from-entity! chainmine ((obj chainmine) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask attackable) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 -73728.0 0.0 18432.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *chainmine-sg* '()) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "lava-mine-chain") + :volume #x400 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + +(defskelgroup *lavaballoon-sg* lavaballoon + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0.8 0 3.8) + :longest-edge (meters 0) + ) + +(deftype lavaballoon (process-drawable) + ((root-override collide-shape :offset 112) + (move-per-tick float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xb4 + :flag-assert #x16005000b4 + (:methods + (idle () _type_ :state 20) + (die () _type_ :state 21) + ) + ) + + +(set! (-> *part-group-id-table* 543) + (new 'static 'sparticle-launch-group + :length 3 + :duration #x5 + :linger-duration #x5dc + :name "group-lavaballoon" + :launcher + (new 'static 'inline-array sparticle-group-item 3 (sp-item 1987) (sp-item 1988) (sp-item 1989)) + :bounds (new 'static 'sphere :w 61440.0) + ) + ) + +(set! (-> *part-id-table* 1988) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -4096.0 8192.0 1.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 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 96.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.42666668) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1989) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-flt spt-y (meters 2.0)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.0) 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 96.0) + (sp-flt spt-g 96.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.04) (meters 0.08) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-friction 0.98) + (sp-int spt-timer 75) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 1.5)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1987) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 2.0)) + (sp-flt spt-scale-x (meters 12.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 100.0 28.0 1.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 80.0) + (sp-flt spt-a 96.0) + (sp-flt spt-fade-a -0.08) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(defstate die (lavaballoon) + :virtual #t + :code + (behavior () + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (sound-play-by-name (static-sound-name "cool-balloon") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 (the-as part-tracker gp-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 543) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-1 ppointer) + ) + ) + (suspend) + (dummy-18 self) + (deactivate self) + (none) + ) + ) + +(defstate idle (lavaballoon) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (send-event arg0 'heat -10.0) + (go-virtual die) + ) + ) + ) + :trans + (behavior () + (when (zero? (logand (-> self path flags) (path-control-flag not-found))) + (let ((f0-4 (* 0.5 (+ 1.0 (sin (* (-> self move-per-tick) (the float (-> *display* base-frame-counter)))))))) + (eval-path-curve! (-> self path) (-> self root-override trans) f0-4 'interp) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavaballoon) transform-post) + ) + +(defmethod init-from-entity! lavaballoon ((obj lavaballoon) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 8192.0 0.0 8192.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavaballoon-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 543) obj)) + (set! (-> obj root-override pause-adjust-distance) 122880.0) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (when (zero? (logand (-> obj path flags) (path-control-flag not-found))) + (let ((f30-0 (res-lump-float (-> obj entity) 'speed :default 12288.0))) + (set! (-> obj move-per-tick) (* 32768.0 (/ 1.0 (* 300.0 (path-distance (-> obj path)))) f30-0)) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + +(deftype lavatube-lava (water-anim) + () + :heap-base #x70 + :method-count-assert 30 + :size-assert #xdc + :flag-assert #x1e007000dc + ) + + +(define ripple-for-lavatube-lava (new 'static 'ripple-wave-set + :count 2 + :converted #f + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 2 :speed 3.0) + (new 'static 'ripple-wave :scale 40.0 :xdiv -2 :zdiv 2 :speed 1.8) + (new 'static 'ripple-wave) + (new 'static 'ripple-wave) + ) + ) + ) + +(defstate water-vol-idle (lavatube-lava) + :virtual #t + :post + (behavior () + (let ((t9-0 (-> (method-of-type water-anim water-vol-idle) post))) + (if t9-0 + ((the-as (function none :behavior lavatube-lava) t9-0)) + ) + ) + (ja-post) + (none) + ) + ) + +(defmethod TODO-RENAME-22 lavatube-lava ((obj lavatube-lava)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (let ((v1-2 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) v1-2) + (set! (-> v1-2 global-scale) 2048.0) + (set! (-> v1-2 waveform) ripple-for-lavatube-lava) + ) + (set! (-> obj flags) (logand -8388609 (-> obj flags))) + (set! (-> obj flags) (logior #x2000000 (-> obj flags))) + (set! (-> obj attack-event) 'heat) + (none) + ) + +(deftype lavayellowtarp (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + + +(defskelgroup *lavayellowtarp-sg* lavayellowtarp + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +(defstate lavayellowtarp-idle (lavayellowtarp) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavayellowtarp) ja-post) + ) + +(defmethod init-from-entity! lavayellowtarp ((obj lavayellowtarp) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavayellowtarp-sg* '()) + (go lavayellowtarp-idle) + (none) + ) + + + + diff --git a/goal_src/levels/misty/mud.gc b/goal_src/levels/misty/mud.gc index c0b55ccc5c..0beb7ced85 100644 --- a/goal_src/levels/misty/mud.gc +++ b/goal_src/levels/misty/mud.gc @@ -5,7 +5,8 @@ ;; name in dgo: mud ;; dgos: L1, MIS -;; definition of type mud +;; DECOMP BEGINS + (deftype mud (water-anim) () :heap-base #x70 @@ -14,74 +15,66 @@ :flag-assert #x1e007000dc ) -;; definition for symbol ripple-for-mud, type ripple-wave-set -(define - ripple-for-mud - (new 'static 'ripple-wave-set - :count 3 - :converted #f - :normal-scale 1.0 - :wave - (new 'static 'inline-array ripple-wave 4 - (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) - (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) - (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) - (new 'static 'ripple-wave) - ) - ) - ) -;; definition for symbol ripple-for-small-mud, type ripple-wave-set -(define - ripple-for-small-mud - (new 'static 'ripple-wave-set - :count 3 - :converted #f - :normal-scale 1.0 - :wave - (new 'static 'inline-array ripple-wave 4 - (new 'static 'ripple-wave :scale 20.0 :xdiv 2 :speed 0.5) - (new 'static 'ripple-wave :scale 20.0 :xdiv -2 :zdiv 2 :speed 0.5) - (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) - (new 'static 'ripple-wave) - ) - ) - ) +(define ripple-for-mud (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +(define ripple-for-small-mud (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 20.0 :xdiv 2 :speed 0.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv -2 :zdiv 2 :speed 0.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) -;; definition for method 22 of type mud (defmethod TODO-RENAME-22 mud ((obj mud)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) - (t9-0 obj) - ) + (t9-0 obj) + ) (set! (-> obj flags) (logand -8388609 (-> obj flags))) (set! (-> obj flags) (logior #x40000 (-> obj flags))) (let ((gp-0 (new 'process 'ripple-control))) - (set! (-> obj draw ripple) gp-0) - (set! (-> gp-0 global-scale) 3072.0) - (set! (-> gp-0 waveform) ripple-for-mud) - (let - ((v1-9 - (res-lump-data (-> obj entity) 'water-anim-fade-dist (pointer float)) + (set! (-> obj draw ripple) gp-0) + (set! (-> gp-0 global-scale) 3072.0) + (set! (-> gp-0 waveform) ripple-for-mud) + (let ((v1-9 (res-lump-data (-> obj entity) 'water-anim-fade-dist (pointer float)))) + (when v1-9 + (set! (-> gp-0 close-fade-dist) (-> v1-9 0)) + (set! (-> gp-0 far-fade-dist) (-> v1-9 1)) + ) ) - ) - (when v1-9 - (set! (-> gp-0 close-fade-dist) (-> v1-9 0)) - (set! (-> gp-0 far-fade-dist) (-> v1-9 1)) - ) - ) - (case (-> obj look) - ((21 25 29) - (set! (-> gp-0 close-fade-dist) 4096000000.0) - (set! (-> gp-0 far-fade-dist) 8192000000.0) + (case (-> obj look) + ((21 25 29) + (set! (-> gp-0 close-fade-dist) 4096000000.0) + (set! (-> gp-0 far-fade-dist) 8192000000.0) + ) ) - ) - (case (-> obj look) - ((22 25 24 27 26 31) - (let ((v0-3 ripple-for-small-mud)) - (set! (-> gp-0 waveform) v0-3) - v0-3 + (case (-> obj look) + ((22 25 24 27 26 31) + (set! (-> gp-0 waveform) ripple-for-small-mud) ) ) ) - ) + (none) ) + + + + diff --git a/goal_src/levels/ogre/ogre-obs.gc b/goal_src/levels/ogre/ogre-obs.gc index 6ff2504de9..e3fa138333 100644 --- a/goal_src/levels/ogre/ogre-obs.gc +++ b/goal_src/levels/ogre/ogre-obs.gc @@ -1572,10 +1572,8 @@ ) (set! (-> obj flags) (logand -8388609 (-> obj flags))) (set! (-> obj flags) (logior #x2000000 (-> obj flags))) - (let ((v0-2 'lava)) - (set! (-> obj attack-event) v0-2) - (the-as ripple-wave-set v0-2) - ) + (set! (-> obj attack-event) 'lava) + (none) ) (deftype shortcut-boulder (process-drawable) diff --git a/goal_src/levels/rolling/rolling-robber.gc b/goal_src/levels/rolling/rolling-robber.gc index 2832fb83d2..776c34b45f 100644 --- a/goal_src/levels/rolling/rolling-robber.gc +++ b/goal_src/levels/rolling/rolling-robber.gc @@ -5,3 +5,907 @@ ;; name in dgo: rolling-robber ;; dgos: L1, ROL +;; DECOMP BEGINS + +(defstate fuel-cell-spline-slider (fuel-cell) + :trans + (the-as (function none :behavior fuel-cell) hide-hud-quick) + :code + (behavior ((arg0 handle) (arg1 float) (arg2 float)) + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((v1-4 (-> self skel root-channel 0))) + (set! (-> v1-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + ) + (if *target* + (process-grab? *target*) + ) + (hide-hud-quick) + (set! *camera-look-through-other* 2) + (set! (-> *camera-other-fov* data) 11650.845) + (set! (-> *camera-other-trans* quad) (-> *math-camera* trans quad)) + (set! (-> *camera-other-root* quad) (-> *math-camera* trans quad)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (dotimes (v1-14 (the int (-> *display* time-adjust-ratio))) + (set! arg2 (* 0.95 arg2)) + ) + (when (and (< (fabs arg2) 13.653334) (>= (- (-> *display* base-frame-counter) (-> self state-time)) 450)) + (if *target* + (process-release? *target*) + ) + (go-virtual wait) + ) + (set! arg1 (+ arg1 (/ (* arg2 (-> *display* seconds-per-frame)) (path-distance (-> self path))))) + (cond + ((< 1.0 arg1) + (set! arg1 (+ -1.0 arg1)) + ) + ((< arg1 0.0) + (set! arg1 (+ 1.0 arg1)) + ) + ) + (eval-path-curve! (-> self path) (-> self root-override trans) arg1 'interp) + (set! (-> self root-override trans y) (+ 8192.0 (-> self root-override trans y))) + (set! (-> self root-override trans y) (fmax 106496.0 (-> self root-override trans y))) + (set! (-> self base quad) (-> self root-override trans quad)) + (transform-post) + (animate self) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (vector-! s4-0 (-> self root-override trans) *camera-other-trans*) + (vector-normalize! s4-0 1.0) + (forward-down->inv-matrix *camera-other-matrix* s4-0 (new 'static 'vector :y -1.0 :w 1.0)) + ) + (set! *camera-look-through-other* 2) + (set-letterbox-frames 10) + (suspend) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 param 0) 0.5) + (joint-control-channel-group-eval! a0-27 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + ) + +(defbehavior fuel-cell-init-as-spline-slider fuel-cell ((arg0 handle) (arg1 float) (arg2 float) (arg3 int)) + (initialize self) + (set! (-> self fact pickup-type) (pickup-type fuel-cell)) + (set! (-> self fact pickup-amount) (the float arg3)) + (initialize-params self 0 1024.0) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self actor-pause) #f) + (set! (-> self entity) (-> arg0 process 0 entity)) + (set! (-> self path) (new 'process 'curve-control self 'path -1000000000.0)) + (set! (-> self movie-pos-index) -1) + (go fuel-cell-spline-slider arg0 arg1 arg2) + (none) + ) + +(deftype robber (process-drawable) + ((root-override collide-shape-moving :offset 112) + (curve-position float :offset-assert 176) + (speed float :offset-assert 180) + (facing vector :inline :offset-assert 192) + (tangent vector :inline :offset-assert 208) + (run-blend-interp float :offset-assert 224) + (near-timer int32 :offset-assert 228) + (far-time uint64 :offset-assert 232) + (y-offset float :offset-assert 240) + (y-offset-desired float :offset-assert 244) + (y-vel float :offset-assert 248) + (water-height float :offset-assert 252) + (timeout uint64 :offset-assert 256) + (last-ambient-time uint64 :offset-assert 264) + (time-to-next-ambient uint64 :offset-assert 272) + ) + :heap-base #xb0 + :method-count-assert 20 + :size-assert #x118 + :flag-assert #x1400b00118 + (:states + robber-dead + robber-debug + robber-die + robber-flee + robber-got-away + robber-idle + robber-initial + robber-initial-notice + robber-tired + ) + ) + + +(defskelgroup *robber-sg* robber + 0 + 10 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + :shadow 4 + ) + +(defbehavior robber-event-handler robber ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (go robber-die) + ) + ) + ) + +(defbehavior robber-task-complete? robber () + (local-vars (sv-16 symbol)) + (process-entity-status! self (entity-perm-status complete) #t) + (when (or (-> self link prev) (-> self link next)) + (set! sv-16 (the-as symbol #f)) + (apply-all (-> self link) actor-link-subtask-complete-hook (& sv-16)) + (cond + (sv-16 + (close-specific-task! (-> self entity extra perm task) (task-status need-reminder)) + (format #t "robber task is complete~%") + ) + (else + ) + ) + sv-16 + ) + ) + +(defbehavior robber-find-ground robber () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (let ((t2-0 (new 'stack-no-clear 'collide-tri-result))) + (set! (-> gp-0 y) (+ 8192.0 (-> gp-0 y))) + (let ((f0-2 (dummy-10 *collide-cache* gp-0 (new 'static 'vector :y -81920.0 :w 1.0) 40.96 1 self t2-0 1)) + (v1-5 (new 'stack-no-clear 'vector)) + ) + (set! (-> v1-5 quad) (-> self root-override trans quad)) + (set! (-> v1-5 y) (+ (-> gp-0 y) (* -81920.0 f0-2))) + (cond + ((and (>= f0-2 0.0) (< 204.8 (fabs (- (-> v1-5 y) (-> self water-height))))) + (set! (-> self y-offset-desired) + (- (+ (-> gp-0 y) (* -81920.0 f0-2)) (- (-> self root-override trans y) (-> self y-offset))) + ) + #t + ) + (else + (set! (-> self y-offset-desired) 0.0) + #f + ) + ) + ) + ) + ) + ) + +(defbehavior robber-rotate robber ((arg0 target) (arg1 float)) + (let ((s5-0 (new 'stack-no-clear 'matrix)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (TODO-RENAME-14 (-> self path) (-> self tangent) (-> self curve-position)) + (cond + ((and arg0 *target*) + (vector-! gp-0 (-> self root-override trans) (target-pos 0)) + (vector-normalize! gp-0 1.0) + ) + ((< (-> self speed) 0.0) + (vector-negate! gp-0 (-> self tangent)) + ) + (else + (set! (-> gp-0 quad) (-> self tangent quad)) + ) + ) + (matrix-from-two-vectors-max-angle-partial! s5-0 (-> self facing) gp-0 arg1 0.25) + (vector-matrix*! gp-0 (-> self facing) s5-0) + (vector-normalize! gp-0 1.0) + (forward-down->inv-matrix s5-0 gp-0 (new 'static 'vector :y -1.0)) + (matrix->quaternion (-> self root-override quat) s5-0) + (set! (-> self run-blend-interp) (acos (vector-dot gp-0 (-> self facing)))) + (set! (-> self run-blend-interp) (* 0.0002746582 (-> self run-blend-interp))) + (if (< (vector-dot (-> self facing) (the-as vector (-> s5-0 vector))) 0.0) + (set! (-> self run-blend-interp) (- (-> self run-blend-interp))) + ) + (let ((v0-10 (-> self facing))) + (set! (-> v0-10 quad) (-> gp-0 quad)) + v0-10 + ) + ) + ) + +(defbehavior robber-move robber () + (+! + (-> self curve-position) + (/ (the float + (* (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter)) (the int (-> self speed))) + ) + (path-distance (-> self path)) + ) + ) + (cond + ((< 1.0 (-> self curve-position)) + (set! (-> self curve-position) (+ -1.0 (-> self curve-position))) + ) + ((< (-> self curve-position) 0.0) + (set! (-> self curve-position) (+ 1.0 (-> self curve-position))) + ) + ) + (eval-path-curve! (-> self path) (-> self root-override trans) (-> self curve-position) 'interp) + (cond + ((< (-> self y-offset-desired) (-> self y-offset)) + (set! (-> self y-vel) (* 0.25 (- (-> self y-offset-desired) (-> self y-offset)))) + (set! (-> self y-vel) (fmax -3.4133334 (-> self y-vel))) + (+! (-> self y-offset) (-> self y-vel)) + (when (>= (-> self y-offset-desired) (-> self y-offset)) + (set! (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-vel) 0.0) + ) + ) + ((< (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-vel) (* 0.5 (- (-> self y-offset-desired) (-> self y-offset)))) + (set! (-> self y-vel) (fmin 13.653334 (-> self y-vel))) + (+! (-> self y-offset) (-> self y-vel)) + (when (>= (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-vel) 0.0) + ) + ) + ) + (let ((f0-34 (+ (-> self root-override trans y) (-> self y-offset)))) + (set! (-> self root-override trans y) f0-34) + f0-34 + ) + ) + +(defbehavior robber-calc-speed robber ((arg0 float) (arg1 float) (arg2 float) (arg3 float) (arg4 symbol)) + (let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (-> self root-override trans) (target-pos 0)))) + (set! (-> gp-1 y) 0.0) + (let* ((f2-1 (/ (- (vector-length gp-1) arg0) (- arg1 arg0))) + (f0-4 (- 1.0 (fmax 0.0 (fmin 1.0 f2-1)))) + (f0-5 (lerp arg3 arg2 f0-4)) + (f30-0 (* 0.0033333334 f0-5)) + ) + (cond + ((or (not arg4) (< arg0 (vector-length gp-1))) + (if (< (-> self speed) 0.0) + (set! f30-0 (- f30-0)) + ) + ) + ((< (vector-dot gp-1 (-> self tangent)) 0.0) + (set! f30-0 (- f30-0)) + ) + ) + (set! (-> self speed) f30-0) + f30-0 + ) + ) + ) + +(defbehavior robber-calc-anim-speed robber () + (let* ((f0-1 (fabs (-> self speed))) + (f0-2 (* 0.07324219 f0-1)) + (f0-3 (+ -15.0 f0-2)) + (f1-3 (* 0.13333334 f0-3)) + ) + (fmin 1.5 (fmax 0.9 f1-3)) + ) + ) + +(defstate robber-debug (robber) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((a1-1 (new 'stack-no-clear 'vector))) + (clmf-input gp-0 a1-1 1) + ) + (format *stdcon* "rv ~f ~f ~f~%" (-> gp-0 x) (-> gp-0 y) (-> gp-0 z)) + (vector-float*! gp-0 gp-0 4096.0) + (+! (-> self curve-position) (/ (-> gp-0 y) (path-distance (-> self path)))) + ) + (cond + ((< 1.0 (-> self curve-position)) + (set! (-> self curve-position) (+ -1.0 (-> self curve-position))) + ) + ((< (-> self curve-position) 0.0) + (set! (-> self curve-position) (+ 1.0 (-> self curve-position))) + ) + ) + (eval-path-curve! (-> self path) (-> self root-override trans) (-> self curve-position) 'interp) + (robber-rotate (the-as target #f) 1820.4445) + (robber-find-ground) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robber) ja-post) + ) + +(defstate robber-dead (robber) + :code + (behavior () (dummy-18 self) (deactivate self) (none)) + ) + +(defstate robber-die (robber) + :event + (the-as + (function process int symbol event-message-block object :behavior robber) + process-drawable-death-event-handler + ) + :code + (behavior () + (let ((gp-0 #t)) + (when (robber-task-complete?) + (let ((v1-3 (-> self entity extra perm))) + (logior! (-> v1-3 status) (entity-perm-status user-set-from-cstage)) + (cond + ((zero? (-> v1-3 user-object 1)) + (set! (-> v1-3 user-object 1) 1) + (set! (-> v1-3 user-object 0) (-> self curve-position)) + (let ((f30-0 (if (>= (-> self speed) 0.0) + 163840.0 + -163840.0 + ) + ) + (s5-0 (get-process *default-dead-pool* fuel-cell #x4000)) + ) + (when s5-0 + (let ((t9-2 (method-of-type fuel-cell activate))) + (t9-2 (the-as fuel-cell s5-0) self 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + fuel-cell-init-as-spline-slider + (process->handle self) + (-> self curve-position) + f30-0 + (-> self entity extra perm task) + ) + (-> s5-0 ppointer) + ) + ) + ) + (else + (set! gp-0 #f) + (logior! (-> self draw status) (draw-status drwf01)) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (eval-path-curve! (-> self path) s5-1 (the-as float (-> v1-3 user-object 0)) 'interp) + (set! (-> s5-1 y) (+ 8192.0 (-> s5-1 y))) + (birth-pickup-at-point + s5-1 + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + self + (the-as fact-info #f) + ) + ) + ) + ) + ) + ) + (when gp-0 + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-12 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-12 param 1) 1.0) + (set! (-> a0-12 frame-num) 0.0) + (joint-control-channel-group! a0-12 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (robber-calc-speed 4096.0 8192.0 122880.0 122880.0 #f) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) (the float (+ (-> a0-15 frame-group data 0 length) -1))) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group-eval! a0-15 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (while (-> self child) + (suspend) + ) + (go robber-dead) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +(defstate robber-got-away (robber) + :event + robber-event-handler + :trans + (behavior () + (if (and + (not (and + *target* + (>= 204800.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + (robber-find-ground) + ) + (go robber-idle) + ) + (if (and + *target* + (>= 122880.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + (go robber-flee) + ) + (none) + ) + :code + (behavior () + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-8 (-> self skel root-channel 0))) + (set! (-> v1-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + ) + ) + (while #t + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 param 0) (robber-calc-anim-speed)) + (joint-control-channel-group-eval! gp-0 (the-as art-joint-anim #f) num-func-loop!) + ) + (if (< 27.306667 (fabs (-> self speed))) + (set! (-> self speed) (* 0.95 (-> self speed))) + ) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +(defstate robber-tired (robber) + :event + robber-event-handler + :enter + (behavior () (set! (-> self y-offset-desired) -12288.0) (none)) + :exit + (behavior () (set! (-> self y-offset-desired) 0.0) (none)) + :trans + (behavior () + (if (not (and + *target* + (>= 163840.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + (go robber-got-away) + ) + (none) + ) + :code + (behavior () + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-8 (-> self skel root-channel 0))) + (set! (-> v1-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + ) + ) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 param 0) (robber-calc-anim-speed)) + (joint-control-channel-group-eval! gp-0 (the-as art-joint-anim #f) num-func-loop!) + ) + (robber-calc-speed 32768.0 122880.0 122060.8 20480.0 #f) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (when (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-ambient-time))) + (the-as int (-> self time-to-next-ambient)) + ) + (ja-channel-push! 1 60) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-14 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (robber-calc-speed 32768.0 122880.0 122060.8 20480.0 #f) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self last-ambient-time) (the-as uint (-> *display* base-frame-counter))) + (let* ((f30-0 300.0) + (f28-0 2.0) + (f26-0 2.0) + (v1-41 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-42 (the-as number (logior #x3f800000 v1-41))) + ) + (set! (-> self time-to-next-ambient) + (the-as uint (the int (* f30-0 (+ f28-0 (* f26-0 (+ -1.0 (the-as float v1-42))))))) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +(defstate robber-flee (robber) + :event + robber-event-handler + :enter + (behavior () + (set! (-> self near-timer) 3000) + (set! (-> self far-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self y-offset-desired) 0.0) + (none) + ) + :trans + (behavior () + (if (not (and + *target* + (>= 163840.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + (go robber-got-away) + ) + (when (and + *target* + (>= 102400.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + (set! (-> self near-timer) + (- (-> self near-timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (if (<= (-> self near-timer) 0) + (go robber-tired) + ) + (set! (-> self far-time) (the-as uint (-> *display* base-frame-counter))) + ) + (if (>= (- (-> *display* base-frame-counter) (the-as int (-> self far-time))) 900) + (set! (-> self near-timer) (the-as int (-> self timeout))) + ) + (none) + ) + :code + (behavior () + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-8 (-> self skel root-channel 0))) + (set! (-> v1-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + ) + ) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 param 0) (robber-calc-anim-speed)) + (joint-control-channel-group-eval! gp-0 (the-as art-joint-anim #f) num-func-loop!) + ) + (robber-calc-speed 61440.0 122880.0 204800.0 16384.0 #t) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (when (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-ambient-time))) + (the-as int (-> self time-to-next-ambient)) + ) + (ja-channel-push! 1 60) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-14 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (robber-calc-speed 61440.0 122880.0 204800.0 16384.0 #t) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self last-ambient-time) (the-as uint (-> *display* base-frame-counter))) + (let* ((f30-0 300.0) + (f28-0 3.0) + (f26-0 5.0) + (v1-41 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-42 (the-as number (logior #x3f800000 v1-41))) + ) + (set! (-> self time-to-next-ambient) + (the-as uint (the int (* f30-0 (+ f28-0 (* f26-0 (+ -1.0 (the-as float v1-42))))))) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +(defstate robber-idle (robber) + :event + robber-event-handler + :enter + (behavior () (set! (-> self speed) 0.0) (none)) + :trans + (behavior () + (if (and + *target* + (>= 122880.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + (go robber-flee) + ) + (robber-rotate (the-as target #t) 182.04445) + (robber-move) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +(defstate robber-initial-notice (robber) + :event + robber-event-handler + :trans + (behavior () + (when (logtest? (-> self draw status) (draw-status drwf03)) + (if (and + *target* + (>= 163840.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + (level-hint-spawn + (game-text-id rolling-flying-lurker-intro) + "sksp0116" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (if (and + *target* + (>= 32768.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + (go robber-flee) + ) + (none) + ) + :code + (behavior () + (TODO-RENAME-14 (-> self path) (-> self tangent) (-> self curve-position)) + (let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (-> self root-override trans) (target-pos 0))) + (f0-1 6.826667) + ) + (set! (-> gp-1 y) 0.0) + (if (< (vector-dot gp-1 (-> self tangent)) 0.0) + (set! f0-1 (- f0-1)) + ) + (set! (-> self speed) f0-1) + ) + (ja-channel-push! 1 60) + (while #t + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 2.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (robber-calc-speed 61440.0 122880.0 2048.0 2048.0 #t) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 2.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go robber-flee) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +(defstate robber-initial (robber) + :event + robber-event-handler + :enter + (behavior () (set! (-> self speed) 0.0) (none)) + :trans + (behavior () + (if (and + *target* + (>= 122880.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + (go robber-initial-notice) + ) + (robber-move) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +(defmethod init-from-entity! robber ((obj robber) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3073)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 10240.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *robber-sg* '()) + (set! (-> obj root-override pause-adjust-distance) 122880.0) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj fact) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (set! (-> obj curve-position) (res-lump-float (-> obj entity) 'initial-spline-pos)) + (eval-path-curve! (-> obj path) (-> obj root-override trans) (-> obj curve-position) 'interp) + (TODO-RENAME-14 (-> obj path) (-> obj tangent) (-> obj curve-position)) + (set! (-> obj facing quad) (-> obj tangent quad)) + (let ((s4-1 (new 'stack-no-clear 'matrix))) + (forward-down->inv-matrix s4-1 (-> obj facing) (new 'static 'vector :y -1.0)) + (matrix->quaternion (-> obj root-override quat) s4-1) + ) + (set! (-> obj y-vel) 0.0) + (set! (-> obj water-height) (res-lump-float (-> obj entity) 'water-height)) + (robber-find-ground) + (set! (-> obj y-offset) (-> obj y-offset-desired)) + (let ((f0-14 (res-lump-float arg0 'timeout :default 10.0))) + (set! (-> obj timeout) (the-as uint (the int (* 300.0 f0-14)))) + ) + (set! (-> obj last-ambient-time) (the-as uint 0)) + (set! (-> obj time-to-next-ambient) (the-as uint 0)) + (set! (-> obj speed) 0.0) + (let ((v1-42 (-> obj entity extra perm))) + (logior! (-> v1-42 status) (entity-perm-status user-set-from-cstage)) + (if (nonzero? (-> v1-42 user-object 1)) + (go robber-die) + ) + ) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go robber-dead) + (go robber-initial) + ) + (none) + ) + + + + diff --git a/goal_src/levels/snow/snow-obs.gc b/goal_src/levels/snow/snow-obs.gc index 0f5fd7e366..8c22d5c0cd 100644 --- a/goal_src/levels/snow/snow-obs.gc +++ b/goal_src/levels/snow/snow-obs.gc @@ -5,13 +5,2325 @@ ;; name in dgo: snow-obs ;; dgos: L1, SNO -;; TODO - for snow-ram -(define-extern *snowcam-sg* skeleton-group) +;; DECOMP BEGINS + (deftype snowcam (pov-camera) ((seq uint64 :offset-assert 224) ) + :heap-base #x80 :method-count-assert 30 :size-assert #xe8 - :heap-base #x80 :flag-assert #x1e008000e8 ) + + +(defskelgroup *snowcam-sg* snowcam + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +(defmethod set-stack-size! snowcam ((obj snowcam)) + (stack-size-set! (-> obj main-thread) 512) + (none) + ) + +(defstate pov-camera-playing (snowcam) + :virtual #t + :code + (behavior () + (let ((v1-0 (-> self seq))) + (cond + ((zero? v1-0) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 0.2) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 0.2) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 0.25) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 0.25) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 1350) + (suspend) + ) + ) + ) + ((= v1-0 1) + (let* ((gp-1 (get-process *default-dead-pool* fuel-cell #x4000)) + (gp-2 + (ppointer->handle + (when gp-1 + (let ((t9-10 (method-of-type fuel-cell activate))) + (t9-10 (the-as fuel-cell gp-1) (ppointer->process (-> self parent)) 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 fuel-cell-init-as-clone (process->handle self) (-> self entity extra perm task)) + (-> gp-1 ppointer) + ) + ) + ) + ) + (push-setting! *setting-control* self 'music-volume 'abs 0.0 0) + (push-setting! *setting-control* self 'sfx-volume 'rel 50.0 0) + (ja-play-spooled-anim + (the-as spool-anim (-> self anim-name)) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (clear-pending-settings-from-process *setting-control* self 'music-volume) + (clear-pending-settings-from-process *setting-control* self 'sfx-volume) + (let ((a0-21 (handle->process gp-2))) + (if a0-21 + (send-event a0-21 'stop-cloning) + ) + ) + ) + ) + ((= v1-0 2) + (let ((a0-24 (-> self skel root-channel 0))) + (set! (-> a0-24 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-24 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-24 param 1) 1.0) + (set! (-> a0-24 frame-num) 0.0) + (joint-control-channel-group! a0-24 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-25 (-> self skel root-channel 0))) + (set! (-> a0-25 param 0) (the float (+ (-> a0-25 frame-group data 0 length) -1))) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group-eval! a0-25 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (send-event (handle->process (-> self notify-handle)) 'notify 'cut) + (let ((a0-31 (-> self skel root-channel 0))) + (set! (-> a0-31 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-31 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-31 param 1) 1.0) + (set! (-> a0-31 frame-num) 0.0) + (joint-control-channel-group! a0-31 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-32 (-> self skel root-channel 0))) + (set! (-> a0-32 param 0) (the float (+ (-> a0-32 frame-group data 0 length) -1))) + (set! (-> a0-32 param 1) 1.0) + (joint-control-channel-group-eval! a0-32 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (else + (suspend) + 0 + ) + ) + ) + (go-virtual pov-camera-done-playing) + (none) + ) + ) + +(deftype snow-eggtop (process-drawable) + ((root-override collide-shape-moving :offset 112) + (spawn-trans vector :inline :offset-assert 176) + (play-sound? symbol :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xc4 + :flag-assert #x14006000c4 + (:states + snow-eggtop-activate + snow-eggtop-idle-down + snow-eggtop-idle-up + ) + ) + + +(defskelgroup *snow-eggtop-sg* snow-eggtop + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +(set! (-> *part-group-id-table* 510) (new 'static 'sparticle-launch-group + :length 5 + :duration #xbb8 + :linger-duration #x5dc + :name "group-snow-yellow-eco-room-open" + :launcher + (new 'static 'inline-array sparticle-group-item 5 + (sp-item 1990 :fade-after (meters 110.0)) + (sp-item 1991 :fade-after (meters 110.0)) + (sp-item 1992 :fade-after (meters 110.0)) + (sp-item 1993 :fade-after (meters 110.0)) + (sp-item 1994 :fade-after (meters 110.0)) + ) + :bounds + (new 'static 'sphere :y -24576.0 :w 32768.0) + ) + ) + +(set! (-> *part-group-id-table* 511) (new 'static 'sparticle-launch-group + :length 3 + :duration #x384 + :linger-duration #x5dc + :name "group-snow-yellow-eco-room-activate" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 1994) + (sp-item 1994) + (sp-item 1995 :flags (bit1) :period 1200 :length 15) + ) + :bounds + (new 'static 'sphere :y -24576.0 :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1995) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 30.0) + (sp-flt spt-y (meters -4.0)) + (sp-rnd-flt spt-scale-x (meters 20.0) (meters 10.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.0) (meters 2.0) 1.0) + (sp-flt spt-r 127.0) + (sp-flt spt-g 127.0) + (sp-rnd-flt spt-b 0.0 16.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.05) (degrees 0.1) 1.0) + (sp-flt spt-fade-a 0.85333335) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 1996) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1996) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a 0.0) + (sp-int spt-next-time 225) + (sp-launcher-by-id spt-next-launcher 1997) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1997) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.14222223) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 1990) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -4.0)) + (sp-rnd-flt spt-scale-x (meters 10.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 8.0) (meters 2.0) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 64.0 1.0) + (sp-rnd-flt spt-a 128.0 128.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1991) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -4.0)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 2.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 128.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1992) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-rnd-flt spt-num 0.5 1.0 1.0) + (sp-flt spt-y (meters -4.0)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees -30.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.7) (meters 0.4) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 1998) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1998) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 6 + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-fade-r -1.0) + (sp-flt spt-fade-g -1.0) + (sp-flt spt-fade-a -2.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1993) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-rnd-flt spt-num 0.5 1.0 1.0) + (sp-flt spt-y (meters -4.0)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 150.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.7) (meters 0.4) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 1998) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1994) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-y (meters -6.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 6.0) (meters 2.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees -140.0) (degrees 100.00001) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.7) (meters 0.4) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 1998) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 80.0) (degrees 200.00002) 1.0) + (sp-flt spt-conerot-radius (meters 4.0)) + (sp-end) + ) + ) + ) + +(defstate snow-eggtop-idle-up (snow-eggtop) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'notify) + (case (-> arg3 param 0) + (('pickup) + (if (type-type? (-> arg0 type) fuel-cell) + (save-reminder (get-task-control (-> self entity extra perm task)) 1 4) + ) + ) + ) + ) + ) + ) + ) + :trans + (behavior () + (if (and (not (-> self child)) (task-complete? *game-info* (-> self entity extra perm task))) + (go snow-eggtop-activate) + ) + (spawn (-> self part) (-> self root-override trans)) + (update! (-> self sound)) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 0) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate snow-eggtop-activate (snow-eggtop) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (when (= (-> arg0 type) snowcam) + (cond + ((= (-> arg3 param 0) 'die) + (if *target* + (set! (-> *target* control trans y) (+ 1024.0 (-> *target* control trans y))) + ) + (go snow-eggtop-idle-down) + ) + ((= (-> arg3 param 0) 'cut) + (stop! (-> self sound)) + (set! (-> self play-sound?) #f) + #f + ) + ) + ) + ) + ) + ) + :enter + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (set! (-> self play-sound?) #t) + (none) + ) + :exit + (behavior () + (stop! (-> self sound)) + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (none) + ) + :trans + (the-as (function none :behavior snow-eggtop) rider-trans) + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 511) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (let* ((gp-1 (get-process *default-dead-pool* snowcam #x4000)) + (v1-7 + (when gp-1 + (let ((t9-4 (method-of-type snowcam activate))) + (t9-4 (the-as snowcam gp-1) self 'snowcam (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + pov-camera-init-by-other + (-> self spawn-trans) + *snowcam-sg* + "gearstart" + 0 + self + '((0 ambient camera "gamcam38") (10 alive "ecovent-278")) + ) + (-> gp-1 ppointer) + ) + ) + ) + (set! (-> (the-as snowcam (-> v1-7 0)) seq) (the-as uint 2)) + ) + (change-sound! (-> self sound) (static-sound-name "snw-eggtop-seq")) + (save-reminder (get-task-control (-> self entity extra perm task)) 2 4) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> a0-10 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! a0-10 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (if (-> self play-sound?) + (update! (-> self sound)) + ) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (level-hint-spawn + (game-text-id snowy-turned-on-yellow-vents) + "sksp0360" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 330) + (if (-> self play-sound?) + (update! (-> self sound)) + ) + (suspend) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (let ((a0-18 (-> self entity))) + (if (and a0-18 (= self (-> a0-18 extra process))) + (entity-task-complete-on a0-18) + ) + ) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'show) + (while #t + (if (-> self play-sound?) + (update! (-> self sound)) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior snow-eggtop) rider-post) + ) + +(defstate snow-eggtop-idle-down (snow-eggtop) + :code + (behavior () + (process-entity-status! self (entity-perm-status complete) #t) + (let ((a0-1 (-> self entity))) + (if (and a0-1 (= self (-> a0-1 extra process))) + (entity-task-complete-on a0-1) + ) + ) + (ja-channel-push! 1 0) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + ) + (transform-post) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +(defmethod init-from-entity! snow-eggtop ((obj snow-eggtop) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 -7372.8 18022.4) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-eggtop-sg* '()) + (logior! (-> obj skel status) 1) + (set! (-> obj spawn-trans quad) (-> obj root-override trans quad)) + (set! (-> obj root-override trans y) (+ -2662.4 (-> obj root-override trans y))) + (dummy-47 (-> obj root-override)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 510) obj)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "electric-loop") + :volume #x400 + :fo-max 40 + ) + (-> obj root-override trans) + ) + ) + (cond + ((task-complete? *game-info* (-> obj entity extra perm task)) + (go snow-eggtop-idle-down) + ) + (else + (let ((a0-17 (new 'stack-no-clear 'vector))) + (set! (-> a0-17 quad) (-> obj root-override trans quad)) + (set! (-> a0-17 y) (+ 3072.0 (-> a0-17 y))) + (birth-pickup-at-point + a0-17 + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + ) + (go snow-eggtop-idle-up) + ) + ) + (none) + ) + +(deftype snowpusher (process-drawable) + ((root-override collide-shape-moving :offset 112) + (max-frame float :offset-assert 176) + (open-sound sound-name :offset-assert 192) + (close-sound sound-name :offset-assert 208) + (sync sync-info-paused :inline :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 20 + :size-assert #xf0 + :flag-assert #x14008000f0 + (:states + snowpusher-idle + ) + ) + + +(defskelgroup *snowpusher-sg* snowpusher + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +(defstate snowpusher-idle (snowpusher) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'touch) + (send-event arg0 'no-look-around 450) + #f + ) + ) + ) + ) + :code + (behavior () + (let ((gp-0 #f)) + (while #t + (let ((f0-0 (get-current-phase-with-mirror (-> self sync)))) + (let ((v1-4 (-> self skel root-channel 0))) + (set! (-> v1-4 num-func) num-func-identity) + (set! (-> v1-4 frame-num) (* f0-0 (-> self max-frame))) + ) + (cond + ((or (= f0-0 0.0) (= f0-0 1.0)) + (set! gp-0 #f) + ) + (else + (when (not gp-0) + (set! gp-0 #t) + (if (>= f0-0 0.5) + (sound-play-by-name (-> self close-sound) (new-sound-id) 1024 0 0 1 #t) + (sound-play-by-name (-> self open-sound) (new-sound-id) 1024 0 0 1 #t) + ) + ) + ) + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior snowpusher) pusher-post) + ) + +(defmethod init-from-entity! snowpusher ((obj snowpusher) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (set! (-> obj mask) (logior (process-mask enemy platform) (-> obj mask))) + (let ((s3-0 0) + (s4-0 0) + ) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-3 (res-lump-data (-> obj entity) 'mode (pointer int32) :tag-ptr (& sv-16)))) + (when v1-3 + (set! s3-0 (-> v1-3 0)) + (set! s4-0 (-> v1-3 1)) + ) + ) + (cond + ((zero? s3-0) + (set! (-> obj open-sound) (static-sound-name "snow-piston-opn")) + (set! (-> obj close-sound) (static-sound-name "snow-piston-cls")) + ) + ((= s3-0 1) + (set! (-> obj open-sound) (static-sound-name "snow-pist-opn3")) + (set! (-> obj close-sound) (static-sound-name "snow-pist-cls3")) + ) + ((= s3-0 2) + (set! (-> obj open-sound) (static-sound-name "snow-pist-opn2")) + (set! (-> obj close-sound) (static-sound-name "snow-pist-cls2")) + ) + ) + (let ((s3-1 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s3-1 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s3-1 reaction) default-collision-reaction) + (set! (-> s3-1 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-1 (new 'process 'collide-shape-prim-mesh s3-1 (the-as uint s4-0) (the-as uint 0)))) + (set! (-> s4-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s4-1 collide-with) (the-as uint 16)) + (set! (-> s4-1 prim-core action) (the-as uint 3)) + (set! (-> s4-1 prim-core offense) 4) + (set! (-> s4-1 transform-index) 3) + (set-vector! (-> s4-1 local-sphere) 0.0 20480.0 -12288.0 25600.0) + (set-root-prim! s3-1 s4-1) + ) + (set! (-> s3-1 nav-radius) (* 0.75 (-> s3-1 root-prim local-sphere w))) + (backup-collide-with-as s3-1) + (set! (-> obj root-override) s3-1) + ) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snowpusher-sg* '()) + (let ((s4-2 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-2 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s4-2 frame-num) 0.0) + ) + (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15) + (set! (-> obj max-frame) (* (the float (ja-num-frames 0)) (res-lump-float arg0 'max-frame :default 1.0))) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go snowpusher-idle) + (none) + ) + +(deftype snow-spatula (baseplat) + ((sync sync-info :inline :offset-assert 228) + (startmat matrix :inline :offset-assert 240) + ) + :heap-base #xc0 + :method-count-assert 27 + :size-assert #x130 + :flag-assert #x1b00c00130 + (:states + snow-spatula-idle + ) + ) + + +(defskelgroup *snow-spatula-sg* snow-spatula + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 10 0 10) + :longest-edge (meters 9.4) + ) + +(defstate snow-spatula-idle (snow-spatula) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'bonk) + (dummy-22 self) + (sound-play-by-name (static-sound-name "snow-spat-short") (new-sound-id) 768 1143 0 1 #t) + ) + ) + ) + ) + :trans + (the-as (function none :behavior snow-spatula) plat-trans) + :code + (behavior () + (let ((f28-0 0.0) + (gp-0 1) + ) + (while #t + (let ((f30-0 (get-current-phase-with-mirror (-> self sync)))) + (when (!= f30-0 f28-0) + (let ((v1-3 1)) + (if (< f30-0 f28-0) + (set! v1-3 -1) + ) + (when (!= v1-3 gp-0) + (set! gp-0 v1-3) + (cond + ((> v1-3 0) + (sound-play-by-name + (static-sound-name "snow-spat-long") + (new-sound-id) + 1024 + (the int (* 1524.0 (rand-vu-float-range -0.2 0.2))) + 0 + 1 + #t + ) + ) + (1 + (sound-play-by-name + (static-sound-name "snow-spat-short") + (new-sound-id) + 1024 + (the int (* 1524.0 (rand-vu-float-range -0.2 0.2))) + 0 + 1 + #t + ) + ) + ) + ) + ) + (set! f28-0 f30-0) + ) + (let ((s5-2 (new 'stack-no-clear 'matrix))) + (matrix-rotate-y! s5-2 (* 16384.0 f30-0)) + (matrix*! s5-2 s5-2 (-> self startmat)) + (matrix->quaternion (-> self root-override quat) s5-2) + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior snow-spatula) plat-post) + ) + +(defmethod init-from-entity! snow-spatula ((obj snow-spatula) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 49152.0 -16384.0 16384.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-spatula-sg* '()) + (logior! (-> obj skel status) 1) + (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15) + (quaternion->matrix (-> obj startmat) (-> obj root-override quat)) + (dummy-21 obj) + (go snow-spatula-idle) + (none) + ) + +(deftype snow-fort-gate (process-drawable) + ((root-override collide-shape :offset 112) + (part2 sparticle-launch-control :offset-assert 176) + (part3 sparticle-launch-control :offset-assert 180) + (open-trans vector :inline :offset-assert 192) + (closed-trans vector :inline :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xe0 + :flag-assert #x14007000e0 + (:states + snow-fort-gate-activate + snow-fort-gate-idle-closed + snow-fort-gate-idle-open + ) + ) + + +(defskelgroup *snow-fort-gate-sg* snow-fort-gate + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 15 0 24) + :longest-edge (meters 12.8) + ) + +(set! (-> *part-group-id-table* 512) (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-snow-fort-gate-coming-down" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1896)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1896) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-rnd-flt spt-num 0.5 1.0 1.0) + (sp-rnd-flt spt-x (meters -10.0) (meters 20.0) 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 10.5) (meters 8.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 96.0) + (sp-flt spt-g 96.0) + (sp-rnd-flt spt-b 96.0 16.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters -0.026666667) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-vel-z (meters -0.053333335) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-flt spt-fade-a 0.42666668) + (sp-flt spt-accel-y -2.7306666) + (sp-flt spt-friction 0.98) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 75 74 1) + (sp-launcher-by-id spt-next-launcher 1897) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1897) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.21333334) (sp-end)) + ) + ) + +(set! (-> *part-group-id-table* 513) (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-snow-fort-gate-hits-bottom" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1898)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1898) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 64.0) + (sp-rnd-flt spt-x (meters -10.0) (meters 20.0) 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-flt spt-z -12288.0) + (sp-rnd-flt spt-scale-x (meters 4.0) (meters 8.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-rnd-flt spt-b 128.0 16.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters -0.013333334) (meters 0.026666667) 1.0) + (sp-rnd-flt spt-vel-z (meters -0.053333335) (meters 0.046666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-flt spt-fade-a 0.42666668) + (sp-flt spt-accel-y -0.68266666) + (sp-flt spt-friction 0.98) + (sp-int spt-timer 750) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 75 74 1) + (sp-launcher-by-id spt-next-launcher 1899) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1899) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.10666667) (sp-end)) + ) + ) + +(set! (-> *part-group-id-table* 514) + (new 'static 'sparticle-launch-group + :length 15 + :duration #xbb8 + :linger-duration #x5dc + :name "group-snow-fort-gate-snowdrops" + :launcher + (new 'static 'inline-array sparticle-group-item 15 + (sp-item 2271 :fade-after (meters 100.0) :falloff-to (meters 130.0) :period 1200 :length 150) + (sp-item 2271 :fade-after (meters 100.0) :falloff-to (meters 130.0) :period 1200 :length 100) + (sp-item 2271 :fade-after (meters 100.0) :falloff-to (meters 130.0) :period 1200 :length 60) + (sp-item 2271 :fade-after (meters 100.0) :falloff-to (meters 130.0) :period 1200 :length 30) + (sp-item 2271 :fade-after (meters 100.0) :falloff-to (meters 130.0) :period 1200 :length 10) + (sp-item 2272 :fade-after (meters 100.0) :falloff-to (meters 100.0) :period 1200 :length 200) + (sp-item 2272 :fade-after (meters 100.0) :falloff-to (meters 100.0) :period 1200 :length 150) + (sp-item 2272 :fade-after (meters 100.0) :falloff-to (meters 100.0) :period 1200 :length 100) + (sp-item 2272 :fade-after (meters 100.0) :falloff-to (meters 100.0) :period 1200 :length 50) + (sp-item 2272 :fade-after (meters 100.0) :falloff-to (meters 100.0) :period 1200 :length 20) + (sp-item 2273 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 1200 :length 170) + (sp-item 2273 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 1200 :length 115) + (sp-item 2273 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 1200 :length 70) + (sp-item 2273 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 1200 :length 35) + (sp-item 2273 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 1200 :length 10) + ) + :bounds + (new 'static 'sphere :y -65536.0 :w 131072.0) + ) + ) + +(set! (-> *part-id-table* 2271) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -4096.0 8192.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.5) (meters 0.25) 1.0) + (sp-flt spt-r 150.0) + (sp-flt spt-g 150.0) + (sp-rnd-flt spt-b 150.0 55.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-y (meters -0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-rnd-flt spt-accel-y -2.7306666 -1.3653333 1.0) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 600) + (sp-launcher-by-id spt-next-launcher 2274) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2274) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.42666668) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2272) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-flt spt-y (meters 1.0)) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.25) (meters 0.1) 1.0) + (sp-flt spt-r 150.0) + (sp-flt spt-g 150.0) + (sp-rnd-flt spt-b 150.0 55.0 1.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-vel-y (meters -0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-rnd-flt spt-accel-y -2.048 -1.3653333 1.0) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 600) + (sp-launcher-by-id spt-next-launcher 2274) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2273) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x2)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-flt spt-y (meters 1.0)) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 0.25) 1.0) + (sp-rnd-flt spt-scale-y (meters 2.5) (meters 1.0) 1.0) + (sp-flt spt-r 150.0) + (sp-flt spt-g 150.0) + (sp-rnd-flt spt-b 150.0 55.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-flt spt-vel-y (meters -0.006666667)) + (sp-flt spt-fade-a -0.14222223) + (sp-rnd-flt spt-accel-y -2.048 -1.3653333 1.0) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit12) + (sp-end) + ) + ) + ) + +(defstate snow-fort-gate-idle-closed (snow-fort-gate) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notice) + (go snow-fort-gate-activate) + ) + ) + ) + :trans + (behavior () + (when (and *target* (>= 61440.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (level-hint-spawn + (game-text-id snow-fort-reminder) + "sksp0345" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (close-specific-task! (game-task snow-fort) (task-status need-hint)) + ) + (none) + ) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (set! (-> self root-override trans quad) (-> self closed-trans quad)) + (transform-post) + (suspend) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate snow-fort-gate-activate (snow-fort-gate) + :enter + (behavior () (logclear! (-> self mask) (process-mask actor-pause)) (none)) + :exit + (behavior () (stop! (-> self sound)) (logior! (-> self mask) (process-mask actor-pause)) (none)) + :code + (behavior () + (let ((gp-0 #f)) + (while #t + (let ((a1-0 (new 'stack-no-clear 'vector))) + (set! (-> a1-0 quad) (-> self closed-trans quad)) + (set! (-> a1-0 y) (+ -12288.0 (-> a1-0 y))) + (set! (-> a1-0 z) (+ -12288.0 (-> a1-0 z))) + (spawn (-> self part) a1-0) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> s5-0 quad) (-> self root-override trans quad)) + (let ((f30-0 (vector-vector-distance-squared s5-0 (-> self open-trans)))) + (when (and (not gp-0) (>= 1048576.0 f30-0)) + (set! gp-0 #t) + (let ((a1-2 (new 'stack-no-clear 'vector))) + (set! (-> a1-2 quad) (-> self open-trans quad)) + (set! (-> a1-2 y) (+ -26624.0 (-> a1-2 y))) + (set! (-> a1-2 z) (+ -3072.0 (-> a1-2 z))) + (spawn (-> self part2) a1-2) + ) + ) + (when (>= 1677.7216 f30-0) + (sound-play-by-name (static-sound-name "lodge-close") (new-sound-id) 1024 0 0 1 #t) + (activate! *camera-smush-control* 819.2 37 150 1.0 0.99) + (go snow-fort-gate-idle-open) + ) + ) + (vector-seek-3d-smooth! s5-0 (-> self open-trans) (* 16384.0 (-> *display* seconds-per-frame)) 0.9) + (TODO-RENAME-30 (-> self root-override) s5-0) + ) + (let ((a1-7 (new 'stack-no-clear 'vector))) + (set! (-> a1-7 quad) (-> self root-override trans quad)) + (set! (-> a1-7 x) (+ 20480.0 (-> a1-7 x))) + (set! (-> a1-7 y) (+ 106496.0 (-> a1-7 y))) + (set! (-> a1-7 z) (+ -32768.0 (-> a1-7 z))) + (spawn (-> self part3) a1-7) + ) + (update! (-> self sound)) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior snow-fort-gate) transform-post) + ) + +(defstate snow-fort-gate-idle-open (snow-fort-gate) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (set! (-> self root-override trans quad) (-> self open-trans quad)) + (transform-post) + (suspend) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defmethod deactivate snow-fort-gate ((obj snow-fort-gate)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + (if (nonzero? (-> obj part3)) + (kill-and-free-particles (-> obj part3)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defmethod relocate snow-fort-gate ((obj snow-fort-gate) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (if (nonzero? (-> obj part3)) + (&+! (-> obj part3) arg0) + ) + (the-as + snow-fort-gate + ((the-as (function process-drawable int process-drawable) (find-parent-method snow-fort-gate 7)) obj arg0) + ) + ) + +(defmethod init-from-entity! snow-fort-gate ((obj snow-fort-gate) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 61440.0 0.0 99123.2) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-fort-gate-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 512) obj)) + (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 513) obj)) + (set! (-> obj part3) (create-launch-control (-> *part-group-id-table* 514) obj)) + (set! (-> obj open-trans quad) (-> obj root-override trans quad)) + (set! (-> obj closed-trans quad) (-> obj open-trans quad)) + (set! (-> obj open-trans y) (+ -141312.0 (-> obj open-trans y))) + (set! (-> obj open-trans z) (+ 32768.0 (-> obj open-trans z))) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "lodge-door-mov") + :volume #x400 + :fo-max 80 + ) + (-> obj open-trans) + ) + ) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (cond + ((task-complete? *game-info* (game-task snow-ball)) + (set! (-> obj root-override trans quad) (-> obj open-trans quad)) + (transform-post) + (go snow-fort-gate-idle-open) + ) + (else + (set! (-> obj root-override trans quad) (-> obj closed-trans quad)) + (transform-post) + (go snow-fort-gate-idle-closed) + ) + ) + (none) + ) + +(deftype snow-gears (process-drawable) + () + :heap-base #x40 + :method-count-assert 21 + :size-assert #xb0 + :flag-assert #x15004000b0 + (:methods + (TODO-RENAME-20 (_type_) none 20) + ) + (:states + snow-gears-activate + snow-gears-halt + snow-gears-idle + snow-gears-stopped + ) + ) + + +(defskelgroup *snow-gears-sg* snow-gears + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 60) + :longest-edge (meters 12.1) + ) + +(set! (-> *part-group-id-table* 515) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-snow-gears-dripping" + :launcher + (new 'static 'inline-array sparticle-group-item 2 (sp-item 1900) (sp-item 1901)) + :bounds + (new 'static 'sphere :y -16384.0 :w 65536.0) + ) + ) + +(set! (-> *part-id-table* 1900) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters -9.0) (meters 18.0) 1.0) + (sp-flt spt-y (meters -6.0)) + (sp-rnd-flt spt-z -36864.0 73728.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.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 32.0 40.0 1.0) + (sp-rnd-flt spt-g 32.0 40.0 1.0) + (sp-rnd-flt spt-b 32.0 40.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters -0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -0.68266666 1.0) + (sp-int spt-timer 390) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1901) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -7.0)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 4.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 16.0 1.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-fade-a 1.0666667) + (sp-flt spt-accel-y 0.06826667) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 1902) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 3.5) (meters 6.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1902) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a 0.0) + (sp-int-plain-rnd spt-next-time 450 239 1) + (sp-launcher-by-id spt-next-launcher 1903) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1903) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.14222223) (sp-end)) + ) + ) + +(defmethod TODO-RENAME-20 snow-gears ((obj snow-gears)) + (let ((a1-0 (new 'stack-no-clear 'vector))) + (set! (-> a1-0 quad) (-> obj root trans quad)) + (set! (-> a1-0 y) (+ 61440.0 (-> a1-0 y))) + (spawn (-> obj part) a1-0) + ) + (none) + ) + +(defstate snow-gears-idle (snow-gears) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notice) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go snow-gears-activate) + ) + ) + ) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (ja-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate snow-gears-activate (snow-gears) + :trans + (behavior () (TODO-RENAME-20 self) (none)) + :code + (behavior () + (sound-play-by-name (static-sound-name "eng-start-up") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 0.85) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 0.85) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 0.35) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (update! (-> self sound)) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 0.35) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (update! (-> self sound)) + (suspend) + ) + (go snow-gears-halt) + (none) + ) + :post + (the-as (function none :behavior snow-gears) ja-post) + ) + +(defstate snow-gears-halt (snow-gears) + :exit + (behavior () (stop! (-> self sound)) (none)) + :trans + (behavior () (TODO-RENAME-20 self) (none)) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 0.35) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (update! (-> self sound)) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 0.35) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (stop! (-> self sound)) + (sound-play-by-name (static-sound-name "eng-shut-down") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 0.85) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 0.85) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go snow-gears-stopped) + (none) + ) + :post + (the-as (function none :behavior snow-gears) ja-post) + ) + +(defstate snow-gears-stopped (snow-gears) + :code + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defmethod init-from-entity! snow-gears ((obj snow-gears) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-gears-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 515) obj)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "snow-engine") + :volume #x400 + :fo-max #x12c + ) + (-> obj root trans) + ) + ) + (go snow-gears-idle) + (none) + ) + +(deftype snow-switch (process-drawable) + ((root-override collide-shape-moving :offset 112) + (pressed? symbol :offset-assert 176) + (fcell-handle handle :offset-assert 184) + (orig-trans vector :inline :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xd0 + :flag-assert #x14006000d0 + (:states + snow-switch-activate + snow-switch-idle-down + snow-switch-idle-up + ) + ) + + +(defskelgroup *snow-switch-sg* snow-switch + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + :longest-edge (meters 0) + ) + +(defbehavior snow-switch-event-handler snow-switch ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('notify) + (cond + ((= (-> arg0 type) fuel-cell) + (when (= (-> arg3 param 0) 'pickup) + (set! (-> self pressed?) #t) + (process-entity-status! self (entity-perm-status bit-3) #t) + (logclear! (-> self mask) (process-mask actor-pause)) + (go snow-switch-activate) + ) + ) + ((= (-> arg0 type) snowcam) + (if (= (-> arg3 param 0) 'die) + (go snow-switch-idle-down) + ) + ) + ) + ) + (('query) + (return (-> self pressed?)) + v0-0 + ) + ) + ) + +(defstate snow-switch-idle-up (snow-switch) + :event + snow-switch-event-handler + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate snow-switch-activate (snow-switch) + :event + snow-switch-event-handler + :exit + (behavior () + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self mask) (process-mask actor-pause)) + (none) + ) + :trans + (the-as (function none :behavior snow-switch) rider-trans) + :code + (behavior () + (local-vars (v1-1 symbol)) + (until v1-1 + (suspend) + (set! v1-1 (or (not *target*) (zero? (logand (-> *target* state-flags) 256)))) + ) + (sound-play-by-name (static-sound-name "prec-button1") (new-sound-id) 1024 -1524 0 1 #t) + (let ((gp-1 (get-process *default-dead-pool* snowcam #x4000))) + (set! (-> (the-as snowcam (-> (when gp-1 + (let ((t9-3 (method-of-type snowcam activate))) + (t9-3 (the-as snowcam gp-1) self 'snowcam (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + pov-camera-init-by-other + (new 'static 'vector :x 3411656.8 :y 779689.56 :z -13573010.0 :w 1.0) + *snowcam-sg* + "gearstart" + 0 + self + '() + ) + (-> gp-1 ppointer) + ) + 0 + ) + ) + seq + ) + (the-as uint 0) + ) + ) + 0 + (let ((gp-2 #f)) + (while #t + (let ((s5-1 (new 'stack-no-clear 'vector)) + (f0-1 (+ -1433.6 (-> self orig-trans y))) + ) + (set! (-> s5-1 quad) (-> self root-override trans quad)) + (cond + ((= (-> s5-1 y) f0-1) + (when (not gp-2) + (set! gp-2 #t) + (send-to-all (-> self link) 'notice) + ) + ) + (else + (set! (-> s5-1 y) + (seek-with-smooth (-> self root-override trans y) f0-1 (* 6144.0 (-> *display* seconds-per-frame)) 0.2 204.8) + ) + (TODO-RENAME-30 (-> self root-override) s5-1) + ) + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior snow-switch) rider-post) + ) + +(defstate snow-switch-idle-down (snow-switch) + :event + snow-switch-event-handler + :code + (behavior () + (set! (-> self pressed?) #t) + (set! (-> self root-override trans quad) (-> self orig-trans quad)) + (set! (-> self root-override trans y) (+ -1433.6 (-> self root-override trans y))) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defmethod init-from-entity! snow-switch ((obj snow-switch) (arg0 entity-actor)) + (set! (-> obj pressed?) #f) + (set! (-> obj fcell-handle) (the-as handle #f)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 8192.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-switch-sg* '()) + (logior! (-> obj skel status) 1) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (transform-post) + (set! (-> obj orig-trans quad) (-> obj root-override trans quad)) + (let ((s5-2 (task-complete? *game-info* (game-task snow-ball)))) + (set! (-> obj pressed?) s5-2) + (when (not s5-2) + (let ((a0-17 (new 'stack-no-clear 'vector))) + (set! (-> a0-17 quad) (-> obj orig-trans quad)) + (set! (-> a0-17 y) (+ 12288.0 (-> a0-17 y))) + (set! (-> obj fcell-handle) (ppointer->handle (birth-pickup-at-point + a0-17 + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + ) + ) + ) + ) + (if s5-2 + (go snow-switch-idle-down) + (go snow-switch-idle-up) + ) + ) + (none) + ) + +(deftype snow-log (process-drawable) + ((root-override collide-shape-moving :offset 112) + (master entity-actor :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + snow-log-activate + snow-log-active + snow-log-hidden + snow-log-wait-for-master + ) + ) + + +(defskelgroup *snow-log-sg* snow-log + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 5 0 9) + :longest-edge (meters 0) + ) + +(defstate snow-log-wait-for-master (snow-log) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('trigger) + (go snow-log-activate) + ) + ) + ) + :code + (behavior () + (while #t + (while (let ((v1-0 (-> self master))) + (not (if v1-0 + (-> v1-0 extra process) + ) + ) + ) + (suspend) + ) + (suspend) + (let* ((v1-3 (-> self master)) + (a0-1 (if v1-3 + (-> v1-3 extra process) + ) + ) + ) + (when a0-1 + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'query) + (cond + ((send-event-function a0-1 a1-0) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go snow-log-active) + ) + (else + (go snow-log-hidden) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +(defstate snow-log-hidden (snow-log) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go snow-log-activate) + ) + ) + ) + :code + (behavior () + (ja-channel-push! 1 0) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +(defstate snow-log-activate (snow-log) + :enter + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (logclear! (-> self draw status) (draw-status drwf01)) + (none) + ) + :exit + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (none) + ) + :trans + (the-as (function none :behavior snow-log) rider-trans) + :code + (behavior () + (activate! *camera-smush-control* 819.2 37 150 1.0 0.99) + (ja-channel-push! 1 0) + (let ((gp-0 #f)) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (not gp-0) (>= (ja-frame-num 0) 5.0)) + (set! gp-0 #t) + (sound-play-by-name (static-sound-name "explosion") (new-sound-id) 409 1371 0 1 #t) + (sound-play-by-name (static-sound-name "snow-spat-short") (new-sound-id) 1024 381 0 1 #t) + ) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (go snow-log-active) + (none) + ) + :post + (the-as (function none :behavior snow-log) rider-post) + ) + +(defstate snow-log-active (snow-log) + :trans + (the-as (function none :behavior snow-log) rider-trans) + :code + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (logclear! (-> self draw status) (draw-status drwf01)) + (ja-channel-push! 1 22) + (let ((gp-0 #t) + (s5-0 #t) + ) + (while #t + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 0.25) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (let ((f0-4 (ja-aframe-num 0))) + (cond + ((and gp-0 (< f0-4 1.0)) + (set! gp-0 #f) + (set! s5-0 #t) + (sound-play-by-name + (static-sound-name "snow-spat-long") + (new-sound-id) + 870 + (the int (* 1524.0 (rand-vu-float-range -0.2 0.2))) + 0 + 1 + #t + ) + ) + ((and s5-0 (>= f0-4 11.0)) + (set! s5-0 #f) + (set! gp-0 #t) + (sound-play-by-name + (static-sound-name "snow-spat-short") + (new-sound-id) + 870 + (the int (* 1524.0 (rand-vu-float-range -0.2 0.2))) + 0 + 1 + #t + ) + ) + ) + ) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) 0.25) + (joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior snow-log) rider-post) + ) + +(defmethod init-from-entity! snow-log ((obj snow-log) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 20480.0 0.0 36864.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) 11264.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-log-sg* '()) + (logior! (-> obj skel status) 1) + (logior! (-> obj draw status) (draw-status drwf01)) + (set! (-> obj root-override trans x) (+ -1024.0 (-> obj root-override trans x))) + (set! (-> obj root-override trans y) (+ -4915.2 (-> obj root-override trans y))) + (set-vector! (-> obj root-override scale) 1.5 1.0 1.5 1.0) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (set! (-> obj master) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (go snow-log-wait-for-master) + (none) + ) + +(deftype snow-log-button (process-drawable) + ((root-override collide-shape-moving :offset 112) + (log entity-actor :offset-assert 176) + (orig-trans vector :inline :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xd0 + :flag-assert #x14006000d0 + (:states + snow-log-button-activate + snow-log-button-idle-down + snow-log-button-idle-up + ) + ) + + +(defbehavior snow-log-button-event-handler snow-log-button ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-2 basic)) + (case arg2 + (('touch 'bonk 'attack) + (when (and + (= (-> arg0 type) target) + (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete)))) + (>= 6553.6 (vector-vector-xz-distance (target-pos 0) (-> self root-override trans))) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go snow-log-button-activate) + (return (the-as object #f)) + v0-2 + ) + ) + (('query) + (when (= (-> arg0 type) snow-log) + (return (the-as + object + (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))) + ) + ) + v0-2 + ) + ) + ) + ) + +(defstate snow-log-button-idle-up (snow-log-button) + :event + snow-log-button-event-handler + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate snow-log-button-activate (snow-log-button) + :event + snow-log-button-event-handler + :exit + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (none) + ) + :trans + (the-as (function none :behavior snow-log-button) rider-trans) + :code + (behavior () + (sound-play-by-name (static-sound-name "prec-button1") (new-sound-id) 1024 0 0 1 #t) + (while #t + (let ((f30-0 (+ -1433.6 (-> self orig-trans y)))) + (when (= (-> self root-override trans y) f30-0) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'trigger) + (let ((t9-2 send-event-function) + (v1-4 (-> self log)) + ) + (t9-2 + (if v1-4 + (-> v1-4 extra process) + ) + a1-1 + ) + ) + ) + (go snow-log-button-idle-down) + ) + (set! (-> self root-override trans y) (seek-with-smooth + (-> self root-override trans y) + f30-0 + (* 12288.0 (-> *display* seconds-per-frame)) + 0.2 + 204.8 + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior snow-log-button) rider-post) + ) + +(defstate snow-log-button-idle-down (snow-log-button) + :event + snow-log-button-event-handler + :code + (behavior () + (set! (-> self root-override trans quad) (-> self orig-trans quad)) + (set! (-> self root-override trans y) (+ -1433.6 (-> self root-override trans y))) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defmethod init-from-entity! snow-log-button ((obj snow-log-button) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 8192.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-switch-sg* '()) + (logior! (-> obj skel status) 1) + (ja-channel-push! 1 0) + (let ((s4-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (transform-post) + (set! (-> obj orig-trans quad) (-> obj root-override trans quad)) + (set! (-> obj log) (entity-actor-lookup arg0 'alt-actor 0)) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go snow-log-button-idle-down) + (go snow-log-button-idle-up) + ) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/sunken-water.gc b/goal_src/levels/sunken/sunken-water.gc index d06f6bdc36..f45bcf182d 100644 --- a/goal_src/levels/sunken/sunken-water.gc +++ b/goal_src/levels/sunken/sunken-water.gc @@ -28,96 +28,86 @@ ) -(define - ripple-for-sunken-water - (new 'static 'ripple-wave-set - :count 3 - :converted #f - :normal-scale 1.0 - :wave - (new 'static 'inline-array ripple-wave 4 - (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) - (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) - (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) - (new 'static 'ripple-wave) - ) - ) - ) +(define ripple-for-sunken-water (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) -(set! - (-> *part-group-id-table* 446) - (new 'static 'sparticle-launch-group - :length 1 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-sunken-water-deadly-water" - :launcher - (new 'static 'inline-array sparticle-group-item 1 - (sp-item 1736 :fade-after (meters 50.0)) - ) - :bounds (new 'static 'sphere :w 32768.0) - ) - ) +(set! (-> *part-group-id-table* 446) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-sunken-water-deadly-water" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1736 :fade-after (meters 50.0))) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) -(set! - (-> *part-id-table* 1736) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-y (meters 0.0)) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) - (sp-flt spt-scale-y (meters 0.25)) - (sp-flt spt-r 255.0) - (sp-flt spt-g 255.0) - (sp-flt spt-b 255.0) - (sp-rnd-flt spt-a 96.0 32.0 1.0) - (sp-flt spt-scalevel-x (meters 0.1875)) - (sp-flt spt-scalevel-y (meters -0.001875)) - (sp-flt spt-fade-a -3.2) - (sp-int spt-timer 81) - (sp-cpuinfo-flags bit2 bit3 bit14) - (sp-int spt-next-time 15) - (sp-launcher-by-id spt-next-launcher 2022) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1736) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) + (sp-flt spt-scale-y (meters 0.25)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.1875)) + (sp-flt spt-scalevel-y (meters -0.001875)) + (sp-flt spt-fade-a -3.2) + (sp-int spt-timer 81) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 2022) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 2022) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 5 - (sp-flt spt-r 255.0) - (sp-rnd-flt spt-g 128.0 128.0 1.0) - (sp-flt spt-b 0.0) - (sp-flt spt-fade-a -1.28) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2022) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-fade-a -1.28) + (sp-end) + ) + ) + ) (defmethod draw-ripple sunken-water ((obj sunken-water)) (set! (-> obj draw ripple send-query) #t) (let ((gp-0 (-> obj draw ripple query))) - (let ((a0-1 (-> *display* base-frame-counter))) - (set! (-> gp-0 start-vertex) (logand (* 13 (logand a0-1 127)) 127)) + (let ((a0-1 (-> *display* base-frame-counter))) + (set! (-> gp-0 start-vertex) (logand (* 13 (logand a0-1 127)) 127)) + ) + (set! (-> gp-0 vertex-skip) 128) + (dotimes (s5-0 (-> gp-0 vertex-count)) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 1736) + (-> gp-0 data s5-0) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) ) - (set! (-> gp-0 vertex-skip) 128) - (dotimes (s5-0 (-> gp-0 vertex-count)) - (sp-launch-particles-var - *sp-particle-system-2d* - (-> *part-id-table* 1736) - (-> gp-0 data s5-0) - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) - ) - ) #f ) @@ -125,142 +115,94 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('notify) - (if (= (-> arg3 param 0) 'attack) - (sound-play-by-name - (static-sound-name "get-shocked") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - ) - ) - (else - ((-> (method-of-type water-anim water-vol-idle) event) arg0 arg1 arg2 arg3) - ) - ) - ) - :trans - (behavior () - (let ((t9-0 (-> (method-of-type water-anim water-vol-idle) trans))) - (if t9-0 - (t9-0) - ) - ) - (cond - ((-> self use-sync?) - (cond - ((< (get-current-phase (-> self sync)) (-> self deadly-time)) - (when (!= (-> self deadly-fade) 1.0) - (set! - (-> self deadly-fade) - (seek - (-> self deadly-fade) - 1.0 - (* 8.0 (-> *display* seconds-per-frame)) - ) - ) - (let ((f30-0 (-> self deadly-fade))) - (vector-lerp! - (-> self draw color-mult) - (-> self safe-color-mult) - (-> self deadly-color-mult) - f30-0 - ) - (vector-lerp! - (-> self draw color-emissive) - (-> self safe-color-emissive) - (-> self deadly-color-emissive) - f30-0 - ) - (set! (-> self draw color-mult w) 0.5) - (if (= f30-0 1.0) - (set! (-> self flags) (logior #x80000 (-> self flags))) - ) - ) - ) - (draw-ripple self) - (when (not (-> self playing-deadly-sound?)) - (set! (-> self playing-deadly-sound?) #t) - (sound-play-by-name - (static-sound-name "water-on") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - ) - (update! (-> self sound)) + (case arg2 + (('notify) + (if (= (-> arg3 param 0) 'attack) + (sound-play-by-name (static-sound-name "get-shocked") (new-sound-id) 1024 0 0 1 #t) + ) ) (else - (set! (-> self flags) (logand -524289 (-> self flags))) - (when (!= (-> self deadly-fade) 0.0) - (set! - (-> self deadly-fade) - (seek - (-> self deadly-fade) - 0.0 - (* 8.0 (-> *display* seconds-per-frame)) - ) - ) - (let ((f30-1 (-> self deadly-fade))) - (vector-lerp! - (-> self draw color-mult) - (-> self safe-color-mult) - (-> self deadly-color-mult) - f30-1 - ) - (vector-lerp! - (-> self draw color-emissive) - (-> self safe-color-emissive) - (-> self deadly-color-emissive) - f30-1 - ) - (set! (-> self draw color-mult w) 0.5) - (if (= f30-1 0.0) - (set! (-> self flags) (logand -524289 (-> self flags))) - ) - ) + ((-> (method-of-type water-anim water-vol-idle) event) arg0 arg1 arg2 arg3) ) - (when (-> self playing-deadly-sound?) - (set! (-> self playing-deadly-sound?) #f) - (stop! (-> self sound)) - (sound-play-by-name - (static-sound-name "water-off") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - ) - ) ) - (set-fade! - *palette-fade-controls* - 3 - (-> self deadly-fade) - (vector-vector-distance (-> self root trans) (camera-pos)) - (the-as vector #f) - ) - ) - (else - (when (logtest? #x80000 (-> self flags)) - (draw-ripple self) - (update! (-> self sound)) - (set! (-> self playing-deadly-sound?) #t) - ) - ) ) - (none) - ) + :trans + (behavior () + (let ((t9-0 (-> (method-of-type water-anim water-vol-idle) trans))) + (if t9-0 + (t9-0) + ) + ) + (cond + ((-> self use-sync?) + (cond + ((< (get-current-phase (-> self sync)) (-> self deadly-time)) + (when (!= (-> self deadly-fade) 1.0) + (set! (-> self deadly-fade) (seek (-> self deadly-fade) 1.0 (* 8.0 (-> *display* seconds-per-frame)))) + (let ((f30-0 (-> self deadly-fade))) + (vector-lerp! (-> self draw color-mult) (-> self safe-color-mult) (-> self deadly-color-mult) f30-0) + (vector-lerp! + (-> self draw color-emissive) + (-> self safe-color-emissive) + (-> self deadly-color-emissive) + f30-0 + ) + (set! (-> self draw color-mult w) 0.5) + (if (= f30-0 1.0) + (set! (-> self flags) (logior #x80000 (-> self flags))) + ) + ) + ) + (draw-ripple self) + (when (not (-> self playing-deadly-sound?)) + (set! (-> self playing-deadly-sound?) #t) + (sound-play-by-name (static-sound-name "water-on") (new-sound-id) 1024 0 0 1 #t) + ) + (update! (-> self sound)) + ) + (else + (set! (-> self flags) (logand -524289 (-> self flags))) + (when (!= (-> self deadly-fade) 0.0) + (set! (-> self deadly-fade) (seek (-> self deadly-fade) 0.0 (* 8.0 (-> *display* seconds-per-frame)))) + (let ((f30-1 (-> self deadly-fade))) + (vector-lerp! (-> self draw color-mult) (-> self safe-color-mult) (-> self deadly-color-mult) f30-1) + (vector-lerp! + (-> self draw color-emissive) + (-> self safe-color-emissive) + (-> self deadly-color-emissive) + f30-1 + ) + (set! (-> self draw color-mult w) 0.5) + (if (= f30-1 0.0) + (set! (-> self flags) (logand -524289 (-> self flags))) + ) + ) + ) + (when (-> self playing-deadly-sound?) + (set! (-> self playing-deadly-sound?) #f) + (stop! (-> self sound)) + (sound-play-by-name (static-sound-name "water-off") (new-sound-id) 1024 0 0 1 #t) + ) + ) + ) + (set-fade! + *palette-fade-controls* + 3 + (-> self deadly-fade) + (vector-vector-distance (-> self root trans) (camera-pos)) + (the-as vector #f) + ) + ) + (else + (when (logtest? #x80000 (-> self flags)) + (draw-ripple self) + (update! (-> self sound)) + (set! (-> self playing-deadly-sound?) #t) + ) + ) + ) + (none) + ) :post (the-as (function none :behavior sunken-water) ja-post) ) @@ -268,85 +210,82 @@ (defmethod TODO-RENAME-25 sunken-water ((obj sunken-water)) (local-vars (v0-3 uint)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-25))) - (t9-0 obj) - ) + (t9-0 obj) + ) (set! (-> obj playing-deadly-sound?) #f) (set-vector! (-> obj safe-color-mult) 0.125 0.225 0.22 0.5) (set-vector! (-> obj safe-color-emissive) 0.0 0.0 0.0 1.0) (set-vector! (-> obj deadly-color-mult) 0.125 0.225 0.22 0.5) (set-vector! (-> obj deadly-color-emissive) 0.33 0.6 0.0 1.0) - (let - ((s5-0 (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15))) - (let ((f0-16 (res-lump-float (-> obj entity) 'percent :default -1.0))) - (if (or (< f0-16 0.0) (< 1.0 f0-16)) - (set! f0-16 (cond - (s5-0 - 0.5 - ) - ((logtest? #x80000 (-> obj flags)) - 1.0 - ) - (else - 0.0 - ) - ) + (let ((s5-0 (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15))) + (let ((f0-16 (res-lump-float (-> obj entity) 'percent :default -1.0))) + (if (or (< f0-16 0.0) (< 1.0 f0-16)) + (set! f0-16 (cond + (s5-0 + 0.5 + ) + ((logtest? #x80000 (-> obj flags)) + 1.0 + ) + (else + 0.0 + ) + ) + ) + ) + (when (and s5-0 (or (= f0-16 0.0) (= f0-16 1.0))) + (set! s5-0 #f) + (if (= f0-16 0.0) + (set! (-> obj flags) (logior #x80000 (-> obj flags))) + (set! (-> obj flags) (logand -524289 (-> obj flags))) + ) + ) + (set! (-> obj use-sync?) s5-0) + (set! (-> obj deadly-time) f0-16) ) - ) - (when (and s5-0 (or (= f0-16 0.0) (= f0-16 1.0))) - (set! s5-0 #f) - (if (= f0-16 0.0) - (set! (-> obj flags) (logior #x80000 (-> obj flags))) - (set! (-> obj flags) (logand -524289 (-> obj flags))) - ) - ) - (set! (-> obj use-sync?) s5-0) - (set! (-> obj deadly-time) f0-16) - ) - (the-as object (when s5-0 - (cond - ((< (get-current-phase (-> obj sync)) (-> obj deadly-time)) - (set! v0-3 (logior (the-as uint #x80000) (-> obj flags))) - (set! (-> obj flags) v0-3) + (the-as object (when s5-0 + (cond + ((< (get-current-phase (-> obj sync)) (-> obj deadly-time)) + (set! v0-3 (logior (the-as uint #x80000) (-> obj flags))) + (set! (-> obj flags) v0-3) + ) + (else + (set! v0-3 (logand (the-as uint -524289) (-> obj flags))) + (set! (-> obj flags) v0-3) + ) + ) + v0-3 ) - (else - (set! v0-3 (logand (the-as uint -524289) (-> obj flags))) - (set! (-> obj flags) v0-3) - ) - ) - v0-3 - ) + ) ) - ) ) (defmethod TODO-RENAME-22 sunken-water ((obj sunken-water)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) - (t9-0 obj) - ) + (t9-0 obj) + ) (set! (-> obj play-ambient-sound?) #f) (cond - ((logtest? #x80000 (-> obj flags)) - (set! (-> obj draw color-mult quad) (-> obj deadly-color-mult quad)) - (set! (-> obj draw color-emissive quad) (-> obj deadly-color-emissive quad)) - (set! (-> obj deadly-fade) 1.0) + ((logtest? #x80000 (-> obj flags)) + (set! (-> obj draw color-mult quad) (-> obj deadly-color-mult quad)) + (set! (-> obj draw color-emissive quad) (-> obj deadly-color-emissive quad)) + (set! (-> obj deadly-fade) 1.0) + ) + (else + (set! (-> obj draw color-mult quad) (-> obj safe-color-mult quad)) + (set! (-> obj draw color-emissive quad) (-> obj safe-color-emissive quad)) + (set! (-> obj deadly-fade) 0.0) + ) ) - (else - (set! (-> obj draw color-mult quad) (-> obj safe-color-mult quad)) - (set! (-> obj draw color-emissive quad) (-> obj safe-color-emissive quad)) - (set! (-> obj deadly-fade) 0.0) - ) - ) (let ((s5-0 (new 'process 'ripple-control))) - (set! (-> obj draw ripple) s5-0) - (set! (-> s5-0 global-scale) 3072.0) - (set! (-> s5-0 close-fade-dist) 163840.0) - (set! (-> s5-0 far-fade-dist) 245760.0) - (set! (-> s5-0 waveform) ripple-for-sunken-water) - (let ((v0-2 (new 'process 'ripple-merc-query 100))) - (set! (-> s5-0 query) v0-2) - (the-as ripple-wave-set v0-2) + (set! (-> obj draw ripple) s5-0) + (set! (-> s5-0 global-scale) 3072.0) + (set! (-> s5-0 close-fade-dist) 163840.0) + (set! (-> s5-0 far-fade-dist) 245760.0) + (set! (-> s5-0 waveform) ripple-for-sunken-water) + (set! (-> s5-0 query) (new 'process 'ripple-merc-query 100)) ) - ) + (none) ) diff --git a/goal_src/levels/training/training-obs.gc b/goal_src/levels/training/training-obs.gc index 22016014f3..cc7f6b491f 100644 --- a/goal_src/levels/training/training-obs.gc +++ b/goal_src/levels/training/training-obs.gc @@ -5,3 +5,1302 @@ ;; name in dgo: training-obs ;; dgos: L1, TRA +;; DECOMP BEGINS + +(deftype training-water (water-anim) + () + :heap-base #x70 + :method-count-assert 30 + :size-assert #xdc + :flag-assert #x1e007000dc + ) + + +(define ripple-for-training-water (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +(defmethod TODO-RENAME-22 training-water ((obj training-water)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (let ((v1-2 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) v1-2) + (set-vector! (-> obj draw color-mult) 0.01 0.45 0.5 0.75) + (set! (-> v1-2 global-scale) 3072.0) + (set! (-> v1-2 close-fade-dist) 163840.0) + (set! (-> v1-2 far-fade-dist) 245760.0) + (set! (-> v1-2 waveform) ripple-for-training-water) + ) + (none) + ) + +(defskelgroup *training-cam-sg* trainingcam + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 80) + :longest-edge (meters 0) + ) + +(deftype training-cam (process) + ((root trsq :offset-assert 112) + (range meters :offset-assert 116) + (index int32 :offset-assert 120) + (state-time uint64 :offset-assert 128) + ) + :heap-base #x20 + :method-count-assert 15 + :size-assert #x88 + :flag-assert #xf00200088 + (:methods + (idle () _type_ :state 14) + ) + ) + + +(defmethod relocate training-cam ((obj training-cam) (arg0 int)) + (if (nonzero? (-> obj root)) + (&+! (-> obj root) arg0) + ) + (the-as training-cam ((method-of-type process relocate) obj arg0)) + ) + +(defstate idle (training-cam) + :virtual #t + :code + (behavior () + (while #t + (when (and + *target* + (< (vector-vector-distance (target-pos 0) (-> self root trans)) (-> self range)) + (-> *setting-control* current play-hints) + (and + (< 0.0 (-> *setting-control* current dialog-volume)) + (let ((a0-3 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (or (not a0-3) (zero? (logand (-> a0-3 extra perm status) (entity-perm-status dead)))) + ) + ) + ) + (when (!= (-> self index) 6) + (while (and + *target* + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + (suspend) + ) + (set! (-> self state-time) (the-as uint (-> *display* base-frame-counter))) + (process-grab? *target*) + (process-entity-status! self (entity-perm-status bit-3) #t) + (until (not (or (-> *setting-control* current talking) (or + (-> *setting-control* current spooling) + (-> *setting-control* current hint) + (-> *setting-control* current ambient) + ) + ) + ) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (let* ((a0-15 *setting-control*) + (t9-6 (method-of-object a0-15 set-setting!)) + (a2-3 'movie) + (a3-1 (process->ppointer self)) + ) + (t9-6 a0-15 self a2-3 (the-as symbol a3-1) 0.0 0) + ) + (copy-settings-from-target! *setting-control*) + (dotimes (gp-1 2) + (while (or + (-> *setting-control* current talking) + (-> *setting-control* current spooling) + (-> *setting-control* current hint) + (-> *setting-control* current ambient) + *progress-process* + ) + (suspend) + ) + ) + (while (< (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) 300) + (suspend) + ) + (clear-pending-settings-from-process *setting-control* self 'movie) + (copy-settings-from-target! *setting-control*) + (suspend) + (suspend) + ) + (process-release? *target*) + ) + (when (-> *setting-control* current play-hints) + (let ((v1-61 (-> self index))) + (cond + ((zero? v1-61) + (level-hint-spawn + (game-text-id training-precursor-orbs) + "asstvb41" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-2 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-2 + (let ((t9-13 (method-of-type pov-camera activate))) + (t9-13 (the-as pov-camera gp-2) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-2 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "orbcam" + 0 + #f + '() + ) + (-> gp-2 ppointer) + ) + ) + ) + ((= v1-61 1) + (level-hint-spawn + (game-text-id training-power-cells) + "asstvb42" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-3 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-3 + (let ((t9-17 (method-of-type pov-camera activate))) + (t9-17 (the-as pov-camera gp-3) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-3 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "fuelcellcam" + 0 + #f + '() + ) + (-> gp-3 ppointer) + ) + ) + ) + ((= v1-61 2) + (level-hint-spawn + (game-text-id training-eco-blue) + "sagevb22" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-4 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-4 + (let ((t9-21 (method-of-type pov-camera activate))) + (t9-21 (the-as pov-camera gp-4) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-4 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "ecocam" + 0 + #f + '() + ) + (-> gp-4 ppointer) + ) + ) + ) + ((= v1-61 3) + (level-hint-spawn + (game-text-id training-precursor-door) + "sagevb24" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-5 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-5 + (let ((t9-25 (method-of-type pov-camera activate))) + (t9-25 (the-as pov-camera gp-5) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-5 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "precursordoorcam" + 0 + #f + '() + ) + (-> gp-5 ppointer) + ) + ) + ) + ((= v1-61 4) + (level-hint-spawn + (game-text-id training-blue-eco-vent) + "asstvb48" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-6 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-6 + (let ((t9-29 (method-of-type pov-camera activate))) + (t9-29 (the-as pov-camera gp-6) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-6 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "ecoventcam" + 0 + #f + '() + ) + (-> gp-6 ppointer) + ) + ) + ) + ((= v1-61 5) + (level-hint-spawn + (game-text-id training-eco-green) + "sagevb21" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-7 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-7 + (let ((t9-33 (method-of-type pov-camera activate))) + (t9-33 (the-as pov-camera gp-7) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-7 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "greenecocam" + 0 + #f + '() + ) + (-> gp-7 ppointer) + ) + ) + ) + ((= v1-61 6) + (when (not (task-complete? *game-info* (game-task training-climb))) + (clear-text-seen! *game-info* (game-text-id training-double-jump)) + (level-hint-spawn + (game-text-id training-double-jump) + "sagevb27" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-8 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-8) 9000) + (suspend) + ) + ) + (process-entity-status! self (entity-perm-status bit-3) #f) + (go-virtual idle) + ) + ) + ) + ) + (while (-> self child) + (suspend) + ) + ) + (let ((a0-61 (-> self entity))) + (if (when a0-61 + (let ((a0-62 (-> a0-61 extra perm task))) + (if a0-62 + (= a0-62 (game-task none)) + ) + ) + ) + (set! (-> self entity extra perm task) (game-task complete)) + ) + ) + (process-entity-status! self (entity-perm-status dead) #t) + (process-entity-status! self (entity-perm-status bit-3) #f) + (deactivate self) + ) + (suspend) + ) + (none) + ) + ) + +(defmethod init-from-entity! training-cam ((obj training-cam) (arg0 entity-actor)) + "Copy defaults from the entity." + (logior! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj root) (new 'process 'trsq)) + (set! (-> obj root trans quad) (-> arg0 extra trans quad)) + (quaternion-copy! (-> obj root quat) (-> arg0 quat)) + (vector-identity! (-> obj root scale)) + (set! (-> obj range) (res-lump-float arg0 'cam-notice-dist :default 81920.0)) + (set! (-> obj index) (res-lump-value arg0 'index int)) + (go (method-of-object obj idle)) + (none) + ) + +(deftype tra-pontoon (rigid-body-platform) + ((anchor-point vector :inline :offset-assert 736) + ) + :heap-base #x280 + :method-count-assert 35 + :size-assert #x2f0 + :flag-assert #x23028002f0 + ) + + +(defmethod init-from-entity! tra-pontoon ((obj tra-pontoon) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (TODO-RENAME-30 obj) + (process-drawable-from-entity! obj arg0) + (TODO-RENAME-31 obj) + (go (method-of-object obj rigid-body-platform-idle)) + 0 + (none) + ) + +(defmethod TODO-RENAME-23 tra-pontoon ((obj tra-pontoon) (arg0 float)) + ((the-as (function rigid-body-platform float none) (find-parent-method tra-pontoon 23)) obj arg0) + (TODO-RENAME-27 obj (-> obj anchor-point)) + 0 + (none) + ) + +(define *tra-pontoon-constants* (new 'static 'rigid-body-platform-constants + :drag-factor 4.0 + :buoyancy-factor 3.0 + :max-buoyancy-depth (meters 3.0) + :gravity-factor 1.0 + :gravity (meters 80.0) + :player-weight (meters 35.0) + :player-bonk-factor 1.0 + :player-dive-factor 1.0 + :player-force-distance (meters 1000.0) + :player-force-clamp (meters 1000000.0) + :player-force-timeout #x1e + :explosion-force (meters 1000.0) + :linear-damping 0.98 + :angular-damping 0.98 + :control-point-count 4 + :mass 2.0 + :inertial-tensor-x (meters 2.5) + :inertial-tensor-y (meters 2.0) + :inertial-tensor-z (meters 3.2) + :idle-distance (meters 50.0) + :platform #t + :sound-name "pontoonten" + ) + ) + +(defskelgroup *tra-pontoon-sg* pontoonfive + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +(defmethod TODO-RENAME-30 tra-pontoon ((obj tra-pontoon)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s5-0 1) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 3)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 18432.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-overlay) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-31 tra-pontoon ((obj tra-pontoon)) + (initialize-skeleton obj *tra-pontoon-sg* '()) + (TODO-RENAME-29 obj *tra-pontoon-constants*) + (set! (-> obj float-height-offset) 6144.0) + (set! (-> obj root-overlay nav-radius) 20480.0) + (let ((v1-6 (-> obj control-point-array data))) + (set! (-> v1-6 0 local-pos x) 9216.0) + (set! (-> v1-6 0 local-pos y) 0.0) + (set! (-> v1-6 0 local-pos z) 12083.2) + (set! (-> v1-6 0 local-pos w) 1.0) + ) + (let ((v1-8 (-> obj control-point-array data 1))) + (set! (-> v1-8 local-pos x) 9216.0) + (set! (-> v1-8 local-pos y) 0.0) + (set! (-> v1-8 local-pos z) -12083.2) + (set! (-> v1-8 local-pos w) 1.0) + ) + (let ((v1-10 (-> obj control-point-array data 2))) + (set! (-> v1-10 local-pos x) -9216.0) + (set! (-> v1-10 local-pos y) 0.0) + (set! (-> v1-10 local-pos z) -12083.2) + (set! (-> v1-10 local-pos w) 1.0) + ) + (let ((v1-12 (-> obj control-point-array data 3))) + (set! (-> v1-12 local-pos x) -9216.0) + (set! (-> v1-12 local-pos y) 0.0) + (set! (-> v1-12 local-pos z) 12083.2) + (set! (-> v1-12 local-pos w) 1.0) + ) + (set! (-> obj anchor-point quad) (-> obj root-overlay trans quad)) + (nav-mesh-connect obj (-> obj root-overlay) (the-as nav-control #f)) + 0 + (none) + ) + +(deftype tra-iris-door (eco-door) + () + :heap-base #xa0 + :method-count-assert 27 + :size-assert #x104 + :flag-assert #x1b00a00104 + ) + + +(defskelgroup *tra-iris-door-sg* jng-iris-door + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 8) + :longest-edge (meters 0) + ) + +(defmethod TODO-RENAME-24 tra-iris-door ((obj tra-iris-door)) + (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 16384.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-25 tra-iris-door ((obj tra-iris-door)) + (initialize-skeleton obj *tra-iris-door-sg* '()) + (set! (-> obj open-distance) 32768.0) + (set! (-> obj close-distance) 49152.0) + (dummy-47 (-> obj root-override)) + 0 + (none) + ) + +(set! (-> *part-group-id-table* 143) (new 'static 'sparticle-launch-group + :length 5 + :duration #xf + :linger-duration #x5dc + :name "group-scarecrow-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 5 + (sp-item 2912) + (sp-item 2913) + (sp-item 2914) + (sp-item 2915) + (sp-item 2916) + ) + :bounds (new 'static 'sphere :w 4096.0) + ) + ) + +(set! (-> *part-id-table* 2912) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 2.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (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 192.0 32.0 1.0) + (sp-rnd-flt spt-g 160.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 32.0 1.0) + (sp-rnd-flt spt-a 8.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.011904762)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-accel-y 2.7306666) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 420) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int-plain-rnd spt-next-time 30 59 1) + (sp-launcher-by-id spt-next-launcher 2917) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2917) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a -0.4) + (sp-int-plain-rnd spt-next-time 30 29 1) + (sp-launcher-by-id spt-next-launcher 2918) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2918) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.04) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2913) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters 2.5)) + (sp-rnd-flt spt-scale-x (meters 6.0) (meters 3.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.3) (meters 1.0) 1.0) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 2919) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2919) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -2.1333334) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2914) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 2.5) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-scale-x (meters 12.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 196.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 196.0) + (sp-flt spt-a 48.0) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2915) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :index #x6 :page #x2)) + (sp-rnd-flt spt-num 8.0 8.0 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (meters 2.5) (meters 1.5) 1.0) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.00048828125) 2457.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.3)) + (sp-flt spt-r 160.0) + (sp-flt spt-g 160.0) + (sp-flt spt-b 160.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.06666667) 1.0) + (sp-flt spt-rotvel-x (degrees 1.2)) + (sp-flt spt-rotvel-y (degrees 2.4)) + (sp-rnd-int-flt spt-rotvel-z (degrees 0.0) 2 436.90668) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2920) + (sp-rnd-flt spt-conerot-x (degrees 40.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2920) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-scalevel-x (meters -0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -3.4) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2916) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :index #x5 :page #x2)) + (sp-rnd-flt spt-num 8.0 8.0 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (meters 2.5) (meters 1.5) 1.0) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-int-flt spt-scale-x (meters 0.3) 1 4096.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.3)) + (sp-flt spt-r 100.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 100.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.06666667) 1.0) + (sp-flt spt-rotvel-x (degrees 1.2)) + (sp-flt spt-rotvel-y (degrees 2.4)) + (sp-rnd-int-flt spt-rotvel-z (degrees 0.0) 3 436.90668) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2920) + (sp-rnd-flt spt-conerot-x (degrees 40.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 144) (new 'static 'sparticle-launch-group + :length 1 + :duration #xf + :linger-duration #x5dc + :name "group-scarecrow-joint-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2912)) + :bounds (new 'static 'sphere :w 4096.0) + ) + ) + +(set! (-> *part-group-id-table* 145) (new 'static 'sparticle-launch-group + :length 1 + :duration #xf + :linger-duration #x5dc + :name "group-scarecrow-hit" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2913)) + :bounds (new 'static 'sphere :w 4096.0) + ) + ) + +(deftype scarecrow-a (process-drawable) + ((root-override collide-shape :offset 112) + (incomming-attack-id uint64 :offset-assert 176) + (intersection vector :inline :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xd0 + :flag-assert #x16006000d0 + (:methods + (idle () _type_ :state 20) + (hit (float vector symbol) _type_ :state 21) + ) + ) + + +(deftype scarecrow-b (process-drawable) + ((root-override collide-shape :offset 112) + (incomming-attack-id uint64 :offset-assert 176) + (intersection vector :inline :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xd0 + :flag-assert #x16006000d0 + (:methods + (idle () _type_ :state 20) + (hit (float vector symbol) _type_ :state 21) + ) + ) + + +(defskelgroup *scarecrow-a-sg* scarecrow-a + 0 + 5 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 2.5 0 3) + :longest-edge (meters 0) + ) + +(defskelgroup *scarecrow-a-break-sg* scarecrow-a + 0 + 5 + ((4 (meters 999999))) + :bounds (static-spherem 0 -15 0 50) + :longest-edge (meters 0) + ) + +(defstate idle (scarecrow-a) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'attack) + (let* ((s3-0 (-> arg3 param 2)) + (s4-0 (get-task-control (game-task training-gimmie))) + (v1-2 (get-reminder s4-0 0)) + ) + (when (!= s3-0 (-> self incomming-attack-id)) + (set! (-> self incomming-attack-id) s3-0) + (cond + ((= (-> self type) scarecrow-b) + ) + ((and (= (-> arg3 param 1) 'spin) (zero? v1-2)) + (save-reminder s4-0 1 0) + 1 + ) + ((and (= (-> arg3 param 1) 'punch) (= v1-2 1)) + (save-reminder s4-0 2 0) + 2 + ) + ((zero? v1-2) + ) + ((= v1-2 1) + ) + ) + (let* ((s4-1 arg0) + (v1-14 (if (and (nonzero? s4-1) (type-type? (-> s4-1 type) process-drawable)) + s4-1 + ) + ) + (f30-0 + (cond + (v1-14 + (let ((s4-2 (-> self root-override)) + (s2-0 (-> (the-as process-drawable v1-14) root trans)) + ) + (deg-diff (y-angle s4-2) (vector-y-angle (vector-! (new 'stack-no-clear 'vector) s2-0 (-> s4-2 trans)))) + ) + ) + (else + 0.0 + ) + ) + ) + (a0-24 ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint -1) + ) + ) + ) + (go-virtual + hit + f30-0 + (if a0-24 + (dummy-11 a0-24 (-> self intersection)) + (target-pos 0) + ) + (the-as symbol (and + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 2) + ) + (or + (= (-> self type) scarecrow-a) + (and + (= (-> arg0 type) target) + (logtest? (-> (the-as target arg0) control unknown-surface00 flags) 2048) + (zero? (logand (-> (the-as target arg0) control status) 1)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ((= v1-0 'touch) + (dummy-55 (-> self root-override) arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 0.7 6144.0 16384.0) + ) + ) + ) + ) + ) + :trans + (behavior () + (if (and *target* (>= 40960.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (get-reminder (get-task-control (game-task training-gimmie)) 0) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 36) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior scarecrow-a) ja-post) + ) + +(defstate hit (scarecrow-a) + :virtual #t + :code + (behavior ((arg0 float) (arg1 vector) (arg2 symbol)) + (when (not arg2) + (dummy-10 (-> self skel effect) 'group-scarecrow-hit 4.0 -1) + (ja-channel-push! 1 21) + (cond + ((< (fabs arg0) 8192.0) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((and (< 8192.0 arg0) (< arg0 24576.0)) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (else + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) (the float (+ (-> a0-10 frame-group data 0 length) -1))) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (go-virtual idle) + ) + (clear-collide-with-as (-> self root-override)) + (dummy-10 (-> self skel effect) 'group-scarecrow-joint-explode 12.0 -1) + (dummy-10 (-> self skel effect) 'group-scarecrow-joint-explode 20.0 -1) + (dummy-10 (-> self skel effect) 'group-scarecrow-explode 4.0 -1) + (sound-play-by-name (static-sound-name "break-dummy") (new-sound-id) 1024 0 0 1 #t) + (ja-channel-set! 0) + (let ((s5-2 (new 'stack 'joint-exploder-tuning 1))) + (set! (-> s5-2 duration) (the-as uint 450)) + (set! (-> s5-2 gravity) -327680.0) + (set! (-> s5-2 fountain-rand-transv-hi x) 32768.0) + (set! (-> s5-2 fountain-rand-transv-hi y) 81920.0) + (set! (-> s5-2 fountain-rand-transv-hi z) 20480.0) + (set! (-> s5-2 fountain-rand-transv-hi w) 49152.0) + (set! (-> s5-2 fountain-rand-transv-lo quad) (-> arg1 quad)) + (let ((gp-1 (get-process *default-dead-pool* joint-exploder #x4000))) + (when gp-1 + (let ((t9-21 (method-of-type joint-exploder activate))) + (t9-21 (the-as joint-exploder gp-1) self 'joint-exploder (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + joint-exploder-init-by-other + *scarecrow-a-break-sg* + 5 + s5-2 + (new 'static 'joint-exploder-static-params + :joints + (new + 'static + 'boxed-array + :type joint-exploder-static-joint-params :length 10 :allocated-length 10 + (new 'static 'joint-exploder-static-joint-params :joint-index 12) + (new 'static 'joint-exploder-static-joint-params :joint-index 10) + (new 'static 'joint-exploder-static-joint-params :joint-index 20) + (new 'static 'joint-exploder-static-joint-params :joint-index 4) + (new 'static 'joint-exploder-static-joint-params :joint-index 5) + (new 'static 'joint-exploder-static-joint-params :joint-index 11) + (new 'static 'joint-exploder-static-joint-params :joint-index 9) + (new 'static 'joint-exploder-static-joint-params :joint-index 7) + (new 'static 'joint-exploder-static-joint-params :joint-index 14) + (new 'static 'joint-exploder-static-joint-params :joint-index 13) + ) + ) + ) + (-> gp-1 ppointer) + ) + ) + ) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + (none) + ) + :post + (the-as (function none :behavior scarecrow-a) ja-post) + ) + +(defmethod init-from-entity! scarecrow-a ((obj scarecrow-a) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 10240.0 0.0 12288.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 1) + (set-vector! (-> s2-0 local-sphere) 0.0 7372.8 0.0 7372.8) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 1) + (set-vector! (-> s2-1 local-sphere) 0.0 12288.0 0.0 7372.8) + (append-prim s3-0 s2-1) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *scarecrow-a-sg* '()) + (go (method-of-object obj idle)) + (none) + ) + +(defskelgroup *scarecrow-b-sg* scarecrow-b + 0 + 5 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 3.5 0 3.8) + :longest-edge (meters 0) + ) + +(defskelgroup *scarecrow-b-break-sg* scarecrow-b + 0 + 5 + ((4 (meters 999999))) + :bounds (static-spherem 0 -15 0 50) + :longest-edge (meters 0) + ) + +(defstate idle (scarecrow-b) + :virtual #t + :event + (-> (method-of-type scarecrow-a idle) event) + :code + (behavior () + (ja-channel-push! 1 36) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior scarecrow-b) ja-post) + ) + +(defstate hit (scarecrow-b) + :virtual #t + :code + (behavior ((arg0 float) (arg1 vector) (arg2 symbol)) + (when (not arg2) + (dummy-10 (-> self skel effect) 'group-scarecrow-hit 4.0 -1) + (ja-channel-push! 1 21) + (cond + ((< (fabs arg0) 8192.0) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((and (< 8192.0 arg0) (< arg0 24576.0)) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (else + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) (the float (+ (-> a0-10 frame-group data 0 length) -1))) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (go-virtual idle) + ) + (clear-collide-with-as (-> self root-override)) + (dummy-10 (-> self skel effect) 'group-scarecrow-joint-explode 12.0 -1) + (dummy-10 (-> self skel effect) 'group-scarecrow-joint-explode 21.0 -1) + (dummy-10 (-> self skel effect) 'group-scarecrow-explode 4.0 -1) + (sound-play-by-name (static-sound-name "break-dummy") (new-sound-id) 1024 0 0 1 #t) + (ja-channel-set! 0) + (let ((s5-2 (new 'stack 'joint-exploder-tuning 1))) + (set! (-> s5-2 duration) (the-as uint 450)) + (set! (-> s5-2 fountain-rand-transv-hi x) 32768.0) + (set! (-> s5-2 fountain-rand-transv-hi y) 81920.0) + (set! (-> s5-2 fountain-rand-transv-hi z) 40960.0) + (set! (-> s5-2 fountain-rand-transv-hi w) 102400.0) + (set! (-> s5-2 fountain-rand-transv-lo quad) (-> arg1 quad)) + (let ((gp-1 (get-process *default-dead-pool* joint-exploder #x4000))) + (when gp-1 + (let ((t9-21 (method-of-type joint-exploder activate))) + (t9-21 (the-as joint-exploder gp-1) self 'joint-exploder (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + joint-exploder-init-by-other + *scarecrow-b-break-sg* + 5 + s5-2 + (new 'static 'joint-exploder-static-params + :joints + (new + 'static + 'boxed-array + :type joint-exploder-static-joint-params :length 14 :allocated-length 14 + (new 'static 'joint-exploder-static-joint-params :joint-index 12) + (new 'static 'joint-exploder-static-joint-params :joint-index 10) + (new 'static 'joint-exploder-static-joint-params :joint-index 21) + (new 'static 'joint-exploder-static-joint-params :joint-index 4) + (new 'static 'joint-exploder-static-joint-params :joint-index 5) + (new 'static 'joint-exploder-static-joint-params :joint-index 11) + (new 'static 'joint-exploder-static-joint-params :joint-index 9) + (new 'static 'joint-exploder-static-joint-params :joint-index 7) + (new 'static 'joint-exploder-static-joint-params :joint-index 14) + (new 'static 'joint-exploder-static-joint-params :joint-index 13) + (new 'static 'joint-exploder-static-joint-params :joint-index 14) + (new 'static 'joint-exploder-static-joint-params :joint-index 13) + (new 'static 'joint-exploder-static-joint-params :joint-index 16) + (new 'static 'joint-exploder-static-joint-params :joint-index 15) + ) + ) + ) + (-> gp-1 ppointer) + ) + ) + ) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + (none) + ) + :post + (the-as (function none :behavior scarecrow-b) ja-post) + ) + +(defmethod init-from-entity! scarecrow-b ((obj scarecrow-b) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 14336.0 0.0 15564.8) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set-vector! (-> s2-0 local-sphere) 0.0 4096.0 0.0 4096.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set-vector! (-> s2-1 local-sphere) 0.0 14745.6 0.0 6553.6) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 1) + (set-vector! (-> s2-2 local-sphere) 0.0 20480.0 0.0 6553.6) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *scarecrow-b-sg* '()) + (go (method-of-object obj idle)) + (none) + ) + + + + diff --git a/goal_src/levels/village1/village-obs-VI1.gc b/goal_src/levels/village1/village-obs-VI1.gc index 0e6cc00481..571c4d9bc1 100644 --- a/goal_src/levels/village1/village-obs-VI1.gc +++ b/goal_src/levels/village1/village-obs-VI1.gc @@ -1182,11 +1182,9 @@ (set! (-> v1-2 global-scale) 3072.0) (set! (-> v1-2 close-fade-dist) 163840.0) (set! (-> v1-2 far-fade-dist) 245760.0) - (let ((v0-2 ripple-for-villagea-water)) - (set! (-> v1-2 waveform) v0-2) - v0-2 - ) + (set! (-> v1-2 waveform) ripple-for-villagea-water) ) + (none) ) diff --git a/goal_src/levels/village2/village2-obs.gc b/goal_src/levels/village2/village2-obs.gc index 82c80cbbc7..8596bde523 100644 --- a/goal_src/levels/village2/village2-obs.gc +++ b/goal_src/levels/village2/village2-obs.gc @@ -1929,11 +1929,9 @@ (set! (-> v1-2 global-scale) 3072.0) (set! (-> v1-2 close-fade-dist) 163840.0) (set! (-> v1-2 far-fade-dist) 245760.0) - (let ((v0-2 ripple-for-villageb-water)) - (set! (-> v1-2 waveform) v0-2) - v0-2 - ) + (set! (-> v1-2 waveform) ripple-for-villageb-water) ) + (none) ) diff --git a/goal_src/levels/village_common/villagep-obs.gc b/goal_src/levels/village_common/villagep-obs.gc index 6b8cd8bb5e..57742df897 100644 --- a/goal_src/levels/village_common/villagep-obs.gc +++ b/goal_src/levels/village_common/villagep-obs.gc @@ -5,3 +5,1260 @@ ;; name in dgo: villagep-obs ;; dgos: CIT, L1, VI1, VI2, VI3, VILLAGEP +;; DECOMP BEGINS + +(deftype warpgate (process-hidden) + () + :method-count-assert 15 + :size-assert #x70 + :flag-assert #xf00000070 + ) + + +(defstate target-warp-in (target) + :event + target-generic-event-handler + :enter + (-> target-warp-out enter) + :exit + (-> target-warp-out exit) + :trans + (behavior () + (set! (-> self control transv x) + (- (-> self control unknown-vector103 x) (-> self control unknown-vector102 x)) + ) + (set! (-> self control transv z) + (- (-> self control unknown-vector103 z) (-> self control unknown-vector102 z)) + ) + (vector-xz-normalize! (-> self control transv) 49152.0) + (if (logtest? (-> self control status) 1) + (go target-hit-ground #f) + ) + (none) + ) + :code + (behavior ((arg0 vector) (arg1 vector)) + (clear-collide-with-as (-> self control)) + (ja-channel-set! 0) + (vector-reset! (-> self control transv)) + (TODO-RENAME-30 (-> self control) (-> self control unknown-vector102)) + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 300) + (suspend) + ) + ) + (let ((gp-1 (new-stack-vector0))) + (let ((f0-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))) + 0.0 + (vector-! gp-1 (-> self control transv) (vector-float*! gp-1 (-> self control dynam gravity-normal) f0-1)) + ) + (let* ((f0-2 (vector-length gp-1)) + (f1-1 f0-2) + (f2-3 + (- (sqrtf (* 8192.0 (-> self control dynam gravity-length))) + (* 0.008333334 (- (-> self control dynam gravity-length))) + ) + ) + ) + (vector+! + (-> self control transv) + (vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-3) + (vector-float*! gp-1 gp-1 (/ f0-2 f1-1)) + ) + ) + ) + (set-heading-vec! (-> self control) (-> self control transv)) + (rot->dir-targ! (-> self control)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self post-hook) target-no-stick-post) + (ja-channel-set! 1) + (send-event self 'do-effect 'death-warp-in -1.0) + (sound-play-by-name (static-sound-name "warpgate-tele") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 41))) + (set! (-> gp-3 param 0) (ja-aframe 50.0 0)) + (set! (-> gp-3 param 1) 1.0) + (set! (-> gp-3 frame-num) (ja-aframe 40.0 0)) + (joint-control-channel-group! gp-3 (the-as art-joint-anim (-> self draw art-group data 41)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-4 (-> self skel root-channel 0))) + (set! (-> gp-4 param 0) (ja-aframe 50.0 0)) + (set! (-> gp-4 param 1) 1.0) + (joint-control-channel-group-eval! gp-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (restore-collide-with-as (-> self control)) + (let ((gp-5 (-> self skel root-channel 0))) + (set! (-> gp-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 41))) + (set! (-> gp-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 41)) data 0 length) -1)) + ) + (set! (-> gp-5 param 1) 1.0) + (set! (-> gp-5 frame-num) (ja-aframe 50.0 0)) + (joint-control-channel-group! gp-5 (the-as art-joint-anim (-> self draw art-group data 41)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-26 (-> self skel root-channel 0))) + (set! (-> a0-26 param 0) (the float (+ (-> a0-26 frame-group data 0 length) -1))) + (set! (-> a0-26 param 1) 1.0) + (joint-control-channel-group-eval! a0-26 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (target-falling-anim -1 99) + (none) + ) + :post + target-no-move-post + ) + +(defstate idle (warp-gate) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('hide) + (go-virtual hidden) + ) + ) + ) + :code + (behavior () + (clear-pending-settings-from-process *setting-control* self 'allow-progress) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (when (and + (and *target* (>= 20480.0 (vector-vector-distance (-> self root trans) (-> *target* control trans)))) + (and + (>= (-> self level-slot) 0) + (not (movie?)) + (not (level-hint-displayed?)) + (zero? (logand (-> *target* control root-prim prim-core action) #x7380)) + (let* ((v1-16 (-> self root)) + (a1-2 (-> *target* control trans)) + (f0-1 (vector-y-angle (vector-! (new 'stack-no-clear 'vector) a1-2 (-> v1-16 trans)))) + ) + (or (!= (-> self level-slot) 3) (and (< f0-1 -9102.223) (< -32768.0 f0-1))) + ) + ) + ) + (hide-hud) + (level-hint-surpress!) + (kill-current-level-hint '() '(sidekick voicebox) 'exit) + (when (and + (hud-hidden?) + (can-grab-display? (the-as process-taskable self)) + (cond + ((or (= (-> *target* next-state name) 'target-warp-in) (= (-> *target* next-state name) 'target-warp-out)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + #f + ) + (else + #t + ) + ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + ) + (if (and (cpad-pressed? 0 circle) (process-grab? *target*)) + (go-virtual active) + ) + (if (and *cheat-mode* (cpad-pressed? 0 l3)) + (set! (-> self max-slot) 4) + ) + (let ((gp-0 + (new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning)) + ) + ) + (let ((v1-53 gp-0)) + (set! (-> v1-53 width) (the float 440)) + ) + (let ((v1-54 gp-0)) + (set! (-> v1-54 height) (the float 80)) + ) + (let ((v1-55 gp-0)) + (set! (-> v1-55 scale) 0.9) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning large)) + (print-game-text (lookup-text! *common-text* (game-text-id press-to-use) #f) gp-0 #f 128 22) + ) + ) + ) + (suspend) + ) + (none) + ) + ) + +(defun get-next-slot-up ((arg0 warp-gate) (arg1 int)) + (let ((v0-0 (+ arg1 1))) + (if (< (-> arg0 max-slot) v0-0) + (set! v0-0 (-> arg0 min-slot)) + ) + (if (= v0-0 (-> arg0 level-slot)) + (+! v0-0 1) + ) + (if (< (-> arg0 max-slot) v0-0) + (set! v0-0 (-> arg0 min-slot)) + ) + v0-0 + ) + ) + +(defun get-next-slot-down ((arg0 warp-gate) (arg1 int)) + (let ((v0-0 (+ arg1 -1))) + (if (< v0-0 (-> arg0 min-slot)) + (set! v0-0 (-> arg0 max-slot)) + ) + (if (= v0-0 (-> arg0 level-slot)) + (+! v0-0 -1) + ) + (if (< v0-0 (-> arg0 min-slot)) + (set! v0-0 (-> arg0 max-slot)) + ) + v0-0 + ) + ) + +(defun print-level-name ((arg0 int) (arg1 font-context) (arg2 int) (arg3 int)) + (let ((s5-0 (if arg3 + arg2 + (- arg2) + ) + ) + ) + (+! (-> arg1 origin x) (the float s5-0)) + (let ((f30-0 (- 1.0 (* 0.0033333334 (the float arg2))))) + (print-game-text-scaled + (lookup-text! *common-text* (the-as game-text-id (+ arg0 286)) #f) + f30-0 + arg1 + (the int (* 128.0 f30-0)) + ) + ) + (set! (-> arg1 origin x) (- (-> arg1 origin x) (the float s5-0))) + ) + (set! (-> arg1 color) (font-color default)) + arg1 + ) + +(defstate active (warp-gate) + :virtual #t + :enter + (behavior () + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (copy-settings-from-target! *setting-control*) + (sound-play-by-name (static-sound-name "start-options") (new-sound-id) 1024 0 0 1 #t) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :trans + (behavior () + (when (or + (and + (cpad-pressed? 0 triangle) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (process-release? *target*) + ) + (not *target*) + ) + (logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle)) + (logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle)) + (sound-play-by-name (static-sound-name "cursor-options") (new-sound-id) 1024 0 0 1 #t) + (go-virtual idle) + ) + (when *target* + (let* ((gp-1 (-> *target* control)) + (s4-0 (-> self root trans)) + (f0-0 + (deg-diff (y-angle gp-1) (vector-y-angle (vector-! (new 'stack-no-clear 'vector) s4-0 (-> gp-1 trans)))) + ) + ) + (if (!= f0-0 0.0) + (send-event + *target* + 'rotate-y-angle + (fmax (fmin f0-0 (* 65536.0 (-> *display* seconds-per-frame))) (* -65536.0 (-> *display* seconds-per-frame))) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (local-vars (sv-112 int) (sv-128 int) (sv-144 int)) + (let ((gp-0 (get-next-slot-up self (+ (-> self level-slot) -1)))) + 0 + (let ((s5-0 #f) + (s2-0 0) + (s4-0 #f) + (s3-0 gp-0) + ) + (while #t + (when (zero? s2-0) + (cond + ((cpad-pressed? 0 right) + (set! s5-0 #t) + (set! s4-0 #f) + (sound-play-by-name (static-sound-name "cursor-up-down") (new-sound-id) 1024 0 0 1 #t) + (set! s3-0 (get-next-slot-up self s3-0)) + ) + ((cpad-pressed? 0 left) + (set! s5-0 #t) + (set! s4-0 #t) + (sound-play-by-name (static-sound-name "cursor-up-down") (new-sound-id) 1024 0 0 1 #t) + (set! s3-0 (get-next-slot-down self s3-0)) + ) + ) + ) + (if s5-0 + (set! s2-0 (seekl s2-0 300 (the int (* 15.0 (-> *display* time-adjust-ratio))))) + ) + (when (>= s2-0 150) + (set! gp-0 s3-0) + (set! s5-0 #f) + (set! s2-0 0) + ) + (can-grab-display? (the-as process-taskable self)) + (hide-hud) + (let ((s1-2 (get-continue-by-name *game-info* (-> *warp-info* gp-0)))) + (lookup-level-info (-> s1-2 level)) + (when (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) 15) (cpad-pressed? 0 circle)) + (logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons circle)) + (logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons circle)) + (go-virtual use gp-0 (the-as level s1-2)) + ) + ) + (let ((s1-3 + (new 'stack 'font-context *font-default-matrix* 6 110 0.0 (font-color default) (font-flags shadow kerning)) + ) + ) + (let ((v1-38 s1-3)) + (set! (-> v1-38 scale) 0.7) + ) + (let ((v1-39 s1-3)) + (set! (-> v1-39 width) (the float 500)) + ) + (let ((v1-40 s1-3)) + (set! (-> v1-40 height) (the float 55)) + ) + (set! (-> s1-3 flags) (font-flags shadow kerning middle left large)) + (print-game-text (lookup-text! *common-text* (game-text-id warp-gate-use-dpad) #f) s1-3 #f 128 22) + (set! (-> s1-3 origin y) (+ 35.0 (-> s1-3 origin y))) + (let ((v1-43 s1-3)) + (set! (-> v1-43 height) (the float 40)) + ) + (let ((a0-34 s1-3)) + (set! (-> a0-34 color) (font-color lighter-lighter-blue)) + ) + 0 + (let ((s0-3 (get-next-slot-up self gp-0))) + (set! sv-112 (get-next-slot-down self gp-0)) + (set! sv-144 (get-next-slot-up self s0-3)) + (set! sv-128 (get-next-slot-down self sv-112)) + (cond + (s4-0 + (let ((a2-6 (- 300 (+ s2-0 150))) + (t9-20 print-level-name) + (a1-16 s1-3) + (a3-4 #f) + ) + (t9-20 sv-112 a1-16 a2-6 (the-as int a3-4)) + ) + (let ((a2-7 (+ s2-0 150))) + (cond + ((< a2-7 225) + (print-level-name s0-3 s1-3 a2-7 (the-as int #t)) + ) + (else + (let ((a2-8 (- 300 s2-0)) + (t9-22 print-level-name) + (a1-18 s1-3) + (a3-6 #f) + ) + (t9-22 sv-128 a1-18 a2-8 (the-as int a3-6)) + ) + ) + ) + ) + ) + (else + (let ((a2-9 (+ s2-0 150))) + (cond + ((< a2-9 225) + (print-level-name sv-112 s1-3 a2-9 (the-as int #f)) + ) + (else + (let ((a2-10 (- 300 s2-0)) + (t9-24 print-level-name) + (a1-20 s1-3) + (a3-8 #t) + ) + (t9-24 sv-144 a1-20 a2-10 (the-as int a3-8)) + ) + ) + ) + ) + (let ((a2-11 (- 300 (+ s2-0 150)))) + (print-level-name s0-3 s1-3 a2-11 (the-as int #t)) + ) + ) + ) + ) + (when (not s5-0) + (let ((a0-47 s1-3)) + (set! (-> a0-47 color) (font-color yellow-orange)) + ) + ) + (print-level-name gp-0 s1-3 s2-0 (the-as int s4-0)) + (set! (-> s1-3 origin y) (+ 20.0 (-> s1-3 origin y))) + (print-game-text (lookup-text! *common-text* (game-text-id press-to-warp) #f) s1-3 #f 128 22) + (set! (-> s1-3 origin y) (+ 15.0 (-> s1-3 origin y))) + (print-game-text (lookup-text! *common-text* (game-text-id press-to-exit) #f) s1-3 #f 128 22) + ) + (suspend) + ) + ) + ) + (none) + ) + ) + +(defstate hidden (warp-gate) + :virtual #t + :code + (the-as (function none :behavior warp-gate) anim-loop) + ) + +(defbehavior warp-gate-init-by-other warp-gate ((arg0 vector)) + (stack-size-set! (-> self main-thread) 512) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg0 quad)) + (logior! (-> self mask) (process-mask actor-pause)) + (set! (-> self level) (-> self entity extra level name)) + (set! (-> self min-slot) 0) + (let ((v1-11 (-> self level))) + (set! (-> self level-slot) (cond + ((= v1-11 'training) + 0 + ) + ((= v1-11 'village1) + 1 + ) + ((= v1-11 'village2) + 2 + ) + ((= v1-11 'village3) + 3 + ) + ((or (= v1-11 'citadel) (= v1-11 'lavatube)) + 4 + ) + (else + -1 + ) + ) + ) + ) + (set! (-> self max-slot) (cond + ((task-closed? (game-task village4-button) (task-status need-hint)) + 4 + ) + ((task-closed? (game-task village3-button) (task-status need-hint)) + 3 + ) + ((task-closed? (game-task village2-levitator) (task-status need-hint)) + 2 + ) + (else + 1 + ) + ) + ) + (go-virtual idle) + (none) + ) + +(deftype warp-gate-switch (basebutton) + ((warp handle :offset-assert 256) + ) + :heap-base #xa0 + :method-count-assert 33 + :size-assert #x108 + :flag-assert #x2100a00108 + (:methods + (pressable? (_type_) symbol 32) + ) + ) + + +(defskelgroup *warp-gate-switch-sg* warp-gate-switch + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 1.5) + :longest-edge (meters 0) + ) + +(defmethod TODO-RENAME-27 warp-gate-switch ((obj warp-gate-switch)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s5-0 1) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 1) 0))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 3)) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 12288.0) + (set-root-prim! s5-0 s4-0) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 12288.0) + (append-prim s4-0 s3-0) + ) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + s5-0 + ) + ) + +(defmethod pressable? warp-gate-switch ((obj warp-gate-switch)) + (let ((v1-2 (-> obj entity extra perm task))) + (cond + ((logtest? (-> *target* control root-prim prim-core action) #x7380) + #f + ) + ((= v1-2 (game-task training-door)) + (cond + ((and + (task-complete? *game-info* (game-task training-door)) + (task-complete? *game-info* (game-task training-gimmie)) + (task-complete? *game-info* (game-task training-climb)) + (task-complete? *game-info* (game-task training-buzzer)) + ) + #t + ) + (else + (level-hint-spawn + (game-text-id training-warp-gate-blocked) + "sagevb38" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + #f + ) + ) + ) + (else + #t + ) + ) + ) + ) + +(defmethod TODO-RENAME-26 warp-gate-switch ((obj warp-gate-switch)) + (set! (-> obj warp) (the-as handle #f)) + (let ((v1-2 (-> obj entity extra perm task))) + (cond + ((= v1-2 (game-task training-door)) + (set! (-> obj down?) + (the-as + symbol + (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + ) + ) + ) + (else + (if (or (= v1-2 (game-task none)) (task-closed? (-> obj entity extra perm task) (task-status need-hint))) + (set! (-> obj down?) #t) + ) + ) + ) + ) + (initialize-skeleton obj *warp-gate-switch-sg* '()) + (logior! (-> obj skel status) 1) + (ja-channel-set! 1) + (cond + ((-> obj down?) + (let ((s5-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-0 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> obj draw art-group data 2)) data 0 length) -1)) + ) + ) + ) + (else + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + ) + ) + (set! (-> obj anim-speed) 2.0) + (dummy-47 (-> obj root-override)) + (ja-post) + (none) + ) + +(defmethod press! warp-gate-switch ((obj warp-gate-switch) (arg0 symbol)) + (with-pp + (when arg0 + (let ((s4-0 (-> obj entity extra perm task))) + (when (nonzero? s4-0) + (close-specific-task! s4-0 (task-status need-hint)) + (when (= s4-0 (game-task village3-button)) + (let ((s4-1 (get-task-control s4-0))) + (when (zero? (get-reminder s4-1 2)) + (let ((s3-1 (max 1 (the int (-> *game-info* fuel))))) + (format #t "VILLAGE3 button saved ~D tasks~%" s3-1) + (save-reminder s4-1 s3-1 2) + ) + ) + ) + ) + ) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 0) + (set! (-> a1-5 message) 'start) + (let ((t9-5 send-event-function) + (v1-14 (-> obj notify-actor)) + ) + (t9-5 + (if v1-14 + (-> v1-14 extra process) + ) + a1-5 + ) + ) + ) + ) + (the-as int ((the-as (function basebutton symbol none) (find-parent-method warp-gate-switch 31)) + (the-as basebutton arg0) + arg0 + ) + ) + ) + ) + +(defstate basebutton-up-idle (warp-gate-switch) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (when (pressable? self) + (TODO-RENAME-29 self (-> self event-going-down) (-> self notify-actor)) + (go-virtual basebutton-going-down) + ) + ) + (('hide) + (send-event (handle->process (-> self warp)) arg2) + ) + (else + ((-> (method-of-type basebutton basebutton-up-idle) event) arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((t9-0 (-> (method-of-type basebutton basebutton-up-idle) enter))) + (if t9-0 + (t9-0) + ) + ) + (none) + ) + :trans + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'stop) + (let ((t9-0 send-event-function) + (v1-1 (-> self notify-actor)) + ) + (t9-0 + (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) + ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) #x4650) + (case (-> self entity extra perm task) + (((game-task training-door)) + (when (and + (task-complete? *game-info* (game-task training-door)) + (task-complete? *game-info* (game-task training-gimmie)) + (task-complete? *game-info* (game-task training-climb)) + (task-complete? *game-info* (game-task training-buzzer)) + ) + (level-hint-spawn + (game-text-id training-warp-gate-reminder) + "sagevb39" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (clear-text-seen! *game-info* (game-text-id training-warp-gate-reminder)) + ) + ) + (((game-task village2-levitator)) + (level-hint-spawn + (game-text-id village2-warp-gate-reminder) + "asstvb28" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (level-hint-spawn + (game-text-id village2-warp-gate-reminder-annoyed) + "asstvb29" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (level-hint-spawn + (game-text-id village2-warp-gate-reminder-very-annoyed) + "asstvb30" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (((game-task village3-button)) + (level-hint-spawn + (game-text-id village3-warp-gate-reminder) + "asstv103" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (level-hint-spawn + (game-text-id village3-warp-gate-reminder=annoyed) + "asstv104" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (level-hint-spawn + (game-text-id village3-warp-gate-reminder-very-annoyed) + "asstv105" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (let ((t9-13 (-> (method-of-type basebutton basebutton-up-idle) trans))) + (if t9-13 + (t9-13) + ) + ) + (none) + ) + ) + +(defstate basebutton-down-idle (warp-gate-switch) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('hide) + (send-event (handle->process (-> self warp)) arg2) + ) + (else + ((-> (method-of-type basebutton basebutton-down-idle) event) arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-0 (get-process *default-dead-pool* warp-gate #x4000))) + (set! (-> self warp) + (ppointer->handle (when gp-0 + (let ((t9-1 (method-of-type warp-gate activate))) + (t9-1 (the-as warp-gate gp-0) self 'warp-gate (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 warp-gate-init-by-other (-> self notify-actor extra trans)) + (-> gp-0 ppointer) + ) + ) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (let ((t9-4 (-> (method-of-type basebutton basebutton-down-idle) enter))) + (if t9-4 + (t9-4) + ) + ) + (none) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self warp)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((t9-1 (-> (method-of-type basebutton basebutton-down-idle) exit))) + (if t9-1 + (t9-1) + ) + ) + (none) + ) + :trans + (behavior () + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) #x4650) + (case (-> self entity extra perm task) + (((game-task training-door)) + (when (not (task-closed? (game-task beach-ecorocks) (task-status need-introduction))) + (level-hint-spawn + (game-text-id training-warp-gate-reminder) + "sagevb39" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (clear-text-seen! *game-info* (game-text-id training-warp-gate-reminder)) + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (let ((t9-3 (-> (method-of-type basebutton basebutton-down-idle) trans))) + (if t9-3 + (t9-3) + ) + ) + (none) + ) + ) + +(defstate basebutton-going-down (warp-gate-switch) + :virtual #t + :code + (behavior () + (sound-play-by-name (static-sound-name "warpgate-butt") (new-sound-id) 1024 0 0 1 #t) + (sound-play-by-name (static-sound-name "warpgate-act") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-2 (entity-actor-count (-> self entity) 'trigger-actor))) + (dotimes (s5-2 gp-2) + (let ((s4-0 (entity-actor-lookup (-> self entity) 'trigger-actor s5-2)) + (a1-4 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'trigger) + (let ((t9-6 send-event-function) + (v1-3 s4-0) + ) + (when (not (t9-6 + (if v1-3 + (-> v1-3 extra process) + ) + a1-4 + ) + ) + (entity-birth-no-kill s4-0) + (suspend) + (send-event + (if s4-0 + (-> s4-0 extra process) + ) + 'trigger + ) + ) + ) + ) + ) + ) + (let ((t9-10 (-> (the-as (state basebutton) (find-parent-method warp-gate-switch 21)) code))) + (if t9-10 + ((the-as (function none :behavior basebutton) t9-10)) + ) + ) + (none) + ) + ) + +(defskelgroup *village-cam-sg* village-cam + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 80) + :longest-edge (meters 0) + ) + +(deftype village-cam (process) + ((root-override trsq :offset-assert 112) + (range meters :offset-assert 116) + (index int32 :offset-assert 120) + (state-time uint64 :offset-assert 128) + ) + :heap-base #x20 + :method-count-assert 15 + :size-assert #x88 + :flag-assert #xf00200088 + (:methods + (idle () _type_ :state 14) + ) + ) + + +(defmethod relocate village-cam ((obj village-cam) (arg0 int)) + (if (nonzero? (-> obj root-override)) + (&+! (-> obj root-override) arg0) + ) + (the-as village-cam ((method-of-type process relocate) obj arg0)) + ) + +(defstate idle (village-cam) + :virtual #t + :code + (behavior () + (local-vars (v1-18 symbol)) + (while #t + (let ((v1-5 + (and + (and + *target* + (>= (-> self range) (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + (and + (-> *setting-control* current play-hints) + (< 0.0 (-> *setting-control* current dialog-volume)) + (let ((v1-10 (-> self index))) + (cond + ((zero? v1-10) + (and + (>= (-> *game-info* fuel) 20.0) + (not (task-closed? (game-task firecanyon-assistant) (task-status need-reward-speech))) + ) + ) + ((= v1-10 2) + (not (task-closed? (game-task village2-levitator) (task-status need-hint))) + ) + ((= v1-10 3) + (not (task-closed? (game-task village3-button) (task-status need-hint))) + ) + (else + #t + ) + ) + ) + ) + ) + ) + ) + (when v1-5 + (case (-> self index) + ((2 3) + (until v1-18 + (suspend) + (set! v1-18 + (or + (not *target*) + (< (-> self range) (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + ) + (let* ((v1-23 (-> self index)) + (v1-24 (cond + ((= v1-23 2) + (not (task-closed? (game-task village2-levitator) (task-status need-hint))) + ) + ((= v1-23 3) + (not (task-closed? (game-task village3-button) (task-status need-hint))) + ) + ) + ) + ) + (when (not v1-24) + (process-entity-status! self (entity-perm-status bit-3) #f) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + ) + ) + ) + ) + (while (and + *target* + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + (suspend) + ) + (set! (-> self state-time) (the-as uint (-> *display* base-frame-counter))) + (process-grab? *target*) + (process-entity-status! self (entity-perm-status bit-3) #t) + (kill-current-level-hint '(ambient) '() 'exit) + (until (not (or (-> *setting-control* current talking) (or + (-> *setting-control* current spooling) + (-> *setting-control* current hint) + (-> *setting-control* current ambient) + (not *target*) + (logtest? (-> *target* state-flags) #x8008) + ) + ) + ) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (let* ((a0-25 *setting-control*) + (t9-14 (method-of-object a0-25 set-setting!)) + (a2-5 'movie) + (a3-1 (process->ppointer self)) + ) + (t9-14 a0-25 self a2-5 (the-as symbol a3-1) 0.0 0) + ) + (copy-settings-from-target! *setting-control*) + (while (or + (-> *setting-control* current talking) + (-> *setting-control* current spooling) + (-> *setting-control* current hint) + (!= (-> *level* loading-level) (-> *level* level-default)) + (not *target*) + (logtest? (-> *target* state-flags) #x8008) + *progress-process* + ) + (suspend) + ) + (while (< (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) 300) + (suspend) + ) + (kill-current-level-hint '() '() 'die) + (suspend) + (kill-current-level-hint '() '() 'die) + (process-release? *target*) + (clear-pending-settings-from-process *setting-control* self 'movie) + (copy-settings-from-target! *setting-control*) + (suspend) + (suspend) + ) + (let ((v1-79 (-> self index))) + (cond + ((zero? v1-79) + (let ((gp-0 (-> self entity extra perm))) + (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) + (let ((v1-84 (-> gp-0 user-uint8 0))) + (cond + ((zero? v1-84) + (level-hint-spawn + (game-text-id firecanyon-collect-cells-collected) + "asstvb04" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((s5-0 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-0 + (let ((t9-23 (method-of-type pov-camera activate))) + (t9-23 (the-as pov-camera s5-0) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> self entity extra trans) + *village-cam-sg* + "firecanyon-cam" + 0 + #f + '((0 want-force-vis village1 #t) + (0 alive "money-2669") + (0 alive "money-2670") + (0 alive "money-2671") + (0 alive "money-2672") + (0 alive "money-2673") + (0 alive "money-2674") + (0 alive "money-2675") + (0 alive "money-2677") + (0 alive "money-2678") + ) + ) + (-> s5-0 ppointer) + ) + ) + ) + ((= v1-84 1) + (level-hint-spawn + (game-text-id firecanyon-collect-cells-collected-reminder) + "asstvb08" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((s5-1 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-1 + (let ((t9-27 (method-of-type pov-camera activate))) + (t9-27 (the-as pov-camera s5-1) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-1 + pov-camera-init-by-other + (-> self entity extra trans) + *village-cam-sg* + "firecanyon-alt-cam" + 0 + #f + '((0 want-force-vis village1 #t) + (0 alive "money-2669") + (0 alive "money-2670") + (0 alive "money-2671") + (0 alive "money-2672") + (0 alive "money-2673") + (0 alive "money-2674") + (0 alive "money-2675") + (0 alive "money-2677") + (0 alive "money-2678") + ) + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + ) + (set! (-> gp-0 user-int8 0) (seekl (the-as int (-> gp-0 user-uint8 0)) 255 1)) + ) + ) + ((= v1-79 1) + ) + ((= v1-79 2) + (when (not (task-closed? (game-task village2-levitator) (task-status need-hint))) + (level-hint-spawn + (game-text-id village2-warp-gate-reminder-annoyed) + "asstvb29" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-1 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-1 + (let ((t9-33 (method-of-type pov-camera activate))) + (t9-33 (the-as pov-camera gp-1) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + pov-camera-init-by-other + (-> self entity extra trans) + *village-cam-sg* + "vi2-button-cam" + 0 + #f + '() + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + ((= v1-79 3) + (when (not (task-closed? (game-task village3-button) (task-status need-hint))) + (level-hint-spawn + (game-text-id village2-warp-gate-reminder-very-annoyed) + "asstvb30" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-2 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-2 + (let ((t9-38 (method-of-type pov-camera activate))) + (t9-38 (the-as pov-camera gp-2) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-2 + pov-camera-init-by-other + (-> self entity extra trans) + *village-cam-sg* + "vi3-button-cam" + 0 + #f + '() + ) + (-> gp-2 ppointer) + ) + ) + ) + ) + ) + ) + (while (-> self child) + (suspend) + ) + (let ((a0-66 (-> self entity))) + (if (when a0-66 + (let ((a0-67 (-> a0-66 extra perm task))) + (if a0-67 + (= a0-67 (game-task none)) + ) + ) + ) + (set! (-> self entity extra perm task) (game-task complete)) + ) + ) + (when (zero? (-> self index)) + (let ((a0-70 (-> self entity extra perm))) + (when (= (-> a0-70 user-uint8 0) 1) + (clear-pending-settings-from-process *setting-control* self 'allow-progress) + (let ((gp-3 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-3) #x15f90) + (suspend) + ) + ) + (go-virtual idle) + ) + ) + ) + (process-entity-status! self (entity-perm-status bit-3) #f) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + ) + ) + (suspend) + ) + (none) + ) + ) + +(defmethod init-from-entity! village-cam ((obj village-cam) (arg0 entity-actor)) + "Copy defaults from the entity." + (logior! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj root-override) (new 'process 'trsq)) + (set! (-> obj root-override trans quad) (-> arg0 extra trans quad)) + (quaternion-copy! (-> obj root-override quat) (-> arg0 quat)) + (vector-identity! (-> obj root-override scale)) + (set! (-> obj range) (res-lump-float arg0 'cam-notice-dist :default 81920.0)) + (set! (-> obj index) (res-lump-value arg0 'index int)) + (go (method-of-object obj idle)) + (none) + ) + + + + diff --git a/test/decompiler/reference/engine/game/generic-obs_REF.gc b/test/decompiler/reference/engine/game/generic-obs_REF.gc index e04f6935a9..c5be1082da 100644 --- a/test/decompiler/reference/engine/game/generic-obs_REF.gc +++ b/test/decompiler/reference/engine/game/generic-obs_REF.gc @@ -912,11 +912,9 @@ ((type-type? (-> gp-0 type) process-drawable) (when (zero? (logand (-> (the-as process-drawable gp-0) skel status) 4)) (let ((s5-0 pp)) - (let ((s6-1 gp-0)) - ) + (set! pp gp-0) (let ((v0-1 (the-as object (ja-done? 0)))) - (let ((s6-2 s5-0)) - ) + (set! pp s5-0) v0-1 ) ) diff --git a/test/decompiler/reference/engine/geometry/vol_REF.gc b/test/decompiler/reference/engine/geometry/vol_REF.gc index a88ca0541c..e1c8992617 100644 --- a/test/decompiler/reference/engine/geometry/vol_REF.gc +++ b/test/decompiler/reference/engine/geometry/vol_REF.gc @@ -223,8 +223,7 @@ (when (and (and *display-vol-marks* (logtest? (-> a0-1 flags) 1)) (logtest? (-> obj flags) 2)) (when (zero? (-> obj debug-point)) (let ((s5-0 pp)) - (let ((s6-1 (-> obj process))) - ) + (set! pp (-> obj process)) (let ((s4-0 0)) (dotimes (v1-8 (-> obj pos-vol-count)) (+! s4-0 (-> obj pos-vol v1-8 num-planes)) @@ -235,8 +234,7 @@ (set! (-> obj debug-point) (new 'debug 'vector-array (* 10 s4-0))) (set! (-> obj debug-normal) (new 'debug 'vector-array (* 10 s4-0))) ) - (let ((s6-2 s5-0)) - ) + (set! pp s5-0) ) (set! (-> obj debug-point length) 0) (set! (-> obj debug-normal length) 0) @@ -273,7 +271,3 @@ ) #f ) - - - - diff --git a/test/decompiler/reference/engine/gfx/water/water-h_REF.gc b/test/decompiler/reference/engine/gfx/water/water-h_REF.gc index e8e2c6d448..d4c530cba4 100644 --- a/test/decompiler/reference/engine/gfx/water/water-h_REF.gc +++ b/test/decompiler/reference/engine/gfx/water/water-h_REF.gc @@ -137,7 +137,7 @@ (:methods (water-vol-idle () _type_ :state 20) (water-vol-startup () _type_ :state 21) - (TODO-RENAME-22 (_type_) ripple-wave-set 22) + (TODO-RENAME-22 (_type_) none 22) (reset-root! (_type_) none 23) (set-stack-size! (_type_) none 24) (TODO-RENAME-25 (_type_) object 25) diff --git a/test/decompiler/reference/engine/gfx/water/water_REF.gc b/test/decompiler/reference/engine/gfx/water/water_REF.gc index 09c84cec75..f393e2829a 100644 --- a/test/decompiler/reference/engine/gfx/water/water_REF.gc +++ b/test/decompiler/reference/engine/gfx/water/water_REF.gc @@ -1661,9 +1661,10 @@ ) ;; definition for method 22 of type water-vol -;; INFO: Return type mismatch int vs ripple-wave-set. +;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-22 water-vol ((obj water-vol)) - (the-as ripple-wave-set 0) + 0 + (none) ) ;; definition for function water-vol-init-by-other diff --git a/test/decompiler/reference/engine/load/loader_REF.gc b/test/decompiler/reference/engine/load/loader_REF.gc index 473f3644b8..b8776110fa 100644 --- a/test/decompiler/reference/engine/load/loader_REF.gc +++ b/test/decompiler/reference/engine/load/loader_REF.gc @@ -103,12 +103,12 @@ ;; definition for function drawable-load (defun drawable-load ((arg0 drawable) (arg1 kheap)) - (local-vars (sp-0 none)) + (local-vars (sp-0 pointer)) (cond ((type-type? (-> arg0 type) string) - sp-0 + (the-as none sp-0) (if (< (the-as uint sp-0) (the-as uint *stack-top*)) - (&+ *kernel-sp* -1024) + (set! sp-0 (&+ *kernel-sp* -1024)) ) (let ((s5-1 (the-as drawable (loado (the-as string arg0) arg1)))) (if (and s5-1 (type-type? (-> s5-1 type) drawable)) @@ -124,10 +124,10 @@ ;; definition for function art-load (defun art-load ((arg0 string) (arg1 kheap)) - (local-vars (sp-0 none)) - sp-0 + (local-vars (sp-0 pointer)) + (the-as none sp-0) (if (< (the-as uint sp-0) (the-as uint *stack-top*)) - (&+ *kernel-sp* -1024) + (set! sp-0 (&+ *kernel-sp* -1024)) ) (let ((s5-0 (loado arg0 arg1))) (if (type-type? (-> (the-as art s5-0) type) art) @@ -139,11 +139,11 @@ ;; definition for function art-group-load-check (defun art-group-load-check ((arg0 string) (arg1 kheap) (arg2 int)) - (local-vars (sp-0 none)) + (local-vars (sp-0 pointer)) (when *debug-segment* - sp-0 + (the-as none sp-0) (if (< (the-as uint sp-0) (the-as uint *stack-top*)) - (&+ *kernel-sp* -1024) + (set! sp-0 (&+ *kernel-sp* -1024)) ) (let ((s3-1 (the-as art-group (loado (make-file-name (file-kind art-group) arg0 arg2 #f) arg1)))) (cond diff --git a/test/decompiler/reference/engine/target/target-death_REF.gc b/test/decompiler/reference/engine/target/target-death_REF.gc index 3af009ae26..aa1c983dd7 100644 --- a/test/decompiler/reference/engine/target/target-death_REF.gc +++ b/test/decompiler/reference/engine/target/target-death_REF.gc @@ -443,10 +443,8 @@ (set-continue! *game-info* "lavatube-end") ) ) + (go target-warp-in s5-6 (-> arg0 trans)) ) - enter-state - (-> arg0 trans) - (go target-warp-in) ) (else (let ((s5-7 (-> *display* base-frame-counter))) diff --git a/test/decompiler/reference/engine/target/target-h_REF.gc b/test/decompiler/reference/engine/target/target-h_REF.gc index 965d86cde5..72a3802d5d 100644 --- a/test/decompiler/reference/engine/target/target-h_REF.gc +++ b/test/decompiler/reference/engine/target/target-h_REF.gc @@ -54,7 +54,7 @@ (target-racing-hit handle attack-info) (target-racing-jump float float symbol) target-title - target-warp-in + (target-warp-in vector vector) ) ) diff --git a/test/decompiler/reference/kernel/gkernel_REF.gc b/test/decompiler/reference/kernel/gkernel_REF.gc index a7b42bbc81..4c229f906e 100644 --- a/test/decompiler/reference/kernel/gkernel_REF.gc +++ b/test/decompiler/reference/kernel/gkernel_REF.gc @@ -1383,7 +1383,8 @@ (entity-deactivate-handler obj (-> obj entity)) ) (let ((s5-0 pp)) - (let ((s4-0 (-> obj stack-frame-top))) + (set! pp obj) + (let ((s4-0 (-> pp stack-frame-top))) (while (the-as protect-frame s4-0) (case (-> s4-0 type) ((protect-frame state) @@ -1393,8 +1394,7 @@ (set! s4-0 (-> (the-as protect-frame s4-0) next)) ) ) - (let ((s6-2 s5-0)) - ) + (set! pp s5-0) ) (process-disconnect obj) (let ((v1-11 (-> obj child))) diff --git a/test/decompiler/reference/kernel/gstate_REF.gc b/test/decompiler/reference/kernel/gstate_REF.gc index a6fc03287b..7a63251a2e 100644 --- a/test/decompiler/reference/kernel/gstate_REF.gc +++ b/test/decompiler/reference/kernel/gstate_REF.gc @@ -47,7 +47,7 @@ ;; WARN: Unsupported inline assembly instruction kind - [jr t9] ;; WARN: Unsupported inline assembly instruction kind - [sw v0, 0(sp)] (defun enter-state ((arg0 object) (arg1 object) (arg2 object) (arg3 object) (arg4 object) (arg5 object)) - (local-vars (s7-0 none) (sp-0 none) (sp-1 int) (ra-0 int) (sv-0 none)) + (local-vars (s7-0 none) (sp-0 int) (ra-0 int) (sv-0 none)) (with-pp (logclear! (-> pp mask) (process-mask sleep sleep-code)) (logior! (-> pp mask) (process-mask going)) @@ -99,7 +99,7 @@ ) ) (let ((v1-28 (-> pp main-thread))) - (.lwu sp-1 28 v1-28) + (.lwu sp-0 28 v1-28) ) (let ((t9-6 (-> s0-2 code))) (.lw ra-0 return-from-thread-dead s7-0) @@ -113,7 +113,7 @@ (set-to-run (-> pp main-thread) enter-state arg0 arg1 arg2 arg3 arg4 arg5) (when (!= (-> pp top-thread name) 'post) (let ((v0-2 (the-as object return-from-thread))) - (.sw (the-as (function none) v0-2) 0 sp-0) + (.sw (the-as (function none) v0-2) 0 (the-as none sp-0)) v0-2 ) ) @@ -127,11 +127,9 @@ (with-pp (when (and arg0 (!= (-> arg0 type) process-tree) (-> (the-as process arg0) event-hook)) (let ((gp-0 pp)) - (let ((s6-1 (the-as process arg0))) - ) + (set! pp (the-as process arg0)) (let ((v0-0 ((-> (the-as process arg0) event-hook) (-> arg1 from) (-> arg1 num-params) (-> arg1 message) arg1))) - (let ((s6-2 gp-0)) - ) + (set! pp gp-0) v0-0 ) ) diff --git a/test/decompiler/reference/levels/common/battlecontroller_REF.gc b/test/decompiler/reference/levels/common/battlecontroller_REF.gc index 06947e5343..625efbeb6c 100644 --- a/test/decompiler/reference/levels/common/battlecontroller_REF.gc +++ b/test/decompiler/reference/levels/common/battlecontroller_REF.gc @@ -711,11 +711,9 @@ battlecontroller-default-event-handler (defmethod deactivate battlecontroller ((obj battlecontroller)) (with-pp (let ((gp-0 pp)) - (let ((s6-1 obj)) - ) + (set! pp obj) (battlecontroller-off) - (let ((s6-2 gp-0)) - ) + (set! pp gp-0) ) ((the-as (function process-drawable none) (find-parent-method battlecontroller 10)) obj) 0 diff --git a/test/decompiler/reference/levels/common/dark-eco-pool_REF.gc b/test/decompiler/reference/levels/common/dark-eco-pool_REF.gc index 05f0bf17c8..0df6e01687 100644 --- a/test/decompiler/reference/levels/common/dark-eco-pool_REF.gc +++ b/test/decompiler/reference/levels/common/dark-eco-pool_REF.gc @@ -126,8 +126,8 @@ ) ;; definition for method 22 of type dark-eco-pool +;; INFO: Return type mismatch ripple-wave-set vs none. (defmethod TODO-RENAME-22 dark-eco-pool ((obj dark-eco-pool)) - (local-vars (v0-3 ripple-wave-set)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) (t9-0 obj) ) @@ -140,27 +140,20 @@ (set! (-> gp-0 query) (new 'process 'ripple-merc-query 100)) (case (-> obj look) ((32) - (set! v0-3 ripple-for-misty-dark-eco-pool) - (set! (-> gp-0 waveform) v0-3) - v0-3 + (set! (-> gp-0 waveform) ripple-for-misty-dark-eco-pool) ) ((15 16 17 18 19 20) - (set! v0-3 ripple-for-maincave-dark-eco-pool) - (set! (-> gp-0 waveform) v0-3) - v0-3 + (set! (-> gp-0 waveform) ripple-for-maincave-dark-eco-pool) ) ((40) - (set! v0-3 ripple-for-sunken-dark-eco-helix-room) - (set! (-> gp-0 waveform) v0-3) - v0-3 + (set! (-> gp-0 waveform) ripple-for-sunken-dark-eco-helix-room) ) ((41) - (set! v0-3 ripple-for-finalboss-dark-eco-pool) - (set! (-> gp-0 waveform) v0-3) - v0-3 + (set! (-> gp-0 waveform) ripple-for-finalboss-dark-eco-pool) ) ) ) + (none) ) ;; failed to figure out what this is: diff --git a/test/decompiler/reference/levels/common/water-anim_REF.gc b/test/decompiler/reference/levels/common/water-anim_REF.gc index d62402f363..c96d49cbe5 100644 --- a/test/decompiler/reference/levels/common/water-anim_REF.gc +++ b/test/decompiler/reference/levels/common/water-anim_REF.gc @@ -998,7 +998,6 @@ ) ;; definition for method 22 of type water-anim -;; INFO: Return type mismatch none vs ripple-wave-set. (defmethod TODO-RENAME-22 water-anim ((obj water-anim)) (let ((s5-0 (-> obj look))) (if (or (< s5-0 0) (>= s5-0 (-> *water-anim-look* length))) @@ -1035,5 +1034,6 @@ ) ) ) - (the-as ripple-wave-set (ja-post)) + (ja-post) + (none) ) diff --git a/test/decompiler/reference/levels/jungle/jungle-obs_REF.gc b/test/decompiler/reference/levels/jungle/jungle-obs_REF.gc index 3c218b3a75..76910a0ce4 100644 --- a/test/decompiler/reference/levels/jungle/jungle-obs_REF.gc +++ b/test/decompiler/reference/levels/jungle/jungle-obs_REF.gc @@ -1647,6 +1647,7 @@ ) ;; definition for method 22 of type jungle-water +;; INFO: Return type mismatch ripple-wave-set vs none. (defmethod TODO-RENAME-22 jungle-water ((obj jungle-water)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) (t9-0 obj) @@ -1657,9 +1658,7 @@ (set! (-> v1-2 global-scale) 3072.0) (set! (-> v1-2 close-fade-dist) 163840.0) (set! (-> v1-2 far-fade-dist) 245760.0) - (let ((v0-2 ripple-for-jungle-water)) - (set! (-> v1-2 waveform) v0-2) - v0-2 - ) + (set! (-> v1-2 waveform) ripple-for-jungle-water) ) + (none) ) diff --git a/test/decompiler/reference/levels/lavatube/lavatube-obs_REF.gc b/test/decompiler/reference/levels/lavatube/lavatube-obs_REF.gc new file mode 100644 index 0000000000..e75808fc39 --- /dev/null +++ b/test/decompiler/reference/levels/lavatube/lavatube-obs_REF.gc @@ -0,0 +1,1995 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type lavabase +(deftype lavabase (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + +;; definition for method 3 of type lavabase +(defmethod inspect lavabase ((obj lavabase)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *lavabase-sg* lavabase + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 22) + :longest-edge (meters 9.4) + ) + +;; failed to figure out what this is: +(defstate lavabase-idle (lavabase) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavabase) ja-post) + ) + +;; definition for method 11 of type lavabase +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! lavabase ((obj lavabase) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavabase-sg* '()) + (go lavabase-idle) + (none) + ) + +;; definition of type lavafall +(deftype lavafall (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + +;; definition for method 3 of type lavafall +(defmethod inspect lavafall ((obj lavafall)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *lavafall-sg* lavafall + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 10 0 13) + :longest-edge (meters 5.4) + ) + +;; failed to figure out what this is: +(defstate lavafall-idle (lavafall) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavafall) ja-post) + ) + +;; definition for method 11 of type lavafall +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! lavafall ((obj lavafall) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavafall-sg* '()) + (go lavafall-idle) + (none) + ) + +;; definition of type lavashortcut +(deftype lavashortcut (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + +;; definition for method 3 of type lavashortcut +(defmethod inspect lavashortcut ((obj lavashortcut)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *lavashortcut-sg* lavashortcut + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 -34 0 105) + :longest-edge (meters 11.9) + ) + +;; failed to figure out what this is: +(defstate lavashortcut-idle (lavashortcut) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavashortcut) ja-post) + ) + +;; definition for method 11 of type lavashortcut +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! lavashortcut ((obj lavashortcut) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavashortcut-sg* '()) + (go lavashortcut-idle) + (none) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 540) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-darkecobarrel-hit" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1932 :period 15 :length 5)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1932) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters 4.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-rnd-flt spt-scale-x (meters 4.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.14222223) + (sp-rnd-flt spt-accel-y -0.34133333 -0.34133333 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 541) + (new 'static 'sparticle-launch-group + :length 69 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-darkecobarrel-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 69 + (sp-item 2125 :period 600 :length 5) + (sp-item 2126 :period 600 :length 40) + (sp-item 2127 :period 600 :length 20) + (sp-item 2128 :period 600 :length 20) + (sp-item 2166 :fade-after (meters 100.0) :period 600 :length 20 :binding 296) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + (sp-item 296 :flags (start-dead launch-asap) :binding 297) + (sp-item 297 :fade-after (meters 80.0) :falloff-to (meters 100.0) :flags (start-dead)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2166) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-flt spt-scale-x (meters 0.1)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-flt spt-accel-y -1.3653333) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 240) + (sp-cpuinfo-flags bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2126) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 8.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 96.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.21333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 89 1) + (sp-launcher-by-id spt-next-launcher 2129) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2129) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.0666667) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2128) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 6.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 0.4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 16.0)) + (sp-rnd-flt spt-r 64.0 192.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.04)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2125) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 32.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 192.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2127) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-x (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -4096.0 8192.0 1.0) + (sp-rnd-flt spt-scale-x (meters 4.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 96.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 32.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 6.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition of type darkecobarrel-leak +(deftype darkecobarrel-leak (structure) + ((offset vector :inline :offset-assert 0) + (first-frame basic :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x14 + :flag-assert #x900000014 + ) + +;; definition for method 3 of type darkecobarrel-leak +(defmethod inspect darkecobarrel-leak ((obj darkecobarrel-leak)) + (format #t "[~8x] ~A~%" obj 'darkecobarrel-leak) + (format #t "~Toffset: #~%" (-> obj offset)) + (format #t "~Tfirst-frame: ~A~%" (-> obj first-frame)) + obj + ) + +;; definition of type darkecobarrel-base +(deftype darkecobarrel-base (process-drawable) + ((root-override collide-shape-moving :offset 112) + (speed float :offset-assert 176) + (sync uint64 :offset-assert 184) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xc0 + :flag-assert #x14005000c0 + ) + +;; definition for method 3 of type darkecobarrel-base +(defmethod inspect darkecobarrel-base ((obj darkecobarrel-base)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tspeed: ~f~%" (-> obj speed)) + (format #t "~T~Tsync: ~D~%" (-> obj sync)) + obj + ) + +;; definition of type darkecobarrel-mover +(deftype darkecobarrel-mover (darkecobarrel-base) + ((start-time uint64 :offset-assert 192) + (hits int32 :offset-assert 200) + (leak darkecobarrel-leak 1 :inline :offset-assert 208) + (y-offset bouncing-float :inline :offset-assert 240) + (y-offset-tgt delayed-rand-float :inline :offset-assert 280) + (down oscillating-vector :inline :offset-assert 320) + (down-tgt delayed-rand-vector :inline :offset-assert 384) + ) + :heap-base #x140 + :method-count-assert 20 + :size-assert #x1b0 + :flag-assert #x14014001b0 + ) + +;; definition for method 3 of type darkecobarrel-mover +(defmethod inspect darkecobarrel-mover ((obj darkecobarrel-mover)) + (let ((t9-0 (method-of-type darkecobarrel-base inspect))) + (t9-0 obj) + ) + (format #t "~T~Tstart-time: ~D~%" (-> obj start-time)) + (format #t "~T~Thits: ~D~%" (-> obj hits)) + (format #t "~T~Tleak[1] @ #x~X~%" (-> obj leak)) + (format #t "~T~Ty-offset: #~%" (-> obj y-offset)) + (format #t "~T~Ty-offset-tgt: #~%" (-> obj y-offset-tgt)) + (format #t "~T~Tdown: #~%" (-> obj down)) + (format #t "~T~Tdown-tgt: #~%" (-> obj down-tgt)) + obj + ) + +;; definition of type darkecobarrel +(deftype darkecobarrel (darkecobarrel-base) + ((self-override darkecobarrel :offset 28) + (spawn-array (array int64) :offset-assert 192) + (cur-spawn int32 :offset-assert 196) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xc8 + :flag-assert #x14006000c8 + ) + +;; definition for method 3 of type darkecobarrel +(defmethod inspect darkecobarrel ((obj darkecobarrel)) + (let ((t9-0 (method-of-type darkecobarrel-base inspect))) + (t9-0 obj) + ) + (format #t "~T~Tspawn-array: ~A~%" (-> obj spawn-array)) + (format #t "~T~Tcur-spawn: ~D~%" (-> obj cur-spawn)) + obj + ) + +;; definition for method 7 of type darkecobarrel +;; INFO: Return type mismatch darkecobarrel-base vs darkecobarrel. +(defmethod relocate darkecobarrel ((obj darkecobarrel) (arg0 int)) + (if (nonzero? (-> obj spawn-array)) + (&+! (-> obj spawn-array) arg0) + ) + (the-as + darkecobarrel + ((the-as (function darkecobarrel-base int darkecobarrel-base) (find-parent-method darkecobarrel 7)) obj arg0) + ) + ) + +;; failed to figure out what this is: +(defskelgroup *darkecobarrel-sg* darkecobarrel + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 -7.75 0 8.6) + :longest-edge (meters 2.8) + ) + +;; definition for function darkecobarrel-base-time +(defbehavior darkecobarrel-base-time darkecobarrel-base () + (+ (-> *display* base-frame-counter) (-> self sync)) + ) + +;; definition for function darkecobarrel-base-pos +(defbehavior darkecobarrel-base-pos darkecobarrel-base ((arg0 int)) + (if (< 0.0 (-> self speed)) + (* (-> self speed) (the float (- (darkecobarrel-base-time) arg0))) + (+ 1.0 (* (-> self speed) (the float (- (darkecobarrel-base-time) arg0)))) + ) + ) + +;; definition for function darkecobarrel-base-done? +(defbehavior darkecobarrel-base-done? darkecobarrel-base ((arg0 float)) + (or (and (< 0.0 (-> self speed)) (< 1.0 arg0)) (and (< (-> self speed) 0.0) (< arg0 0.0))) + ) + +;; definition for function darkecobarrel-base-init +(defbehavior darkecobarrel-base-init darkecobarrel-base ((arg0 res-lump)) + (process-drawable-from-entity! self (the-as entity-actor arg0)) + (initialize-skeleton self *darkecobarrel-sg* '()) + (set! (-> self path) (new 'process 'path-control self 'path 0.0)) + (let ((v0-3 (logior (-> self path flags) (path-control-flag display draw-line draw-point draw-text)))) + (set! (-> self path flags) v0-3) + v0-3 + ) + ) + +;; definition for function darkecobarrel-mover-pos +;; INFO: Return type mismatch uint vs none. +;; Used lq/sq +(defbehavior darkecobarrel-mover-pos darkecobarrel-mover () + (let ((f30-0 (darkecobarrel-base-pos (the-as int (-> self start-time))))) + (if (darkecobarrel-base-done? f30-0) + (deactivate self) + ) + (eval-path-curve! (-> self path) (-> self root-override trans) f30-0 'interp) + (+! (-> self root-override trans y) (* 4096.0 (-> self y-offset osc value))) + (set! (-> self root-override trans y) (+ -4096.0 (-> self root-override trans y))) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'matrix)) + ) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (TODO-RENAME-14 (-> self path) s5-0 f30-0) + (set! (-> s4-0 quad) (-> self down value quad)) + (set! (-> s4-0 y) -1.0) + (vector-normalize! s4-0 1.0) + (forward-down-nopitch->inv-matrix gp-0 s5-0 s4-0) + ) + (matrix->quaternion (-> self root-override quat) gp-0) + (dotimes (s5-1 (-> self hits)) + (when (-> self leak s5-1 first-frame) + (set! (-> self leak s5-1 first-frame) #f) + (let ((s4-1 (new 'stack-no-clear 'matrix))) + (matrix-transpose! s4-1 gp-0) + (vector-matrix*! (the-as vector (-> self leak s5-1)) (the-as vector (-> self leak s5-1)) s4-1) + ) + ) + (let ((s4-2 (new 'stack-no-clear 'vector))) + (vector-matrix*! s4-2 (the-as vector (-> self leak s5-1)) gp-0) + (vector+! s4-2 s4-2 (-> self root-override trans)) + (spawn (-> self part) s4-2) + ) + ) + ) + ) + (if (< (vector-vector-xz-distance-squared (-> self root-override trans) (camera-pos)) 1073741800.0) + (logior! (-> self draw status) (draw-status drwf05)) + (set! (-> self draw status) (the-as draw-status (logclear (-> self draw status) (draw-status drwf05)))) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate darkecobarrel-mover-die (darkecobarrel-mover) + :code + (behavior () + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (sound-play-by-name (static-sound-name "dcrate-break") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (set! (-> gp-1 quad) (-> self root-override trans quad)) + (set! (-> gp-1 y) (+ -49152.0 (-> gp-1 y))) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 part-tracker-init (-> *part-group-id-table* 541) 600 #f #f #f gp-1) + (-> s5-1 ppointer) + ) + ) + ) + (suspend) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (suspend) + ) + (dummy-18 self) + (deactivate self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate darkecobarrel-mover-move (darkecobarrel-mover) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (cond + ((= arg0 *target*) + (let ((s5-0 (-> arg3 param 0))) + (if (and + s5-0 + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry s5-0) + (-> self root-override) + (the-as uint 1) + ) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'attack-invinc) + (set! (-> a1-2 param 0) s5-0) + (let ((a0-4 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-4 mode) 'death) + (set! (-> a1-2 param 1) (the-as uint a0-4)) + ) + (send-event-function arg0 a1-2) + ) + ) + (go darkecobarrel-mover-die) + ) + ) + ) + ((>= arg1 2) + (case (-> arg3 param 1) + (('eco-yellow) + (+! (-> self hits) 1) + (cond + ((>= (-> self hits) 2) + (go darkecobarrel-mover-die) + ) + (else + (let ((v1-17 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) + arg0 + ) + ) + (gp-1 (new 'stack-no-clear 'vector)) + ) + (set! (-> self leak (+ (-> self hits) -1) first-frame) #t) + (cond + (v1-17 + (vector-! gp-1 (-> (the-as process-drawable v1-17) root trans) (-> self root-override trans)) + (set! (-> self leak (+ (-> self hits) -1) offset quad) (-> gp-1 quad)) + (vector-normalize! gp-1 -0.04) + (let ((v0-0 (the-as object (-> self down vel)))) + (set! (-> (the-as vector v0-0) quad) (-> gp-1 quad)) + v0-0 + ) + ) + (else + (set! (-> self leak (+ (-> self hits) -1) offset quad) (-> self root-override trans quad)) + (let ((f0-1 (+ -49152.0 (-> self leak (+ (-> self hits) -1) offset y)))) + (set! (-> self leak (+ (-> self hits) -1) offset y) f0-1) + f0-1 + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :trans + (behavior () + (update! (-> self y-offset) 0.0) + (if (and (at-min? (-> self y-offset)) (< (-> self y-offset osc vel) 0.03)) + (set! (-> self y-offset osc vel) (fabs (update! (-> self y-offset-tgt)))) + ) + (update! (-> self down) (update-with-delay! (-> self down-tgt))) + (darkecobarrel-mover-pos) + (none) + ) + :code + (behavior () + (let* ((f30-0 0.9) + (f28-0 0.25) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + ) + (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2)))) + ) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 num-func) num-func-identity) + (let* ((v1-8 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-9 (the-as number (logior #x3f800000 v1-8))) + ) + (set! (-> gp-0 frame-num) (* (+ -1.0 (the-as float v1-9)) (the float (ja-num-frames 0)))) + ) + ) + (while #t + (let ((v1-14 (-> self skel root-channel 0))) + (set! (-> v1-14 num-func) num-func-identity) + (set! (-> v1-14 frame-num) 0.0) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior darkecobarrel-mover) pusher-post) + ) + +;; definition for function darkecobarrel-mover-init-by-other +;; INFO: Return type mismatch object vs none. +(defbehavior darkecobarrel-mover-init-by-other darkecobarrel-mover ((arg0 res-lump) (arg1 float) (arg2 uint) (arg3 uint)) + (let ((s2-0 (new 'process 'collide-shape-moving self (collide-list-enum usually-hit-by-player)))) + (set! (-> s2-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s2-0 reaction) default-collision-reaction) + (set! (-> s2-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s1-0 (new 'process 'collide-shape-prim-group s2-0 (the-as uint 2) 0))) + (set! (-> s1-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s1-0 collide-with) (the-as uint 16)) + (set! (-> s1-0 prim-core action) (the-as uint 1)) + (set! (-> s1-0 transform-index) 3) + (set-vector! (-> s1-0 local-sphere) 0.0 -32768.0 0.0 32768.0) + (set-root-prim! s2-0 s1-0) + (let ((s0-0 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 0) (the-as uint 1)))) + (set! (-> s0-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s0-0 collide-with) (the-as uint 16)) + (set! (-> s0-0 prim-core action) (the-as uint 1)) + (set! (-> s0-0 prim-core offense) 4) + (set! (-> s0-0 transform-index) 3) + (set-vector! (-> s0-0 local-sphere) 0.0 -32768.0 0.0 32768.0) + (append-prim s1-0 s0-0) + ) + (let ((s0-1 (new 'process 'collide-shape-prim-mesh s2-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> s0-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s0-1 collide-with) (the-as uint 16)) + (set! (-> s0-1 prim-core action) (the-as uint 1)) + (set! (-> s0-1 prim-core offense) 4) + (set! (-> s0-1 transform-index) 3) + (set-vector! (-> s0-1 local-sphere) 0.0 -32768.0 0.0 32768.0) + (append-prim s1-0 s0-1) + ) + ) + (set! (-> s2-0 nav-radius) (* 0.75 (-> s2-0 root-prim local-sphere w))) + (backup-collide-with-as s2-0) + (set! (-> self root-override) s2-0) + ) + (darkecobarrel-base-init arg0) + (set! (-> self part) (create-launch-control (-> *part-group-id-table* 540) self)) + (set! (-> self speed) arg1) + (set! (-> self start-time) arg2) + (set! (-> self sync) arg3) + (set! (-> self hits) 0) + (set-params! (-> self y-offset-tgt) 300 900 0.5) + (set-params! (-> self y-offset) 0.0 1.0 0.0 0.7 0.08 0.1 0.97) + (set-params! (-> self down) (the-as vector #f) 0.005 0.05 0.999) + (set-params! (-> self down-tgt) 300 600 0.05 0.9) + (darkecobarrel-mover-pos) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self mask) (logior (process-mask attackable) (-> self mask))) + (go darkecobarrel-mover-move) + (none) + ) + +;; definition for function darkecobarrel-advance-curspawn +;; INFO: Return type mismatch int vs none. +(defbehavior darkecobarrel-advance-curspawn darkecobarrel () + (+! (-> self cur-spawn) 1) + (when (>= (-> self cur-spawn) (-> self spawn-array length)) + (set! (-> self self-override cur-spawn) 0) + 0 + ) + (none) + ) + +;; definition for function darkecobarrel-cycle-time +(defbehavior darkecobarrel-cycle-time darkecobarrel () + (-> self spawn-array (+ (-> self spawn-array length) -1)) + ) + +;; failed to figure out what this is: +(defstate darkecobarrel-spawner (darkecobarrel) + :trans + (behavior () + (let ((gp-1 (mod (darkecobarrel-base-time) (darkecobarrel-cycle-time)))) + (if (and (> (-> self cur-spawn) 0) (< gp-1 (-> self spawn-array (+ (-> self cur-spawn) -1)))) + (+! gp-1 (darkecobarrel-cycle-time)) + ) + (let ((gp-2 (- gp-1 (-> self spawn-array (-> self cur-spawn))))) + (when (>= gp-2 0) + (let ((s5-0 (get-process *default-dead-pool* darkecobarrel-mover #x4000))) + (when s5-0 + (let ((t9-4 (method-of-type darkecobarrel-mover activate))) + (t9-4 (the-as darkecobarrel-mover s5-0) self 'darkecobarrel-mover (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + darkecobarrel-mover-init-by-other + (-> self entity) + (-> self speed) + (- (darkecobarrel-base-time) gp-2) + (-> self sync) + ) + (-> s5-0 ppointer) + ) + ) + (darkecobarrel-advance-curspawn) + ) + ) + ) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + ) + +;; definition for method 11 of type darkecobarrel +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! darkecobarrel ((obj darkecobarrel) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (set! (-> obj root-override) (the-as collide-shape-moving (new 'process 'trsqv))) + (darkecobarrel-base-init arg0) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "lav-dark-eco") + :volume #x400 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) + (logior! (-> obj draw status) (draw-status drwf01)) + (set! (-> obj speed) (/ 300.0 (res-lump-float (-> obj entity) 'speed :default 61440.0))) + (set! sv-16 (new 'static 'res-tag)) + (let ((s5-1 (res-lump-data arg0 'delay pointer :tag-ptr (& sv-16)))) + (cond + (s5-1 + (set! (-> obj spawn-array) + (the-as (array int64) (new 'process 'boxed-array time-frame (the-as int (-> sv-16 elt-count)))) + ) + (dotimes (v1-12 (the-as int (-> sv-16 elt-count))) + (set! (-> obj spawn-array v1-12) + (the int (* (fabs (-> obj speed)) (-> (the-as (pointer float) (&+ s5-1 (* v1-12 4)))))) + ) + ) + ) + (else + (set! (-> obj spawn-array) (the-as (array int64) (new 'process 'boxed-array time-frame 4))) + (set! (-> obj spawn-array 0) (the int (* 45056.0 (fabs (-> obj speed))))) + (set! (-> obj spawn-array 1) (the int (* 90112.0 (fabs (-> obj speed))))) + (set! (-> obj spawn-array 2) (the int (* 45056.0 (fabs (-> obj speed))))) + (set! (-> obj spawn-array 3) (the int (* 135168.0 (fabs (-> obj speed))))) + ) + ) + ) + (dotimes (v1-19 (+ (-> obj spawn-array length) -1)) + (+! (-> obj spawn-array (+ v1-19 1)) (-> obj spawn-array v1-19)) + ) + (set! (-> obj sync) (the-as uint (the int (* (fabs (-> obj speed)) (res-lump-float (-> obj entity) 'sync))))) + (set! (-> obj speed) (/ 1.0 (* (-> obj speed) (path-distance (-> obj path))))) + (let ((s5-3 (mod (darkecobarrel-base-time) (darkecobarrel-cycle-time)))) + (set! (-> obj cur-spawn) 0) + (while (>= s5-3 (-> obj spawn-array (-> obj cur-spawn))) + (darkecobarrel-advance-curspawn) + ) + (+! (-> obj cur-spawn) -1) + (when (< (-> obj cur-spawn) 0) + (set! (-> obj cur-spawn) (+ (-> obj spawn-array length) -1)) + (+! s5-3 (-> obj spawn-array (-> obj cur-spawn))) + ) + (let ((s4-0 (-> obj cur-spawn)) + (s5-4 (- (darkecobarrel-base-time) (- s5-3 (-> obj spawn-array (-> obj cur-spawn))))) + ) + (until (darkecobarrel-base-done? (darkecobarrel-base-pos s5-4)) + (let ((s3-0 (get-process *default-dead-pool* darkecobarrel-mover #x4000))) + (when s3-0 + (let ((t9-14 (method-of-type darkecobarrel-mover activate))) + (t9-14 (the-as darkecobarrel-mover s3-0) obj 'darkecobarrel-mover (the-as pointer #x70004000)) + ) + (run-now-in-process s3-0 darkecobarrel-mover-init-by-other (-> obj entity) (-> obj speed) s5-4 (-> obj sync)) + (-> s3-0 ppointer) + ) + ) + (set! s5-4 (- s5-4 (-> obj spawn-array s4-0))) + (+! s4-0 -1) + (if (< s4-0 0) + (set! s4-0 (+ (-> obj spawn-array length) -1)) + (+! s5-4 (-> obj spawn-array s4-0)) + ) + ) + ) + ) + (darkecobarrel-advance-curspawn) + (go darkecobarrel-spawner) + (none) + ) + +;; definition of type lavafallsewera +(deftype lavafallsewera (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + +;; definition for method 3 of type lavafallsewera +(defmethod inspect lavafallsewera ((obj lavafallsewera)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *lavafallsewera-sg* lavafallsewera + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem -15 0 -5 185) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate lavafallsewera-idle (lavafallsewera) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavafallsewera) ja-post) + ) + +;; definition for method 11 of type lavafallsewera +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! lavafallsewera ((obj lavafallsewera) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavafallsewera-sg* '()) + (go lavafallsewera-idle) + (none) + ) + +;; definition of type lavafallsewerb +(deftype lavafallsewerb (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + +;; definition for method 3 of type lavafallsewerb +(defmethod inspect lavafallsewerb ((obj lavafallsewerb)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *lavafallsewerb-sg* lavafallsewerb + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 120) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate lavafallsewerb-idle (lavafallsewerb) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavafallsewerb) ja-post) + ) + +;; definition for method 11 of type lavafallsewerb +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! lavafallsewerb ((obj lavafallsewerb) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavafallsewerb-sg* '()) + (go lavafallsewerb-idle) + (none) + ) + +;; definition of type chainmine +(deftype chainmine (process-drawable) + ((root-override collide-shape-moving :offset 112) + ) + :heap-base #x40 + :method-count-assert 22 + :size-assert #xb0 + :flag-assert #x16004000b0 + (:methods + (die () _type_ :state 20) + (idle () _type_ :state 21) + ) + ) + +;; definition for method 3 of type chainmine +(defmethod inspect chainmine ((obj chainmine)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 542) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-chainmine-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 2132 :period 600 :length 5) + (sp-item 2133 :period 600 :length 40) + (sp-item 2134 :period 600 :length 20) + (sp-item 2135 :period 600 :length 20) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2133) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 8.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.4) (meters 0.8) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.053333335) (meters 0.21333334) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -2.1333334) + (sp-flt spt-fade-b -1.4222223) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 89 1) + (sp-launcher-by-id spt-next-launcher 2136) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2136) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (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 -1.0666667) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2135) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 6.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 0.4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 16.0)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.04)) + (sp-flt spt-fade-g -3.2666667) + (sp-flt spt-fade-b -1.0666667) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2132) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 32.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-rnd-flt spt-g 192.0 32.0 1.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2134) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-scale-x (meters 4.0) (meters 2.0) 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-rnd-flt spt-g 128.0 64.0 1.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.08) (meters 0.04) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y 0.68266666 0.68266666 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit14) + (sp-int spt-next-time 42) + (sp-launcher-by-id spt-next-launcher 2137) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 2.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2137) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 6 + (sp-flt spt-fade-r -1.0666667) + (sp-flt spt-fade-g -1.0666667) + (sp-flt spt-fade-b -2.1166666) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 2138) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2138) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-flt spt-fade-r -0.5688889) + (sp-flt spt-fade-g -0.28444445) + (sp-flt spt-fade-b 0.0) + (sp-flt spt-fade-a -0.21333334) + (sp-int spt-next-time 225) + (sp-launcher-by-id spt-next-launcher 2139) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2139) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-r 0.0) + (sp-flt spt-fade-g 0.0) + (sp-flt spt-fade-b 0.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(defskelgroup *chainmine-sg* chainmine + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 -10.75 0 12.75) + :longest-edge (meters 2.4) + ) + +;; failed to figure out what this is: +(defstate die (chainmine) + :virtual #t + :code + (behavior () + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (sound-play-by-name (static-sound-name "dcrate-break") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (set! (-> gp-1 quad) (-> self root-override trans quad)) + (set! (-> gp-1 y) (+ -73728.0 (-> gp-1 y))) + (let ((s5-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 (the-as part-tracker s5-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 part-tracker-init (-> *part-group-id-table* 542) 600 #f #f #f gp-1) + (-> s5-1 ppointer) + ) + ) + ) + (suspend) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (suspend) + ) + (dummy-18 self) + (deactivate self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (chainmine) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack 'touch) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 2) + (set! (-> a1-3 message) 'attack) + (set! (-> a1-3 param 0) (-> arg3 param 0)) + (let ((a2-2 (new 'static 'attack-info :mask #x20))) + (set! (-> a2-2 mode) 'deadly) + (set! (-> a1-3 param 1) (the-as uint a2-2)) + ) + (send-event-function arg0 a1-3) + ) + (go-virtual die) + ) + ) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior chainmine) ja-post) + ) + +;; definition for method 11 of type chainmine +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! chainmine ((obj chainmine) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask attackable) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 -73728.0 0.0 18432.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *chainmine-sg* '()) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "lava-mine-chain") + :volume #x400 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *lavaballoon-sg* lavaballoon + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0.8 0 3.8) + :longest-edge (meters 0) + ) + +;; definition of type lavaballoon +(deftype lavaballoon (process-drawable) + ((root-override collide-shape :offset 112) + (move-per-tick float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xb4 + :flag-assert #x16005000b4 + (:methods + (idle () _type_ :state 20) + (die () _type_ :state 21) + ) + ) + +;; definition for method 3 of type lavaballoon +(defmethod inspect lavaballoon ((obj lavaballoon)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tmove-per-tick: ~f~%" (-> obj move-per-tick)) + obj + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 543) + (new 'static 'sparticle-launch-group + :length 3 + :duration #x5 + :linger-duration #x5dc + :name "group-lavaballoon" + :launcher + (new 'static 'inline-array sparticle-group-item 3 (sp-item 1987) (sp-item 1988) (sp-item 1989)) + :bounds (new 'static 'sphere :w 61440.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1988) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-x (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -4096.0 8192.0 1.0) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 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 96.0) + (sp-flt spt-g 96.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.42666668) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1989) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-flt spt-y (meters 2.0)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.0) 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 96.0) + (sp-flt spt-g 96.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.04) (meters 0.08) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-friction 0.98) + (sp-int spt-timer 75) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 1.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1987) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 2.0)) + (sp-flt spt-scale-x (meters 12.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 100.0 28.0 1.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 80.0) + (sp-flt spt-a 96.0) + (sp-flt spt-fade-a -0.08) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(defstate die (lavaballoon) + :virtual #t + :code + (behavior () + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (sound-play-by-name (static-sound-name "cool-balloon") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 (the-as part-tracker gp-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 543) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-1 ppointer) + ) + ) + (suspend) + (dummy-18 self) + (deactivate self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (lavaballoon) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (send-event arg0 'heat -10.0) + (go-virtual die) + ) + ) + ) + :trans + (behavior () + (when (zero? (logand (-> self path flags) (path-control-flag not-found))) + (let ((f0-4 (* 0.5 (+ 1.0 (sin (* (-> self move-per-tick) (the float (-> *display* base-frame-counter)))))))) + (eval-path-curve! (-> self path) (-> self root-override trans) f0-4 'interp) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavaballoon) transform-post) + ) + +;; definition for method 11 of type lavaballoon +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! lavaballoon ((obj lavaballoon) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 8192.0 0.0 8192.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavaballoon-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 543) obj)) + (set! (-> obj root-override pause-adjust-distance) 122880.0) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (when (zero? (logand (-> obj path flags) (path-control-flag not-found))) + (let ((f30-0 (res-lump-float (-> obj entity) 'speed :default 12288.0))) + (set! (-> obj move-per-tick) (* 32768.0 (/ 1.0 (* 300.0 (path-distance (-> obj path)))) f30-0)) + ) + ) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type lavatube-lava +(deftype lavatube-lava (water-anim) + () + :heap-base #x70 + :method-count-assert 30 + :size-assert #xdc + :flag-assert #x1e007000dc + ) + +;; definition for method 3 of type lavatube-lava +(defmethod inspect lavatube-lava ((obj lavatube-lava)) + (let ((t9-0 (method-of-type water-anim inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for symbol ripple-for-lavatube-lava, type ripple-wave-set +(define ripple-for-lavatube-lava (new 'static 'ripple-wave-set + :count 2 + :converted #f + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 2 :speed 3.0) + (new 'static 'ripple-wave :scale 40.0 :xdiv -2 :zdiv 2 :speed 1.8) + (new 'static 'ripple-wave) + (new 'static 'ripple-wave) + ) + ) + ) + +;; failed to figure out what this is: +(defstate water-vol-idle (lavatube-lava) + :virtual #t + :post + (behavior () + (let ((t9-0 (-> (method-of-type water-anim water-vol-idle) post))) + (if t9-0 + ((the-as (function none :behavior lavatube-lava) t9-0)) + ) + ) + (ja-post) + (none) + ) + ) + +;; definition for method 22 of type lavatube-lava +;; INFO: Return type mismatch symbol vs none. +(defmethod TODO-RENAME-22 lavatube-lava ((obj lavatube-lava)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (let ((v1-2 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) v1-2) + (set! (-> v1-2 global-scale) 2048.0) + (set! (-> v1-2 waveform) ripple-for-lavatube-lava) + ) + (set! (-> obj flags) (logand -8388609 (-> obj flags))) + (set! (-> obj flags) (logior #x2000000 (-> obj flags))) + (set! (-> obj attack-event) 'heat) + (none) + ) + +;; definition of type lavayellowtarp +(deftype lavayellowtarp (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + ) + +;; definition for method 3 of type lavayellowtarp +(defmethod inspect lavayellowtarp ((obj lavayellowtarp)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *lavayellowtarp-sg* lavayellowtarp + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate lavayellowtarp-idle (lavayellowtarp) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior lavayellowtarp) ja-post) + ) + +;; definition for method 11 of type lavayellowtarp +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! lavayellowtarp ((obj lavayellowtarp) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lavayellowtarp-sg* '()) + (go lavayellowtarp-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/misty/mud_REF.gc b/test/decompiler/reference/levels/misty/mud_REF.gc index 466dc5d007..5a2a103313 100644 --- a/test/decompiler/reference/levels/misty/mud_REF.gc +++ b/test/decompiler/reference/levels/misty/mud_REF.gc @@ -49,6 +49,7 @@ ) ;; definition for method 22 of type mud +;; INFO: Return type mismatch ripple-wave-set vs none. (defmethod TODO-RENAME-22 mud ((obj mud)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) (t9-0 obj) @@ -73,11 +74,9 @@ ) (case (-> obj look) ((22 25 24 27 26 31) - (let ((v0-3 ripple-for-small-mud)) - (set! (-> gp-0 waveform) v0-3) - v0-3 - ) + (set! (-> gp-0 waveform) ripple-for-small-mud) ) ) ) + (none) ) diff --git a/test/decompiler/reference/levels/ogre/ogre-obs_REF.gc b/test/decompiler/reference/levels/ogre/ogre-obs_REF.gc index 94bb9630fc..4fb1dc233b 100644 --- a/test/decompiler/reference/levels/ogre/ogre-obs_REF.gc +++ b/test/decompiler/reference/levels/ogre/ogre-obs_REF.gc @@ -1734,7 +1734,7 @@ ) ;; definition for method 22 of type ogre-lava -;; INFO: Return type mismatch symbol vs ripple-wave-set. +;; INFO: Return type mismatch symbol vs none. (defmethod TODO-RENAME-22 ogre-lava ((obj ogre-lava)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) (t9-0 obj) @@ -1746,10 +1746,8 @@ ) (set! (-> obj flags) (logand -8388609 (-> obj flags))) (set! (-> obj flags) (logior #x2000000 (-> obj flags))) - (let ((v0-2 'lava)) - (set! (-> obj attack-event) v0-2) - (the-as ripple-wave-set v0-2) - ) + (set! (-> obj attack-event) 'lava) + (none) ) ;; definition of type shortcut-boulder diff --git a/test/decompiler/reference/levels/rolling/rolling-robber_REF.gc b/test/decompiler/reference/levels/rolling/rolling-robber_REF.gc new file mode 100644 index 0000000000..838bb13f5f --- /dev/null +++ b/test/decompiler/reference/levels/rolling/rolling-robber_REF.gc @@ -0,0 +1,948 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defstate fuel-cell-spline-slider (fuel-cell) + :trans + (the-as (function none :behavior fuel-cell) hide-hud-quick) + :code + (behavior ((arg0 handle) (arg1 float) (arg2 float)) + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((v1-4 (-> self skel root-channel 0))) + (set! (-> v1-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + ) + (if *target* + (process-grab? *target*) + ) + (hide-hud-quick) + (set! *camera-look-through-other* 2) + (set! (-> *camera-other-fov* data) 11650.845) + (set! (-> *camera-other-trans* quad) (-> *math-camera* trans quad)) + (set! (-> *camera-other-root* quad) (-> *math-camera* trans quad)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (dotimes (v1-14 (the int (-> *display* time-adjust-ratio))) + (set! arg2 (* 0.95 arg2)) + ) + (when (and (< (fabs arg2) 13.653334) (>= (- (-> *display* base-frame-counter) (-> self state-time)) 450)) + (if *target* + (process-release? *target*) + ) + (go-virtual wait) + ) + (set! arg1 (+ arg1 (/ (* arg2 (-> *display* seconds-per-frame)) (path-distance (-> self path))))) + (cond + ((< 1.0 arg1) + (set! arg1 (+ -1.0 arg1)) + ) + ((< arg1 0.0) + (set! arg1 (+ 1.0 arg1)) + ) + ) + (eval-path-curve! (-> self path) (-> self root-override trans) arg1 'interp) + (set! (-> self root-override trans y) (+ 8192.0 (-> self root-override trans y))) + (set! (-> self root-override trans y) (fmax 106496.0 (-> self root-override trans y))) + (set! (-> self base quad) (-> self root-override trans quad)) + (transform-post) + (animate self) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (vector-! s4-0 (-> self root-override trans) *camera-other-trans*) + (vector-normalize! s4-0 1.0) + (forward-down->inv-matrix *camera-other-matrix* s4-0 (new 'static 'vector :y -1.0 :w 1.0)) + ) + (set! *camera-look-through-other* 2) + (set-letterbox-frames 10) + (suspend) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 param 0) 0.5) + (joint-control-channel-group-eval! a0-27 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + ) + +;; definition for function fuel-cell-init-as-spline-slider +;; INFO: Return type mismatch object vs none. +(defbehavior fuel-cell-init-as-spline-slider fuel-cell ((arg0 handle) (arg1 float) (arg2 float) (arg3 int)) + (initialize self) + (set! (-> self fact pickup-type) (pickup-type fuel-cell)) + (set! (-> self fact pickup-amount) (the float arg3)) + (initialize-params self 0 1024.0) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self actor-pause) #f) + (set! (-> self entity) (-> arg0 process 0 entity)) + (set! (-> self path) (new 'process 'curve-control self 'path -1000000000.0)) + (set! (-> self movie-pos-index) -1) + (go fuel-cell-spline-slider arg0 arg1 arg2) + (none) + ) + +;; definition of type robber +(deftype robber (process-drawable) + ((root-override collide-shape-moving :offset 112) + (curve-position float :offset-assert 176) + (speed float :offset-assert 180) + (facing vector :inline :offset-assert 192) + (tangent vector :inline :offset-assert 208) + (run-blend-interp float :offset-assert 224) + (near-timer int32 :offset-assert 228) + (far-time uint64 :offset-assert 232) + (y-offset float :offset-assert 240) + (y-offset-desired float :offset-assert 244) + (y-vel float :offset-assert 248) + (water-height float :offset-assert 252) + (timeout uint64 :offset-assert 256) + (last-ambient-time uint64 :offset-assert 264) + (time-to-next-ambient uint64 :offset-assert 272) + ) + :heap-base #xb0 + :method-count-assert 20 + :size-assert #x118 + :flag-assert #x1400b00118 + (:states + robber-dead + robber-debug + robber-die + robber-flee + robber-got-away + robber-idle + robber-initial + robber-initial-notice + robber-tired + ) + ) + +;; definition for method 3 of type robber +(defmethod inspect robber ((obj robber)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tcurve-position: ~f~%" (-> obj curve-position)) + (format #t "~T~Tspeed: ~f~%" (-> obj speed)) + (format #t "~T~Tfacing: #~%" (-> obj facing)) + (format #t "~T~Ttangent: #~%" (-> obj tangent)) + (format #t "~T~Trun-blend-interp: ~f~%" (-> obj run-blend-interp)) + (format #t "~T~Tnear-timer: ~D~%" (-> obj near-timer)) + (format #t "~T~Tfar-time: ~D~%" (-> obj far-time)) + (format #t "~T~Ty-offset: ~f~%" (-> obj y-offset)) + (format #t "~T~Ty-offset-desired: ~f~%" (-> obj y-offset-desired)) + (format #t "~T~Ty-vel: ~f~%" (-> obj y-vel)) + (format #t "~T~Twater-height: ~f~%" (-> obj water-height)) + (format #t "~T~Ttimeout: ~D~%" (-> obj timeout)) + (format #t "~T~Tlast-ambient-time: ~D~%" (-> obj last-ambient-time)) + (format #t "~T~Ttime-to-next-ambient: ~D~%" (-> obj time-to-next-ambient)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *robber-sg* robber + 0 + 10 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + :shadow 4 + ) + +;; definition for function robber-event-handler +(defbehavior robber-event-handler robber ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (go robber-die) + ) + ) + ) + +;; definition for function robber-task-complete? +(defbehavior robber-task-complete? robber () + (local-vars (sv-16 symbol)) + (process-entity-status! self (entity-perm-status complete) #t) + (when (or (-> self link prev) (-> self link next)) + (set! sv-16 (the-as symbol #f)) + (apply-all (-> self link) actor-link-subtask-complete-hook (& sv-16)) + (cond + (sv-16 + (close-specific-task! (-> self entity extra perm task) (task-status need-reminder)) + (format #t "robber task is complete~%") + ) + (else + ) + ) + sv-16 + ) + ) + +;; definition for function robber-find-ground +;; Used lq/sq +(defbehavior robber-find-ground robber () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (let ((t2-0 (new 'stack-no-clear 'collide-tri-result))) + (set! (-> gp-0 y) (+ 8192.0 (-> gp-0 y))) + (let ((f0-2 (dummy-10 *collide-cache* gp-0 (new 'static 'vector :y -81920.0 :w 1.0) 40.96 1 self t2-0 1)) + (v1-5 (new 'stack-no-clear 'vector)) + ) + (set! (-> v1-5 quad) (-> self root-override trans quad)) + (set! (-> v1-5 y) (+ (-> gp-0 y) (* -81920.0 f0-2))) + (cond + ((and (>= f0-2 0.0) (< 204.8 (fabs (- (-> v1-5 y) (-> self water-height))))) + (set! (-> self y-offset-desired) + (- (+ (-> gp-0 y) (* -81920.0 f0-2)) (- (-> self root-override trans y) (-> self y-offset))) + ) + #t + ) + (else + (set! (-> self y-offset-desired) 0.0) + #f + ) + ) + ) + ) + ) + ) + +;; definition for function robber-rotate +;; Used lq/sq +(defbehavior robber-rotate robber ((arg0 target) (arg1 float)) + (let ((s5-0 (new 'stack-no-clear 'matrix)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (TODO-RENAME-14 (-> self path) (-> self tangent) (-> self curve-position)) + (cond + ((and arg0 *target*) + (vector-! gp-0 (-> self root-override trans) (target-pos 0)) + (vector-normalize! gp-0 1.0) + ) + ((< (-> self speed) 0.0) + (vector-negate! gp-0 (-> self tangent)) + ) + (else + (set! (-> gp-0 quad) (-> self tangent quad)) + ) + ) + (matrix-from-two-vectors-max-angle-partial! s5-0 (-> self facing) gp-0 arg1 0.25) + (vector-matrix*! gp-0 (-> self facing) s5-0) + (vector-normalize! gp-0 1.0) + (forward-down->inv-matrix s5-0 gp-0 (new 'static 'vector :y -1.0)) + (matrix->quaternion (-> self root-override quat) s5-0) + (set! (-> self run-blend-interp) (acos (vector-dot gp-0 (-> self facing)))) + (set! (-> self run-blend-interp) (* 0.0002746582 (-> self run-blend-interp))) + (if (< (vector-dot (-> self facing) (the-as vector (-> s5-0 vector))) 0.0) + (set! (-> self run-blend-interp) (- (-> self run-blend-interp))) + ) + (let ((v0-10 (-> self facing))) + (set! (-> v0-10 quad) (-> gp-0 quad)) + v0-10 + ) + ) + ) + +;; definition for function robber-move +(defbehavior robber-move robber () + (+! + (-> self curve-position) + (/ (the float + (* (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter)) (the int (-> self speed))) + ) + (path-distance (-> self path)) + ) + ) + (cond + ((< 1.0 (-> self curve-position)) + (set! (-> self curve-position) (+ -1.0 (-> self curve-position))) + ) + ((< (-> self curve-position) 0.0) + (set! (-> self curve-position) (+ 1.0 (-> self curve-position))) + ) + ) + (eval-path-curve! (-> self path) (-> self root-override trans) (-> self curve-position) 'interp) + (cond + ((< (-> self y-offset-desired) (-> self y-offset)) + (set! (-> self y-vel) (* 0.25 (- (-> self y-offset-desired) (-> self y-offset)))) + (set! (-> self y-vel) (fmax -3.4133334 (-> self y-vel))) + (+! (-> self y-offset) (-> self y-vel)) + (when (>= (-> self y-offset-desired) (-> self y-offset)) + (set! (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-vel) 0.0) + ) + ) + ((< (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-vel) (* 0.5 (- (-> self y-offset-desired) (-> self y-offset)))) + (set! (-> self y-vel) (fmin 13.653334 (-> self y-vel))) + (+! (-> self y-offset) (-> self y-vel)) + (when (>= (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-offset) (-> self y-offset-desired)) + (set! (-> self y-vel) 0.0) + ) + ) + ) + (let ((f0-34 (+ (-> self root-override trans y) (-> self y-offset)))) + (set! (-> self root-override trans y) f0-34) + f0-34 + ) + ) + +;; definition for function robber-calc-speed +(defbehavior robber-calc-speed robber ((arg0 float) (arg1 float) (arg2 float) (arg3 float) (arg4 symbol)) + (let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (-> self root-override trans) (target-pos 0)))) + (set! (-> gp-1 y) 0.0) + (let* ((f2-1 (/ (- (vector-length gp-1) arg0) (- arg1 arg0))) + (f0-4 (- 1.0 (fmax 0.0 (fmin 1.0 f2-1)))) + (f0-5 (lerp arg3 arg2 f0-4)) + (f30-0 (* 0.0033333334 f0-5)) + ) + (cond + ((or (not arg4) (< arg0 (vector-length gp-1))) + (if (< (-> self speed) 0.0) + (set! f30-0 (- f30-0)) + ) + ) + ((< (vector-dot gp-1 (-> self tangent)) 0.0) + (set! f30-0 (- f30-0)) + ) + ) + (set! (-> self speed) f30-0) + f30-0 + ) + ) + ) + +;; definition for function robber-calc-anim-speed +(defbehavior robber-calc-anim-speed robber () + (let* ((f0-1 (fabs (-> self speed))) + (f0-2 (* 0.07324219 f0-1)) + (f0-3 (+ -15.0 f0-2)) + (f1-3 (* 0.13333334 f0-3)) + ) + (fmin 1.5 (fmax 0.9 f1-3)) + ) + ) + +;; failed to figure out what this is: +(defstate robber-debug (robber) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((a1-1 (new 'stack-no-clear 'vector))) + (clmf-input gp-0 a1-1 1) + ) + (format *stdcon* "rv ~f ~f ~f~%" (-> gp-0 x) (-> gp-0 y) (-> gp-0 z)) + (vector-float*! gp-0 gp-0 4096.0) + (+! (-> self curve-position) (/ (-> gp-0 y) (path-distance (-> self path)))) + ) + (cond + ((< 1.0 (-> self curve-position)) + (set! (-> self curve-position) (+ -1.0 (-> self curve-position))) + ) + ((< (-> self curve-position) 0.0) + (set! (-> self curve-position) (+ 1.0 (-> self curve-position))) + ) + ) + (eval-path-curve! (-> self path) (-> self root-override trans) (-> self curve-position) 'interp) + (robber-rotate (the-as target #f) 1820.4445) + (robber-find-ground) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robber) ja-post) + ) + +;; failed to figure out what this is: +(defstate robber-dead (robber) + :code + (behavior () (dummy-18 self) (deactivate self) (none)) + ) + +;; failed to figure out what this is: +(defstate robber-die (robber) + :event + (the-as + (function process int symbol event-message-block object :behavior robber) + process-drawable-death-event-handler + ) + :code + (behavior () + (let ((gp-0 #t)) + (when (robber-task-complete?) + (let ((v1-3 (-> self entity extra perm))) + (logior! (-> v1-3 status) (entity-perm-status user-set-from-cstage)) + (cond + ((zero? (-> v1-3 user-object 1)) + (set! (-> v1-3 user-object 1) 1) + (set! (-> v1-3 user-object 0) (-> self curve-position)) + (let ((f30-0 (if (>= (-> self speed) 0.0) + 163840.0 + -163840.0 + ) + ) + (s5-0 (get-process *default-dead-pool* fuel-cell #x4000)) + ) + (when s5-0 + (let ((t9-2 (method-of-type fuel-cell activate))) + (t9-2 (the-as fuel-cell s5-0) self 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + fuel-cell-init-as-spline-slider + (process->handle self) + (-> self curve-position) + f30-0 + (-> self entity extra perm task) + ) + (-> s5-0 ppointer) + ) + ) + ) + (else + (set! gp-0 #f) + (logior! (-> self draw status) (draw-status drwf01)) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (eval-path-curve! (-> self path) s5-1 (the-as float (-> v1-3 user-object 0)) 'interp) + (set! (-> s5-1 y) (+ 8192.0 (-> s5-1 y))) + (birth-pickup-at-point + s5-1 + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + self + (the-as fact-info #f) + ) + ) + ) + ) + ) + ) + (when gp-0 + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-12 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-12 param 1) 1.0) + (set! (-> a0-12 frame-num) 0.0) + (joint-control-channel-group! a0-12 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (robber-calc-speed 4096.0 8192.0 122880.0 122880.0 #f) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) (the float (+ (-> a0-15 frame-group data 0 length) -1))) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group-eval! a0-15 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (while (-> self child) + (suspend) + ) + (go robber-dead) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +;; failed to figure out what this is: +(defstate robber-got-away (robber) + :event + robber-event-handler + :trans + (behavior () + (if (and + (not (and + *target* + (>= 204800.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + (robber-find-ground) + ) + (go robber-idle) + ) + (if (and + *target* + (>= 122880.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + (go robber-flee) + ) + (none) + ) + :code + (behavior () + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-8 (-> self skel root-channel 0))) + (set! (-> v1-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + ) + ) + (while #t + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 param 0) (robber-calc-anim-speed)) + (joint-control-channel-group-eval! gp-0 (the-as art-joint-anim #f) num-func-loop!) + ) + (if (< 27.306667 (fabs (-> self speed))) + (set! (-> self speed) (* 0.95 (-> self speed))) + ) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +;; failed to figure out what this is: +(defstate robber-tired (robber) + :event + robber-event-handler + :enter + (behavior () (set! (-> self y-offset-desired) -12288.0) (none)) + :exit + (behavior () (set! (-> self y-offset-desired) 0.0) (none)) + :trans + (behavior () + (if (not (and + *target* + (>= 163840.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + (go robber-got-away) + ) + (none) + ) + :code + (behavior () + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-8 (-> self skel root-channel 0))) + (set! (-> v1-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + ) + ) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 param 0) (robber-calc-anim-speed)) + (joint-control-channel-group-eval! gp-0 (the-as art-joint-anim #f) num-func-loop!) + ) + (robber-calc-speed 32768.0 122880.0 122060.8 20480.0 #f) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (when (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-ambient-time))) + (the-as int (-> self time-to-next-ambient)) + ) + (ja-channel-push! 1 60) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-14 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (robber-calc-speed 32768.0 122880.0 122060.8 20480.0 #f) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self last-ambient-time) (the-as uint (-> *display* base-frame-counter))) + (let* ((f30-0 300.0) + (f28-0 2.0) + (f26-0 2.0) + (v1-41 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-42 (the-as number (logior #x3f800000 v1-41))) + ) + (set! (-> self time-to-next-ambient) + (the-as uint (the int (* f30-0 (+ f28-0 (* f26-0 (+ -1.0 (the-as float v1-42))))))) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +;; failed to figure out what this is: +(defstate robber-flee (robber) + :event + robber-event-handler + :enter + (behavior () + (set! (-> self near-timer) 3000) + (set! (-> self far-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self y-offset-desired) 0.0) + (none) + ) + :trans + (behavior () + (if (not (and + *target* + (>= 163840.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + (go robber-got-away) + ) + (when (and + *target* + (>= 102400.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + (set! (-> self near-timer) + (- (-> self near-timer) (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + (if (<= (-> self near-timer) 0) + (go robber-tired) + ) + (set! (-> self far-time) (the-as uint (-> *display* base-frame-counter))) + ) + (if (>= (- (-> *display* base-frame-counter) (the-as int (-> self far-time))) 900) + (set! (-> self near-timer) (the-as int (-> self timeout))) + ) + (none) + ) + :code + (behavior () + (while #t + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 7) + ) + ) + (ja-channel-push! 1 60) + (let ((v1-8 (-> self skel root-channel 0))) + (set! (-> v1-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + ) + ) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 param 0) (robber-calc-anim-speed)) + (joint-control-channel-group-eval! gp-0 (the-as art-joint-anim #f) num-func-loop!) + ) + (robber-calc-speed 61440.0 122880.0 204800.0 16384.0 #t) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (when (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-ambient-time))) + (the-as int (-> self time-to-next-ambient)) + ) + (ja-channel-push! 1 60) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-14 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (robber-calc-speed 61440.0 122880.0 204800.0 16384.0 #t) + (robber-move) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self last-ambient-time) (the-as uint (-> *display* base-frame-counter))) + (let* ((f30-0 300.0) + (f28-0 3.0) + (f26-0 5.0) + (v1-41 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-42 (the-as number (logior #x3f800000 v1-41))) + ) + (set! (-> self time-to-next-ambient) + (the-as uint (the int (* f30-0 (+ f28-0 (* f26-0 (+ -1.0 (the-as float v1-42))))))) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +;; failed to figure out what this is: +(defstate robber-idle (robber) + :event + robber-event-handler + :enter + (behavior () (set! (-> self speed) 0.0) (none)) + :trans + (behavior () + (if (and + *target* + (>= 122880.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + (go robber-flee) + ) + (robber-rotate (the-as target #t) 182.04445) + (robber-move) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +;; failed to figure out what this is: +(defstate robber-initial-notice (robber) + :event + robber-event-handler + :trans + (behavior () + (when (logtest? (-> self draw status) (draw-status drwf03)) + (if (and + *target* + (>= 163840.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + (level-hint-spawn + (game-text-id rolling-flying-lurker-intro) + "sksp0116" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (if (and + *target* + (>= 32768.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + (go robber-flee) + ) + (none) + ) + :code + (behavior () + (TODO-RENAME-14 (-> self path) (-> self tangent) (-> self curve-position)) + (let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (-> self root-override trans) (target-pos 0))) + (f0-1 6.826667) + ) + (set! (-> gp-1 y) 0.0) + (if (< (vector-dot gp-1 (-> self tangent)) 0.0) + (set! f0-1 (- f0-1)) + ) + (set! (-> self speed) f0-1) + ) + (ja-channel-push! 1 60) + (while #t + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 2.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (robber-calc-speed 61440.0 122880.0 2048.0 2048.0 #t) + (robber-rotate (the-as target #f) 1820.4445) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 2.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go robber-flee) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +;; failed to figure out what this is: +(defstate robber-initial (robber) + :event + robber-event-handler + :enter + (behavior () (set! (-> self speed) 0.0) (none)) + :trans + (behavior () + (if (and + *target* + (>= 122880.0 (vector-vector-xz-distance (-> self root-override trans) (-> *target* control trans))) + ) + (go robber-initial-notice) + ) + (robber-move) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior robber) transform-post) + ) + +;; definition for method 11 of type robber +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! robber ((obj robber) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3073)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 10240.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *robber-sg* '()) + (set! (-> obj root-override pause-adjust-distance) 122880.0) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj path) (new 'process 'curve-control obj 'path -1000000000.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj fact) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (set! (-> obj curve-position) (res-lump-float (-> obj entity) 'initial-spline-pos)) + (eval-path-curve! (-> obj path) (-> obj root-override trans) (-> obj curve-position) 'interp) + (TODO-RENAME-14 (-> obj path) (-> obj tangent) (-> obj curve-position)) + (set! (-> obj facing quad) (-> obj tangent quad)) + (let ((s4-1 (new 'stack-no-clear 'matrix))) + (forward-down->inv-matrix s4-1 (-> obj facing) (new 'static 'vector :y -1.0)) + (matrix->quaternion (-> obj root-override quat) s4-1) + ) + (set! (-> obj y-vel) 0.0) + (set! (-> obj water-height) (res-lump-float (-> obj entity) 'water-height)) + (robber-find-ground) + (set! (-> obj y-offset) (-> obj y-offset-desired)) + (let ((f0-14 (res-lump-float arg0 'timeout :default 10.0))) + (set! (-> obj timeout) (the-as uint (the int (* 300.0 f0-14)))) + ) + (set! (-> obj last-ambient-time) (the-as uint 0)) + (set! (-> obj time-to-next-ambient) (the-as uint 0)) + (set! (-> obj speed) 0.0) + (let ((v1-42 (-> obj entity extra perm))) + (logior! (-> v1-42 status) (entity-perm-status user-set-from-cstage)) + (if (nonzero? (-> v1-42 user-object 1)) + (go robber-die) + ) + ) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go robber-dead) + (go robber-initial) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/snow/snow-obs_REF.gc b/test/decompiler/reference/levels/snow/snow-obs_REF.gc new file mode 100644 index 0000000000..8bf25a893e --- /dev/null +++ b/test/decompiler/reference/levels/snow/snow-obs_REF.gc @@ -0,0 +1,2500 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type snowcam +(deftype snowcam (pov-camera) + ((seq uint64 :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 30 + :size-assert #xe8 + :flag-assert #x1e008000e8 + ) + +;; definition for method 3 of type snowcam +(defmethod inspect snowcam ((obj snowcam)) + (let ((t9-0 (method-of-type pov-camera inspect))) + (t9-0 obj) + ) + (format #t "~T~Tseq: ~D~%" (-> obj seq)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *snowcam-sg* snowcam + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +;; definition for method 29 of type snowcam +(defmethod set-stack-size! snowcam ((obj snowcam)) + (stack-size-set! (-> obj main-thread) 512) + (none) + ) + +;; failed to figure out what this is: +(defstate pov-camera-playing (snowcam) + :virtual #t + :code + (behavior () + (let ((v1-0 (-> self seq))) + (cond + ((zero? v1-0) + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 0.2) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 0.2) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 0.25) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 0.25) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 1350) + (suspend) + ) + ) + ) + ((= v1-0 1) + (let* ((gp-1 (get-process *default-dead-pool* fuel-cell #x4000)) + (gp-2 + (ppointer->handle + (when gp-1 + (let ((t9-10 (method-of-type fuel-cell activate))) + (t9-10 (the-as fuel-cell gp-1) (ppointer->process (-> self parent)) 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 fuel-cell-init-as-clone (process->handle self) (-> self entity extra perm task)) + (-> gp-1 ppointer) + ) + ) + ) + ) + (push-setting! *setting-control* self 'music-volume 'abs 0.0 0) + (push-setting! *setting-control* self 'sfx-volume 'rel 50.0 0) + (ja-play-spooled-anim + (the-as spool-anim (-> self anim-name)) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (clear-pending-settings-from-process *setting-control* self 'music-volume) + (clear-pending-settings-from-process *setting-control* self 'sfx-volume) + (let ((a0-21 (handle->process gp-2))) + (if a0-21 + (send-event a0-21 'stop-cloning) + ) + ) + ) + ) + ((= v1-0 2) + (let ((a0-24 (-> self skel root-channel 0))) + (set! (-> a0-24 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-24 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-24 param 1) 1.0) + (set! (-> a0-24 frame-num) 0.0) + (joint-control-channel-group! a0-24 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-25 (-> self skel root-channel 0))) + (set! (-> a0-25 param 0) (the float (+ (-> a0-25 frame-group data 0 length) -1))) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group-eval! a0-25 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (send-event (handle->process (-> self notify-handle)) 'notify 'cut) + (let ((a0-31 (-> self skel root-channel 0))) + (set! (-> a0-31 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-31 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-31 param 1) 1.0) + (set! (-> a0-31 frame-num) 0.0) + (joint-control-channel-group! a0-31 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-32 (-> self skel root-channel 0))) + (set! (-> a0-32 param 0) (the float (+ (-> a0-32 frame-group data 0 length) -1))) + (set! (-> a0-32 param 1) 1.0) + (joint-control-channel-group-eval! a0-32 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (else + (suspend) + 0 + ) + ) + ) + (go-virtual pov-camera-done-playing) + (none) + ) + ) + +;; definition of type snow-eggtop +(deftype snow-eggtop (process-drawable) + ((root-override collide-shape-moving :offset 112) + (spawn-trans vector :inline :offset-assert 176) + (play-sound? symbol :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xc4 + :flag-assert #x14006000c4 + (:states + snow-eggtop-activate + snow-eggtop-idle-down + snow-eggtop-idle-up + ) + ) + +;; definition for method 3 of type snow-eggtop +(defmethod inspect snow-eggtop ((obj snow-eggtop)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tspawn-trans: #~%" (-> obj spawn-trans)) + (format #t "~T~Tplay-sound?: ~A~%" (-> obj play-sound?)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *snow-eggtop-sg* snow-eggtop + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 510) (new 'static 'sparticle-launch-group + :length 5 + :duration #xbb8 + :linger-duration #x5dc + :name "group-snow-yellow-eco-room-open" + :launcher + (new 'static 'inline-array sparticle-group-item 5 + (sp-item 1990 :fade-after (meters 110.0)) + (sp-item 1991 :fade-after (meters 110.0)) + (sp-item 1992 :fade-after (meters 110.0)) + (sp-item 1993 :fade-after (meters 110.0)) + (sp-item 1994 :fade-after (meters 110.0)) + ) + :bounds + (new 'static 'sphere :y -24576.0 :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 511) (new 'static 'sparticle-launch-group + :length 3 + :duration #x384 + :linger-duration #x5dc + :name "group-snow-yellow-eco-room-activate" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 1994) + (sp-item 1994) + (sp-item 1995 :flags (bit1) :period 1200 :length 15) + ) + :bounds + (new 'static 'sphere :y -24576.0 :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1995) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 30.0) + (sp-flt spt-y (meters -4.0)) + (sp-rnd-flt spt-scale-x (meters 20.0) (meters 10.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.0) (meters 2.0) 1.0) + (sp-flt spt-r 127.0) + (sp-flt spt-g 127.0) + (sp-rnd-flt spt-b 0.0 16.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.05) (degrees 0.1) 1.0) + (sp-flt spt-fade-a 0.85333335) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 1996) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1996) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a 0.0) + (sp-int spt-next-time 225) + (sp-launcher-by-id spt-next-launcher 1997) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1997) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.14222223) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1990) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -4.0)) + (sp-rnd-flt spt-scale-x (meters 10.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 8.0) (meters 2.0) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-rnd-flt spt-b 0.0 64.0 1.0) + (sp-rnd-flt spt-a 128.0 128.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1991) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -4.0)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 2.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 128.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1992) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-rnd-flt spt-num 0.5 1.0 1.0) + (sp-flt spt-y (meters -4.0)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees -30.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.7) (meters 0.4) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 1998) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1998) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 6 + (sp-flt spt-r 64.0) + (sp-flt spt-g 64.0) + (sp-flt spt-fade-r -1.0) + (sp-flt spt-fade-g -1.0) + (sp-flt spt-fade-a -2.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1993) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-rnd-flt spt-num 0.5 1.0 1.0) + (sp-flt spt-y (meters -4.0)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 3.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 150.0) (degrees 60.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.7) (meters 0.4) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 1998) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1994) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-rnd-flt spt-num 1.0 1.0 1.0) + (sp-rnd-flt spt-y (meters -6.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 6.0) (meters 2.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees -140.0) (degrees 100.00001) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.7) (meters 0.4) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 90) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 1998) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 80.0) (degrees 200.00002) 1.0) + (sp-flt spt-conerot-radius (meters 4.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(defstate snow-eggtop-idle-up (snow-eggtop) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'notify) + (case (-> arg3 param 0) + (('pickup) + (if (type-type? (-> arg0 type) fuel-cell) + (save-reminder (get-task-control (-> self entity extra perm task)) 1 4) + ) + ) + ) + ) + ) + ) + ) + :trans + (behavior () + (if (and (not (-> self child)) (task-complete? *game-info* (-> self entity extra perm task))) + (go snow-eggtop-activate) + ) + (spawn (-> self part) (-> self root-override trans)) + (update! (-> self sound)) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 0) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-eggtop-activate (snow-eggtop) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (when (= (-> arg0 type) snowcam) + (cond + ((= (-> arg3 param 0) 'die) + (if *target* + (set! (-> *target* control trans y) (+ 1024.0 (-> *target* control trans y))) + ) + (go snow-eggtop-idle-down) + ) + ((= (-> arg3 param 0) 'cut) + (stop! (-> self sound)) + (set! (-> self play-sound?) #f) + #f + ) + ) + ) + ) + ) + ) + :enter + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (set! (-> self play-sound?) #t) + (none) + ) + :exit + (behavior () + (stop! (-> self sound)) + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (none) + ) + :trans + (the-as (function none :behavior snow-eggtop) rider-trans) + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 (the-as part-tracker gp-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 511) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-0 ppointer) + ) + ) + (let* ((gp-1 (get-process *default-dead-pool* snowcam #x4000)) + (v1-7 + (when gp-1 + (let ((t9-4 (method-of-type snowcam activate))) + (t9-4 (the-as snowcam gp-1) self 'snowcam (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + pov-camera-init-by-other + (-> self spawn-trans) + *snowcam-sg* + "gearstart" + 0 + self + '((0 ambient camera "gamcam38") (10 alive "ecovent-278")) + ) + (-> gp-1 ppointer) + ) + ) + ) + (set! (-> (the-as snowcam (-> v1-7 0)) seq) (the-as uint 2)) + ) + (change-sound! (-> self sound) (static-sound-name "snw-eggtop-seq")) + (save-reminder (get-task-control (-> self entity extra perm task)) 2 4) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> a0-10 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! a0-10 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (if (-> self play-sound?) + (update! (-> self sound)) + ) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (level-hint-spawn + (game-text-id snowy-turned-on-yellow-vents) + "sksp0360" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 330) + (if (-> self play-sound?) + (update! (-> self sound)) + ) + (suspend) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (let ((a0-18 (-> self entity))) + (if (and a0-18 (= self (-> a0-18 extra process))) + (entity-task-complete-on a0-18) + ) + ) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'show) + (while #t + (if (-> self play-sound?) + (update! (-> self sound)) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior snow-eggtop) rider-post) + ) + +;; failed to figure out what this is: +(defstate snow-eggtop-idle-down (snow-eggtop) + :code + (behavior () + (process-entity-status! self (entity-perm-status complete) #t) + (let ((a0-1 (-> self entity))) + (if (and a0-1 (= self (-> a0-1 extra process))) + (entity-task-complete-on a0-1) + ) + ) + (ja-channel-push! 1 0) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + ) + (transform-post) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +;; definition for method 11 of type snow-eggtop +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! snow-eggtop ((obj snow-eggtop) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 -7372.8 18022.4) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-eggtop-sg* '()) + (logior! (-> obj skel status) 1) + (set! (-> obj spawn-trans quad) (-> obj root-override trans quad)) + (set! (-> obj root-override trans y) (+ -2662.4 (-> obj root-override trans y))) + (dummy-47 (-> obj root-override)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 510) obj)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "electric-loop") + :volume #x400 + :fo-max 40 + ) + (-> obj root-override trans) + ) + ) + (cond + ((task-complete? *game-info* (-> obj entity extra perm task)) + (go snow-eggtop-idle-down) + ) + (else + (let ((a0-17 (new 'stack-no-clear 'vector))) + (set! (-> a0-17 quad) (-> obj root-override trans quad)) + (set! (-> a0-17 y) (+ 3072.0 (-> a0-17 y))) + (birth-pickup-at-point + a0-17 + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + ) + (go snow-eggtop-idle-up) + ) + ) + (none) + ) + +;; definition of type snowpusher +(deftype snowpusher (process-drawable) + ((root-override collide-shape-moving :offset 112) + (max-frame float :offset-assert 176) + (open-sound sound-name :offset-assert 192) + (close-sound sound-name :offset-assert 208) + (sync sync-info-paused :inline :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 20 + :size-assert #xf0 + :flag-assert #x14008000f0 + (:states + snowpusher-idle + ) + ) + +;; definition for method 3 of type snowpusher +;; Used lq/sq +(defmethod inspect snowpusher ((obj snowpusher)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tmax-frame: ~f~%" (-> obj max-frame)) + (format #t "~T~Topen-sound: ~D~%" (-> obj open-sound)) + (format #t "~T~Tclose-sound: ~D~%" (-> obj close-sound)) + (format #t "~T~Tsync: #~%" (-> obj sync)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *snowpusher-sg* snowpusher + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate snowpusher-idle (snowpusher) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'touch) + (send-event arg0 'no-look-around 450) + #f + ) + ) + ) + ) + :code + (behavior () + (let ((gp-0 #f)) + (while #t + (let ((f0-0 (get-current-phase-with-mirror (-> self sync)))) + (let ((v1-4 (-> self skel root-channel 0))) + (set! (-> v1-4 num-func) num-func-identity) + (set! (-> v1-4 frame-num) (* f0-0 (-> self max-frame))) + ) + (cond + ((or (= f0-0 0.0) (= f0-0 1.0)) + (set! gp-0 #f) + ) + (else + (when (not gp-0) + (set! gp-0 #t) + (if (>= f0-0 0.5) + (sound-play-by-name (-> self close-sound) (new-sound-id) 1024 0 0 1 #t) + (sound-play-by-name (-> self open-sound) (new-sound-id) 1024 0 0 1 #t) + ) + ) + ) + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior snowpusher) pusher-post) + ) + +;; definition for method 11 of type snowpusher +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! snowpusher ((obj snowpusher) (arg0 entity-actor)) + (local-vars (sv-16 res-tag)) + (set! (-> obj mask) (logior (process-mask enemy platform) (-> obj mask))) + (let ((s3-0 0) + (s4-0 0) + ) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-3 (res-lump-data (-> obj entity) 'mode (pointer int32) :tag-ptr (& sv-16)))) + (when v1-3 + (set! s3-0 (-> v1-3 0)) + (set! s4-0 (-> v1-3 1)) + ) + ) + (cond + ((zero? s3-0) + (set! (-> obj open-sound) (static-sound-name "snow-piston-opn")) + (set! (-> obj close-sound) (static-sound-name "snow-piston-cls")) + ) + ((= s3-0 1) + (set! (-> obj open-sound) (static-sound-name "snow-pist-opn3")) + (set! (-> obj close-sound) (static-sound-name "snow-pist-cls3")) + ) + ((= s3-0 2) + (set! (-> obj open-sound) (static-sound-name "snow-pist-opn2")) + (set! (-> obj close-sound) (static-sound-name "snow-pist-cls2")) + ) + ) + (let ((s3-1 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s3-1 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s3-1 reaction) default-collision-reaction) + (set! (-> s3-1 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-1 (new 'process 'collide-shape-prim-mesh s3-1 (the-as uint s4-0) (the-as uint 0)))) + (set! (-> s4-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s4-1 collide-with) (the-as uint 16)) + (set! (-> s4-1 prim-core action) (the-as uint 3)) + (set! (-> s4-1 prim-core offense) 4) + (set! (-> s4-1 transform-index) 3) + (set-vector! (-> s4-1 local-sphere) 0.0 20480.0 -12288.0 25600.0) + (set-root-prim! s3-1 s4-1) + ) + (set! (-> s3-1 nav-radius) (* 0.75 (-> s3-1 root-prim local-sphere w))) + (backup-collide-with-as s3-1) + (set! (-> obj root-override) s3-1) + ) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snowpusher-sg* '()) + (let ((s4-2 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-2 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s4-2 frame-num) 0.0) + ) + (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15) + (set! (-> obj max-frame) (* (the float (ja-num-frames 0)) (res-lump-float arg0 'max-frame :default 1.0))) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go snowpusher-idle) + (none) + ) + +;; definition of type snow-spatula +(deftype snow-spatula (baseplat) + ((sync sync-info :inline :offset-assert 228) + (startmat matrix :inline :offset-assert 240) + ) + :heap-base #xc0 + :method-count-assert 27 + :size-assert #x130 + :flag-assert #x1b00c00130 + (:states + snow-spatula-idle + ) + ) + +;; definition for method 3 of type snow-spatula +(defmethod inspect snow-spatula ((obj snow-spatula)) + (let ((t9-0 (method-of-type baseplat inspect))) + (t9-0 obj) + ) + (format #t "~T~Tsync: #~%" (-> obj sync)) + (format #t "~T~Tstartmat: #~%" (-> obj startmat)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *snow-spatula-sg* snow-spatula + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 10 0 10) + :longest-edge (meters 9.4) + ) + +;; failed to figure out what this is: +(defstate snow-spatula-idle (snow-spatula) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'bonk) + (dummy-22 self) + (sound-play-by-name (static-sound-name "snow-spat-short") (new-sound-id) 768 1143 0 1 #t) + ) + ) + ) + ) + :trans + (the-as (function none :behavior snow-spatula) plat-trans) + :code + (behavior () + (let ((f28-0 0.0) + (gp-0 1) + ) + (while #t + (let ((f30-0 (get-current-phase-with-mirror (-> self sync)))) + (when (!= f30-0 f28-0) + (let ((v1-3 1)) + (if (< f30-0 f28-0) + (set! v1-3 -1) + ) + (when (!= v1-3 gp-0) + (set! gp-0 v1-3) + (cond + ((> v1-3 0) + (sound-play-by-name + (static-sound-name "snow-spat-long") + (new-sound-id) + 1024 + (the int (* 1524.0 (rand-vu-float-range -0.2 0.2))) + 0 + 1 + #t + ) + ) + (1 + (sound-play-by-name + (static-sound-name "snow-spat-short") + (new-sound-id) + 1024 + (the int (* 1524.0 (rand-vu-float-range -0.2 0.2))) + 0 + 1 + #t + ) + ) + ) + ) + ) + (set! f28-0 f30-0) + ) + (let ((s5-2 (new 'stack-no-clear 'matrix))) + (matrix-rotate-y! s5-2 (* 16384.0 f30-0)) + (matrix*! s5-2 s5-2 (-> self startmat)) + (matrix->quaternion (-> self root-override quat) s5-2) + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior snow-spatula) plat-post) + ) + +;; definition for method 11 of type snow-spatula +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! snow-spatula ((obj snow-spatula) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 49152.0 -16384.0 16384.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-spatula-sg* '()) + (logior! (-> obj skel status) 1) + (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15) + (quaternion->matrix (-> obj startmat) (-> obj root-override quat)) + (dummy-21 obj) + (go snow-spatula-idle) + (none) + ) + +;; definition of type snow-fort-gate +(deftype snow-fort-gate (process-drawable) + ((root-override collide-shape :offset 112) + (part2 sparticle-launch-control :offset-assert 176) + (part3 sparticle-launch-control :offset-assert 180) + (open-trans vector :inline :offset-assert 192) + (closed-trans vector :inline :offset-assert 208) + ) + :heap-base #x70 + :method-count-assert 20 + :size-assert #xe0 + :flag-assert #x14007000e0 + (:states + snow-fort-gate-activate + snow-fort-gate-idle-closed + snow-fort-gate-idle-open + ) + ) + +;; definition for method 3 of type snow-fort-gate +(defmethod inspect snow-fort-gate ((obj snow-fort-gate)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tpart2: ~A~%" (-> obj part2)) + (format #t "~T~Tpart3: ~A~%" (-> obj part3)) + (format #t "~T~Topen-trans: #~%" (-> obj open-trans)) + (format #t "~T~Tclosed-trans: #~%" (-> obj closed-trans)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *snow-fort-gate-sg* snow-fort-gate + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 15 0 24) + :longest-edge (meters 12.8) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 512) (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-snow-fort-gate-coming-down" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1896)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1896) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-rnd-flt spt-num 0.5 1.0 1.0) + (sp-rnd-flt spt-x (meters -10.0) (meters 20.0) 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 10.5) (meters 8.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 96.0) + (sp-flt spt-g 96.0) + (sp-rnd-flt spt-b 96.0 16.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters -0.026666667) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-vel-z (meters -0.053333335) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-flt spt-fade-a 0.42666668) + (sp-flt spt-accel-y -2.7306666) + (sp-flt spt-friction 0.98) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 75 74 1) + (sp-launcher-by-id spt-next-launcher 1897) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1897) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.21333334) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 513) (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-snow-fort-gate-hits-bottom" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 1898)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1898) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 64.0) + (sp-rnd-flt spt-x (meters -10.0) (meters 20.0) 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-flt spt-z -12288.0) + (sp-rnd-flt spt-scale-x (meters 4.0) (meters 8.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-rnd-flt spt-b 128.0 16.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters -0.013333334) (meters 0.026666667) 1.0) + (sp-rnd-flt spt-vel-z (meters -0.053333335) (meters 0.046666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-flt spt-fade-a 0.42666668) + (sp-flt spt-accel-y -0.68266666) + (sp-flt spt-friction 0.98) + (sp-int spt-timer 750) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 75 74 1) + (sp-launcher-by-id spt-next-launcher 1899) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1899) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.10666667) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 514) + (new 'static 'sparticle-launch-group + :length 15 + :duration #xbb8 + :linger-duration #x5dc + :name "group-snow-fort-gate-snowdrops" + :launcher + (new 'static 'inline-array sparticle-group-item 15 + (sp-item 2271 :fade-after (meters 100.0) :falloff-to (meters 130.0) :period 1200 :length 150) + (sp-item 2271 :fade-after (meters 100.0) :falloff-to (meters 130.0) :period 1200 :length 100) + (sp-item 2271 :fade-after (meters 100.0) :falloff-to (meters 130.0) :period 1200 :length 60) + (sp-item 2271 :fade-after (meters 100.0) :falloff-to (meters 130.0) :period 1200 :length 30) + (sp-item 2271 :fade-after (meters 100.0) :falloff-to (meters 130.0) :period 1200 :length 10) + (sp-item 2272 :fade-after (meters 100.0) :falloff-to (meters 100.0) :period 1200 :length 200) + (sp-item 2272 :fade-after (meters 100.0) :falloff-to (meters 100.0) :period 1200 :length 150) + (sp-item 2272 :fade-after (meters 100.0) :falloff-to (meters 100.0) :period 1200 :length 100) + (sp-item 2272 :fade-after (meters 100.0) :falloff-to (meters 100.0) :period 1200 :length 50) + (sp-item 2272 :fade-after (meters 100.0) :falloff-to (meters 100.0) :period 1200 :length 20) + (sp-item 2273 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 1200 :length 170) + (sp-item 2273 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 1200 :length 115) + (sp-item 2273 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 1200 :length 70) + (sp-item 2273 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 1200 :length 35) + (sp-item 2273 :fade-after (meters 80.0) :falloff-to (meters 80.0) :period 1200 :length 10) + ) + :bounds + (new 'static 'sphere :y -65536.0 :w 131072.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2271) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-z -4096.0 8192.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.5) (meters 0.25) 1.0) + (sp-flt spt-r 150.0) + (sp-flt spt-g 150.0) + (sp-rnd-flt spt-b 150.0 55.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-y (meters -0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-rnd-flt spt-accel-y -2.7306666 -1.3653333 1.0) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 600) + (sp-launcher-by-id spt-next-launcher 2274) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2274) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.42666668) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2272) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-flt spt-y (meters 1.0)) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (meters 0.25) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.25) (meters 0.1) 1.0) + (sp-flt spt-r 150.0) + (sp-flt spt-g 150.0) + (sp-rnd-flt spt-b 150.0 55.0 1.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-vel-y (meters -0.006666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-rnd-flt spt-accel-y -2.048 -1.3653333 1.0) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 600) + (sp-launcher-by-id spt-next-launcher 2274) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2273) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xb :page #x2)) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-flt spt-y (meters 1.0)) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 0.25) 1.0) + (sp-rnd-flt spt-scale-y (meters 2.5) (meters 1.0) 1.0) + (sp-flt spt-r 150.0) + (sp-flt spt-g 150.0) + (sp-rnd-flt spt-b 150.0 55.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-flt spt-vel-y (meters -0.006666667)) + (sp-flt spt-fade-a -0.14222223) + (sp-rnd-flt spt-accel-y -2.048 -1.3653333 1.0) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit12) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(defstate snow-fort-gate-idle-closed (snow-fort-gate) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notice) + (go snow-fort-gate-activate) + ) + ) + ) + :trans + (behavior () + (when (and *target* (>= 61440.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (level-hint-spawn + (game-text-id snow-fort-reminder) + "sksp0345" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (close-specific-task! (game-task snow-fort) (task-status need-hint)) + ) + (none) + ) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (set! (-> self root-override trans quad) (-> self closed-trans quad)) + (transform-post) + (suspend) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-fort-gate-activate (snow-fort-gate) + :enter + (behavior () (logclear! (-> self mask) (process-mask actor-pause)) (none)) + :exit + (behavior () (stop! (-> self sound)) (logior! (-> self mask) (process-mask actor-pause)) (none)) + :code + (behavior () + (let ((gp-0 #f)) + (while #t + (let ((a1-0 (new 'stack-no-clear 'vector))) + (set! (-> a1-0 quad) (-> self closed-trans quad)) + (set! (-> a1-0 y) (+ -12288.0 (-> a1-0 y))) + (set! (-> a1-0 z) (+ -12288.0 (-> a1-0 z))) + (spawn (-> self part) a1-0) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> s5-0 quad) (-> self root-override trans quad)) + (let ((f30-0 (vector-vector-distance-squared s5-0 (-> self open-trans)))) + (when (and (not gp-0) (>= 1048576.0 f30-0)) + (set! gp-0 #t) + (let ((a1-2 (new 'stack-no-clear 'vector))) + (set! (-> a1-2 quad) (-> self open-trans quad)) + (set! (-> a1-2 y) (+ -26624.0 (-> a1-2 y))) + (set! (-> a1-2 z) (+ -3072.0 (-> a1-2 z))) + (spawn (-> self part2) a1-2) + ) + ) + (when (>= 1677.7216 f30-0) + (sound-play-by-name (static-sound-name "lodge-close") (new-sound-id) 1024 0 0 1 #t) + (activate! *camera-smush-control* 819.2 37 150 1.0 0.99) + (go snow-fort-gate-idle-open) + ) + ) + (vector-seek-3d-smooth! s5-0 (-> self open-trans) (* 16384.0 (-> *display* seconds-per-frame)) 0.9) + (TODO-RENAME-30 (-> self root-override) s5-0) + ) + (let ((a1-7 (new 'stack-no-clear 'vector))) + (set! (-> a1-7 quad) (-> self root-override trans quad)) + (set! (-> a1-7 x) (+ 20480.0 (-> a1-7 x))) + (set! (-> a1-7 y) (+ 106496.0 (-> a1-7 y))) + (set! (-> a1-7 z) (+ -32768.0 (-> a1-7 z))) + (spawn (-> self part3) a1-7) + ) + (update! (-> self sound)) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior snow-fort-gate) transform-post) + ) + +;; failed to figure out what this is: +(defstate snow-fort-gate-idle-open (snow-fort-gate) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (set! (-> self root-override trans quad) (-> self open-trans quad)) + (transform-post) + (suspend) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; definition for method 10 of type snow-fort-gate +(defmethod deactivate snow-fort-gate ((obj snow-fort-gate)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + (if (nonzero? (-> obj part3)) + (kill-and-free-particles (-> obj part3)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 7 of type snow-fort-gate +;; INFO: Return type mismatch process-drawable vs snow-fort-gate. +(defmethod relocate snow-fort-gate ((obj snow-fort-gate) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (if (nonzero? (-> obj part3)) + (&+! (-> obj part3) arg0) + ) + (the-as + snow-fort-gate + ((the-as (function process-drawable int process-drawable) (find-parent-method snow-fort-gate 7)) obj arg0) + ) + ) + +;; definition for method 11 of type snow-fort-gate +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! snow-fort-gate ((obj snow-fort-gate) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 61440.0 0.0 99123.2) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-fort-gate-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 512) obj)) + (set! (-> obj part2) (create-launch-control (-> *part-group-id-table* 513) obj)) + (set! (-> obj part3) (create-launch-control (-> *part-group-id-table* 514) obj)) + (set! (-> obj open-trans quad) (-> obj root-override trans quad)) + (set! (-> obj closed-trans quad) (-> obj open-trans quad)) + (set! (-> obj open-trans y) (+ -141312.0 (-> obj open-trans y))) + (set! (-> obj open-trans z) (+ 32768.0 (-> obj open-trans z))) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "lodge-door-mov") + :volume #x400 + :fo-max 80 + ) + (-> obj open-trans) + ) + ) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (cond + ((task-complete? *game-info* (game-task snow-ball)) + (set! (-> obj root-override trans quad) (-> obj open-trans quad)) + (transform-post) + (go snow-fort-gate-idle-open) + ) + (else + (set! (-> obj root-override trans quad) (-> obj closed-trans quad)) + (transform-post) + (go snow-fort-gate-idle-closed) + ) + ) + (none) + ) + +;; definition of type snow-gears +(deftype snow-gears (process-drawable) + () + :heap-base #x40 + :method-count-assert 21 + :size-assert #xb0 + :flag-assert #x15004000b0 + (:methods + (TODO-RENAME-20 (_type_) none 20) + ) + (:states + snow-gears-activate + snow-gears-halt + snow-gears-idle + snow-gears-stopped + ) + ) + +;; definition for method 3 of type snow-gears +(defmethod inspect snow-gears ((obj snow-gears)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *snow-gears-sg* snow-gears + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 60) + :longest-edge (meters 12.1) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 515) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-snow-gears-dripping" + :launcher + (new 'static 'inline-array sparticle-group-item 2 (sp-item 1900) (sp-item 1901)) + :bounds + (new 'static 'sphere :y -16384.0 :w 65536.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1900) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters -9.0) (meters 18.0) 1.0) + (sp-flt spt-y (meters -6.0)) + (sp-rnd-flt spt-z -36864.0 73728.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.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 32.0 40.0 1.0) + (sp-rnd-flt spt-g 32.0 40.0 1.0) + (sp-rnd-flt spt-b 32.0 40.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters -0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -0.68266666 1.0) + (sp-int spt-timer 390) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1901) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -7.0)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 4.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 16.0 1.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 64.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-fade-a 1.0666667) + (sp-flt spt-accel-y 0.06826667) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 1902) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 3.5) (meters 6.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1902) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a 0.0) + (sp-int-plain-rnd spt-next-time 450 239 1) + (sp-launcher-by-id spt-next-launcher 1903) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1903) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.14222223) (sp-end)) + ) + ) + +;; definition for method 20 of type snow-gears +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod TODO-RENAME-20 snow-gears ((obj snow-gears)) + (let ((a1-0 (new 'stack-no-clear 'vector))) + (set! (-> a1-0 quad) (-> obj root trans quad)) + (set! (-> a1-0 y) (+ 61440.0 (-> a1-0 y))) + (spawn (-> obj part) a1-0) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate snow-gears-idle (snow-gears) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notice) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go snow-gears-activate) + ) + ) + ) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (ja-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-gears-activate (snow-gears) + :trans + (behavior () (TODO-RENAME-20 self) (none)) + :code + (behavior () + (sound-play-by-name (static-sound-name "eng-start-up") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 0.85) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 0.85) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 0.35) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (update! (-> self sound)) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 0.35) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-1 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (update! (-> self sound)) + (suspend) + ) + (go snow-gears-halt) + (none) + ) + :post + (the-as (function none :behavior snow-gears) ja-post) + ) + +;; failed to figure out what this is: +(defstate snow-gears-halt (snow-gears) + :exit + (behavior () (stop! (-> self sound)) (none)) + :trans + (behavior () (TODO-RENAME-20 self) (none)) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 0.35) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (update! (-> self sound)) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 0.35) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (stop! (-> self sound)) + (sound-play-by-name (static-sound-name "eng-shut-down") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 0.85) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 0.85) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go snow-gears-stopped) + (none) + ) + :post + (the-as (function none :behavior snow-gears) ja-post) + ) + +;; failed to figure out what this is: +(defstate snow-gears-stopped (snow-gears) + :code + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type snow-gears +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! snow-gears ((obj snow-gears) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-gears-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 515) obj)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "snow-engine") + :volume #x400 + :fo-max #x12c + ) + (-> obj root trans) + ) + ) + (go snow-gears-idle) + (none) + ) + +;; definition of type snow-switch +(deftype snow-switch (process-drawable) + ((root-override collide-shape-moving :offset 112) + (pressed? symbol :offset-assert 176) + (fcell-handle handle :offset-assert 184) + (orig-trans vector :inline :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xd0 + :flag-assert #x14006000d0 + (:states + snow-switch-activate + snow-switch-idle-down + snow-switch-idle-up + ) + ) + +;; definition for method 3 of type snow-switch +(defmethod inspect snow-switch ((obj snow-switch)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tpressed?: ~A~%" (-> obj pressed?)) + (format #t "~T~Tfcell-handle: ~D~%" (-> obj fcell-handle)) + (format #t "~T~Torig-trans: #~%" (-> obj orig-trans)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *snow-switch-sg* snow-switch + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + :longest-edge (meters 0) + ) + +;; definition for function snow-switch-event-handler +(defbehavior snow-switch-event-handler snow-switch ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('notify) + (cond + ((= (-> arg0 type) fuel-cell) + (when (= (-> arg3 param 0) 'pickup) + (set! (-> self pressed?) #t) + (process-entity-status! self (entity-perm-status bit-3) #t) + (logclear! (-> self mask) (process-mask actor-pause)) + (go snow-switch-activate) + ) + ) + ((= (-> arg0 type) snowcam) + (if (= (-> arg3 param 0) 'die) + (go snow-switch-idle-down) + ) + ) + ) + ) + (('query) + (return (-> self pressed?)) + v0-0 + ) + ) + ) + +;; failed to figure out what this is: +(defstate snow-switch-idle-up (snow-switch) + :event + snow-switch-event-handler + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-switch-activate (snow-switch) + :event + snow-switch-event-handler + :exit + (behavior () + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self mask) (process-mask actor-pause)) + (none) + ) + :trans + (the-as (function none :behavior snow-switch) rider-trans) + :code + (behavior () + (local-vars (v1-1 symbol)) + (until v1-1 + (suspend) + (set! v1-1 (or (not *target*) (zero? (logand (-> *target* state-flags) 256)))) + ) + (sound-play-by-name (static-sound-name "prec-button1") (new-sound-id) 1024 -1524 0 1 #t) + (let ((gp-1 (get-process *default-dead-pool* snowcam #x4000))) + (set! (-> (the-as snowcam (-> (when gp-1 + (let ((t9-3 (method-of-type snowcam activate))) + (t9-3 (the-as snowcam gp-1) self 'snowcam (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + pov-camera-init-by-other + (new 'static 'vector :x 3411656.8 :y 779689.56 :z -13573010.0 :w 1.0) + *snowcam-sg* + "gearstart" + 0 + self + '() + ) + (-> gp-1 ppointer) + ) + 0 + ) + ) + seq + ) + (the-as uint 0) + ) + ) + 0 + (let ((gp-2 #f)) + (while #t + (let ((s5-1 (new 'stack-no-clear 'vector)) + (f0-1 (+ -1433.6 (-> self orig-trans y))) + ) + (set! (-> s5-1 quad) (-> self root-override trans quad)) + (cond + ((= (-> s5-1 y) f0-1) + (when (not gp-2) + (set! gp-2 #t) + (send-to-all (-> self link) 'notice) + ) + ) + (else + (set! (-> s5-1 y) + (seek-with-smooth (-> self root-override trans y) f0-1 (* 6144.0 (-> *display* seconds-per-frame)) 0.2 204.8) + ) + (TODO-RENAME-30 (-> self root-override) s5-1) + ) + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior snow-switch) rider-post) + ) + +;; failed to figure out what this is: +(defstate snow-switch-idle-down (snow-switch) + :event + snow-switch-event-handler + :code + (behavior () + (set! (-> self pressed?) #t) + (set! (-> self root-override trans quad) (-> self orig-trans quad)) + (set! (-> self root-override trans y) (+ -1433.6 (-> self root-override trans y))) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type snow-switch +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! snow-switch ((obj snow-switch) (arg0 entity-actor)) + (set! (-> obj pressed?) #f) + (set! (-> obj fcell-handle) (the-as handle #f)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 8192.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-switch-sg* '()) + (logior! (-> obj skel status) 1) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (transform-post) + (set! (-> obj orig-trans quad) (-> obj root-override trans quad)) + (let ((s5-2 (task-complete? *game-info* (game-task snow-ball)))) + (set! (-> obj pressed?) s5-2) + (when (not s5-2) + (let ((a0-17 (new 'stack-no-clear 'vector))) + (set! (-> a0-17 quad) (-> obj orig-trans quad)) + (set! (-> a0-17 y) (+ 12288.0 (-> a0-17 y))) + (set! (-> obj fcell-handle) (ppointer->handle (birth-pickup-at-point + a0-17 + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + ) + ) + ) + ) + (if s5-2 + (go snow-switch-idle-down) + (go snow-switch-idle-up) + ) + ) + (none) + ) + +;; definition of type snow-log +(deftype snow-log (process-drawable) + ((root-override collide-shape-moving :offset 112) + (master entity-actor :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + snow-log-activate + snow-log-active + snow-log-hidden + snow-log-wait-for-master + ) + ) + +;; definition for method 3 of type snow-log +(defmethod inspect snow-log ((obj snow-log)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tmaster: ~A~%" (-> obj master)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *snow-log-sg* snow-log + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 5 0 9) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate snow-log-wait-for-master (snow-log) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('trigger) + (go snow-log-activate) + ) + ) + ) + :code + (behavior () + (while #t + (while (let ((v1-0 (-> self master))) + (not (if v1-0 + (-> v1-0 extra process) + ) + ) + ) + (suspend) + ) + (suspend) + (let* ((v1-3 (-> self master)) + (a0-1 (if v1-3 + (-> v1-3 extra process) + ) + ) + ) + (when a0-1 + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'query) + (cond + ((send-event-function a0-1 a1-0) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go snow-log-active) + ) + (else + (go snow-log-hidden) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-log-hidden (snow-log) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go snow-log-activate) + ) + ) + ) + :code + (behavior () + (ja-channel-push! 1 0) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + 0 + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-log-activate (snow-log) + :enter + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (logclear! (-> self draw status) (draw-status drwf01)) + (none) + ) + :exit + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (none) + ) + :trans + (the-as (function none :behavior snow-log) rider-trans) + :code + (behavior () + (activate! *camera-smush-control* 819.2 37 150 1.0 0.99) + (ja-channel-push! 1 0) + (let ((gp-0 #f)) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (not gp-0) (>= (ja-frame-num 0) 5.0)) + (set! gp-0 #t) + (sound-play-by-name (static-sound-name "explosion") (new-sound-id) 409 1371 0 1 #t) + (sound-play-by-name (static-sound-name "snow-spat-short") (new-sound-id) 1024 381 0 1 #t) + ) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (go snow-log-active) + (none) + ) + :post + (the-as (function none :behavior snow-log) rider-post) + ) + +;; failed to figure out what this is: +(defstate snow-log-active (snow-log) + :trans + (the-as (function none :behavior snow-log) rider-trans) + :code + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (logclear! (-> self draw status) (draw-status drwf01)) + (ja-channel-push! 1 22) + (let ((gp-0 #t) + (s5-0 #t) + ) + (while #t + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 0.25) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (let ((f0-4 (ja-aframe-num 0))) + (cond + ((and gp-0 (< f0-4 1.0)) + (set! gp-0 #f) + (set! s5-0 #t) + (sound-play-by-name + (static-sound-name "snow-spat-long") + (new-sound-id) + 870 + (the int (* 1524.0 (rand-vu-float-range -0.2 0.2))) + 0 + 1 + #t + ) + ) + ((and s5-0 (>= f0-4 11.0)) + (set! s5-0 #f) + (set! gp-0 #t) + (sound-play-by-name + (static-sound-name "snow-spat-short") + (new-sound-id) + 870 + (the int (* 1524.0 (rand-vu-float-range -0.2 0.2))) + 0 + 1 + #t + ) + ) + ) + ) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) 0.25) + (joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior snow-log) rider-post) + ) + +;; definition for method 11 of type snow-log +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! snow-log ((obj snow-log) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 20480.0 0.0 36864.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) 11264.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-log-sg* '()) + (logior! (-> obj skel status) 1) + (logior! (-> obj draw status) (draw-status drwf01)) + (set! (-> obj root-override trans x) (+ -1024.0 (-> obj root-override trans x))) + (set! (-> obj root-override trans y) (+ -4915.2 (-> obj root-override trans y))) + (set-vector! (-> obj root-override scale) 1.5 1.0 1.5 1.0) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (set! (-> obj master) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (go snow-log-wait-for-master) + (none) + ) + +;; definition of type snow-log-button +(deftype snow-log-button (process-drawable) + ((root-override collide-shape-moving :offset 112) + (log entity-actor :offset-assert 176) + (orig-trans vector :inline :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xd0 + :flag-assert #x14006000d0 + (:states + snow-log-button-activate + snow-log-button-idle-down + snow-log-button-idle-up + ) + ) + +;; definition for method 3 of type snow-log-button +(defmethod inspect snow-log-button ((obj snow-log-button)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tlog: ~A~%" (-> obj log)) + (format #t "~T~Torig-trans: #~%" (-> obj orig-trans)) + obj + ) + +;; definition for function snow-log-button-event-handler +;; INFO: Return type mismatch basic vs object. +(defbehavior snow-log-button-event-handler snow-log-button ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-2 basic)) + (case arg2 + (('touch 'bonk 'attack) + (when (and + (= (-> arg0 type) target) + (not (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete)))) + (>= 6553.6 (vector-vector-xz-distance (target-pos 0) (-> self root-override trans))) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (go snow-log-button-activate) + (return (the-as object #f)) + v0-2 + ) + ) + (('query) + (when (= (-> arg0 type) snow-log) + (return (the-as + object + (and (-> self entity) (logtest? (-> self entity extra perm status) (entity-perm-status complete))) + ) + ) + v0-2 + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate snow-log-button-idle-up (snow-log-button) + :event + snow-log-button-event-handler + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate snow-log-button-activate (snow-log-button) + :event + snow-log-button-event-handler + :exit + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (none) + ) + :trans + (the-as (function none :behavior snow-log-button) rider-trans) + :code + (behavior () + (sound-play-by-name (static-sound-name "prec-button1") (new-sound-id) 1024 0 0 1 #t) + (while #t + (let ((f30-0 (+ -1433.6 (-> self orig-trans y)))) + (when (= (-> self root-override trans y) f30-0) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'trigger) + (let ((t9-2 send-event-function) + (v1-4 (-> self log)) + ) + (t9-2 + (if v1-4 + (-> v1-4 extra process) + ) + a1-1 + ) + ) + ) + (go snow-log-button-idle-down) + ) + (set! (-> self root-override trans y) (seek-with-smooth + (-> self root-override trans y) + f30-0 + (* 12288.0 (-> *display* seconds-per-frame)) + 0.2 + 204.8 + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior snow-log-button) rider-post) + ) + +;; failed to figure out what this is: +(defstate snow-log-button-idle-down (snow-log-button) + :event + snow-log-button-event-handler + :code + (behavior () + (set! (-> self root-override trans quad) (-> self orig-trans quad)) + (set! (-> self root-override trans y) (+ -1433.6 (-> self root-override trans y))) + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type snow-log-button +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! snow-log-button ((obj snow-log-button) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 8192.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *snow-switch-sg* '()) + (logior! (-> obj skel status) 1) + (ja-channel-push! 1 0) + (let ((s4-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (transform-post) + (set! (-> obj orig-trans quad) (-> obj root-override trans quad)) + (set! (-> obj log) (entity-actor-lookup arg0 'alt-actor 0)) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go snow-log-button-idle-down) + (go snow-log-button-idle-up) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/sunken-water_REF.gc b/test/decompiler/reference/levels/sunken/sunken-water_REF.gc index b2262cdccf..0d824e8274 100644 --- a/test/decompiler/reference/levels/sunken/sunken-water_REF.gc +++ b/test/decompiler/reference/levels/sunken/sunken-water_REF.gc @@ -280,7 +280,7 @@ ) ;; definition for method 22 of type sunken-water -;; INFO: Return type mismatch ripple-merc-query vs ripple-wave-set. +;; INFO: Return type mismatch ripple-merc-query vs none. ;; Used lq/sq (defmethod TODO-RENAME-22 sunken-water ((obj sunken-water)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) @@ -305,9 +305,7 @@ (set! (-> s5-0 close-fade-dist) 163840.0) (set! (-> s5-0 far-fade-dist) 245760.0) (set! (-> s5-0 waveform) ripple-for-sunken-water) - (let ((v0-2 (new 'process 'ripple-merc-query 100))) - (set! (-> s5-0 query) v0-2) - (the-as ripple-wave-set v0-2) - ) + (set! (-> s5-0 query) (new 'process 'ripple-merc-query 100)) ) + (none) ) diff --git a/test/decompiler/reference/levels/training/training-obs_REF.gc b/test/decompiler/reference/levels/training/training-obs_REF.gc new file mode 100644 index 0000000000..9394ca992f --- /dev/null +++ b/test/decompiler/reference/levels/training/training-obs_REF.gc @@ -0,0 +1,1403 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type training-water +(deftype training-water (water-anim) + () + :heap-base #x70 + :method-count-assert 30 + :size-assert #xdc + :flag-assert #x1e007000dc + ) + +;; definition for method 3 of type training-water +(defmethod inspect training-water ((obj training-water)) + (let ((t9-0 (method-of-type water-anim inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for symbol ripple-for-training-water, type ripple-wave-set +(define ripple-for-training-water (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +;; definition for method 22 of type training-water +;; INFO: Return type mismatch ripple-wave-set vs none. +(defmethod TODO-RENAME-22 training-water ((obj training-water)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (let ((v1-2 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) v1-2) + (set-vector! (-> obj draw color-mult) 0.01 0.45 0.5 0.75) + (set! (-> v1-2 global-scale) 3072.0) + (set! (-> v1-2 close-fade-dist) 163840.0) + (set! (-> v1-2 far-fade-dist) 245760.0) + (set! (-> v1-2 waveform) ripple-for-training-water) + ) + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *training-cam-sg* trainingcam + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 80) + :longest-edge (meters 0) + ) + +;; definition of type training-cam +(deftype training-cam (process) + ((root trsq :offset-assert 112) + (range meters :offset-assert 116) + (index int32 :offset-assert 120) + (state-time uint64 :offset-assert 128) + ) + :heap-base #x20 + :method-count-assert 15 + :size-assert #x88 + :flag-assert #xf00200088 + (:methods + (idle () _type_ :state 14) + ) + ) + +;; definition for method 3 of type training-cam +(defmethod inspect training-cam ((obj training-cam)) + (let ((t9-0 (method-of-type process inspect))) + (t9-0 obj) + ) + (format #t "~T~Troot: ~A~%" (-> obj root)) + (format #t "~T~Trange: (meters ~m)~%" (-> obj range)) + (format #t "~T~Tindex: ~D~%" (-> obj index)) + (format #t "~T~Tstate-time: ~D~%" (-> obj state-time)) + obj + ) + +;; definition for method 7 of type training-cam +;; INFO: Return type mismatch process vs training-cam. +(defmethod relocate training-cam ((obj training-cam) (arg0 int)) + (if (nonzero? (-> obj root)) + (&+! (-> obj root) arg0) + ) + (the-as training-cam ((method-of-type process relocate) obj arg0)) + ) + +;; failed to figure out what this is: +(defstate idle (training-cam) + :virtual #t + :code + (behavior () + (while #t + (when (and + *target* + (< (vector-vector-distance (target-pos 0) (-> self root trans)) (-> self range)) + (-> *setting-control* current play-hints) + (and + (< 0.0 (-> *setting-control* current dialog-volume)) + (let ((a0-3 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (or (not a0-3) (zero? (logand (-> a0-3 extra perm status) (entity-perm-status dead)))) + ) + ) + ) + (when (!= (-> self index) 6) + (while (and + *target* + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + (suspend) + ) + (set! (-> self state-time) (the-as uint (-> *display* base-frame-counter))) + (process-grab? *target*) + (process-entity-status! self (entity-perm-status bit-3) #t) + (until (not (or (-> *setting-control* current talking) (or + (-> *setting-control* current spooling) + (-> *setting-control* current hint) + (-> *setting-control* current ambient) + ) + ) + ) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (let* ((a0-15 *setting-control*) + (t9-6 (method-of-object a0-15 set-setting!)) + (a2-3 'movie) + (a3-1 (process->ppointer self)) + ) + (t9-6 a0-15 self a2-3 (the-as symbol a3-1) 0.0 0) + ) + (copy-settings-from-target! *setting-control*) + (dotimes (gp-1 2) + (while (or + (-> *setting-control* current talking) + (-> *setting-control* current spooling) + (-> *setting-control* current hint) + (-> *setting-control* current ambient) + *progress-process* + ) + (suspend) + ) + ) + (while (< (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) 300) + (suspend) + ) + (clear-pending-settings-from-process *setting-control* self 'movie) + (copy-settings-from-target! *setting-control*) + (suspend) + (suspend) + ) + (process-release? *target*) + ) + (when (-> *setting-control* current play-hints) + (let ((v1-61 (-> self index))) + (cond + ((zero? v1-61) + (level-hint-spawn + (game-text-id training-precursor-orbs) + "asstvb41" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-2 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-2 + (let ((t9-13 (method-of-type pov-camera activate))) + (t9-13 (the-as pov-camera gp-2) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-2 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "orbcam" + 0 + #f + '() + ) + (-> gp-2 ppointer) + ) + ) + ) + ((= v1-61 1) + (level-hint-spawn + (game-text-id training-power-cells) + "asstvb42" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-3 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-3 + (let ((t9-17 (method-of-type pov-camera activate))) + (t9-17 (the-as pov-camera gp-3) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-3 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "fuelcellcam" + 0 + #f + '() + ) + (-> gp-3 ppointer) + ) + ) + ) + ((= v1-61 2) + (level-hint-spawn + (game-text-id training-eco-blue) + "sagevb22" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-4 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-4 + (let ((t9-21 (method-of-type pov-camera activate))) + (t9-21 (the-as pov-camera gp-4) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-4 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "ecocam" + 0 + #f + '() + ) + (-> gp-4 ppointer) + ) + ) + ) + ((= v1-61 3) + (level-hint-spawn + (game-text-id training-precursor-door) + "sagevb24" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-5 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-5 + (let ((t9-25 (method-of-type pov-camera activate))) + (t9-25 (the-as pov-camera gp-5) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-5 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "precursordoorcam" + 0 + #f + '() + ) + (-> gp-5 ppointer) + ) + ) + ) + ((= v1-61 4) + (level-hint-spawn + (game-text-id training-blue-eco-vent) + "asstvb48" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-6 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-6 + (let ((t9-29 (method-of-type pov-camera activate))) + (t9-29 (the-as pov-camera gp-6) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-6 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "ecoventcam" + 0 + #f + '() + ) + (-> gp-6 ppointer) + ) + ) + ) + ((= v1-61 5) + (level-hint-spawn + (game-text-id training-eco-green) + "sagevb21" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-7 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-7 + (let ((t9-33 (method-of-type pov-camera activate))) + (t9-33 (the-as pov-camera gp-7) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-7 + pov-camera-init-by-other + (-> self entity extra trans) + *training-cam-sg* + "greenecocam" + 0 + #f + '() + ) + (-> gp-7 ppointer) + ) + ) + ) + ((= v1-61 6) + (when (not (task-complete? *game-info* (game-task training-climb))) + (clear-text-seen! *game-info* (game-text-id training-double-jump)) + (level-hint-spawn + (game-text-id training-double-jump) + "sagevb27" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-8 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-8) 9000) + (suspend) + ) + ) + (process-entity-status! self (entity-perm-status bit-3) #f) + (go-virtual idle) + ) + ) + ) + ) + (while (-> self child) + (suspend) + ) + ) + (let ((a0-61 (-> self entity))) + (if (when a0-61 + (let ((a0-62 (-> a0-61 extra perm task))) + (if a0-62 + (= a0-62 (game-task none)) + ) + ) + ) + (set! (-> self entity extra perm task) (game-task complete)) + ) + ) + (process-entity-status! self (entity-perm-status dead) #t) + (process-entity-status! self (entity-perm-status bit-3) #f) + (deactivate self) + ) + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type training-cam +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! training-cam ((obj training-cam) (arg0 entity-actor)) + "Copy defaults from the entity." + (logior! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj root) (new 'process 'trsq)) + (set! (-> obj root trans quad) (-> arg0 extra trans quad)) + (quaternion-copy! (-> obj root quat) (-> arg0 quat)) + (vector-identity! (-> obj root scale)) + (set! (-> obj range) (res-lump-float arg0 'cam-notice-dist :default 81920.0)) + (set! (-> obj index) (res-lump-value arg0 'index int)) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type tra-pontoon +(deftype tra-pontoon (rigid-body-platform) + ((anchor-point vector :inline :offset-assert 736) + ) + :heap-base #x280 + :method-count-assert 35 + :size-assert #x2f0 + :flag-assert #x23028002f0 + ) + +;; definition for method 3 of type tra-pontoon +(defmethod inspect tra-pontoon ((obj tra-pontoon)) + (let ((t9-0 (method-of-type rigid-body-platform inspect))) + (t9-0 obj) + ) + (format #t "~T~Tanchor-point: #~%" (-> obj anchor-point)) + obj + ) + +;; definition for method 11 of type tra-pontoon +;; INFO: Return type mismatch int vs none. +(defmethod init-from-entity! tra-pontoon ((obj tra-pontoon) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (TODO-RENAME-30 obj) + (process-drawable-from-entity! obj arg0) + (TODO-RENAME-31 obj) + (go (method-of-object obj rigid-body-platform-idle)) + 0 + (none) + ) + +;; definition for method 23 of type tra-pontoon +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-23 tra-pontoon ((obj tra-pontoon) (arg0 float)) + ((the-as (function rigid-body-platform float none) (find-parent-method tra-pontoon 23)) obj arg0) + (TODO-RENAME-27 obj (-> obj anchor-point)) + 0 + (none) + ) + +;; definition for symbol *tra-pontoon-constants*, type rigid-body-platform-constants +(define *tra-pontoon-constants* (new 'static 'rigid-body-platform-constants + :drag-factor 4.0 + :buoyancy-factor 3.0 + :max-buoyancy-depth (meters 3.0) + :gravity-factor 1.0 + :gravity (meters 80.0) + :player-weight (meters 35.0) + :player-bonk-factor 1.0 + :player-dive-factor 1.0 + :player-force-distance (meters 1000.0) + :player-force-clamp (meters 1000000.0) + :player-force-timeout #x1e + :explosion-force (meters 1000.0) + :linear-damping 0.98 + :angular-damping 0.98 + :control-point-count 4 + :mass 2.0 + :inertial-tensor-x (meters 2.5) + :inertial-tensor-y (meters 2.0) + :inertial-tensor-z (meters 3.2) + :idle-distance (meters 50.0) + :platform #t + :sound-name "pontoonten" + ) + ) + +;; failed to figure out what this is: +(defskelgroup *tra-pontoon-sg* pontoonfive + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +;; definition for method 30 of type tra-pontoon +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-30 tra-pontoon ((obj tra-pontoon)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s5-0 1) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 3)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 18432.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-overlay) s5-0) + ) + 0 + (none) + ) + +;; definition for method 31 of type tra-pontoon +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-31 tra-pontoon ((obj tra-pontoon)) + (initialize-skeleton obj *tra-pontoon-sg* '()) + (TODO-RENAME-29 obj *tra-pontoon-constants*) + (set! (-> obj float-height-offset) 6144.0) + (set! (-> obj root-overlay nav-radius) 20480.0) + (let ((v1-6 (-> obj control-point-array data))) + (set! (-> v1-6 0 local-pos x) 9216.0) + (set! (-> v1-6 0 local-pos y) 0.0) + (set! (-> v1-6 0 local-pos z) 12083.2) + (set! (-> v1-6 0 local-pos w) 1.0) + ) + (let ((v1-8 (-> obj control-point-array data 1))) + (set! (-> v1-8 local-pos x) 9216.0) + (set! (-> v1-8 local-pos y) 0.0) + (set! (-> v1-8 local-pos z) -12083.2) + (set! (-> v1-8 local-pos w) 1.0) + ) + (let ((v1-10 (-> obj control-point-array data 2))) + (set! (-> v1-10 local-pos x) -9216.0) + (set! (-> v1-10 local-pos y) 0.0) + (set! (-> v1-10 local-pos z) -12083.2) + (set! (-> v1-10 local-pos w) 1.0) + ) + (let ((v1-12 (-> obj control-point-array data 3))) + (set! (-> v1-12 local-pos x) -9216.0) + (set! (-> v1-12 local-pos y) 0.0) + (set! (-> v1-12 local-pos z) 12083.2) + (set! (-> v1-12 local-pos w) 1.0) + ) + (set! (-> obj anchor-point quad) (-> obj root-overlay trans quad)) + (nav-mesh-connect obj (-> obj root-overlay) (the-as nav-control #f)) + 0 + (none) + ) + +;; definition of type tra-iris-door +(deftype tra-iris-door (eco-door) + () + :heap-base #xa0 + :method-count-assert 27 + :size-assert #x104 + :flag-assert #x1b00a00104 + ) + +;; definition for method 3 of type tra-iris-door +(defmethod inspect tra-iris-door ((obj tra-iris-door)) + (let ((t9-0 (method-of-type eco-door inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *tra-iris-door-sg* jng-iris-door + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 8) + :longest-edge (meters 0) + ) + +;; definition for method 24 of type tra-iris-door +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-24 tra-iris-door ((obj tra-iris-door)) + (let ((s5-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 16384.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 25 of type tra-iris-door +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-25 tra-iris-door ((obj tra-iris-door)) + (initialize-skeleton obj *tra-iris-door-sg* '()) + (set! (-> obj open-distance) 32768.0) + (set! (-> obj close-distance) 49152.0) + (dummy-47 (-> obj root-override)) + 0 + (none) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 143) (new 'static 'sparticle-launch-group + :length 5 + :duration #xf + :linger-duration #x5dc + :name "group-scarecrow-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 5 + (sp-item 2912) + (sp-item 2913) + (sp-item 2914) + (sp-item 2915) + (sp-item 2916) + ) + :bounds (new 'static 'sphere :w 4096.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2912) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 2.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (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 192.0 32.0 1.0) + (sp-rnd-flt spt-g 160.0 32.0 1.0) + (sp-rnd-flt spt-b 128.0 32.0 1.0) + (sp-rnd-flt spt-a 8.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.10666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.011904762)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-accel-y 2.7306666) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 420) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int-plain-rnd spt-next-time 30 59 1) + (sp-launcher-by-id spt-next-launcher 2917) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2917) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a -0.4) + (sp-int-plain-rnd spt-next-time 30 29 1) + (sp-launcher-by-id spt-next-launcher 2918) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2918) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.04) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2913) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters 2.5)) + (sp-rnd-flt spt-scale-x (meters 6.0) (meters 3.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.3) (meters 1.0) 1.0) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 2.1333334) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 15) + (sp-launcher-by-id spt-next-launcher 2919) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2919) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -2.1333334) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2914) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 2.5) + (sp-flt spt-y (meters 1.5)) + (sp-flt spt-scale-x (meters 12.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 196.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 196.0) + (sp-flt spt-a 48.0) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2915) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :index #x6 :page #x2)) + (sp-rnd-flt spt-num 8.0 8.0 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (meters 2.5) (meters 1.5) 1.0) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.00048828125) 2457.6) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.3)) + (sp-flt spt-r 160.0) + (sp-flt spt-g 160.0) + (sp-flt spt-b 160.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.06666667) 1.0) + (sp-flt spt-rotvel-x (degrees 1.2)) + (sp-flt spt-rotvel-y (degrees 2.4)) + (sp-rnd-int-flt spt-rotvel-z (degrees 0.0) 2 436.90668) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2920) + (sp-rnd-flt spt-conerot-x (degrees 40.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2920) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-scalevel-x (meters -0.0033333334)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -3.4) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2916) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :index #x5 :page #x2)) + (sp-rnd-flt spt-num 8.0 8.0 1.0) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-y (meters 2.5) (meters 1.5) 1.0) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-int-flt spt-scale-x (meters 0.3) 1 4096.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.3)) + (sp-flt spt-r 100.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 100.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.06666667) 1.0) + (sp-flt spt-rotvel-x (degrees 1.2)) + (sp-flt spt-rotvel-y (degrees 2.4)) + (sp-rnd-int-flt spt-rotvel-z (degrees 0.0) 3 436.90668) + (sp-flt spt-accel-y -13.653334) + (sp-flt spt-friction 0.97) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12 bit14) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 2920) + (sp-rnd-flt spt-conerot-x (degrees 40.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 144) (new 'static 'sparticle-launch-group + :length 1 + :duration #xf + :linger-duration #x5dc + :name "group-scarecrow-joint-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2912)) + :bounds (new 'static 'sphere :w 4096.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 145) (new 'static 'sparticle-launch-group + :length 1 + :duration #xf + :linger-duration #x5dc + :name "group-scarecrow-hit" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2913)) + :bounds (new 'static 'sphere :w 4096.0) + ) + ) + +;; definition of type scarecrow-a +(deftype scarecrow-a (process-drawable) + ((root-override collide-shape :offset 112) + (incomming-attack-id uint64 :offset-assert 176) + (intersection vector :inline :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xd0 + :flag-assert #x16006000d0 + (:methods + (idle () _type_ :state 20) + (hit (float vector symbol) _type_ :state 21) + ) + ) + +;; definition for method 3 of type scarecrow-a +(defmethod inspect scarecrow-a ((obj scarecrow-a)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tincomming-attack-id: ~D~%" (-> obj incomming-attack-id)) + (format #t "~T~Tintersection: ~`vector`P~%" (-> obj intersection)) + obj + ) + +;; definition of type scarecrow-b +(deftype scarecrow-b (process-drawable) + ((root-override collide-shape :offset 112) + (incomming-attack-id uint64 :offset-assert 176) + (intersection vector :inline :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xd0 + :flag-assert #x16006000d0 + (:methods + (idle () _type_ :state 20) + (hit (float vector symbol) _type_ :state 21) + ) + ) + +;; definition for method 3 of type scarecrow-b +(defmethod inspect scarecrow-b ((obj scarecrow-b)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tincomming-attack-id: ~D~%" (-> obj incomming-attack-id)) + (format #t "~T~Tintersection: ~`vector`P~%" (-> obj intersection)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *scarecrow-a-sg* scarecrow-a + 0 + 5 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 2.5 0 3) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *scarecrow-a-break-sg* scarecrow-a + 0 + 5 + ((4 (meters 999999))) + :bounds (static-spherem 0 -15 0 50) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate idle (scarecrow-a) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'attack) + (let* ((s3-0 (-> arg3 param 2)) + (s4-0 (get-task-control (game-task training-gimmie))) + (v1-2 (get-reminder s4-0 0)) + ) + (when (!= s3-0 (-> self incomming-attack-id)) + (set! (-> self incomming-attack-id) s3-0) + (cond + ((= (-> self type) scarecrow-b) + ) + ((and (= (-> arg3 param 1) 'spin) (zero? v1-2)) + (save-reminder s4-0 1 0) + 1 + ) + ((and (= (-> arg3 param 1) 'punch) (= v1-2 1)) + (save-reminder s4-0 2 0) + 2 + ) + ((zero? v1-2) + ) + ((= v1-2 1) + ) + ) + (let* ((s4-1 arg0) + (v1-14 (if (and (nonzero? s4-1) (type-type? (-> s4-1 type) process-drawable)) + s4-1 + ) + ) + (f30-0 + (cond + (v1-14 + (let ((s4-2 (-> self root-override)) + (s2-0 (-> (the-as process-drawable v1-14) root trans)) + ) + (deg-diff (y-angle s4-2) (vector-y-angle (vector-! (new 'stack-no-clear 'vector) s2-0 (-> s4-2 trans)))) + ) + ) + (else + 0.0 + ) + ) + ) + (a0-24 ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint -1) + ) + ) + ) + (go-virtual + hit + f30-0 + (if a0-24 + (dummy-11 a0-24 (-> self intersection)) + (target-pos 0) + ) + (the-as symbol (and + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 2) + ) + (or + (= (-> self type) scarecrow-a) + (and + (= (-> arg0 type) target) + (logtest? (-> (the-as target arg0) control unknown-surface00 flags) 2048) + (zero? (logand (-> (the-as target arg0) control status) 1)) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ((= v1-0 'touch) + (dummy-55 (-> self root-override) arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 0.7 6144.0 16384.0) + ) + ) + ) + ) + ) + :trans + (behavior () + (if (and *target* (>= 40960.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (get-reminder (get-task-control (game-task training-gimmie)) 0) + ) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 36) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior scarecrow-a) ja-post) + ) + +;; failed to figure out what this is: +(defstate hit (scarecrow-a) + :virtual #t + :code + (behavior ((arg0 float) (arg1 vector) (arg2 symbol)) + (when (not arg2) + (dummy-10 (-> self skel effect) 'group-scarecrow-hit 4.0 -1) + (ja-channel-push! 1 21) + (cond + ((< (fabs arg0) 8192.0) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((and (< 8192.0 arg0) (< arg0 24576.0)) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (else + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) (the float (+ (-> a0-10 frame-group data 0 length) -1))) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (go-virtual idle) + ) + (clear-collide-with-as (-> self root-override)) + (dummy-10 (-> self skel effect) 'group-scarecrow-joint-explode 12.0 -1) + (dummy-10 (-> self skel effect) 'group-scarecrow-joint-explode 20.0 -1) + (dummy-10 (-> self skel effect) 'group-scarecrow-explode 4.0 -1) + (sound-play-by-name (static-sound-name "break-dummy") (new-sound-id) 1024 0 0 1 #t) + (ja-channel-set! 0) + (let ((s5-2 (new 'stack 'joint-exploder-tuning 1))) + (set! (-> s5-2 duration) (the-as uint 450)) + (set! (-> s5-2 gravity) -327680.0) + (set! (-> s5-2 fountain-rand-transv-hi x) 32768.0) + (set! (-> s5-2 fountain-rand-transv-hi y) 81920.0) + (set! (-> s5-2 fountain-rand-transv-hi z) 20480.0) + (set! (-> s5-2 fountain-rand-transv-hi w) 49152.0) + (set! (-> s5-2 fountain-rand-transv-lo quad) (-> arg1 quad)) + (let ((gp-1 (get-process *default-dead-pool* joint-exploder #x4000))) + (when gp-1 + (let ((t9-21 (method-of-type joint-exploder activate))) + (t9-21 (the-as joint-exploder gp-1) self 'joint-exploder (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + joint-exploder-init-by-other + *scarecrow-a-break-sg* + 5 + s5-2 + (new 'static 'joint-exploder-static-params + :joints + (new + 'static + 'boxed-array + :type joint-exploder-static-joint-params :length 10 :allocated-length 10 + (new 'static 'joint-exploder-static-joint-params :joint-index 12) + (new 'static 'joint-exploder-static-joint-params :joint-index 10) + (new 'static 'joint-exploder-static-joint-params :joint-index 20) + (new 'static 'joint-exploder-static-joint-params :joint-index 4) + (new 'static 'joint-exploder-static-joint-params :joint-index 5) + (new 'static 'joint-exploder-static-joint-params :joint-index 11) + (new 'static 'joint-exploder-static-joint-params :joint-index 9) + (new 'static 'joint-exploder-static-joint-params :joint-index 7) + (new 'static 'joint-exploder-static-joint-params :joint-index 14) + (new 'static 'joint-exploder-static-joint-params :joint-index 13) + ) + ) + ) + (-> gp-1 ppointer) + ) + ) + ) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + (none) + ) + :post + (the-as (function none :behavior scarecrow-a) ja-post) + ) + +;; definition for method 11 of type scarecrow-a +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! scarecrow-a ((obj scarecrow-a) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 10240.0 0.0 12288.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 1) + (set-vector! (-> s2-0 local-sphere) 0.0 7372.8 0.0 7372.8) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 1) + (set-vector! (-> s2-1 local-sphere) 0.0 12288.0 0.0 7372.8) + (append-prim s3-0 s2-1) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *scarecrow-a-sg* '()) + (go (method-of-object obj idle)) + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *scarecrow-b-sg* scarecrow-b + 0 + 5 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 3.5 0 3.8) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *scarecrow-b-break-sg* scarecrow-b + 0 + 5 + ((4 (meters 999999))) + :bounds (static-spherem 0 -15 0 50) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate idle (scarecrow-b) + :virtual #t + :event + (-> (method-of-type scarecrow-a idle) event) + :code + (behavior () + (ja-channel-push! 1 36) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior scarecrow-b) ja-post) + ) + +;; failed to figure out what this is: +(defstate hit (scarecrow-b) + :virtual #t + :code + (behavior ((arg0 float) (arg1 vector) (arg2 symbol)) + (when (not arg2) + (dummy-10 (-> self skel effect) 'group-scarecrow-hit 4.0 -1) + (ja-channel-push! 1 21) + (cond + ((< (fabs arg0) 8192.0) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((and (< 8192.0 arg0) (< arg0 24576.0)) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (else + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) (the float (+ (-> a0-10 frame-group data 0 length) -1))) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (go-virtual idle) + ) + (clear-collide-with-as (-> self root-override)) + (dummy-10 (-> self skel effect) 'group-scarecrow-joint-explode 12.0 -1) + (dummy-10 (-> self skel effect) 'group-scarecrow-joint-explode 21.0 -1) + (dummy-10 (-> self skel effect) 'group-scarecrow-explode 4.0 -1) + (sound-play-by-name (static-sound-name "break-dummy") (new-sound-id) 1024 0 0 1 #t) + (ja-channel-set! 0) + (let ((s5-2 (new 'stack 'joint-exploder-tuning 1))) + (set! (-> s5-2 duration) (the-as uint 450)) + (set! (-> s5-2 fountain-rand-transv-hi x) 32768.0) + (set! (-> s5-2 fountain-rand-transv-hi y) 81920.0) + (set! (-> s5-2 fountain-rand-transv-hi z) 40960.0) + (set! (-> s5-2 fountain-rand-transv-hi w) 102400.0) + (set! (-> s5-2 fountain-rand-transv-lo quad) (-> arg1 quad)) + (let ((gp-1 (get-process *default-dead-pool* joint-exploder #x4000))) + (when gp-1 + (let ((t9-21 (method-of-type joint-exploder activate))) + (t9-21 (the-as joint-exploder gp-1) self 'joint-exploder (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + joint-exploder-init-by-other + *scarecrow-b-break-sg* + 5 + s5-2 + (new 'static 'joint-exploder-static-params + :joints + (new + 'static + 'boxed-array + :type joint-exploder-static-joint-params :length 14 :allocated-length 14 + (new 'static 'joint-exploder-static-joint-params :joint-index 12) + (new 'static 'joint-exploder-static-joint-params :joint-index 10) + (new 'static 'joint-exploder-static-joint-params :joint-index 21) + (new 'static 'joint-exploder-static-joint-params :joint-index 4) + (new 'static 'joint-exploder-static-joint-params :joint-index 5) + (new 'static 'joint-exploder-static-joint-params :joint-index 11) + (new 'static 'joint-exploder-static-joint-params :joint-index 9) + (new 'static 'joint-exploder-static-joint-params :joint-index 7) + (new 'static 'joint-exploder-static-joint-params :joint-index 14) + (new 'static 'joint-exploder-static-joint-params :joint-index 13) + (new 'static 'joint-exploder-static-joint-params :joint-index 14) + (new 'static 'joint-exploder-static-joint-params :joint-index 13) + (new 'static 'joint-exploder-static-joint-params :joint-index 16) + (new 'static 'joint-exploder-static-joint-params :joint-index 15) + ) + ) + ) + (-> gp-1 ppointer) + ) + ) + ) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + (none) + ) + :post + (the-as (function none :behavior scarecrow-b) ja-post) + ) + +;; definition for method 11 of type scarecrow-b +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! scarecrow-b ((obj scarecrow-b) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 14336.0 0.0 15564.8) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set-vector! (-> s2-0 local-sphere) 0.0 4096.0 0.0 4096.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set-vector! (-> s2-1 local-sphere) 0.0 14745.6 0.0 6553.6) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 2)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 1) + (set-vector! (-> s2-2 local-sphere) 0.0 20480.0 0.0 6553.6) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *scarecrow-b-sg* '()) + (go (method-of-object obj idle)) + (none) + ) diff --git a/test/decompiler/reference/levels/village1/village-obs-VI1_REF.gc b/test/decompiler/reference/levels/village1/village-obs-VI1_REF.gc index 1074668058..c07f385163 100644 --- a/test/decompiler/reference/levels/village1/village-obs-VI1_REF.gc +++ b/test/decompiler/reference/levels/village1/village-obs-VI1_REF.gc @@ -1352,6 +1352,7 @@ ) ;; definition for method 22 of type villagea-water +;; INFO: Return type mismatch ripple-wave-set vs none. (defmethod TODO-RENAME-22 villagea-water ((obj villagea-water)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) (t9-0 obj) @@ -1362,9 +1363,7 @@ (set! (-> v1-2 global-scale) 3072.0) (set! (-> v1-2 close-fade-dist) 163840.0) (set! (-> v1-2 far-fade-dist) 245760.0) - (let ((v0-2 ripple-for-villagea-water)) - (set! (-> v1-2 waveform) v0-2) - v0-2 - ) + (set! (-> v1-2 waveform) ripple-for-villagea-water) ) + (none) ) diff --git a/test/decompiler/reference/levels/village2/village2-obs_REF.gc b/test/decompiler/reference/levels/village2/village2-obs_REF.gc index c92d2a7454..c6cbd23e0b 100644 --- a/test/decompiler/reference/levels/village2/village2-obs_REF.gc +++ b/test/decompiler/reference/levels/village2/village2-obs_REF.gc @@ -2077,6 +2077,7 @@ ) ;; definition for method 22 of type villageb-water +;; INFO: Return type mismatch ripple-wave-set vs none. (defmethod TODO-RENAME-22 villageb-water ((obj villageb-water)) (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) (t9-0 obj) @@ -2087,9 +2088,7 @@ (set! (-> v1-2 global-scale) 3072.0) (set! (-> v1-2 close-fade-dist) 163840.0) (set! (-> v1-2 far-fade-dist) 245760.0) - (let ((v0-2 ripple-for-villageb-water)) - (set! (-> v1-2 waveform) v0-2) - v0-2 - ) + (set! (-> v1-2 waveform) ripple-for-villageb-water) ) + (none) ) diff --git a/test/decompiler/reference/levels/village_common/villagep-obs_REF.gc b/test/decompiler/reference/levels/village_common/villagep-obs_REF.gc new file mode 100644 index 0000000000..b90c1d115f --- /dev/null +++ b/test/decompiler/reference/levels/village_common/villagep-obs_REF.gc @@ -0,0 +1,1333 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type warpgate +(deftype warpgate (process-hidden) + () + :method-count-assert 15 + :size-assert #x70 + :flag-assert #xf00000070 + ) + +;; definition for method 3 of type warpgate +(defmethod inspect warpgate ((obj warpgate)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tname: ~A~%" (-> obj name)) + (format #t "~Tmask: ~D~%" (-> obj mask)) + (format #t "~Tparent: #x~X~%" (-> obj parent)) + (format #t "~Tbrother: #x~X~%" (-> obj brother)) + (format #t "~Tchild: #x~X~%" (-> obj child)) + (format #t "~Tppointer: #x~X~%" (-> obj ppointer)) + (format #t "~Tself: ~A~%" (-> obj self)) + (format #t "~Tpool: ~A~%" (-> obj pool)) + (format #t "~Tstatus: ~A~%" (-> obj status)) + (format #t "~Tpid: ~D~%" (-> obj pid)) + (format #t "~Tmain-thread: ~A~%" (-> obj main-thread)) + (format #t "~Ttop-thread: ~A~%" (-> obj top-thread)) + (format #t "~Tentity: ~A~%" (-> obj entity)) + (format #t "~Tstate: ~A~%" (-> obj state)) + (format #t "~Ttrans-hook: ~A~%" (-> obj trans-hook)) + (format #t "~Tpost-hook: ~A~%" (-> obj post-hook)) + (format #t "~Tevent-hook: ~A~%" (-> obj event-hook)) + (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~Tnext-state: ~A~%" (-> obj next-state)) + (format #t "~Theap-base: #x~X~%" (-> obj heap-base)) + (format #t "~Theap-top: #x~X~%" (-> obj heap-top)) + (format #t "~Theap-cur: #x~X~%" (-> obj heap-cur)) + (format #t "~Tstack-frame-top: ~A~%" (-> obj stack-frame-top)) + (format #t "~Theap: #~%" (&-> obj heap-base)) + (format #t "~Tconnection-list: ~`'connectable`P~%" (-> obj connection-list)) + (format #t "~Tstack[0] @ #x~X~%" (-> obj stack)) + obj + ) + +;; failed to figure out what this is: +(defstate target-warp-in (target) + :event + target-generic-event-handler + :enter + (-> target-warp-out enter) + :exit + (-> target-warp-out exit) + :trans + (behavior () + (set! (-> self control transv x) + (- (-> self control unknown-vector103 x) (-> self control unknown-vector102 x)) + ) + (set! (-> self control transv z) + (- (-> self control unknown-vector103 z) (-> self control unknown-vector102 z)) + ) + (vector-xz-normalize! (-> self control transv) 49152.0) + (if (logtest? (-> self control status) 1) + (go target-hit-ground #f) + ) + (none) + ) + :code + (behavior ((arg0 vector) (arg1 vector)) + (clear-collide-with-as (-> self control)) + (ja-channel-set! 0) + (vector-reset! (-> self control transv)) + (TODO-RENAME-30 (-> self control) (-> self control unknown-vector102)) + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 300) + (suspend) + ) + ) + (let ((gp-1 (new-stack-vector0))) + (let ((f0-1 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))) + 0.0 + (vector-! gp-1 (-> self control transv) (vector-float*! gp-1 (-> self control dynam gravity-normal) f0-1)) + ) + (let* ((f0-2 (vector-length gp-1)) + (f1-1 f0-2) + (f2-3 + (- (sqrtf (* 8192.0 (-> self control dynam gravity-length))) + (* 0.008333334 (- (-> self control dynam gravity-length))) + ) + ) + ) + (vector+! + (-> self control transv) + (vector-float*! (-> self control transv) (-> self control dynam gravity-normal) f2-3) + (vector-float*! gp-1 gp-1 (/ f0-2 f1-1)) + ) + ) + ) + (set-heading-vec! (-> self control) (-> self control transv)) + (rot->dir-targ! (-> self control)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self post-hook) target-no-stick-post) + (ja-channel-set! 1) + (send-event self 'do-effect 'death-warp-in -1.0) + (sound-play-by-name (static-sound-name "warpgate-tele") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 41))) + (set! (-> gp-3 param 0) (ja-aframe 50.0 0)) + (set! (-> gp-3 param 1) 1.0) + (set! (-> gp-3 frame-num) (ja-aframe 40.0 0)) + (joint-control-channel-group! gp-3 (the-as art-joint-anim (-> self draw art-group data 41)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-4 (-> self skel root-channel 0))) + (set! (-> gp-4 param 0) (ja-aframe 50.0 0)) + (set! (-> gp-4 param 1) 1.0) + (joint-control-channel-group-eval! gp-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (restore-collide-with-as (-> self control)) + (let ((gp-5 (-> self skel root-channel 0))) + (set! (-> gp-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 41))) + (set! (-> gp-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 41)) data 0 length) -1)) + ) + (set! (-> gp-5 param 1) 1.0) + (set! (-> gp-5 frame-num) (ja-aframe 50.0 0)) + (joint-control-channel-group! gp-5 (the-as art-joint-anim (-> self draw art-group data 41)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-26 (-> self skel root-channel 0))) + (set! (-> a0-26 param 0) (the float (+ (-> a0-26 frame-group data 0 length) -1))) + (set! (-> a0-26 param 1) 1.0) + (joint-control-channel-group-eval! a0-26 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (target-falling-anim -1 99) + (none) + ) + :post + target-no-move-post + ) + +;; failed to figure out what this is: +(defstate idle (warp-gate) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('hide) + (go-virtual hidden) + ) + ) + ) + :code + (behavior () + (clear-pending-settings-from-process *setting-control* self 'allow-progress) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (when (and + (and *target* (>= 20480.0 (vector-vector-distance (-> self root trans) (-> *target* control trans)))) + (and + (>= (-> self level-slot) 0) + (not (movie?)) + (not (level-hint-displayed?)) + (zero? (logand (-> *target* control root-prim prim-core action) #x7380)) + (let* ((v1-16 (-> self root)) + (a1-2 (-> *target* control trans)) + (f0-1 (vector-y-angle (vector-! (new 'stack-no-clear 'vector) a1-2 (-> v1-16 trans)))) + ) + (or (!= (-> self level-slot) 3) (and (< f0-1 -9102.223) (< -32768.0 f0-1))) + ) + ) + ) + (hide-hud) + (level-hint-surpress!) + (kill-current-level-hint '() '(sidekick voicebox) 'exit) + (when (and + (hud-hidden?) + (can-grab-display? (the-as process-taskable self)) + (cond + ((or (= (-> *target* next-state name) 'target-warp-in) (= (-> *target* next-state name) 'target-warp-out)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + #f + ) + (else + #t + ) + ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + ) + (if (and (cpad-pressed? 0 circle) (process-grab? *target*)) + (go-virtual active) + ) + (if (and *cheat-mode* (cpad-pressed? 0 l3)) + (set! (-> self max-slot) 4) + ) + (let ((gp-0 + (new 'stack 'font-context *font-default-matrix* 32 160 0.0 (font-color default) (font-flags shadow kerning)) + ) + ) + (let ((v1-53 gp-0)) + (set! (-> v1-53 width) (the float 440)) + ) + (let ((v1-54 gp-0)) + (set! (-> v1-54 height) (the float 80)) + ) + (let ((v1-55 gp-0)) + (set! (-> v1-55 scale) 0.9) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning large)) + (print-game-text (lookup-text! *common-text* (game-text-id press-to-use) #f) gp-0 #f 128 22) + ) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; definition for function get-next-slot-up +(defun get-next-slot-up ((arg0 warp-gate) (arg1 int)) + (let ((v0-0 (+ arg1 1))) + (if (< (-> arg0 max-slot) v0-0) + (set! v0-0 (-> arg0 min-slot)) + ) + (if (= v0-0 (-> arg0 level-slot)) + (+! v0-0 1) + ) + (if (< (-> arg0 max-slot) v0-0) + (set! v0-0 (-> arg0 min-slot)) + ) + v0-0 + ) + ) + +;; definition for function get-next-slot-down +(defun get-next-slot-down ((arg0 warp-gate) (arg1 int)) + (let ((v0-0 (+ arg1 -1))) + (if (< v0-0 (-> arg0 min-slot)) + (set! v0-0 (-> arg0 max-slot)) + ) + (if (= v0-0 (-> arg0 level-slot)) + (+! v0-0 -1) + ) + (if (< v0-0 (-> arg0 min-slot)) + (set! v0-0 (-> arg0 max-slot)) + ) + v0-0 + ) + ) + +;; definition for function print-level-name +(defun print-level-name ((arg0 int) (arg1 font-context) (arg2 int) (arg3 int)) + (let ((s5-0 (if arg3 + arg2 + (- arg2) + ) + ) + ) + (+! (-> arg1 origin x) (the float s5-0)) + (let ((f30-0 (- 1.0 (* 0.0033333334 (the float arg2))))) + (print-game-text-scaled + (lookup-text! *common-text* (the-as game-text-id (+ arg0 286)) #f) + f30-0 + arg1 + (the int (* 128.0 f30-0)) + ) + ) + (set! (-> arg1 origin x) (- (-> arg1 origin x) (the float s5-0))) + ) + (set! (-> arg1 color) (font-color default)) + arg1 + ) + +;; failed to figure out what this is: +(defstate active (warp-gate) + :virtual #t + :enter + (behavior () + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (copy-settings-from-target! *setting-control*) + (sound-play-by-name (static-sound-name "start-options") (new-sound-id) 1024 0 0 1 #t) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :trans + (behavior () + (when (or + (and + (cpad-pressed? 0 triangle) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (process-release? *target*) + ) + (not *target*) + ) + (logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons triangle)) + (logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons triangle)) + (sound-play-by-name (static-sound-name "cursor-options") (new-sound-id) 1024 0 0 1 #t) + (go-virtual idle) + ) + (when *target* + (let* ((gp-1 (-> *target* control)) + (s4-0 (-> self root trans)) + (f0-0 + (deg-diff (y-angle gp-1) (vector-y-angle (vector-! (new 'stack-no-clear 'vector) s4-0 (-> gp-1 trans)))) + ) + ) + (if (!= f0-0 0.0) + (send-event + *target* + 'rotate-y-angle + (fmax (fmin f0-0 (* 65536.0 (-> *display* seconds-per-frame))) (* -65536.0 (-> *display* seconds-per-frame))) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (local-vars (sv-112 int) (sv-128 int) (sv-144 int)) + (let ((gp-0 (get-next-slot-up self (+ (-> self level-slot) -1)))) + 0 + (let ((s5-0 #f) + (s2-0 0) + (s4-0 #f) + (s3-0 gp-0) + ) + (while #t + (when (zero? s2-0) + (cond + ((cpad-pressed? 0 right) + (set! s5-0 #t) + (set! s4-0 #f) + (sound-play-by-name (static-sound-name "cursor-up-down") (new-sound-id) 1024 0 0 1 #t) + (set! s3-0 (get-next-slot-up self s3-0)) + ) + ((cpad-pressed? 0 left) + (set! s5-0 #t) + (set! s4-0 #t) + (sound-play-by-name (static-sound-name "cursor-up-down") (new-sound-id) 1024 0 0 1 #t) + (set! s3-0 (get-next-slot-down self s3-0)) + ) + ) + ) + (if s5-0 + (set! s2-0 (seekl s2-0 300 (the int (* 15.0 (-> *display* time-adjust-ratio))))) + ) + (when (>= s2-0 150) + (set! gp-0 s3-0) + (set! s5-0 #f) + (set! s2-0 0) + ) + (can-grab-display? (the-as process-taskable self)) + (hide-hud) + (let ((s1-2 (get-continue-by-name *game-info* (-> *warp-info* gp-0)))) + (lookup-level-info (-> s1-2 level)) + (when (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) 15) (cpad-pressed? 0 circle)) + (logclear! (-> *cpad-list* cpads 0 button0-abs 0) (pad-buttons circle)) + (logclear! (-> *cpad-list* cpads 0 button0-rel 0) (pad-buttons circle)) + (go-virtual use gp-0 (the-as level s1-2)) + ) + ) + (let ((s1-3 + (new 'stack 'font-context *font-default-matrix* 6 110 0.0 (font-color default) (font-flags shadow kerning)) + ) + ) + (let ((v1-38 s1-3)) + (set! (-> v1-38 scale) 0.7) + ) + (let ((v1-39 s1-3)) + (set! (-> v1-39 width) (the float 500)) + ) + (let ((v1-40 s1-3)) + (set! (-> v1-40 height) (the float 55)) + ) + (set! (-> s1-3 flags) (font-flags shadow kerning middle left large)) + (print-game-text (lookup-text! *common-text* (game-text-id warp-gate-use-dpad) #f) s1-3 #f 128 22) + (set! (-> s1-3 origin y) (+ 35.0 (-> s1-3 origin y))) + (let ((v1-43 s1-3)) + (set! (-> v1-43 height) (the float 40)) + ) + (let ((a0-34 s1-3)) + (set! (-> a0-34 color) (font-color lighter-lighter-blue)) + ) + 0 + (let ((s0-3 (get-next-slot-up self gp-0))) + (set! sv-112 (get-next-slot-down self gp-0)) + (set! sv-144 (get-next-slot-up self s0-3)) + (set! sv-128 (get-next-slot-down self sv-112)) + (cond + (s4-0 + (let ((a2-6 (- 300 (+ s2-0 150))) + (t9-20 print-level-name) + (a1-16 s1-3) + (a3-4 #f) + ) + (t9-20 sv-112 a1-16 a2-6 (the-as int a3-4)) + ) + (let ((a2-7 (+ s2-0 150))) + (cond + ((< a2-7 225) + (print-level-name s0-3 s1-3 a2-7 (the-as int #t)) + ) + (else + (let ((a2-8 (- 300 s2-0)) + (t9-22 print-level-name) + (a1-18 s1-3) + (a3-6 #f) + ) + (t9-22 sv-128 a1-18 a2-8 (the-as int a3-6)) + ) + ) + ) + ) + ) + (else + (let ((a2-9 (+ s2-0 150))) + (cond + ((< a2-9 225) + (print-level-name sv-112 s1-3 a2-9 (the-as int #f)) + ) + (else + (let ((a2-10 (- 300 s2-0)) + (t9-24 print-level-name) + (a1-20 s1-3) + (a3-8 #t) + ) + (t9-24 sv-144 a1-20 a2-10 (the-as int a3-8)) + ) + ) + ) + ) + (let ((a2-11 (- 300 (+ s2-0 150)))) + (print-level-name s0-3 s1-3 a2-11 (the-as int #t)) + ) + ) + ) + ) + (when (not s5-0) + (let ((a0-47 s1-3)) + (set! (-> a0-47 color) (font-color yellow-orange)) + ) + ) + (print-level-name gp-0 s1-3 s2-0 (the-as int s4-0)) + (set! (-> s1-3 origin y) (+ 20.0 (-> s1-3 origin y))) + (print-game-text (lookup-text! *common-text* (game-text-id press-to-warp) #f) s1-3 #f 128 22) + (set! (-> s1-3 origin y) (+ 15.0 (-> s1-3 origin y))) + (print-game-text (lookup-text! *common-text* (game-text-id press-to-exit) #f) s1-3 #f 128 22) + ) + (suspend) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate hidden (warp-gate) + :virtual #t + :code + (the-as (function none :behavior warp-gate) anim-loop) + ) + +;; definition for function warp-gate-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior warp-gate-init-by-other warp-gate ((arg0 vector)) + (stack-size-set! (-> self main-thread) 512) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg0 quad)) + (logior! (-> self mask) (process-mask actor-pause)) + (set! (-> self level) (-> self entity extra level name)) + (set! (-> self min-slot) 0) + (let ((v1-11 (-> self level))) + (set! (-> self level-slot) (cond + ((= v1-11 'training) + 0 + ) + ((= v1-11 'village1) + 1 + ) + ((= v1-11 'village2) + 2 + ) + ((= v1-11 'village3) + 3 + ) + ((or (= v1-11 'citadel) (= v1-11 'lavatube)) + 4 + ) + (else + -1 + ) + ) + ) + ) + (set! (-> self max-slot) (cond + ((task-closed? (game-task village4-button) (task-status need-hint)) + 4 + ) + ((task-closed? (game-task village3-button) (task-status need-hint)) + 3 + ) + ((task-closed? (game-task village2-levitator) (task-status need-hint)) + 2 + ) + (else + 1 + ) + ) + ) + (go-virtual idle) + (none) + ) + +;; definition of type warp-gate-switch +(deftype warp-gate-switch (basebutton) + ((warp handle :offset-assert 256) + ) + :heap-base #xa0 + :method-count-assert 33 + :size-assert #x108 + :flag-assert #x2100a00108 + (:methods + (pressable? (_type_) symbol 32) + ) + ) + +;; definition for method 3 of type warp-gate-switch +(defmethod inspect warp-gate-switch ((obj warp-gate-switch)) + (let ((t9-0 (method-of-type basebutton inspect))) + (t9-0 obj) + ) + (format #t "~T~Twarp: ~D~%" (-> obj warp)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *warp-gate-switch-sg* warp-gate-switch + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 1.5) + :longest-edge (meters 0) + ) + +;; definition for method 27 of type warp-gate-switch +(defmethod TODO-RENAME-27 warp-gate-switch ((obj warp-gate-switch)) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s5-0 1) + (let ((s4-0 (new 'process 'collide-shape-prim-group s5-0 (the-as uint 1) 0))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 3)) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 12288.0) + (set-root-prim! s5-0 s4-0) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 12288.0) + (append-prim s4-0 s3-0) + ) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> obj root-override) s5-0) + s5-0 + ) + ) + +;; definition for method 32 of type warp-gate-switch +(defmethod pressable? warp-gate-switch ((obj warp-gate-switch)) + (let ((v1-2 (-> obj entity extra perm task))) + (cond + ((logtest? (-> *target* control root-prim prim-core action) #x7380) + #f + ) + ((= v1-2 (game-task training-door)) + (cond + ((and + (task-complete? *game-info* (game-task training-door)) + (task-complete? *game-info* (game-task training-gimmie)) + (task-complete? *game-info* (game-task training-climb)) + (task-complete? *game-info* (game-task training-buzzer)) + ) + #t + ) + (else + (level-hint-spawn + (game-text-id training-warp-gate-blocked) + "sagevb38" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + #f + ) + ) + ) + (else + #t + ) + ) + ) + ) + +;; definition for method 26 of type warp-gate-switch +(defmethod TODO-RENAME-26 warp-gate-switch ((obj warp-gate-switch)) + (set! (-> obj warp) (the-as handle #f)) + (let ((v1-2 (-> obj entity extra perm task))) + (cond + ((= v1-2 (game-task training-door)) + (set! (-> obj down?) + (the-as + symbol + (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + ) + ) + ) + (else + (if (or (= v1-2 (game-task none)) (task-closed? (-> obj entity extra perm task) (task-status need-hint))) + (set! (-> obj down?) #t) + ) + ) + ) + ) + (initialize-skeleton obj *warp-gate-switch-sg* '()) + (logior! (-> obj skel status) 1) + (ja-channel-set! 1) + (cond + ((-> obj down?) + (let ((s5-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-0 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> obj draw art-group data 2)) data 0 length) -1)) + ) + ) + ) + (else + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + ) + ) + (set! (-> obj anim-speed) 2.0) + (dummy-47 (-> obj root-override)) + (ja-post) + (none) + ) + +;; definition for method 31 of type warp-gate-switch +;; INFO: Return type mismatch none vs int. +(defmethod press! warp-gate-switch ((obj warp-gate-switch) (arg0 symbol)) + (with-pp + (when arg0 + (let ((s4-0 (-> obj entity extra perm task))) + (when (nonzero? s4-0) + (close-specific-task! s4-0 (task-status need-hint)) + (when (= s4-0 (game-task village3-button)) + (let ((s4-1 (get-task-control s4-0))) + (when (zero? (get-reminder s4-1 2)) + (let ((s3-1 (max 1 (the int (-> *game-info* fuel))))) + (format #t "VILLAGE3 button saved ~D tasks~%" s3-1) + (save-reminder s4-1 s3-1 2) + ) + ) + ) + ) + ) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) pp) + (set! (-> a1-5 num-params) 0) + (set! (-> a1-5 message) 'start) + (let ((t9-5 send-event-function) + (v1-14 (-> obj notify-actor)) + ) + (t9-5 + (if v1-14 + (-> v1-14 extra process) + ) + a1-5 + ) + ) + ) + ) + (the-as int ((the-as (function basebutton symbol none) (find-parent-method warp-gate-switch 31)) + (the-as basebutton arg0) + arg0 + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate basebutton-up-idle (warp-gate-switch) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (when (pressable? self) + (TODO-RENAME-29 self (-> self event-going-down) (-> self notify-actor)) + (go-virtual basebutton-going-down) + ) + ) + (('hide) + (send-event (handle->process (-> self warp)) arg2) + ) + (else + ((-> (method-of-type basebutton basebutton-up-idle) event) arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((t9-0 (-> (method-of-type basebutton basebutton-up-idle) enter))) + (if t9-0 + (t9-0) + ) + ) + (none) + ) + :trans + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'stop) + (let ((t9-0 send-event-function) + (v1-1 (-> self notify-actor)) + ) + (t9-0 + (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) + ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) #x4650) + (case (-> self entity extra perm task) + (((game-task training-door)) + (when (and + (task-complete? *game-info* (game-task training-door)) + (task-complete? *game-info* (game-task training-gimmie)) + (task-complete? *game-info* (game-task training-climb)) + (task-complete? *game-info* (game-task training-buzzer)) + ) + (level-hint-spawn + (game-text-id training-warp-gate-reminder) + "sagevb39" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (clear-text-seen! *game-info* (game-text-id training-warp-gate-reminder)) + ) + ) + (((game-task village2-levitator)) + (level-hint-spawn + (game-text-id village2-warp-gate-reminder) + "asstvb28" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (level-hint-spawn + (game-text-id village2-warp-gate-reminder-annoyed) + "asstvb29" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (level-hint-spawn + (game-text-id village2-warp-gate-reminder-very-annoyed) + "asstvb30" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (((game-task village3-button)) + (level-hint-spawn + (game-text-id village3-warp-gate-reminder) + "asstv103" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (level-hint-spawn + (game-text-id village3-warp-gate-reminder=annoyed) + "asstv104" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (level-hint-spawn + (game-text-id village3-warp-gate-reminder-very-annoyed) + "asstv105" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (let ((t9-13 (-> (method-of-type basebutton basebutton-up-idle) trans))) + (if t9-13 + (t9-13) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate basebutton-down-idle (warp-gate-switch) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('hide) + (send-event (handle->process (-> self warp)) arg2) + ) + (else + ((-> (method-of-type basebutton basebutton-down-idle) event) arg0 arg1 arg2 arg3) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-0 (get-process *default-dead-pool* warp-gate #x4000))) + (set! (-> self warp) + (ppointer->handle (when gp-0 + (let ((t9-1 (method-of-type warp-gate activate))) + (t9-1 (the-as warp-gate gp-0) self 'warp-gate (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 warp-gate-init-by-other (-> self notify-actor extra trans)) + (-> gp-0 ppointer) + ) + ) + ) + ) + (process-entity-status! self (entity-perm-status complete) #t) + (let ((t9-4 (-> (method-of-type basebutton basebutton-down-idle) enter))) + (if t9-4 + (t9-4) + ) + ) + (none) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self warp)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((t9-1 (-> (method-of-type basebutton basebutton-down-idle) exit))) + (if t9-1 + (t9-1) + ) + ) + (none) + ) + :trans + (behavior () + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) #x4650) + (case (-> self entity extra perm task) + (((game-task training-door)) + (when (not (task-closed? (game-task beach-ecorocks) (task-status need-introduction))) + (level-hint-spawn + (game-text-id training-warp-gate-reminder) + "sagevb39" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (clear-text-seen! *game-info* (game-text-id training-warp-gate-reminder)) + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (let ((t9-3 (-> (method-of-type basebutton basebutton-down-idle) trans))) + (if t9-3 + (t9-3) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate basebutton-going-down (warp-gate-switch) + :virtual #t + :code + (behavior () + (sound-play-by-name (static-sound-name "warpgate-butt") (new-sound-id) 1024 0 0 1 #t) + (sound-play-by-name (static-sound-name "warpgate-act") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-2 (entity-actor-count (-> self entity) 'trigger-actor))) + (dotimes (s5-2 gp-2) + (let ((s4-0 (entity-actor-lookup (-> self entity) 'trigger-actor s5-2)) + (a1-4 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'trigger) + (let ((t9-6 send-event-function) + (v1-3 s4-0) + ) + (when (not (t9-6 + (if v1-3 + (-> v1-3 extra process) + ) + a1-4 + ) + ) + (entity-birth-no-kill s4-0) + (suspend) + (send-event + (if s4-0 + (-> s4-0 extra process) + ) + 'trigger + ) + ) + ) + ) + ) + ) + (let ((t9-10 (-> (the-as (state basebutton) (find-parent-method warp-gate-switch 21)) code))) + (if t9-10 + ((the-as (function none :behavior basebutton) t9-10)) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defskelgroup *village-cam-sg* village-cam + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 80) + :longest-edge (meters 0) + ) + +;; definition of type village-cam +(deftype village-cam (process) + ((root-override trsq :offset-assert 112) + (range meters :offset-assert 116) + (index int32 :offset-assert 120) + (state-time uint64 :offset-assert 128) + ) + :heap-base #x20 + :method-count-assert 15 + :size-assert #x88 + :flag-assert #xf00200088 + (:methods + (idle () _type_ :state 14) + ) + ) + +;; definition for method 3 of type village-cam +(defmethod inspect village-cam ((obj village-cam)) + (let ((t9-0 (method-of-type process inspect))) + (t9-0 obj) + ) + (format #t "~T~Troot: ~A~%" (-> obj root-override)) + (format #t "~T~Trange: (meters ~m)~%" (-> obj range)) + (format #t "~T~Tindex: ~D~%" (-> obj index)) + (format #t "~T~Tstate-time: ~D~%" (-> obj state-time)) + obj + ) + +;; definition for method 7 of type village-cam +;; INFO: Return type mismatch process vs village-cam. +(defmethod relocate village-cam ((obj village-cam) (arg0 int)) + (if (nonzero? (-> obj root-override)) + (&+! (-> obj root-override) arg0) + ) + (the-as village-cam ((method-of-type process relocate) obj arg0)) + ) + +;; failed to figure out what this is: +(defstate idle (village-cam) + :virtual #t + :code + (behavior () + (local-vars (v1-18 symbol)) + (while #t + (let ((v1-5 + (and + (and + *target* + (>= (-> self range) (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + (and + (-> *setting-control* current play-hints) + (< 0.0 (-> *setting-control* current dialog-volume)) + (let ((v1-10 (-> self index))) + (cond + ((zero? v1-10) + (and + (>= (-> *game-info* fuel) 20.0) + (not (task-closed? (game-task firecanyon-assistant) (task-status need-reward-speech))) + ) + ) + ((= v1-10 2) + (not (task-closed? (game-task village2-levitator) (task-status need-hint))) + ) + ((= v1-10 3) + (not (task-closed? (game-task village3-button) (task-status need-hint))) + ) + (else + #t + ) + ) + ) + ) + ) + ) + ) + (when v1-5 + (case (-> self index) + ((2 3) + (until v1-18 + (suspend) + (set! v1-18 + (or + (not *target*) + (< (-> self range) (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + ) + (let* ((v1-23 (-> self index)) + (v1-24 (cond + ((= v1-23 2) + (not (task-closed? (game-task village2-levitator) (task-status need-hint))) + ) + ((= v1-23 3) + (not (task-closed? (game-task village3-button) (task-status need-hint))) + ) + ) + ) + ) + (when (not v1-24) + (process-entity-status! self (entity-perm-status bit-3) #f) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + ) + ) + ) + ) + (while (and + *target* + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + (suspend) + ) + (set! (-> self state-time) (the-as uint (-> *display* base-frame-counter))) + (process-grab? *target*) + (process-entity-status! self (entity-perm-status bit-3) #t) + (kill-current-level-hint '(ambient) '() 'exit) + (until (not (or (-> *setting-control* current talking) (or + (-> *setting-control* current spooling) + (-> *setting-control* current hint) + (-> *setting-control* current ambient) + (not *target*) + (logtest? (-> *target* state-flags) #x8008) + ) + ) + ) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (let* ((a0-25 *setting-control*) + (t9-14 (method-of-object a0-25 set-setting!)) + (a2-5 'movie) + (a3-1 (process->ppointer self)) + ) + (t9-14 a0-25 self a2-5 (the-as symbol a3-1) 0.0 0) + ) + (copy-settings-from-target! *setting-control*) + (while (or + (-> *setting-control* current talking) + (-> *setting-control* current spooling) + (-> *setting-control* current hint) + (!= (-> *level* loading-level) (-> *level* level-default)) + (not *target*) + (logtest? (-> *target* state-flags) #x8008) + *progress-process* + ) + (suspend) + ) + (while (< (- (-> *display* base-frame-counter) (the-as int (-> self state-time))) 300) + (suspend) + ) + (kill-current-level-hint '() '() 'die) + (suspend) + (kill-current-level-hint '() '() 'die) + (process-release? *target*) + (clear-pending-settings-from-process *setting-control* self 'movie) + (copy-settings-from-target! *setting-control*) + (suspend) + (suspend) + ) + (let ((v1-79 (-> self index))) + (cond + ((zero? v1-79) + (let ((gp-0 (-> self entity extra perm))) + (logior! (-> gp-0 status) (entity-perm-status user-set-from-cstage)) + (let ((v1-84 (-> gp-0 user-uint8 0))) + (cond + ((zero? v1-84) + (level-hint-spawn + (game-text-id firecanyon-collect-cells-collected) + "asstvb04" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((s5-0 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-0 + (let ((t9-23 (method-of-type pov-camera activate))) + (t9-23 (the-as pov-camera s5-0) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> self entity extra trans) + *village-cam-sg* + "firecanyon-cam" + 0 + #f + '((0 want-force-vis village1 #t) + (0 alive "money-2669") + (0 alive "money-2670") + (0 alive "money-2671") + (0 alive "money-2672") + (0 alive "money-2673") + (0 alive "money-2674") + (0 alive "money-2675") + (0 alive "money-2677") + (0 alive "money-2678") + ) + ) + (-> s5-0 ppointer) + ) + ) + ) + ((= v1-84 1) + (level-hint-spawn + (game-text-id firecanyon-collect-cells-collected-reminder) + "asstvb08" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((s5-1 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-1 + (let ((t9-27 (method-of-type pov-camera activate))) + (t9-27 (the-as pov-camera s5-1) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-1 + pov-camera-init-by-other + (-> self entity extra trans) + *village-cam-sg* + "firecanyon-alt-cam" + 0 + #f + '((0 want-force-vis village1 #t) + (0 alive "money-2669") + (0 alive "money-2670") + (0 alive "money-2671") + (0 alive "money-2672") + (0 alive "money-2673") + (0 alive "money-2674") + (0 alive "money-2675") + (0 alive "money-2677") + (0 alive "money-2678") + ) + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + ) + (set! (-> gp-0 user-int8 0) (seekl (the-as int (-> gp-0 user-uint8 0)) 255 1)) + ) + ) + ((= v1-79 1) + ) + ((= v1-79 2) + (when (not (task-closed? (game-task village2-levitator) (task-status need-hint))) + (level-hint-spawn + (game-text-id village2-warp-gate-reminder-annoyed) + "asstvb29" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-1 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-1 + (let ((t9-33 (method-of-type pov-camera activate))) + (t9-33 (the-as pov-camera gp-1) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + pov-camera-init-by-other + (-> self entity extra trans) + *village-cam-sg* + "vi2-button-cam" + 0 + #f + '() + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + ((= v1-79 3) + (when (not (task-closed? (game-task village3-button) (task-status need-hint))) + (level-hint-spawn + (game-text-id village2-warp-gate-reminder-very-annoyed) + "asstvb30" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((gp-2 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-2 + (let ((t9-38 (method-of-type pov-camera activate))) + (t9-38 (the-as pov-camera gp-2) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-2 + pov-camera-init-by-other + (-> self entity extra trans) + *village-cam-sg* + "vi3-button-cam" + 0 + #f + '() + ) + (-> gp-2 ppointer) + ) + ) + ) + ) + ) + ) + (while (-> self child) + (suspend) + ) + (let ((a0-66 (-> self entity))) + (if (when a0-66 + (let ((a0-67 (-> a0-66 extra perm task))) + (if a0-67 + (= a0-67 (game-task none)) + ) + ) + ) + (set! (-> self entity extra perm task) (game-task complete)) + ) + ) + (when (zero? (-> self index)) + (let ((a0-70 (-> self entity extra perm))) + (when (= (-> a0-70 user-uint8 0) 1) + (clear-pending-settings-from-process *setting-control* self 'allow-progress) + (let ((gp-3 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-3) #x15f90) + (suspend) + ) + ) + (go-virtual idle) + ) + ) + ) + (process-entity-status! self (entity-perm-status bit-3) #f) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type village-cam +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! village-cam ((obj village-cam) (arg0 entity-actor)) + "Copy defaults from the entity." + (logior! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj root-override) (new 'process 'trsq)) + (set! (-> obj root-override trans quad) (-> arg0 extra trans quad)) + (quaternion-copy! (-> obj root-override quat) (-> arg0 quat)) + (vector-identity! (-> obj root-override scale)) + (set! (-> obj range) (res-lump-float arg0 'cam-notice-dist :default 81920.0)) + (set! (-> obj index) (res-lump-value arg0 'index int)) + (go (method-of-object obj idle)) + (none) + ) diff --git a/test/offline/config.jsonc b/test/offline/config.jsonc index c5b64f39ae..88c52a72f4 100644 --- a/test/offline/config.jsonc +++ b/test/offline/config.jsonc @@ -199,7 +199,6 @@ // not in use in PC port "tie-near-init-engine", "tie-near-end-buffer" - ], "skip_compile_states": {