diff --git a/decompiler/IR2/FormExpressionAnalysis.cpp b/decompiler/IR2/FormExpressionAnalysis.cpp index cb05c3fec..85b074d9f 100644 --- a/decompiler/IR2/FormExpressionAnalysis.cpp +++ b/decompiler/IR2/FormExpressionAnalysis.cpp @@ -3583,66 +3583,59 @@ FormElement* sc_to_handle_get_proc(ShortCircuitElement* elt, void ShortCircuitElement::push_to_stack(const Env& env, FormPool& pool, FormStack& stack) { mark_popped(); - if (!used_as_value.value_or(false)) { - throw std::runtime_error( - "ShortCircuitElement::push_to_stack not implemented for result not used case."); - + if (already_rewritten) { stack.push_form_element(this, true); - } else { - if (already_rewritten) { - stack.push_form_element(this, true); - return; - } + return; + } - // the first condition is special - auto first_condition = entries.front().condition; - // lets evaluate in on the parent stack... - for (auto x : first_condition->elts()) { - x->push_to_stack(env, pool, stack); - } + // the first condition is special + auto first_condition = entries.front().condition; + // lets evaluate in on the parent stack... + for (auto x : first_condition->elts()) { + x->push_to_stack(env, pool, stack); + } - for (int i = 0; i < int(entries.size()); i++) { - auto& entry = entries.at(i); - if (entry.condition == first_condition) { - entry.condition->clear(); - entry.condition->push_back(stack.pop_back(pool)); + for (int i = 0; i < int(entries.size()); i++) { + auto& entry = entries.at(i); + if (entry.condition == first_condition) { + entry.condition->clear(); + entry.condition->push_back(stack.pop_back(pool)); + } else { + FormStack temp_stack(false); + for (auto& elt : entry.condition->elts()) { + elt->push_to_stack(env, pool, temp_stack); + } + + std::vector new_entries; + if (i == int(entries.size()) - 1) { + new_entries = rewrite_to_get_var(temp_stack, pool, final_result, env); } else { - FormStack temp_stack(false); - for (auto& elt : entry.condition->elts()) { - elt->push_to_stack(env, pool, temp_stack); - } + new_entries = temp_stack.rewrite(pool, env); + } - std::vector new_entries; - if (i == int(entries.size()) - 1) { - new_entries = rewrite_to_get_var(temp_stack, pool, final_result, env); - } else { - new_entries = temp_stack.rewrite(pool, env); - } - - entry.condition->clear(); - for (auto e : new_entries) { - if (dynamic_cast(e)) { - continue; - } - entry.condition->push_back(e); - } - if (entry.condition->elts().empty()) { - entry.condition->push_back(pool.alloc_element()); + entry.condition->clear(); + for (auto e : new_entries) { + if (dynamic_cast(e)) { + continue; } + entry.condition->push_back(e); + } + if (entry.condition->elts().empty()) { + entry.condition->push_back(pool.alloc_element()); } } - - FormElement* to_push = this; - auto as_handle_get = sc_to_handle_get_proc(this, env, pool, stack); - if (as_handle_get) { - to_push = as_handle_get; - } - - assert(used_as_value.has_value()); - stack.push_value_to_reg(final_result, pool.alloc_single_form(nullptr, to_push), true, - env.get_variable_type(final_result, false)); - already_rewritten = true; } + + FormElement* to_push = this; + auto as_handle_get = sc_to_handle_get_proc(this, env, pool, stack); + if (as_handle_get) { + to_push = as_handle_get; + } + + assert(used_as_value.has_value()); + stack.push_value_to_reg(final_result, pool.alloc_single_form(nullptr, to_push), true, + env.get_variable_type(final_result, false)); + already_rewritten = true; } void ShortCircuitElement::update_from_stack(const Env& env, diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index bfea5ba4b..087af52ff 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -9414,7 +9414,7 @@ (load-game! (_type_ game-save) game-save 25) (clear-text-seen! (_type_ game-text-id) none 26) (get-death-count (_type_ symbol) int 27) - (get-health-percent-lost (_type_) float 28) + (get-health-percent-lost (_type_ symbol) float 28) ) ) @@ -31706,7 +31706,7 @@ ;; - Functions (define-extern swamp-rat-nest-check-dummy (function none :behavior swamp-rat-nest)) -(define-extern swamp-rat-nest-spawn-rat (function (pointer process) :behavior swamp-rat-nest)) +(define-extern swamp-rat-nest-spawn-rat (function (pointer process) :behavior swamp-rat-nest)) ;; this needs a t2 symbol arg to pass to swamp-rat-init-from-other...but (define-extern swamp-rat-nest-dummy-init-by-other (function swamp-rat-nest-dummy none :behavior swamp-rat-nest-dummy)) (define-extern swamp-rat-nest-pick-spawn-joint (function int :behavior swamp-rat-nest)) (define-extern swamp-rat-nest-dummy-take-damage (function int int :behavior swamp-rat-nest-dummy)) @@ -32787,7 +32787,7 @@ ) (deftype slide-control (process-drawable) - ((target uint64 :offset-assert 176) + ((target handle :offset-assert 176) (pos float :offset-assert 184) (trans vector :inline :offset-assert 192) (rot vector :inline :offset-assert 208) @@ -32805,8 +32805,8 @@ ;; - Functions -(define-extern find-target-point function) -(define-extern distance-from-tangent function) +(define-extern find-target-point (function vector float :behavior slide-control)) +(define-extern distance-from-tangent (function path-control float vector vector vector vector float)) (define-extern target-tube-post (function none :behavior target)) (define-extern target-tube-turn-anim (function none :behavior target)) (define-extern tube-thrust (function float float none :behavior target)) @@ -32815,12 +32815,12 @@ ;; - Unknowns (define-extern target-tube (state target)) ;; unknown type -(define-extern target-tube-death (state target)) ;; unknown type +(define-extern target-tube-death (state symbol target)) ;; unknown type (define-extern *tube-jump-mods* surface) ;; unknown type -(define-extern target-tube-jump (state target)) ;; unknown type +(define-extern target-tube-jump (state float float target)) ;; unknown type (define-extern *tube-mods* surface) ;; unknown type (define-extern *tube-surface* surface) ;; unknown type -(define-extern target-tube-hit (state target)) ;; unknown type +(define-extern target-tube-hit (state handle attack-info target)) ;; unknown type (define-extern *tube-hit-mods* surface) ;; unknown type (define-extern *TUBE-bank* tube-bank) ;; unknown type diff --git a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc index d48e46e5f..ebe14394e 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -306,7 +306,6 @@ // all unchecked and in level DGO code "(anon-function 21 plant-boss)", // CFG "target-flut-falling-anim-trans", // CFG failure - "(anon-function 2 target-tube)", "(anon-function 5 orbit-plat)", // CFG "(anon-function 2 ogreboss)" diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index fb0fc50f5..63c75e507 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -6026,5 +6026,42 @@ [32, "collide-tri-result"] ], + "(enter target-tube-hit)": [ + [16, "event-message-block"] + ], + + "(event slide-control-ride slide-control)": [ + [16, "event-message-block"] + ], + + "(code target-tube-death)": [ + [16, "vector"] + ], + + "(code target-tube-hit)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"] + ], + + "find-target-point": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(trans slide-control-watch slide-control)": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "distance-from-tangent": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 32810cc2f..08c370bd0 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -7441,5 +7441,24 @@ [28, "v1", "joint-exploder-joint"] ], + "racer-effects": [ + [739, "v0", "sound-rpc-set-param"] + ], + + "(code target-tube)": [ + [31, "v1", "art-joint-anim"] + ], + + "(event slide-control-ride slide-control)": [ + [24, "gp", "process-drawable"], + [31, "v1", "vector"], + [35, "v1", "vector"], + [39, "v1", "vector"] + ], + + "(code target-tube-start)": [ + [110, "v1", "float"] + ], + "placeholder-do-not-add-below": [] } diff --git a/goal_src/engine/game/game-info-h.gc b/goal_src/engine/game/game-info-h.gc index 4d2e76636..2e8959b2b 100644 --- a/goal_src/engine/game/game-info-h.gc +++ b/goal_src/engine/game/game-info-h.gc @@ -180,7 +180,7 @@ (load-game! (_type_ game-save) game-save 25) (clear-text-seen! (_type_ game-text-id) none 26) (get-death-count (_type_ symbol) int 27) - (get-health-percent-lost (_type_) float 28) + (get-health-percent-lost (_type_ symbol) float 28) ) ) diff --git a/goal_src/engine/game/game-info.gc b/goal_src/engine/game/game-info.gc index 8e2357883..b142923a1 100644 --- a/goal_src/engine/game/game-info.gc +++ b/goal_src/engine/game/game-info.gc @@ -1128,6 +1128,6 @@ ) ) -(defmethod get-health-percent-lost game-info ((obj game-info)) +(defmethod get-health-percent-lost game-info ((obj game-info) (arg0 symbol)) (* 0.25 (the float (get-death-count obj #f))) ) diff --git a/goal_src/levels/racer_common/target-racer-FIC-LAV-MIS-OGR-ROL.gc b/goal_src/levels/racer_common/target-racer-FIC-LAV-MIS-OGR-ROL.gc index 265e2bfc2..b55031f6d 100644 --- a/goal_src/levels/racer_common/target-racer-FIC-LAV-MIS-OGR-ROL.gc +++ b/goal_src/levels/racer_common/target-racer-FIC-LAV-MIS-OGR-ROL.gc @@ -5,4 +5,1682 @@ ;; name in dgo: target-racer ;; dgos: FIC, LAV, MIS, OGR, ROL -(define-extern *racer-mods* surface) +;; DECOMP BEGINS + +(define *racer-mods* (new 'static 'surface + :name 'racer + :turnv 131072.0 + :turnvv 524288.0 + :tiltv 65536.0 + :tiltvv 131072.0 + :transv-max 122880.0 + :target-speed 163840.0 + :seek0 1.0 + :seek90 1.0 + :seek180 1.0 + :fric 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :flags #x1 + ) + ) + +(define *racer-air-mods* (new 'static 'surface + :name 'racer + :turnv 131072.0 + :turnvv 524288.0 + :tiltv 65536.0 + :tiltvv 131072.0 + :transv-max 122880.0 + :target-speed 163840.0 + :seek0 0.3 + :seek90 0.3 + :seek180 0.3 + :fric 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :mode 'air + :flags #x801 + ) + ) + +(let ((v1-2 (new 'static 'surface + :name '*race-track-surface* + :turnv 1.0 + :turnvv 1.0 + :tiltv 1.0 + :tiltvv 1.0 + :transv-max 1.0 + :target-speed 1.0 + :seek0 153600.0 + :seek90 153600.0 + :seek180 256000.0 + :fric 0.98 + :slope-down-factor 10240.0 + :slope-slip-angle 8192.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 4.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + ) + ) + ) + (set! *race-track-surface* v1-2) + (set! (-> v1-2 touch-hook) nothing) + (set! (-> v1-2 active-hook) nothing) + ) + +(defbehavior racer-on-ground? racer () + (logtest? (-> self root-override status) 1) + ) + +(defbehavior racer-calc-gravity target () + (let ((f0-8 (cond + ((or (-> self racer stick-lock) (-> self racer heavy)) + 409600.0 + ) + ((= (-> self next-state name) 'target-racing-bounce) + (lerp-scale 81920.0 163840.0 (-> self control unknown-float01) 40960.0 (-> self racer transv-max)) + ) + ((or (-> self racer hop?) (= (-> self next-state name) 'target-racing-bounce)) + (lerp-scale 81920.0 163840.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)) + ) + ((>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) 180) + (lerp-scale 81920.0 122880.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)) + ) + (else + (lerp-scale 245760.0 81920.0 (-> self control unknown-float01) 40960.0 (-> self racer transv-max)) + ) + ) + ) + ) + (set! (-> self control dynam gravity-max) (* 8.0 f0-8)) + (set! (-> self control dynam gravity-length) f0-8) + ) + (vector-float*! + (-> self control dynam gravity) + (-> self control dynam gravity-normal) + (the-as float (-> self control dynam gravity-length)) + ) + ) + +(defbehavior racer-service-slide target () + (let ((v1-1 (-> self racer slide-mode))) + (cond + ((zero? v1-1) + (if (zero? + (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) + ) + (set! (-> self racer slide-mode) -1) + ) + ) + ((= v1-1 1) + (if (zero? + (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) + ) + (set! (-> self racer slide-mode) -1) + ) + ) + ) + ) + (when (>= (-> self racer slide-mode) 0) + (cond + ((< (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) leftx) (the-as uint 64)) + (set! (-> self racer slide-mode) 0) + 0 + ) + ((< (the-as uint 192) (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) leftx)) + (set! (-> self racer slide-mode) 1) + ) + ) + ) + (set! (-> self racer slide-amp) (seek (-> self racer slide-amp) 0.0 (* 0.3 (-> *display* seconds-per-frame)))) + (if (= (-> self racer slide-amp) 0.0) + (set! (-> self racer slide-mode) -1) + ) + 0 + (none) + ) + +(defbehavior racer-xz target ((arg0 float) (arg1 float)) + (set! (-> self racer slide-shift-x) arg1) + (set! (-> self racer slide-interp) (seek (-> self racer slide-interp) 0.0 (-> *display* seconds-per-frame))) + (let ((f30-1 + (if (or (< (* arg1 arg0) 0.0) (not (racer-on-ground?))) + 1.0 + (+ 1.0 (* (fabs arg1) (lerp-scale 0.0 3.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)))) + ) + ) + (f28-1 + (lerp-scale 32768.0 20024.889 (-> self control unknown-float01) 0.0 (* 0.5 (-> self racer transv-max))) + ) + (f0-18 + (lerp-scale 91022.22 236657.78 (-> self control unknown-float01) 0.0 (* 0.125 (-> self racer transv-max))) + ) + ) + (set! (-> self racer rotv y) + (seek (-> self racer rotv y) (* arg0 f30-1 (- f28-1)) (* f0-18 (-> *display* seconds-per-frame))) + ) + ) + (set! (-> self racer rotv y) + (* (-> self racer rotv y) + (lerp-scale 0.99 0.9 (-> self control unknown-float01) 0.0 (-> self racer transv-max)) + ) + ) + (let ((f30-3 (vector-y-angle (-> self control unknown-vector00))) + (s5-1 (racer-on-ground?)) + ) + (cond + ((= arg1 0.0) + (set! (-> self racer slide-grip-mult) 1.0) + ) + (s5-1 + (set! (-> self racer slide-grip-mult) + (seek (-> self racer slide-grip-mult) 1.0 (-> *display* seconds-per-frame)) + ) + ) + ) + (let ((f30-4 (* (deg-diff f30-3 0.0) (-> self racer slide-grip-mult)))) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + (-> self control transv) + (meters 0.000061035156) + (new 'static 'rgba :r #xff :a #x80) + ) + (if (and + (< 409.6 (vector-xz-length (-> self control unknown-vector00))) + s5-1 + (= (-> self next-state name) 'target-racing) + ) + (vector-rotate-y! + (-> self control unknown-vector00) + (-> self control unknown-vector00) + (fmax + (fmin f30-4 (* 10922.667 (-> *display* seconds-per-frame))) + (* -10922.667 (-> *display* seconds-per-frame)) + ) + ) + ) + ) + ) + (let ((gp-1 (new-stack-vector0))) + (vector-matrix*! gp-1 (-> self control unknown-vector00) (-> self control unknown-matrix01)) + (set! (-> gp-1 y) 0.0) + (vector-float*! gp-1 gp-1 0.5) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + gp-1 + (meters 0.00024414062) + (new 'static 'rgba :g #xff :b #xff :a #x80) + ) + (vector+! gp-1 gp-1 (-> self control trans)) + (add-debug-text-sphere + *display-target-marks* + (bucket-id debug-draw1) + gp-1 + 819.2 + "ltransv" + (new 'static 'rgba :g #xff :b #xff :a #x80) + ) + (vector-matrix*! gp-1 (new 'static 'vector :z 40960.0 :w 1.0) (-> self control unknown-matrix01)) + (vector-float*! gp-1 gp-1 0.5) + (vector+! gp-1 gp-1 (-> self control trans)) + (add-debug-text-sphere + *display-target-marks* + (bucket-id debug-draw1) + gp-1 + 819.2 + "nose" + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + ) + 0 + (none) + ) + +(defbehavior racer-thrust target ((arg0 basic) (arg1 float)) + (let ((f0-0 + (if (and + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) + (not (-> self racer stick-lock)) + (not (-> self racer stick-off)) + ) + 1.0 + 0.0 + ) + ) + ) + (when (< 0.0 f0-0) + (let ((f1-4 + (* f0-0 + (+ (-> self control unknown-surface01 target-speed) (-> self racer boost-output) (-> self racer hill-boost)) + ) + ) + ) + (+! (-> self control unknown-vector00 z) (* f1-4 (-> *display* seconds-per-frame))) + ) + ) + (set! (-> self racer front-rotv) + (seek + (-> self racer front-rotv) + (+ 65536.0 (* 364088.88 (+ f0-0 (* 0.1 arg1)))) + (* 364088.88 (-> *display* seconds-per-frame)) + ) + ) + ) + (set! (-> self racer front-rot) + (the float + (sar + (shl + (the int (+ (-> self racer front-rot) (* (-> self racer front-rotv) (-> *display* seconds-per-frame)))) + 48 + ) + 48 + ) + ) + ) + (let* ((f1-12 (-> self control unknown-surface01 fric)) + (f0-13 (- 1.0 (* (- 1.0 f1-12) (-> *display* time-adjust-ratio)))) + ) + (set! f0-13 + (cond + ((and + (not (and (= (-> self fact-info-target eco-type) 1) (>= (-> self fact-info-target eco-level) 1.0))) + (logtest? + (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) + (pad-buttons square) + ) + ) + (if (and + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) + (not (-> self racer stick-lock)) + (not (-> self racer stick-off)) + ) + (* 0.9875 f0-13) + (* 0.49375 (+ 1.0 f0-13)) + ) + ) + (else + (cond + ((and + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) + (not (-> self racer stick-lock)) + (not (-> self racer stick-off)) + ) + ) + (else + (set! f0-13 (* 0.5 (+ 1.0 f0-13))) + ) + ) + f0-13 + ) + ) + ) + (set! (-> self control unknown-vector00 x) (* (-> self control unknown-vector00 x) f0-13)) + (set! (-> self control unknown-vector00 z) (* (-> self control unknown-vector00 z) f0-13)) + ) + (let ((f30-0 (-> self racer transv-max))) + (if (>= (vector-xz-length (-> self control unknown-vector00)) f30-0) + (vector-xz-normalize! (-> self control unknown-vector00) f30-0) + ) + ) + (+! + (-> self racer bottom-rot) + (* (+ 364088.88 (* 0.32 (fabs (-> self control unknown-vector00 y)))) (-> *display* seconds-per-frame)) + ) + 0 + (none) + ) + +(defbehavior racer-cushion target ((arg0 float)) + (let ((f30-0 (-> self racer bob-period))) + (let ((f28-0 1.0)) + (set! (-> self racer bob-meta-timer) + (seek + (-> self racer bob-meta-timer) + (-> self racer bob-meta-meta-timer) + (* 4.0 (-> *display* seconds-per-frame)) + ) + ) + (let* ((f0-8 (sin (/ (* 65536.0 (-> self racer bob-timer)) f30-0))) + (f0-9 (* 1228.8 (-> self racer bob-mult-trans) f28-0 f0-8)) + ) + (set! (-> self racer cushion-bob-old) (-> self racer cushion-bob)) + (set! (-> self racer cushion-bob) f0-9) + ) + ) + (let ((a2-1 (new-stack-vector0))) + (set! (-> a2-1 quad) (-> self control trans quad)) + (+! (-> a2-1 y) (-> self racer cushion-bob)) + (add-debug-sphere + *display-target-marks* + (bucket-id debug-draw1) + a2-1 + 819.2 + (new 'static 'rgba :r #xff :b #xff :a #x80) + ) + ) + (let ((f0-13 (* (-> self racer speed-rotx) (-> *display* time-adjust-ratio)))) + (set! (-> self racer cur-rotx) + (lerp (-> self racer cur-rotx) (+ (-> self racer hill-rotx) (-> self racer targ-rotx)) f0-13) + ) + ) + (set! (-> self racer shock-rotx) + (lerp (-> self racer shock-rotx) (* -0.6666667 (-> self racer shock-offset)) 0.1) + ) + (set! (-> self racer shock-rotx) 0.0) + (sin (+ 16384.0 (/ (* 65536.0 (the float (mod (the int (-> self racer bob-timer)) (the int f30-0)))) f30-0))) + ) + (quaternion-rotate-x! + (-> self control unknown-quaternion00) + (-> self control unknown-quaternion00) + (+ arg0 (-> self racer shock-rotx) (* (-> self racer mult-rotx) (-> self racer cur-rotx))) + ) + (let ((f30-1 (* (-> self control unknown-float61) (/ (-> self control unknown-float01) (-> self racer transv-max)))) + ) + (set! (-> self racer hill-value) f30-1) + (if (and (racer-on-ground?) (begin (set! (-> self racer hill-ground-value) f30-1) (< 0.0 f30-1))) + (set! (-> self racer hill-offset) (lerp (-> self racer hill-offset) (fmax -4096.0 (* -16384.0 f30-1)) 0.05)) + (set! (-> self racer hill-offset) (lerp (-> self racer hill-offset) 0.0 0.05)) + ) + ) + (set! (-> self racer hill-boost) + (seek (-> self racer hill-boost) 0.0 (* 81920.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer hill-offset) 0.0) + 0 + (none) + ) + +(defbehavior racer-collision target () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self control transv quad)) + (let ((f30-0 0.8)) + (dummy-33 (-> self control) (-> self control transv) (-> self control root-prim collide-with)) + (+! (-> self racer shock-offsetv) (* (- (-> gp-0 y) (-> self control transv y)) f30-0)) + (+! + (-> self racer shock-offsetv) + (+ (* -20.0 (-> *display* seconds-per-frame) (-> self racer shock-offset)) + (if (racer-on-ground?) + (* (-> self control dynam gravity-length) (-> *display* seconds-per-frame) f30-0) + 0.0 + ) + ) + ) + ) + (if (and + (or + (< (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) 60) + (< (-> self racer shock-offset) 0.0) + ) + (!= (-> self control unknown-surface00 mode) 'air) + ) + (+! (-> self racer shock-offset) (* (-> self racer shock-offsetv) (-> *display* seconds-per-frame))) + ) + (set! (-> self racer shock-offset) + (* (-> self racer shock-offset) (lerp-scale 0.99 0.98 (-> self control unknown-float01) 0.0 28672.0)) + ) + (cond + ((< 81920.0 (-> self racer shock-offset)) + (set! (-> self racer shock-offset) 81920.0) + (set! (-> self racer shock-offsetv) 0.0) + ) + ((< (-> self racer shock-offset) -8192.0) + (set! (-> self racer shock-offset) -8192.0) + (set! (-> self racer shock-offsetv) 0.0) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker s5-0) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 part-tracker-init (-> *part-group-id-table* 13) -1 #f #f #f (-> self control trans)) + (-> s5-0 ppointer) + ) + ) + (dummy-10 (-> self skel effect) 'effect-land -1.0 -1) + ) + ) + (deg-diff (vector-y-angle gp-0) (vector-y-angle (-> self control transv))) + (let ((f30-2 (vector-xz-length gp-0))) + (when (and + (logtest? (-> self control status) 8) + (< 20480.0 f30-2) + (and (< (fabs (-> self racer mod-x)) 0.5) (!= (-> self next-state name) 'target-racing-smack)) + ) + (let ((s5-3 (vector-! (new 'stack-no-clear 'vector) (-> self control trans) (-> self control unknown-vector70)))) + (vector-normalize! s5-3 1.0) + (let ((gp-1 (vector-reflect-flat! (new 'stack-no-clear 'vector) gp-0 s5-3))) + (set! (-> gp-1 y) 0.0) + (vector-normalize! gp-1 1.0) + (let ((f28-1 (deg-diff (-> self racer rot y) (vector-y-angle gp-1)))) + (if (< 16384.0 (fabs f28-1)) + (set! f28-1 (deg-diff (-> self racer rot y) (+ 32768.0 (vector-y-angle gp-1)))) + ) + (set! (-> self racer rotv y) (* f28-1 (lerp-scale 2.0 7.0 f30-2 4096.0 (-> self racer transv-max)))) + ) + ) + ) + ) + ) + ) + (set! (-> self control surf) *race-track-surface*) + 0 + (none) + ) + +(defbehavior racer-integrate target () + (quaternion-rotate-y! + (the-as quaternion (-> self racer quat)) + (quaternion-identity! (new-stack-quaternion0)) + (-> self racer rot y) + ) + (forward-up-nopitch->quaternion + (the-as quaternion (-> self racer surface-quat)) + *null-vector* + (-> self control local-normal) + ) + (quaternion-slerp! + (the-as quaternion (-> self racer surface-quat-smooth)) + (the-as quaternion (-> self racer surface-quat-smooth)) + (the-as quaternion (-> self racer surface-quat)) + 0.05 + ) + (quaternion-normalize! + (quaternion*! + (-> self control unknown-quaternion00) + (the-as quaternion (-> self racer surface-quat-smooth)) + (the-as quaternion (-> self racer quat)) + ) + ) + (quaternion-rotate-z! + (-> self control unknown-quaternion00) + (-> self control unknown-quaternion00) + (-> self racer rot z) + ) + (racer-cushion (-> self racer lean-rotx)) + (if (!= (-> self next-state name) 'target-racing-death) + (set! (-> self control unknown-vector11 y) + (+ (-> self racer cushion-base) (-> self racer cushion-offset) (-> self racer shock-offset)) + ) + ) + (quaternion-copy! (-> self control quat) (-> self control unknown-quaternion00)) + (set-twist! (-> self racer front-blade) (the-as float #f) (- (-> self racer front-rot)) (the-as float #f)) + (set-twist! (-> self racer bottom-blade) (the-as float #f) (the-as float #f) (- (-> self racer bottom-rot))) + (if (and + (= *cheat-mode* 'debug) + (and + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r2)) + (not *pause-lock*) + ) + ) + (vector-reset! (-> self control transv)) + ) + 0 + (none) + ) + +(defbehavior racer-bend-gravity target () + (set! (-> self control unknown-float82) (if (racer-on-ground?) + 32.0 + 2.0 + ) + ) + (let ((f0-2 + (if (or + (and (logtest? (-> self control status) 8) (zero? (logand (-> self control status) 1))) + (logtest? (-> self state-flags) #x8000) + ) + 0.0 + (-> self control unknown-float81) + ) + ) + ) + (set! (-> self control unknown-float80) + (seek + (-> self control unknown-float80) + f0-2 + (* (-> self control unknown-float82) (-> *display* seconds-per-frame)) + ) + ) + ) + (vector-deg-slerp + (-> self control dynam gravity-normal) + (-> self control unknown-dynamics00 gravity-normal) + (-> self control ground-poly-normal) + (-> self control unknown-float80) + ) + (vector-float*! + (-> self control dynam gravity) + (-> self control dynam gravity-normal) + (the-as float (-> self control dynam gravity-length)) + ) + 0 + (none) + ) + +(defbehavior racer-sounds target () + (if (zero? (-> self racer engine-sound-id)) + (set! (-> self racer engine-sound-id) (new-sound-id)) + ) + (let ((f0-1 (* 0.0000009155274 (-> self racer front-rotv)))) + 100.0 + (let ((f0-6 + (+ (* 2.0 f0-1) + (if (< 4096.0 + (vector-dot + (-> self control dynam gravity-normal) + (vector-! (new 'stack-no-clear 'vector) (-> self control trans) (-> self control shadow-pos)) + ) + ) + 0.7 + 0.0 + ) + (lerp-scale 0.0 0.5 (-> self racer boost-level) 0.0 (-> *RACER-bank* boost-level-max)) + ) + ) + ) + (if (< 2.5 f0-6) + (set! f0-6 2.5) + ) + (set! (-> self racer engine-sound-pitch) + (seek (-> self racer engine-sound-pitch) f0-6 (* 4.0 (-> *display* seconds-per-frame))) + ) + ) + ) + (let ((f0-11 (lerp-scale 100.0 60.0 (-> self racer engine-sound-pitch) 0.8 2.0))) + (sound-play-by-name + (static-sound-name "zoomer-loop") + (-> self racer engine-sound-id) + (the int (* 10.24 f0-11)) + (the int (* 1524.0 (-> self racer engine-sound-pitch))) + 0 + 1 + (the-as symbol (-> self control trans)) + ) + ) + (cond + ((and (!= (-> self current-level name) 'ogre) (!= (-> self current-level name) 'lavatube)) + #f + ) + ((or (logtest? (-> self control status) 2) (< 12288.0 (vector-length (-> self control transv)))) + (let ((v0-5 (the-as object (-> *display* base-frame-counter)))) + (set! (-> self racer unstuck-time) (the-as int v0-5)) + v0-5 + ) + ) + ((>= (- (-> *display* base-frame-counter) (-> self racer unstuck-time)) 1500) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack) + (set! (-> a1-6 param 0) (the-as uint #f)) + (let ((a0-12 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-12 mode) 'heat) + (set! (-> a1-6 param 1) (the-as uint a0-12)) + ) + (send-event-function self a1-6) + ) + ) + ((and + (>= (- (-> *display* base-frame-counter) (-> self racer unstuck-time)) 900) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self racer heat-sound-time))) 300) + ) + (set! (-> self racer heat-sound-time) (the-as uint (-> *display* base-frame-counter))) + (sound-play-by-name (static-sound-name "warning") (new-sound-id) 1024 0 0 1 #t) + ) + ) + ) + +(defbehavior racer-buzz target ((arg0 float)) + (let ((f1-0 (lerp-scale 0.2 1.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)))) + (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 (the int (* 255.0 (fmin 1.0 (* arg0 f1-0)))) 15) + ) + 0 + (none) + ) + +(defbehavior racer-find-prop-point target ((arg0 vector) (arg1 vector)) + (let ((s4-0 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 4)))) + (let ((a2-0 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control quat)))) + (vector-flatten! arg0 (vector-! (new 'stack-no-clear 'vector) arg1 s4-0) a2-0) + ) + (vector-normalize! arg0 4915.2) + (vector+! arg0 arg0 s4-0) + ) + arg0 + ) + +(defbehavior racer-effects target () + (let ((gp-0 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control unknown-quaternion00)))) + (set! (-> *part-id-table* 2212 init-specs 11 initial-valuef) + (lerp-scale 0.0 64.0 (-> self racer front-rotv) 18204.445 364088.88) + ) + (set! (-> *part-id-table* 2212 init-specs 11 initial-valuef) + (- (-> *part-id-table* 2212 init-specs 11 initial-valuef) (* 16.0 (the float (rand-vu-int-range 0 3)))) + ) + (when (< 0.0 (-> *part-id-table* 2212 init-specs 11 initial-valuef)) + (set! (-> *part-id-table* 2212 init-specs 14 initial-valuef) (the-as float gp-0)) + (set! (-> *part-id-table* 2212 init-specs 3 initial-valuef) 15155.2) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2212) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 4)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (let ((gp-2 (vector-y-quaternion! (new 'stack-no-clear 'vector) (-> self control unknown-quaternion00)))) + (set! (-> *part-id-table* 2212 init-specs 11 initial-valuef) + (lerp-scale 0.0 64.0 (-> self racer front-rotv) 18204.445 364088.88) + ) + (set! (-> *part-id-table* 2212 init-specs 11 initial-valuef) + (- (-> *part-id-table* 2212 init-specs 11 initial-valuef) (* 16.0 (the float (rand-vu-int-range 0 3)))) + ) + (when (< 0.0 (-> *part-id-table* 2212 init-specs 11 initial-valuef)) + (set! (-> *part-id-table* 2212 init-specs 14 initial-valuef) (the-as float gp-2)) + (set! (-> *part-id-table* 2212 init-specs 3 initial-valuef) 10240.0) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2212) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 10)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (when (and (racer-on-ground?) (< (-> self control unknown-float01) 90112.0)) + (let* ((gp-4 #f) + (s5-2 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 10))) + (v1-61 (-> self control ground-pat material)) + (a1-13 + (cond + ((= v1-61 (pat-material waterbottom)) + (when (and (logtest? (-> self draw status) (draw-status drwf03)) (zero? (-> self draw cur-lod))) + (let ((f1-3 (y-angle (-> self control))) + (f0-17 (-> self control unknown-float01)) + (s4-2 s5-2) + ) + (set! (-> s4-2 y) (-> self water height)) + (set! (-> *part-id-table* 2275 init-specs 4 initial-valuef) (+ 24576.0 f1-3)) + (set! (-> *part-id-table* 2275 init-specs 19 initial-valuef) (+ 49152.0 f1-3)) + (set! (-> *part-id-table* 2275 init-specs 1 initial-valuef) (* 0.0000036621095 f0-17)) + (set! (-> *part-id-table* 2275 init-specs 2 initial-valuef) (* 0.1 f0-17)) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2275) + s4-2 + (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* 2276) + s4-2 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (-> *part-id-table* 2208) + ) + ((= v1-61 (pat-material lava)) + (-> *part-id-table* 2213) + ) + ((= v1-61 (pat-material hotcoals)) + (-> *part-id-table* 2214) + ) + ((or + (= v1-61 (pat-material pcmetal)) + (= v1-61 (pat-material metal)) + (= v1-61 (pat-material tube)) + (= v1-61 (pat-material rotate)) + ) + (-> *part-id-table* 2215) + ) + ((= v1-61 (pat-material grass)) + (-> *part-id-table* 2207) + ) + ((or + (= v1-61 (pat-material dirt)) + (= v1-61 (pat-material sand)) + (= v1-61 (pat-material straw)) + (= v1-61 (pat-material gravel)) + ) + (-> *part-id-table* 2216) + ) + ((or (= v1-61 (pat-material wood)) (= v1-61 (pat-material crwood))) + (-> *part-id-table* 2217) + ) + ((= v1-61 (pat-material stone)) + (-> *part-id-table* 2831) + ) + (else + (-> *part-id-table* 2211) + ) + ) + ) + ) + (set! (-> s5-2 y) (-> self control shadow-pos y)) + (if (nonzero? a1-13) + (sp-launch-particles-var + (if gp-4 + *sp-particle-system-3d* + *sp-particle-system-2d* + ) + a1-13 + s5-2 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (let* ((gp-5 #f) + (v1-102 (-> self control ground-pat material)) + (s5-3 (cond + ((= v1-102 (pat-material waterbottom)) + (-> *part-id-table* 2218) + ) + ((= v1-102 (pat-material lava)) + (-> *part-id-table* 2219) + ) + ((= v1-102 (pat-material hotcoals)) + (-> *part-id-table* 2220) + ) + ((= v1-102 (pat-material grass)) + (-> *part-id-table* 2221) + ) + (else + 0 + ) + ) + ) + (a2-7 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 10))) + ) + (set! (-> a2-7 y) (-> self control shadow-pos y)) + (if (nonzero? s5-3) + (sp-launch-particles-var + (if gp-5 + *sp-particle-system-3d* + *sp-particle-system-2d* + ) + (the-as sparticle-launcher s5-3) + a2-7 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + ) + (when (and + (and (= (-> self fact-info-target eco-type) 1) (>= (-> self fact-info-target eco-level) 1.0)) + (logtest? + (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0) + (pad-buttons circle square) + ) + (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword82)) 75) + (zero? (logand (-> self state-flags) #x8008)) + ) + (let ((gp-6 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control quat))) + (s5-4 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 4))) + ) + (set! (-> gp-6 y) 0.0) + (vector-normalize! gp-6 (-> *RACER-bank* yellow-projectile-speed)) + (vector+! gp-6 gp-6 (-> self control transv)) + (let ((s4-3 (get-process *default-dead-pool* projectile-yellow #x4000))) + (when s4-3 + (let ((t9-22 (method-of-type projectile-yellow activate))) + (t9-22 (the-as projectile-yellow s4-3) self 'projectile-yellow (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-3 + projectile-init-by-other + (-> self entity) + s5-4 + gp-6 + (if (>= (-> self fact-info-target eco-level) (-> *FACT-bank* eco-level-max)) + 152 + 136 + ) + #f + ) + (-> s4-3 ppointer) + ) + ) + ) + (set! (-> self control unknown-dword82) (-> *display* base-frame-counter)) + ) + (let ((f22-0 (-> *RACER-bank* hotcoals-heat-inc)) + (f24-0 (-> *RACER-bank* lava-heat-inc)) + (f28-2 (-> *RACER-bank* lava-air-heat-inc)) + (f26-0 (-> *RACER-bank* surface-heat-inc)) + (f30-2 (-> *RACER-bank* jump-heat-inc)) + ) + (case (-> self current-level name) + (('lavatube) + (set! f22-0 (-> *RACER-bank* lavatube-hotcoals-heat-inc)) + (set! f24-0 (-> *RACER-bank* lavatube-lava-heat-inc)) + (set! f28-2 (-> *RACER-bank* lavatube-lava-air-heat-inc)) + (set! f26-0 (-> *RACER-bank* lavatube-surface-heat-inc)) + (set! f30-2 (-> *RACER-bank* lavatube-jump-heat-inc)) + ) + ) + (let* ((f20-0 (get-health-percent-lost *game-info* #f)) + (f22-1 (lerp-scale f22-0 (* 0.5 f22-0) f20-0 0.0 1.0)) + (f24-1 (lerp-scale f24-0 (* 0.33333334 f24-0) f20-0 0.0 1.0)) + ) + (case (-> self control poly-pat material) + (((pat-material hotcoals)) + (set! (-> self racer heat) + (seek (-> self racer heat) (-> *RACER-bank* heat-max) (* f22-1 (-> *display* seconds-per-frame))) + ) + ) + (((pat-material lava)) + (if (racer-on-ground?) + (set! (-> self racer heat) + (seek (-> self racer heat) (-> *RACER-bank* heat-max) (* f24-1 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer heat) + (seek (-> self racer heat) (-> *RACER-bank* heat-max) (* f28-2 (-> *display* seconds-per-frame))) + ) + ) + ) + (else + (if (not (racer-on-ground?)) + (set! (-> self racer heat) (seek (-> self racer heat) 0.0 (* f26-0 (-> *display* seconds-per-frame)))) + ) + ) + ) + ) + (let ((v1-189 (- (-> *display* base-frame-counter) (-> self control unknown-dword11)))) + (if (and (>= v1-189 270) (>= 900 v1-189)) + (set! (-> self racer heat) (seek (-> self racer heat) 0.0 (* f30-2 (-> *display* seconds-per-frame)))) + ) + ) + ) + (when (and (>= (-> self racer heat) (-> *RACER-bank* heat-max)) (= (-> self game mode) 'play)) + (let ((a1-43 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-43 from) self) + (set! (-> a1-43 num-params) 2) + (set! (-> a1-43 message) 'attack) + (set! (-> a1-43 param 0) (the-as uint #f)) + (let ((a0-68 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-68 mode) 'heat) + (set! (-> a1-43 param 1) (the-as uint a0-68)) + ) + (send-event-function self a1-43) + ) + ) + (if (and *cheat-mode* *debug-segment* (cpad-pressed? 0 l2)) + (send-event self 'boost 1.0) + ) + (let ((v1-218 (- (-> *display* base-frame-counter) (the-as int (-> self racer boost-time))))) + (if (< v1-218 (the-as int (-> self racer boost-duration))) + (set! (-> self racer boost-curve) + (* (-> *RACER-bank* boost-curve-max) + (sin (* 32768.0 (/ (the float v1-218) (the float (-> self racer boost-duration))))) + ) + ) + (set! (-> self racer boost-curve) 0.0) + ) + ) + (when (or + (zero? + (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) + ) + (< (-> self control unknown-float01) 4096.0) + (= (-> self racer boost-level) 0.0) + ) + (when (nonzero? (-> self racer boost-sound-id)) + (let ((v1-241 (the-as sound-rpc-set-param (get-sound-buffer-entry)))) + (set! (-> v1-241 command) (sound-command set-param)) + (set! (-> v1-241 id) (-> self racer boost-sound-id)) + (set! (-> v1-241 parms volume) -4) + (set! (-> v1-241 auto-time) 120) + (set! (-> v1-241 auto-from) 2) + (set! (-> v1-241 parms mask) (the-as uint 17)) + (-> v1-241 id) + ) + (set! (-> self racer boost-sound-id) (new 'static 'sound-id)) + 0 + ) + (set! (-> self racer boost-level) 0.0) + ) + (set! (-> self racer boost-target) (+ (-> self racer boost-curve) (-> self racer boost-level))) + (set! (-> self racer boost-output) + (seek (-> self racer boost-output) (-> self racer boost-target) (* 40960.0 (-> *display* seconds-per-frame))) + ) + (when (!= (-> self racer boost-output) 0.0) + (dotimes (gp-7 8) + (let ((v1-258 (rand-vu-int-range 3 (+ (-> self node-list length) -1)))) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2229) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data v1-258)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (cpad-set-buzz! (-> *cpad-list* cpads 0) 0 1 30) + ) + (when (logtest? (-> self control status) 8) + (let* ((gp-8 (racer-find-prop-point (new 'stack-no-clear 'vector) (-> self control unknown-vector70))) + (v1-274 (shr (shl (-> self control unknown-int60) 52) 58)) + (a1-54 + (cond + ((or (= v1-274 16) (= v1-274 8)) + (set! (-> *part-id-table* 2226 init-specs 1 initial-valuef) + (lerp-scale 0.2 10.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)) + ) + (-> *part-id-table* 2226) + ) + (else + (set! (-> *part-id-table* 2225 init-specs 1 initial-valuef) + (lerp-scale 0.2 10.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)) + ) + (-> *part-id-table* 2225) + ) + ) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + a1-54 + gp-8 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (cpad-set-buzz! (-> *cpad-list* cpads 0) 0 51 15) + (sound-play-by-name + (sound-name-with-material 'zoom-hit (the-as int (-> self control unknown-int60)) "") + (-> self racer scrape-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + ) + (when (and + (< (-> self racer heat) (-> *RACER-bank* heat-max)) + (and + (< (* 0.8 (-> *RACER-bank* heat-max)) (-> self racer heat)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self racer heat-sound-time))) + (the int (* 3000.0 (- 1.0 (/ (-> self racer heat) (-> *RACER-bank* heat-max))))) + ) + ) + ) + (set! (-> self racer heat-sound-time) (the-as uint (-> *display* base-frame-counter))) + (sound-play-by-name (static-sound-name "warning") (new-sound-id) 1024 0 0 1 #t) + ) + (when (rand-vu-percent? (/ (-> self racer heat) (-> *RACER-bank* heat-max))) + (let ((a2-28 + (process-drawable-random-point! + (the-as process-drawable (ppointer->process (-> self manipy))) + (new 'stack-no-clear 'vector) + ) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2227) + a2-28 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + 0 + (none) + ) + +(defbehavior target-racing-center-anim target () + (set! (-> self racer turn-anim-frame) 0.0) + (set! (-> self racer tail-anim-frame) 0.0) + (set! (-> self racer rudd-anim-frame) 0.0) + 0 + (none) + ) + +(defbehavior target-racing-turn-anim target () + (let ((gp-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s5-0 gp-0) + (set! (-> self control unknown-int40) s5-0) + (set! (-> self racer turn-anim-targ) (fmax -16.0 (fmin 16.0 (-> self racer turn-anim-targ)))) + (or + (not (>= (* (-> self racer turn-anim-targ) (-> self racer turn-anim-frame)) 0.0)) + (< (fabs (-> self racer turn-anim-frame)) (fabs (-> self racer turn-anim-targ))) + ) + (+! + (-> self racer turn-anim-vel) + (* (- (-> self racer turn-anim-targ) (-> self racer turn-anim-frame)) + (lerp-scale + 20.0 + (if (< (fabs (-> self racer turn-anim-frame)) (fabs (-> self racer turn-anim-targ))) + 30.0 + 60.0 + ) + (-> self control unknown-float01) + 0.0 + (* 0.3 (-> self racer transv-max)) + ) + (-> *display* seconds-per-frame) + ) + ) + (set! (-> self racer turn-anim-vel) + (fmax + -100.0 + (fmin + 100.0 + (* (-> self racer turn-anim-vel) + (lerp-scale 0.96 0.9 (-> self control unknown-float01) 0.0 (* 0.3 (-> self racer transv-max))) + ) + ) + ) + ) + (+! (-> self racer turn-anim-frame) (* (-> self racer turn-anim-vel) (-> *display* seconds-per-frame))) + (set! (-> self racer turn-anim-frame) (fmax -20.0 (fmin 20.0 (-> self racer turn-anim-frame)))) + (cond + ((and (>= (-> self racer turn-anim-frame) 20.0) (>= (-> self racer turn-anim-vel) 0.0)) + (set! (-> self racer turn-anim-vel) 0.0) + ) + ((and (>= -20.0 (-> self racer turn-anim-frame)) (>= 0.0 (-> self racer turn-anim-vel))) + (set! (-> self racer turn-anim-vel) 0.0) + ) + ) + (+! + (-> self racer tail-anim-vel) + (* -50.0 + (-> *display* seconds-per-frame) + (- (-> self racer tail-anim-frame) + (* -0.0091552725 (- (-> self racer change-roty) (-> self racer change-roty-old))) + ) + ) + ) + (set! (-> self racer tail-anim-vel) (fmax -100.0 (fmin 100.0 (* 0.8 (-> self racer tail-anim-vel))))) + (+! (-> self racer tail-anim-frame) (* (-> self racer tail-anim-vel) (-> *display* seconds-per-frame))) + (set! (-> self racer tail-anim-frame) (fmax -20.0 (fmin 20.0 (-> self racer tail-anim-frame)))) + (cond + ((and (>= (-> self racer tail-anim-frame) 20.0) (>= (-> self racer tail-anim-vel) 0.0)) + (set! (-> self racer tail-anim-vel) 0.0) + ) + ((and (>= -20.0 (-> self racer tail-anim-frame)) (>= 0.0 (-> self racer tail-anim-vel))) + (set! (-> self racer tail-anim-vel) 0.0) + ) + ) + (+! + (-> self racer rudd-anim-vel) + (* 40.0 (-> *display* seconds-per-frame) (- (-> self racer tail-anim-frame) (-> self racer rudd-anim-frame))) + ) + (set! (-> self racer rudd-anim-vel) (fmax -100.0 (fmin 100.0 (* 0.96 (-> self racer rudd-anim-vel))))) + (+! (-> self racer rudd-anim-frame) (* (-> self racer rudd-anim-vel) (-> *display* seconds-per-frame))) + (set! (-> self racer rudd-anim-frame) (fmax -20.0 (fmin 20.0 (-> self racer rudd-anim-frame)))) + (cond + ((and (>= (-> self racer rudd-anim-frame) 20.0) (>= (-> self racer rudd-anim-vel) 0.0)) + (set! (-> self racer rudd-anim-vel) 0.0) + ) + ((and (>= -20.0 (-> self racer rudd-anim-frame)) (>= 0.0 (-> self racer rudd-anim-vel))) + (set! (-> self racer rudd-anim-vel) 0.0) + ) + ) + ) + (set-time-ratios *display* (the float gp-0)) + ) + (when #f + (format *stdcon* "~%~%~%z:~r vy:~r~%" (-> self racer rot z) (-> self racer rotv y)) + (format + *stdcon* + "t:~6,,2f v:~6,,2f p:~6,,2f~%" + (-> self racer turn-anim-targ) + (-> self racer turn-anim-vel) + (-> self racer turn-anim-frame) + ) + (format + *stdcon* + "t:~6,,2f v:~6,,2f p:~6,,2f~%" + (-> self racer turn-anim-targ) + (-> self racer tail-anim-vel) + (-> self racer tail-anim-frame) + ) + ) + (set-twist! + (-> self racer tail) + (the-as float #f) + (the-as float #f) + (* -273.06668 (-> self racer tail-anim-frame)) + ) + (let ((f30-2 (fmin 1.0 (* 2.0 (fabs (-> self racer slide-shift-x)))))) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 num-func) num-func-identity) + (set! (-> gp-1 frame-num) (ja-aframe (-> self racer turn-anim-frame) 0)) + ) + (let ((a0-9 (-> self skel root-channel 1))) + (set! (-> a0-9 frame-interp) (+ 0.5 (* 0.025 (-> self racer tail-anim-frame)))) + (set! (-> a0-9 param 0) 0.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-chan) + ) + (let ((gp-2 (-> self skel root-channel 2))) + (let ((f0-82 (lerp (-> self racer slide-interp) f30-2 0.125))) + (set! (-> self racer slide-interp) f0-82) + (set! (-> gp-2 frame-interp) f0-82) + ) + (set! (-> gp-2 param 0) 0.0) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-chan) + ) + ) + (let ((a0-12 (-> self skel root-channel 3))) + (set! (-> a0-12 frame-interp) + (* (-> self racer slide-interp) (+ 0.5 (* 0.025 (-> self racer tail-anim-frame)))) + ) + (set! (-> a0-12 param 0) 0.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-chan) + ) + 0 + (none) + ) + +(defbehavior target-racing-jump-anim target ((arg0 basic) (arg1 int)) + (let ((s4-0 'nothing) + (f30-0 0.0) + ) + (until (ja-done? 0) + (let ((f0-0 (target-height-above-ground))) + (if (< 8192.0 f0-0) + 'jump + ) + ) + (let ((s5-0 #f)) + (when (!= s5-0 s4-0) + (if (= s4-0 'nothing) + (ja-channel-push! 1 arg1) + (ja-channel-push! 1 37) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 130))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 130)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) f30-0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 130)) num-func-seek!) + ) + (set! s4-0 s5-0) + ) + ) + (suspend) + (let ((f0-4 (lerp-scale 2.0 1.0 (ja-aframe-num 0) 0.0 22.0))) + (if (= (-> self next-state name) 'target-racing-falling) + (set! f0-4 (* 0.5 f0-4)) + ) + (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) f0-4) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! f30-0 (ja-aframe-num 0)) + (ja-blend-eval) + ) + ) + (ja-channel-set! 2) + (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 131)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (let ((gp-2 (-> self skel root-channel 1))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 132)) + num-func-identity + ) + (set! (-> gp-2 frame-num) (ja-aframe 44.0 0)) + ) + (let ((f30-1 0.0)) + (while #t + (suspend) + (let ((gp-3 (-> self skel root-channel 1))) + (set! f30-1 (seek f30-1 1.0 (-> *display* seconds-per-frame))) + (set! (-> gp-3 frame-interp) f30-1) + ) + ) + ) + (the-as none 0) + (none) + ) + +(defbehavior target-racing-land-anim target ((arg0 symbol)) + (if (>= (-> self racer slide-mode) 0) + (goto cfg-23) + ) + (ja-channel-push! 1 21) + (cond + ((= arg0 'high-jump) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 135))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 135)) 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 135)) num-func-seek!) + ) + (until (ja-done? 0) + (if (>= (-> self racer slide-mode) 0) + (goto cfg-23) + ) + (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) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((= arg0 'jump) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 129))) + (set! (-> gp-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 129)) data 0 length) -1)) + ) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) (ja-aframe 44.0 0)) + (joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 129)) num-func-seek!) + ) + (until (ja-done? 0) + (if (>= (-> self racer slide-mode) 0) + (goto cfg-23) + ) + (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 ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 132))) + (set! (-> gp-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 132)) data 0 length) -1)) + ) + (set! (-> gp-2 param 1) 1.0) + (set! (-> gp-2 frame-num) (ja-aframe 44.0 0)) + (joint-control-channel-group! gp-2 (the-as art-joint-anim (-> self draw art-group data 132)) num-func-seek!) + ) + (until (ja-done? 0) + (if (>= (-> self racer slide-mode) 0) + (goto cfg-23) + ) + (suspend) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1))) + (set! (-> a0-11 param 1) 1.0) + (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (label cfg-23) + 0 + (none) + ) + +(defbehavior target-racing-post target () + (set! (-> self control reaction) racer-collision-reaction) + (set! (-> self control surf) *race-track-surface*) + (set! (-> self racer transv-max) + (+ (-> self control unknown-surface01 transv-max) (-> self racer boost-output) (-> self racer hill-boost)) + ) + (let ((gp-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s5-0 gp-0) + (set! (-> self control unknown-int40) s5-0) + (flag-setup) + (build-conversions (-> self control transv)) + (racer-service-slide) + (let ((f30-0 (analog-input (the-as int (-> self control unknown-cpad-info00 leftx)) 128.0 32.0 110.0 1.0))) + (set! (-> self racer mod-x) f30-0) + (let* ((f28-0 (-> self racer slide-amp)) + (v1-17 (-> self racer slide-mode)) + (f28-1 + (* f28-0 + (cond + ((zero? v1-17) + (- (fmax + (analog-input + (the-as int (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) abutton 8)) + 0.0 + 32.0 + 255.0 + 1.0 + ) + (analog-input + (the-as int (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) abutton 9)) + 0.0 + 32.0 + 255.0 + 1.0 + ) + ) + ) + ) + ((= v1-17 1) + (fmax + (analog-input + (the-as int (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) abutton 8)) + 0.0 + 32.0 + 255.0 + 1.0 + ) + (analog-input + (the-as int (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) abutton 9)) + 0.0 + 32.0 + 255.0 + 1.0 + ) + ) + ) + (else + 0.0 + ) + ) + ) + ) + ) + (let ((f26-2 (analog-input (the-as int (-> self control unknown-cpad-info00 lefty)) 128.0 32.0 110.0 1.0))) + (when (-> self racer stick-off) + (set! f30-0 0.0) + (set! f26-2 0.0) + ) + (+! (-> self racer front-turn) (* 0.0625 (deg-diff (-> self racer front-turn) (* 3640.889 f30-0)))) + (+! (-> self racer tail-tilt) (* 0.0625 (deg-diff (-> self racer tail-tilt) (* -3640.889 f26-2)))) + ) + (let* ((f26-3 + (* f30-0 (lerp-scale 5461.3335 7281.778 (-> self control unknown-float01) 0.0 (-> self racer transv-max))) + ) + (f0-29 + (* f28-1 (lerp-scale 546.13336 3640.889 (-> self control unknown-float01) 0.0 (-> self racer transv-max))) + ) + (f1-3 (* -0.8 (-> self racer rotv y))) + (f0-33 (+ (cond + ((< (* f1-3 f26-3) 0.0) + 0.0 + ) + (else + (let ((f2-3 (+ 910.2222 (fabs f1-3)))) + (fmax (fmin f26-3 f2-3) (- f2-3)) + ) + ) + ) + (cond + ((< (* f1-3 f0-29) 0.0) + 0.0 + ) + (else + (let ((f1-5 (+ 910.2222 (fabs f1-3)))) + (fmax (fmin f0-29 f1-5) (- f1-5)) + ) + ) + ) + ) + ) + ) + (+! (-> self racer rot z) (* 0.05 (deg-diff (-> self racer rot z) (fmax -7281.778 (fmin 7281.778 f0-33))))) + ) + (racer-xz f30-0 f28-1) + (racer-thrust (the-as basic f30-0) f28-1) + ) + ) + (racer-calc-gravity) + (add-gravity) + (reverse-conversions (-> self control transv)) + (let ((f30-1 + (/ (* (-> self racer tail-tilt) (+ 20480.0 (-> self control unknown-float01))) + (+ 20480.0 (-> self racer transv-max)) + ) + ) + ) + (cond + ((racer-on-ground?) + (set! (-> self control unknown-float81) + (seek (-> self control unknown-float81) 1.0 (* 8.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer mult-rotx) (seek (-> self racer mult-rotx) 0.0 (* 2.0 (-> *display* seconds-per-frame)))) + (set! (-> self racer targ-rotx) 0.0) + (set! (-> self racer hill-rotx) 0.0) + (set! (-> self racer speed-rotx) 0.25) + (let ((f0-52 (-> self racer bob-timer))) + (let ((f1-16 (+ (-> self racer bob-timer) (* (-> self racer bob-meta-timer) (-> *display* time-adjust-ratio)))) + (f2-12 (-> self racer bob-period)) + ) + (set! (-> self racer bob-timer) (- f1-16 (* (the float (the int (/ f1-16 f2-12))) f2-12))) + ) + (when (!= (the int (/ f0-52 (* 0.5 (-> self racer bob-period)))) + (the int (/ (-> self racer bob-timer) (* 0.5 (-> self racer bob-period)))) + ) + (set! (-> self racer bob-mult-trans) (seek (-> self racer bob-mult-trans) 1.0 0.75)) + (if (< 1.5 (-> self racer bob-meta-meta-timer)) + (set! (-> self racer bob-meta-meta-timer) (seek (-> self racer bob-meta-meta-timer) 1.0 0.5)) + ) + (when (>= (- (-> *display* base-frame-counter) (the-as int (-> self racer bob-meta-time))) 660) + (set! (-> self racer bob-meta-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self racer bob-meta-meta-timer) (rand-vu-float-range 0.8 1.2)) + ) + ) + ) + (let ((f0-63 (lerp-scale -1.0 -0.33 (-> self control unknown-float01) 0.0 (-> self racer transv-max)))) + (set! (-> self racer bob-mult-rot) + (seek (-> self racer bob-mult-rot) f0-63 (* 8.0 (-> *display* seconds-per-frame))) + ) + ) + (if (< 0.0 f30-1) + (set! f30-1 0.0) + ) + (set! (-> self racer stick-lock) #f) + ) + (else + (set! (-> self control unknown-float81) + (seek (-> self control unknown-float81) 0.0 (* 2.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer mult-rotx) + (seek (-> self racer mult-rotx) 1.0 (* 16.0 (-> *display* seconds-per-frame))) + ) + (let ((f0-77 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))) + (vector-! (new 'stack-no-clear 'vector) (-> self control trans) (the-as vector (-> self control trans-old))) + (let* ((v1-128 (-> self racer bounce)) + (f1-36 (cond + ((= v1-128 1) + (* -0.08888889 f0-77) + ) + ((= v1-128 2) + (* -0.035555556 f0-77) + ) + ((= v1-128 3) + (* -0.017777778 f0-77) + ) + (else + (* -0.13333334 f0-77) + ) + ) + ) + ) + (if (-> self racer hop?) + (set! f1-36 (* 0.5 f1-36)) + ) + (if (= (-> self control unknown-surface00 mode) 'air) + (set! (-> self racer targ-rotx) (fmax -2730.6667 (fmin 5461.3335 f1-36))) + ) + ) + (cond + ((>= f0-77 -32768.0) + (cond + ((or + (= (-> self next-state name) 'target-racing-jump) + (and (= (-> self next-state name) 'target-racing-bounce) (= (-> self racer bounce) 1)) + ) + (set! (-> self racer speed-rotx) 0.5) + (when (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) 30) + (set! (-> self racer hill-rotx) + (seek (-> self racer hill-rotx) 0.0 (* 65536.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer speed-rotx) 0.6) + ) + ) + (else + (set! (-> self racer speed-rotx) 0.25) + ) + ) + (set! (-> self racer mult-rotx) + (seek (-> self racer mult-rotx) 1.0 (* 64.0 (-> *display* seconds-per-frame))) + ) + ) + (else + (set! (-> self racer speed-rotx) 0.025) + ) + ) + ) + (let ((f0-91 (+ (-> self racer bob-timer) (* (-> self racer bob-meta-timer) (-> *display* time-adjust-ratio)))) + (f1-44 (-> self racer bob-period)) + ) + (set! (-> self racer bob-timer) (- f0-91 (* (the float (the int (/ f0-91 f1-44))) f1-44))) + ) + (set! (-> self racer bob-mult-rot) + (seek (-> self racer bob-mult-rot) 0.0 (* 16.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer bob-mult-trans) + (seek (-> self racer bob-mult-trans) 0.0 (* 16.0 (-> *display* seconds-per-frame))) + ) + (set! f30-1 + (lerp-scale + f30-1 + 1820.4445 + (the float (- (-> *display* base-frame-counter) (-> self control unknown-dword11))) + 0.0 + 900.0 + ) + ) + (cond + ((and + (logtest? (-> self control status) 8) + (and + (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) 30) + (or (-> self racer stick-lock) (< (target-move-dist (the-as int (-> *TARGET-bank* stuck-time))) 4096.0)) + (not + (and + (= *cheat-mode* 'debug) + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r2)) + ) + ) + ) + ) + (cond + ((and + (< 0.0 + (vector-dot + (-> self control dynam gravity-normal) + (vector-! (new 'stack-no-clear 'vector) (-> self control trans) (-> self control unknown-vector54)) + ) + ) + (logtest? (-> self control root-prim prim-core action) #x8000) + ) + (+! (-> self racer stuck-count) 1) + (go target-racing-smack 122880.0 #f) + ) + (else + (set! (-> self racer stick-lock) #t) + ) + ) + ) + (else + (set! (-> self racer stick-lock) #f) + ) + ) + ) + ) + (+! (-> self racer lean-rotx) (* 0.1 (deg-diff (-> self racer lean-rotx) f30-1))) + ) + (set! (-> self racer lean-rotx) 0.0) + (set! (-> self racer rot-old quad) (-> self racer rot quad)) + (set! (-> self racer change-roty-old) (-> self racer change-roty)) + (set! (-> self racer rot y) + (the float + (sar + (shl (the int (+ (-> self racer rot y) (* (-> self racer rotv y) (-> *display* seconds-per-frame)))) 48) + 48 + ) + ) + ) + (set! (-> self racer change-roty) + (* (deg-diff (-> self racer rot-old y) (-> self racer rot y)) (-> *display* frames-per-second)) + ) + (racer-collision) + (racer-integrate) + (post-flag-setup) + ) + (set-time-ratios *display* (the float gp-0)) + ) + (target-compute-slopes *up-vector*) + (racer-effects) + (racer-sounds) + (rot->dir-targ! (-> self control)) + (racer-bend-gravity) + (ja-post) + (joint-points) + (do-target-shadow) + (target-powerup-process) + (vector+! (-> self racer bike-trans) (-> self control trans) (-> self control unknown-vector12)) + (quaternion-copy! (the-as quaternion (-> self racer bike-quat)) (-> self control quat)) + (set! (-> self racer bike-scale quad) (-> self control scale quad)) + (let ((v1-240 (-> *target-shadow-control* settings shadow-dir quad))) + (set! (-> *racer-shadow-control* settings shadow-dir quad) v1-240) + ) + 0 + (none) + ) + + + + diff --git a/goal_src/levels/sunken/target-tube.gc b/goal_src/levels/sunken/target-tube.gc index 9f41f50a4..c6ead66df 100644 --- a/goal_src/levels/sunken/target-tube.gc +++ b/goal_src/levels/sunken/target-tube.gc @@ -5,3 +5,1112 @@ ;; name in dgo: target-tube ;; dgos: L1, SUN, SUNKEN +(define-extern *tube-surface* surface) ;; unknown type + +(define-extern target-tube-hit (state handle attack-info target)) ;; unknown type +(define-extern target-tube-jump (state float float target)) ;; unknown type +(define-extern target-tube-death (state symbol target)) ;; unknown type +(define-extern target-tube (state target)) ;; unknown type + +;; DECOMP BEGINS + +(define *tube-mods* (new 'static 'surface + :name 'tube + :turnv 21845.334 + :turnvv 524288.0 + :tiltv 5461.3335 + :tiltvv 131072.0 + :transv-max 1.0 + :target-speed 32768.0 + :seek0 1.0 + :seek90 1.0 + :seek180 1.0 + :fric 1.0 + :nonlin-fric-dist 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + ) + ) + +(define *tube-jump-mods* (new 'static 'surface + :name 'tube + :turnv 21845.334 + :turnvv 262144.0 + :tiltv 5461.3335 + :tiltvv 131072.0 + :transv-max 1.0 + :seek0 0.8 + :seek90 0.7 + :seek180 0.8 + :fric 1.0 + :nonlin-fric-dist 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :mode 'air + :flags #x800 + ) + ) + +(define *tube-hit-mods* (new 'static 'surface + :name 'tube + :turnv 21845.334 + :turnvv 262144.0 + :tiltv 32768.0 + :tiltvv 131072.0 + :transv-max 1.0 + :target-speed 40960.0 + :fric 1.0 + :nonlin-fric-dist 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :mode 'air + ) + ) + +(let ((v1-3 (new 'static 'surface + :name '*tube-surface* + :turnv 1.0 + :turnvv 1.0 + :tiltv 1.0 + :tiltvv 1.0 + :transv-max 94208.0 + :target-speed 1.0 + :seek0 32768.0 + :seek90 94208.0 + :seek180 8192.0 + :fric 0.98 + :nonlin-fric-dist 4091904.0 + :slip-factor 0.7 + :slope-down-factor 81920.0 + :slope-slip-angle 16384.0 + :bend-speed 4.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :flags #x28 + ) + ) + ) + (set! *tube-surface* v1-3) + (set! (-> v1-3 mult-hook) (the-as (function surface surface surface int none) nothing)) + (set! (-> v1-3 touch-hook) nothing) + (set! (-> v1-3 active-hook) nothing) + ) + +(deftype tube-info (basic) + ((entity basic :offset-assert 4) + (tube handle :offset-assert 8) + (downhill vector :inline :offset-assert 16) + (centertube vector :inline :offset-assert 32) + (downtube vector :inline :offset-assert 48) + (sidetube vector :inline :offset-assert 64) + (foretube vector :inline :offset-assert 80) + (old-transv vector :inline :offset-assert 96) + (mod-x float :offset-assert 112) + (mod-y float :offset-assert 116) + (start-time uint64 :offset-assert 120) + (turn-anim-targ float :offset-assert 128) + (turn-anim-frame float :offset-assert 132) + (turn-anim-vel float :offset-assert 136) + (tube-sound-id sound-id :offset-assert 140) + (tube-sound-vol float :offset-assert 144) + ) + :method-count-assert 9 + :size-assert #x94 + :flag-assert #x900000094 + ) + + +(deftype tube-bank (basic) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + + +(define *TUBE-bank* (new 'static 'tube-bank)) + +(defbehavior tube-sounds target () + (set! (-> self tube tube-sound-vol) (seek + (-> self tube tube-sound-vol) + (if (logtest? (-> self control status) 1) + 100.0 + 0.0 + ) + (* 200.0 (-> *display* seconds-per-frame)) + ) + ) + (let ((f30-0 (-> self tube tube-sound-vol)) + (f0-5 (lerp-scale -0.3 0.3 (-> self control unknown-float01) 0.0 122880.0)) + ) + (sound-play-by-name + (static-sound-name "slide-loop") + (-> self tube tube-sound-id) + (the int (* 10.24 f30-0)) + (the int (* 1524.0 f0-5)) + 0 + 1 + (the-as symbol (-> self control trans)) + ) + ) + ) + +(defbehavior tube-thrust target ((arg0 float) (arg1 float)) + (let ((s4-1 (vector-! (new 'stack-no-clear 'vector) (-> self tube foretube) (-> self control trans)))) + (vector-flatten! s4-1 s4-1 (-> self tube downtube)) + (vector-flatten! s4-1 s4-1 (-> self control local-normal)) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + s4-1 + (meters 0.00024414062) + (new 'static 'rgba :g #xff :a #x80) + ) + (vector-matrix*! s4-1 s4-1 (-> self control unknown-matrix00)) + (vector-float*! s4-1 s4-1 2.0) + (if (< (-> self control unknown-surface01 target-speed) (vector-length s4-1)) + (vector-normalize! s4-1 (-> self control unknown-surface01 target-speed)) + ) + (vector-v++! (-> self control unknown-vector00) s4-1) + (when (logtest? (-> self control status) 8) + (let ((s3-0 (-> self tube old-transv))) + (-> self control unknown-vector00 y) + (vector-reflect! s4-1 s3-0 (-> self control unknown-vector71)) + (let ((f30-1 (vector-dot (-> self tube sidetube) (-> self tube old-transv))) + (s2-0 (new-stack-vector0)) + (f28-0 (vector-dot (-> self tube sidetube) s4-1)) + ) + 0.0 + (vector-! s2-0 s4-1 (vector-float*! s2-0 (-> self tube sidetube) f28-0)) + (let* ((f0-8 (vector-length s2-0)) + (f1-0 f0-8) + ) + (cond + ((< 0.0 f30-1) + (if (< f28-0 (- f30-1)) + (set! f28-0 (- f30-1)) + ) + ) + ((< f30-1 0.0) + (if (< (- f30-1) f28-0) + (set! f28-0 (- f30-1)) + ) + ) + ) + (vector+! s4-1 (vector-float*! s4-1 (-> self tube sidetube) f28-0) (vector-float*! s2-0 s2-0 (/ f0-8 f1-0))) + ) + ) + (vector-flatten! s4-1 s4-1 (-> self control local-normal)) + (let ((s2-1 (new-stack-vector0))) + (let ((f0-11 (vector-dot (-> self tube downtube) s4-1))) + 0.0 + (vector-! s2-1 s4-1 (vector-float*! s2-1 (-> self tube downtube) f0-11)) + ) + (let* ((f0-12 (vector-length s2-1)) + (f1-2 f0-12) + (f2-5 (fmax (-> self control unknown-float01) (vector-dot s3-0 (-> self tube downtube)))) + ) + (vector+! s4-1 (vector-float*! s4-1 (-> self tube downtube) f2-5) (vector-float*! s2-1 s2-1 (/ f0-12 f1-2))) + ) + ) + ) + (vector-matrix*! s4-1 s4-1 (-> self control unknown-matrix00)) + (let ((f0-14 (-> self control unknown-vector00 y))) + (set! (-> self control unknown-vector00 quad) (-> s4-1 quad)) + (set! (-> self control unknown-vector00 y) f0-14) + ) + ) + ) + (let ((s4-2 (new 'stack-no-clear 'vector))) + (set! (-> s4-2 quad) (-> self tube downtube quad)) + (let ((s3-1 (new 'stack-no-clear 'vector))) + (set! (-> s3-1 quad) (-> self tube sidetube quad)) + (vector-flatten! s3-1 s3-1 (-> self control local-normal)) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + s3-1 + (meters 2.0) + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + (vector-matrix*! s3-1 s3-1 (-> self control unknown-matrix00)) + (vector-normalize! s3-1 (* arg0 (-> self control unknown-surface01 seek90))) + (vector-v++! (-> self control unknown-vector00) s3-1) + ) + (vector-flatten! s4-2 s4-2 (-> self control local-normal)) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + s4-2 + (meters 2.0) + (new 'static 'rgba :r #xff :g #x80 :b #x40 :a #x80) + ) + (vector-matrix*! s4-2 s4-2 (-> self control unknown-matrix00)) + (vector-normalize! + s4-2 + (* (-> self control unknown-surface01 slope-down-factor) (fmax 0.2 (-> self control surface-angle))) + ) + (vector-v++! (-> self control unknown-vector00) s4-2) + ) + (let* ((f1-6 (-> self control unknown-surface01 fric)) + (f1-9 (- 1.0 (* 60.0 (-> *display* seconds-per-frame) (- 1.0 f1-6)))) + (f0-21 (* 0.5 (+ 1.0 f1-9))) + ) + (set! (-> self control unknown-vector00 x) (* (-> self control unknown-vector00 x) f0-21)) + (set! (-> self control unknown-vector00 z) (* (-> self control unknown-vector00 z) f0-21)) + ) + (let ((f30-2 + (- (-> self control unknown-surface01 transv-max) (if (< arg1 0.0) + (* arg1 (-> self control unknown-surface01 seek0)) + (* arg1 (-> self control unknown-surface01 seek180)) + ) + ) + ) + ) + (if (>= (vector-xz-length (-> self control unknown-vector00)) f30-2) + (vector-xz-normalize! (-> self control unknown-vector00) f30-2) + ) + ) + (let ((gp-1 (new-stack-vector0))) + (vector-matrix*! gp-1 (-> self control unknown-vector00) (-> self control unknown-matrix01)) + (vector-float*! gp-1 gp-1 0.5) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + gp-1 + (meters 0.00024414062) + (new 'static 'rgba :g #xff :b #xff :a #x80) + ) + (vector+! gp-1 gp-1 (-> self control trans)) + (add-debug-text-sphere + *display-target-marks* + (bucket-id debug-draw1) + gp-1 + 819.2 + "ltransv" + (new 'static 'rgba :g #xff :b #xff :a #x80) + ) + (vector-matrix*! gp-1 (new 'static 'vector :z 40960.0 :w 1.0) (-> self control unknown-matrix01)) + (vector-float*! gp-1 gp-1 0.5) + (vector+! gp-1 gp-1 (-> self control trans)) + (add-debug-text-sphere + *display-target-marks* + (bucket-id debug-draw1) + gp-1 + 819.2 + "nose" + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + ) + (tube-sounds) + 0 + (none) + ) + +(defbehavior target-tube-post target () + (let ((gp-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s5-0 gp-0) + (set! (-> self control unknown-int40) s5-0) + (set! (-> self tube old-transv quad) (-> self control transv quad)) + (flag-setup) + (build-conversions (-> self control transv)) + (if (logtest? (-> self state-flags) 32) + (set! (-> self control unknown-surface01 turnv) (* 3.0 (-> self control unknown-surface01 turnv))) + ) + (forward-up-nopitch->quaternion + (-> self control dir-targ) + (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control dir-targ)) + (-> self control local-normal) + ) + (do-rotations1) + (send-event + (handle->process (-> self tube tube)) + 'update + (-> self tube centertube) + (-> self tube downtube) + (-> self tube sidetube) + (-> self tube foretube) + ) + (vector-flatten! + (-> self tube downhill) + (vector-negate! (new-stack-vector0) (-> self control dynam gravity-normal)) + (-> self control local-normal) + ) + (vector-normalize! (-> self tube downhill) 1.0) + (set! (-> self control unknown-float12) 1.0) + (let ((f30-0 (analog-input (the-as int (-> self control unknown-cpad-info00 leftx)) 128.0 32.0 110.0 1.0))) + (set! (-> self tube mod-x) f30-0) + (let ((f0-5 (analog-input (the-as int (-> self control unknown-cpad-info00 lefty)) 128.0 32.0 110.0 1.0))) + (set! (-> self tube mod-y) f0-5) + (tube-thrust f30-0 f0-5) + ) + ) + (add-gravity) + (do-rotations2) + (reverse-conversions (-> self control transv)) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x40 :b #x40 :a #x80) + ) + ) + (set! (-> self control reaction) target-collision-reaction) + (dummy-33 (-> self control) (-> self control transv) (-> self control root-prim collide-with)) + (if (logtest? (-> self control root-prim prim-core action) 64) + (dummy-20 *target* *collide-cache*) + ) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x80 :g #x60 :b #x40 :a #x80) + ) + ) + (bend-gravity) + (post-flag-setup) + (set! (-> self control surf) *tube-surface*) + ) + (set-time-ratios *display* (the float gp-0)) + ) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x40 :b #x40 :a #x80) + ) + ) + (ja-post) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x80 :a #x80) + ) + ) + (joint-points) + (do-target-shadow) + (target-powerup-process) + (none) + ) + +(defstate target-tube-start (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (cond + ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + 'tube + ) + (else + (case arg2 + (('end-mode) + (go + target-jump + (-> *TARGET-bank* tube-jump-height-min) + (-> *TARGET-bank* tube-jump-height-max) + (the-as surface #f) + ) + ) + (('touched) + (send-event arg0 'attack (-> arg3 param 0) 'tube 0 0) + #f + ) + (('attack 'attack-or-shove 'attack-invinc) + (target-attacked + 'attack-or-shove + (the-as attack-info (-> arg3 param 1)) + arg0 + (the-as process (-> arg3 param 0)) + target-tube-hit + ) + ) + (else + (target-generic-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + ) + :exit + (behavior () + (when (not + (or + (= (-> self next-state name) 'target-tube) + (= (-> self next-state name) 'target-tube-jump) + (= (-> self next-state name) 'target-tube-hit) + ) + ) + (let ((v1-7 (-> self manipy))) + (when v1-7 + (deactivate (-> v1-7 0)) + (set! (-> self manipy) (the-as (pointer manipy) #f)) + ) + ) + (set! (-> self control root-prim prim-core action) + (logand -8193 (-> self control root-prim prim-core action)) + ) + (set! (-> self control unknown-surface00) *walk-mods*) + (set! (-> self control dynam gravity-max) (-> self control unknown-dynamics00 gravity-max)) + (set! (-> self control dynam gravity-length) (-> self control unknown-dynamics00 gravity-length)) + (target-collide-set! 'normal 0.0) + (set! (-> self control reaction) target-collision-reaction) + (send-event *camera* 'clear-slave-option #x6000) + (sound-stop (-> self tube tube-sound-id)) + (set! (-> self tube tube-sound-id) (new 'static 'sound-id)) + (send-event (handle->process (-> self tube tube)) 'end-mode) + (target-exit) + ) + (none) + ) + :code + (behavior ((arg0 handle)) + (send-event *camera* 'set-slave-option #x6000) + (target-exit) + (set! *display-profile* #f) + (set! *display-entity-errors* #f) + (set! (-> self control surf) *tube-surface*) + (if (zero? (-> self tube)) + (set! (-> self tube) (new 'process 'tube-info)) + ) + (set! (-> self tube tube) arg0) + (set! (-> self tube entity) #f) + (let ((a0-4 (handle->process arg0))) + (if a0-4 + (set! (-> self tube entity) (-> a0-4 entity)) + ) + ) + (set! (-> self tube start-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self tube tube-sound-id) (new-sound-id)) + (set! (-> self tube tube-sound-vol) 0.0) + (target-collide-set! 'tube 0.0) + (set! (-> self control transv quad) (the-as uint128 0)) + (set! (-> self control unknown-float01) 0.0) + (logior! (-> self control root-prim prim-core action) 8192) + (remove-exit) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 4) + (set! (-> a1-4 message) 'update) + (set! (-> a1-4 param 0) (the-as uint (-> self tube centertube))) + (set! (-> a1-4 param 1) (the-as uint (-> self tube downtube))) + (set! (-> a1-4 param 2) (the-as uint (-> self tube sidetube))) + (set! (-> a1-4 param 3) (the-as uint (-> self tube foretube))) + (cond + ((< (the-as float (send-event-function (handle->process (-> self tube tube)) a1-4)) 0.5) + (vector-normalize-copy! (-> self control transv) (-> self tube downtube) 40960.0) + (forward-up-nopitch->quaternion + (-> self control dir-targ) + (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> self control transv) 1.0) + (-> self control dynam gravity-normal) + ) + (go target-tube-jump (-> *TARGET-bank* tube-jump-height-min) (-> *TARGET-bank* tube-jump-height-max)) + ) + (else + (go target-tube) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior target) target-post) + ) + +(defbehavior target-tube-turn-anim target () + (let ((gp-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s5-0 gp-0) + (set! (-> self control unknown-int40) s5-0) + (set! (-> self tube turn-anim-targ) (fmax -20.0 (fmin 20.0 (-> self tube turn-anim-targ)))) + (or + (not (>= (* (-> self tube turn-anim-targ) (-> self tube turn-anim-frame)) 0.0)) + (< (fabs (-> self tube turn-anim-frame)) (fabs (-> self tube turn-anim-targ))) + ) + (+! + (-> self tube turn-anim-vel) + (* (- (-> self tube turn-anim-targ) (-> self tube turn-anim-frame)) + (lerp-scale + 20.0 + (if (< (fabs (-> self tube turn-anim-frame)) (fabs (-> self tube turn-anim-targ))) + 30.0 + 60.0 + ) + (-> self control unknown-float01) + 0.0 + 36864.0 + ) + (-> *display* seconds-per-frame) + ) + ) + (set! (-> self tube turn-anim-vel) + (fmax + -100.0 + (fmin + 100.0 + (* (-> self tube turn-anim-vel) (lerp-scale 0.96 0.9 (-> self control unknown-float01) 0.0 36864.0)) + ) + ) + ) + (+! (-> self tube turn-anim-frame) (* (-> self tube turn-anim-vel) (-> *display* seconds-per-frame))) + (set! (-> self tube turn-anim-frame) (fmax -20.0 (fmin 20.0 (-> self tube turn-anim-frame)))) + (cond + ((and (>= (-> self tube turn-anim-frame) 20.0) (>= (-> self tube turn-anim-vel) 0.0)) + (set! (-> self tube turn-anim-vel) 0.0) + ) + ((and (>= -20.0 (-> self tube turn-anim-frame)) (>= 0.0 (-> self tube turn-anim-vel))) + (set! (-> self tube turn-anim-vel) 0.0) + ) + ) + ) + (set-time-ratios *display* (the float gp-0)) + ) + (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 105)) + num-func-identity + ) + (set! (-> gp-1 frame-num) (ja-aframe (-> self tube turn-anim-frame) 0)) + ) + 0 + (none) + ) + +(defstate target-tube (target) + :event + (-> target-tube-start event) + :enter + (behavior () + (set! (-> self control unknown-surface00) *tube-mods*) + (set! (-> self control surf) *tube-surface*) + (none) + ) + :exit + (-> target-tube-start exit) + :trans + (behavior () + (if (and + (logtest? + (logior + (logior + (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0) + (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 1) + ) + (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 2) + ) + (pad-buttons x) + ) + (can-jump? #f) + ) + (go target-tube-jump (-> *TARGET-bank* tube-jump-height-min) (-> *TARGET-bank* tube-jump-height-max)) + ) + (none) + ) + :code + (behavior () + (case (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (((-> self draw art-group data 41) (-> self draw art-group data 38)) + (ja-channel-push! 1 12) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 106))) + (set! (-> a0-8 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 106)) data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! a0-8 (the-as art-joint-anim (-> self draw art-group data 106)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self tube turn-anim-frame) 0.0) + ) + (else + (ja-channel-push! 1 12) + ) + ) + (while #t + (set! (-> self tube turn-anim-targ) (* 20.0 (-> self tube mod-x))) + (target-tube-turn-anim) + (suspend) + ) + (none) + ) + :post + (behavior () (target-tube-post) (none)) + ) + +(defstate target-tube-jump (target) + :event + (-> target-tube-start event) + :enter + (behavior ((arg0 float) (arg1 float)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (init-var-jump arg0 arg1 (the-as vector #t) (the-as vector #f) (-> self control transv)) + (set! (-> self control status) (logand -8 (-> self control status))) + (set! (-> self control unknown-surface00) *tube-jump-mods*) + (none) + ) + :exit + (-> target-tube-start exit) + :trans + (behavior () + (if (logtest? (-> self control status) 1) + (go target-tube) + ) + (mod-var-jump + #t + #t + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) + (-> self control transv) + ) + (set! (-> self control unknown-float122) + (seek + (-> self control unknown-float122) + (fmax 0.0 (fmin 1.0 (* 0.00012207031 (+ -2048.0 (-> self control unknown-float01))))) + (-> *display* seconds-per-frame) + ) + ) + (none) + ) + :code + (behavior ((arg0 float) (arg1 float)) + (ja-channel-push! 1 15) + (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 41)) + num-func-identity + ) + (set! (-> gp-0 frame-num) (ja-aframe 16.0 0)) + ) + (let ((f30-0 35.0) + (f28-0 1.0) + ) + (until (ja-done? 0) + (let* ((f24-0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) + (f26-0 (- f30-0 (ja-aframe-num 0))) + (f0-8 (fmin (fmin 3.0 f26-0) (/ (* 5.0 f26-0) (the float (time-to-apex f24-0 -245760.0))))) + (a0-7 (-> self skel root-channel 0)) + ) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (let ((v1-17 (and (< 0.0 f24-0) (< 0.0 f26-0)))) + (set! (-> a0-7 param 1) (if v1-17 + f0-8 + f28-0 + ) + ) + ) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + (suspend) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 38))) + (set! (-> a0-9 param 0) 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 38)) num-func-loop!) + ) + (while #t + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 38))) + (set! (-> a0-10 param 0) 1.0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim (-> self draw art-group data 38)) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (-> target-tube post) + ) + +(defstate target-tube-hit (target) + :event + (-> target-tube-start event) + :enter + (behavior ((arg0 handle) (arg1 attack-info)) + (send-event + (handle->process (-> self tube tube)) + 'update + (-> self tube centertube) + (-> self tube downtube) + (-> self tube sidetube) + (-> self tube foretube) + ) + (none) + ) + :exit + (behavior () + (if (!= (-> self next-state name) 'target-tube-death) + (set! (-> self state-flags) (logand -32777 (-> self state-flags))) + ) + (set! (-> self state-flags) (logand -901 (-> self state-flags))) + ((-> target-tube-start exit)) + (none) + ) + :code + (behavior ((arg0 handle) (arg1 attack-info)) + (let ((gp-0 (-> self attack-info))) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (logior! (-> self state-flags) 8) + (set! (-> self game hit-time) (-> *display* base-frame-counter)) + (when (zero? (logand (-> arg1 mask) 2)) + (vector-! + (-> arg1 vector) + (vector+float*! (new 'stack-no-clear 'vector) (-> self tube foretube) (-> self tube downtube) 20480.0) + (-> self control trans) + ) + (let ((s3-2 (new-stack-vector0)) + (f30-0 (vector-dot (-> self control unknown-vector71) (-> arg1 vector))) + ) + 0.0 + (vector-! s3-2 (-> arg1 vector) (vector-float*! s3-2 (-> self control unknown-vector71) f30-0)) + (let* ((f0-3 (vector-length s3-2)) + (f1-0 f0-3) + ) + (if (< f30-0 0.0) + (set! f30-0 (* 0.5 f30-0)) + ) + (vector+! + (-> arg1 vector) + (vector-float*! (-> arg1 vector) (-> self control unknown-vector71) f30-0) + (vector-float*! s3-2 s3-2 (/ f0-3 f1-0)) + ) + ) + ) + (logior! (-> arg1 mask) 2) + ) + (when (and (logtest? (-> arg1 mask) 32) (= (-> arg1 mode) 'darkeco) (zero? (logand (-> arg1 mask) 128))) + (set! (-> arg1 shove-up) 12288.0) + (logior! (-> arg1 mask) 128) + ) + (let ((v1-30 gp-0)) + (set! (-> v1-30 attacker) (the-as handle #f)) + (set! (-> v1-30 mode) 'generic) + (set! (-> v1-30 shove-back) 6144.0) + (set! (-> v1-30 shove-up) 12288.0) + (set! (-> v1-30 angle) #f) + (set! (-> v1-30 trans quad) (-> self control trans quad)) + (set! (-> v1-30 control) 0.0) + (set! (-> v1-30 invinc-time) (-> *TARGET-bank* hit-invulnerable-timeout)) + ) + (dummy-9 gp-0 arg1) + (when (= arg0 'attack) + (pickup-collectable! + (-> self fact-info-target) + (pickup-type eco-green) + (- (-> *FACT-bank* health-single-inc)) + (the-as handle #f) + ) + (target-hit-effect gp-0) + ) + (set! (-> self control unknown-surface00) *smack-mods*) + (target-hit-setup-anim gp-0) + (target-hit-move gp-0 (target-hit-orient gp-0 (-> gp-0 vector)) target-falling-anim-trans 1.0) + (let ((s5-2 (new-stack-vector0)) + (f30-1 (vector-dot (-> self tube downtube) (-> self control transv))) + ) + 0.0 + (vector-! s5-2 (-> self control transv) (vector-float*! s5-2 (-> self tube downtube) f30-1)) + (let ((f0-14 (vector-length s5-2)) + (f2-2 (fmax 40960.0 f30-1)) + (f1-2 0.0) + ) + (vector+! + (-> self control transv) + (vector-float*! (-> self control transv) (-> self tube downtube) f2-2) + (vector-float*! s5-2 s5-2 (/ f1-2 f0-14)) + ) + ) + ) + (let ((s5-3 forward-up-nopitch->quaternion) + (s4-2 (-> self control dir-targ)) + (t9-9 vector-normalize!) + (a0-35 (new-stack-vector0)) + ) + (set! (-> a0-35 quad) (-> self control transv quad)) + (s5-3 s4-2 (t9-9 a0-35 1.0) (vector-y-quaternion! (new-stack-vector0) (-> self control dir-targ))) + ) + (if (and (= (-> self game mode) 'play) (>= 0.0 (-> self fact-info-target health))) + (go target-tube-death (-> gp-0 mode)) + ) + ) + (go target-tube) + (none) + ) + :post + (the-as (function none :behavior target) target-post) + ) + +(defstate target-tube-death (target) + :event + (-> target-death event) + :exit + (behavior () + (set! (-> self state-flags) (logand -32777 (-> self state-flags))) + (target-exit) + (clear-pending-settings-from-process *setting-control* self 'process-mask) + (copy-settings-from-target! *setting-control*) + ((-> target-tube-start exit)) + (none) + ) + :code + (behavior ((arg0 symbol)) + (local-vars (v1-40 symbol)) + (set! (-> self neck flex-blend) 0.0) + (target-timed-invulnerable-off self) + (push-setting! *setting-control* self 'process-mask 'set 0.0 #x14a0000) + (copy-settings-from-target! *setting-control*) + (set! (-> self control transv quad) (the-as uint128 0)) + (set! (-> self control unknown-surface00) *neutral-mods*) + (ja-channel-push! 1 30) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 76))) + (set! (-> gp-1 param 0) (ja-aframe 134.0 0)) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) 0.0) + (joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 76)) num-func-seek!) + ) + (until (ja-done? 0) + (TODO-RENAME-9 (-> self align)) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (when (zero? (logand (-> self align flags) 1)) + (vector-matrix*! gp-2 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) + (vector-float*! (-> self control transv) gp-2 (-> *display* frames-per-second)) + ) + ) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 134.0 0)) + (set! (-> gp-3 param 1) 1.0) + (joint-control-channel-group-eval! gp-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self control transv quad) (the-as uint128 0)) + (initialize! (-> self game) 'dead (the-as game-save #f) (the-as string #f)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until v1-40 + (suspend) + (set! v1-40 (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (not (movie?)))) + ) + (go target-tube) + (none) + ) + :post + target-no-stick-post + ) + +(deftype slide-control (process-drawable) + ((target handle :offset-assert 176) + (pos float :offset-assert 184) + (trans vector :inline :offset-assert 192) + (rot vector :inline :offset-assert 208) + (side vector :inline :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 22 + :size-assert #xf0 + :flag-assert #x16008000f0 + (:methods + (slide-control-watch () _type_ :state 20) + (slide-control-ride () _type_ :state 21) + ) + ) + + +(defun distance-from-tangent ((arg0 path-control) (arg1 float) (arg2 vector) (arg3 vector) (arg4 vector) (arg5 vector)) + (eval-path-curve-div! arg0 arg2 arg1 'interp) + (TODO-RENAME-12 arg0 arg3 arg1) + (set! (-> arg2 y) (-> arg5 y)) + (set! (-> arg3 y) 0.0) + (let ((s2-1 (new 'stack-no-clear 'vector))) + (vector-rotate-y! arg4 arg3 -16384.0) + (set! (-> arg4 y) 0.0) + (let* ((a2-5 (vector+! (new 'stack-no-clear 'vector) arg2 arg4)) + (f0-3 (vector-line-distance-point! arg5 arg2 a2-5 s2-1)) + ) + (if (< 0.0 (vector-dot arg3 (vector-! (new 'stack-no-clear 'vector) arg5 s2-1))) + (set! f0-3 (- f0-3)) + ) + f0-3 + ) + ) + ) + +(defbehavior find-target-point slide-control ((arg0 vector)) + (local-vars (f0-2 float)) + (let* ((s4-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + (f28-0 (+ -0.1 (-> self pos))) + (f26-0 (distance-from-tangent (-> self path) f28-0 s4-0 s5-0 gp-0 arg0)) + ) + 0.0 + (let ((f30-0 f28-0)) + (until (or (and (< f26-0 f0-2) (>= f0-2 0.0)) (< (the float (+ (-> self path curve num-cverts) -1)) f28-0)) + (set! f0-2 (distance-from-tangent (-> self path) f28-0 s4-0 s5-0 gp-0 arg0)) + (when (or (>= f26-0 f0-2) (< f26-0 0.0)) + (set! f26-0 f0-2) + (set! f30-0 f28-0) + ) + (set! f28-0 (+ 0.01 f28-0)) + ) + (distance-from-tangent (-> self path) f30-0 s4-0 s5-0 gp-0 arg0) + (set! (-> self trans quad) (-> s4-0 quad)) + (set! (-> self rot quad) (-> s5-0 quad)) + (set! (-> self side quad) (-> gp-0 quad)) + (set! (-> self pos) f30-0) + ) + ) + (-> self pos) + ) + +(defstate slide-control-watch (slide-control) + :virtual #t + :enter + (behavior () + (eval-path-curve-div! (-> self path) (-> self trans) 0.2 'interp) + (eval-path-curve-div! (-> self path) (-> self root trans) 0.2 'interp) + (TODO-RENAME-12 (-> self path) (-> self rot) 0.2) + (set! (-> self pos) 0.2) + (none) + ) + :trans + (behavior () + (if (and + (and *target* (>= 81920.0 (vector-vector-distance (-> self root trans) (-> *target* control trans)))) + (and + (< 0.0 (vector-dot + (vector-! (new 'stack-no-clear 'vector) (-> *target* control trans) (-> self trans)) + (-> self rot) + ) + ) + (send-event *target* 'change-mode 'tube self) + ) + ) + (go-virtual slide-control-ride) + ) + (none) + ) + :code + (the-as (function none :behavior slide-control) anim-loop) + ) + +(defstate slide-control-ride (slide-control) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('end-mode) + (go-virtual slide-control-watch) + ) + (('update) + (let* ((s4-0 arg0) + (gp-0 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) process-drawable)) + s4-0 + ) + ) + ) + (if gp-0 + (find-target-point (-> (the-as process-drawable gp-0) root trans)) + ) + (set! (-> (the-as vector (-> arg3 param 0)) quad) (-> self trans quad)) + (set! (-> (the-as vector (-> arg3 param 1)) quad) (-> self rot quad)) + (set! (-> (the-as vector (-> arg3 param 2)) quad) (-> self side quad)) + (eval-path-curve-div! (-> self path) (the-as vector (-> arg3 param 3)) (+ 0.2 (-> self pos)) 'interp) + (if (>= (-> self pos) (+ -0.2 (the float (+ (-> self path curve num-cverts) -1)))) + (send-event gp-0 'end-mode) + ) + ) + (-> self pos) + ) + ) + ) + :enter + (behavior () + (set! (-> self pos) 0.0) + (set! (-> self target) (process->handle *target*)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (none) + ) + :exit + (behavior () (none)) ;; TODO fix me + :trans + (behavior () + (let ((gp-0 (handle->process (-> self target)))) + (cond + ((if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) + gp-0 + ) + ) + (else + (go-virtual slide-control-watch) + ) + ) + ) + (none) + ) + :code + (the-as (function none :behavior slide-control) anim-loop) + ) + +(defmethod init-from-entity! slide-control ((obj slide-control) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (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 target) (the-as handle #f)) + (go (method-of-object obj slide-control-watch)) + (none) + ) + + + + diff --git a/goal_src/levels/swamp/swamp-rat-nest.gc b/goal_src/levels/swamp/swamp-rat-nest.gc index 999d90be1..47121e9a6 100644 --- a/goal_src/levels/swamp/swamp-rat-nest.gc +++ b/goal_src/levels/swamp/swamp-rat-nest.gc @@ -20,765 +20,693 @@ ;; DECOMP BEGINS -(set! - (-> *part-group-id-table* 292) - (new 'static 'sparticle-launch-group - :length 6 - :duration #x5 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-swamp-rat-nest-a-explosion" - :launcher - (new 'static 'inline-array sparticle-group-item 6 - (sp-item 1334) - (sp-item 1335) - (sp-item 1336) - (sp-item 1337) - (sp-item 1338) - (sp-item 1339) - ) - :bounds (new 'static 'sphere :w 24576.0) - ) - ) +(set! (-> *part-group-id-table* 292) (new 'static 'sparticle-launch-group + :length 6 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-a-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 6 + (sp-item 1334) + (sp-item 1335) + (sp-item 1336) + (sp-item 1337) + (sp-item 1338) + (sp-item 1339) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) -(set! - (-> *part-group-id-table* 293) - (new 'static 'sparticle-launch-group - :length 4 - :duration #x5 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-swamp-rat-nest-b-explosion" - :launcher - (new 'static 'inline-array sparticle-group-item 4 - (sp-item 1342) - (sp-item 1339) - (sp-item 1337) - (sp-item 1334) - ) - :bounds (new 'static 'sphere :w 24576.0) - ) - ) +(set! (-> *part-group-id-table* 293) + (new 'static 'sparticle-launch-group + :length 4 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-b-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 4 (sp-item 1342) (sp-item 1339) (sp-item 1337) (sp-item 1334)) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) -(set! - (-> *part-group-id-table* 294) - (new 'static 'sparticle-launch-group - :length 4 - :duration #x5 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-swamp-rat-nest-c-explosion" - :launcher - (new 'static 'inline-array sparticle-group-item 4 - (sp-item 1335) - (sp-item 1339) - (sp-item 1337) - (sp-item 1334) - ) - :bounds (new 'static 'sphere :w 24576.0) - ) - ) +(set! (-> *part-group-id-table* 294) + (new 'static 'sparticle-launch-group + :length 4 + :duration #x5 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-c-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 4 (sp-item 1335) (sp-item 1339) (sp-item 1337) (sp-item 1334)) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) -(set! - (-> *part-group-id-table* 295) - (new 'static 'sparticle-launch-group - :length 3 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-swamp-rat-nest-a-puff" - :launcher - (new 'static 'inline-array sparticle-group-item 3 - (sp-item 1346) - (sp-item 1347) - (sp-item 1348) - ) - :bounds (new 'static 'sphere :w 24576.0) - ) - ) +(set! (-> *part-group-id-table* 295) + (new 'static 'sparticle-launch-group + :length 3 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-a-puff" + :launcher + (new 'static 'inline-array sparticle-group-item 3 (sp-item 1346) (sp-item 1347) (sp-item 1348)) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) -(set! - (-> *part-group-id-table* 296) - (new 'static 'sparticle-launch-group - :length 2 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-swamp-rat-nest-b-puff" - :launcher - (new 'static 'inline-array sparticle-group-item 2 - (sp-item 1350) - (sp-item 1351) - ) - :bounds (new 'static 'sphere :w 24576.0) - ) - ) +(set! (-> *part-group-id-table* 296) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-b-puff" + :launcher + (new 'static 'inline-array sparticle-group-item 2 (sp-item 1350) (sp-item 1351)) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) -(set! - (-> *part-group-id-table* 297) - (new 'static 'sparticle-launch-group - :length 2 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag use-local-clock) - :name "group-swamp-rat-nest-c-puff" - :launcher - (new 'static 'inline-array sparticle-group-item 2 - (sp-item 1353) - (sp-item 1354) - ) - :bounds (new 'static 'sphere :w 24576.0) - ) - ) +(set! (-> *part-group-id-table* 297) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-swamp-rat-nest-c-puff" + :launcher + (new 'static 'inline-array sparticle-group-item 2 (sp-item 1353) (sp-item 1354)) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) -(set! - (-> *part-id-table* 1353) - (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-y (meters 1.5) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 96.0 64.0 1.0) - (sp-rnd-flt spt-g 64.0 48.0 1.0) - (sp-rnd-flt spt-b 64.0 16.0 1.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.0016666667)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 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.68266666 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (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 0.5) (meters 1.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1353) (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-y (meters 1.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 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.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (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 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1354) - (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 1.0) - (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 96.0 64.0 1.0) - (sp-rnd-flt spt-g 64.0 32.0 1.0) - (sp-rnd-flt spt-b 32.0 16.0 1.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) - (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) - (sp-flt spt-fade-a -0.28444445) - (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 85.0) (degrees 10.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-flt spt-conerot-radius (meters 2.0)) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1354) (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 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 85.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.0)) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1355) - (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-y (meters -4.5) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 1.0) - (sp-rnd-flt spt-g 64.0 48.0 1.0) - (sp-rnd-flt spt-b 64.0 16.0 1.0) - (sp-rnd-flt spt-a 16.0 16.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.0016666667)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.07111111) - (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 80.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 0.5) (meters 1.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1355) (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-y (meters -4.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 16.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.07111111) + (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 80.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 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1350) - (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-y (meters -0.5) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 96.0 64.0 1.0) - (sp-rnd-flt spt-g 64.0 48.0 1.0) - (sp-rnd-flt spt-b 64.0 16.0 1.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.0016666667)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 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.68266666 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (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 0.5) (meters 1.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1350) (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-y (meters -0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 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.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (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 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1351) - (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 1.0) - (sp-rnd-flt spt-y (meters -1.0) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 96.0 64.0 1.0) - (sp-rnd-flt spt-g 64.0 32.0 1.0) - (sp-rnd-flt spt-b 32.0 16.0 1.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) - (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) - (sp-flt spt-fade-a -0.28444445) - (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 85.0) (degrees 10.0) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-flt spt-conerot-radius (meters 3.0)) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1351) (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 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.01) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 85.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 3.0)) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1352) - (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-y (meters -10.5) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 1.0) - (sp-rnd-flt spt-g 64.0 48.0 1.0) - (sp-rnd-flt spt-b 64.0 16.0 1.0) - (sp-rnd-flt spt-a 16.0 16.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.0016666667)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.07111111) - (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 80.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 0.5) (meters 1.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1352) (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-y (meters -10.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 16.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.07111111) + (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 80.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 0.5) (meters 1.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1334) - (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 1.0)) - (sp-flt spt-scale-x (meters 16.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 160.0) - (sp-flt spt-b 96.0) - (sp-flt spt-a 32.0) - (sp-flt spt-fade-a -1.0) - (sp-int spt-timer 15) - (sp-cpuinfo-flags bit2 bit3) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1334) (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 1.0)) + (sp-flt spt-scale-x (meters 16.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 160.0) + (sp-flt spt-b 96.0) + (sp-flt spt-a 32.0) + (sp-flt spt-fade-a -1.0) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1341) - (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 -12.0)) - (sp-flt spt-scale-x (meters 16.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 196.0) - (sp-flt spt-b 96.0) - (sp-flt spt-a 16.0) - (sp-flt spt-fade-a 0.0) - (sp-int spt-timer 15) - (sp-cpuinfo-flags bit2 bit3) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1341) (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 -12.0)) + (sp-flt spt-scale-x (meters 16.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 196.0) + (sp-flt spt-b 96.0) + (sp-flt spt-a 16.0) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1339) - (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 8.0 8.0 1.0) - (sp-rnd-flt spt-y (meters -1.0) (meters 1.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.75) (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-rnd-flt spt-r 64.0 48.0 1.0) - (sp-rnd-flt spt-g 48.0 32.0 1.0) - (sp-rnd-flt spt-b 48.0 8.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.08) 1.0) - (sp-flt spt-scalevel-x (meters 0.005)) - (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.85333335) - (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) - (sp-flt spt-friction 0.92) - (sp-int spt-timer 150) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 40.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.5) (meters 1.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1339) + (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 8.0 8.0 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.75) (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-rnd-flt spt-r 64.0 48.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.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.08) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.85333335) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-flt spt-friction 0.92) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 40.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.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1335) - (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-rnd-flt spt-num 16.0 8.0 1.0) - (sp-rnd-flt spt-y (meters -2.0) (meters 1.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 1.0) - (sp-rnd-flt spt-g 48.0 32.0 1.0) - (sp-rnd-flt spt-b 48.0 8.0 1.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.005)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.21333334) - (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 60.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.5) (meters 1.25) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1335) (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-rnd-flt spt-num 16.0 8.0 1.0) + (sp-rnd-flt spt-y (meters -2.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1340) - (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-rnd-flt spt-num 10.0 5.0 1.0) - (sp-rnd-flt spt-y (meters -12.0) (meters 1.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 32.0 1.0) - (sp-rnd-flt spt-g 48.0 32.0 1.0) - (sp-rnd-flt spt-b 48.0 8.0 1.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.005)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.10666667) - (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1340) (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-rnd-flt spt-num 10.0 5.0 1.0) + (sp-rnd-flt spt-y (meters -12.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 32.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.10666667) + (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1336) - (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-rnd-flt spt-num 12.0 8.0 1.0) - (sp-rnd-flt spt-y (meters 0.5) (meters 0.25) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 32.0 1.0) - (sp-rnd-flt spt-g 64.0 48.0 1.0) - (sp-rnd-flt spt-b 48.0 8.0 1.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.005)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.21333334) - (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 50.000004) 1.0) - (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) - (sp-rnd-flt spt-conerot-radius (meters 1.0) (meters 1.75) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1336) (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-rnd-flt spt-num 12.0 8.0 1.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 0.25) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 50.000004) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 1.0) (meters 1.75) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1337) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 21 - (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) - (sp-rnd-flt spt-num 8.0 16.0 1.0) - (sp-rnd-flt spt-y (meters -1.0) (meters 2.0) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.6) 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 96.0 64.0 1.0) - (sp-rnd-flt spt-g 64.0 32.0 1.0) - (sp-rnd-flt spt-b 32.0 16.0 1.0) - (sp-flt spt-a 128.0) - (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.04) 1.0) - (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) - (sp-rnd-flt spt-accel-y -8.192 -2.7306666 1.0) - (sp-int spt-timer 750) - (sp-cpuinfo-flags bit2 bit12) - (sp-flt spt-userdata 0.0) - (sp-func spt-func 'check-water-level-drop) - (sp-rnd-flt spt-conerot-x (degrees 15.0) (degrees 60.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 3.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1337) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 8.0 16.0 1.0) + (sp-rnd-flt spt-y (meters -1.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.6) 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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-rnd-flt spt-accel-y -8.192 -2.7306666 1.0) + (sp-int spt-timer 750) + (sp-cpuinfo-flags bit2 bit12) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-rnd-flt spt-conerot-x (degrees 15.0) (degrees 60.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 3.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1338) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 21 - (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) - (sp-rnd-flt spt-num 32.0 32.0 1.0) - (sp-rnd-flt spt-y (meters 2.0) (meters 1.0) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.25) (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.25) (meters 0.1) 1.0) - (sp-rnd-flt spt-r 32.0 32.0 1.0) - (sp-rnd-flt spt-g 128.0 32.0 1.0) - (sp-rnd-flt spt-b 32.0 16.0 1.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.04) 1.0) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-flt spt-fade-a -0.28444445) - (sp-rnd-flt spt-accel-y -1.3653333 -6.826667 1.0) - (sp-flt spt-friction 0.94) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 60.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 1.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1338) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) + (sp-rnd-flt spt-num 32.0 32.0 1.0) + (sp-rnd-flt spt-y (meters 2.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (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.25) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.02) (meters 0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -6.826667 1.0) + (sp-flt spt-friction 0.94) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 45.0) (degrees 60.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 1.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1346) - (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-y (meters 0.5) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 96.0 64.0 1.0) - (sp-rnd-flt spt-g 64.0 48.0 1.0) - (sp-rnd-flt spt-b 64.0 16.0 1.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.0016666667)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 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.68266666 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (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 2.5) (meters 1.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1346) (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-y (meters 0.5) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 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.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (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 2.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1349) - (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-y (meters -12.0) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 1.0) - (sp-rnd-flt spt-g 64.0 48.0 1.0) - (sp-rnd-flt spt-b 64.0 16.0 1.0) - (sp-rnd-flt spt-a 8.0 8.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.0016666667)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.035555556) - (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 80.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 2.5) (meters 1.0) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1349) (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-y (meters -12.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 8.0 8.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.0016666667)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.035555556) + (sp-rnd-flt spt-accel-y 0.34133333 0.68266666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 80.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 2.5) (meters 1.0) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1347) - (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 1.0) - (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 96.0 64.0 1.0) - (sp-rnd-flt spt-g 64.0 32.0 1.0) - (sp-rnd-flt spt-b 32.0 16.0 1.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) - (sp-flt spt-fade-a -0.28444445) - (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (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.0) (meters 0.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1347) (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 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.05) 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 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 32.0 1.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (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.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1348) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 20 - (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) - (sp-rnd-flt spt-num 0.5 0.5 1.0) - (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 0.25) (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.25) (meters 0.1) 1.0) - (sp-rnd-flt spt-r 32.0 32.0 1.0) - (sp-rnd-flt spt-g 128.0 32.0 1.0) - (sp-rnd-flt spt-b 32.0 16.0 1.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-flt spt-fade-a -0.28444445) - (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) - (sp-int spt-timer 450) - (sp-cpuinfo-flags bit2 bit12) - (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.0) (meters 0.5) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1348) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x17 :page #x2)) + (sp-rnd-flt spt-num 0.5 0.5 1.0) + (sp-rnd-flt spt-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.25) (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.25) (meters 0.1) 1.0) + (sp-rnd-flt spt-r 32.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 32.0 1.0) + (sp-rnd-flt spt-b 32.0 16.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y -1.3653333 -2.7306666 1.0) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (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.0) (meters 0.5) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1342) - (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-rnd-flt spt-num 20.0 8.0 1.0) - (sp-rnd-flt spt-y (meters -3.5) (meters 2.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 1.0) - (sp-rnd-flt spt-g 48.0 32.0 1.0) - (sp-rnd-flt spt-b 48.0 8.0 1.0) - (sp-rnd-flt spt-a 64.0 64.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.005)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.21333334) - (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 60.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.5) (meters 1.25) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1342) (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-rnd-flt spt-num 20.0 8.0 1.0) + (sp-rnd-flt spt-y (meters -3.5) (meters 2.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.21333334) + (sp-rnd-flt spt-accel-y -0.13653333 -0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 30.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1343) - (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-rnd-flt spt-num 16.0 5.0 1.0) - (sp-rnd-flt spt-y (meters -10.5) (meters 2.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 32.0 1.0) - (sp-rnd-flt spt-g 48.0 32.0 1.0) - (sp-rnd-flt spt-b 48.0 8.0 1.0) - (sp-rnd-flt spt-a 32.0 32.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.005)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.10666667) - (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1343) (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-rnd-flt spt-num 16.0 5.0 1.0) + (sp-rnd-flt spt-y (meters -10.5) (meters 2.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 32.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.10666667) + (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1344) - (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 -5.0) - (sp-flt spt-y (meters -12.0)) - (sp-flt spt-scale-x (meters 16.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 196.0) - (sp-flt spt-b 96.0) - (sp-flt spt-a 16.0) - (sp-flt spt-fade-a 0.0) - (sp-int spt-timer 15) - (sp-cpuinfo-flags bit2 bit3) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1344) (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 -5.0) + (sp-flt spt-y (meters -12.0)) + (sp-flt spt-scale-x (meters 16.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 196.0) + (sp-flt spt-b 96.0) + (sp-flt spt-a 16.0) + (sp-flt spt-fade-a 0.0) + (sp-int spt-timer 15) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 1345) - (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-rnd-flt spt-num 12.0 4.0 1.0) - (sp-rnd-flt spt-y (meters -4.0) (meters 1.5) 1.0) - (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 32.0 1.0) - (sp-rnd-flt spt-g 48.0 32.0 1.0) - (sp-rnd-flt spt-b 48.0 8.0 1.0) - (sp-rnd-flt spt-a 48.0 48.0 1.0) - (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) - (sp-flt spt-scalevel-x (meters 0.005)) - (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-a -0.16) - (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) - (sp-int spt-timer 600) - (sp-cpuinfo-flags bit2 bit12) - (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 1345) (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-rnd-flt spt-num 12.0 4.0 1.0) + (sp-rnd-flt spt-y (meters -4.0) (meters 1.5) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 48.0 32.0 1.0) + (sp-rnd-flt spt-g 48.0 32.0 1.0) + (sp-rnd-flt spt-b 48.0 8.0 1.0) + (sp-rnd-flt spt-a 48.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-x (meters 0.005)) + (sp-rnd-flt spt-rotvel-z (degrees -0.4) (degrees 0.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.16) + (sp-rnd-flt spt-accel-y 0.13653333 0.27306667 1.0) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 60.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.5) (meters 1.25) 1.0) + (sp-end) + ) + ) + ) (deftype swamp-rat-nest (process-drawable) ((child-process (pointer swamp-rat-nest-dummy) :offset 20) @@ -850,72 +778,63 @@ (defbehavior swamp-rat-nest-dummy-draw-spawn-joints swamp-rat-nest-dummy () (dotimes (gp-0 (-> self spawn-joint-count)) - (let* ((a0-0 (-> self spawn-joint-array gp-0)) - (a2-0 (-> self node-list data a0-0 bone transform)) - ) - (add-debug-matrix #t (bucket-id debug-draw1) a2-0) + (let* ((a0-0 (-> self spawn-joint-array gp-0)) + (a2-0 (-> self node-list data a0-0 bone transform)) + ) + (add-debug-matrix #t (bucket-id debug-draw1) a2-0) + ) ) - ) #f ) (defbehavior swamp-rat-nest-dummy-take-damage swamp-rat-nest-dummy ((arg0 int)) (when (not (-> self parent-process 0 damaged)) - (set! (-> self parent-process 0 damaged) #t) - (+! - (-> self parent-process 0 rat-count) - (-> self parent-process 0 defensive-rat-count) + (set! (-> self parent-process 0 damaged) #t) + (+! (-> self parent-process 0 rat-count) (-> self parent-process 0 defensive-rat-count)) + (set! (-> self parent-process 0 spawn-period) 600.0) ) - (set! (-> self parent-process 0 spawn-period) 600.0) - ) (let ((v0-0 (- (-> self parent-process 0 hit-points) arg0))) - (set! (-> self parent-process 0 hit-points) v0-0) - v0-0 - ) + (set! (-> self parent-process 0 hit-points) v0-0) + v0-0 + ) ) -(defbehavior - swamp-rat-nest-dummy-event-handler swamp-rat-nest-dummy - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('shake) +(defbehavior swamp-rat-nest-dummy-event-handler swamp-rat-nest-dummy ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('shake) (if (= (-> self next-state name) 'swamp-rat-nest-dummy-idle) - (go swamp-rat-nest-dummy-shake) - ) + (go swamp-rat-nest-dummy-shake) + ) ) - (('attack) - (send-event (ppointer->process (-> self parent-process)) 'hit) - (let ((v1-7 (-> arg3 param 2))) - (when (!= v1-7 (-> self parent-process 0 player-attack-id)) - (set! (-> self parent-process 0 player-attack-id) (the-as int v1-7)) - (cond - ((and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) - (swamp-rat-nest-dummy-take-damage 3) - (if - (< - (vector-vector-distance (target-pos 0) (-> self top-sphere)) - (-> self top-sphere w) - ) - (send-event *target* 'no-look-around 75) + (('attack) + (send-event (ppointer->process (-> self parent-process)) 'hit) + (let ((v1-7 (-> arg3 param 2))) + (when (!= v1-7 (-> self parent-process 0 player-attack-id)) + (set! (-> self parent-process 0 player-attack-id) (the-as int v1-7)) + (cond + ((and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (swamp-rat-nest-dummy-take-damage 3) + (if (< (vector-vector-distance (target-pos 0) (-> self top-sphere)) (-> self top-sphere w)) + (send-event *target* 'no-look-around 75) + ) + (go swamp-rat-nest-dummy-hit) + ) + (else + (level-hint-spawn + (game-text-id swamp-rats-nest-hint) + "sksp0144" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (swamp-rat-nest-dummy-take-damage 0) + (go swamp-rat-nest-dummy-hit) + ) + ) ) - (go swamp-rat-nest-dummy-hit) - ) - (else - (level-hint-spawn - (game-text-id swamp-rats-nest-hint) - "sksp0144" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - (swamp-rat-nest-dummy-take-damage 0) - (go swamp-rat-nest-dummy-hit) - ) ) - ) ) ) - ) ) (defstate swamp-rat-nest-dummy-idle (swamp-rat-nest-dummy) @@ -923,18 +842,15 @@ swamp-rat-nest-dummy-event-handler :code (behavior () - (while #t - (let ((v1-2 (-> self skel root-channel 0))) - (set! (-> v1-2 num-func) num-func-identity) - (set! - (-> v1-2 frame-num) - (the float (+ (-> v1-2 frame-group data 0 length) -1)) + (while #t + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! (-> v1-2 frame-num) (the float (+ (-> v1-2 frame-group data 0 length) -1))) + ) + (suspend) ) - ) - (suspend) + (none) ) - (none) - ) :post (the-as (function none :behavior swamp-rat-nest-dummy) transform-post) ) @@ -944,79 +860,54 @@ swamp-rat-nest-dummy-event-handler :enter (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (if (<= (-> self parent-process 0 hit-points) 0) - (go swamp-rat-nest-dummy-die) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if (<= (-> self parent-process 0 hit-points) 0) + (go swamp-rat-nest-dummy-die) + ) + (none) ) - (none) - ) :code (behavior () - (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 - ) + (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! + ) ) - ) - (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 (< (-> self parent-process 0 hit-points) 3) + (spawn (-> self part) (-> self node-list data (-> self particle-spawn-joint) bone transform vector 3)) + ) + (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!) + ) + ) + (go swamp-rat-nest-dummy-idle) + (none) ) - (until (ja-done? 0) - (if (< (-> self parent-process 0 hit-points) 3) - (spawn - (-> self part) - (-> - self - node-list - data - (-> self particle-spawn-joint) - bone - transform - vector - 3 - ) - ) - ) - (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! - ) - ) - ) - (go swamp-rat-nest-dummy-idle) - (none) - ) :post (the-as (function none :behavior swamp-rat-nest-dummy) transform-post) ) @@ -1026,427 +917,263 @@ swamp-rat-nest-dummy-event-handler :code (behavior () - (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 - ) + (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! + ) ) - ) - (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!) + ) + ) + (go swamp-rat-nest-dummy-idle) + (none) ) - (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! - ) - ) - ) - (go swamp-rat-nest-dummy-idle) - (none) - ) :post (the-as (function none :behavior swamp-rat-nest-dummy) transform-post) ) (defstate swamp-rat-nest-dummy-die (swamp-rat-nest-dummy) :event - (the-as - (function process int symbol event-message-block object :behavior swamp-rat-nest-dummy) - #f - ) + (the-as (function process int symbol event-message-block object :behavior swamp-rat-nest-dummy) #f) :code (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (set! - (-> self parent-process 0 dummy) - (the-as (pointer swamp-rat-nest-dummy) #f) - ) - (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) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self parent-process 0 dummy) (the-as (pointer swamp-rat-nest-dummy) #f)) + (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 + (-> self death-part) + -1 + #f + #f + #f + (-> self node-list data (-> self particle-spawn-joint) bone transform vector 3) + ) + (-> gp-0 ppointer) + ) ) - (run-now-in-process - gp-0 - part-tracker-init - (-> self death-part) - -1 - #f - #f - #f - (-> - self - node-list - data - (-> self particle-spawn-joint) - bone - transform - vector - 3 - ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (suspend) ) - (-> gp-0 ppointer) - ) + (ja-channel-set! 0) + (while (-> self child) + (suspend) + ) + (deactivate self) + (none) ) - (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) - (suspend) - ) - (ja-channel-set! 0) - (while (-> self child) - (suspend) - ) - (deactivate self) - (none) - ) ) -(defbehavior - swamp-rat-nest-dummy-init-by-other swamp-rat-nest-dummy - ((arg0 swamp-rat-nest-dummy)) +(defbehavior swamp-rat-nest-dummy-init-by-other swamp-rat-nest-dummy ((arg0 swamp-rat-nest-dummy)) (let ((gp-0 (-> arg0 entity))) - (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) - (dummy-20 self) - (process-drawable-from-entity! self (the-as entity-actor gp-0)) - (set! (-> self top-sphere quad) (-> self root-override trans quad)) - (set! (-> self top-sphere y) (+ 24576.0 (-> self top-sphere y))) - (set! (-> self top-sphere w) 18432.0) - (set! (-> self entity) gp-0) - ) - (set! - (-> self nav) - (new 'process 'nav-control (-> self root-override) 16 40960.0) - ) - (logior! - (-> self nav flags) - (nav-control-flags display-marks bit3 bit5 bit6 bit7) - ) - (set-current-poly! - (-> self nav) - (TODO-RENAME-18 (-> self nav) (-> self root-override trans)) - ) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (dummy-20 self) + (process-drawable-from-entity! self (the-as entity-actor gp-0)) + (set! (-> self top-sphere quad) (-> self root-override trans quad)) + (set! (-> self top-sphere y) (+ 24576.0 (-> self top-sphere y))) + (set! (-> self top-sphere w) 18432.0) + (set! (-> self entity) gp-0) + ) + (set! (-> self nav) (new 'process 'nav-control (-> self root-override) 16 40960.0)) + (logior! (-> self nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (set-current-poly! (-> self nav) (TODO-RENAME-18 (-> self nav) (-> self root-override trans))) (+! (-> self parent-process 0 hit-points) 3) (dummy-21 self) (when (zero? (-> self skel)) - (set! (-> self spawn-joint-count) 0) - 0 - ) + (set! (-> self spawn-joint-count) 0) + 0 + ) (if (zero? (-> self parent-process 0 dummy-type)) - (go swamp-rat-nest-dummy-idle) - (go swamp-rat-nest-dummy-hit) - ) + (go swamp-rat-nest-dummy-idle) + (go swamp-rat-nest-dummy-hit) + ) (none) ) -(defbehavior - swamp-rat-nest-default-event-handler swamp-rat-nest - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('victory) +(defbehavior swamp-rat-nest-default-event-handler swamp-rat-nest ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('victory) (go swamp-rat-nest-victory) ) - ) + ) ) swamp-rat-nest-default-event-handler (defbehavior swamp-rat-nest-pick-spawn-joint swamp-rat-nest () - (when - (and - *target* - (>= - 32768.0 - (vector-vector-distance (-> self root trans) (-> *target* control trans)) - ) - ) - (dotimes (gp-0 5) - (let* - ((s5-0 - (-> - self - dummy - 0 - spawn-joint-array - (rand-vu-int-count (-> self dummy 0 spawn-joint-count)) + (when (and *target* (>= 32768.0 (vector-vector-distance (-> self root trans) (-> *target* control trans)))) + (dotimes (gp-0 5) + (let* ((s5-0 (-> self dummy 0 spawn-joint-array (rand-vu-int-count (-> self dummy 0 spawn-joint-count)))) + (v1-15 (-> self dummy 0 node-list data s5-0 bone)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s3-0 quad) (-> v1-15 transform vector 3 quad)) + (let ((s2-0 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> v1-15 transform vector 1) 1.0)) + (s4-1 (vector-! (new 'stack-no-clear 'vector) (target-pos 0) s3-0)) + ) + (set! (-> s4-1 y) 0.0) + (vector-normalize! s4-1 1.0) + (if (< (vector-dot s2-0 s4-1) (cos 8192.0)) + (return s5-0) + ) + ) ) - ) - (v1-15 (-> self dummy 0 node-list data s5-0 bone)) - (s3-0 (new 'stack-no-clear 'vector)) ) - (set! (-> s3-0 quad) (-> v1-15 transform vector 3 quad)) - (let - ((s2-0 - (vector-normalize-copy! - (new 'stack-no-clear 'vector) - (-> v1-15 transform vector 1) - 1.0 - ) - ) - (s4-1 (vector-! (new 'stack-no-clear 'vector) (target-pos 0) s3-0)) - ) - (set! (-> s4-1 y) 0.0) - (vector-normalize! s4-1 1.0) - (if (< (vector-dot s2-0 s4-1) (cos 8192.0)) - (return s5-0) - ) - ) - ) ) - ) - (-> - self - dummy - 0 - spawn-joint-array - (rand-vu-int-count (-> self dummy 0 spawn-joint-count)) - ) + (-> self dummy 0 spawn-joint-array (rand-vu-int-count (-> self dummy 0 spawn-joint-count))) ) ;; WARN: Function may read a register that is not set: t2 (defbehavior swamp-rat-nest-spawn-rat swamp-rat-nest () (local-vars (t2-0 none)) (when (and (-> self dummy) (> (-> self dummy 0 spawn-joint-count) 0)) - (let* ((v1-5 (swamp-rat-nest-pick-spawn-joint)) - (v1-8 (-> self dummy 0 node-list data v1-5 bone)) - (gp-0 (new 'stack-no-clear 'vector)) + (let* ((v1-5 (swamp-rat-nest-pick-spawn-joint)) + (v1-8 (-> self dummy 0 node-list data v1-5 bone)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> gp-0 quad) (-> v1-8 transform vector 3 quad)) + (let ((s5-0 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> v1-8 transform vector 1) 1.0)) + (s4-0 (if (= (-> self fact-override pickup-type) (pickup-type none)) + 0 + 9 + ) + ) + (s3-0 (get-process *default-dead-pool* swamp-rat #x4000)) + ) + (when s3-0 + (let ((t9-3 (method-of-type swamp-rat activate))) + (t9-3 (the-as swamp-rat s3-0) self 'swamp-rat (the-as pointer #x70004000)) + ) + (run-now-in-process s3-0 swamp-rat-init-by-other self gp-0 s5-0 s4-0 t2-0) + (-> s3-0 ppointer) ) - (set! (-> gp-0 quad) (-> v1-8 transform vector 3 quad)) - (let - ((s5-0 - (vector-normalize-copy! - (new 'stack-no-clear 'vector) - (-> v1-8 transform vector 1) - 1.0 ) - ) - (s4-0 (if (= (-> self fact-override pickup-type) (pickup-type none)) - 0 - 9 - ) - ) - (s3-0 (get-process *default-dead-pool* swamp-rat #x4000)) ) - (when s3-0 - (let ((t9-3 (method-of-type swamp-rat activate))) - (t9-3 - (the-as swamp-rat s3-0) - self - 'swamp-rat - (the-as pointer #x70004000) - ) - ) - (run-now-in-process s3-0 swamp-rat-init-by-other self gp-0 s5-0 s4-0 t2-0) - (-> s3-0 ppointer) - ) - ) ) - ) ) (defbehavior swamp-rat-nest-check-dummy swamp-rat-nest () (when (not (-> self dummy)) - (let ((v1-1 (-> self dummy-type))) - (cond - ((zero? v1-1) - (let - ((gp-0 (get-process *default-dead-pool* swamp-rat-nest-dummy-a #x4000))) - (set! (-> self dummy) (the-as (pointer swamp-rat-nest-dummy) (when gp-0 - (let - ((t9-1 - (method-of-type - swamp-rat-nest-dummy-a - activate - ) - ) - ) - (t9-1 - (the-as - swamp-rat-nest-dummy-a - gp-0 - ) - self - 'swamp-rat-nest-dummy-a - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - gp-0 - swamp-rat-nest-dummy-init-by-other - self - ) - (-> - gp-0 - ppointer - ) - ) - ) + (let ((v1-1 (-> self dummy-type))) + (cond + ((zero? v1-1) + (let ((gp-0 (get-process *default-dead-pool* swamp-rat-nest-dummy-a #x4000))) + (set! (-> self dummy) + (the-as + (pointer swamp-rat-nest-dummy) + (when gp-0 + (let ((t9-1 (method-of-type swamp-rat-nest-dummy-a activate))) + (t9-1 (the-as swamp-rat-nest-dummy-a gp-0) self 'swamp-rat-nest-dummy-a (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 swamp-rat-nest-dummy-init-by-other self) + (-> gp-0 ppointer) + ) + ) + ) + ) + ) + ((= v1-1 1) + (let ((gp-1 (get-process *default-dead-pool* swamp-rat-nest-dummy-b #x4000))) + (set! (-> self dummy) + (the-as + (pointer swamp-rat-nest-dummy) + (when gp-1 + (let ((t9-4 (method-of-type swamp-rat-nest-dummy-b activate))) + (t9-4 (the-as swamp-rat-nest-dummy-b gp-1) self 'swamp-rat-nest-dummy-b (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 swamp-rat-nest-dummy-init-by-other self) + (-> gp-1 ppointer) + ) + ) + ) + ) + ) + ((= v1-1 2) + (let ((gp-2 (get-process *default-dead-pool* swamp-rat-nest-dummy-c #x4000))) + (set! (-> self dummy) + (the-as + (pointer swamp-rat-nest-dummy) + (when gp-2 + (let ((t9-7 (method-of-type swamp-rat-nest-dummy-c activate))) + (t9-7 (the-as swamp-rat-nest-dummy-c gp-2) self 'swamp-rat-nest-dummy-c (the-as pointer #x70004000)) + ) + (run-now-in-process gp-2 swamp-rat-nest-dummy-init-by-other self) + (-> gp-2 ppointer) + ) + ) + ) + ) + ) + (else + (go swamp-rat-nest-die) + ) ) - ) ) - ((= v1-1 1) - (let - ((gp-1 (get-process *default-dead-pool* swamp-rat-nest-dummy-b #x4000))) - (set! (-> self dummy) (the-as (pointer swamp-rat-nest-dummy) (when gp-1 - (let - ((t9-4 - (method-of-type - swamp-rat-nest-dummy-b - activate - ) - ) - ) - (t9-4 - (the-as - swamp-rat-nest-dummy-b - gp-1 - ) - self - 'swamp-rat-nest-dummy-b - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - gp-1 - swamp-rat-nest-dummy-init-by-other - self - ) - (-> - gp-1 - ppointer - ) - ) - ) - ) - ) - ) - ((= v1-1 2) - (let - ((gp-2 (get-process *default-dead-pool* swamp-rat-nest-dummy-c #x4000))) - (set! (-> self dummy) (the-as (pointer swamp-rat-nest-dummy) (when gp-2 - (let - ((t9-7 - (method-of-type - swamp-rat-nest-dummy-c - activate - ) - ) - ) - (t9-7 - (the-as - swamp-rat-nest-dummy-c - gp-2 - ) - self - 'swamp-rat-nest-dummy-c - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - gp-2 - swamp-rat-nest-dummy-init-by-other - self - ) - (-> - gp-2 - ppointer - ) - ) - ) - ) - ) - ) - (else - (go swamp-rat-nest-die) - ) - ) + (+! (-> self dummy-type) 1) + (set! (-> self spawn-period) (* 0.75 (-> self spawn-period))) ) - (+! (-> self dummy-type) 1) - (set! (-> self spawn-period) (* 0.75 (-> self spawn-period))) - ) (none) ) (defstate swamp-rat-nest-idle (swamp-rat-nest) :event - (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('hit) - (go swamp-rat-nest-active) - ) - ) - ) + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('hit) + (go swamp-rat-nest-active) + ) + ) + ) :enter - (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (none) - ) + (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) :trans (behavior () - (if - (and - *target* - (>= - (-> self fact-override idle-distance) - (vector-vector-distance (-> self root trans) (-> *target* control trans)) - ) - ) - (go swamp-rat-nest-active) + (if (and *target* (>= (-> self fact-override idle-distance) + (vector-vector-distance (-> self root trans) (-> *target* control trans)) + ) + ) + (go swamp-rat-nest-active) + ) + (none) ) - (none) - ) :code (behavior () - (swamp-rat-nest-check-dummy) - (while #t - (suspend) + (swamp-rat-nest-check-dummy) + (while #t + (suspend) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior swamp-rat-nest) #f) ) @@ -1455,43 +1182,36 @@ swamp-rat-nest-default-event-handler :event swamp-rat-nest-default-event-handler :enter - (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (none) - ) + (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) :trans (behavior () - (swamp-rat-nest-check-dummy) - (when - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (the-as int (-> self test-interval)) - ) - (set! (-> self state-time) (-> *display* base-frame-counter)) - (set! (-> self test-interval) (the-as uint 60)) - (let ((v1-6 0)) - (let ((a0-2 (the-as (pointer process-tree) (-> self child-process)))) - (while a0-2 - (if (= (-> (ppointer->process a0-2) type) swamp-rat) - (+! v1-6 1) + (swamp-rat-nest-check-dummy) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (the-as int (-> self test-interval))) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self test-interval) (the-as uint 60)) + (let ((v1-6 0)) + (let ((a0-2 (the-as (pointer process-tree) (-> self child-process)))) + (while a0-2 + (if (= (-> (ppointer->process a0-2) type) swamp-rat) + (+! v1-6 1) + ) + (set! a0-2 (-> a0-2 0 brother)) + ) + ) + (if (< v1-6 (-> self rat-count)) + (go swamp-rat-nest-gestate) + ) ) - (set! a0-2 (-> a0-2 0 brother)) - ) ) - (if (< v1-6 (-> self rat-count)) - (go swamp-rat-nest-gestate) - ) - ) + (none) ) - (none) - ) :code (behavior () - (while #t - (suspend) + (while #t + (suspend) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior swamp-rat-nest) #f) ) @@ -1500,62 +1220,53 @@ swamp-rat-nest-default-event-handler :event swamp-rat-nest-default-event-handler :enter - (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (none) - ) + (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) :trans (behavior () - (swamp-rat-nest-check-dummy) - (when - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (the int (* (-> self spawn-period-scale) (-> self spawn-period))) - ) - (send-event (ppointer->process (-> self dummy)) 'shake) - (swamp-rat-nest-spawn-rat) - (go swamp-rat-nest-active) + (swamp-rat-nest-check-dummy) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) + (the int (* (-> self spawn-period-scale) (-> self spawn-period))) + ) + (send-event (ppointer->process (-> self dummy)) 'shake) + (swamp-rat-nest-spawn-rat) + (go swamp-rat-nest-active) + ) + (none) ) - (none) - ) :code (behavior () - (while #t - (suspend) + (while #t + (suspend) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior swamp-rat-nest) #f) ) (defstate swamp-rat-nest-victory (swamp-rat-nest) :event - (the-as - (function process int symbol event-message-block object :behavior swamp-rat-nest) - #f - ) + (the-as (function process int symbol event-message-block object :behavior swamp-rat-nest) #f) :code (behavior () - (let ((gp-0 (the-as (pointer process-tree) (-> self child-process)))) - (while gp-0 - (let* ((s5-0 (ppointer->process gp-0)) - (a0-1 - (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) swamp-rat)) - s5-0 + (let ((gp-0 (the-as (pointer process-tree) (-> self child-process)))) + (while gp-0 + (let* ((s5-0 (ppointer->process gp-0)) + (a0-1 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) swamp-rat)) + s5-0 + ) + ) + ) + (if a0-1 + (send-event a0-1 'victory) ) - ) - ) - (if a0-1 - (send-event a0-1 'victory) - ) + ) + (set! gp-0 (-> gp-0 0 brother)) + ) ) - (set! gp-0 (-> gp-0 0 brother)) - ) + (go swamp-rat-nest-active) + (none) ) - (go swamp-rat-nest-active) - (none) - ) :post (the-as (function none :behavior swamp-rat-nest) #f) ) @@ -1565,80 +1276,43 @@ swamp-rat-nest-default-event-handler swamp-rat-nest-default-event-handler :code (behavior () - (process-entity-status! self (entity-perm-status complete) #t) - (process-entity-status! self (entity-perm-status dead) #t) - (drop-pickup - (-> self fact-override) - #t - *entity-pool* - (-> self fact-override) - 0 + (process-entity-status! self (entity-perm-status complete) #t) + (process-entity-status! self (entity-perm-status dead) #t) + (drop-pickup (-> self fact-override) #t *entity-pool* (-> self fact-override) 0) + (while (-> self child-process) + (suspend) + ) + (none) ) - (while (-> self child-process) - (suspend) - ) - (none) - ) :post (the-as (function none :behavior swamp-rat-nest) #f) ) -(defmethod - init-from-entity! - swamp-rat-nest - ((obj swamp-rat-nest) (arg0 entity-actor)) +(defmethod init-from-entity! swamp-rat-nest ((obj swamp-rat-nest) (arg0 entity-actor)) (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) (set! (-> obj root) (new 'process 'trsqv)) (process-drawable-from-entity! obj arg0) - (set! - (-> obj fact-override) - (new - 'process - 'fact-info-enemy - obj - (pickup-type eco-pill-random) - (-> *FACT-bank* default-pill-inc) - ) - ) + (set! (-> obj fact-override) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) (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) - ) - (let - ((s5-1 - (res-lump-value arg0 'num-lurkers uint128 :default (the-as uint128 3)) - ) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (let ((s5-1 (res-lump-value arg0 'num-lurkers uint128 :default (the-as uint128 3)))) + (if (>= (get-health-percent-lost *game-info* #f) 0.5) + (+! s5-1 -1) + ) + (set! (-> obj rat-count) (max 1 (min 4 (the-as int s5-1)))) ) - (let* ((a0-8 *game-info*) - (t9-5 (method-of-object a0-8 get-health-percent-lost)) - ) - (if (>= (t9-5 a0-8) 0.5) - (+! s5-1 -1) - ) - ) - (set! (-> obj rat-count) (max 1 (min 4 (the-as int s5-1)))) - ) (set! (-> obj defensive-rat-count) 2) - (let* ((a0-11 *game-info*) - (t9-6 (method-of-object a0-11 get-health-percent-lost)) - ) - (if (>= (t9-6 a0-11) 0.75) - (+! (-> obj defensive-rat-count) -1) - ) - ) + (if (>= (get-health-percent-lost *game-info* #f) 0.75) + (+! (-> obj defensive-rat-count) -1) + ) (set! (-> obj dummy) (the-as (pointer swamp-rat-nest-dummy) #f)) (set! (-> obj dummy-type) 0) (set! (-> obj hit-points) 0) (set! (-> obj damaged) #f) (set! (-> obj spawn-period) (* 1200.0 (rand-vu-float-range 0.9 1.1))) - (let* ((f30-1 1.0) - (f28-0 2.0) - (a0-13 *game-info*) - (t9-8 (method-of-object a0-13 get-health-percent-lost)) - ) - (set! (-> obj spawn-period-scale) (+ f30-1 (* f28-0 (t9-8 a0-13)))) - ) + (set! (-> obj spawn-period-scale) (+ 1.0 (* 2.0 (get-health-percent-lost *game-info* #f)))) (set! (-> obj test-interval) (the-as uint (rand-vu-int-range 30 60))) (go swamp-rat-nest-idle) (none) @@ -1669,184 +1343,129 @@ swamp-rat-nest-default-event-handler ) (defmethod dummy-20 swamp-rat-nest-dummy-a ((obj swamp-rat-nest-dummy-a)) - (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) - ) + (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 12288.0 0.0 20480.0) + (set-root-prim! s5-0 s4-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 12288.0 0.0 20480.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) ) - (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) - ) (initialize-skeleton obj *swamp-rat-nest-dummy-a-sg* '()) (none) ) (defmethod dummy-20 swamp-rat-nest-dummy-b ((obj swamp-rat-nest-dummy-b)) - (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) - ) + (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 12288.0 0.0 16384.0) + (set-root-prim! s5-0 s4-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 12288.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) ) - (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) - ) (initialize-skeleton obj *swamp-rat-nest-dummy-b-sg* '()) (none) ) (defmethod dummy-20 swamp-rat-nest-dummy-c ((obj swamp-rat-nest-dummy-c)) - (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) - ) + (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 12288.0 0.0 12288.0) + (set-root-prim! s5-0 s4-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 12288.0 0.0 12288.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) ) - (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) - ) (initialize-skeleton obj *swamp-rat-nest-dummy-c-sg* '()) (none) ) (defmethod dummy-21 swamp-rat-nest-dummy-a ((obj swamp-rat-nest-dummy-a)) (let ((v1-0 0)) - (let* - ((a0-1 - '( - (the binteger 5) (the binteger 6) (the binteger 7) (the binteger 8) (the binteger 9) (the binteger 10) + (let* ((a0-1 '(5 6 7 8 9 10)) + (a1-0 (car a0-1)) + ) + (while (not (null? a0-1)) + (when (< v1-0 6) + (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) + (+! v1-0 1) + ) + (set! a0-1 (cdr a0-1)) + (set! a1-0 (car a0-1)) ) ) - (a1-0 (car a0-1)) - ) - (while (not (null? a0-1)) - (when (< v1-0 6) - (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) - (+! v1-0 1) - ) - (set! a0-1 (cdr a0-1)) - (set! a1-0 (car a0-1)) - ) + (set! (-> obj spawn-joint-count) v1-0) ) - (set! (-> obj spawn-joint-count) v1-0) - ) (set! (-> obj death-part) (-> *part-group-id-table* 292)) - (set! - (-> obj part) - (create-launch-control (-> *part-group-id-table* 295) obj) - ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 295) obj)) (let ((v0-1 6)) - (set! (-> obj particle-spawn-joint) v0-1) - v0-1 - ) + (set! (-> obj particle-spawn-joint) v0-1) + v0-1 + ) ) (defmethod dummy-21 swamp-rat-nest-dummy-b ((obj swamp-rat-nest-dummy-b)) (let ((v1-0 0)) - (let* - ((a0-1 - '( - (the binteger 5) (the binteger 9) (the binteger 10) (the binteger 6) (the binteger 7) (the binteger 8) + (let* ((a0-1 '(5 9 10 6 7 8)) + (a1-0 (car a0-1)) + ) + (while (not (null? a0-1)) + (when (< v1-0 6) + (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) + (+! v1-0 1) + ) + (set! a0-1 (cdr a0-1)) + (set! a1-0 (car a0-1)) ) ) - (a1-0 (car a0-1)) - ) - (while (not (null? a0-1)) - (when (< v1-0 6) - (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) - (+! v1-0 1) - ) - (set! a0-1 (cdr a0-1)) - (set! a1-0 (car a0-1)) - ) + (set! (-> obj spawn-joint-count) v1-0) ) - (set! (-> obj spawn-joint-count) v1-0) - ) (set! (-> obj death-part) (-> *part-group-id-table* 293)) - (set! - (-> obj part) - (create-launch-control (-> *part-group-id-table* 296) obj) - ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 296) obj)) (let ((v0-1 9)) - (set! (-> obj particle-spawn-joint) v0-1) - v0-1 - ) + (set! (-> obj particle-spawn-joint) v0-1) + v0-1 + ) ) (defmethod dummy-21 swamp-rat-nest-dummy-c ((obj swamp-rat-nest-dummy-c)) (let ((v1-0 0)) - (let* ((a0-1 '((the binteger 5) (the binteger 6))) - (a1-0 (car a0-1)) + (let* ((a0-1 '(5 6)) (a1-0 (car a0-1))) (while (not (null? a0-1)) + (when (< v1-0 6) + (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) + (+! v1-0 1) + ) + (set! a0-1 (cdr a0-1)) + (set! a1-0 (car a0-1)) + ) ) - (while (not (null? a0-1)) - (when (< v1-0 6) - (set! (-> obj spawn-joint-array v1-0) (/ (the-as int a1-0) 8)) - (+! v1-0 1) - ) - (set! a0-1 (cdr a0-1)) - (set! a1-0 (car a0-1)) - ) + (set! (-> obj spawn-joint-count) v1-0) ) - (set! (-> obj spawn-joint-count) v1-0) - ) (set! (-> obj death-part) (-> *part-group-id-table* 294)) - (set! - (-> obj part) - (create-launch-control (-> *part-group-id-table* 297) obj) - ) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 297) obj)) (let ((v0-1 5)) - (set! (-> obj particle-spawn-joint) v0-1) - v0-1 - ) + (set! (-> obj particle-spawn-joint) v0-1) + v0-1 + ) ) diff --git a/test/decompiler/reference/engine/game/game-info-h_REF.gc b/test/decompiler/reference/engine/game/game-info-h_REF.gc index 7243dfb17..cc5166b3c 100644 --- a/test/decompiler/reference/engine/game/game-info-h_REF.gc +++ b/test/decompiler/reference/engine/game/game-info-h_REF.gc @@ -225,7 +225,7 @@ (load-game! (_type_ game-save) game-save 25) (clear-text-seen! (_type_ game-text-id) none 26) (get-death-count (_type_ symbol) int 27) - (get-health-percent-lost (_type_) float 28) + (get-health-percent-lost (_type_ symbol) float 28) ) ) diff --git a/test/decompiler/reference/engine/game/game-info_REF.gc b/test/decompiler/reference/engine/game/game-info_REF.gc index 03f174e85..499e94bfd 100644 --- a/test/decompiler/reference/engine/game/game-info_REF.gc +++ b/test/decompiler/reference/engine/game/game-info_REF.gc @@ -1239,6 +1239,6 @@ ) ;; definition for method 28 of type game-info -(defmethod get-health-percent-lost game-info ((obj game-info)) +(defmethod get-health-percent-lost game-info ((obj game-info) (arg0 symbol)) (* 0.25 (the float (get-death-count obj #f))) ) diff --git a/test/decompiler/reference/levels/racer_common/target-racer-FIC-LAV-MIS-OGR-ROL_REF.gc b/test/decompiler/reference/levels/racer_common/target-racer-FIC-LAV-MIS-OGR-ROL_REF.gc new file mode 100644 index 000000000..c8151f31b --- /dev/null +++ b/test/decompiler/reference/levels/racer_common/target-racer-FIC-LAV-MIS-OGR-ROL_REF.gc @@ -0,0 +1,1715 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *racer-mods*, type surface +(define *racer-mods* (new 'static 'surface + :name 'racer + :turnv 131072.0 + :turnvv 524288.0 + :tiltv 65536.0 + :tiltvv 131072.0 + :transv-max 122880.0 + :target-speed 163840.0 + :seek0 1.0 + :seek90 1.0 + :seek180 1.0 + :fric 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :flags #x1 + ) + ) + +;; definition for symbol *racer-air-mods*, type surface +(define *racer-air-mods* (new 'static 'surface + :name 'racer + :turnv 131072.0 + :turnvv 524288.0 + :tiltv 65536.0 + :tiltvv 131072.0 + :transv-max 122880.0 + :target-speed 163840.0 + :seek0 0.3 + :seek90 0.3 + :seek180 0.3 + :fric 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :mode 'air + :flags #x801 + ) + ) + +;; failed to figure out what this is: +(let ((v1-2 (new 'static 'surface + :name '*race-track-surface* + :turnv 1.0 + :turnvv 1.0 + :tiltv 1.0 + :tiltvv 1.0 + :transv-max 1.0 + :target-speed 1.0 + :seek0 153600.0 + :seek90 153600.0 + :seek180 256000.0 + :fric 0.98 + :slope-down-factor 10240.0 + :slope-slip-angle 8192.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 4.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + ) + ) + ) + (set! *race-track-surface* v1-2) + (set! (-> v1-2 touch-hook) nothing) + (set! (-> v1-2 active-hook) nothing) + ) + +;; definition for function racer-on-ground? +(defbehavior racer-on-ground? racer () + (logtest? (-> self root-override status) 1) + ) + +;; definition for function racer-calc-gravity +(defbehavior racer-calc-gravity target () + (let ((f0-8 (cond + ((or (-> self racer stick-lock) (-> self racer heavy)) + 409600.0 + ) + ((= (-> self next-state name) 'target-racing-bounce) + (lerp-scale 81920.0 163840.0 (-> self control unknown-float01) 40960.0 (-> self racer transv-max)) + ) + ((or (-> self racer hop?) (= (-> self next-state name) 'target-racing-bounce)) + (lerp-scale 81920.0 163840.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)) + ) + ((>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) 180) + (lerp-scale 81920.0 122880.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)) + ) + (else + (lerp-scale 245760.0 81920.0 (-> self control unknown-float01) 40960.0 (-> self racer transv-max)) + ) + ) + ) + ) + (set! (-> self control dynam gravity-max) (* 8.0 f0-8)) + (set! (-> self control dynam gravity-length) f0-8) + ) + (vector-float*! + (-> self control dynam gravity) + (-> self control dynam gravity-normal) + (the-as float (-> self control dynam gravity-length)) + ) + ) + +;; definition for function racer-service-slide +;; INFO: Return type mismatch int vs none. +(defbehavior racer-service-slide target () + (let ((v1-1 (-> self racer slide-mode))) + (cond + ((zero? v1-1) + (if (zero? + (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) + ) + (set! (-> self racer slide-mode) -1) + ) + ) + ((= v1-1 1) + (if (zero? + (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons l1 r1)) + ) + (set! (-> self racer slide-mode) -1) + ) + ) + ) + ) + (when (>= (-> self racer slide-mode) 0) + (cond + ((< (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) leftx) (the-as uint 64)) + (set! (-> self racer slide-mode) 0) + 0 + ) + ((< (the-as uint 192) (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) leftx)) + (set! (-> self racer slide-mode) 1) + ) + ) + ) + (set! (-> self racer slide-amp) (seek (-> self racer slide-amp) 0.0 (* 0.3 (-> *display* seconds-per-frame)))) + (if (= (-> self racer slide-amp) 0.0) + (set! (-> self racer slide-mode) -1) + ) + 0 + (none) + ) + +;; definition for function racer-xz +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior racer-xz target ((arg0 float) (arg1 float)) + (set! (-> self racer slide-shift-x) arg1) + (set! (-> self racer slide-interp) (seek (-> self racer slide-interp) 0.0 (-> *display* seconds-per-frame))) + (let ((f30-1 + (if (or (< (* arg1 arg0) 0.0) (not (racer-on-ground?))) + 1.0 + (+ 1.0 (* (fabs arg1) (lerp-scale 0.0 3.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)))) + ) + ) + (f28-1 + (lerp-scale 32768.0 20024.889 (-> self control unknown-float01) 0.0 (* 0.5 (-> self racer transv-max))) + ) + (f0-18 + (lerp-scale 91022.22 236657.78 (-> self control unknown-float01) 0.0 (* 0.125 (-> self racer transv-max))) + ) + ) + (set! (-> self racer rotv y) + (seek (-> self racer rotv y) (* arg0 f30-1 (- f28-1)) (* f0-18 (-> *display* seconds-per-frame))) + ) + ) + (set! (-> self racer rotv y) + (* (-> self racer rotv y) + (lerp-scale 0.99 0.9 (-> self control unknown-float01) 0.0 (-> self racer transv-max)) + ) + ) + (let ((f30-3 (vector-y-angle (-> self control unknown-vector00))) + (s5-1 (racer-on-ground?)) + ) + (cond + ((= arg1 0.0) + (set! (-> self racer slide-grip-mult) 1.0) + ) + (s5-1 + (set! (-> self racer slide-grip-mult) + (seek (-> self racer slide-grip-mult) 1.0 (-> *display* seconds-per-frame)) + ) + ) + ) + (let ((f30-4 (* (deg-diff f30-3 0.0) (-> self racer slide-grip-mult)))) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + (-> self control transv) + (meters 0.000061035156) + (new 'static 'rgba :r #xff :a #x80) + ) + (if (and + (< 409.6 (vector-xz-length (-> self control unknown-vector00))) + s5-1 + (= (-> self next-state name) 'target-racing) + ) + (vector-rotate-y! + (-> self control unknown-vector00) + (-> self control unknown-vector00) + (fmax + (fmin f30-4 (* 10922.667 (-> *display* seconds-per-frame))) + (* -10922.667 (-> *display* seconds-per-frame)) + ) + ) + ) + ) + ) + (let ((gp-1 (new-stack-vector0))) + (vector-matrix*! gp-1 (-> self control unknown-vector00) (-> self control unknown-matrix01)) + (set! (-> gp-1 y) 0.0) + (vector-float*! gp-1 gp-1 0.5) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + gp-1 + (meters 0.00024414062) + (new 'static 'rgba :g #xff :b #xff :a #x80) + ) + (vector+! gp-1 gp-1 (-> self control trans)) + (add-debug-text-sphere + *display-target-marks* + (bucket-id debug-draw1) + gp-1 + 819.2 + "ltransv" + (new 'static 'rgba :g #xff :b #xff :a #x80) + ) + (vector-matrix*! gp-1 (new 'static 'vector :z 40960.0 :w 1.0) (-> self control unknown-matrix01)) + (vector-float*! gp-1 gp-1 0.5) + (vector+! gp-1 gp-1 (-> self control trans)) + (add-debug-text-sphere + *display-target-marks* + (bucket-id debug-draw1) + gp-1 + 819.2 + "nose" + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + ) + 0 + (none) + ) + +;; definition for function racer-thrust +;; INFO: Return type mismatch int vs none. +(defbehavior racer-thrust target ((arg0 basic) (arg1 float)) + (let ((f0-0 + (if (and + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) + (not (-> self racer stick-lock)) + (not (-> self racer stick-off)) + ) + 1.0 + 0.0 + ) + ) + ) + (when (< 0.0 f0-0) + (let ((f1-4 + (* f0-0 + (+ (-> self control unknown-surface01 target-speed) (-> self racer boost-output) (-> self racer hill-boost)) + ) + ) + ) + (+! (-> self control unknown-vector00 z) (* f1-4 (-> *display* seconds-per-frame))) + ) + ) + (set! (-> self racer front-rotv) + (seek + (-> self racer front-rotv) + (+ 65536.0 (* 364088.88 (+ f0-0 (* 0.1 arg1)))) + (* 364088.88 (-> *display* seconds-per-frame)) + ) + ) + ) + (set! (-> self racer front-rot) + (the float + (sar + (shl + (the int (+ (-> self racer front-rot) (* (-> self racer front-rotv) (-> *display* seconds-per-frame)))) + 48 + ) + 48 + ) + ) + ) + (let* ((f1-12 (-> self control unknown-surface01 fric)) + (f0-13 (- 1.0 (* (- 1.0 f1-12) (-> *display* time-adjust-ratio)))) + ) + (set! f0-13 + (cond + ((and + (not (and (= (-> self fact-info-target eco-type) 1) (>= (-> self fact-info-target eco-level) 1.0))) + (logtest? + (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) + (pad-buttons square) + ) + ) + (if (and + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) + (not (-> self racer stick-lock)) + (not (-> self racer stick-off)) + ) + (* 0.9875 f0-13) + (* 0.49375 (+ 1.0 f0-13)) + ) + ) + (else + (cond + ((and + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) + (not (-> self racer stick-lock)) + (not (-> self racer stick-off)) + ) + ) + (else + (set! f0-13 (* 0.5 (+ 1.0 f0-13))) + ) + ) + f0-13 + ) + ) + ) + (set! (-> self control unknown-vector00 x) (* (-> self control unknown-vector00 x) f0-13)) + (set! (-> self control unknown-vector00 z) (* (-> self control unknown-vector00 z) f0-13)) + ) + (let ((f30-0 (-> self racer transv-max))) + (if (>= (vector-xz-length (-> self control unknown-vector00)) f30-0) + (vector-xz-normalize! (-> self control unknown-vector00) f30-0) + ) + ) + (+! + (-> self racer bottom-rot) + (* (+ 364088.88 (* 0.32 (fabs (-> self control unknown-vector00 y)))) (-> *display* seconds-per-frame)) + ) + 0 + (none) + ) + +;; definition for function racer-cushion +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior racer-cushion target ((arg0 float)) + (let ((f30-0 (-> self racer bob-period))) + (let ((f28-0 1.0)) + (set! (-> self racer bob-meta-timer) + (seek + (-> self racer bob-meta-timer) + (-> self racer bob-meta-meta-timer) + (* 4.0 (-> *display* seconds-per-frame)) + ) + ) + (let* ((f0-8 (sin (/ (* 65536.0 (-> self racer bob-timer)) f30-0))) + (f0-9 (* 1228.8 (-> self racer bob-mult-trans) f28-0 f0-8)) + ) + (set! (-> self racer cushion-bob-old) (-> self racer cushion-bob)) + (set! (-> self racer cushion-bob) f0-9) + ) + ) + (let ((a2-1 (new-stack-vector0))) + (set! (-> a2-1 quad) (-> self control trans quad)) + (+! (-> a2-1 y) (-> self racer cushion-bob)) + (add-debug-sphere + *display-target-marks* + (bucket-id debug-draw1) + a2-1 + 819.2 + (new 'static 'rgba :r #xff :b #xff :a #x80) + ) + ) + (let ((f0-13 (* (-> self racer speed-rotx) (-> *display* time-adjust-ratio)))) + (set! (-> self racer cur-rotx) + (lerp (-> self racer cur-rotx) (+ (-> self racer hill-rotx) (-> self racer targ-rotx)) f0-13) + ) + ) + (set! (-> self racer shock-rotx) + (lerp (-> self racer shock-rotx) (* -0.6666667 (-> self racer shock-offset)) 0.1) + ) + (set! (-> self racer shock-rotx) 0.0) + (sin (+ 16384.0 (/ (* 65536.0 (the float (mod (the int (-> self racer bob-timer)) (the int f30-0)))) f30-0))) + ) + (quaternion-rotate-x! + (-> self control unknown-quaternion00) + (-> self control unknown-quaternion00) + (+ arg0 (-> self racer shock-rotx) (* (-> self racer mult-rotx) (-> self racer cur-rotx))) + ) + (let ((f30-1 (* (-> self control unknown-float61) (/ (-> self control unknown-float01) (-> self racer transv-max)))) + ) + (set! (-> self racer hill-value) f30-1) + (if (and (racer-on-ground?) (begin (set! (-> self racer hill-ground-value) f30-1) (< 0.0 f30-1))) + (set! (-> self racer hill-offset) (lerp (-> self racer hill-offset) (fmax -4096.0 (* -16384.0 f30-1)) 0.05)) + (set! (-> self racer hill-offset) (lerp (-> self racer hill-offset) 0.0 0.05)) + ) + ) + (set! (-> self racer hill-boost) + (seek (-> self racer hill-boost) 0.0 (* 81920.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer hill-offset) 0.0) + 0 + (none) + ) + +;; definition for function racer-collision +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior racer-collision target () + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self control transv quad)) + (let ((f30-0 0.8)) + (dummy-33 (-> self control) (-> self control transv) (-> self control root-prim collide-with)) + (+! (-> self racer shock-offsetv) (* (- (-> gp-0 y) (-> self control transv y)) f30-0)) + (+! + (-> self racer shock-offsetv) + (+ (* -20.0 (-> *display* seconds-per-frame) (-> self racer shock-offset)) + (if (racer-on-ground?) + (* (-> self control dynam gravity-length) (-> *display* seconds-per-frame) f30-0) + 0.0 + ) + ) + ) + ) + (if (and + (or + (< (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) 60) + (< (-> self racer shock-offset) 0.0) + ) + (!= (-> self control unknown-surface00 mode) 'air) + ) + (+! (-> self racer shock-offset) (* (-> self racer shock-offsetv) (-> *display* seconds-per-frame))) + ) + (set! (-> self racer shock-offset) + (* (-> self racer shock-offset) (lerp-scale 0.99 0.98 (-> self control unknown-float01) 0.0 28672.0)) + ) + (cond + ((< 81920.0 (-> self racer shock-offset)) + (set! (-> self racer shock-offset) 81920.0) + (set! (-> self racer shock-offsetv) 0.0) + ) + ((< (-> self racer shock-offset) -8192.0) + (set! (-> self racer shock-offset) -8192.0) + (set! (-> self racer shock-offsetv) 0.0) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker s5-0) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 part-tracker-init (-> *part-group-id-table* 13) -1 #f #f #f (-> self control trans)) + (-> s5-0 ppointer) + ) + ) + (dummy-10 (-> self skel effect) 'effect-land -1.0 -1) + ) + ) + (deg-diff (vector-y-angle gp-0) (vector-y-angle (-> self control transv))) + (let ((f30-2 (vector-xz-length gp-0))) + (when (and + (logtest? (-> self control status) 8) + (< 20480.0 f30-2) + (and (< (fabs (-> self racer mod-x)) 0.5) (!= (-> self next-state name) 'target-racing-smack)) + ) + (let ((s5-3 (vector-! (new 'stack-no-clear 'vector) (-> self control trans) (-> self control unknown-vector70)))) + (vector-normalize! s5-3 1.0) + (let ((gp-1 (vector-reflect-flat! (new 'stack-no-clear 'vector) gp-0 s5-3))) + (set! (-> gp-1 y) 0.0) + (vector-normalize! gp-1 1.0) + (let ((f28-1 (deg-diff (-> self racer rot y) (vector-y-angle gp-1)))) + (if (< 16384.0 (fabs f28-1)) + (set! f28-1 (deg-diff (-> self racer rot y) (+ 32768.0 (vector-y-angle gp-1)))) + ) + (set! (-> self racer rotv y) (* f28-1 (lerp-scale 2.0 7.0 f30-2 4096.0 (-> self racer transv-max)))) + ) + ) + ) + ) + ) + ) + (set! (-> self control surf) *race-track-surface*) + 0 + (none) + ) + +;; definition for function racer-integrate +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior racer-integrate target () + (quaternion-rotate-y! + (the-as quaternion (-> self racer quat)) + (quaternion-identity! (new-stack-quaternion0)) + (-> self racer rot y) + ) + (forward-up-nopitch->quaternion + (the-as quaternion (-> self racer surface-quat)) + *null-vector* + (-> self control local-normal) + ) + (quaternion-slerp! + (the-as quaternion (-> self racer surface-quat-smooth)) + (the-as quaternion (-> self racer surface-quat-smooth)) + (the-as quaternion (-> self racer surface-quat)) + 0.05 + ) + (quaternion-normalize! + (quaternion*! + (-> self control unknown-quaternion00) + (the-as quaternion (-> self racer surface-quat-smooth)) + (the-as quaternion (-> self racer quat)) + ) + ) + (quaternion-rotate-z! + (-> self control unknown-quaternion00) + (-> self control unknown-quaternion00) + (-> self racer rot z) + ) + (racer-cushion (-> self racer lean-rotx)) + (if (!= (-> self next-state name) 'target-racing-death) + (set! (-> self control unknown-vector11 y) + (+ (-> self racer cushion-base) (-> self racer cushion-offset) (-> self racer shock-offset)) + ) + ) + (quaternion-copy! (-> self control quat) (-> self control unknown-quaternion00)) + (set-twist! (-> self racer front-blade) (the-as float #f) (- (-> self racer front-rot)) (the-as float #f)) + (set-twist! (-> self racer bottom-blade) (the-as float #f) (the-as float #f) (- (-> self racer bottom-rot))) + (if (and + (= *cheat-mode* 'debug) + (and + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r2)) + (not *pause-lock*) + ) + ) + (vector-reset! (-> self control transv)) + ) + 0 + (none) + ) + +;; definition for function racer-bend-gravity +;; INFO: Return type mismatch int vs none. +(defbehavior racer-bend-gravity target () + (set! (-> self control unknown-float82) (if (racer-on-ground?) + 32.0 + 2.0 + ) + ) + (let ((f0-2 + (if (or + (and (logtest? (-> self control status) 8) (zero? (logand (-> self control status) 1))) + (logtest? (-> self state-flags) #x8000) + ) + 0.0 + (-> self control unknown-float81) + ) + ) + ) + (set! (-> self control unknown-float80) + (seek + (-> self control unknown-float80) + f0-2 + (* (-> self control unknown-float82) (-> *display* seconds-per-frame)) + ) + ) + ) + (vector-deg-slerp + (-> self control dynam gravity-normal) + (-> self control unknown-dynamics00 gravity-normal) + (-> self control ground-poly-normal) + (-> self control unknown-float80) + ) + (vector-float*! + (-> self control dynam gravity) + (-> self control dynam gravity-normal) + (the-as float (-> self control dynam gravity-length)) + ) + 0 + (none) + ) + +;; definition for function racer-sounds +(defbehavior racer-sounds target () + (if (zero? (-> self racer engine-sound-id)) + (set! (-> self racer engine-sound-id) (new-sound-id)) + ) + (let ((f0-1 (* 0.0000009155274 (-> self racer front-rotv)))) + 100.0 + (let ((f0-6 + (+ (* 2.0 f0-1) + (if (< 4096.0 + (vector-dot + (-> self control dynam gravity-normal) + (vector-! (new 'stack-no-clear 'vector) (-> self control trans) (-> self control shadow-pos)) + ) + ) + 0.7 + 0.0 + ) + (lerp-scale 0.0 0.5 (-> self racer boost-level) 0.0 (-> *RACER-bank* boost-level-max)) + ) + ) + ) + (if (< 2.5 f0-6) + (set! f0-6 2.5) + ) + (set! (-> self racer engine-sound-pitch) + (seek (-> self racer engine-sound-pitch) f0-6 (* 4.0 (-> *display* seconds-per-frame))) + ) + ) + ) + (let ((f0-11 (lerp-scale 100.0 60.0 (-> self racer engine-sound-pitch) 0.8 2.0))) + (sound-play-by-name + (static-sound-name "zoomer-loop") + (-> self racer engine-sound-id) + (the int (* 10.24 f0-11)) + (the int (* 1524.0 (-> self racer engine-sound-pitch))) + 0 + 1 + (the-as symbol (-> self control trans)) + ) + ) + (cond + ((and (!= (-> self current-level name) 'ogre) (!= (-> self current-level name) 'lavatube)) + #f + ) + ((or (logtest? (-> self control status) 2) (< 12288.0 (vector-length (-> self control transv)))) + (let ((v0-5 (the-as object (-> *display* base-frame-counter)))) + (set! (-> self racer unstuck-time) (the-as int v0-5)) + v0-5 + ) + ) + ((>= (- (-> *display* base-frame-counter) (-> self racer unstuck-time)) 1500) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack) + (set! (-> a1-6 param 0) (the-as uint #f)) + (let ((a0-12 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-12 mode) 'heat) + (set! (-> a1-6 param 1) (the-as uint a0-12)) + ) + (send-event-function self a1-6) + ) + ) + ((and + (>= (- (-> *display* base-frame-counter) (-> self racer unstuck-time)) 900) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self racer heat-sound-time))) 300) + ) + (set! (-> self racer heat-sound-time) (the-as uint (-> *display* base-frame-counter))) + (sound-play-by-name (static-sound-name "warning") (new-sound-id) 1024 0 0 1 #t) + ) + ) + ) + +;; definition for function racer-buzz +;; INFO: Return type mismatch int vs none. +(defbehavior racer-buzz target ((arg0 float)) + (let ((f1-0 (lerp-scale 0.2 1.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)))) + (cpad-set-buzz! (-> *cpad-list* cpads 0) 1 (the int (* 255.0 (fmin 1.0 (* arg0 f1-0)))) 15) + ) + 0 + (none) + ) + +;; definition for function racer-find-prop-point +(defbehavior racer-find-prop-point target ((arg0 vector) (arg1 vector)) + (let ((s4-0 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 4)))) + (let ((a2-0 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control quat)))) + (vector-flatten! arg0 (vector-! (new 'stack-no-clear 'vector) arg1 s4-0) a2-0) + ) + (vector-normalize! arg0 4915.2) + (vector+! arg0 arg0 s4-0) + ) + arg0 + ) + +;; definition for function racer-effects +;; INFO: Return type mismatch int vs none. +(defbehavior racer-effects target () + (let ((gp-0 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control unknown-quaternion00)))) + (set! (-> *part-id-table* 2212 init-specs 11 initial-valuef) + (lerp-scale 0.0 64.0 (-> self racer front-rotv) 18204.445 364088.88) + ) + (set! (-> *part-id-table* 2212 init-specs 11 initial-valuef) + (- (-> *part-id-table* 2212 init-specs 11 initial-valuef) (* 16.0 (the float (rand-vu-int-range 0 3)))) + ) + (when (< 0.0 (-> *part-id-table* 2212 init-specs 11 initial-valuef)) + (set! (-> *part-id-table* 2212 init-specs 14 initial-valuef) (the-as float gp-0)) + (set! (-> *part-id-table* 2212 init-specs 3 initial-valuef) 15155.2) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2212) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 4)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (let ((gp-2 (vector-y-quaternion! (new 'stack-no-clear 'vector) (-> self control unknown-quaternion00)))) + (set! (-> *part-id-table* 2212 init-specs 11 initial-valuef) + (lerp-scale 0.0 64.0 (-> self racer front-rotv) 18204.445 364088.88) + ) + (set! (-> *part-id-table* 2212 init-specs 11 initial-valuef) + (- (-> *part-id-table* 2212 init-specs 11 initial-valuef) (* 16.0 (the float (rand-vu-int-range 0 3)))) + ) + (when (< 0.0 (-> *part-id-table* 2212 init-specs 11 initial-valuef)) + (set! (-> *part-id-table* 2212 init-specs 14 initial-valuef) (the-as float gp-2)) + (set! (-> *part-id-table* 2212 init-specs 3 initial-valuef) 10240.0) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2212) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 10)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (when (and (racer-on-ground?) (< (-> self control unknown-float01) 90112.0)) + (let* ((gp-4 #f) + (s5-2 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 10))) + (v1-61 (-> self control ground-pat material)) + (a1-13 + (cond + ((= v1-61 (pat-material waterbottom)) + (when (and (logtest? (-> self draw status) (draw-status drwf03)) (zero? (-> self draw cur-lod))) + (let ((f1-3 (y-angle (-> self control))) + (f0-17 (-> self control unknown-float01)) + (s4-2 s5-2) + ) + (set! (-> s4-2 y) (-> self water height)) + (set! (-> *part-id-table* 2275 init-specs 4 initial-valuef) (+ 24576.0 f1-3)) + (set! (-> *part-id-table* 2275 init-specs 19 initial-valuef) (+ 49152.0 f1-3)) + (set! (-> *part-id-table* 2275 init-specs 1 initial-valuef) (* 0.0000036621095 f0-17)) + (set! (-> *part-id-table* 2275 init-specs 2 initial-valuef) (* 0.1 f0-17)) + (sp-launch-particles-var + *sp-particle-system-3d* + (-> *part-id-table* 2275) + s4-2 + (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* 2276) + s4-2 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (-> *part-id-table* 2208) + ) + ((= v1-61 (pat-material lava)) + (-> *part-id-table* 2213) + ) + ((= v1-61 (pat-material hotcoals)) + (-> *part-id-table* 2214) + ) + ((or + (= v1-61 (pat-material pcmetal)) + (= v1-61 (pat-material metal)) + (= v1-61 (pat-material tube)) + (= v1-61 (pat-material rotate)) + ) + (-> *part-id-table* 2215) + ) + ((= v1-61 (pat-material grass)) + (-> *part-id-table* 2207) + ) + ((or + (= v1-61 (pat-material dirt)) + (= v1-61 (pat-material sand)) + (= v1-61 (pat-material straw)) + (= v1-61 (pat-material gravel)) + ) + (-> *part-id-table* 2216) + ) + ((or (= v1-61 (pat-material wood)) (= v1-61 (pat-material crwood))) + (-> *part-id-table* 2217) + ) + ((= v1-61 (pat-material stone)) + (-> *part-id-table* 2831) + ) + (else + (-> *part-id-table* 2211) + ) + ) + ) + ) + (set! (-> s5-2 y) (-> self control shadow-pos y)) + (if (nonzero? a1-13) + (sp-launch-particles-var + (if gp-4 + *sp-particle-system-3d* + *sp-particle-system-2d* + ) + a1-13 + s5-2 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (let* ((gp-5 #f) + (v1-102 (-> self control ground-pat material)) + (s5-3 (cond + ((= v1-102 (pat-material waterbottom)) + (-> *part-id-table* 2218) + ) + ((= v1-102 (pat-material lava)) + (-> *part-id-table* 2219) + ) + ((= v1-102 (pat-material hotcoals)) + (-> *part-id-table* 2220) + ) + ((= v1-102 (pat-material grass)) + (-> *part-id-table* 2221) + ) + (else + 0 + ) + ) + ) + (a2-7 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 10))) + ) + (set! (-> a2-7 y) (-> self control shadow-pos y)) + (if (nonzero? s5-3) + (sp-launch-particles-var + (if gp-5 + *sp-particle-system-3d* + *sp-particle-system-2d* + ) + (the-as sparticle-launcher s5-3) + a2-7 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + ) + (when (and + (and (= (-> self fact-info-target eco-type) 1) (>= (-> self fact-info-target eco-level) 1.0)) + (logtest? + (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0) + (pad-buttons circle square) + ) + (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword82)) 75) + (zero? (logand (-> self state-flags) #x8008)) + ) + (let ((gp-6 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control quat))) + (s5-4 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self manipy 0 node-list data 4))) + ) + (set! (-> gp-6 y) 0.0) + (vector-normalize! gp-6 (-> *RACER-bank* yellow-projectile-speed)) + (vector+! gp-6 gp-6 (-> self control transv)) + (let ((s4-3 (get-process *default-dead-pool* projectile-yellow #x4000))) + (when s4-3 + (let ((t9-22 (method-of-type projectile-yellow activate))) + (t9-22 (the-as projectile-yellow s4-3) self 'projectile-yellow (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-3 + projectile-init-by-other + (-> self entity) + s5-4 + gp-6 + (if (>= (-> self fact-info-target eco-level) (-> *FACT-bank* eco-level-max)) + 152 + 136 + ) + #f + ) + (-> s4-3 ppointer) + ) + ) + ) + (set! (-> self control unknown-dword82) (-> *display* base-frame-counter)) + ) + (let ((f22-0 (-> *RACER-bank* hotcoals-heat-inc)) + (f24-0 (-> *RACER-bank* lava-heat-inc)) + (f28-2 (-> *RACER-bank* lava-air-heat-inc)) + (f26-0 (-> *RACER-bank* surface-heat-inc)) + (f30-2 (-> *RACER-bank* jump-heat-inc)) + ) + (case (-> self current-level name) + (('lavatube) + (set! f22-0 (-> *RACER-bank* lavatube-hotcoals-heat-inc)) + (set! f24-0 (-> *RACER-bank* lavatube-lava-heat-inc)) + (set! f28-2 (-> *RACER-bank* lavatube-lava-air-heat-inc)) + (set! f26-0 (-> *RACER-bank* lavatube-surface-heat-inc)) + (set! f30-2 (-> *RACER-bank* lavatube-jump-heat-inc)) + ) + ) + (let* ((f20-0 (get-health-percent-lost *game-info* #f)) + (f22-1 (lerp-scale f22-0 (* 0.5 f22-0) f20-0 0.0 1.0)) + (f24-1 (lerp-scale f24-0 (* 0.33333334 f24-0) f20-0 0.0 1.0)) + ) + (case (-> self control poly-pat material) + (((pat-material hotcoals)) + (set! (-> self racer heat) + (seek (-> self racer heat) (-> *RACER-bank* heat-max) (* f22-1 (-> *display* seconds-per-frame))) + ) + ) + (((pat-material lava)) + (if (racer-on-ground?) + (set! (-> self racer heat) + (seek (-> self racer heat) (-> *RACER-bank* heat-max) (* f24-1 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer heat) + (seek (-> self racer heat) (-> *RACER-bank* heat-max) (* f28-2 (-> *display* seconds-per-frame))) + ) + ) + ) + (else + (if (not (racer-on-ground?)) + (set! (-> self racer heat) (seek (-> self racer heat) 0.0 (* f26-0 (-> *display* seconds-per-frame)))) + ) + ) + ) + ) + (let ((v1-189 (- (-> *display* base-frame-counter) (-> self control unknown-dword11)))) + (if (and (>= v1-189 270) (>= 900 v1-189)) + (set! (-> self racer heat) (seek (-> self racer heat) 0.0 (* f30-2 (-> *display* seconds-per-frame)))) + ) + ) + ) + (when (and (>= (-> self racer heat) (-> *RACER-bank* heat-max)) (= (-> self game mode) 'play)) + (let ((a1-43 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-43 from) self) + (set! (-> a1-43 num-params) 2) + (set! (-> a1-43 message) 'attack) + (set! (-> a1-43 param 0) (the-as uint #f)) + (let ((a0-68 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-68 mode) 'heat) + (set! (-> a1-43 param 1) (the-as uint a0-68)) + ) + (send-event-function self a1-43) + ) + ) + (if (and *cheat-mode* *debug-segment* (cpad-pressed? 0 l2)) + (send-event self 'boost 1.0) + ) + (let ((v1-218 (- (-> *display* base-frame-counter) (the-as int (-> self racer boost-time))))) + (if (< v1-218 (the-as int (-> self racer boost-duration))) + (set! (-> self racer boost-curve) + (* (-> *RACER-bank* boost-curve-max) + (sin (* 32768.0 (/ (the float v1-218) (the float (-> self racer boost-duration))))) + ) + ) + (set! (-> self racer boost-curve) 0.0) + ) + ) + (when (or + (zero? + (logand (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) + ) + (< (-> self control unknown-float01) 4096.0) + (= (-> self racer boost-level) 0.0) + ) + (when (nonzero? (-> self racer boost-sound-id)) + (let ((v1-241 (the-as sound-rpc-set-param (get-sound-buffer-entry)))) + (set! (-> v1-241 command) (sound-command set-param)) + (set! (-> v1-241 id) (-> self racer boost-sound-id)) + (set! (-> v1-241 parms volume) -4) + (set! (-> v1-241 auto-time) 120) + (set! (-> v1-241 auto-from) 2) + (set! (-> v1-241 parms mask) (the-as uint 17)) + (-> v1-241 id) + ) + (set! (-> self racer boost-sound-id) (new 'static 'sound-id)) + 0 + ) + (set! (-> self racer boost-level) 0.0) + ) + (set! (-> self racer boost-target) (+ (-> self racer boost-curve) (-> self racer boost-level))) + (set! (-> self racer boost-output) + (seek (-> self racer boost-output) (-> self racer boost-target) (* 40960.0 (-> *display* seconds-per-frame))) + ) + (when (!= (-> self racer boost-output) 0.0) + (dotimes (gp-7 8) + (let ((v1-258 (rand-vu-int-range 3 (+ (-> self node-list length) -1)))) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2229) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data v1-258)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + (cpad-set-buzz! (-> *cpad-list* cpads 0) 0 1 30) + ) + (when (logtest? (-> self control status) 8) + (let* ((gp-8 (racer-find-prop-point (new 'stack-no-clear 'vector) (-> self control unknown-vector70))) + (v1-274 (shr (shl (-> self control unknown-int60) 52) 58)) + (a1-54 + (cond + ((or (= v1-274 16) (= v1-274 8)) + (set! (-> *part-id-table* 2226 init-specs 1 initial-valuef) + (lerp-scale 0.2 10.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)) + ) + (-> *part-id-table* 2226) + ) + (else + (set! (-> *part-id-table* 2225 init-specs 1 initial-valuef) + (lerp-scale 0.2 10.0 (-> self control unknown-float01) 0.0 (-> self racer transv-max)) + ) + (-> *part-id-table* 2225) + ) + ) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + a1-54 + gp-8 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (cpad-set-buzz! (-> *cpad-list* cpads 0) 0 51 15) + (sound-play-by-name + (sound-name-with-material 'zoom-hit (the-as int (-> self control unknown-int60)) "") + (-> self racer scrape-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + ) + (when (and + (< (-> self racer heat) (-> *RACER-bank* heat-max)) + (and + (< (* 0.8 (-> *RACER-bank* heat-max)) (-> self racer heat)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self racer heat-sound-time))) + (the int (* 3000.0 (- 1.0 (/ (-> self racer heat) (-> *RACER-bank* heat-max))))) + ) + ) + ) + (set! (-> self racer heat-sound-time) (the-as uint (-> *display* base-frame-counter))) + (sound-play-by-name (static-sound-name "warning") (new-sound-id) 1024 0 0 1 #t) + ) + (when (rand-vu-percent? (/ (-> self racer heat) (-> *RACER-bank* heat-max))) + (let ((a2-28 + (process-drawable-random-point! + (the-as process-drawable (ppointer->process (-> self manipy))) + (new 'stack-no-clear 'vector) + ) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2227) + a2-28 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + 0 + (none) + ) + +;; definition for function target-racing-center-anim +;; INFO: Return type mismatch int vs none. +(defbehavior target-racing-center-anim target () + (set! (-> self racer turn-anim-frame) 0.0) + (set! (-> self racer tail-anim-frame) 0.0) + (set! (-> self racer rudd-anim-frame) 0.0) + 0 + (none) + ) + +;; definition for function target-racing-turn-anim +;; INFO: Return type mismatch int vs none. +(defbehavior target-racing-turn-anim target () + (let ((gp-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s5-0 gp-0) + (set! (-> self control unknown-int40) s5-0) + (set! (-> self racer turn-anim-targ) (fmax -16.0 (fmin 16.0 (-> self racer turn-anim-targ)))) + (or + (not (>= (* (-> self racer turn-anim-targ) (-> self racer turn-anim-frame)) 0.0)) + (< (fabs (-> self racer turn-anim-frame)) (fabs (-> self racer turn-anim-targ))) + ) + (+! + (-> self racer turn-anim-vel) + (* (- (-> self racer turn-anim-targ) (-> self racer turn-anim-frame)) + (lerp-scale + 20.0 + (if (< (fabs (-> self racer turn-anim-frame)) (fabs (-> self racer turn-anim-targ))) + 30.0 + 60.0 + ) + (-> self control unknown-float01) + 0.0 + (* 0.3 (-> self racer transv-max)) + ) + (-> *display* seconds-per-frame) + ) + ) + (set! (-> self racer turn-anim-vel) + (fmax + -100.0 + (fmin + 100.0 + (* (-> self racer turn-anim-vel) + (lerp-scale 0.96 0.9 (-> self control unknown-float01) 0.0 (* 0.3 (-> self racer transv-max))) + ) + ) + ) + ) + (+! (-> self racer turn-anim-frame) (* (-> self racer turn-anim-vel) (-> *display* seconds-per-frame))) + (set! (-> self racer turn-anim-frame) (fmax -20.0 (fmin 20.0 (-> self racer turn-anim-frame)))) + (cond + ((and (>= (-> self racer turn-anim-frame) 20.0) (>= (-> self racer turn-anim-vel) 0.0)) + (set! (-> self racer turn-anim-vel) 0.0) + ) + ((and (>= -20.0 (-> self racer turn-anim-frame)) (>= 0.0 (-> self racer turn-anim-vel))) + (set! (-> self racer turn-anim-vel) 0.0) + ) + ) + (+! + (-> self racer tail-anim-vel) + (* -50.0 + (-> *display* seconds-per-frame) + (- (-> self racer tail-anim-frame) + (* -0.0091552725 (- (-> self racer change-roty) (-> self racer change-roty-old))) + ) + ) + ) + (set! (-> self racer tail-anim-vel) (fmax -100.0 (fmin 100.0 (* 0.8 (-> self racer tail-anim-vel))))) + (+! (-> self racer tail-anim-frame) (* (-> self racer tail-anim-vel) (-> *display* seconds-per-frame))) + (set! (-> self racer tail-anim-frame) (fmax -20.0 (fmin 20.0 (-> self racer tail-anim-frame)))) + (cond + ((and (>= (-> self racer tail-anim-frame) 20.0) (>= (-> self racer tail-anim-vel) 0.0)) + (set! (-> self racer tail-anim-vel) 0.0) + ) + ((and (>= -20.0 (-> self racer tail-anim-frame)) (>= 0.0 (-> self racer tail-anim-vel))) + (set! (-> self racer tail-anim-vel) 0.0) + ) + ) + (+! + (-> self racer rudd-anim-vel) + (* 40.0 (-> *display* seconds-per-frame) (- (-> self racer tail-anim-frame) (-> self racer rudd-anim-frame))) + ) + (set! (-> self racer rudd-anim-vel) (fmax -100.0 (fmin 100.0 (* 0.96 (-> self racer rudd-anim-vel))))) + (+! (-> self racer rudd-anim-frame) (* (-> self racer rudd-anim-vel) (-> *display* seconds-per-frame))) + (set! (-> self racer rudd-anim-frame) (fmax -20.0 (fmin 20.0 (-> self racer rudd-anim-frame)))) + (cond + ((and (>= (-> self racer rudd-anim-frame) 20.0) (>= (-> self racer rudd-anim-vel) 0.0)) + (set! (-> self racer rudd-anim-vel) 0.0) + ) + ((and (>= -20.0 (-> self racer rudd-anim-frame)) (>= 0.0 (-> self racer rudd-anim-vel))) + (set! (-> self racer rudd-anim-vel) 0.0) + ) + ) + ) + (set-time-ratios *display* (the float gp-0)) + ) + (when #f + (format *stdcon* "~%~%~%z:~r vy:~r~%" (-> self racer rot z) (-> self racer rotv y)) + (format + *stdcon* + "t:~6,,2f v:~6,,2f p:~6,,2f~%" + (-> self racer turn-anim-targ) + (-> self racer turn-anim-vel) + (-> self racer turn-anim-frame) + ) + (format + *stdcon* + "t:~6,,2f v:~6,,2f p:~6,,2f~%" + (-> self racer turn-anim-targ) + (-> self racer tail-anim-vel) + (-> self racer tail-anim-frame) + ) + ) + (set-twist! + (-> self racer tail) + (the-as float #f) + (the-as float #f) + (* -273.06668 (-> self racer tail-anim-frame)) + ) + (let ((f30-2 (fmin 1.0 (* 2.0 (fabs (-> self racer slide-shift-x)))))) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 num-func) num-func-identity) + (set! (-> gp-1 frame-num) (ja-aframe (-> self racer turn-anim-frame) 0)) + ) + (let ((a0-9 (-> self skel root-channel 1))) + (set! (-> a0-9 frame-interp) (+ 0.5 (* 0.025 (-> self racer tail-anim-frame)))) + (set! (-> a0-9 param 0) 0.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-chan) + ) + (let ((gp-2 (-> self skel root-channel 2))) + (let ((f0-82 (lerp (-> self racer slide-interp) f30-2 0.125))) + (set! (-> self racer slide-interp) f0-82) + (set! (-> gp-2 frame-interp) f0-82) + ) + (set! (-> gp-2 param 0) 0.0) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-chan) + ) + ) + (let ((a0-12 (-> self skel root-channel 3))) + (set! (-> a0-12 frame-interp) + (* (-> self racer slide-interp) (+ 0.5 (* 0.025 (-> self racer tail-anim-frame)))) + ) + (set! (-> a0-12 param 0) 0.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-chan) + ) + 0 + (none) + ) + +;; definition for function target-racing-jump-anim +(defbehavior target-racing-jump-anim target ((arg0 basic) (arg1 int)) + (let ((s4-0 'nothing) + (f30-0 0.0) + ) + (until (ja-done? 0) + (let ((f0-0 (target-height-above-ground))) + (if (< 8192.0 f0-0) + 'jump + ) + ) + (let ((s5-0 #f)) + (when (!= s5-0 s4-0) + (if (= s4-0 'nothing) + (ja-channel-push! 1 arg1) + (ja-channel-push! 1 37) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 130))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 130)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) f30-0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 130)) num-func-seek!) + ) + (set! s4-0 s5-0) + ) + ) + (suspend) + (let ((f0-4 (lerp-scale 2.0 1.0 (ja-aframe-num 0) 0.0 22.0))) + (if (= (-> self next-state name) 'target-racing-falling) + (set! f0-4 (* 0.5 f0-4)) + ) + (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) f0-4) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! f30-0 (ja-aframe-num 0)) + (ja-blend-eval) + ) + ) + (ja-channel-set! 2) + (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 131)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (let ((gp-2 (-> self skel root-channel 1))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 132)) + num-func-identity + ) + (set! (-> gp-2 frame-num) (ja-aframe 44.0 0)) + ) + (let ((f30-1 0.0)) + (while #t + (suspend) + (let ((gp-3 (-> self skel root-channel 1))) + (set! f30-1 (seek f30-1 1.0 (-> *display* seconds-per-frame))) + (set! (-> gp-3 frame-interp) f30-1) + ) + ) + ) + (the-as none 0) + (none) + ) + +;; definition for function target-racing-land-anim +;; INFO: Return type mismatch int vs none. +(defbehavior target-racing-land-anim target ((arg0 symbol)) + (if (>= (-> self racer slide-mode) 0) + (goto cfg-23) + ) + (ja-channel-push! 1 21) + (cond + ((= arg0 'high-jump) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 135))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 135)) 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 135)) num-func-seek!) + ) + (until (ja-done? 0) + (if (>= (-> self racer slide-mode) 0) + (goto cfg-23) + ) + (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) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ((= arg0 'jump) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 129))) + (set! (-> gp-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 129)) data 0 length) -1)) + ) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) (ja-aframe 44.0 0)) + (joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 129)) num-func-seek!) + ) + (until (ja-done? 0) + (if (>= (-> self racer slide-mode) 0) + (goto cfg-23) + ) + (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 ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 132))) + (set! (-> gp-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 132)) data 0 length) -1)) + ) + (set! (-> gp-2 param 1) 1.0) + (set! (-> gp-2 frame-num) (ja-aframe 44.0 0)) + (joint-control-channel-group! gp-2 (the-as art-joint-anim (-> self draw art-group data 132)) num-func-seek!) + ) + (until (ja-done? 0) + (if (>= (-> self racer slide-mode) 0) + (goto cfg-23) + ) + (suspend) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1))) + (set! (-> a0-11 param 1) 1.0) + (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (label cfg-23) + 0 + (none) + ) + +;; definition for function target-racing-post +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior target-racing-post target () + (set! (-> self control reaction) racer-collision-reaction) + (set! (-> self control surf) *race-track-surface*) + (set! (-> self racer transv-max) + (+ (-> self control unknown-surface01 transv-max) (-> self racer boost-output) (-> self racer hill-boost)) + ) + (let ((gp-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s5-0 gp-0) + (set! (-> self control unknown-int40) s5-0) + (flag-setup) + (build-conversions (-> self control transv)) + (racer-service-slide) + (let ((f30-0 (analog-input (the-as int (-> self control unknown-cpad-info00 leftx)) 128.0 32.0 110.0 1.0))) + (set! (-> self racer mod-x) f30-0) + (let* ((f28-0 (-> self racer slide-amp)) + (v1-17 (-> self racer slide-mode)) + (f28-1 + (* f28-0 + (cond + ((zero? v1-17) + (- (fmax + (analog-input + (the-as int (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) abutton 8)) + 0.0 + 32.0 + 255.0 + 1.0 + ) + (analog-input + (the-as int (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) abutton 9)) + 0.0 + 32.0 + 255.0 + 1.0 + ) + ) + ) + ) + ((= v1-17 1) + (fmax + (analog-input + (the-as int (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) abutton 8)) + 0.0 + 32.0 + 255.0 + 1.0 + ) + (analog-input + (the-as int (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) abutton 9)) + 0.0 + 32.0 + 255.0 + 1.0 + ) + ) + ) + (else + 0.0 + ) + ) + ) + ) + ) + (let ((f26-2 (analog-input (the-as int (-> self control unknown-cpad-info00 lefty)) 128.0 32.0 110.0 1.0))) + (when (-> self racer stick-off) + (set! f30-0 0.0) + (set! f26-2 0.0) + ) + (+! (-> self racer front-turn) (* 0.0625 (deg-diff (-> self racer front-turn) (* 3640.889 f30-0)))) + (+! (-> self racer tail-tilt) (* 0.0625 (deg-diff (-> self racer tail-tilt) (* -3640.889 f26-2)))) + ) + (let* ((f26-3 + (* f30-0 (lerp-scale 5461.3335 7281.778 (-> self control unknown-float01) 0.0 (-> self racer transv-max))) + ) + (f0-29 + (* f28-1 (lerp-scale 546.13336 3640.889 (-> self control unknown-float01) 0.0 (-> self racer transv-max))) + ) + (f1-3 (* -0.8 (-> self racer rotv y))) + (f0-33 (+ (cond + ((< (* f1-3 f26-3) 0.0) + 0.0 + ) + (else + (let ((f2-3 (+ 910.2222 (fabs f1-3)))) + (fmax (fmin f26-3 f2-3) (- f2-3)) + ) + ) + ) + (cond + ((< (* f1-3 f0-29) 0.0) + 0.0 + ) + (else + (let ((f1-5 (+ 910.2222 (fabs f1-3)))) + (fmax (fmin f0-29 f1-5) (- f1-5)) + ) + ) + ) + ) + ) + ) + (+! (-> self racer rot z) (* 0.05 (deg-diff (-> self racer rot z) (fmax -7281.778 (fmin 7281.778 f0-33))))) + ) + (racer-xz f30-0 f28-1) + (racer-thrust (the-as basic f30-0) f28-1) + ) + ) + (racer-calc-gravity) + (add-gravity) + (reverse-conversions (-> self control transv)) + (let ((f30-1 + (/ (* (-> self racer tail-tilt) (+ 20480.0 (-> self control unknown-float01))) + (+ 20480.0 (-> self racer transv-max)) + ) + ) + ) + (cond + ((racer-on-ground?) + (set! (-> self control unknown-float81) + (seek (-> self control unknown-float81) 1.0 (* 8.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer mult-rotx) (seek (-> self racer mult-rotx) 0.0 (* 2.0 (-> *display* seconds-per-frame)))) + (set! (-> self racer targ-rotx) 0.0) + (set! (-> self racer hill-rotx) 0.0) + (set! (-> self racer speed-rotx) 0.25) + (let ((f0-52 (-> self racer bob-timer))) + (let ((f1-16 (+ (-> self racer bob-timer) (* (-> self racer bob-meta-timer) (-> *display* time-adjust-ratio)))) + (f2-12 (-> self racer bob-period)) + ) + (set! (-> self racer bob-timer) (- f1-16 (* (the float (the int (/ f1-16 f2-12))) f2-12))) + ) + (when (!= (the int (/ f0-52 (* 0.5 (-> self racer bob-period)))) + (the int (/ (-> self racer bob-timer) (* 0.5 (-> self racer bob-period)))) + ) + (set! (-> self racer bob-mult-trans) (seek (-> self racer bob-mult-trans) 1.0 0.75)) + (if (< 1.5 (-> self racer bob-meta-meta-timer)) + (set! (-> self racer bob-meta-meta-timer) (seek (-> self racer bob-meta-meta-timer) 1.0 0.5)) + ) + (when (>= (- (-> *display* base-frame-counter) (the-as int (-> self racer bob-meta-time))) 660) + (set! (-> self racer bob-meta-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self racer bob-meta-meta-timer) (rand-vu-float-range 0.8 1.2)) + ) + ) + ) + (let ((f0-63 (lerp-scale -1.0 -0.33 (-> self control unknown-float01) 0.0 (-> self racer transv-max)))) + (set! (-> self racer bob-mult-rot) + (seek (-> self racer bob-mult-rot) f0-63 (* 8.0 (-> *display* seconds-per-frame))) + ) + ) + (if (< 0.0 f30-1) + (set! f30-1 0.0) + ) + (set! (-> self racer stick-lock) #f) + ) + (else + (set! (-> self control unknown-float81) + (seek (-> self control unknown-float81) 0.0 (* 2.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer mult-rotx) + (seek (-> self racer mult-rotx) 1.0 (* 16.0 (-> *display* seconds-per-frame))) + ) + (let ((f0-77 (vector-dot (-> self control dynam gravity-normal) (-> self control transv)))) + (vector-! (new 'stack-no-clear 'vector) (-> self control trans) (the-as vector (-> self control trans-old))) + (let* ((v1-128 (-> self racer bounce)) + (f1-36 (cond + ((= v1-128 1) + (* -0.08888889 f0-77) + ) + ((= v1-128 2) + (* -0.035555556 f0-77) + ) + ((= v1-128 3) + (* -0.017777778 f0-77) + ) + (else + (* -0.13333334 f0-77) + ) + ) + ) + ) + (if (-> self racer hop?) + (set! f1-36 (* 0.5 f1-36)) + ) + (if (= (-> self control unknown-surface00 mode) 'air) + (set! (-> self racer targ-rotx) (fmax -2730.6667 (fmin 5461.3335 f1-36))) + ) + ) + (cond + ((>= f0-77 -32768.0) + (cond + ((or + (= (-> self next-state name) 'target-racing-jump) + (and (= (-> self next-state name) 'target-racing-bounce) (= (-> self racer bounce) 1)) + ) + (set! (-> self racer speed-rotx) 0.5) + (when (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) 30) + (set! (-> self racer hill-rotx) + (seek (-> self racer hill-rotx) 0.0 (* 65536.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer speed-rotx) 0.6) + ) + ) + (else + (set! (-> self racer speed-rotx) 0.25) + ) + ) + (set! (-> self racer mult-rotx) + (seek (-> self racer mult-rotx) 1.0 (* 64.0 (-> *display* seconds-per-frame))) + ) + ) + (else + (set! (-> self racer speed-rotx) 0.025) + ) + ) + ) + (let ((f0-91 (+ (-> self racer bob-timer) (* (-> self racer bob-meta-timer) (-> *display* time-adjust-ratio)))) + (f1-44 (-> self racer bob-period)) + ) + (set! (-> self racer bob-timer) (- f0-91 (* (the float (the int (/ f0-91 f1-44))) f1-44))) + ) + (set! (-> self racer bob-mult-rot) + (seek (-> self racer bob-mult-rot) 0.0 (* 16.0 (-> *display* seconds-per-frame))) + ) + (set! (-> self racer bob-mult-trans) + (seek (-> self racer bob-mult-trans) 0.0 (* 16.0 (-> *display* seconds-per-frame))) + ) + (set! f30-1 + (lerp-scale + f30-1 + 1820.4445 + (the float (- (-> *display* base-frame-counter) (-> self control unknown-dword11))) + 0.0 + 900.0 + ) + ) + (cond + ((and + (logtest? (-> self control status) 8) + (and + (>= (- (-> *display* base-frame-counter) (-> self control unknown-dword11)) 30) + (or (-> self racer stick-lock) (< (target-move-dist (the-as int (-> *TARGET-bank* stuck-time))) 4096.0)) + (not + (and + (= *cheat-mode* 'debug) + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons r2)) + ) + ) + ) + ) + (cond + ((and + (< 0.0 + (vector-dot + (-> self control dynam gravity-normal) + (vector-! (new 'stack-no-clear 'vector) (-> self control trans) (-> self control unknown-vector54)) + ) + ) + (logtest? (-> self control root-prim prim-core action) #x8000) + ) + (+! (-> self racer stuck-count) 1) + (go target-racing-smack 122880.0 #f) + ) + (else + (set! (-> self racer stick-lock) #t) + ) + ) + ) + (else + (set! (-> self racer stick-lock) #f) + ) + ) + ) + ) + (+! (-> self racer lean-rotx) (* 0.1 (deg-diff (-> self racer lean-rotx) f30-1))) + ) + (set! (-> self racer lean-rotx) 0.0) + (set! (-> self racer rot-old quad) (-> self racer rot quad)) + (set! (-> self racer change-roty-old) (-> self racer change-roty)) + (set! (-> self racer rot y) + (the float + (sar + (shl (the int (+ (-> self racer rot y) (* (-> self racer rotv y) (-> *display* seconds-per-frame)))) 48) + 48 + ) + ) + ) + (set! (-> self racer change-roty) + (* (deg-diff (-> self racer rot-old y) (-> self racer rot y)) (-> *display* frames-per-second)) + ) + (racer-collision) + (racer-integrate) + (post-flag-setup) + ) + (set-time-ratios *display* (the float gp-0)) + ) + (target-compute-slopes *up-vector*) + (racer-effects) + (racer-sounds) + (rot->dir-targ! (-> self control)) + (racer-bend-gravity) + (ja-post) + (joint-points) + (do-target-shadow) + (target-powerup-process) + (vector+! (-> self racer bike-trans) (-> self control trans) (-> self control unknown-vector12)) + (quaternion-copy! (the-as quaternion (-> self racer bike-quat)) (-> self control quat)) + (set! (-> self racer bike-scale quad) (-> self control scale quad)) + (let ((v1-240 (-> *target-shadow-control* settings shadow-dir quad))) + (set! (-> *racer-shadow-control* settings shadow-dir quad) v1-240) + ) + 0 + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/target-tube_REF.gc b/test/decompiler/reference/levels/sunken/target-tube_REF.gc new file mode 100644 index 000000000..85688e5de --- /dev/null +++ b/test/decompiler/reference/levels/sunken/target-tube_REF.gc @@ -0,0 +1,1163 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for symbol *tube-mods*, type surface +(define *tube-mods* (new 'static 'surface + :name 'tube + :turnv 21845.334 + :turnvv 524288.0 + :tiltv 5461.3335 + :tiltvv 131072.0 + :transv-max 1.0 + :target-speed 32768.0 + :seek0 1.0 + :seek90 1.0 + :seek180 1.0 + :fric 1.0 + :nonlin-fric-dist 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + ) + ) + +;; definition for symbol *tube-jump-mods*, type surface +(define *tube-jump-mods* (new 'static 'surface + :name 'tube + :turnv 21845.334 + :turnvv 262144.0 + :tiltv 5461.3335 + :tiltvv 131072.0 + :transv-max 1.0 + :seek0 0.8 + :seek90 0.7 + :seek180 0.8 + :fric 1.0 + :nonlin-fric-dist 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :mode 'air + :flags #x800 + ) + ) + +;; definition for symbol *tube-hit-mods*, type surface +(define *tube-hit-mods* (new 'static 'surface + :name 'tube + :turnv 21845.334 + :turnvv 262144.0 + :tiltv 32768.0 + :tiltvv 131072.0 + :transv-max 1.0 + :target-speed 40960.0 + :fric 1.0 + :nonlin-fric-dist 1.0 + :slip-factor 1.0 + :slide-factor 1.0 + :slope-up-factor 1.0 + :slope-down-factor 1.0 + :slope-slip-angle 1.0 + :impact-fric 1.0 + :bend-factor 1.0 + :bend-speed 1.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :mode 'air + ) + ) + +;; failed to figure out what this is: +(let ((v1-3 (new 'static 'surface + :name '*tube-surface* + :turnv 1.0 + :turnvv 1.0 + :tiltv 1.0 + :tiltvv 1.0 + :transv-max 94208.0 + :target-speed 1.0 + :seek0 32768.0 + :seek90 94208.0 + :seek180 8192.0 + :fric 0.98 + :nonlin-fric-dist 4091904.0 + :slip-factor 0.7 + :slope-down-factor 81920.0 + :slope-slip-angle 16384.0 + :bend-speed 4.0 + :alignv 1.0 + :slope-up-traction 1.0 + :align-speed 1.0 + :flags #x28 + ) + ) + ) + (set! *tube-surface* v1-3) + (set! (-> v1-3 mult-hook) (the-as (function surface surface surface int none) nothing)) + (set! (-> v1-3 touch-hook) nothing) + (set! (-> v1-3 active-hook) nothing) + ) + +;; definition of type tube-info +(deftype tube-info (basic) + ((entity basic :offset-assert 4) + (tube handle :offset-assert 8) + (downhill vector :inline :offset-assert 16) + (centertube vector :inline :offset-assert 32) + (downtube vector :inline :offset-assert 48) + (sidetube vector :inline :offset-assert 64) + (foretube vector :inline :offset-assert 80) + (old-transv vector :inline :offset-assert 96) + (mod-x float :offset-assert 112) + (mod-y float :offset-assert 116) + (start-time uint64 :offset-assert 120) + (turn-anim-targ float :offset-assert 128) + (turn-anim-frame float :offset-assert 132) + (turn-anim-vel float :offset-assert 136) + (tube-sound-id sound-id :offset-assert 140) + (tube-sound-vol float :offset-assert 144) + ) + :method-count-assert 9 + :size-assert #x94 + :flag-assert #x900000094 + ) + +;; definition for method 3 of type tube-info +(defmethod inspect tube-info ((obj tube-info)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tentity: ~A~%" (-> obj entity)) + (format #t "~Ttube: ~D~%" (-> obj tube)) + (format #t "~Tdownhill: ~`vector`P~%" (-> obj downhill)) + (format #t "~Tcentertube: ~`vector`P~%" (-> obj centertube)) + (format #t "~Tdowntube: ~`vector`P~%" (-> obj downtube)) + (format #t "~Tsidetube: ~`vector`P~%" (-> obj sidetube)) + (format #t "~Tforetube: ~`vector`P~%" (-> obj foretube)) + (format #t "~Told-transv: ~`vector`P~%" (-> obj old-transv)) + (format #t "~Tmod-x: ~f~%" (-> obj mod-x)) + (format #t "~Tmod-y: ~f~%" (-> obj mod-y)) + (format #t "~Tstart-time: ~D~%" (-> obj start-time)) + (format #t "~Tturn-anim-targ: ~f~%" (-> obj turn-anim-targ)) + (format #t "~Tturn-anim-frame: ~f~%" (-> obj turn-anim-frame)) + (format #t "~Tturn-anim-vel: ~f~%" (-> obj turn-anim-vel)) + (format #t "~Ttube-sound-id: ~D~%" (-> obj tube-sound-id)) + (format #t "~Ttube-sound-vol: ~f~%" (-> obj tube-sound-vol)) + obj + ) + +;; definition of type tube-bank +(deftype tube-bank (basic) + () + :method-count-assert 9 + :size-assert #x4 + :flag-assert #x900000004 + ) + +;; definition for method 3 of type tube-bank +(defmethod inspect tube-bank ((obj tube-bank)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + obj + ) + +;; definition for symbol *TUBE-bank*, type tube-bank +(define *TUBE-bank* (new 'static 'tube-bank)) + +;; definition for function tube-sounds +(defbehavior tube-sounds target () + (set! (-> self tube tube-sound-vol) (seek + (-> self tube tube-sound-vol) + (if (logtest? (-> self control status) 1) + 100.0 + 0.0 + ) + (* 200.0 (-> *display* seconds-per-frame)) + ) + ) + (let ((f30-0 (-> self tube tube-sound-vol)) + (f0-5 (lerp-scale -0.3 0.3 (-> self control unknown-float01) 0.0 122880.0)) + ) + (sound-play-by-name + (static-sound-name "slide-loop") + (-> self tube tube-sound-id) + (the int (* 10.24 f30-0)) + (the int (* 1524.0 f0-5)) + 0 + 1 + (the-as symbol (-> self control trans)) + ) + ) + ) + +;; definition for function tube-thrust +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defbehavior tube-thrust target ((arg0 float) (arg1 float)) + (let ((s4-1 (vector-! (new 'stack-no-clear 'vector) (-> self tube foretube) (-> self control trans)))) + (vector-flatten! s4-1 s4-1 (-> self tube downtube)) + (vector-flatten! s4-1 s4-1 (-> self control local-normal)) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + s4-1 + (meters 0.00024414062) + (new 'static 'rgba :g #xff :a #x80) + ) + (vector-matrix*! s4-1 s4-1 (-> self control unknown-matrix00)) + (vector-float*! s4-1 s4-1 2.0) + (if (< (-> self control unknown-surface01 target-speed) (vector-length s4-1)) + (vector-normalize! s4-1 (-> self control unknown-surface01 target-speed)) + ) + (vector-v++! (-> self control unknown-vector00) s4-1) + (when (logtest? (-> self control status) 8) + (let ((s3-0 (-> self tube old-transv))) + (-> self control unknown-vector00 y) + (vector-reflect! s4-1 s3-0 (-> self control unknown-vector71)) + (let ((f30-1 (vector-dot (-> self tube sidetube) (-> self tube old-transv))) + (s2-0 (new-stack-vector0)) + (f28-0 (vector-dot (-> self tube sidetube) s4-1)) + ) + 0.0 + (vector-! s2-0 s4-1 (vector-float*! s2-0 (-> self tube sidetube) f28-0)) + (let* ((f0-8 (vector-length s2-0)) + (f1-0 f0-8) + ) + (cond + ((< 0.0 f30-1) + (if (< f28-0 (- f30-1)) + (set! f28-0 (- f30-1)) + ) + ) + ((< f30-1 0.0) + (if (< (- f30-1) f28-0) + (set! f28-0 (- f30-1)) + ) + ) + ) + (vector+! s4-1 (vector-float*! s4-1 (-> self tube sidetube) f28-0) (vector-float*! s2-0 s2-0 (/ f0-8 f1-0))) + ) + ) + (vector-flatten! s4-1 s4-1 (-> self control local-normal)) + (let ((s2-1 (new-stack-vector0))) + (let ((f0-11 (vector-dot (-> self tube downtube) s4-1))) + 0.0 + (vector-! s2-1 s4-1 (vector-float*! s2-1 (-> self tube downtube) f0-11)) + ) + (let* ((f0-12 (vector-length s2-1)) + (f1-2 f0-12) + (f2-5 (fmax (-> self control unknown-float01) (vector-dot s3-0 (-> self tube downtube)))) + ) + (vector+! s4-1 (vector-float*! s4-1 (-> self tube downtube) f2-5) (vector-float*! s2-1 s2-1 (/ f0-12 f1-2))) + ) + ) + ) + (vector-matrix*! s4-1 s4-1 (-> self control unknown-matrix00)) + (let ((f0-14 (-> self control unknown-vector00 y))) + (set! (-> self control unknown-vector00 quad) (-> s4-1 quad)) + (set! (-> self control unknown-vector00 y) f0-14) + ) + ) + ) + (let ((s4-2 (new 'stack-no-clear 'vector))) + (set! (-> s4-2 quad) (-> self tube downtube quad)) + (let ((s3-1 (new 'stack-no-clear 'vector))) + (set! (-> s3-1 quad) (-> self tube sidetube quad)) + (vector-flatten! s3-1 s3-1 (-> self control local-normal)) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + s3-1 + (meters 2.0) + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + (vector-matrix*! s3-1 s3-1 (-> self control unknown-matrix00)) + (vector-normalize! s3-1 (* arg0 (-> self control unknown-surface01 seek90))) + (vector-v++! (-> self control unknown-vector00) s3-1) + ) + (vector-flatten! s4-2 s4-2 (-> self control local-normal)) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + s4-2 + (meters 2.0) + (new 'static 'rgba :r #xff :g #x80 :b #x40 :a #x80) + ) + (vector-matrix*! s4-2 s4-2 (-> self control unknown-matrix00)) + (vector-normalize! + s4-2 + (* (-> self control unknown-surface01 slope-down-factor) (fmax 0.2 (-> self control surface-angle))) + ) + (vector-v++! (-> self control unknown-vector00) s4-2) + ) + (let* ((f1-6 (-> self control unknown-surface01 fric)) + (f1-9 (- 1.0 (* 60.0 (-> *display* seconds-per-frame) (- 1.0 f1-6)))) + (f0-21 (* 0.5 (+ 1.0 f1-9))) + ) + (set! (-> self control unknown-vector00 x) (* (-> self control unknown-vector00 x) f0-21)) + (set! (-> self control unknown-vector00 z) (* (-> self control unknown-vector00 z) f0-21)) + ) + (let ((f30-2 + (- (-> self control unknown-surface01 transv-max) (if (< arg1 0.0) + (* arg1 (-> self control unknown-surface01 seek0)) + (* arg1 (-> self control unknown-surface01 seek180)) + ) + ) + ) + ) + (if (>= (vector-xz-length (-> self control unknown-vector00)) f30-2) + (vector-xz-normalize! (-> self control unknown-vector00) f30-2) + ) + ) + (let ((gp-1 (new-stack-vector0))) + (vector-matrix*! gp-1 (-> self control unknown-vector00) (-> self control unknown-matrix01)) + (vector-float*! gp-1 gp-1 0.5) + (add-debug-vector + *display-target-marks* + (bucket-id debug-draw1) + (-> self control trans) + gp-1 + (meters 0.00024414062) + (new 'static 'rgba :g #xff :b #xff :a #x80) + ) + (vector+! gp-1 gp-1 (-> self control trans)) + (add-debug-text-sphere + *display-target-marks* + (bucket-id debug-draw1) + gp-1 + 819.2 + "ltransv" + (new 'static 'rgba :g #xff :b #xff :a #x80) + ) + (vector-matrix*! gp-1 (new 'static 'vector :z 40960.0 :w 1.0) (-> self control unknown-matrix01)) + (vector-float*! gp-1 gp-1 0.5) + (vector+! gp-1 gp-1 (-> self control trans)) + (add-debug-text-sphere + *display-target-marks* + (bucket-id debug-draw1) + gp-1 + 819.2 + "nose" + (new 'static 'rgba :r #xff :g #xff :a #x80) + ) + ) + (tube-sounds) + 0 + (none) + ) + +;; definition for function target-tube-post +;; Used lq/sq +(defbehavior target-tube-post target () + (let ((gp-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s5-0 gp-0) + (set! (-> self control unknown-int40) s5-0) + (set! (-> self tube old-transv quad) (-> self control transv quad)) + (flag-setup) + (build-conversions (-> self control transv)) + (if (logtest? (-> self state-flags) 32) + (set! (-> self control unknown-surface01 turnv) (* 3.0 (-> self control unknown-surface01 turnv))) + ) + (forward-up-nopitch->quaternion + (-> self control dir-targ) + (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self control dir-targ)) + (-> self control local-normal) + ) + (do-rotations1) + (send-event + (handle->process (-> self tube tube)) + 'update + (-> self tube centertube) + (-> self tube downtube) + (-> self tube sidetube) + (-> self tube foretube) + ) + (vector-flatten! + (-> self tube downhill) + (vector-negate! (new-stack-vector0) (-> self control dynam gravity-normal)) + (-> self control local-normal) + ) + (vector-normalize! (-> self tube downhill) 1.0) + (set! (-> self control unknown-float12) 1.0) + (let ((f30-0 (analog-input (the-as int (-> self control unknown-cpad-info00 leftx)) 128.0 32.0 110.0 1.0))) + (set! (-> self tube mod-x) f30-0) + (let ((f0-5 (analog-input (the-as int (-> self control unknown-cpad-info00 lefty)) 128.0 32.0 110.0 1.0))) + (set! (-> self tube mod-y) f0-5) + (tube-thrust f30-0 f0-5) + ) + ) + (add-gravity) + (do-rotations2) + (reverse-conversions (-> self control transv)) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x40 :b #x40 :a #x80) + ) + ) + (set! (-> self control reaction) target-collision-reaction) + (dummy-33 (-> self control) (-> self control transv) (-> self control root-prim collide-with)) + (if (logtest? (-> self control root-prim prim-core action) 64) + (dummy-20 *target* *collide-cache*) + ) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x80 :g #x60 :b #x40 :a #x80) + ) + ) + (bend-gravity) + (post-flag-setup) + (set! (-> self control surf) *tube-surface*) + ) + (set-time-ratios *display* (the float gp-0)) + ) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x40 :b #x40 :a #x80) + ) + ) + (ja-post) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x80 :a #x80) + ) + ) + (joint-points) + (do-target-shadow) + (target-powerup-process) + (none) + ) + +;; failed to figure out what this is: +(defstate target-tube-start (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (cond + ((and (= arg2 'query) (= (-> arg3 param 0) 'mode)) + 'tube + ) + (else + (case arg2 + (('end-mode) + (go + target-jump + (-> *TARGET-bank* tube-jump-height-min) + (-> *TARGET-bank* tube-jump-height-max) + (the-as surface #f) + ) + ) + (('touched) + (send-event arg0 'attack (-> arg3 param 0) 'tube 0 0) + #f + ) + (('attack 'attack-or-shove 'attack-invinc) + (target-attacked + 'attack-or-shove + (the-as attack-info (-> arg3 param 1)) + arg0 + (the-as process (-> arg3 param 0)) + target-tube-hit + ) + ) + (else + (target-generic-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + ) + :exit + (behavior () + (when (not + (or + (= (-> self next-state name) 'target-tube) + (= (-> self next-state name) 'target-tube-jump) + (= (-> self next-state name) 'target-tube-hit) + ) + ) + (let ((v1-7 (-> self manipy))) + (when v1-7 + (deactivate (-> v1-7 0)) + (set! (-> self manipy) (the-as (pointer manipy) #f)) + ) + ) + (set! (-> self control root-prim prim-core action) + (logand -8193 (-> self control root-prim prim-core action)) + ) + (set! (-> self control unknown-surface00) *walk-mods*) + (set! (-> self control dynam gravity-max) (-> self control unknown-dynamics00 gravity-max)) + (set! (-> self control dynam gravity-length) (-> self control unknown-dynamics00 gravity-length)) + (target-collide-set! 'normal 0.0) + (set! (-> self control reaction) target-collision-reaction) + (send-event *camera* 'clear-slave-option #x6000) + (sound-stop (-> self tube tube-sound-id)) + (set! (-> self tube tube-sound-id) (new 'static 'sound-id)) + (send-event (handle->process (-> self tube tube)) 'end-mode) + (target-exit) + ) + (none) + ) + :code + (behavior ((arg0 handle)) + (send-event *camera* 'set-slave-option #x6000) + (target-exit) + (set! *display-profile* #f) + (set! *display-entity-errors* #f) + (set! (-> self control surf) *tube-surface*) + (if (zero? (-> self tube)) + (set! (-> self tube) (new 'process 'tube-info)) + ) + (set! (-> self tube tube) arg0) + (set! (-> self tube entity) #f) + (let ((a0-4 (handle->process arg0))) + (if a0-4 + (set! (-> self tube entity) (-> a0-4 entity)) + ) + ) + (set! (-> self tube start-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self tube tube-sound-id) (new-sound-id)) + (set! (-> self tube tube-sound-vol) 0.0) + (target-collide-set! 'tube 0.0) + (set! (-> self control transv quad) (the-as uint128 0)) + (set! (-> self control unknown-float01) 0.0) + (logior! (-> self control root-prim prim-core action) 8192) + (remove-exit) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 4) + (set! (-> a1-4 message) 'update) + (set! (-> a1-4 param 0) (the-as uint (-> self tube centertube))) + (set! (-> a1-4 param 1) (the-as uint (-> self tube downtube))) + (set! (-> a1-4 param 2) (the-as uint (-> self tube sidetube))) + (set! (-> a1-4 param 3) (the-as uint (-> self tube foretube))) + (cond + ((< (the-as float (send-event-function (handle->process (-> self tube tube)) a1-4)) 0.5) + (vector-normalize-copy! (-> self control transv) (-> self tube downtube) 40960.0) + (forward-up-nopitch->quaternion + (-> self control dir-targ) + (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> self control transv) 1.0) + (-> self control dynam gravity-normal) + ) + (go target-tube-jump (-> *TARGET-bank* tube-jump-height-min) (-> *TARGET-bank* tube-jump-height-max)) + ) + (else + (go target-tube) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior target) target-post) + ) + +;; definition for function target-tube-turn-anim +;; INFO: Return type mismatch int vs none. +(defbehavior target-tube-turn-anim target () + (let ((gp-0 (the int (-> *display* time-ratio)))) + (set-time-ratios *display* 1.0) + (countdown (s5-0 gp-0) + (set! (-> self control unknown-int40) s5-0) + (set! (-> self tube turn-anim-targ) (fmax -20.0 (fmin 20.0 (-> self tube turn-anim-targ)))) + (or + (not (>= (* (-> self tube turn-anim-targ) (-> self tube turn-anim-frame)) 0.0)) + (< (fabs (-> self tube turn-anim-frame)) (fabs (-> self tube turn-anim-targ))) + ) + (+! + (-> self tube turn-anim-vel) + (* (- (-> self tube turn-anim-targ) (-> self tube turn-anim-frame)) + (lerp-scale + 20.0 + (if (< (fabs (-> self tube turn-anim-frame)) (fabs (-> self tube turn-anim-targ))) + 30.0 + 60.0 + ) + (-> self control unknown-float01) + 0.0 + 36864.0 + ) + (-> *display* seconds-per-frame) + ) + ) + (set! (-> self tube turn-anim-vel) + (fmax + -100.0 + (fmin + 100.0 + (* (-> self tube turn-anim-vel) (lerp-scale 0.96 0.9 (-> self control unknown-float01) 0.0 36864.0)) + ) + ) + ) + (+! (-> self tube turn-anim-frame) (* (-> self tube turn-anim-vel) (-> *display* seconds-per-frame))) + (set! (-> self tube turn-anim-frame) (fmax -20.0 (fmin 20.0 (-> self tube turn-anim-frame)))) + (cond + ((and (>= (-> self tube turn-anim-frame) 20.0) (>= (-> self tube turn-anim-vel) 0.0)) + (set! (-> self tube turn-anim-vel) 0.0) + ) + ((and (>= -20.0 (-> self tube turn-anim-frame)) (>= 0.0 (-> self tube turn-anim-vel))) + (set! (-> self tube turn-anim-vel) 0.0) + ) + ) + ) + (set-time-ratios *display* (the float gp-0)) + ) + (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 105)) + num-func-identity + ) + (set! (-> gp-1 frame-num) (ja-aframe (-> self tube turn-anim-frame) 0)) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate target-tube (target) + :event + (-> target-tube-start event) + :enter + (behavior () + (set! (-> self control unknown-surface00) *tube-mods*) + (set! (-> self control surf) *tube-surface*) + (none) + ) + :exit + (-> target-tube-start exit) + :trans + (behavior () + (if (and + (logtest? + (logior + (logior + (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 0) + (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 1) + ) + (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-rel 2) + ) + (pad-buttons x) + ) + (can-jump? #f) + ) + (go target-tube-jump (-> *TARGET-bank* tube-jump-height-min) (-> *TARGET-bank* tube-jump-height-max)) + ) + (none) + ) + :code + (behavior () + (case (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (((-> self draw art-group data 41) (-> self draw art-group data 38)) + (ja-channel-push! 1 12) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 106))) + (set! (-> a0-8 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 106)) data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! a0-8 (the-as art-joint-anim (-> self draw art-group data 106)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self tube turn-anim-frame) 0.0) + ) + (else + (ja-channel-push! 1 12) + ) + ) + (while #t + (set! (-> self tube turn-anim-targ) (* 20.0 (-> self tube mod-x))) + (target-tube-turn-anim) + (suspend) + ) + (none) + ) + :post + (behavior () (target-tube-post) (none)) + ) + +;; failed to figure out what this is: +(defstate target-tube-jump (target) + :event + (-> target-tube-start event) + :enter + (behavior ((arg0 float) (arg1 float)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (init-var-jump arg0 arg1 (the-as vector #t) (the-as vector #f) (-> self control transv)) + (set! (-> self control status) (logand -8 (-> self control status))) + (set! (-> self control unknown-surface00) *tube-jump-mods*) + (none) + ) + :exit + (-> target-tube-start exit) + :trans + (behavior () + (if (logtest? (-> self control status) 1) + (go target-tube) + ) + (mod-var-jump + #t + #t + (logtest? (-> *cpad-list* cpads (-> self control unknown-cpad-info00 number) button0-abs 0) (pad-buttons x)) + (-> self control transv) + ) + (set! (-> self control unknown-float122) + (seek + (-> self control unknown-float122) + (fmax 0.0 (fmin 1.0 (* 0.00012207031 (+ -2048.0 (-> self control unknown-float01))))) + (-> *display* seconds-per-frame) + ) + ) + (none) + ) + :code + (behavior ((arg0 float) (arg1 float)) + (ja-channel-push! 1 15) + (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 41)) + num-func-identity + ) + (set! (-> gp-0 frame-num) (ja-aframe 16.0 0)) + ) + (let ((f30-0 35.0) + (f28-0 1.0) + ) + (until (ja-done? 0) + (let* ((f24-0 (vector-dot (-> self control dynam gravity-normal) (-> self control transv))) + (f26-0 (- f30-0 (ja-aframe-num 0))) + (f0-8 (fmin (fmin 3.0 f26-0) (/ (* 5.0 f26-0) (the float (time-to-apex f24-0 -245760.0))))) + (a0-7 (-> self skel root-channel 0)) + ) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (let ((v1-17 (and (< 0.0 f24-0) (< 0.0 f26-0)))) + (set! (-> a0-7 param 1) (if v1-17 + f0-8 + f28-0 + ) + ) + ) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + (suspend) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 38))) + (set! (-> a0-9 param 0) 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 38)) num-func-loop!) + ) + (while #t + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (the-as art-joint-anim (-> self draw art-group data 38))) + (set! (-> a0-10 param 0) 1.0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim (-> self draw art-group data 38)) + num-func-loop! + ) + ) + ) + (none) + ) + :post + (-> target-tube post) + ) + +;; failed to figure out what this is: +(defstate target-tube-hit (target) + :event + (-> target-tube-start event) + :enter + (behavior ((arg0 handle) (arg1 attack-info)) + (send-event + (handle->process (-> self tube tube)) + 'update + (-> self tube centertube) + (-> self tube downtube) + (-> self tube sidetube) + (-> self tube foretube) + ) + (none) + ) + :exit + (behavior () + (if (!= (-> self next-state name) 'target-tube-death) + (set! (-> self state-flags) (logand -32777 (-> self state-flags))) + ) + (set! (-> self state-flags) (logand -901 (-> self state-flags))) + ((-> target-tube-start exit)) + (none) + ) + :code + (behavior ((arg0 handle) (arg1 attack-info)) + (let ((gp-0 (-> self attack-info))) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (logior! (-> self state-flags) 8) + (set! (-> self game hit-time) (-> *display* base-frame-counter)) + (when (zero? (logand (-> arg1 mask) 2)) + (vector-! + (-> arg1 vector) + (vector+float*! (new 'stack-no-clear 'vector) (-> self tube foretube) (-> self tube downtube) 20480.0) + (-> self control trans) + ) + (let ((s3-2 (new-stack-vector0)) + (f30-0 (vector-dot (-> self control unknown-vector71) (-> arg1 vector))) + ) + 0.0 + (vector-! s3-2 (-> arg1 vector) (vector-float*! s3-2 (-> self control unknown-vector71) f30-0)) + (let* ((f0-3 (vector-length s3-2)) + (f1-0 f0-3) + ) + (if (< f30-0 0.0) + (set! f30-0 (* 0.5 f30-0)) + ) + (vector+! + (-> arg1 vector) + (vector-float*! (-> arg1 vector) (-> self control unknown-vector71) f30-0) + (vector-float*! s3-2 s3-2 (/ f0-3 f1-0)) + ) + ) + ) + (logior! (-> arg1 mask) 2) + ) + (when (and (logtest? (-> arg1 mask) 32) (= (-> arg1 mode) 'darkeco) (zero? (logand (-> arg1 mask) 128))) + (set! (-> arg1 shove-up) 12288.0) + (logior! (-> arg1 mask) 128) + ) + (let ((v1-30 gp-0)) + (set! (-> v1-30 attacker) (the-as handle #f)) + (set! (-> v1-30 mode) 'generic) + (set! (-> v1-30 shove-back) 6144.0) + (set! (-> v1-30 shove-up) 12288.0) + (set! (-> v1-30 angle) #f) + (set! (-> v1-30 trans quad) (-> self control trans quad)) + (set! (-> v1-30 control) 0.0) + (set! (-> v1-30 invinc-time) (-> *TARGET-bank* hit-invulnerable-timeout)) + ) + (dummy-9 gp-0 arg1) + (when (= arg0 'attack) + (pickup-collectable! + (-> self fact-info-target) + (pickup-type eco-green) + (- (-> *FACT-bank* health-single-inc)) + (the-as handle #f) + ) + (target-hit-effect gp-0) + ) + (set! (-> self control unknown-surface00) *smack-mods*) + (target-hit-setup-anim gp-0) + (target-hit-move gp-0 (target-hit-orient gp-0 (-> gp-0 vector)) target-falling-anim-trans 1.0) + (let ((s5-2 (new-stack-vector0)) + (f30-1 (vector-dot (-> self tube downtube) (-> self control transv))) + ) + 0.0 + (vector-! s5-2 (-> self control transv) (vector-float*! s5-2 (-> self tube downtube) f30-1)) + (let ((f0-14 (vector-length s5-2)) + (f2-2 (fmax 40960.0 f30-1)) + (f1-2 0.0) + ) + (vector+! + (-> self control transv) + (vector-float*! (-> self control transv) (-> self tube downtube) f2-2) + (vector-float*! s5-2 s5-2 (/ f1-2 f0-14)) + ) + ) + ) + (let ((s5-3 forward-up-nopitch->quaternion) + (s4-2 (-> self control dir-targ)) + (t9-9 vector-normalize!) + (a0-35 (new-stack-vector0)) + ) + (set! (-> a0-35 quad) (-> self control transv quad)) + (s5-3 s4-2 (t9-9 a0-35 1.0) (vector-y-quaternion! (new-stack-vector0) (-> self control dir-targ))) + ) + (if (and (= (-> self game mode) 'play) (>= 0.0 (-> self fact-info-target health))) + (go target-tube-death (-> gp-0 mode)) + ) + ) + (go target-tube) + (none) + ) + :post + (the-as (function none :behavior target) target-post) + ) + +;; failed to figure out what this is: +(defstate target-tube-death (target) + :event + (-> target-death event) + :exit + (behavior () + (set! (-> self state-flags) (logand -32777 (-> self state-flags))) + (target-exit) + (clear-pending-settings-from-process *setting-control* self 'process-mask) + (copy-settings-from-target! *setting-control*) + ((-> target-tube-start exit)) + (none) + ) + :code + (behavior ((arg0 symbol)) + (local-vars (v1-40 symbol)) + (set! (-> self neck flex-blend) 0.0) + (target-timed-invulnerable-off self) + (push-setting! *setting-control* self 'process-mask 'set 0.0 #x14a0000) + (copy-settings-from-target! *setting-control*) + (set! (-> self control transv quad) (the-as uint128 0)) + (set! (-> self control unknown-surface00) *neutral-mods*) + (ja-channel-push! 1 30) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 76))) + (set! (-> gp-1 param 0) (ja-aframe 134.0 0)) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) 0.0) + (joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 76)) num-func-seek!) + ) + (until (ja-done? 0) + (TODO-RENAME-9 (-> self align)) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (when (zero? (logand (-> self align flags) 1)) + (vector-matrix*! gp-2 (the-as vector (-> self align delta)) (-> self control unknown-matrix01)) + (vector-float*! (-> self control transv) gp-2 (-> *display* frames-per-second)) + ) + ) + (suspend) + (let ((gp-3 (-> self skel root-channel 0))) + (set! (-> gp-3 param 0) (ja-aframe 134.0 0)) + (set! (-> gp-3 param 1) 1.0) + (joint-control-channel-group-eval! gp-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self control transv quad) (the-as uint128 0)) + (initialize! (-> self game) 'dead (the-as game-save #f) (the-as string #f)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until v1-40 + (suspend) + (set! v1-40 (and (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) (not (movie?)))) + ) + (go target-tube) + (none) + ) + :post + target-no-stick-post + ) + +;; definition of type slide-control +(deftype slide-control (process-drawable) + ((target handle :offset-assert 176) + (pos float :offset-assert 184) + (trans vector :inline :offset-assert 192) + (rot vector :inline :offset-assert 208) + (side vector :inline :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 22 + :size-assert #xf0 + :flag-assert #x16008000f0 + (:methods + (slide-control-watch () _type_ :state 20) + (slide-control-ride () _type_ :state 21) + ) + ) + +;; definition for method 3 of type slide-control +(defmethod inspect slide-control ((obj slide-control)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttarget: ~D~%" (-> obj target)) + (format #t "~T~Tpos: ~f~%" (-> obj pos)) + (format #t "~T~Ttrans: ~`vector`P~%" (-> obj trans)) + (format #t "~T~Trot: ~`vector`P~%" (-> obj rot)) + (format #t "~T~Tside: ~`vector`P~%" (-> obj side)) + obj + ) + +;; definition for function distance-from-tangent +(defun distance-from-tangent ((arg0 path-control) (arg1 float) (arg2 vector) (arg3 vector) (arg4 vector) (arg5 vector)) + (eval-path-curve-div! arg0 arg2 arg1 'interp) + (TODO-RENAME-12 arg0 arg3 arg1) + (set! (-> arg2 y) (-> arg5 y)) + (set! (-> arg3 y) 0.0) + (let ((s2-1 (new 'stack-no-clear 'vector))) + (vector-rotate-y! arg4 arg3 -16384.0) + (set! (-> arg4 y) 0.0) + (let* ((a2-5 (vector+! (new 'stack-no-clear 'vector) arg2 arg4)) + (f0-3 (vector-line-distance-point! arg5 arg2 a2-5 s2-1)) + ) + (if (< 0.0 (vector-dot arg3 (vector-! (new 'stack-no-clear 'vector) arg5 s2-1))) + (set! f0-3 (- f0-3)) + ) + f0-3 + ) + ) + ) + +;; definition for function find-target-point +;; Used lq/sq +(defbehavior find-target-point slide-control ((arg0 vector)) + (local-vars (f0-2 float)) + (let* ((s4-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (new 'stack-no-clear 'vector)) + (f28-0 (+ -0.1 (-> self pos))) + (f26-0 (distance-from-tangent (-> self path) f28-0 s4-0 s5-0 gp-0 arg0)) + ) + 0.0 + (let ((f30-0 f28-0)) + (until (or (and (< f26-0 f0-2) (>= f0-2 0.0)) (< (the float (+ (-> self path curve num-cverts) -1)) f28-0)) + (set! f0-2 (distance-from-tangent (-> self path) f28-0 s4-0 s5-0 gp-0 arg0)) + (when (or (>= f26-0 f0-2) (< f26-0 0.0)) + (set! f26-0 f0-2) + (set! f30-0 f28-0) + ) + (set! f28-0 (+ 0.01 f28-0)) + ) + (distance-from-tangent (-> self path) f30-0 s4-0 s5-0 gp-0 arg0) + (set! (-> self trans quad) (-> s4-0 quad)) + (set! (-> self rot quad) (-> s5-0 quad)) + (set! (-> self side quad) (-> gp-0 quad)) + (set! (-> self pos) f30-0) + ) + ) + (-> self pos) + ) + +;; failed to figure out what this is: +(defstate slide-control-watch (slide-control) + :virtual #t + :enter + (behavior () + (eval-path-curve-div! (-> self path) (-> self trans) 0.2 'interp) + (eval-path-curve-div! (-> self path) (-> self root trans) 0.2 'interp) + (TODO-RENAME-12 (-> self path) (-> self rot) 0.2) + (set! (-> self pos) 0.2) + (none) + ) + :trans + (behavior () + (if (and + (and *target* (>= 81920.0 (vector-vector-distance (-> self root trans) (-> *target* control trans)))) + (and + (< 0.0 (vector-dot + (vector-! (new 'stack-no-clear 'vector) (-> *target* control trans) (-> self trans)) + (-> self rot) + ) + ) + (send-event *target* 'change-mode 'tube self) + ) + ) + (go-virtual slide-control-ride) + ) + (none) + ) + :code + (the-as (function none :behavior slide-control) anim-loop) + ) + +;; failed to figure out what this is: +(defstate slide-control-ride (slide-control) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('end-mode) + (go-virtual slide-control-watch) + ) + (('update) + (let* ((s4-0 arg0) + (gp-0 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) process-drawable)) + s4-0 + ) + ) + ) + (if gp-0 + (find-target-point (-> (the-as process-drawable gp-0) root trans)) + ) + (set! (-> (the-as vector (-> arg3 param 0)) quad) (-> self trans quad)) + (set! (-> (the-as vector (-> arg3 param 1)) quad) (-> self rot quad)) + (set! (-> (the-as vector (-> arg3 param 2)) quad) (-> self side quad)) + (eval-path-curve-div! (-> self path) (the-as vector (-> arg3 param 3)) (+ 0.2 (-> self pos)) 'interp) + (if (>= (-> self pos) (+ -0.2 (the float (+ (-> self path curve num-cverts) -1)))) + (send-event gp-0 'end-mode) + ) + ) + (-> self pos) + ) + ) + ) + :enter + (behavior () + (set! (-> self pos) 0.0) + (set! (-> self target) (process->handle *target*)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (none) + ) + :trans + (behavior () + (let ((gp-0 (handle->process (-> self target)))) + (cond + ((if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) + gp-0 + ) + ) + (else + (go-virtual slide-control-watch) + ) + ) + ) + (none) + ) + :code + (the-as (function none :behavior slide-control) anim-loop) + ) + +;; definition for method 11 of type slide-control +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! slide-control ((obj slide-control) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (logclear! (-> obj mask) (process-mask actor-pause)) + (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 target) (the-as handle #f)) + (go (method-of-object obj slide-control-watch)) + (none) + ) diff --git a/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc b/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc index f97028cb2..8ec326e98 100644 --- a/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc +++ b/test/decompiler/reference/levels/swamp/swamp-rat-nest_REF.gc @@ -1387,32 +1387,21 @@ swamp-rat-nest-default-event-handler (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)) (let ((s5-1 (res-lump-value arg0 'num-lurkers uint128 :default (the-as uint128 3)))) - (let* ((a0-8 *game-info*) (t9-5 (method-of-object a0-8 get-health-percent-lost))) (if (>= (t9-5 a0-8) 0.5) - (+! s5-1 -1) - ) - ) + (if (>= (get-health-percent-lost *game-info* #f) 0.5) + (+! s5-1 -1) + ) (set! (-> obj rat-count) (max 1 (min 4 (the-as int s5-1)))) ) (set! (-> obj defensive-rat-count) 2) - (let* ((a0-11 *game-info*) - (t9-6 (method-of-object a0-11 get-health-percent-lost)) - ) - (if (>= (t9-6 a0-11) 0.75) - (+! (-> obj defensive-rat-count) -1) - ) - ) + (if (>= (get-health-percent-lost *game-info* #f) 0.75) + (+! (-> obj defensive-rat-count) -1) + ) (set! (-> obj dummy) (the-as (pointer swamp-rat-nest-dummy) #f)) (set! (-> obj dummy-type) 0) (set! (-> obj hit-points) 0) (set! (-> obj damaged) #f) (set! (-> obj spawn-period) (* 1200.0 (rand-vu-float-range 0.9 1.1))) - (let* ((f30-1 1.0) - (f28-0 2.0) - (a0-13 *game-info*) - (t9-8 (method-of-object a0-13 get-health-percent-lost)) - ) - (set! (-> obj spawn-period-scale) (+ f30-1 (* f28-0 (t9-8 a0-13)))) - ) + (set! (-> obj spawn-period-scale) (+ 1.0 (* 2.0 (get-health-percent-lost *game-info* #f)))) (set! (-> obj test-interval) (the-as uint (rand-vu-int-range 30 60))) (go swamp-rat-nest-idle) (none) diff --git a/test/offline/config.jsonc b/test/offline/config.jsonc index e12a54b09..9b93b41d0 100644 --- a/test/offline/config.jsonc +++ b/test/offline/config.jsonc @@ -214,6 +214,9 @@ ], "orbit-plat-rotating": [ "code" + ], + "slide-control-ride": [ + "exit" // asm code ] } }