From 89980bd61d05b44215d0296a9c698c904dbedee8 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Sat, 18 Dec 2021 01:32:46 -0500 Subject: [PATCH] decomp: finish `mother-spider` (#1014) * decomp: finish `mother-spider` * address feedback --- decompiler/config/all-types.gc | 56 +- .../stack_structures.jsonc | 8 +- .../jak1_ntsc_black_label/type_casts.jsonc | 13 + goal_src/engine/game/collectables.gc | 5511 +++++++---------- goal_src/engine/game/fact-h.gc | 2 +- goal_src/engine/nav/navigate-h.gc | 6 +- goal_src/levels/common/nav-enemy.gc | 3671 +++++------ goal_src/levels/common/sharkey.gc | 1516 ++--- goal_src/levels/maincave/mother-spider-egg.gc | 8 + goal_src/levels/maincave/mother-spider-h.gc | 18 + goal_src/levels/maincave/mother-spider.gc | 2106 +++++++ goal_src/levels/sunken/bully.gc | 30 +- .../reference/engine/game/fact-h_REF.gc | 2 +- .../reference/engine/nav/navigate-h_REF.gc | 6 +- .../reference/levels/common/nav-enemy_REF.gc | 1 + .../reference/levels/common/sharkey_REF.gc | 2 +- .../levels/maincave/mother-spider-egg_REF.gc | 8 + .../levels/maincave/mother-spider-h_REF.gc | 18 + .../levels/maincave/mother-spider_REF.gc | 2155 +++++++ .../reference/levels/sunken/bully_REF.gc | 30 +- .../reference/levels/sunken/puffer_REF.gc | 2 +- 21 files changed, 8590 insertions(+), 6579 deletions(-) create mode 100644 test/decompiler/reference/levels/maincave/mother-spider_REF.gc diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 9fcbeede98..0ad6e20c0d 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -10145,7 +10145,7 @@ :flag-assert #xc00000028 (:methods (new (symbol type process-drawable pickup-type float) _type_ 0) - (drop-pickup (_type_ symbol process-tree fact-info int) none 9) + (drop-pickup (_type_ symbol process-tree fact-info int) (pointer process) 9) (reset! (_type_ symbol) none 10) (pickup-collectable! (_type_ pickup-type float handle) float 11) ) @@ -11284,7 +11284,7 @@ (pat-ignore-mask pat-surface :offset-assert 148) (event-self basic :offset-assert 152) (event-other basic :offset-assert 156) - (root-prim collide-shape-prim :offset-assert 160) + (root-prim collide-shape-prim :offset-assert 160) ;; i think this can be any subtype of collide-shape-prim as well! (riders collide-sticky-rider-group :offset-assert 164) (backup-collide-as uint64 :offset-assert 168) (backup-collide-with uint64 :offset-assert 176) @@ -15274,11 +15274,11 @@ (set-current-poly! (_type_ nav-poly) none 14) (set-target-pos! (_type_ vector) none 15) (dummy-16 (_type_ vector) nav-poly 16) ; see - nav-enemy-test-point-in-nav-mesh? - (dummy-17 () none 17) + (dummy-17 (_type_ vector vector) none 17) (TODO-RENAME-18 (_type_ vector) nav-poly 18) (dummy-19 (_type_ vector collide-shape-moving vector float) none 19) (dummy-20 () none 20) - (dummy-21 () none 21) + (dummy-21 (_type_ vector) none 21) (dummy-22 () none 22) (dummy-23 (_type_ vector check-vector-collision-with-nav-spheres-info) float 23) ;; TODO - unconfirmed (dummy-24 (_type_ float clip-travel-vector-to-mesh-return-info) none 24) @@ -15292,7 +15292,7 @@ (dummy-32 () none 32) (dummy-33 () none 33) (dummy-34 () none 34) - (dummy-35 () none 35) + (dummy-35 (_type_ vector vector vector vector float) none 35) ) ) @@ -32261,6 +32261,8 @@ :size-assert #xf0 :heap-base #x80 :flag-assert #x14008000f0 + (:states + (mother-spider-leg-flying)) ) (deftype mother-spider-thread (structure) @@ -32363,9 +32365,22 @@ (spawn-child (_type_ vector vector symbol) int 30) (is-player-stuck? (_type_) symbol 31) ) + (:states + (mother-spider-die-wait-for-children) + (mother-spider-idle) + (mother-spider-hit-while-birthing) + (mother-spider-birthing) + (mother-spider-traveling uint) + (mother-spider-birth-baby) + (mother-spider-tracking) + (mother-spider-hit-while-tracking) + (mother-spider-spit) + (mother-spider-stop-traveling) + (mother-spider-die-from-uppercut) + (mother-spider-die) + (wait-for-children)) ) - ;; ---------------------- ;; File - mother-spider-egg ;; Source Path - levels/maincave/mother-spider-egg.gc @@ -32394,6 +32409,13 @@ (dummy-20 (_type_) none 20) (draw-egg-shadow (_type_ vector symbol) symbol 21) ) + (:states + (mother-spider-egg-falling) + (mother-spider-egg-die-exit) + (mother-spider-egg-hatch) + (mother-spider-egg-die) + (mother-spider-egg-on-ground) + (mother-spider-egg-die-while-falling)) ) ;; - Functions @@ -32404,12 +32426,6 @@ (define-extern *mother-spider-egg-unbroken-sg* skeleton-group) (define-extern *mother-spider-egg-broken-sg* skeleton-group) -(define-extern mother-spider-egg-falling (state mother-spider-egg)) ;; unknown type -(define-extern mother-spider-egg-die-exit (state mother-spider-egg)) ;; unknown type -(define-extern mother-spider-egg-hatch (state mother-spider-egg)) ;; unknown type -(define-extern mother-spider-egg-die (state mother-spider-egg)) ;; unknown type -(define-extern mother-spider-egg-on-ground (state mother-spider-egg)) ;; unknown type -(define-extern mother-spider-egg-die-while-falling (state mother-spider-egg)) ;; unknown type ;; ---------------------- @@ -32452,23 +32468,9 @@ ;; - Unknowns (define-extern *mother-spider-sg* skeleton-group) -(define-extern mother-spider-die-wait-for-children (state mother-spider)) ;; unknown type -(define-extern mother-spider-idle (state mother-spider)) ;; unknown type (define-extern *mother-spider-threads* (inline-array mother-spider-thread)) ;; unknown type (define-extern *mother-spider-leg-infos* (inline-array mother-spider-leg-info)) ;; unknown type -(define-extern mother-spider-hit-while-birthing (state mother-spider)) ;; unknown type -(define-extern mother-spider-birthing (state mother-spider)) ;; unknown type -(define-extern mother-spider-traveling (state uint mother-spider)) ;; unknown type -(define-extern mother-spider-birth-baby (state mother-spider)) ;; unknown type -(define-extern mother-spider-tracking (state mother-spider)) ;; unknown type -(define-extern mother-spider-hit-while-tracking (state mother-spider)) ;; unknown type -(define-extern mother-spider-spit (state mother-spider)) ;; unknown type -(define-extern mother-spider-stop-traveling (state mother-spider)) ;; unknown type -(define-extern mother-spider-die-from-uppercut (state mother-spider)) ;; unknown type -(define-extern mother-spider-die (state mother-spider)) ;; unknown type (define-extern *mother-spider-leg-sg* skeleton-group) -(define-extern mother-spider-leg-flying (state mother-spider-leg)) ;; unknown type -(define-extern wait-for-children (state mother-spider)) ;; unknown type ;; ---------------------- @@ -33542,7 +33544,7 @@ :heap-base #x40 :flag-assert #x14004000b0 (:states - (bully-broken-cage-explode bully-broken-cage) + (bully-broken-cage-explode) ) ) diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index 56781f45f8..8f353d83e2 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -5740,12 +5740,12 @@ ], "(trans mother-spider-leg-flying)": [ - [16, "collide-mesh-cache-tri"], + [16, "collide-tri-result"], [112, "vector"] ], "(method 24 mother-spider)": [ - [16, "collide-mesh-cache-tri"], + [16, "collide-tri-result"], [112, "vector"], [128, "vector"] ], @@ -5753,9 +5753,9 @@ "(method 20 mother-spider)": [ [16, "vector"], [32, "vector"], - [48, "collide-mesh-cache-tri"], + [48, "collide-tri-result"], [144, "vector"], - [160, "collide-mesh-cache-tri"] + [160, "collide-tri-result"] ], "mother-spider-default-event-handler": [ diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index b5e6bf7cdc..b5fa35f227 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -7004,5 +7004,18 @@ [367, "v0", "(pointer float)"] ], + "mother-spider-full-joint-callback": [ + [[10, 48], "v1", "mother-spider-thread"] + ], + + "(method 11 mother-spider)": [ + ["_stack_", 16, "res-tag"], + [[500, 525], "v0", "(pointer float)"] + ], + + "(method 21 mother-spider)": [ + [179, "s3", "collide-shape-prim-group"] + ], + "placeholder-do-not-add-below": [] } diff --git a/goal_src/engine/game/collectables.gc b/goal_src/engine/game/collectables.gc index 943dd5f6d1..03c64dafac 100644 --- a/goal_src/engine/game/collectables.gc +++ b/goal_src/engine/game/collectables.gc @@ -53,60 +53,47 @@ ) -(defmethod - initialize-params - collectable - ((obj collectable) (arg0 int) (arg1 float)) +(defmethod initialize-params collectable ((obj collectable) (arg0 int) (arg1 float)) (logclear! (-> obj mask) (process-mask crate enemy platform ambient)) (set! (-> obj mask) (logior (process-mask collectable) (-> obj mask))) (set! (-> obj flags) (collectable-flags can-collect ignore-blue)) (set! (-> obj bob-amount) arg1) - (set! - (-> obj bob-offset) - (+ - (the-as int (-> obj root-override trans x)) - (the-as int (-> obj root-override trans y)) - (the-as int (-> obj root-override trans z)) - ) - ) + (set! (-> obj bob-offset) (+ (the-as int (-> obj root-override trans x)) + (the-as int (-> obj root-override trans y)) + (the-as int (-> obj root-override trans z)) + ) + ) (cond - ((or - (= (vector-length (-> obj root-override transv)) 0.0) - (logtest? (-> obj fact options) (fact-options fop6)) + ((or + (= (vector-length (-> obj root-override transv)) 0.0) + (logtest? (-> obj fact options) (fact-options fop6)) + ) + (vector-reset! (-> obj root-override transv)) ) - (vector-reset! (-> obj root-override transv)) + (else + (logior! (-> obj flags) (collectable-flags trans)) + (logclear! (-> obj flags) (collectable-flags can-collect)) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj bob-amount) 0.0) + ) ) - (else - (logior! (-> obj flags) (collectable-flags trans)) - (logclear! (-> obj flags) (collectable-flags can-collect)) - (logclear! (-> obj mask) (process-mask actor-pause)) - (set! (-> obj bob-amount) 0.0) - ) - ) (when (and (> arg0 0) #t) - (logior! (-> obj flags) (collectable-flags fade)) - (set! (-> obj fadeout-timeout) arg0) - ) + (logior! (-> obj flags) (collectable-flags fade)) + (set! (-> obj fadeout-timeout) arg0) + ) (set! (-> obj collect-timeout) 99) (set! (-> obj birth-time) (-> *display* base-frame-counter)) (set! (-> obj base quad) (-> obj root-override trans quad)) (set! (-> obj old-base quad) (-> obj root-override trans quad)) (set! (-> obj pickup-handle) (the-as handle #f)) - (case (-> obj fact pickup-type) - (((pickup-type eco-pill) - (pickup-type eco-green) - (pickup-type money) - (pickup-type eco-blue) - ) + (case (-> obj fact pickup-type) + (((pickup-type eco-pill) (pickup-type eco-green) (pickup-type money) (pickup-type eco-blue)) (logclear! (-> obj flags) (collectable-flags ignore-blue)) ) - ) - (if (logtest? (-> obj fact options) (fact-options large)) - (set! - (-> obj root-override root-prim local-sphere w) - (* 2.5 (-> obj root-override root-prim local-sphere w)) ) - ) + (if (logtest? (-> obj fact options) (fact-options large)) + (set! (-> obj root-override root-prim local-sphere w) (* 2.5 (-> obj root-override root-prim local-sphere w))) + ) (none) ) @@ -146,193 +133,153 @@ (logior! (-> obj mask) (process-mask actor-pause)) (set! (-> obj actor-pause) #t) (set! (-> obj notify-parent) #f) - (let - ((s5-0 - (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) - ) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set-vector! (-> s4-0 local-sphere) 0.0 3276.8 0.0 3276.8) + (set-root-prim! s5-0 (the-as collide-shape-prim-group 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 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s5-0 reaction) default-collision-reaction) - (set! - (-> s5-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) - (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) - (set! (-> s4-0 collide-with) (the-as uint 16)) - (set-vector! (-> s4-0 local-sphere) 0.0 3276.8 0.0 3276.8) - (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! - (-> obj fact) - (new 'process 'fact-info obj (-> obj pickup-type) (-> obj pickup-amount)) - ) + (set! (-> obj fact) (new 'process 'fact-info obj (-> obj pickup-type) (-> obj pickup-amount))) (if (logtest? (fact-options respawn) (-> obj fact options)) - (set! (-> obj respawn-delay) (-> obj fact fade-time)) - ) + (set! (-> obj respawn-delay) (-> obj fact fade-time)) + ) obj ) -(defmethod - get-pickup-sound - eco-collectable - ((obj eco-collectable) (arg0 pickup-type)) +(defmethod get-pickup-sound eco-collectable ((obj eco-collectable) (arg0 pickup-type)) (set! (-> obj fact pickup-type) arg0) - (case (-> obj fact pickup-type) - (((pickup-type eco-blue) - (pickup-type eco-red) - (pickup-type eco-green) - (pickup-type eco-yellow) - ) + (case (-> obj fact pickup-type) + (((pickup-type eco-blue) (pickup-type eco-red) (pickup-type eco-green) (pickup-type eco-yellow)) (logclear! (-> obj mask) (process-mask actor-pause)) ) - ) + ) (set! (-> obj sound-name) #f) - (case arg0 - (((pickup-type eco-yellow)) + (case arg0 + (((pickup-type eco-yellow)) (set! (-> obj eco-effect) (-> *part-group-id-table* 56)) (set! (-> obj collect-effect) (-> *part-group-id-table* 68)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 57)) (set! (-> obj collect-effect-time) 150) - (set! - (-> obj sound-name) - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "yel-eco-idle") - :volume #x400 - :fo-max 15 - ) - ) + (set! (-> obj sound-name) (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "yel-eco-idle") + :volume #x400 + :fo-max 15 + ) + ) ) - (((pickup-type eco-red)) - (set! (-> obj eco-effect) (-> *part-group-id-table* 48)) - (set! (-> obj collect-effect) (-> *part-group-id-table* 69)) - (set! (-> obj collect-effect2) (-> *part-group-id-table* 49)) - (set! (-> obj collect-effect-time) 150) - (set! - (-> obj sound-name) - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "red-eco-idle") - :volume #x400 - :fo-max 15 - ) + (((pickup-type eco-red)) + (set! (-> obj eco-effect) (-> *part-group-id-table* 48)) + (set! (-> obj collect-effect) (-> *part-group-id-table* 69)) + (set! (-> obj collect-effect2) (-> *part-group-id-table* 49)) + (set! (-> obj collect-effect-time) 150) + (set! (-> obj sound-name) (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "red-eco-idle") + :volume #x400 + :fo-max 15 + ) + ) + ) + (((pickup-type eco-blue)) + (set! (-> obj eco-effect) (-> *part-group-id-table* 42)) + (set! (-> obj collect-effect) (-> *part-group-id-table* 67)) + (set! (-> obj collect-effect2) (-> *part-group-id-table* 43)) + (set! (-> obj collect-effect-time) 150) + (set! (-> obj sound-name) (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "blue-eco-idle") + :volume #x400 + :fo-max 15 + ) + ) + ) + (((pickup-type eco-green)) + (set! (-> obj eco-effect) (-> *part-group-id-table* 58)) + (set! (-> obj collect-effect) (-> *part-group-id-table* 66)) + (set! (-> obj collect-effect2) (-> *part-group-id-table* 61)) + (set! (-> obj collect-effect-time) 150) + (set! (-> obj sound-name) (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "green-eco-idle") + :volume #x400 + :fo-max 15 + ) + ) + ) + (((pickup-type eco-pill)) + (set! (-> obj eco-effect) (-> *part-group-id-table* 59)) + (set! (-> obj collect-effect2) (-> *part-group-id-table* 60)) + (set! (-> obj collect-effect-time) 150) ) ) - (((pickup-type eco-blue)) - (set! (-> obj eco-effect) (-> *part-group-id-table* 42)) - (set! (-> obj collect-effect) (-> *part-group-id-table* 67)) - (set! (-> obj collect-effect2) (-> *part-group-id-table* 43)) - (set! (-> obj collect-effect-time) 150) - (set! - (-> obj sound-name) - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "blue-eco-idle") - :volume #x400 - :fo-max 15 - ) - ) - ) - (((pickup-type eco-green)) - (set! (-> obj eco-effect) (-> *part-group-id-table* 58)) - (set! (-> obj collect-effect) (-> *part-group-id-table* 66)) - (set! (-> obj collect-effect2) (-> *part-group-id-table* 61)) - (set! (-> obj collect-effect-time) 150) - (set! - (-> obj sound-name) - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "green-eco-idle") - :volume #x400 - :fo-max 15 - ) - ) - ) - (((pickup-type eco-pill)) - (set! (-> obj eco-effect) (-> *part-group-id-table* 59)) - (set! (-> obj collect-effect2) (-> *part-group-id-table* 60)) - (set! (-> obj collect-effect-time) 150) - ) - ) (set! (-> obj part) (create-launch-control (-> obj eco-effect) obj)) (when (-> obj sound-name) - (let - ((v0-1 - (new - 'process - 'ambient-sound - (-> obj sound-name) - (-> obj root-override trans) - ) + (let ((v0-1 (new 'process 'ambient-sound (-> obj sound-name) (-> obj root-override trans)))) + (set! (-> obj sound) v0-1) + v0-1 ) - ) - (set! (-> obj sound) v0-1) - v0-1 ) - ) ) -(defbehavior - initialize-eco-by-other eco - ((arg0 vector) (arg1 vector) (arg2 fact-info)) +(defbehavior initialize-eco-by-other eco ((arg0 vector) (arg1 vector) (arg2 fact-info)) (let ((s3-0 (-> arg2 pickup-type)) (f30-0 (-> arg2 pickup-spawn-amount)) ) - (set! (-> self pickup-amount) f30-0) - (set! (-> self pickup-type) s3-0) - (initialize self) - (set! (-> self fact pickup-type) s3-0) - (set! (-> self fact pickup-amount) f30-0) - ) + (set! (-> self pickup-amount) f30-0) + (set! (-> self pickup-type) s3-0) + (initialize self) + (set! (-> self fact pickup-type) s3-0) + (set! (-> self fact pickup-amount) f30-0) + ) (set! (-> self fact options) (-> arg2 options)) (set! (-> self root-override trans quad) (-> arg0 quad)) (set! (-> self root-override transv quad) (-> arg1 quad)) (get-pickup-sound self (-> self fact pickup-type)) (set! (-> self notify-parent) #f) - (case (-> self fact pickup-type) - (((pickup-type eco-blue) (pickup-type eco-yellow) (pickup-type eco-red)) + (case (-> self fact pickup-type) + (((pickup-type eco-blue) (pickup-type eco-yellow) (pickup-type eco-red)) (initialize-params - self - (if (and arg2 (logtest? (-> arg2 options) (fact-options fade))) - (-> arg2 fade-time) - 0 + self + (if (and arg2 (logtest? (-> arg2 options) (fact-options fade))) + (-> arg2 fade-time) + 0 + ) + (the-as float 1024.0) ) - (the-as float 1024.0) - ) ) - (else - (initialize-params self 4500 (the-as float 1024.0)) + (else + (initialize-params self 4500 (the-as float 1024.0)) + ) ) - ) (dummy-47 (-> self root-override)) (set! (-> self event-hook) (-> (method-of-object self wait) event)) (if (logtest? (fact-options eco-blocked) (-> self fact options)) - (go-virtual blocked) - ) + (go-virtual blocked) + ) (go-virtual wait) (none) ) -(defmethod - initialize-eco - eco-collectable - ((obj eco-collectable) (arg0 entity-actor) (arg1 pickup-type) (arg2 float)) +(defmethod initialize-eco eco-collectable ((obj eco-collectable) (arg0 entity-actor) (arg1 pickup-type) (arg2 float)) (set! (-> obj pickup-amount) arg2) (set! (-> obj pickup-type) arg1) (initialize obj) @@ -341,8 +288,8 @@ (initialize-params obj 0 (the-as float 1024.0)) (dummy-47 (-> obj root-override)) (if (logtest? (fact-options eco-blocked) (-> obj fact options)) - (go (method-of-object obj blocked)) - ) + (go (method-of-object obj blocked)) + ) (go (method-of-object obj wait)) ) @@ -353,189 +300,124 @@ (defun add-blue-shake ((arg0 vector) (arg1 vector) (arg2 vector)) (let* ((f0-0 (vector-vector-distance arg1 arg2)) - (f30-0 - (lerp-scale - (the-as float 409.6) - (the-as float 0.0) - f0-0 - (-> *FACT-bank* suck-suck-dist) - (-> *FACT-bank* suck-bounce-dist) - ) - ) + (f30-0 (lerp-scale + (the-as float 409.6) + (the-as float 0.0) + f0-0 + (-> *FACT-bank* suck-suck-dist) + (-> *FACT-bank* suck-bounce-dist) + ) + ) ) - (+! (-> arg0 x) (rand-vu-float-range (- f30-0) f30-0)) - (+! (-> arg0 y) (rand-vu-float-range (- f30-0) f30-0)) - (+! (-> arg0 z) (rand-vu-float-range (- f30-0) f30-0)) - ) + (+! (-> arg0 x) (rand-vu-float-range (- f30-0) f30-0)) + (+! (-> arg0 y) (rand-vu-float-range (- f30-0) f30-0)) + (+! (-> arg0 z) (rand-vu-float-range (- f30-0) f30-0)) + ) arg0 ) (defbehavior check-blue-suck eco-collectable ((arg0 process-drawable)) - (let - ((v1-1 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) - arg0 - ) - ) - ) - (when v1-1 - (let* ((gp-1 (-> v1-1 root)) - (v1-3 - (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) collide-shape)) - gp-1 - ) - ) - ) - (when v1-3 - (let ((a0-5 (-> self root-override root-prim prim-core)) - (a1-2 (-> (the-as collide-shape v1-3) root-prim prim-core)) - ) - (if - (< - (vector-vector-distance (the-as vector a0-5) (the-as vector a1-2)) - (-> *FACT-bank* suck-suck-dist) - ) - (logior! (-> self flags) (collectable-flags suck)) + (let ((v1-1 (if (and (nonzero? arg0) (type-type? (-> arg0 type) process-drawable)) + arg0 + ) + ) + ) + (when v1-1 + (let* ((gp-1 (-> v1-1 root)) + (v1-3 (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) collide-shape)) + gp-1 + ) + ) + ) + (when v1-3 + (let ((a0-5 (-> self root-override root-prim prim-core)) + (a1-2 (-> (the-as collide-shape v1-3) root-prim prim-core)) + ) + (if (< (vector-vector-distance (the-as vector a0-5) (the-as vector a1-2)) (-> *FACT-bank* suck-suck-dist)) + (logior! (-> self flags) (collectable-flags suck)) + ) + ) + ) ) - ) ) - ) ) - ) (none) ) -(defbehavior - add-blue-motion eco-collectable - ((arg0 symbol) (arg1 symbol) (arg2 symbol) (arg3 symbol)) +(defbehavior add-blue-motion eco-collectable ((arg0 symbol) (arg1 symbol) (arg2 symbol) (arg3 symbol)) (let* ((gp-0 (handle->process (-> self target))) - (v1-4 - (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) - gp-0 - ) - ) - ) - (when v1-4 - (let* ((gp-1 (-> (the-as process-drawable v1-4) root)) - (v1-6 - (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) collide-shape)) - (the-as collide-shape gp-1) - ) - ) - ) - (when v1-6 - (let ((s2-0 (-> self root-override root-prim prim-core)) - (gp-2 (-> v1-6 root-prim prim-core)) - ) - (if (and arg1 (rand-vu-percent? (the-as float 0.25))) - (eco-blue-glow (the-as vector s2-0)) - ) - (let - ((f0-0 - (vector-vector-distance (the-as vector s2-0) (the-as vector gp-2)) - ) - ) - (cond - ((and arg3 (< f0-0 8192.0)) - (return #t) - ) - ((begin - (set! - arg0 - (and - (or - (not arg2) - (or - (< f0-0 (-> *FACT-bank* suck-suck-dist)) - (logtest? (-> self flags) (collectable-flags suck)) + (v1-4 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) + gp-0 + ) ) - ) - arg0 + ) + (when v1-4 + (let* ((gp-1 (-> (the-as process-drawable v1-4) root)) + (v1-6 (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) collide-shape)) + (the-as collide-shape gp-1) + ) + ) ) - ) - arg0 - ) - (logior! (-> self flags) (collectable-flags suck)) - (if (= (-> self speed w) 0.0) - (set! (-> self suck-time) (-> *display* base-frame-counter)) - ) - (+! (-> self speed w) (* 163840.0 (-> *display* seconds-per-frame))) - (+! (-> self speed y) (* 291271.12 (-> *display* seconds-per-frame))) - (set! - (-> self speed y) - (fmin (fmin 291271.12 (-> self speed y)) (-> self speed y)) - ) - (let - ((s5-2 - (vector-! - (new 'stack-no-clear 'vector) - (-> self base) - (the-as vector gp-2) - ) - ) - ) - (vector-normalize! - s5-2 - (fmax - 0.0 - (- - (vector-length s5-2) - (* (-> self speed w) (-> *display* seconds-per-frame)) - ) - ) - ) - (vector-rotate-y! - s5-2 - s5-2 - (* - (-> self speed y) - (-> self speed z) - (-> *display* seconds-per-frame) - ) - ) - (set! - (-> self suck-y-offset) - (* - 2048.0 - (sin - (* - 873.81335 - (the - float - (mod - (- (-> *display* base-frame-counter) (-> self suck-time)) - 75 - ) + (when v1-6 + (let ((s2-0 (-> self root-override root-prim prim-core)) + (gp-2 (-> v1-6 root-prim prim-core)) + ) + (if (and arg1 (rand-vu-percent? (the-as float 0.25))) + (eco-blue-glow (the-as vector s2-0)) + ) + (let ((f0-0 (vector-vector-distance (the-as vector s2-0) (the-as vector gp-2)))) + (cond + ((and arg3 (< f0-0 8192.0)) + (return #t) + ) + ((begin + (set! arg0 + (and + (or + (not arg2) + (or (< f0-0 (-> *FACT-bank* suck-suck-dist)) (logtest? (-> self flags) (collectable-flags suck))) + ) + arg0 + ) + ) + arg0 + ) + (logior! (-> self flags) (collectable-flags suck)) + (if (= (-> self speed w) 0.0) + (set! (-> self suck-time) (-> *display* base-frame-counter)) + ) + (+! (-> self speed w) (* 163840.0 (-> *display* seconds-per-frame))) + (+! (-> self speed y) (* 291271.12 (-> *display* seconds-per-frame))) + (set! (-> self speed y) (fmin (fmin 291271.12 (-> self speed y)) (-> self speed y))) + (let ((s5-2 (vector-! (new 'stack-no-clear 'vector) (-> self base) (the-as vector gp-2)))) + (vector-normalize! + s5-2 + (fmax 0.0 (- (vector-length s5-2) (* (-> self speed w) (-> *display* seconds-per-frame)))) + ) + (vector-rotate-y! s5-2 s5-2 (* (-> self speed y) (-> self speed z) (-> *display* seconds-per-frame))) + (set! (-> self suck-y-offset) + (* 2048.0 (sin (* 873.81335 (the float (mod (- (-> *display* base-frame-counter) (-> self suck-time)) 75))))) + ) + (vector+! (-> self base) (the-as vector gp-2) s5-2) + ) + ) + ((and arg2 (and + (< (+ 4096.0 (-> *FACT-bank* suck-bounce-dist)) f0-0) + (zero? (logand (-> self flags) (collectable-flags suck))) + ) + ) + (go-virtual wait) + ) + (arg1 + (add-blue-shake (-> self root-override trans) (the-as vector s2-0) (the-as vector gp-2)) + ) ) - ) ) - ) ) - (vector+! (-> self base) (the-as vector gp-2) s5-2) - ) ) - ((and - arg2 - (and - (< (+ 4096.0 (-> *FACT-bank* suck-bounce-dist)) f0-0) - (zero? (logand (-> self flags) (collectable-flags suck))) - ) - ) - (go-virtual wait) - ) - (arg1 - (add-blue-shake - (-> self root-override trans) - (the-as vector s2-0) - (the-as vector gp-2) - ) - ) - ) ) - ) ) - ) ) - ) #f ) @@ -543,11 +425,11 @@ :virtual #t :trans (behavior () - (if (task-complete? *game-info* (-> self entity extra perm task)) - (go-virtual wait) + (if (task-complete? *game-info* (-> self entity extra perm task)) + (go-virtual wait) + ) + (none) ) - (none) - ) :code (the-as (function none :behavior eco-collectable) anim-loop) ) @@ -556,687 +438,499 @@ :virtual #t :code (behavior () - (if (type-type? (-> self type) fuel-cell) - (sound-play-by-name - (static-sound-name "cell-prize") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (let ((gp-1 (new 'stack 'trajectory))) - (set! (-> self base y) (-> self jump-pos y)) - (setup-from-to-duration! - gp-1 - (-> self root-override trans) - (-> self jump-pos) - (the-as float 300.0) - (the-as float -2.2755556) - ) - (set! (-> self state-time) (-> *display* base-frame-counter)) - (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) - (let - ((f0-2 - (the float (- (-> *display* base-frame-counter) (-> self state-time))) + (if (type-type? (-> self type) fuel-cell) + (sound-play-by-name (static-sound-name "cell-prize") (new-sound-id) 1024 0 0 1 #t) ) - ) - (eval-position! gp-1 f0-2 (-> self root-override trans)) - ) - (transform-post) - (animate self) - (suspend) - (when (nonzero? (-> self skel)) - (let ((a0-10 (-> self skel root-channel 0))) - (set! (-> a0-10 param 0) 0.5) - (joint-control-channel-group-eval! - a0-10 - (the-as art-joint-anim #f) - num-func-loop! + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((gp-1 (new 'stack 'trajectory))) + (set! (-> self base y) (-> self jump-pos y)) + (setup-from-to-duration! + gp-1 + (-> self root-override trans) + (-> self jump-pos) + (the-as float 300.0) + (the-as float -2.2755556) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (let ((f0-2 (the float (- (-> *display* base-frame-counter) (-> self state-time))))) + (eval-position! gp-1 f0-2 (-> self root-override trans)) + ) + (transform-post) + (animate self) + (suspend) + (when (nonzero? (-> self skel)) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) 0.5) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-loop!) + ) + ) ) - ) ) - ) + (set! (-> self root-override trans quad) (-> self jump-pos quad)) + (set! (-> self base quad) (-> self root-override trans quad)) + (vector-reset! (-> self root-override transv)) + (dummy-47 (-> self root-override)) + (logclear! (-> self flags) (collectable-flags trans)) + (logior! (-> self flags) (collectable-flags can-collect)) + (if (-> self actor-pause) + (logior! (-> self mask) (process-mask actor-pause)) + ) + (go-virtual wait) + (none) ) - (set! (-> self root-override trans quad) (-> self jump-pos quad)) - (set! (-> self base quad) (-> self root-override trans quad)) - (vector-reset! (-> self root-override transv)) - (dummy-47 (-> self root-override)) - (logclear! (-> self flags) (collectable-flags trans)) - (logior! (-> self flags) (collectable-flags can-collect)) - (if (-> self actor-pause) - (logior! (-> self mask) (process-mask actor-pause)) - ) - (go-virtual wait) - (none) - ) ) (defstate wait (eco-collectable) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (local-vars (v0-3 none)) - (when - (and - (or (= arg2 'touch) (= arg2 'attack)) - (and - (logtest? (-> self flags) (collectable-flags can-collect)) - (>= - (- (-> *display* base-frame-counter) (-> self birth-time)) - (-> self collect-timeout) - ) - (!= (-> self next-state name) 'pickup) - (send-event - arg0 - 'get-pickup - (-> self fact pickup-type) - (-> self fact pickup-amount) - ) + (local-vars (v0-3 none)) + (when (and + (or (= arg2 'touch) (= arg2 'attack)) + (and + (logtest? (-> self flags) (collectable-flags can-collect)) + (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) + (!= (-> self next-state name) 'pickup) + (send-event arg0 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) + ) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (go-virtual pickup #f (process->handle arg0)) + ) + (the-as + object + (cond + ((= arg2 'eco-blue) + (when (and + (zero? (logand (-> self flags) (collectable-flags fading ignore-blue))) + (!= (-> self next-state name) 'pickup) + (begin (check-blue-suck (the-as process-drawable arg0)) #t) + (logtest? (-> self flags) (collectable-flags can-collect)) + (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (go-virtual notice-blue (process->handle arg0)) + ) + ) + ((= arg2 'trans) + (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (dummy-47 (-> self root-override)) + (ja-post) + ) + ((= arg2 'jump) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self jump-pos quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (go-virtual jump) + ) + ((= arg2 'pickup) + (when (!= (-> self next-state name) 'pickup) + (if (and (> arg1 0) (-> arg3 param 0)) + (TODO-RENAME-30 (-> self root-override) (the-as vector (-> arg3 param 0))) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (go-virtual pickup #f (the-as handle #f)) + ) + ) + ((= arg2 'die) + (logclear! (-> self mask) (process-mask actor-pause)) + (go-virtual die) + ) + ((= arg2 'movie-pos) + (set! v0-3 (the-as none (-> arg3 param 0))) + (set! (-> self movie-pos-index) (the-as int v0-3)) + v0-3 + ) + ((= arg2 'actor-pause) + (cond + ((-> arg3 param 0) + (logior! (-> self mask) (process-mask actor-pause)) + (set! v0-3 (the-as none #t)) + (set! (-> self actor-pause) (the-as symbol v0-3)) + v0-3 + ) + (else + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self actor-pause) #f) + #f + ) + ) + ) + ((= arg2 'fade) + (logior! (-> self flags) (collectable-flags fade)) + (set! (-> self fadeout-timeout) 30) + (set! v0-3 (the-as none (-> *display* base-frame-counter))) + (set! (-> self birth-time) (the-as int v0-3)) + v0-3 + ) + ) ) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (process->handle arg0)) ) - (the-as object (cond - ((= arg2 'eco-blue) - (when - (and - (zero? - (logand - (-> self flags) - (collectable-flags fading ignore-blue) - ) - ) - (!= (-> self next-state name) 'pickup) - (begin - (check-blue-suck (the-as process-drawable arg0)) - #t - ) - (logtest? (-> self flags) (collectable-flags can-collect)) - (>= - (- - (-> *display* base-frame-counter) - (-> self birth-time) - ) - (-> self collect-timeout) - ) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual notice-blue (process->handle arg0)) - ) - ) - ((= arg2 'trans) - (set! - (-> self root-override trans quad) - (-> (the-as vector (-> arg3 param 0)) quad) - ) - (dummy-47 (-> self root-override)) - (ja-post) - ) - ((= arg2 'jump) - (logclear! (-> self mask) (process-mask actor-pause)) - (set! - (-> self jump-pos quad) - (-> (the-as vector (-> arg3 param 0)) quad) - ) - (go-virtual jump) - ) - ((= arg2 'pickup) - (when (!= (-> self next-state name) 'pickup) - (if (and (> arg1 0) (-> arg3 param 0)) - (TODO-RENAME-30 - (-> self root-override) - (the-as vector (-> arg3 param 0)) - ) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (the-as handle #f)) - ) - ) - ((= arg2 'die) - (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual die) - ) - ((= arg2 'movie-pos) - (set! v0-3 (the-as none (-> arg3 param 0))) - (set! (-> self movie-pos-index) (the-as int v0-3)) - v0-3 - ) - ((= arg2 'actor-pause) - (cond - ((-> arg3 param 0) - (logior! (-> self mask) (process-mask actor-pause)) - (set! v0-3 (the-as none #t)) - (set! (-> self actor-pause) (the-as symbol v0-3)) - v0-3 - ) - (else - (logclear! (-> self mask) (process-mask actor-pause)) - (set! (-> self actor-pause) #f) - #f - ) - ) - ) - ((= arg2 'fade) - (logior! (-> self flags) (collectable-flags fade)) - (set! (-> self fadeout-timeout) 30) - (set! v0-3 (the-as none (-> *display* base-frame-counter))) - (set! (-> self birth-time) (the-as int v0-3)) - v0-3 - ) - ) - ) - ) :enter (behavior () - (if - (and - (logtest? (-> self fact options) (fact-options fop6 can-collect)) - (logtest? (-> self flags) (collectable-flags can-collect)) - (!= (-> self next-state name) 'pickup) - (send-event - *target* - 'get-pickup - (-> self fact pickup-type) - (-> self fact pickup-amount) - ) - ) - (go-virtual pickup #f (process->handle *target*)) + (if (and + (logtest? (-> self fact options) (fact-options fop6 can-collect)) + (logtest? (-> self flags) (collectable-flags can-collect)) + (!= (-> self next-state name) 'pickup) + (send-event *target* 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) + ) + (go-virtual pickup #f (process->handle *target*)) + ) + (none) ) - (none) - ) :trans (behavior () - (cond - ((logtest? (-> self flags) (collectable-flags trans)) - (vector-v++! - (-> self root-override transv) - (dummy-62 (-> self root-override) (new-stack-vector0) (the-as float 0.0)) - ) - (dummy-57 (-> self root-override) (-> self root-override transv)) - (when - (and - (>= 0.0 (-> self root-override transv y)) - (>= (-> self base y) (-> self root-override trans y)) - ) - (set! (-> self root-override trans y) (-> self base y)) - (cond - ((< (-> self root-override transv y) -8192.0) - (set! - (-> self root-override transv y) - (* -0.5 (-> self root-override transv y)) + (cond + ((logtest? (-> self flags) (collectable-flags trans)) + (vector-v++! + (-> self root-override transv) + (dummy-62 (-> self root-override) (new-stack-vector0) (the-as float 0.0)) ) - ) - (else - (vector-reset! (-> self root-override transv)) - (logclear! (-> self flags) (collectable-flags trans)) - (logior! (-> self flags) (collectable-flags can-collect)) - (if (-> self actor-pause) - (logior! (-> self mask) (process-mask actor-pause)) - ) - (set! (-> self base quad) (-> self root-override trans quad)) - (if - (and - (logtest? (-> self fact options) (fact-options can-collect)) - (zero? (logand (-> self flags) (collectable-flags ignore-blue))) - ) - (go-virtual notice-blue (process->handle *target*)) - ) - (if - (and - (logtest? (-> self fact options) (fact-options fop6 can-collect)) - (!= (-> self next-state name) 'pickup) - (send-event - *target* - 'get-pickup - (-> self fact pickup-type) - (-> self fact pickup-amount) + (dummy-57 (-> self root-override) (-> self root-override transv)) + (when (and (>= 0.0 (-> self root-override transv y)) (>= (-> self base y) (-> self root-override trans y))) + (set! (-> self root-override trans y) (-> self base y)) + (cond + ((< (-> self root-override transv y) -8192.0) + (set! (-> self root-override transv y) (* -0.5 (-> self root-override transv y))) + ) + (else + (vector-reset! (-> self root-override transv)) + (logclear! (-> self flags) (collectable-flags trans)) + (logior! (-> self flags) (collectable-flags can-collect)) + (if (-> self actor-pause) + (logior! (-> self mask) (process-mask actor-pause)) + ) + (set! (-> self base quad) (-> self root-override trans quad)) + (if (and + (logtest? (-> self fact options) (fact-options can-collect)) + (zero? (logand (-> self flags) (collectable-flags ignore-blue))) + ) + (go-virtual notice-blue (process->handle *target*)) + ) + (if (and + (logtest? (-> self fact options) (fact-options fop6 can-collect)) + (!= (-> self next-state name) 'pickup) + (send-event *target* 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) + ) + (go-virtual pickup #f (process->handle *target*)) + ) + ) ) - ) - (go-virtual pickup #f (process->handle *target*)) ) - ) ) + (else + (set! (-> self trans-hook) #f) + ) ) - ) - (else - (set! (-> self trans-hook) #f) - ) + (dummy-47 (-> self root-override)) + (none) ) - (dummy-47 (-> self root-override)) - (none) - ) :code (behavior () - (while #t - (let ((gp-0 (-> self part)) - (s5-0 (-> self root-override root-prim prim-core)) + (while #t + (let ((gp-0 (-> self part)) + (s5-0 (-> self root-override root-prim prim-core)) + ) + (when (and + (logtest? (-> self flags) (collectable-flags fade)) + (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self fadeout-timeout)) + ) + (let ((v1-10 (- 300 (- (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self fadeout-timeout))))) + (cond + ((< v1-10 0) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + ) + (else + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self actor-pause) #f) + (logior! (-> self flags) (collectable-flags fading)) + (logior! (-> self state-flags) 1) + (set! (-> gp-0 fade) (* 0.0033333334 (the float v1-10))) + ) + ) + ) ) - (when - (and - (logtest? (-> self flags) (collectable-flags fade)) - (>= - (- (-> *display* base-frame-counter) (-> self birth-time)) - (-> self fadeout-timeout) + (spawn gp-0 (the-as vector s5-0)) ) - ) - (let - ((v1-10 - (- - 300 - (- - (- (-> *display* base-frame-counter) (-> self birth-time)) - (-> self fadeout-timeout) - ) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) ) - ) - ) - (cond - ((< v1-10 0) - (process-entity-status! self (entity-perm-status dead) #t) - (deactivate self) - ) - (else - (logclear! (-> self mask) (process-mask actor-pause)) - (set! (-> self actor-pause) #f) - (logior! (-> self flags) (collectable-flags fading)) - (logior! (-> self state-flags) 1) - (set! (-> gp-0 fade) (* 0.0033333334 (the float v1-10))) - ) - ) - ) + (suspend) ) - (spawn gp-0 (the-as vector s5-0)) - ) - (if (nonzero? (-> self sound)) - (update! (-> self sound)) - ) - (suspend) + (none) ) - (none) - ) ) (defstate notice-blue (eco-collectable) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (when - (and - (or (= arg2 'touch) (= arg2 'attack)) - (and - (logtest? (-> self flags) (collectable-flags can-collect)) - (>= - (- (-> *display* base-frame-counter) (-> self birth-time)) - (-> self collect-timeout) - ) - (!= (-> self next-state name) 'pickup) - (send-event - arg0 - 'get-pickup - (-> self fact pickup-type) - (-> self fact pickup-amount) - ) + (when (and + (or (= arg2 'touch) (= arg2 'attack)) + (and + (logtest? (-> self flags) (collectable-flags can-collect)) + (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) + (!= (-> self next-state name) 'pickup) + (send-event arg0 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) + ) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (go-virtual pickup #f (process->handle arg0)) ) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (process->handle arg0)) ) - ) :enter (behavior ((arg0 handle)) - (set! (-> self target) arg0) - (set! (-> self speed quad) (the-as uint128 0)) - (set! - (-> self speed z) - (the-as float (if (rand-vu-percent? (the-as float 0.5)) - 1.0 - -1.0 - ) - ) + (set! (-> self target) arg0) + (set! (-> self speed quad) (the-as uint128 0)) + (set! (-> self speed z) (the-as float (if (rand-vu-percent? (the-as float 0.5)) + 1.0 + -1.0 + ) + ) + ) + (set! (-> self suck-y-offset) 0.0) + (logclear! (-> self mask) (process-mask actor-pause)) + (none) ) - (set! (-> self suck-y-offset) 0.0) - (logclear! (-> self mask) (process-mask actor-pause)) - (none) - ) :exit (behavior () - (if (-> self actor-pause) - (logior! (-> self mask) (process-mask actor-pause)) + (if (-> self actor-pause) + (logior! (-> self mask) (process-mask actor-pause)) + ) + (none) ) - (none) - ) :trans (behavior () - (let ((a1-0 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-0 from) self) - (set! (-> a1-0 num-params) 2) - (set! (-> a1-0 message) 'query) - (set! (-> a1-0 param 0) (the-as uint 'powerup)) - (set! (-> a1-0 param 1) (the-as uint 3)) - (if - (and - (not (send-event-function *target* a1-0)) - (zero? (logand (-> self flags) (collectable-flags suck))) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 2) + (set! (-> a1-0 message) 'query) + (set! (-> a1-0 param 0) (the-as uint 'powerup)) + (set! (-> a1-0 param 1) (the-as uint 3)) + (if (and (not (send-event-function *target* a1-0)) (zero? (logand (-> self flags) (collectable-flags suck)))) + (go-virtual wait) + ) ) - (go-virtual wait) - ) + (none) ) - (none) - ) :code (behavior ((arg0 handle)) - (while #t - (set! (-> self root-override trans quad) (-> self base quad)) - (add-blue-motion #t #f #t #f) - (dummy-47 (-> self root-override)) - (if (nonzero? (-> self draw)) - (ja-post) - ) - (let ((a0-5 (-> self part)) - (a1-1 (-> self root-override root-prim prim-core)) + (while #t + (set! (-> self root-override trans quad) (-> self base quad)) + (add-blue-motion #t #f #t #f) + (dummy-47 (-> self root-override)) + (if (nonzero? (-> self draw)) + (ja-post) ) - (if (nonzero? a0-5) - (spawn a0-5 (the-as vector a1-1)) + (let ((a0-5 (-> self part)) + (a1-1 (-> self root-override root-prim prim-core)) + ) + (if (nonzero? a0-5) + (spawn a0-5 (the-as vector a1-1)) + ) + ) + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (suspend) ) - ) - (if (nonzero? (-> self sound)) - (update! (-> self sound)) - ) - (suspend) + (none) ) - (none) - ) ) (defstate pickup (eco-collectable) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'set-movie-pos) - (let - ((v1-3 - (res-lump-struct - (-> self entity) - 'movie-pos - vector - :time - (the-as float -1000000000.0) - ) - ) - ) - (the-as symbol (when v1-3 - (set! - (-> v1-3 quad) - (-> - (the-as vector (-> arg3 param 0)) - quad - ) - ) - (the-as symbol v1-3) - ) - ) - ) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'set-movie-pos) + (let ((v1-3 (res-lump-struct (-> self entity) 'movie-pos vector :time (the-as float -1000000000.0)))) + (the-as symbol (when v1-3 + (set! (-> v1-3 quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (the-as symbol v1-3) + ) ) - ((= v1-0 'actor-pause) - (the-as symbol (cond - ((-> arg3 param 0) - (logior! - (-> self mask) - (process-mask actor-pause) - ) - (let ((v0-1 #t)) - (set! (-> self actor-pause) v0-1) - v0-1 - ) - ) - (else - (logclear! - (-> self mask) - (process-mask actor-pause) - ) - (set! (-> self actor-pause) #f) - #f - ) - ) - ) - ) - ((= v1-0 'fade) - (process-entity-status! self (entity-perm-status dead) #t) - (the-as symbol (deactivate self)) - ) - ) - ) - ) - ) - :enter - (behavior ((arg0 object) (arg1 handle)) - (set! (-> self pickup-handle) arg1) - (when (-> self notify-parent) - (let ((gp-0 (new 'stack-no-clear 'event-message-block))) - (set! (-> gp-0 from) self) - (set! (-> gp-0 num-params) 1) - (set! (-> gp-0 message) 'notify) - (set! (-> gp-0 param 0) (the-as uint 'pickup)) - (let ((s5-0 send-event-function) - (s4-0 (ppointer->process (-> self parent))) + ) ) - (s5-0 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) process)) - s4-0 - ) - gp-0 - ) - ) - ) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (none) - ) - :code - (behavior ((arg0 object) (arg1 handle)) - (clear-collide-with-as (-> self root-override)) - (if - (not - (or - (= (-> self fact pickup-type) (pickup-type eco-pill)) - (logtest? (-> self fact options) (fact-options powerup)) - ) - ) - (send-event - (handle->process arg1) - 'powerup - (-> self fact pickup-type) - (-> self fact pickup-amount) - ) - ) - (if (nonzero? (-> self sound)) - (stop! (-> self sound)) - ) - (case (-> self fact pickup-type) - (((pickup-type eco-yellow)) - (sound-play-by-name - (static-sound-name "y-eco-pickup") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - ) - (((pickup-type eco-red)) - (sound-play-by-name - (static-sound-name "r-eco-pickup") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - ) - (((pickup-type eco-blue)) - (sound-play-by-name - (static-sound-name "b-eco-pickup") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - (case (-> (level-get-target-inside *level*) name) - (('training) - (level-hint-spawn - (game-text-id training-more-eco-more-time) - "sagevb23" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ) - ) - (((pickup-type eco-green)) - (sound-play-by-name - (static-sound-name "g-eco-pickup") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - ) - (((pickup-type eco-green) (pickup-type eco-pill)) - (sound-play-by-name - (static-sound-name "pill-pickup") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - ) - ) - (if (nonzero? (-> self part)) - (kill-and-free-particles (-> self part)) - ) - (let ((gp-6 (handle->process (-> self pickup-handle)))) - (when (nonzero? (-> self collect-effect)) - (let ((s5-5 (get-process *default-dead-pool* part-tracker #x4000))) - (when s5-5 - (let ((t9-17 (method-of-type part-tracker activate))) - (t9-17 - (the-as part-tracker s5-5) - gp-6 - 'part-tracker - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-5 - part-tracker-init - (-> self collect-effect) - -1 - part-tracker-track-target - #f - #f - (-> self root-override root-prim prim-core) - ) - (-> s5-5 ppointer) - ) - ) - ) - ) - (when (nonzero? (-> self collect-effect2)) - (let ((gp-7 (get-process *default-dead-pool* part-tracker #x4000))) - (when gp-7 - (let ((t9-20 (method-of-type part-tracker activate))) - (t9-20 - (the-as part-tracker gp-7) - self - 'part-tracker - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - gp-7 - part-tracker-init - (-> self collect-effect2) - -1 - (lambda ((arg0 part-tracker)) - (let ((s5-0 (handle->process (-> arg0 userdata)))) - (when s5-0 - (let* - ((v1-4 - (handle->process (-> (the-as eco-collectable s5-0) pickup-handle)) - ) - (a2-0 (cond - ((not v1-4) - (-> arg0 root trans) - ) - ((= (-> v1-4 type) target) - (vector<-cspace! - (new 'stack-no-clear 'vector) - (-> (the-as target v1-4) node-list data 5) - ) - ) - (else - (-> (the-as target v1-4) control trans) - ) + ((= v1-0 'actor-pause) + (the-as symbol (cond + ((-> arg3 param 0) + (logior! (-> self mask) (process-mask actor-pause)) + (let ((v0-1 #t)) + (set! (-> self actor-pause) v0-1) + v0-1 + ) + ) + (else + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self actor-pause) #f) + #f + ) + ) ) - ) - ) - (vector-lerp! - (-> arg0 root trans) - (-> arg0 offset) - a2-0 - (/ - (the - float - (- - (-> *display* base-frame-counter) - (the-as int (-> arg0 start-time)) - ) - ) - (the float (-> (the-as eco-collectable s5-0) collect-effect-time)) - ) - ) + ) + ((= v1-0 'fade) + (process-entity-status! self (entity-perm-status dead) #t) + (the-as symbol (deactivate self)) ) ) - ) ) - (process->handle self) - #f - (-> self root-override root-prim prim-core) - ) - (-> gp-7 ppointer) ) - ) ) - (while (-> self child) - (suspend) + :enter + (behavior ((arg0 object) (arg1 handle)) + (set! (-> self pickup-handle) arg1) + (when (-> self notify-parent) + (let ((gp-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> gp-0 from) self) + (set! (-> gp-0 num-params) 1) + (set! (-> gp-0 message) 'notify) + (set! (-> gp-0 param 0) (the-as uint 'pickup)) + (let ((s5-0 send-event-function) + (s4-0 (ppointer->process (-> self parent))) + ) + (s5-0 + (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) process)) + s4-0 + ) + gp-0 + ) + ) + ) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (none) + ) + :code + (behavior ((arg0 object) (arg1 handle)) + (clear-collide-with-as (-> self root-override)) + (if (not (or + (= (-> self fact pickup-type) (pickup-type eco-pill)) + (logtest? (-> self fact options) (fact-options powerup)) + ) + ) + (send-event (handle->process arg1) 'powerup (-> self fact pickup-type) (-> self fact pickup-amount)) + ) + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (case (-> self fact pickup-type) + (((pickup-type eco-yellow)) + (sound-play-by-name (static-sound-name "y-eco-pickup") (new-sound-id) 1024 0 0 1 #t) + ) + (((pickup-type eco-red)) + (sound-play-by-name (static-sound-name "r-eco-pickup") (new-sound-id) 1024 0 0 1 #t) + ) + (((pickup-type eco-blue)) + (sound-play-by-name (static-sound-name "b-eco-pickup") (new-sound-id) 1024 0 0 1 #t) + (case (-> (level-get-target-inside *level*) name) + (('training) + (level-hint-spawn + (game-text-id training-more-eco-more-time) + "sagevb23" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + ) + (((pickup-type eco-green)) + (sound-play-by-name (static-sound-name "g-eco-pickup") (new-sound-id) 1024 0 0 1 #t) + ) + (((pickup-type eco-green) (pickup-type eco-pill)) + (sound-play-by-name (static-sound-name "pill-pickup") (new-sound-id) 1024 0 0 1 #t) + ) + ) + (if (nonzero? (-> self part)) + (kill-and-free-particles (-> self part)) + ) + (let ((gp-6 (handle->process (-> self pickup-handle)))) + (when (nonzero? (-> self collect-effect)) + (let ((s5-5 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-5 + (let ((t9-17 (method-of-type part-tracker activate))) + (t9-17 (the-as part-tracker s5-5) gp-6 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-5 + part-tracker-init + (-> self collect-effect) + -1 + part-tracker-track-target + #f + #f + (-> self root-override root-prim prim-core) + ) + (-> s5-5 ppointer) + ) + ) + ) + ) + (when (nonzero? (-> self collect-effect2)) + (let ((gp-7 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-7 + (let ((t9-20 (method-of-type part-tracker activate))) + (t9-20 (the-as part-tracker gp-7) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-7 + part-tracker-init + (-> self collect-effect2) + -1 + (lambda ((arg0 part-tracker)) + (let ((s5-0 (handle->process (-> arg0 userdata)))) + (when s5-0 + (let* ((v1-4 (handle->process (-> (the-as eco-collectable s5-0) pickup-handle))) + (a2-0 (cond + ((not v1-4) + (-> arg0 root trans) + ) + ((= (-> v1-4 type) target) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> (the-as target v1-4) node-list data 5)) + ) + (else + (-> (the-as target v1-4) control trans) + ) + ) + ) + ) + (vector-lerp! + (-> arg0 root trans) + (-> arg0 offset) + a2-0 + (/ (the float (- (-> *display* base-frame-counter) (the-as int (-> arg0 start-time)))) + (the float (-> (the-as eco-collectable s5-0) collect-effect-time)) + ) + ) + ) + ) + ) + ) + (process->handle self) + #f + (-> self root-override root-prim prim-core) + ) + (-> gp-7 ppointer) + ) + ) + ) + (while (-> self child) + (suspend) + ) + (go-virtual die) + (none) ) - (go-virtual die) - (none) - ) ) (defstate die (eco-collectable) :virtual #t :code - (behavior () - (process-entity-status! self (entity-perm-status dead) #t) - (none) - ) + (behavior () (process-entity-status! self (entity-perm-status dead) #t) (none)) ) (deftype eco (eco-collectable) @@ -1252,11 +946,11 @@ (let ((a0-1 (-> obj part)) (a1-0 (-> obj root-override root-prim prim-core)) ) - (spawn a0-1 (the-as vector a1-0)) - ) + (spawn a0-1 (the-as vector a1-0)) + ) (if (nonzero? (-> obj sound)) - (update! (-> obj sound)) - ) + (update! (-> obj sound)) + ) 0 (none) ) @@ -1265,65 +959,64 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (cond - ((= v1-0 'fade) - (process-entity-status! self (entity-perm-status dead) #t) - (deactivate self) - ) - ((= v1-0 'die) - (go-virtual die) - ) - ) - ) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'fade) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + ) + ((= v1-0 'die) + (go-virtual die) + ) + ) + ) + ) ) - ) :exit (behavior () - (process-entity-status! self (entity-perm-status bit-3) #f) - (if (-> self actor-pause) - (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (if (-> self actor-pause) + (logior! (-> self mask) (process-mask actor-pause)) + ) + (none) ) - (none) - ) :code (behavior () - (process-entity-status! self (entity-perm-status bit-3) #t) - (logclear! (-> self mask) (process-mask actor-pause)) - (logclear! (-> self fact options) (fact-options fop6 can-collect)) - (if (nonzero? (-> self part)) - (kill-and-free-particles (-> self part)) - ) - (cond - ((nonzero? (-> self respawn-delay)) - (let ((gp-0 (-> *display* base-frame-counter))) - (while - (< (- (-> *display* base-frame-counter) gp-0) (-> self respawn-delay)) - (suspend) + (process-entity-status! self (entity-perm-status bit-3) #t) + (logclear! (-> self mask) (process-mask actor-pause)) + (logclear! (-> self fact options) (fact-options fop6 can-collect)) + (if (nonzero? (-> self part)) + (kill-and-free-particles (-> self part)) + ) + (cond + ((nonzero? (-> self respawn-delay)) + (let ((gp-0 (-> *display* base-frame-counter))) + (while (< (- (-> *display* base-frame-counter) gp-0) (-> self respawn-delay)) + (suspend) + ) + ) ) + (else + (while (let ((f30-0 0.0) + (a1-1 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'query) + (set! (-> a1-1 param 0) (the-as uint 'pickup)) + (set! (-> a1-1 param 1) (the-as uint (-> self fact pickup-type))) + (< f30-0 (the-as float (send-event-function *target* a1-1))) + ) + (suspend) + ) + ) ) - ) - (else - (while (let ((f30-0 0.0) - (a1-1 (new 'stack-no-clear 'event-message-block)) - ) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 2) - (set! (-> a1-1 message) 'query) - (set! (-> a1-1 param 0) (the-as uint 'pickup)) - (set! (-> a1-1 param 1) (the-as uint (-> self fact pickup-type))) - (< f30-0 (the-as float (send-event-function *target* a1-1))) - ) - (suspend) - ) - ) + (set! (-> self base quad) (-> self old-base quad)) + (set! (-> self root-override trans quad) (-> self base quad)) + (restore-collide-with-as (-> self root-override)) + (go-virtual wait) + (none) ) - (set! (-> self base quad) (-> self old-base quad)) - (set! (-> self root-override trans quad) (-> self base quad)) - (restore-collide-with-as (-> self root-override)) - (go-virtual wait) - (none) - ) ) (deftype eco-yellow (eco) @@ -1336,12 +1029,7 @@ (defmethod init-from-entity! eco-yellow ((obj eco-yellow) (arg0 entity-actor)) - (initialize-eco - obj - arg0 - (pickup-type eco-yellow) - (-> *FACT-bank* eco-single-inc) - ) + (initialize-eco obj arg0 (pickup-type eco-yellow) (-> *FACT-bank* eco-single-inc)) (none) ) @@ -1355,12 +1043,7 @@ (defmethod init-from-entity! eco-red ((obj eco-red) (arg0 entity-actor)) - (initialize-eco - obj - arg0 - (pickup-type eco-red) - (-> *FACT-bank* eco-single-inc) - ) + (initialize-eco obj arg0 (pickup-type eco-red) (-> *FACT-bank* eco-single-inc)) (none) ) @@ -1374,12 +1057,7 @@ (defmethod init-from-entity! eco-blue ((obj eco-blue) (arg0 entity-actor)) - (initialize-eco - obj - arg0 - (pickup-type eco-blue) - (-> *FACT-bank* eco-single-inc) - ) + (initialize-eco obj arg0 (pickup-type eco-blue) (-> *FACT-bank* eco-single-inc)) (none) ) @@ -1396,22 +1074,17 @@ (let ((a0-1 (-> obj part)) (a1-0 (-> obj root-override root-prim prim-core)) ) - (spawn a0-1 (the-as vector a1-0)) - ) + (spawn a0-1 (the-as vector a1-0)) + ) (if (nonzero? (-> obj sound)) - (update! (-> obj sound)) - ) + (update! (-> obj sound)) + ) 0 (none) ) (defmethod init-from-entity! health ((obj health) (arg0 entity-actor)) - (initialize-eco - obj - arg0 - (pickup-type eco-green) - (-> *FACT-bank* health-single-inc) - ) + (initialize-eco obj arg0 (pickup-type eco-green) (-> *FACT-bank* health-single-inc)) (none) ) @@ -1428,22 +1101,17 @@ (let ((a0-1 (-> obj part)) (a1-0 (-> obj root-override root-prim prim-core)) ) - (spawn a0-1 (the-as vector a1-0)) - ) + (spawn a0-1 (the-as vector a1-0)) + ) (if (nonzero? (-> obj sound)) - (update! (-> obj sound)) - ) + (update! (-> obj sound)) + ) 0 (none) ) (defmethod init-from-entity! eco-pill ((obj eco-pill) (arg0 entity-actor)) - (initialize-eco - obj - arg0 - (pickup-type eco-pill) - (-> *FACT-bank* health-small-inc) - ) + (initialize-eco obj arg0 (pickup-type eco-pill) (-> *FACT-bank* health-small-inc)) (none) ) @@ -1459,34 +1127,23 @@ (logior! (-> obj mask) (process-mask actor-pause)) (set! (-> obj actor-pause) #t) (set! (-> obj notify-parent) #f) - (let - ((s5-0 - (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) - ) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set-vector! (-> s4-0 local-sphere) 0.0 3276.8 0.0 8192.0) + (set-root-prim! s5-0 (the-as collide-shape-prim-group 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 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s5-0 reaction) default-collision-reaction) - (set! - (-> s5-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) - (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) - (set! (-> s4-0 collide-with) (the-as uint 16)) - (set-vector! (-> s4-0 local-sphere) 0.0 3276.8 0.0 8192.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! - (-> obj fact) - (new 'process 'fact-info obj (-> obj pickup-type) (-> obj pickup-amount)) - ) + (set! (-> obj fact) (new 'process 'fact-info obj (-> obj pickup-type) (-> obj pickup-amount))) obj ) @@ -1519,41 +1176,28 @@ (defmethod run-logic? money ((obj money)) (or - (zero? (logand (-> obj mask) (process-mask actor-pause))) - (or - (and - (nonzero? (-> obj draw)) - (logtest? (-> obj draw status) 8) - (>= - (+ - (-> *ACTOR-bank* pause-dist) - (-> obj root-override pause-adjust-distance) - ) - (vector-vector-distance (-> obj root-override trans) (math-camera-pos)) + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (and + (nonzero? (-> obj draw)) + (logtest? (-> obj draw status) 8) + (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj root-override pause-adjust-distance)) + (vector-vector-distance (-> obj root-override trans) (math-camera-pos)) + ) + ) + (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) ) - ) - (and - (nonzero? (-> obj skel)) - (!= (-> obj skel root-channel 0) (-> obj skel channel)) - ) - (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) ) - ) ) (defmethod deactivate money ((obj money)) (when (= (-> obj next-state name) 'pickup) - (if - (not - (and - (-> obj entity) - (logtest? (-> obj entity extra perm status) (entity-perm-status dead)) - ) - ) - (format #t "money ~A was killed in pickup~%") + (if (not (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status dead)))) + (format #t "money ~A was killed in pickup~%") + ) + (process-entity-status! obj (entity-perm-status dead) #t) ) - (process-entity-status! obj (entity-perm-status dead) #t) - ) ((method-of-type eco-collectable deactivate) obj) (none) ) @@ -1562,160 +1206,120 @@ :virtual #t :code (behavior () - (while #t - (quaternion-rotate-y! - (-> self root-override quat) - (-> self root-override quat) - (* 40049.777 (-> *display* seconds-per-frame)) - ) - (let ((f30-0 (-> self bob-amount))) - (when (< 0.0 f30-0) - (set! - (-> self root-override trans y) - (+ - (-> self base y) - (-> self suck-y-offset) - (* - f30-0 - (sin - (* - 109.22667 - (the - float - (mod - (+ - (- (-> *display* base-frame-counter) (-> self birth-time)) - (-> self bob-offset) - ) - 600 - ) - ) - ) - ) - ) + (while #t + (quaternion-rotate-y! + (-> self root-override quat) + (-> self root-override quat) + (* 40049.777 (-> *display* seconds-per-frame)) ) - ) - (dummy-47 (-> self root-override)) + (let ((f30-0 (-> self bob-amount))) + (when (< 0.0 f30-0) + (set! (-> self root-override trans y) + (+ (-> self base y) + (-> self suck-y-offset) + (* f30-0 + (sin + (* 109.22667 + (the float (mod (+ (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self bob-offset)) 600)) + ) + ) + ) + ) + ) + (dummy-47 (-> self root-override)) + ) + ) + (ja-post) + (suspend) ) - ) - (ja-post) - (suspend) + (none) ) - (none) - ) ) (defstate notice-blue (money) :virtual #t :code (behavior ((arg0 handle)) - (while #t - (quaternion-rotate-y! - (-> self root-override quat) - (-> self root-override quat) - (* 91022.22 (-> *display* seconds-per-frame)) - ) - (set! (-> self root-override trans quad) (-> self base quad)) - (add-blue-motion #t #t #t #f) - (let ((f30-0 (-> self bob-amount))) - (if (< 0.0 f30-0) - (set! - (-> self root-override trans y) - (+ - (-> self base y) - (-> self suck-y-offset) - (* - f30-0 - (sin - (* - 109.22667 - (the - float - (mod - (+ - (- (-> *display* base-frame-counter) (-> self birth-time)) - (-> self bob-offset) - ) - 600 - ) - ) - ) - ) - ) + (while #t + (quaternion-rotate-y! + (-> self root-override quat) + (-> self root-override quat) + (* 91022.22 (-> *display* seconds-per-frame)) ) - ) + (set! (-> self root-override trans quad) (-> self base quad)) + (add-blue-motion #t #t #t #f) + (let ((f30-0 (-> self bob-amount))) + (if (< 0.0 f30-0) + (set! (-> self root-override trans y) + (+ (-> self base y) + (-> self suck-y-offset) + (* f30-0 + (sin + (* 109.22667 + (the float (mod (+ (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self bob-offset)) 600)) + ) + ) + ) + ) + ) + ) + ) + (transform-post) + (suspend) ) - ) - (transform-post) - (suspend) + (none) ) - (none) - ) ) (defstate pickup (money) :virtual #t :code (behavior ((arg0 object) (arg1 handle)) - (logclear! (-> self mask) (process-mask actor-pause)) - (clear-collide-with-as (-> self root-override)) - (process-entity-status! self (entity-perm-status dead) #t) - (convert-to-hud-object - self - (the-as hud (ppointer->process (-> *hud-parts* money))) + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (process-entity-status! self (entity-perm-status dead) #t) + (convert-to-hud-object self (the-as hud (ppointer->process (-> *hud-parts* money)))) + (none) ) - (none) - ) ) (defmethod initialize money ((obj money)) (stack-size-set! (-> obj main-thread) 128) - (let - ((s5-0 - (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) - ) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set-vector! (-> s4-0 local-sphere) 0.0 2048.0 0.0 4915.2) + (set-root-prim! s5-0 (the-as collide-shape-prim-group 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 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s5-0 reaction) default-collision-reaction) - (set! - (-> s5-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) - (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) - (set! (-> s4-0 collide-with) (the-as uint 16)) - (set-vector! (-> s4-0 local-sphere) 0.0 2048.0 0.0 4915.2) - (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) - ) (logior! (-> obj mask) (process-mask actor-pause)) (set! (-> obj actor-pause) #t) (set! (-> obj notify-parent) #f) - (set! - (-> obj fact) - (new 'process 'fact-info obj (pickup-type money) (the-as float 1.0)) - ) + (set! (-> obj fact) (new 'process 'fact-info obj (pickup-type money) (the-as float 1.0))) (let ((a0-10 (-> obj entity))) - (if (when a0-10 - (let ((a0-11 (-> a0-10 extra perm task))) - (if a0-11 - (= a0-11 (game-task none)) - ) - ) + (if (when a0-10 + (let ((a0-11 (-> a0-10 extra perm task))) + (if a0-11 + (= a0-11 (game-task none)) + ) + ) + ) + (set! (-> obj entity extra perm task) (game-task complete)) ) - (set! (-> obj entity extra perm task) (game-task complete)) ) - ) (initialize-skeleton obj *money-sg* '()) (if (-> obj entity) - (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) - ) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + ) (set-vector! (-> obj draw color-mult) 0.8 0.8 0.8 1.0) (set-vector! (-> obj draw color-emissive) 0.2 0.2 0.2 1.0) obj @@ -1730,19 +1334,17 @@ (none) ) -(defbehavior - money-init-by-other money - ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 entity)) +(defbehavior money-init-by-other money ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 entity)) (let ((s3-0 (-> arg2 pickup-type)) (f30-0 (-> arg2 pickup-spawn-amount)) ) - (set! (-> self entity) arg3) - (set! (-> self pickup-type) s3-0) - (set! (-> self pickup-amount) f30-0) - (initialize self) - (set! (-> self fact pickup-type) s3-0) - (set! (-> self fact pickup-amount) f30-0) - ) + (set! (-> self entity) arg3) + (set! (-> self pickup-type) s3-0) + (set! (-> self pickup-amount) f30-0) + (initialize self) + (set! (-> self fact pickup-type) s3-0) + (set! (-> self fact pickup-amount) f30-0) + ) (set! (-> self fact options) (-> arg2 options)) (set! (-> self notify-parent) #t) (set! (-> self root-override trans quad) (-> arg0 quad)) @@ -1756,9 +1358,7 @@ (none) ) -(defbehavior - money-init-by-other-no-bob money - ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 float) (arg4 entity)) +(defbehavior money-init-by-other-no-bob money ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 float) (arg4 entity)) (set! (-> self entity) arg4) (set! (-> self pickup-type) (the-as pickup-type arg2)) (set! (-> self pickup-amount) arg3) @@ -1793,187 +1393,110 @@ (defun fuel-cell-pick-anim ((arg0 process-drawable)) (let* ((gp-0 (-> arg0 entity extra trans)) - (a0-2 - (res-lump-value - (-> arg0 entity) - 'movie-mask - uint128 - :time - (the-as float -1000000000.0) - ) - ) + (a0-2 (res-lump-value (-> arg0 entity) 'movie-mask uint128 :time (the-as float -1000000000.0))) (a1-1 8) - (v1-6 - (abs - (the - int - (+ (* 0.00024414062 (-> gp-0 x)) (* 0.00024414062 (-> gp-0 z))) - ) - ) - ) + (v1-6 (abs (the int (+ (* 0.00024414062 (-> gp-0 x)) (* 0.00024414062 (-> gp-0 z)))))) (v1-7 (mod v1-6 a1-1)) ) - (while (logtest? a0-2 (ash 1 v1-7)) - (set! v1-7 (mod (+ v1-7 1) a1-1)) - ) - (when *target* + (while (logtest? a0-2 (ash 1 v1-7)) + (set! v1-7 (mod (+ v1-7 1) a1-1)) + ) + (when *target* + (cond + ((logtest? (-> *target* control root-prim prim-core action) 512) + (set! v1-7 16) + ) + ((logtest? (-> *target* control root-prim prim-core action) #x4000) + (set! v1-7 32) + ) + ) + ) (cond - ((logtest? (-> *target* control root-prim prim-core action) 512) - (set! v1-7 16) + ((zero? v1-7) + (new 'static 'spool-anim :name "fuel-cell-victory" :index 3 :parts 2 :command-list '()) + ) + ((= v1-7 1) + (new 'static 'spool-anim :name "fuel-cell-victory-2" :index 4 :parts 2 :command-list '()) + ) + ((= v1-7 2) + (new 'static 'spool-anim :name "fuel-cell-victory-3" :index 5 :parts 2 :command-list '()) + ) + ((= v1-7 3) + (new 'static 'spool-anim :name "fuel-cell-victory-4" :index 6 :parts 2 :command-list '()) + ) + ((= v1-7 4) + (new 'static 'spool-anim :name "fuel-cell-victory-5" :index 7 :parts 2 :command-list '()) + ) + ((= v1-7 5) + (new 'static 'spool-anim :name "fuel-cell-victory-6" :index 8 :parts 2 :command-list '()) + ) + ((= v1-7 6) + (new 'static 'spool-anim :name "fuel-cell-victory-7" :index 9 :parts 2 :command-list '()) + ) + ((= v1-7 7) + (new 'static 'spool-anim :name "fuel-cell-victory-8" :index 10 :parts 2 :command-list '()) + ) + ((= v1-7 16) + (new 'static 'spool-anim :name "fuel-cell-racer-victory-1" :index 40 :parts 2 :command-list '()) + ) + ((= v1-7 32) + (new 'static 'spool-anim :name "fuel-cell-flut-victory-1" :index 44 :parts 2 :command-list '()) + ) + (else + (new 'static 'spool-anim :name "fuel-cell-victory-3" :index 5 :parts 2 :command-list '()) + ) ) - ((logtest? (-> *target* control root-prim prim-core action) #x4000) - (set! v1-7 32) - ) - ) ) - (cond - ((zero? v1-7) - (new 'static 'spool-anim - :name "fuel-cell-victory" - :index 3 - :parts 2 - :command-list '() - ) - ) - ((= v1-7 1) - (new 'static 'spool-anim - :name "fuel-cell-victory-2" - :index 4 - :parts 2 - :command-list '() - ) - ) - ((= v1-7 2) - (new 'static 'spool-anim - :name "fuel-cell-victory-3" - :index 5 - :parts 2 - :command-list '() - ) - ) - ((= v1-7 3) - (new 'static 'spool-anim - :name "fuel-cell-victory-4" - :index 6 - :parts 2 - :command-list '() - ) - ) - ((= v1-7 4) - (new 'static 'spool-anim - :name "fuel-cell-victory-5" - :index 7 - :parts 2 - :command-list '() - ) - ) - ((= v1-7 5) - (new 'static 'spool-anim - :name "fuel-cell-victory-6" - :index 8 - :parts 2 - :command-list '() - ) - ) - ((= v1-7 6) - (new 'static 'spool-anim - :name "fuel-cell-victory-7" - :index 9 - :parts 2 - :command-list '() - ) - ) - ((= v1-7 7) - (new 'static 'spool-anim - :name "fuel-cell-victory-8" - :index 10 - :parts 2 - :command-list '() - ) - ) - ((= v1-7 16) - (new 'static 'spool-anim - :name "fuel-cell-racer-victory-1" - :index 40 - :parts 2 - :command-list '() - ) - ) - ((= v1-7 32) - (new 'static 'spool-anim - :name "fuel-cell-flut-victory-1" - :index 44 - :parts 2 - :command-list '() - ) - ) - (else - (new 'static 'spool-anim - :name "fuel-cell-victory-3" - :index 5 - :parts 2 - :command-list '() - ) - ) - ) - ) ) (defbehavior fuel-cell-animate fuel-cell () (let* ((gp-0 self) (s5-0 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) fuel-cell)) - gp-0 - ) - ) - ) - (cond - (s5-0 - (set! (-> s5-0 victory-anim) (fuel-cell-pick-anim s5-0)) - (spool-push - *art-control* - (-> s5-0 victory-anim name) - 0 - self - (the-as float -99.0) - ) - ) - (else - (let ((v1-5 (fuel-cell-pick-anim self))) - (spool-push *art-control* (-> v1-5 name) 0 self (the-as float -99.0)) - ) - ) - ) - ) - (when (nonzero? (-> self part)) - (cond - ((logtest? (-> self draw status) 6) - (kill-and-free-particles (-> self part)) - (if (nonzero? (-> self sound)) - (kill-and-free-particles (-> self part)) - ) - ) - (else - (let* ((gp-1 (-> self root-override)) - (v1-20 - (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) collide-shape)) - gp-1 - ) - ) - (gp-2 (if v1-20 - (-> v1-20 root-prim prim-core) - (-> self root-override trans) + gp-0 ) - ) - ) - (spawn (-> self part) (the-as vector gp-2)) - (when (nonzero? (-> self sound)) - (update-trans! (-> self sound) (the-as vector gp-2)) - (update! (-> self sound)) - ) + ) + ) + (cond + (s5-0 + (set! (-> s5-0 victory-anim) (fuel-cell-pick-anim s5-0)) + (spool-push *art-control* (-> s5-0 victory-anim name) 0 self (the-as float -99.0)) + ) + (else + (let ((v1-5 (fuel-cell-pick-anim self))) + (spool-push *art-control* (-> v1-5 name) 0 self (the-as float -99.0)) + ) + ) + ) + ) + (when (nonzero? (-> self part)) + (cond + ((logtest? (-> self draw status) 6) + (kill-and-free-particles (-> self part)) + (if (nonzero? (-> self sound)) + (kill-and-free-particles (-> self part)) + ) + ) + (else + (let* ((gp-1 (-> self root-override)) + (v1-20 (if (and (nonzero? gp-1) (type-type? (-> gp-1 type) collide-shape)) + gp-1 + ) + ) + (gp-2 (if v1-20 + (-> v1-20 root-prim prim-core) + (-> self root-override trans) + ) + ) + ) + (spawn (-> self part) (the-as vector gp-2)) + (when (nonzero? (-> self sound)) + (update-trans! (-> self sound) (the-as vector gp-2)) + (update! (-> self sound)) + ) + ) + ) ) - ) ) - ) (set-vector! (-> self draw color-mult) 0.5 0.5 0.5 1.0) (set-vector! (-> self draw color-emissive) 0.5 0.5 0.5 1.0) 0 @@ -1986,812 +1509,615 @@ :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (local-vars (v0-3 none)) - (when - (and - (or (= arg2 'touch) (= arg2 'attack)) - (and - (logtest? (-> self flags) (collectable-flags can-collect)) - (>= - (- (-> *display* base-frame-counter) (-> self birth-time)) - (-> self collect-timeout) - ) - (and - (not (handle->process (-> *game-info* other-camera-handle))) - (not *progress-process*) - (!= (-> self next-state name) 'pickup) - *target* - (zero? (logand (-> *target* state-flags) #x8100)) - ) + (local-vars (v0-3 none)) + (when (and + (or (= arg2 'touch) (= arg2 'attack)) + (and + (logtest? (-> self flags) (collectable-flags can-collect)) + (>= (- (-> *display* base-frame-counter) (-> self birth-time)) (-> self collect-timeout)) + (and + (not (handle->process (-> *game-info* other-camera-handle))) + (not *progress-process*) + (!= (-> self next-state name) 'pickup) + *target* + (zero? (logand (-> *target* state-flags) #x8100)) + ) + ) + ) + (push-setting! *setting-control* self 'allow-progress #f 0.0 0) + (copy-settings-from-target! *setting-control*) + (logclear! (-> self mask) (process-mask actor-pause)) + (go-virtual pickup #f (process->handle arg0)) ) - ) - (push-setting! *setting-control* self 'allow-progress #f 0.0 0) - (copy-settings-from-target! *setting-control*) - (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (process->handle arg0)) - ) - (the-as object (cond - ((= arg2 'trans) - (set! - (-> self root-override trans quad) - (-> (the-as vector (-> arg3 param 0)) quad) - ) - (set! - (-> self base quad) - (-> self root-override trans quad) - ) - (dummy-47 (-> self root-override)) - ) - ((= arg2 'pickup) - (when (!= (-> self next-state name) 'pickup) - (if (and (> arg1 0) (-> arg3 param 0)) - (TODO-RENAME-30 - (-> self root-override) - (the-as vector (-> arg3 param 0)) - ) + (the-as object (cond + ((= arg2 'trans) + (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self base quad) (-> self root-override trans quad)) + (dummy-47 (-> self root-override)) ) - (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (process->handle *target*)) - ) - ) - ((= arg2 'collide-shape) - (if (-> arg3 param 0) - (restore-collide-with-as (-> self root-override)) - (clear-collide-with-as (-> self root-override)) - ) - ) - ((= arg2 'movie-pos) - (set! v0-3 (the-as none (-> arg3 param 0))) - (set! (-> self movie-pos-index) (the-as int v0-3)) - v0-3 - ) - ((= arg2 'anim) - (cond - ((-> arg3 param 0) - (set! - v0-3 - (the-as - none - (logclear (-> self flags) (collectable-flags anim)) + ((= arg2 'pickup) + (when (!= (-> self next-state name) 'pickup) + (if (and (> arg1 0) (-> arg3 param 0)) + (TODO-RENAME-30 (-> self root-override) (the-as vector (-> arg3 param 0))) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (go-virtual pickup #f (process->handle *target*)) ) - ) - (set! (-> self flags) (the-as collectable-flags v0-3)) ) - (else - (set! - v0-3 - (the-as - none - (logior (-> self flags) (collectable-flags anim)) + ((= arg2 'collide-shape) + (if (-> arg3 param 0) + (restore-collide-with-as (-> self root-override)) + (clear-collide-with-as (-> self root-override)) + ) + ) + ((= arg2 'movie-pos) + (set! v0-3 (the-as none (-> arg3 param 0))) + (set! (-> self movie-pos-index) (the-as int v0-3)) + v0-3 + ) + ((= arg2 'anim) + (cond + ((-> arg3 param 0) + (set! v0-3 (the-as none (logclear (-> self flags) (collectable-flags anim)))) + (set! (-> self flags) (the-as collectable-flags v0-3)) + ) + (else + (set! v0-3 (the-as none (logior (-> self flags) (collectable-flags anim)))) + (set! (-> self flags) (the-as collectable-flags v0-3)) + ) ) - ) - (set! (-> self flags) (the-as collectable-flags v0-3)) + v0-3 ) ) - v0-3 - ) - ) + ) ) - ) :code (behavior () - 0.5 - (let ((f28-0 0.0)) - (let ((v1-3 (-> self skel root-channel 0))) - (set! - (-> v1-3 frame-group) - (the-as art-joint-anim (-> self draw art-group data 2)) - ) - ) - (while #t - (let ((f30-0 (vector-vector-distance (-> self base) (target-pos 0)))) - (set! - f28-0 - (if - (and - (< f30-0 (-> *FACT-bank* suck-suck-dist)) - (zero? (logand (-> self flags) (collectable-flags anim))) - ) - (seek - f28-0 - (the-as float 16384.0) - (* 3072.0 (-> *display* seconds-per-frame)) - ) - (seek - f28-0 - (the-as float 0.0) - (* 3072.0 (-> *display* seconds-per-frame)) - ) + 0.5 + (let ((f28-0 0.0)) + (let ((v1-3 (-> self skel root-channel 0))) + (set! (-> v1-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) ) - ) - (set! - (-> self root-override trans y) - (+ (-> self base y) (* 2867.2 (sin f28-0))) - ) - (let - ((f30-1 - (lerp-scale - (the-as float 0.6) - (the-as float 0.5) - f30-0 - (the-as float 8192.0) - (-> *FACT-bank* suck-suck-dist) + (while #t + (let ((f30-0 (vector-vector-distance (-> self base) (target-pos 0)))) + (set! f28-0 + (if (and (< f30-0 (-> *FACT-bank* suck-suck-dist)) (zero? (logand (-> self flags) (collectable-flags anim)))) + (seek f28-0 (the-as float 16384.0) (* 3072.0 (-> *display* seconds-per-frame))) + (seek f28-0 (the-as float 0.0) (* 3072.0 (-> *display* seconds-per-frame))) + ) + ) + (set! (-> self root-override trans y) (+ (-> self base y) (* 2867.2 (sin f28-0)))) + (let ((f30-1 + (lerp-scale (the-as float 0.6) (the-as float 0.5) f30-0 (the-as float 8192.0) (-> *FACT-bank* suck-suck-dist)) + ) + ) + (transform-post) + (fuel-cell-animate) + (suspend) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) f30-1) + (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-loop!) + ) + ) ) - ) ) - (transform-post) - (fuel-cell-animate) - (suspend) - (let ((a0-11 (-> self skel root-channel 0))) - (set! (-> a0-11 param 0) f30-1) - (joint-control-channel-group-eval! - a0-11 - (the-as art-joint-anim #f) - num-func-loop! - ) - ) - ) ) - ) + (none) ) - (none) - ) ) (defstate pickup (fuel-cell) :virtual #t :enter (behavior ((arg0 object) (arg1 handle)) - (set! (-> self state-time) (-> *display* base-frame-counter)) - (set! (-> self state-object) #t) - (let - ((t9-1 - (-> - (the-as (state eco-collectable) (find-parent-method fuel-cell 23)) - enter - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self state-object) #t) + (let ((t9-1 (-> (the-as (state eco-collectable) (find-parent-method fuel-cell 23)) enter))) + (if t9-1 + (t9-1) + ) ) - ) - (if t9-1 - (t9-1) - ) + (none) ) - (none) - ) :trans (behavior () - (let ((f30-0 (the-as float (cond - ((string= - (-> self victory-anim name) - "fuel-cell-victory" + (let ((f30-0 (the-as float (cond + ((string= (-> self victory-anim name) "fuel-cell-victory") + 97.0 + ) + ((string= (-> self victory-anim name) "fuel-cell-victory-2") + 97.0 + ) + ((string= (-> self victory-anim name) "fuel-cell-victory-3") + 97.0 + ) + ((string= (-> self victory-anim name) "fuel-cell-victory-4") + 97.0 + ) + ((string= (-> self victory-anim name) "fuel-cell-victory-5") + 77.0 + ) + ((string= (-> self victory-anim name) "fuel-cell-victory-6") + 97.0 + ) + ((string= (-> self victory-anim name) "fuel-cell-victory-7") + 97.0 + ) + ((string= (-> self victory-anim name) "fuel-cell-victory-8") + 97.0 + ) + ((string= (-> self victory-anim name) "fuel-cell-racer-victory-1") + 88.0 + ) + ((string= (-> self victory-anim name) "fuel-cell-flut-victory-1") + 150.0 + ) + (else + 5000.0 + ) ) - 97.0 - ) - ((string= - (-> self victory-anim name) - "fuel-cell-victory-2" - ) - 97.0 - ) - ((string= - (-> self victory-anim name) - "fuel-cell-victory-3" - ) - 97.0 - ) - ((string= - (-> self victory-anim name) - "fuel-cell-victory-4" - ) - 97.0 - ) - ((string= - (-> self victory-anim name) - "fuel-cell-victory-5" - ) - 77.0 - ) - ((string= - (-> self victory-anim name) - "fuel-cell-victory-6" - ) - 97.0 - ) - ((string= - (-> self victory-anim name) - "fuel-cell-victory-7" - ) - 97.0 - ) - ((string= - (-> self victory-anim name) - "fuel-cell-victory-8" - ) - 97.0 - ) - ((string= - (-> self victory-anim name) - "fuel-cell-racer-victory-1" - ) - 88.0 - ) - ((string= - (-> self victory-anim name) - "fuel-cell-flut-victory-1" - ) - 150.0 - ) - (else - 5000.0 - ) - ) + ) ) ) - ) - (when - (and - (logtest? (-> self skel status) 32) - (and (>= (ja-aframe-num 0) f30-0) (-> self state-object)) - ) - (set! (-> self state-object) #f) - (kill-and-free-particles (-> self part)) - (logior! (-> self draw status) 32) - (if - (not - (or - (logtest? - (the-as - int - (res-lump-value - (-> self entity) - 'options - uint128 - :time - (the-as float -1000000000.0) - ) - ) - 4096 - ) - (and - *target* - (logtest? (-> *target* control root-prim prim-core action) 512) - ) + (when (and (logtest? (-> self skel status) 32) (and (>= (ja-aframe-num 0) f30-0) (-> self state-object))) + (set! (-> self state-object) #f) + (kill-and-free-particles (-> self part)) + (logior! (-> self draw status) 32) + (if (not (or + (logtest? + (the-as int (res-lump-value (-> self entity) 'options uint128 :time (the-as float -1000000000.0))) + 4096 + ) + (and *target* (logtest? (-> *target* control root-prim prim-core action) 512)) + ) + ) + (send-event *camera* 'teleport-to-other-start-string) + ) ) - ) - (send-event *camera* 'teleport-to-other-start-string) ) - ) + (none) ) - (none) - ) :code (behavior ((arg0 object) (arg1 handle)) - (local-vars (sv-96 res-tag)) - (sound-play-by-name - (static-sound-name "pu-powercell") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - (clear-collide-with-as (-> self root-override)) - (logclear! (-> self mask) (process-mask actor-pause)) - (set! (-> self draw status) (logand -3 (-> self draw status))) - (process-entity-status! self (entity-perm-status dead) #t) - (stop! (-> self sound)) - (while (handle->process (-> *game-info* other-camera-handle)) - (format - #t - "WARNING: fuel-cell stall ~D ~A ~A~%" - (-> *display* base-frame-counter) - (handle->process (-> *game-info* other-camera-handle)) - (-> *level* loading-level) - ) - (spool-push - *art-control* - (-> self victory-anim name) - 0 - self - (the-as float -99.0) - ) - (suspend) - ) - (while (let ((a1-8 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-8 from) self) - (set! (-> a1-8 num-params) 1) - (set! (-> a1-8 message) 'clone-anim) - (set! (-> a1-8 param 0) (the-as uint self)) - (not (send-event-function *target* a1-8)) + (local-vars (sv-96 res-tag)) + (sound-play-by-name (static-sound-name "pu-powercell") (new-sound-id) 1024 0 0 1 #t) + (clear-collide-with-as (-> self root-override)) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (process-entity-status! self (entity-perm-status dead) #t) + (stop! (-> self sound)) + (while (handle->process (-> *game-info* other-camera-handle)) + (format + #t + "WARNING: fuel-cell stall ~D ~A ~A~%" + (-> *display* base-frame-counter) + (handle->process (-> *game-info* other-camera-handle)) + (-> *level* loading-level) + ) + (spool-push *art-control* (-> self victory-anim name) 0 self (the-as float -99.0)) + (suspend) + ) + (while (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 1) + (set! (-> a1-8 message) 'clone-anim) + (set! (-> a1-8 param 0) (the-as uint self)) + (not (send-event-function *target* a1-8)) + ) + (spool-push *art-control* (-> self victory-anim name) 0 self (the-as float -99.0)) + (format #t "WARNING: fuel-cell stall on not cloning.~%") + (suspend) + ) + (set! sv-96 (new 'static 'res-tag)) + (let* ((v1-34 + (res-lump-data + (-> self entity) + 'movie-pos + (inline-array vector) + :tag-ptr + (& sv-96) + :time + (the-as float -1000000000.0) + ) + ) + (gp-1 (if (and v1-34 (< (-> self movie-pos-index) (the-as int (-> sv-96 elt-count)))) + (-> v1-34 (-> self movie-pos-index)) + (the-as vector #f) + ) + ) ) - (spool-push - *art-control* - (-> self victory-anim name) - 0 - self - (the-as float -99.0) - ) - (format #t "WARNING: fuel-cell stall on not cloning.~%") + (cond + ((and *debug-segment* (< (-> *fuel-cell-tune-pos* w) 1000000000.0)) + (TODO-RENAME-30 (-> self root-override) *fuel-cell-tune-pos*) + (set-yaw-angle-clear-roll-pitch! (-> self root-override) (-> *fuel-cell-tune-pos* w)) + ) + ((= (-> self movie-pos-index) -1) + ) + (gp-1 + (TODO-RENAME-30 (-> self root-override) gp-1) + (set-yaw-angle-clear-roll-pitch! (-> self root-override) (-> gp-1 w)) + ) + (else + (TODO-RENAME-30 (-> self root-override) (-> *target* control trans)) + (set-yaw-angle-clear-roll-pitch! (-> self root-override) (y-angle (-> *target* control))) + (dummy-60 (-> self root-override) (the-as float 40960.0) (the-as float 40960.0) #f (the-as uint 1)) + ) + ) + ) + (spool-push *art-control* (-> self victory-anim name) 0 self (the-as float -99.0)) + (send-event *target* 'get-pickup (-> self fact pickup-type) (-> self fact pickup-amount)) + (set! (-> self draw bounds w) 32768.0) + (logior! (-> self skel status) 1) + (send-event *target* 'blend-shape #t) + (push-setting! *setting-control* self 'music-volume 'rel (-> *setting-control* current music-volume-movie) 0) + (push-setting! *setting-control* self 'sfx-volume 'rel (-> *setting-control* current sfx-volume-movie) 0) + (push-setting! + *setting-control* + self + 'ambient-volume + 'rel + (-> *setting-control* current ambient-volume-movie) + 0 + ) + (let ((gp-3 (get-process *default-dead-pool* othercam #x4000))) + (when gp-3 + (let ((t9-26 (method-of-type othercam activate))) + (t9-26 (the-as othercam gp-3) self 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-3 othercam-init-by-other self 10 #f #t) + (-> gp-3 ppointer) + ) + ) + (auto-save-command 'auto-save 0 0 *default-pool*) + (ja-play-spooled-anim + (-> self victory-anim) + (the-as art-joint-anim (-> self draw art-group data 2)) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (clear-pending-settings-from-process *setting-control* self 'music-volume) + (clear-pending-settings-from-process *setting-control* self 'sfx-volume) + (clear-pending-settings-from-process *setting-control* self 'ambient-volume) + (send-event *target* 'blend-shape #f) + (send-event *target* 'end-mode) + (send-event *camera* 'no-intro) + (send-event *camera* 'clear-entity) + (ja-channel-set! 0) (suspend) - ) - (set! sv-96 (new 'static 'res-tag)) - (let* - ((v1-34 - (res-lump-data - (-> self entity) - 'movie-pos - (inline-array vector) - :tag-ptr - (& sv-96) - :time - (the-as float -1000000000.0) - ) - ) - (gp-1 - (if - (and - v1-34 - (< (-> self movie-pos-index) (the-as int (-> sv-96 elt-count))) + (suspend) + (let ((gp-4 (get-process *default-dead-pool* process #x4000))) + (when gp-4 + (let ((t9-39 (method-of-type process activate))) + (t9-39 gp-4 self 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process + gp-4 + (lambda :behavior collectable + ((arg0 game-task)) + (while (or + (-> *setting-control* current ambient) + (-> *setting-control* current movie) + (-> *setting-control* current hint) + (str-is-playing?) + ) + (suspend) + ) + (cond + ((= arg0 (game-task training-buzzer)) + (level-hint-spawn + (game-text-id training-assistant-found-scout-fly-cell) + "asstvb45" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task training-door)) + (level-hint-spawn + (game-text-id training-eco-opened-door) + "sagevb25" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task beach-ecorocks)) + (level-hint-spawn + (game-text-id beach-collectors-unblocked) + "sagevb01" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task misty-cannon)) + (level-hint-spawn + (game-text-id misty-stopped-lurkers-at-silo) + "sagevb02" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task misty-bike)) + (level-hint-spawn + (game-text-id misty-stopped-balloon-lurkers) + "asstvb03" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task firecanyon-end)) + (level-hint-spawn + (game-text-id fire-canyon-we-made-it) + "sksp0095" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task rolling-robbers)) + (level-hint-spawn + (game-text-id rolling-beat-lurkers) + "asstvb20" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task rolling-plants)) + (level-hint-spawn + (game-text-id sage-golfclap-i-have-low-expectations) + "sagevb03" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task swamp-flutflut)) + (level-hint-spawn + (game-text-id swamp-finished-with-flutflut) + "asstvb21" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task ogre-boss)) + (level-hint-spawn + (game-text-id ogre-boss-killed) + "asstvb23" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task ogre-end)) + (level-hint-spawn + (game-text-id assistant-finished-mountain-pass-race) + "asstvb25" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task beach-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task jungle-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task misty-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task firecanyon-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task rolling-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task sunken-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task swamp-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task ogre-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task cave-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task snow-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task lavatube-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task citadel-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task village1-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task village2-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= arg0 (game-task village3-buzzer)) + (level-hint-spawn + (game-text-id found-all-scout-flies) + "sksp009k" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (none) + ) + (the int (-> self fact pickup-amount)) + ) + (-> gp-4 ppointer) ) - (-> v1-34 (-> self movie-pos-index)) - (the-as vector #f) + ) + (case (the int (-> self fact pickup-amount)) + (((game-task citadel-sage-blue)) + (send-event (process-by-name "blue-sagecage-1" *active-pool*) 'play-anim) ) - ) - ) - (cond - ((and *debug-segment* (< (-> *fuel-cell-tune-pos* w) 1000000000.0)) - (TODO-RENAME-30 (-> self root-override) *fuel-cell-tune-pos*) - (set-yaw-angle-clear-roll-pitch! - (-> self root-override) - (-> *fuel-cell-tune-pos* w) + (((game-task citadel-sage-red)) + (send-event (process-by-name "red-sagecage-1" *active-pool*) 'play-anim) ) - ) - ((= (-> self movie-pos-index) -1) - ) - (gp-1 - (TODO-RENAME-30 (-> self root-override) gp-1) - (set-yaw-angle-clear-roll-pitch! (-> self root-override) (-> gp-1 w)) - ) - (else - (TODO-RENAME-30 (-> self root-override) (-> *target* control trans)) - (set-yaw-angle-clear-roll-pitch! - (-> self root-override) - (y-angle (-> *target* control)) + (((game-task citadel-sage-yellow)) + (send-event (process-by-name "yellow-sagecage-1" *active-pool*) 'play-anim) ) - (dummy-60 - (-> self root-override) - (the-as float 40960.0) - (the-as float 40960.0) - #f - (the-as uint 1) + (((game-task citadel-sage-green)) + (send-event (process-by-name "green-sagecage-1" *active-pool*) 'play-anim) ) - ) - ) - ) - (spool-push - *art-control* - (-> self victory-anim name) - 0 - self - (the-as float -99.0) - ) - (send-event - *target* - 'get-pickup - (-> self fact pickup-type) - (-> self fact pickup-amount) - ) - (set! (-> self draw bounds w) 32768.0) - (logior! (-> self skel status) 1) - (send-event *target* 'blend-shape #t) - (push-setting! - *setting-control* - self - 'music-volume - 'rel - (-> *setting-control* current music-volume-movie) - 0 - ) - (push-setting! - *setting-control* - self - 'sfx-volume - 'rel - (-> *setting-control* current sfx-volume-movie) - 0 - ) - (push-setting! - *setting-control* - self - 'ambient-volume - 'rel - (-> *setting-control* current ambient-volume-movie) - 0 - ) - (let ((gp-3 (get-process *default-dead-pool* othercam #x4000))) - (when gp-3 - (let ((t9-26 (method-of-type othercam activate))) - (t9-26 (the-as othercam gp-3) self 'othercam (the-as pointer #x70004000)) - ) - (run-now-in-process gp-3 othercam-init-by-other self 10 #f #t) - (-> gp-3 ppointer) - ) - ) - (auto-save-command 'auto-save 0 0 *default-pool*) - (ja-play-spooled-anim - (-> self victory-anim) - (the-as art-joint-anim (-> self draw art-group data 2)) - (the-as art-joint-anim #f) - (the-as (function process-drawable symbol) false-func) - ) - (clear-pending-settings-from-process *setting-control* self 'music-volume) - (clear-pending-settings-from-process *setting-control* self 'sfx-volume) - (clear-pending-settings-from-process *setting-control* self 'ambient-volume) - (send-event *target* 'blend-shape #f) - (send-event *target* 'end-mode) - (send-event *camera* 'no-intro) - (send-event *camera* 'clear-entity) - (ja-channel-set! 0) - (suspend) - (suspend) - (let ((gp-4 (get-process *default-dead-pool* process #x4000))) - (when gp-4 - (let ((t9-39 (method-of-type process activate))) - (t9-39 gp-4 self 'process (the-as pointer #x70004000)) - ) - (run-next-time-in-process - gp-4 - (lambda :behavior collectable - ((arg0 game-task)) - (while - (or - (-> *setting-control* current ambient) - (-> *setting-control* current movie) - (-> *setting-control* current hint) - (str-is-playing?) - ) - (suspend) + (((game-task jungle-eggtop) (game-task snow-eggtop) (game-task snow-ball) (game-task sunken-slide)) + ) + (else + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'show) ) - (cond - ((= arg0 (game-task training-buzzer)) - (level-hint-spawn - (game-text-id training-assistant-found-scout-fly-cell) - "asstvb45" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task training-door)) - (level-hint-spawn - (game-text-id training-eco-opened-door) - "sagevb25" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task beach-ecorocks)) - (level-hint-spawn - (game-text-id beach-collectors-unblocked) - "sagevb01" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task misty-cannon)) - (level-hint-spawn - (game-text-id misty-stopped-lurkers-at-silo) - "sagevb02" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task misty-bike)) - (level-hint-spawn - (game-text-id misty-stopped-balloon-lurkers) - "asstvb03" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task firecanyon-end)) - (level-hint-spawn - (game-text-id fire-canyon-we-made-it) - "sksp0095" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task rolling-robbers)) - (level-hint-spawn - (game-text-id rolling-beat-lurkers) - "asstvb20" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task rolling-plants)) - (level-hint-spawn - (game-text-id sage-golfclap-i-have-low-expectations) - "sagevb03" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task swamp-flutflut)) - (level-hint-spawn - (game-text-id swamp-finished-with-flutflut) - "asstvb21" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task ogre-boss)) - (level-hint-spawn - (game-text-id ogre-boss-killed) - "asstvb23" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task ogre-end)) - (level-hint-spawn - (game-text-id assistant-finished-mountain-pass-race) - "asstvb25" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task beach-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task jungle-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task misty-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task firecanyon-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task rolling-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task sunken-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task swamp-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task ogre-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task cave-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task snow-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task lavatube-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task citadel-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task village1-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task village2-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= arg0 (game-task village3-buzzer)) - (level-hint-spawn - (game-text-id found-all-scout-flies) - "sksp009k" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ) - (none) - ) - (the int (-> self fact pickup-amount)) ) - (-> gp-4 ppointer) - ) + (convert-to-hud-object self (the-as hud (ppointer->process (-> *hud-parts* fuel-cell)))) + (none) ) - (case (the int (-> self fact pickup-amount)) - (((game-task citadel-sage-blue)) - (send-event (process-by-name "blue-sagecage-1" *active-pool*) 'play-anim) - ) - (((game-task citadel-sage-red)) - (send-event (process-by-name "red-sagecage-1" *active-pool*) 'play-anim) - ) - (((game-task citadel-sage-yellow)) - (send-event (process-by-name "yellow-sagecage-1" *active-pool*) 'play-anim) - ) - (((game-task citadel-sage-green)) - (send-event (process-by-name "green-sagecage-1" *active-pool*) 'play-anim) - ) - (((game-task jungle-eggtop) - (game-task snow-eggtop) - (game-task snow-ball) - (game-task sunken-slide) - ) - ) - (else - (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'show) - ) - ) - (convert-to-hud-object - self - (the-as hud (ppointer->process (-> *hud-parts* fuel-cell))) - ) - (none) - ) :post (behavior () - (transform-post) - (if (-> self state-object) - (spawn - (-> self part) - (the-as vector (-> self root-override root-prim prim-core)) - ) + (transform-post) + (if (-> self state-object) + (spawn (-> self part) (the-as vector (-> self root-override root-prim prim-core))) + ) + (none) ) - (none) - ) ) (defmethod initialize fuel-cell ((obj fuel-cell)) (stack-size-set! (-> obj main-thread) 512) - (let - ((s5-0 - (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) - ) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 64)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 transform-index) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 4915.2) + (set-root-prim! s5-0 (the-as collide-shape-prim-group 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 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s5-0 reaction) default-collision-reaction) - (set! - (-> s5-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) - (set! (-> s4-0 prim-core collide-as) (the-as uint 64)) - (set! (-> s4-0 collide-with) (the-as uint 16)) - (set! (-> s4-0 transform-index) 3) - (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 4915.2) - (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) - ) (logior! (-> obj mask) (process-mask actor-pause)) (set! (-> obj actor-pause) #t) (set! (-> obj notify-parent) #f) - (set! - (-> obj fact) - (new 'process 'fact-info obj (pickup-type fuel-cell) (the-as float 0.0)) - ) + (set! (-> obj fact) (new 'process 'fact-info obj (pickup-type fuel-cell) (the-as float 0.0))) (initialize-skeleton obj *fuel-cell-sg* '()) (set! (-> obj base quad) (-> obj root-override trans quad)) (set! (-> obj old-base quad) (-> obj root-override trans quad)) (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 63) obj)) - (set! - (-> obj sound) - (new - 'process - 'ambient-sound - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "powercell-idle") - :volume #x400 - :fo-max 40 - ) - (-> obj root-override trans) - ) - ) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "powercell-idle") + :volume #x400 + :fo-max 40 + ) + (-> obj root-override trans) + ) + ) (set! (-> obj victory-anim) (fuel-cell-pick-anim obj)) obj ) @@ -2806,19 +2132,17 @@ (none) ) -(defbehavior - fuel-cell-init-by-other fuel-cell - ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 entity)) +(defbehavior fuel-cell-init-by-other fuel-cell ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 entity)) (let ((s3-0 (-> arg2 pickup-type)) (f30-0 (-> arg2 pickup-spawn-amount)) ) - (set! (-> self entity) arg3) - (set! (-> self pickup-type) s3-0) - (set! (-> self pickup-amount) f30-0) - (initialize self) - (set! (-> self fact pickup-type) s3-0) - (set! (-> self fact pickup-amount) f30-0) - ) + (set! (-> self entity) arg3) + (set! (-> self pickup-type) s3-0) + (set! (-> self pickup-amount) f30-0) + (initialize self) + (set! (-> self fact pickup-type) s3-0) + (set! (-> self fact pickup-amount) f30-0) + ) (set! (-> self fact options) (-> arg2 options)) (set! (-> self notify-parent) #t) (set! (-> self root-override trans quad) (-> arg0 quad)) @@ -2828,48 +2152,28 @@ (initialize-params self 0 (the-as float 1024.0)) (logclear! (-> self fact options) (fact-options can-collect)) (dummy-47 (-> self root-override)) - (let - ((gp-1 - (res-lump-struct - (-> self entity) - 'movie-pos - structure - :time - (the-as float -1000000000.0) - ) - ) - ) - (cond - ((and *debug-segment* (< (-> *fuel-cell-tune-pos* w) 1000000000.0)) - (set! (-> self jump-pos quad) (-> *fuel-cell-tune-pos* quad)) - (set! (-> self jump-pos y) (+ 4096.0 (-> self jump-pos y))) - (go-virtual jump) - ) - ((and - gp-1 - (zero? - (logand - (the-as - int - (res-lump-value - (-> self entity) - 'options - uint128 - :time - (the-as float -1000000000.0) - ) - ) - 128 - ) + (let ((gp-1 (res-lump-struct (-> self entity) 'movie-pos structure :time (the-as float -1000000000.0)))) + (cond + ((and *debug-segment* (< (-> *fuel-cell-tune-pos* w) 1000000000.0)) + (set! (-> self jump-pos quad) (-> *fuel-cell-tune-pos* quad)) + (set! (-> self jump-pos y) (+ 4096.0 (-> self jump-pos y))) + (go-virtual jump) + ) + ((and + gp-1 + (zero? (logand + (the-as int (res-lump-value (-> self entity) 'options uint128 :time (the-as float -1000000000.0))) + 128 + ) + ) + (zero? (logand (-> self fact options) (fact-options fop7))) + ) + (set! (-> self jump-pos quad) (-> (the-as vector gp-1) quad)) + (set! (-> self jump-pos y) (+ 4096.0 (-> self jump-pos y))) + (go-virtual jump) ) - (zero? (logand (-> self fact options) (fact-options fop7))) ) - (set! (-> self jump-pos quad) (-> (the-as vector gp-1) quad)) - (set! (-> self jump-pos y) (+ 4096.0 (-> self jump-pos y))) - (go-virtual jump) - ) ) - ) (set! (-> self event-hook) (-> (method-of-object self wait) event)) (go-virtual wait) (none) @@ -2878,65 +2182,52 @@ (defstate fuel-cell-clone-anim (fuel-cell) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('pickup) - (when (!= (-> self next-state name) 'pickup) - (if (and (> arg1 0) (-> arg3 param 0)) - (TODO-RENAME-30 - (-> self root-override) - (the-as vector (-> arg3 param 0)) + (case arg2 + (('pickup) + (when (!= (-> self next-state name) 'pickup) + (if (and (> arg1 0) (-> arg3 param 0)) + (TODO-RENAME-30 (-> self root-override) (the-as vector (-> arg3 param 0))) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (go-virtual pickup #f (the-as handle #f)) ) - ) - (logclear! (-> self mask) (process-mask actor-pause)) - (go-virtual pickup #f (the-as handle #f)) + ) + (('trans) + (set! (-> self root-override trans quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self base quad) (-> self root-override trans quad)) + (dummy-47 (-> self root-override)) + ) + (('stop-cloning 'notify) + (set! (-> self root-override trans quad) (-> self draw origin quad)) + (set! (-> self base quad) (-> self root-override trans quad)) + (ja-channel-set! 1) + (let ((v1-20 (-> self skel root-channel 0))) + (set! (-> v1-20 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + ) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (vector-reset! (-> self draw origin)) + (go-virtual wait) ) ) - (('trans) - (set! - (-> self root-override trans quad) - (-> (the-as vector (-> arg3 param 0)) quad) - ) - (set! (-> self base quad) (-> self root-override trans quad)) - (dummy-47 (-> self root-override)) - ) - (('stop-cloning 'notify) - (set! (-> self root-override trans quad) (-> self draw origin quad)) - (set! (-> self base quad) (-> self root-override trans quad)) - (ja-channel-set! 1) - (let ((v1-20 (-> self skel root-channel 0))) - (set! - (-> v1-20 frame-group) - (the-as art-joint-anim (-> self draw art-group data 2)) - ) - ) - (set! (-> self draw status) (logand -3 (-> self draw status))) - (vector-reset! (-> self draw origin)) - (go-virtual wait) - ) ) - ) :exit (behavior () - (if (-> self actor-pause) - (logior! (-> self mask) (process-mask actor-pause)) + (if (-> self actor-pause) + (logior! (-> self mask) (process-mask actor-pause)) + ) + (set! (-> self skel status) (logand -33 (-> self skel status))) + (none) ) - (set! (-> self skel status) (logand -33 (-> self skel status))) - (none) - ) :code (behavior ((arg0 handle)) - (logclear! (-> self mask) (process-mask actor-pause)) - (clone-anim arg0 3 #t "") - (format #t "ERROR: clone-anim returned in fuel-cell~%") - (deactivate self) - (none) - ) + (logclear! (-> self mask) (process-mask actor-pause)) + (clone-anim arg0 3 #t "") + (format #t "ERROR: clone-anim returned in fuel-cell~%") + (deactivate self) + (none) + ) :post - (behavior () - (dummy-47 (-> self root-override)) - (animate self) - (none) - ) + (behavior () (dummy-47 (-> self root-override)) (animate self) (none)) ) (defbehavior fuel-cell-init-as-clone fuel-cell ((arg0 handle) (arg1 int)) @@ -2946,15 +2237,7 @@ (initialize-params self 0 (the-as float 1024.0)) (logclear! (-> self mask) (process-mask actor-pause)) (set! (-> self actor-pause) #f) - (sound-play-by-name - (static-sound-name "cell-prize") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) + (sound-play-by-name (static-sound-name "cell-prize") (new-sound-id) 1024 0 0 1 #t) (go fuel-cell-clone-anim arg0) (none) ) @@ -2980,38 +2263,25 @@ (defmethod animate buzzer ((obj buzzer)) (quaternion-rotate-y! - (-> obj root-override quat) - (-> obj root-override quat) - (* 40049.777 (-> *display* seconds-per-frame)) - ) + (-> obj root-override quat) + (-> obj root-override quat) + (* 40049.777 (-> *display* seconds-per-frame)) + ) (let ((a0-2 (-> obj skel root-channel 0))) - (set! (-> a0-2 param 0) 1.0) - (joint-control-channel-group-eval! - a0-2 - (the-as art-joint-anim #f) - num-func-loop! + (set! (-> a0-2 param 0) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-loop!) ) - ) (let ((f0-3 (y-angle (-> obj root-override)))) - (set! (-> *part-id-table* 239 init-specs 4 initial-valuef) (+ 16384.0 f0-3)) - (set! (-> *part-id-table* 240 init-specs 4 initial-valuef) (+ 16384.0 f0-3)) - ) - (spawn - (-> obj part) - (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 15)) - ) - (if (nonzero? (-> obj sound)) - (update! (-> obj sound)) - ) - (if (and *target* (>= (-> *target* fact-info-target buzzer) 6.0)) - (spool-push - *art-control* - (-> obj victory-anim name) - 0 - obj - (the-as float -99.0) + (set! (-> *part-id-table* 239 init-specs 4 initial-valuef) (+ 16384.0 f0-3)) + (set! (-> *part-id-table* 240 init-specs 4 initial-valuef) (+ 16384.0 f0-3)) ) - ) + (spawn (-> obj part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 15))) + (if (nonzero? (-> obj sound)) + (update! (-> obj sound)) + ) + (if (and *target* (>= (-> *target* fact-info-target buzzer) 6.0)) + (spool-push *art-control* (-> obj victory-anim name) 0 obj (the-as float -99.0)) + ) 0 (none) ) @@ -3020,246 +2290,185 @@ :virtual #t :code (behavior () - (case - (get-reminder - (get-task-control - (the-as game-task (logand (the int (-> self fact pickup-amount)) #xffff)) + (case (get-reminder (get-task-control (the-as game-task (logand (the int (-> self fact pickup-amount)) #xffff))) 0) + ((127) + (go-virtual pickup #t (the-as handle #f)) + ) ) - 0 - ) - - ((127) - (go-virtual pickup #t (the-as handle #f)) + (while #t + (transform-post) + (animate self) + (suspend) ) + (none) ) - (while #t - (transform-post) - (animate self) - (suspend) - ) - (none) - ) ) (defstate pickup (buzzer) :virtual #t :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'notify) - (process-entity-status! self (entity-perm-status dead) #t) - ) - ) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'notify) + (process-entity-status! self (entity-perm-status dead) #t) + ) + ) + ) ) - ) :enter (behavior ((arg0 object) (arg1 handle)) - (set! (-> self pickup-handle) arg1) - (logclear! (-> self mask) (process-mask actor-pause)) - (none) - ) + (set! (-> self pickup-handle) arg1) + (logclear! (-> self mask) (process-mask actor-pause)) + (none) + ) :code (behavior ((arg0 object) (arg1 handle)) - (logclear! (-> self mask) (process-mask actor-pause)) - (process-entity-status! self (entity-perm-status complete) #t) - (sound-play-by-name - (static-sound-name "buzzer-pickup") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - (case (-> (level-get-target-inside *level*) name) - (('training) - (level-hint-spawn - (game-text-id training-assistant-found-scout-fly) - "asstvb44" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - (('firecanyon) - (level-hint-spawn - (game-text-id collectables-theres-scout-flys-here-too) - "sksp0096" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - (else - (level-hint-spawn - (game-text-id collectables-scout-flies-red-boxes) - "sksp009j" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ) - (ja-channel-set! 0) - (clear-collide-with-as (-> self root-override)) - (if (nonzero? (-> self sound)) - (stop! (-> self sound)) - ) - (when (not arg0) - (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) - (v1-18 (when s5-1 - (let ((t9-11 (method-of-type manipy activate))) - (t9-11 - (the-as manipy s5-1) - *entity-pool* - 'manipy - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - s5-1 - manipy-init - (-> self root-override trans) - #f - *buzzer-sg* - #f - ) - (-> s5-1 ppointer) - ) - ) - ) - (send-event - (ppointer->process v1-18) - 'become-hud-object - (ppointer->process (-> *hud-parts* buzzers)) - ) - ) - ) - (let* ((s5-2 (logand (the int (-> self fact pickup-amount)) #xffff)) - (s4-1 (get-task-control (the-as game-task s5-2))) - ) - (if (nonzero? s5-2) - (close-specific-task! (the-as game-task s5-2) (task-status need-hint)) - ) - (when - (and - (= (get-reminder s4-1 0) 127) - (and - (-> self entity) - (not (task-complete? *game-info* (the-as game-task s5-2))) - ) - ) - (if - (and - *target* - (logtest? (-> *target* control root-prim prim-core action) #x7200) - (not arg0) - ) - (logior! (-> self fact options) (fact-options fop6 fop7)) - ) - (let - ((v1-47 - (birth-pickup-at-point - (vector+! - (new 'stack-no-clear 'vector) - (-> self root-override trans) - (new 'static 'vector :y 4096.0 :w 1.0) - ) - (pickup-type fuel-cell) - (the float s5-2) - #f - self - (-> self fact) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status complete) #t) + (sound-play-by-name (static-sound-name "buzzer-pickup") (new-sound-id) 1024 0 0 1 #t) + (case (-> (level-get-target-inside *level*) name) + (('training) + (level-hint-spawn + (game-text-id training-assistant-found-scout-fly) + "asstvb44" + (the-as entity #f) + *entity-pool* + (game-task none) ) - ) ) - (when v1-47 - (send-event - (ppointer->process v1-47) - 'movie-pos - (-> self movie-pos-index) - ) - (ja-channel-set! 0) - (clear-collide-with-as (-> self root-override)) - (ja-post) - (while (-> self child) - (suspend) - ) + (('firecanyon) + (level-hint-spawn + (game-text-id collectables-theres-scout-flys-here-too) + "sksp0096" + (the-as entity #f) + *entity-pool* + (game-task none) + ) ) + (else + (level-hint-spawn + (game-text-id collectables-scout-flies-red-boxes) + "sksp009j" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) ) - ) - ) - (when (-> self notify-parent) - (let ((gp-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> gp-1 from) self) - (set! (-> gp-1 num-params) 1) - (set! (-> gp-1 message) 'notify) - (set! (-> gp-1 param 0) (the-as uint 'pickup)) - (let ((s5-3 send-event-function) - (s4-2 (ppointer->process (-> self parent))) - ) - (s5-3 (if (and (nonzero? s4-2) (type-type? (-> s4-2 type) process)) - s4-2 + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (when (not arg0) + (let* ((s5-1 (get-process *default-dead-pool* manipy #x4000)) + (v1-18 (when s5-1 + (let ((t9-11 (method-of-type manipy activate))) + (t9-11 (the-as manipy s5-1) *entity-pool* 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 manipy-init (-> self root-override trans) #f *buzzer-sg* #f) + (-> s5-1 ppointer) + ) + ) ) - gp-1 - ) + (send-event (ppointer->process v1-18) 'become-hud-object (ppointer->process (-> *hud-parts* buzzers))) + ) ) - ) + (let* ((s5-2 (logand (the int (-> self fact pickup-amount)) #xffff)) + (s4-1 (get-task-control (the-as game-task s5-2))) + ) + (if (nonzero? s5-2) + (close-specific-task! (the-as game-task s5-2) (task-status need-hint)) + ) + (when (and + (= (get-reminder s4-1 0) 127) + (and (-> self entity) (not (task-complete? *game-info* (the-as game-task s5-2)))) + ) + (if (and *target* (logtest? (-> *target* control root-prim prim-core action) #x7200) (not arg0)) + (logior! (-> self fact options) (fact-options fop6 fop7)) + ) + (let ((v1-47 + (birth-pickup-at-point + (vector+! (new 'stack-no-clear 'vector) (-> self root-override trans) (new 'static 'vector :y 4096.0 :w 1.0)) + (pickup-type fuel-cell) + (the float s5-2) + #f + self + (-> self fact) + ) + ) + ) + (when v1-47 + (send-event (ppointer->process v1-47) 'movie-pos (-> self movie-pos-index)) + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (while (-> self child) + (suspend) + ) + ) + ) + ) + ) + (when (-> self notify-parent) + (let ((gp-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> gp-1 from) self) + (set! (-> gp-1 num-params) 1) + (set! (-> gp-1 message) 'notify) + (set! (-> gp-1 param 0) (the-as uint 'pickup)) + (let ((s5-3 send-event-function) + (s4-2 (ppointer->process (-> self parent))) + ) + (s5-3 + (if (and (nonzero? s4-2) (type-type? (-> s4-2 type) process)) + s4-2 + ) + gp-1 + ) + ) + ) + ) + (none) ) - (none) - ) ) (defmethod initialize buzzer ((obj buzzer)) - (let - ((s5-0 - (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) - ) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set-vector! (-> s4-0 local-sphere) 0.0 2457.6 0.0 4915.2) + (set-root-prim! s5-0 (the-as collide-shape-prim-group 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 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s5-0 reaction) default-collision-reaction) - (set! - (-> s5-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) - (set! (-> s4-0 prim-core collide-as) (the-as uint #x8040)) - (set! (-> s4-0 collide-with) (the-as uint 16)) - (set-vector! (-> s4-0 local-sphere) 0.0 2457.6 0.0 4915.2) - (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) - ) (logior! (-> obj mask) (process-mask actor-pause)) (set! (-> obj actor-pause) #t) (set! (-> obj notify-parent) #f) - (set! - (-> obj fact) - (new 'process 'fact-info obj (pickup-type buzzer) (the-as float 0.0)) - ) + (set! (-> obj fact) (new 'process 'fact-info obj (pickup-type buzzer) (the-as float 0.0))) (initialize-skeleton obj *buzzer-sg* '()) (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 65) obj)) - (set! - (-> obj sound) - (new - 'process - 'ambient-sound - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "buzzer") - :volume #x400 - :fo-max 40 - ) - (-> obj root-override trans) - ) - ) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "buzzer") + :volume #x400 + :fo-max 40 + ) + (-> obj root-override trans) + ) + ) (set! (-> obj victory-anim) (fuel-cell-pick-anim obj)) obj ) @@ -3271,30 +2480,24 @@ (set! (-> obj collect-timeout) 600) (dummy-47 (-> obj root-override)) (update-trans! (-> obj sound) (-> obj root-override trans)) - (if - (and - (-> obj entity) - (logtest? (-> obj entity extra perm status) (entity-perm-status complete)) - ) - (go (method-of-object obj wait)) - (go (method-of-object obj pickup) #t (the-as handle #f)) - ) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go (method-of-object obj wait)) + (go (method-of-object obj pickup) #t (the-as handle #f)) + ) (none) ) -(defbehavior - buzzer-init-by-other buzzer - ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 entity)) +(defbehavior buzzer-init-by-other buzzer ((arg0 vector) (arg1 vector) (arg2 fact-info) (arg3 entity)) (let ((s3-0 (-> arg2 pickup-type)) (f30-0 (-> arg2 pickup-spawn-amount)) ) - (set! (-> self entity) arg3) - (set! (-> self pickup-type) s3-0) - (set! (-> self pickup-amount) f30-0) - (initialize self) - (set! (-> self fact pickup-type) s3-0) - (set! (-> self fact pickup-amount) f30-0) - ) + (set! (-> self entity) arg3) + (set! (-> self pickup-type) s3-0) + (set! (-> self pickup-amount) f30-0) + (initialize self) + (set! (-> self fact pickup-type) s3-0) + (set! (-> self fact pickup-amount) f30-0) + ) (set! (-> self fact options) (-> arg2 options)) (set! (-> self notify-parent) #t) (set! (-> self root-override trans quad) (-> arg0 quad)) @@ -3310,45 +2513,35 @@ ) (defmethod init-from-entity! eco ((obj eco) (arg0 entity-actor)) - (let - ((v1-2 - (res-lump-value - (-> obj entity) - 'eco-info - pickup-type - :time - (the-as float -1000000000.0) - ) - ) + (let ((v1-2 (res-lump-value (-> obj entity) 'eco-info pickup-type :time (the-as float -1000000000.0)))) + (set! (-> obj type) (cond + ((= v1-2 (pickup-type eco-blue)) + eco-blue + ) + ((= v1-2 (pickup-type eco-red)) + eco-red + ) + ((= v1-2 (pickup-type eco-yellow)) + eco-yellow + ) + ((= v1-2 (pickup-type eco-green)) + health + ) + ((= v1-2 (pickup-type money)) + money + ) + ((= v1-2 (pickup-type fuel-cell)) + fuel-cell + ) + ((= v1-2 (pickup-type buzzer)) + buzzer + ) + (else + eco-pill + ) + ) + ) ) - (set! (-> obj type) (cond - ((= v1-2 (pickup-type eco-blue)) - eco-blue - ) - ((= v1-2 (pickup-type eco-red)) - eco-red - ) - ((= v1-2 (pickup-type eco-yellow)) - eco-yellow - ) - ((= v1-2 (pickup-type eco-green)) - health - ) - ((= v1-2 (pickup-type money)) - money - ) - ((= v1-2 (pickup-type fuel-cell)) - fuel-cell - ) - ((= v1-2 (pickup-type buzzer)) - buzzer - ) - (else - eco-pill - ) - ) - ) - ) (init-from-entity! obj arg0) (none) ) @@ -3361,414 +2554,281 @@ ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 356] ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 363] ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 122] -(defbehavior - birth-pickup-at-point process - ((arg0 vector) - (arg1 pickup-type) - (arg2 float) - (arg3 symbol) - (arg4 process-drawable) - (arg5 fact-info) - ) +(defbehavior birth-pickup-at-point process ((arg0 vector) (arg1 pickup-type) (arg2 float) (arg3 symbol) (arg4 process-drawable) (arg5 fact-info)) (local-vars - (v1-2 basic) - (v1-28 symbol) - (v1-34 symbol) - (v1-40 symbol) - (v1-46 symbol) - (v1-52 symbol) - (v1-58 symbol) - (v1-64 symbol) - (v1-71 symbol) - (sv-32 fact-info) - (sv-48 int) - (sv-64 process) - (sv-80 process) - (sv-96 process) - (sv-112 process) - (sv-128 process) - (sv-144 process) - (sv-160 process) - (sv-176 process) - (sv-192 (pointer process)) - ) + (v1-2 basic) + (v1-28 symbol) + (v1-34 symbol) + (v1-40 symbol) + (v1-46 symbol) + (v1-52 symbol) + (v1-58 symbol) + (v1-64 symbol) + (v1-71 symbol) + (sv-32 fact-info) + (sv-48 int) + (sv-64 process) + (sv-80 process) + (sv-96 process) + (sv-112 process) + (sv-128 process) + (sv-144 process) + (sv-160 process) + (sv-176 process) + (sv-192 (pointer process)) + ) (set! sv-32 arg5) (let ((s1-0 (new-stack-vector0)) (t9-0 (method-of-type res-lump get-property-value-float)) ) - (let ((v1-1 sv-32)) - (b! (not v1-1) cfg-3 :likely-delay (set! v1-2 sv-32)) - ) - (set! v1-2 (nonzero? (-> sv-32 process))) - (label cfg-3) - (let ((f30-0 (t9-0 (if v1-2 + (let ((v1-1 sv-32)) + (b! (not v1-1) cfg-3 :likely-delay (set! v1-2 sv-32)) + ) + (set! v1-2 (nonzero? (-> sv-32 process))) + (label cfg-3) + (let ((f30-0 (t9-0 + (if v1-2 (-> sv-32 process entity) ) - 'pickup-radius - 'interp - (the-as float -1000000000.0) - (the-as float (cond - ((= arg1 (pickup-type buzzer)) - 0.0 - ) - ((= arg2 1.0) - 409.6 - ) - (else - 8192.0 - ) - ) - ) - (the-as (pointer res-tag) #f) - *res-static-buf* + 'pickup-radius + 'interp + (the-as float -1000000000.0) + (the-as float (cond + ((= arg1 (pickup-type buzzer)) + 0.0 + ) + ((= arg2 1.0) + 409.6 + ) + (else + 8192.0 + ) + ) + ) + (the-as (pointer res-tag) #f) + *res-static-buf* + ) ) ) - ) - (set! sv-192 (the-as (pointer process) #f)) - (set! sv-48 (the int arg2)) - (let ((s0-0 (new 'static 'fact-info))) - (set! (-> s0-0 options) (fact-options)) - (if sv-32 - (mem-copy! (&-> s0-0 type) (&-> sv-32 type) 40) - ) - (set! (-> s0-0 pickup-type) arg1) - (set! (-> s0-0 pickup-spawn-amount) 1.0) - (while (> sv-48 0) - (set! sv-48 (+ sv-48 -1)) - (when arg3 - (set-vector! s1-0 0.0 57001.605 f30-0 1.0) - (vector-rotate-around-y! - s1-0 - s1-0 - (/ (* 65536.0 (the float sv-48)) arg2) + (set! sv-192 (the-as (pointer process) #f)) + (set! sv-48 (the int arg2)) + (let ((s0-0 (new 'static 'fact-info))) + (set! (-> s0-0 options) (fact-options)) + (if sv-32 + (mem-copy! (&-> s0-0 type) (&-> sv-32 type) 40) + ) + (set! (-> s0-0 pickup-type) arg1) + (set! (-> s0-0 pickup-spawn-amount) 1.0) + (while (> sv-48 0) + (set! sv-48 (+ sv-48 -1)) + (when arg3 + (set-vector! s1-0 0.0 57001.605 f30-0 1.0) + (vector-rotate-around-y! s1-0 s1-0 (/ (* 65536.0 (the float sv-48)) arg2)) + ) + (let ((v1-25 arg1)) + (cond + ((= v1-25 (pickup-type eco-yellow)) + (set! sv-64 (get-process *pickup-dead-pool* eco-yellow #x4000)) + (set! v1-28 (when sv-64 + (set! sv-192 (the-as (pointer process) v1-28)) + (let ((t9-4 (method-of-type eco-yellow activate))) + (t9-4 (the-as eco-yellow sv-64) arg4 'eco-yellow (the-as pointer #x70004000)) + ) + (run-now-in-process sv-64 initialize-eco-by-other arg0 s1-0 s0-0) + (set! sv-192 (-> sv-64 ppointer)) + v1-28 + ) + ) + sv-192 + ) + ((= v1-25 (pickup-type eco-red)) + (set! sv-80 (get-process *pickup-dead-pool* eco-red #x4000)) + (set! v1-34 (when sv-80 + (set! sv-192 (the-as (pointer process) v1-34)) + (let ((t9-7 (method-of-type eco-red activate))) + (t9-7 (the-as eco-red sv-80) arg4 'eco-red (the-as pointer #x70004000)) + ) + (run-now-in-process sv-80 initialize-eco-by-other arg0 s1-0 s0-0) + (set! sv-192 (-> sv-80 ppointer)) + v1-34 + ) + ) + (level-hint-spawn + (game-text-id sidekick-hint-misty-get-red-eco) + "sksp0071" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ((= v1-25 (pickup-type eco-blue)) + (set! sv-96 (get-process *pickup-dead-pool* eco-blue #x4000)) + (set! v1-40 (when sv-96 + (set! sv-192 (the-as (pointer process) v1-40)) + (let ((t9-11 (method-of-type eco-blue activate))) + (t9-11 (the-as eco-blue sv-96) arg4 'eco-blue (the-as pointer #x70004000)) + ) + (run-now-in-process sv-96 initialize-eco-by-other arg0 s1-0 s0-0) + (set! sv-192 (-> sv-96 ppointer)) + v1-40 + ) + ) + sv-192 + ) + ((= v1-25 (pickup-type eco-green)) + (set! sv-112 (get-process *pickup-dead-pool* health #x4000)) + (set! v1-46 (when sv-112 + (set! sv-192 (the-as (pointer process) v1-46)) + (let ((t9-14 (method-of-type health activate))) + (t9-14 (the-as health sv-112) arg4 'health (the-as pointer #x70004000)) + ) + (run-now-in-process sv-112 initialize-eco-by-other arg0 s1-0 s0-0) + (set! sv-192 (-> sv-112 ppointer)) + v1-46 + ) + ) + sv-192 + ) + ((= v1-25 (pickup-type eco-pill)) + (set! sv-128 (get-process *pickup-dead-pool* eco-pill #x4000)) + (set! v1-52 (when sv-128 + (set! sv-192 (the-as (pointer process) v1-52)) + (let ((t9-17 (method-of-type eco-pill activate))) + (t9-17 (the-as eco-pill sv-128) arg4 'eco-pill (the-as pointer #x70004000)) + ) + (run-now-in-process sv-128 initialize-eco-by-other arg0 s1-0 s0-0) + (set! sv-192 (-> sv-128 ppointer)) + v1-52 + ) + ) + sv-192 + ) + ((= v1-25 (pickup-type money)) + (set! sv-144 (get-process *pickup-dead-pool* money #x4000)) + (set! v1-58 (when sv-144 + (set! sv-192 (the-as (pointer process) v1-58)) + (let ((t9-20 (method-of-type money activate))) + (t9-20 (the-as money sv-144) arg4 'money (the-as pointer #x70004000)) + ) + (run-now-in-process sv-144 money-init-by-other arg0 s1-0 s0-0 (-> self entity)) + (set! sv-192 (-> sv-144 ppointer)) + v1-58 + ) + ) + sv-192 + ) + ((= v1-25 (pickup-type fuel-cell)) + (set! (-> s0-0 pickup-spawn-amount) arg2) + (set! sv-160 (get-process *pickup-dead-pool* fuel-cell #x4000)) + (set! v1-64 (when sv-160 + (set! sv-192 (the-as (pointer process) v1-64)) + (let ((t9-23 (method-of-type fuel-cell activate))) + (t9-23 (the-as fuel-cell sv-160) arg4 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process sv-160 fuel-cell-init-by-other arg0 s1-0 s0-0 (-> self entity)) + (set! sv-192 (-> sv-160 ppointer)) + v1-64 + ) + ) + (set! sv-48 0) + sv-48 + ) + ((= v1-25 (pickup-type buzzer)) + (set! (-> s0-0 pickup-spawn-amount) arg2) + (set! sv-176 (get-process *pickup-dead-pool* buzzer #x4000)) + (set! v1-71 (when sv-176 + (set! sv-192 (the-as (pointer process) v1-71)) + (let ((t9-26 (method-of-type buzzer activate))) + (t9-26 (the-as buzzer sv-176) arg4 'buzzer (the-as pointer #x70004000)) + ) + (run-now-in-process sv-176 buzzer-init-by-other arg0 s1-0 s0-0 (-> self entity)) + (set! sv-192 (-> sv-176 ppointer)) + v1-71 + ) + ) + (set! sv-48 0) + sv-48 + ) + (else + (format 0 "ERROR: unknown type of eco ~d~%" arg1) + #f + ) + ) + ) + ) ) - ) - (let ((v1-25 arg1)) - (cond - ((= v1-25 (pickup-type eco-yellow)) - (set! sv-64 (get-process *pickup-dead-pool* eco-yellow #x4000)) - (set! v1-28 (when sv-64 - (set! sv-192 (the-as (pointer process) v1-28)) - (let ((t9-4 (method-of-type eco-yellow activate))) - (t9-4 - (the-as eco-yellow sv-64) - arg4 - 'eco-yellow - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - sv-64 - initialize-eco-by-other - arg0 - s1-0 - s0-0 - ) - (set! sv-192 (-> sv-64 ppointer)) - v1-28 - ) - ) - sv-192 - ) - ((= v1-25 (pickup-type eco-red)) - (set! sv-80 (get-process *pickup-dead-pool* eco-red #x4000)) - (set! v1-34 (when sv-80 - (set! sv-192 (the-as (pointer process) v1-34)) - (let ((t9-7 (method-of-type eco-red activate))) - (t9-7 - (the-as eco-red sv-80) - arg4 - 'eco-red - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - sv-80 - initialize-eco-by-other - arg0 - s1-0 - s0-0 - ) - (set! sv-192 (-> sv-80 ppointer)) - v1-34 - ) - ) - (level-hint-spawn - (game-text-id sidekick-hint-misty-get-red-eco) - "sksp0071" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - ) - ((= v1-25 (pickup-type eco-blue)) - (set! sv-96 (get-process *pickup-dead-pool* eco-blue #x4000)) - (set! v1-40 (when sv-96 - (set! sv-192 (the-as (pointer process) v1-40)) - (let ((t9-11 (method-of-type eco-blue activate))) - (t9-11 - (the-as eco-blue sv-96) - arg4 - 'eco-blue - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - sv-96 - initialize-eco-by-other - arg0 - s1-0 - s0-0 - ) - (set! sv-192 (-> sv-96 ppointer)) - v1-40 - ) - ) - sv-192 - ) - ((= v1-25 (pickup-type eco-green)) - (set! sv-112 (get-process *pickup-dead-pool* health #x4000)) - (set! v1-46 (when sv-112 - (set! sv-192 (the-as (pointer process) v1-46)) - (let ((t9-14 (method-of-type health activate))) - (t9-14 - (the-as health sv-112) - arg4 - 'health - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - sv-112 - initialize-eco-by-other - arg0 - s1-0 - s0-0 - ) - (set! sv-192 (-> sv-112 ppointer)) - v1-46 - ) - ) - sv-192 - ) - ((= v1-25 (pickup-type eco-pill)) - (set! sv-128 (get-process *pickup-dead-pool* eco-pill #x4000)) - (set! v1-52 (when sv-128 - (set! sv-192 (the-as (pointer process) v1-52)) - (let ((t9-17 (method-of-type eco-pill activate))) - (t9-17 - (the-as eco-pill sv-128) - arg4 - 'eco-pill - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - sv-128 - initialize-eco-by-other - arg0 - s1-0 - s0-0 - ) - (set! sv-192 (-> sv-128 ppointer)) - v1-52 - ) - ) - sv-192 - ) - ((= v1-25 (pickup-type money)) - (set! sv-144 (get-process *pickup-dead-pool* money #x4000)) - (set! v1-58 (when sv-144 - (set! sv-192 (the-as (pointer process) v1-58)) - (let ((t9-20 (method-of-type money activate))) - (t9-20 - (the-as money sv-144) - arg4 - 'money - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - sv-144 - money-init-by-other - arg0 - s1-0 - s0-0 - (-> self entity) - ) - (set! sv-192 (-> sv-144 ppointer)) - v1-58 - ) - ) - sv-192 - ) - ((= v1-25 (pickup-type fuel-cell)) - (set! (-> s0-0 pickup-spawn-amount) arg2) - (set! sv-160 (get-process *pickup-dead-pool* fuel-cell #x4000)) - (set! v1-64 (when sv-160 - (set! sv-192 (the-as (pointer process) v1-64)) - (let ((t9-23 (method-of-type fuel-cell activate))) - (t9-23 - (the-as fuel-cell sv-160) - arg4 - 'fuel-cell - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - sv-160 - fuel-cell-init-by-other - arg0 - s1-0 - s0-0 - (-> self entity) - ) - (set! sv-192 (-> sv-160 ppointer)) - v1-64 - ) - ) - (set! sv-48 0) - sv-48 - ) - ((= v1-25 (pickup-type buzzer)) - (set! (-> s0-0 pickup-spawn-amount) arg2) - (set! sv-176 (get-process *pickup-dead-pool* buzzer #x4000)) - (set! v1-71 (when sv-176 - (set! sv-192 (the-as (pointer process) v1-71)) - (let ((t9-26 (method-of-type buzzer activate))) - (t9-26 - (the-as buzzer sv-176) - arg4 - 'buzzer - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - sv-176 - buzzer-init-by-other - arg0 - s1-0 - s0-0 - (-> self entity) - ) - (set! sv-192 (-> sv-176 ppointer)) - v1-71 - ) - ) - (set! sv-48 0) - sv-48 - ) - (else - (format 0 "ERROR: unknown type of eco ~d~%" arg1) - #f - ) - ) - ) ) - ) ) - ) sv-192 ) -;; WARN: Expression building failed: Function (method 9 fact-info) has a return type of none, but the expression builder found a return statement. -(defmethod - drop-pickup - fact-info - ((obj fact-info) - (arg0 symbol) - (arg1 process-tree) - (arg2 fact-info) - (arg3 int) - ) +(defmethod drop-pickup fact-info ((obj fact-info) (arg0 symbol) (arg1 process-tree) (arg2 fact-info) (arg3 int)) (let ((s3-0 (-> obj pickup-type)) (f30-0 (-> obj pickup-amount)) ) - (when (= s3-0 (pickup-type eco-pill-random)) - f30-0 - (let ((s1-0 (get-death-count *game-info* #f))) - (set! s3-0 (pickup-type eco-pill)) - (set! f30-0 (cond - ((and - (= s1-0 1) - *target* - (and - (>= 1.0 (-> *target* fact-info-target health)) - (rand-vu-percent? (the-as float 0.1)) - ) - ) - (set! s3-0 (pickup-type eco-green)) - 1.0 - ) - ((and - (< 1 s1-0) - *target* - (and - (>= 2.0 (-> *target* fact-info-target health)) - (rand-vu-percent? (the-as float 0.05)) - ) - ) - (set! s3-0 (pickup-type eco-green)) - 1.0 - ) - ((< 20 *eco-pill-count*) - (return #f) - f30-0 - ) - ((< 10 *eco-pill-count*) - 1.0 - ) - ((type-type? (-> obj type) fact-info-enemy) - (+ - (rand-vu-float-range (the-as float 3.0) (+ 5.0 f30-0)) - (the float arg3) - ) - ) - (else - (+ - (rand-vu-float-range (the-as float 2.0) (+ 3.0 f30-0)) - (the float arg3) - ) - ) - ) - ) - ) - ) - (let ((s2-1 (new 'stack-no-clear 'vector))) - (set! (-> s2-1 quad) (-> obj process root trans quad)) - (set! (-> s2-1 y) (+ 12288.0 (-> s2-1 y))) - (let ((s1-1 (new 'stack-no-clear 'collide-tri-result))) - (if - (>= - (fill-and-probe-using-y-probe - *collide-cache* - s2-1 - (the-as float 81920.0) - (the-as uint 1) - (the-as process #f) - s1-1 - (the-as uint 1) + (when (= s3-0 (pickup-type eco-pill-random)) + f30-0 + (let ((s1-0 (get-death-count *game-info* #f))) + (set! s3-0 (pickup-type eco-pill)) + (set! f30-0 (cond + ((and + (= s1-0 1) + *target* + (and (>= 1.0 (-> *target* fact-info-target health)) (rand-vu-percent? (the-as float 0.1))) + ) + (set! s3-0 (pickup-type eco-green)) + 1.0 + ) + ((and + (< 1 s1-0) + *target* + (and (>= 2.0 (-> *target* fact-info-target health)) (rand-vu-percent? (the-as float 0.05))) + ) + (set! s3-0 (pickup-type eco-green)) + 1.0 + ) + ((< 20 *eco-pill-count*) + (return (the-as (pointer process) #f)) + f30-0 + ) + ((< 10 *eco-pill-count*) + 1.0 + ) + ((type-type? (-> obj type) fact-info-enemy) + (+ (rand-vu-float-range (the-as float 3.0) (+ 5.0 f30-0)) (the float arg3)) + ) + (else + (+ (rand-vu-float-range (the-as float 2.0) (+ 3.0 f30-0)) (the float arg3)) + ) + ) + ) ) - 0.0 - ) - (set! (-> s2-1 quad) (-> s1-1 intersect quad)) - (set! (-> s2-1 quad) (-> obj process root trans quad)) ) - ) - (if (= (the-as int s3-0) 6) - (set! (-> s2-1 y) (+ 6144.0 (-> s2-1 y))) - ) - (birth-pickup-at-point - s2-1 - (the-as pickup-type s3-0) - f30-0 - arg0 - (the-as process-drawable arg1) - obj - ) + (let ((s2-1 (new 'stack-no-clear 'vector))) + (set! (-> s2-1 quad) (-> obj process root trans quad)) + (set! (-> s2-1 y) (+ 12288.0 (-> s2-1 y))) + (let ((s1-1 (new 'stack-no-clear 'collide-tri-result))) + (if (>= (fill-and-probe-using-y-probe + *collide-cache* + s2-1 + (the-as float 81920.0) + (the-as uint 1) + (the-as process #f) + s1-1 + (the-as uint 1) + ) + 0.0 + ) + (set! (-> s2-1 quad) (-> s1-1 intersect quad)) + (set! (-> s2-1 quad) (-> obj process root trans quad)) + ) + ) + (if (= (the-as int s3-0) 6) + (set! (-> s2-1 y) (+ 6144.0 (-> s2-1 y))) + ) + (birth-pickup-at-point s2-1 (the-as pickup-type s3-0) f30-0 arg0 (the-as process-drawable arg1) obj) + ) ) - ) - (none) ) (deftype ecovalve (process-drawable) @@ -3796,106 +2856,67 @@ (defstate ecovalve-idle (ecovalve) :code (behavior () - (transform-post) - (suspend) - (transform-post) - (while #t - (if - (not - ((-> self block-func) (the-as vent (ppointer->process (-> self parent)))) - ) - (set-vector! (-> self offset-target) 0.0 0.0 0.0 1.0) - ) - (when (!= (-> self offset-target y) (-> self offset y)) - (vector-seek! - (-> self offset) - (-> self offset-target) - (* 4096.0 (-> *display* seconds-per-frame)) - ) - (TODO-RENAME-30 - (-> self root-override) - (vector+! - (new 'stack-no-clear 'vector) - (-> (the-as process-drawable (-> self parent 0)) root trans) - (-> self offset) - ) - ) - (transform-post) - ) + (transform-post) (suspend) + (transform-post) + (while #t + (if (not ((-> self block-func) (the-as vent (ppointer->process (-> self parent))))) + (set-vector! (-> self offset-target) 0.0 0.0 0.0 1.0) + ) + (when (!= (-> self offset-target y) (-> self offset y)) + (vector-seek! (-> self offset) (-> self offset-target) (* 4096.0 (-> *display* seconds-per-frame))) + (TODO-RENAME-30 (-> self root-override) (vector+! + (new 'stack-no-clear 'vector) + (-> (the-as process-drawable (-> self parent 0)) root trans) + (-> self offset) + ) + ) + (transform-post) + ) + (suspend) + ) + (none) ) - (none) - ) ) (defbehavior ecovalve-init-by-other ecovalve ((arg0 (function vent symbol))) (stack-size-set! (-> self main-thread) 128) - (let - ((s5-0 - (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player)) - ) - ) - (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s5-0 reaction) default-collision-reaction) - (set! - (-> s5-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (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-moving self (collide-list-enum hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 1) + (set! (-> s4-0 transform-index) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 3686.4 0.0 6144.0) + (set-root-prim! s5-0 (the-as collide-shape-prim-group s4-0)) ) - ) - (set! (-> s4-0 prim-core collide-as) (the-as uint 256)) - (set! (-> s4-0 collide-with) (the-as uint 16)) - (set! (-> s4-0 prim-core action) (the-as uint 1)) - (set! (-> s4-0 prim-core offense) 1) - (set! (-> s4-0 transform-index) 3) - (set-vector! (-> s4-0 local-sphere) 0.0 3686.4 0.0 6144.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! (-> self 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! (-> self root-override) s5-0) - ) - (if - (and - *target* - (logtest? (-> *target* control root-prim prim-core action) 512) - ) - (clear-collide-with-as (-> self root-override)) - ) + (if (and *target* (logtest? (-> *target* control root-prim prim-core action) 512)) + (clear-collide-with-as (-> self root-override)) + ) (set! (-> self block-func) arg0) - (set! - (-> self root-override trans quad) - (-> (the-as process-drawable (-> self parent 0)) root trans quad) - ) + (set! (-> self root-override trans quad) (-> (the-as process-drawable (-> self parent 0)) root trans quad)) (set-vector! (-> self offset-target) 0.0 -2252.8 0.0 1.0) - (if - (not - ((-> self block-func) (the-as vent (ppointer->process (-> self parent)))) - ) - (set-vector! (-> self offset-target) 0.0 0.0 0.0 1.0) - ) + (if (not ((-> self block-func) (the-as vent (ppointer->process (-> self parent))))) + (set-vector! (-> self offset-target) 0.0 0.0 0.0 1.0) + ) (set! (-> self offset quad) (-> self offset-target quad)) (initialize-skeleton self *ecovalve-sg* '()) - (TODO-RENAME-30 - (-> self root-override) - (vector+! - (new 'stack-no-clear 'vector) - (-> (the-as process-drawable (-> self parent 0)) root trans) - (-> self offset) - ) - ) + (TODO-RENAME-30 (-> self root-override) (vector+! + (new 'stack-no-clear 'vector) + (-> (the-as process-drawable (-> self parent 0)) root trans) + (-> self offset) + ) + ) (go ecovalve-idle) (none) ) @@ -3928,235 +2949,167 @@ (defmethod initialize vent ((obj vent) (arg0 entity-actor) (arg1 pickup-type)) (stack-size-set! (-> obj main-thread) 128) (logior! (-> obj mask) (process-mask actor-pause)) - (let - ((s3-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) - (let ((s2-0 (new 'process 'collide-shape-prim-sphere s3-0 (the-as uint 0)))) - (set! (-> s2-0 prim-core collide-as) (the-as uint 64)) - (set! (-> s2-0 collide-with) (the-as uint 16)) - (set-vector! (-> s2-0 local-sphere) 0.0 4915.2 0.0 6553.6) - (set-root-prim! s3-0 s2-0) + (let ((s3-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s3-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 64)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set-vector! (-> s2-0 local-sphere) 0.0 4915.2 0.0 6553.6) + (set-root-prim! s3-0 (the-as collide-shape-prim-group s2-0)) + ) + (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) + (backup-collide-with-as s3-0) + (set! (-> obj root-override) s3-0) ) - (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) - (backup-collide-with-as s3-0) - (set! (-> obj root-override) s3-0) - ) (set! (-> obj root-override trans quad) (-> arg0 extra trans quad)) (dummy-47 (-> obj root-override)) (set! (-> obj root-override pause-adjust-distance) 409600.0) - (set! - (-> obj fact) - (new 'process 'fact-info obj arg1 (-> *FACT-bank* eco-full-inc)) - ) + (set! (-> obj fact) (new 'process 'fact-info obj arg1 (-> *FACT-bank* eco-full-inc))) (set! (-> obj block-func) (the-as (function vent symbol) true-func)) - (case (-> obj fact pickup-type) - (((pickup-type eco-blue)) - (set! - (-> obj part) - (create-launch-control (-> *part-group-id-table* 44) obj) - ) + (case (-> obj fact pickup-type) + (((pickup-type eco-blue)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 44) obj)) (set! (-> obj collect-effect) (-> *part-group-id-table* 67)) (set! (-> obj collect-effect2) (-> *part-group-id-table* 43)) - (set! - (-> obj sound) - (new 'process 'ambient-sound 'eco-bg-blue (-> obj root-override trans)) - ) + (set! (-> obj sound) (new 'process 'ambient-sound 'eco-bg-blue (-> obj root-override trans))) ) - (((pickup-type eco-red)) - (set! - (-> obj part) - (create-launch-control (-> *part-group-id-table* 50) obj) + (((pickup-type eco-red)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 50) obj)) + (set! (-> obj collect-effect) (-> *part-group-id-table* 69)) + (set! (-> obj collect-effect2) (-> *part-group-id-table* 49)) + (set! (-> obj sound) (new 'process 'ambient-sound 'eco-bg-red (-> obj root-override trans))) ) - (set! (-> obj collect-effect) (-> *part-group-id-table* 69)) - (set! (-> obj collect-effect2) (-> *part-group-id-table* 49)) - (set! - (-> obj sound) - (new 'process 'ambient-sound 'eco-bg-red (-> obj root-override trans)) + (((pickup-type eco-green)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 62) obj)) + (set! (-> obj collect-effect) (-> *part-group-id-table* 66)) + (set! (-> obj collect-effect2) (-> *part-group-id-table* 61)) + (set! (-> obj sound) (new 'process 'ambient-sound 'eco-bg-green (-> obj root-override trans))) + ) + (((pickup-type eco-yellow)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 52) obj)) + (set! (-> obj collect-effect) (-> *part-group-id-table* 68)) + (set! (-> obj collect-effect2) (-> *part-group-id-table* 57)) + (set! (-> obj sound) (new 'process 'ambient-sound 'eco-bg-yellow (-> obj root-override trans))) ) ) - (((pickup-type eco-green)) - (set! - (-> obj part) - (create-launch-control (-> *part-group-id-table* 62) obj) - ) - (set! (-> obj collect-effect) (-> *part-group-id-table* 66)) - (set! (-> obj collect-effect2) (-> *part-group-id-table* 61)) - (set! - (-> obj sound) - (new 'process 'ambient-sound 'eco-bg-green (-> obj root-override trans)) - ) - ) - (((pickup-type eco-yellow)) - (set! - (-> obj part) - (create-launch-control (-> *part-group-id-table* 52) obj) - ) - (set! (-> obj collect-effect) (-> *part-group-id-table* 68)) - (set! (-> obj collect-effect2) (-> *part-group-id-table* 57)) - (set! - (-> obj sound) - (new 'process 'ambient-sound 'eco-bg-yellow (-> obj root-override trans)) - ) - ) - ) (set! (-> obj blocker) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) (when (-> obj blocker) - (logior! (-> obj fact options) (fact-options vent-blocked)) - (set! (-> obj block-func) (lambda ((arg0 vent)) - (zero? - (logand - (-> arg0 blocker extra perm status) - (entity-perm-status complete) - ) - ) - ) + (logior! (-> obj fact options) (fact-options vent-blocked)) + (set! (-> obj block-func) + (lambda ((arg0 vent)) (zero? (logand (-> arg0 blocker extra perm status) (entity-perm-status complete)))) + ) ) - ) (set! (-> obj show-particles) #t) (when (logtest? (-> obj fact options) (fact-options vent-blocked)) - (when (logtest? (-> obj fact options) (fact-options vent-valve)) - (case (-> obj fact pickup-type) - (((pickup-type eco-blue)) - (set! (-> obj block-func) (the-as (function vent symbol) (lambda () - (not - (task-complete? - *game-info* - (game-task - jungle-eggtop - ) - ) - ) - ) - ) + (when (logtest? (-> obj fact options) (fact-options vent-valve)) + (case (-> obj fact pickup-type) + (((pickup-type eco-blue)) + (set! (-> obj block-func) + (the-as (function vent symbol) (lambda () (not (task-complete? *game-info* (game-task jungle-eggtop))))) + ) + ) + (((pickup-type eco-red)) + (set! (-> obj block-func) + (the-as (function vent symbol) (lambda () (not (task-complete? *game-info* (game-task red-eggtop))))) + ) + ) + (((pickup-type eco-yellow)) + (set! (-> obj block-func) + (the-as (function vent symbol) (lambda () (not (task-complete? *game-info* (game-task snow-eggtop))))) + ) + ) + ) + (let ((s5-1 (get-process *pickup-dead-pool* ecovalve #x4000))) + (when s5-1 + (let ((t9-17 (method-of-type ecovalve activate))) + (t9-17 (the-as ecovalve s5-1) obj 'ecovalve (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 ecovalve-init-by-other (-> obj block-func)) + (-> s5-1 ppointer) + ) ) - ) - (((pickup-type eco-red)) - (set! (-> obj block-func) (the-as (function vent symbol) (lambda () - (not - (task-complete? - *game-info* - (game-task - red-eggtop - ) - ) - ) - ) - ) - ) ) - (((pickup-type eco-yellow)) - (set! (-> obj block-func) (the-as (function vent symbol) (lambda () - (not - (task-complete? - *game-info* - (game-task - snow-eggtop - ) - ) - ) - ) - ) - ) - ) - ) - (let ((s5-1 (get-process *pickup-dead-pool* ecovalve #x4000))) - (when s5-1 - (let ((t9-17 (method-of-type ecovalve activate))) - (t9-17 (the-as ecovalve s5-1) obj 'ecovalve (the-as pointer #x70004000)) - ) - (run-now-in-process s5-1 ecovalve-init-by-other (-> obj block-func)) - (-> s5-1 ppointer) - ) - ) + (if ((-> obj block-func) obj) + (go vent-blocked) + ) ) - (if ((-> obj block-func) obj) - (go vent-blocked) - ) - ) (go vent-wait-for-touch) (none) ) -(defbehavior - vent-standard-event-handler vent - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('show-particles) +(defbehavior vent-standard-event-handler vent ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('show-particles) (let ((v0-0 (the-as object (-> arg3 param 0)))) - (set! (-> self show-particles) (the-as symbol v0-0)) - v0-0 - ) + (set! (-> self show-particles) (the-as symbol v0-0)) + v0-0 + ) + ) + (('hide) + (set! (-> self block-func) (the-as (function vent symbol) true-func)) + (go vent-blocked) ) - (('hide) - (set! (-> self block-func) (the-as (function vent symbol) true-func)) - (go vent-blocked) ) - ) ) (defstate vent-wait-for-touch (vent) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (if - (and - (or (= arg2 'touch) (= arg2 'attack)) - (let ((a1-1 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 2) - (set! (-> a1-1 message) 'get-pickup) - (set! (-> a1-1 param 0) (the-as uint (-> self fact pickup-type))) - (set! (-> a1-1 param 1) (the-as uint (-> self fact pickup-amount))) - (and - (= (send-event-function arg0 a1-1) #t) - (or - (logtest? (-> self fact options) (fact-options powerup)) - (send-event arg0 'powerup) + (if (and + (or (= arg2 'touch) (= arg2 'attack)) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 2) + (set! (-> a1-1 message) 'get-pickup) + (set! (-> a1-1 param 0) (the-as uint (-> self fact pickup-type))) + (set! (-> a1-1 param 1) (the-as uint (-> self fact pickup-amount))) + (and + (= (send-event-function arg0 a1-1) #t) + (or (logtest? (-> self fact options) (fact-options powerup)) (send-event arg0 'powerup)) + ) + ) + ) + (go vent-pickup (process->handle arg0)) ) - ) - ) - ) - (go vent-pickup (process->handle arg0)) + (vent-standard-event-handler arg0 arg1 arg2 arg3) ) - (vent-standard-event-handler arg0 arg1 arg2 arg3) - ) :code (behavior () - (while #t - (let ((a0-0 (-> self part)) - (a1-0 (-> self root-override trans)) - (gp-0 (-> self sound)) - ) - (if (and (nonzero? a0-0) (-> self show-particles)) - (spawn a0-0 a1-0) + (while #t + (let ((a0-0 (-> self part)) + (a1-0 (-> self root-override trans)) + (gp-0 (-> self sound)) + ) + (if (and (nonzero? a0-0) (-> self show-particles)) + (spawn a0-0 a1-0) + ) + (if (nonzero? gp-0) + (update! gp-0) + ) + ) + (suspend) ) - (if (nonzero? gp-0) - (update! gp-0) - ) - ) - (suspend) + (none) ) - (none) - ) ) (defstate vent-blocked (vent) :event - (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('show) - (go vent-wait-for-touch) - ) - ) - ) + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('show) + (go vent-wait-for-touch) + ) + ) + ) :code (behavior () - (while #t - (if (not ((-> self block-func) self)) - (go vent-wait-for-touch) - ) - (suspend) + (while #t + (if (not ((-> self block-func) self)) + (go vent-wait-for-touch) + ) + (suspend) + ) + (none) ) - (none) - ) ) (defstate vent-pickup (vent) @@ -4164,81 +3117,67 @@ vent-standard-event-handler :code (behavior ((arg0 handle)) - (when (-> self show-particles) - (when (nonzero? (-> self collect-effect)) - (let* ((s5-0 (handle->process arg0)) - (gp-0 - (if - (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) - s5-0 - ) - ) - ) - (when gp-0 - (let* ((s4-0 (-> (the-as process-drawable gp-0) root)) - (s5-1 - (if - (and (nonzero? s4-0) (type-type? (-> s4-0 type) collide-shape)) - s4-0 - ) + (when (-> self show-particles) + (when (nonzero? (-> self collect-effect)) + (let* ((s5-0 (handle->process arg0)) + (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) + s5-0 + ) + ) ) + (when gp-0 + (let* ((s4-0 (-> (the-as process-drawable gp-0) root)) + (s5-1 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) collide-shape)) + s4-0 + ) + ) + ) + (when s5-1 + (let ((s4-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when s4-1 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 (the-as part-tracker s4-1) gp-0 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-1 + part-tracker-init + (-> self collect-effect) + -1 + part-tracker-track-target + #f + #f + (-> (the-as collide-shape s5-1) root-prim prim-core) + ) + (-> s4-1 ppointer) + ) + ) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-6 (method-of-type part-tracker activate))) + (t9-6 (the-as part-tracker gp-1) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> self collect-effect2) + -1 + part-tracker-move-to-target + #f + #f + (-> self root-override root-prim prim-core) + ) + (-> gp-1 ppointer) + ) + ) + ) ) - (when s5-1 - (let ((s4-1 (get-process *default-dead-pool* part-tracker #x4000))) - (when s4-1 - (let ((t9-3 (method-of-type part-tracker activate))) - (t9-3 - (the-as part-tracker s4-1) - gp-0 - 'part-tracker - (the-as pointer #x70004000) - ) ) - (run-now-in-process - s4-1 - part-tracker-init - (-> self collect-effect) - -1 - part-tracker-track-target - #f - #f - (-> (the-as collide-shape s5-1) root-prim prim-core) - ) - (-> s4-1 ppointer) - ) ) - (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) - (when gp-1 - (let ((t9-6 (method-of-type part-tracker activate))) - (t9-6 - (the-as part-tracker gp-1) - self - 'part-tracker - (the-as pointer #x70004000) - ) - ) - (run-now-in-process - gp-1 - part-tracker-init - (-> self collect-effect2) - -1 - part-tracker-move-to-target - #f - #f - (-> self root-override root-prim prim-core) - ) - (-> gp-1 ppointer) - ) - ) - ) ) - ) ) - ) + (go vent-wait-for-touch) + (none) ) - (go vent-wait-for-touch) - (none) - ) ) (deftype ventyellow (vent) diff --git a/goal_src/engine/game/fact-h.gc b/goal_src/engine/game/fact-h.gc index b9882cb8cf..33357fb260 100644 --- a/goal_src/engine/game/fact-h.gc +++ b/goal_src/engine/game/fact-h.gc @@ -107,7 +107,7 @@ :flag-assert #xc00000028 (:methods (new (symbol type process-drawable pickup-type float) _type_ 0) - (drop-pickup (_type_ symbol process-tree fact-info int) none 9) + (drop-pickup (_type_ symbol process-tree fact-info int) (pointer process) 9) (reset! (_type_ symbol) none 10) (pickup-collectable! (_type_ pickup-type float handle) float 11) ) diff --git a/goal_src/engine/nav/navigate-h.gc b/goal_src/engine/nav/navigate-h.gc index a44ddbd0b1..598f787f69 100644 --- a/goal_src/engine/nav/navigate-h.gc +++ b/goal_src/engine/nav/navigate-h.gc @@ -246,11 +246,11 @@ (set-current-poly! (_type_ nav-poly) none 14) (set-target-pos! (_type_ vector) none 15) (dummy-16 (_type_ vector) nav-poly 16) ; see - nav-enemy-test-point-in-nav-mesh? - (dummy-17 () none 17) + (dummy-17 (_type_ vector vector) none 17) (TODO-RENAME-18 (_type_ vector) nav-poly 18) (dummy-19 (_type_ vector collide-shape-moving vector float) none 19) (dummy-20 () none 20) - (dummy-21 () none 21) + (dummy-21 (_type_ vector) none 21) (dummy-22 () none 22) (dummy-23 (_type_ vector check-vector-collision-with-nav-spheres-info) float 23) ;; TODO - unconfirmed (dummy-24 (_type_ float clip-travel-vector-to-mesh-return-info) none 24) @@ -264,7 +264,7 @@ (dummy-32 () none 32) (dummy-33 () none 33) (dummy-34 () none 34) - (dummy-35 () none 35) + (dummy-35 (_type_ vector vector vector vector float) none 35) ) ) diff --git a/goal_src/levels/common/nav-enemy.gc b/goal_src/levels/common/nav-enemy.gc index 17589e93f0..7178e905f1 100644 --- a/goal_src/levels/common/nav-enemy.gc +++ b/goal_src/levels/common/nav-enemy.gc @@ -33,284 +33,215 @@ (let* ((v1-3 (-> *display* frames (-> *display* last-screen) frame run-time)) (f1-2 (fmax 0.0 (fmin 1.0 (* 0.001 (+ -7000.0 (the float v1-3)))))) ) - (>= (+ arg0 (* f1-2 (- 1.0 arg0))) (rand-vu)) - ) + (>= (+ arg0 (* f1-2 (- 1.0 arg0))) (rand-vu)) + ) ) -(defmethod - eval-position! - trajectory - ((obj trajectory) (time float) (result vector)) - (vector+float*! - result - (-> obj initial-position) - (-> obj initial-velocity) - time - ) +(defmethod eval-position! trajectory ((obj trajectory) (time float) (result vector)) + (vector+float*! result (-> obj initial-position) (-> obj initial-velocity) time) (+! (-> result y) (* 0.5 time time (-> obj gravity))) result ) (defmethod relocate nav-enemy ((obj nav-enemy) (arg0 int)) (if (nonzero? (-> obj neck)) - (set! (-> obj neck) (the-as joint-mod (+ (the-as int (-> obj neck)) arg0))) - ) + (set! (-> obj neck) (the-as joint-mod (+ (the-as int (-> obj neck)) arg0))) + ) (if (nonzero? (-> obj rand-gen)) - (set! - (-> obj rand-gen) - (the-as random-generator (+ (the-as int (-> obj rand-gen)) arg0)) - ) - ) - (the-as - nav-enemy - ((the-as - (function process-drawable int none) - (find-parent-method nav-enemy 7) - ) - obj - arg0 - ) - ) + (set! (-> obj rand-gen) (the-as random-generator (+ (the-as int (-> obj rand-gen)) arg0))) + ) + (the-as nav-enemy ((the-as (function process-drawable int none) (find-parent-method nav-enemy 7)) obj arg0)) ) (defmethod TODO-RENAME-42 nav-enemy ((obj nav-enemy)) (local-vars (v1-11 symbol)) (if (<= (-> obj path curve num-cverts) 0) - (go process-drawable-art-error "no path") - ) + (go process-drawable-art-error "no path") + ) (let ((s5-0 3)) - 0 - (let ((s4-0 (-> obj nav destination-pos))) - (until (or v1-11 (<= s5-0 0)) - (let ((v1-8 (nav-enemy-rnd-int-count (-> obj path curve num-cverts)))) - (eval-path-curve-div! (-> obj path) s4-0 (the float v1-8) 'interp) + 0 + (let ((s4-0 (-> obj nav destination-pos))) + (until (or v1-11 (<= s5-0 0)) + (let ((v1-8 (nav-enemy-rnd-int-count (-> obj path curve num-cverts)))) + (eval-path-curve-div! (-> obj path) s4-0 (the float v1-8) 'interp) + ) + (+! s5-0 -1) + (set! v1-11 (< 4096.0 (vector-vector-xz-distance s4-0 (-> obj collide-info trans)))) + ) ) - (+! s5-0 -1) - (set! - v1-11 - (< 4096.0 (vector-vector-xz-distance s4-0 (-> obj collide-info trans))) - ) - ) ) - ) 0 ) (defmethod common-post nav-enemy ((obj nav-enemy)) - (when - (and - (logtest? (-> obj nav-enemy-flags) 256) - (or - (not *target*) - (and - (zero? (logand (-> *target* state-flags) #x80f8)) - (>= (- (-> *display* base-frame-counter) (-> obj touch-time)) 15) - ) - ) + (when (and + (logtest? (-> obj nav-enemy-flags) 256) + (or (not *target*) (and + (zero? (logand (-> *target* state-flags) #x80f8)) + (>= (- (-> *display* base-frame-counter) (-> obj touch-time)) 15) + ) + ) + ) + (dummy-54 (-> obj collide-info) 2 1) + (set! (-> obj nav-enemy-flags) (logand -257 (-> obj nav-enemy-flags))) ) - (dummy-54 (-> obj collide-info) 2 1) - (set! (-> obj nav-enemy-flags) (logand -257 (-> obj nav-enemy-flags))) - ) (dummy-14 (-> obj draw shadow-ctrl)) (when *target* - (if *target* - (look-at-enemy! - (-> *target* neck) - (the-as vector (-> obj collide-info root-prim prim-core)) - (if (logtest? (-> obj nav-enemy-flags) 4) - 'attacking - ) - obj - ) + (if *target* + (look-at-enemy! + (-> *target* neck) + (the-as vector (-> obj collide-info root-prim prim-core)) + (if (logtest? (-> obj nav-enemy-flags) 4) + 'attacking + ) + obj + ) + ) + (if (and (nonzero? (-> obj neck)) (logtest? (-> obj nav-enemy-flags) #x4000)) + (set-target! (-> obj neck) (target-pos (-> obj nav-info player-look-at-joint))) + ) ) - (if (and (nonzero? (-> obj neck)) (logtest? (-> obj nav-enemy-flags) #x4000)) - (set-target! - (-> obj neck) - (target-pos (-> obj nav-info player-look-at-joint)) - ) - ) - ) (when (-> obj nav-info debug-draw-neck) - (if (nonzero? (-> obj neck)) - (joint-mod-debug-draw (-> obj neck)) + (if (nonzero? (-> obj neck)) + (joint-mod-debug-draw (-> obj neck)) + ) ) - ) (ja-post) 0 (none) ) -(defmethod - dummy-44 - nav-enemy - ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) - (if - (and - (logtest? (-> obj nav-enemy-flags) 64) - ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg1 param 0)) - (-> obj collide-info) - (the-as uint 1) - ) - ) - (nav-enemy-send-attack - arg0 - (the-as touching-shapes-entry (-> arg1 param 0)) - 'generic - ) - ) +(defmethod dummy-44 nav-enemy ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) + (if (and (logtest? (-> obj nav-enemy-flags) 64) ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + ) + (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg1 param 0)) 'generic) + ) ) -(defmethod - nav-enemy-touch-handler - nav-enemy - ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) - (if - (and - (logtest? (-> obj nav-enemy-flags) 64) - ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg1 param 0)) - (-> obj collide-info) - (the-as uint 1) - ) - ) - (nav-enemy-send-attack - arg0 - (the-as touching-shapes-entry (-> arg1 param 0)) - 'generic - ) - ) +(defmethod nav-enemy-touch-handler nav-enemy ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) + (if (and (logtest? (-> obj nav-enemy-flags) 64) ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + ) + (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg1 param 0)) 'generic) + ) ) -(defmethod - nav-enemy-attack-handler - nav-enemy - ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) +(defmethod nav-enemy-attack-handler nav-enemy ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) (send-event arg0 'get-attack-count 1) (logclear! (-> obj mask) (process-mask actor-pause attackable)) (go (method-of-object obj nav-enemy-die)) (the-as object 'die) ) -(defmethod - dummy-43 - nav-enemy - ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) +(defmethod dummy-43 nav-enemy ((obj nav-enemy) (arg0 process) (arg1 event-message-block)) (cond - ((logtest? (-> obj nav-enemy-flags) 32) - (send-event arg0 'get-attack-count 1) - (logclear! (-> obj mask) (process-mask actor-pause attackable)) - (go (method-of-object obj nav-enemy-die)) + ((logtest? (-> obj nav-enemy-flags) 32) + (send-event arg0 'get-attack-count 1) + (logclear! (-> obj mask) (process-mask actor-pause attackable)) + (go (method-of-object obj nav-enemy-die)) + ) + (else + (dummy-44 obj arg0 arg1) + ) ) - (else - (dummy-44 obj arg0 arg1) - ) - ) ) -(defbehavior - nav-enemy-send-attack nav-enemy - ((arg0 process) (arg1 touching-shapes-entry) (arg2 symbol)) +(defbehavior nav-enemy-send-attack nav-enemy ((arg0 process) (arg1 touching-shapes-entry) (arg2 symbol)) (let ((v1-0 (new 'stack-no-clear 'event-message-block))) - (set! (-> v1-0 from) self) - (set! (-> v1-0 num-params) 2) - (set! (-> v1-0 message) 'attack) - (set! (-> v1-0 param 0) (the-as uint arg1)) - (let ((a1-1 (new 'static 'attack-info :mask #xe0))) - (set! (-> a1-1 shove-back) (-> self nav-info attack-shove-back)) - (set! (-> a1-1 shove-up) (-> self nav-info attack-shove-up)) - (set! (-> a1-1 mode) arg2) - (set! (-> v1-0 param 1) (the-as uint a1-1)) + (set! (-> v1-0 from) self) + (set! (-> v1-0 num-params) 2) + (set! (-> v1-0 message) 'attack) + (set! (-> v1-0 param 0) (the-as uint arg1)) + (let ((a1-1 (new 'static 'attack-info :mask #xe0))) + (set! (-> a1-1 shove-back) (-> self nav-info attack-shove-back)) + (set! (-> a1-1 shove-up) (-> self nav-info attack-shove-up)) + (set! (-> a1-1 mode) arg2) + (set! (-> v1-0 param 1) (the-as uint a1-1)) + ) + (the-as object (when (send-event-function arg0 v1-0) + (dummy-54 (-> self collide-info) 2 0) + (logior! (-> self nav-enemy-flags) 256) + #t + ) + ) ) - (the-as object (when (send-event-function arg0 v1-0) - (dummy-54 (-> self collide-info) 2 0) - (logior! (-> self nav-enemy-flags) 256) - #t - ) - ) - ) ) -(defbehavior - nav-enemy-default-event-handler nav-enemy - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('touch) +(defbehavior nav-enemy-default-event-handler nav-enemy ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) (set! (-> self touch-time) (-> *display* base-frame-counter)) (dummy-44 self arg0 arg3) ) - (('attack) - (nav-enemy-set-hit-from-direction arg0) - (dummy-43 self arg0 arg3) - ) - (('instant-death) - (let ((gp-1 (-> self hit-from-dir))) - (vector-z-quaternion! gp-1 (-> self collide-info quat)) - (vector-float*! gp-1 gp-1 -1.0) - (vector-normalize! gp-1 1.0) + (('attack) + (nav-enemy-set-hit-from-direction arg0) + (dummy-43 self arg0 arg3) ) - (logclear! (-> self mask) (process-mask actor-pause attackable)) - (go-virtual nav-enemy-die) - ) - (('jump) - (when (!= (-> self next-state name) 'nav-enemy-jump-land) - (set! - (-> self event-param-point quad) - (-> (the-as vector (-> arg3 param 0)) quad) - ) - (set! (-> self nav user-poly) (the-as nav-poly (-> arg3 param 1))) - (set! (-> self jump-return-state) (the-as (state process) (-> self state))) - (go-virtual nav-enemy-jump) + (('instant-death) + (let ((gp-1 (-> self hit-from-dir))) + (vector-z-quaternion! gp-1 (-> self collide-info quat)) + (vector-float*! gp-1 gp-1 -1.0) + (vector-normalize! gp-1 1.0) + ) + (logclear! (-> self mask) (process-mask actor-pause attackable)) + (go-virtual nav-enemy-die) + ) + (('jump) + (when (!= (-> self next-state name) 'nav-enemy-jump-land) + (set! (-> self event-param-point quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self nav user-poly) (the-as nav-poly (-> arg3 param 1))) + (set! (-> self jump-return-state) (the-as (state process) (-> self state))) + (go-virtual nav-enemy-jump) + ) + ) + (('cue-jump-to-point) + (when (logtest? (-> self nav-enemy-flags) 2048) + (set! (-> self event-param-point quad) (-> (the-as vector (-> arg3 param 0)) quad)) + (set! (-> self nav-enemy-flags) (logand -2049 (-> self nav-enemy-flags))) + ) + ) + (('cue-chase) + (go-virtual nav-enemy-chase) + ) + (('cue-patrol) + (go-virtual nav-enemy-patrol) + ) + (('go-wait-for-cue) + (go-virtual nav-enemy-wait-for-cue) ) ) - (('cue-jump-to-point) - (when (logtest? (-> self nav-enemy-flags) 2048) - (set! - (-> self event-param-point quad) - (-> (the-as vector (-> arg3 param 0)) quad) - ) - (set! (-> self nav-enemy-flags) (logand -2049 (-> self nav-enemy-flags))) - ) - ) - (('cue-chase) - (go-virtual nav-enemy-chase) - ) - (('cue-patrol) - (go-virtual nav-enemy-patrol) - ) - (('go-wait-for-cue) - (go-virtual nav-enemy-wait-for-cue) - ) - ) (none) ) -(defbehavior - nav-enemy-jump-event-handler nav-enemy - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('touch) +(defbehavior nav-enemy-jump-event-handler nav-enemy ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) (set! (-> self touch-time) (-> *display* base-frame-counter)) (nav-enemy-touch-handler self arg0 arg3) ) - (('attack) - (nav-enemy-set-hit-from-direction arg0) - (nav-enemy-attack-handler self arg0 arg3) + (('attack) + (nav-enemy-set-hit-from-direction arg0) + (nav-enemy-attack-handler self arg0 arg3) + ) ) - ) ) -(defbehavior - process-drawable-death-event-handler process-drawable - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('death-start) +(defbehavior process-drawable-death-event-handler process-drawable ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('death-start) (drop-pickup (-> self fact) #t *entity-pool* (-> self fact) 0) ) - (('death-end) - (logior! (-> self draw status) 2) + (('death-end) + (logior! (-> self draw status) 2) + ) ) - ) (none) ) @@ -337,161 +268,132 @@ nav-enemy-default-event-handler (defmethod dummy-41 nav-enemy ((obj nav-enemy)) (cond - ((-> obj nav-info use-align) - (TODO-RENAME-11 - (-> obj align) - 4 - (-> obj nav travel) - (the-as int 1.0) - 1.0 - (* (-> obj enemy-info speed) (-> obj speed-scale)) + ((-> obj nav-info use-align) + (TODO-RENAME-11 + (-> obj align) + 4 + (-> obj nav travel) + (the-as int 1.0) + 1.0 + (* (-> obj enemy-info speed) (-> obj speed-scale)) + ) ) - ) - (else - (cond - ((-> obj nav-info use-momentum) - (let* ((f0-3 (- (-> obj target-speed) (-> obj momentum-speed))) - (f1-4 - (fmin - (* (-> obj acceleration) (-> *display* seconds-per-frame)) - (fabs f0-3) + (else + (cond + ((-> obj nav-info use-momentum) + (let* ((f0-3 (- (-> obj target-speed) (-> obj momentum-speed))) + (f1-4 (fmin (* (-> obj acceleration) (-> *display* seconds-per-frame)) (fabs f0-3))) + ) + (if (< f0-3 0.0) + (set! (-> obj momentum-speed) (- (-> obj momentum-speed) f1-4)) + (+! (-> obj momentum-speed) f1-4) ) - ) + ) + ) + (else + (set! (-> obj momentum-speed) (-> obj target-speed)) + ) + ) + (let* ((f0-12 (fmin + (* (-> obj speed-scale) (-> obj momentum-speed)) + (* (vector-length (-> obj nav travel)) (-> *display* frames-per-second)) + ) + ) + (v1-15 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> obj nav travel) f0-12)) ) - (if (< f0-3 0.0) - (set! (-> obj momentum-speed) (- (-> obj momentum-speed) f1-4)) - (+! (-> obj momentum-speed) f1-4) + (set! (-> obj collide-info transv x) (-> v1-15 x)) + (set! (-> obj collide-info transv z) (-> v1-15 z)) ) - ) ) - (else - (set! (-> obj momentum-speed) (-> obj target-speed)) - ) - ) - (let* - ((f0-12 - (fmin - (* (-> obj speed-scale) (-> obj momentum-speed)) - (* (vector-length (-> obj nav travel)) (-> *display* frames-per-second)) - ) - ) - (v1-15 - (vector-normalize-copy! - (new 'stack-no-clear 'vector) - (-> obj nav travel) - f0-12 - ) - ) - ) - (set! (-> obj collide-info transv x) (-> v1-15 x)) - (set! (-> obj collide-info transv z) (-> v1-15 z)) - ) ) - ) (if (-> obj nav-info move-to-ground) - (vector-v++! - (-> obj collide-info transv) - (dummy-62 (-> obj collide-info) (new-stack-vector0) 0.0) - ) - ) + (vector-v++! (-> obj collide-info transv) (dummy-62 (-> obj collide-info) (new-stack-vector0) 0.0)) + ) 0 (none) ) (defmethod TODO-RENAME-37 nav-enemy ((obj nav-enemy)) (when (logtest? (-> obj nav-enemy-flags) 16) - (if - (or - (logtest? (-> obj nav-enemy-flags) 128) - (logtest? (nav-control-flags bit19) (-> obj nav flags)) - ) - (seek-to-point-toward-point! - (-> obj collide-info) - (-> obj nav target-pos) - (-> obj rotate-speed) - (-> obj turn-time) - ) - (seek-toward-heading-vec! - (-> obj collide-info) - (-> obj nav travel) - (-> obj rotate-speed) - (-> obj turn-time) - ) + (if (or (logtest? (-> obj nav-enemy-flags) 128) (logtest? (nav-control-flags bit19) (-> obj nav flags))) + (seek-to-point-toward-point! + (-> obj collide-info) + (-> obj nav target-pos) + (-> obj rotate-speed) + (-> obj turn-time) + ) + (seek-toward-heading-vec! (-> obj collide-info) (-> obj nav travel) (-> obj rotate-speed) (-> obj turn-time)) + ) ) - ) 0 (none) ) (defmethod TODO-RENAME-38 nav-enemy ((obj nav-enemy)) (if (-> obj nav-info move-to-ground) - (dummy-59 - (-> obj collide-info) - (-> obj collide-info transv) - (-> obj nav-info gnd-collide-with) - 8192.0 - #f - (-> obj nav-info hover-if-no-ground) - (logtest? (-> obj nav-enemy-flags) #x8000) - ) - (dummy-58 (-> obj collide-info) (-> obj collide-info transv)) - ) + (dummy-59 + (-> obj collide-info) + (-> obj collide-info transv) + (-> obj nav-info gnd-collide-with) + 8192.0 + #f + (-> obj nav-info hover-if-no-ground) + (logtest? (-> obj nav-enemy-flags) #x8000) + ) + (dummy-58 (-> obj collide-info) (-> obj collide-info transv)) + ) 0 (none) ) (defbehavior nav-enemy-travel-post nav-enemy () (cond - ((logtest? (-> self nav-enemy-flags) 8) - (TODO-RENAME-9 (-> self align)) - (dummy-40 self) - (dummy-41 self) - (TODO-RENAME-37 self) - (TODO-RENAME-38 self) - (nav-enemy-common-post) - ) - (else - (if *debug-segment* - (add-frame - (-> *display* frames (-> *display* on-screen) frame profile-bar 0) - 'draw - (new 'static 'rgba :r #x40 :b #x40 :a #x80) - ) + ((logtest? (-> self nav-enemy-flags) 8) + (TODO-RENAME-9 (-> self align)) + (dummy-40 self) + (dummy-41 self) + (TODO-RENAME-37 self) + (TODO-RENAME-38 self) + (nav-enemy-common-post) ) - (nav-enemy-simple-post) - (if *debug-segment* - (add-frame - (-> *display* frames (-> *display* on-screen) frame profile-bar 0) - 'draw - (new 'static 'rgba :r #xff :b #xff :a #x80) + (else + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #x40 :b #x40 :a #x80) + ) + ) + (nav-enemy-simple-post) + (if *debug-segment* + (add-frame + (-> *display* frames (-> *display* on-screen) frame profile-bar 0) + 'draw + (new 'static 'rgba :r #xff :b #xff :a #x80) + ) + ) ) - ) ) - ) 0 (none) ) (defbehavior nav-enemy-patrol-post nav-enemy () - (when - (or - (logtest? (nav-control-flags bit19) (-> self nav flags)) - (< 2.0 (-> self nav block-count)) + (when (or (logtest? (nav-control-flags bit19) (-> self nav flags)) (< 2.0 (-> self nav block-count))) + (set! (-> self nav block-count) 2.0) + (logior! (-> self nav flags) (nav-control-flags bit10)) + (nav-enemy-get-new-patrol-point) ) - (set! (-> self nav block-count) 2.0) - (logior! (-> self nav flags) (nav-control-flags bit10)) - (nav-enemy-get-new-patrol-point) - ) (dummy-19 - (-> self nav) - (-> self nav target-pos) - (-> self collide-info) - (-> self nav destination-pos) - (-> self rotate-speed) - ) + (-> self nav) + (-> self nav target-pos) + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + ) (if (logtest? (nav-control-flags bit21) (-> self nav flags)) - (logclear! (-> self nav flags) (nav-control-flags bit10)) - ) + (logclear! (-> self nav flags) (nav-control-flags bit10)) + ) (nav-enemy-travel-post) 0 (none) @@ -505,35 +407,16 @@ nav-enemy-default-event-handler ) (defbehavior nav-enemy-flee-post nav-enemy () - (let - ((gp-1 - (vector-! - (new 'stack-no-clear 'vector) - (-> self collide-info trans) - (target-pos 0) - ) - ) + (let ((gp-1 (vector-! (new 'stack-no-clear 'vector) (-> self collide-info trans) (target-pos 0)))) + (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self collide-info quat)) + 0.0 + 0.0 + (set! (-> gp-1 y) 0.0) + (set! (-> self nav travel quad) (-> gp-1 quad)) ) - (vector-z-quaternion! - (new 'stack-no-clear 'vector) - (-> self collide-info quat) - ) - 0.0 - 0.0 - (set! (-> gp-1 y) 0.0) - (set! (-> self nav travel quad) (-> gp-1 quad)) - ) (vector-normalize! (-> self nav travel) 409600.0) - (dummy-24 - (-> self nav) - 204.8 - (the-as clip-travel-vector-to-mesh-return-info #f) - ) - (vector+! - (-> self nav target-pos) - (-> self collide-info trans) - (-> self nav travel) - ) + (dummy-24 (-> self nav) 204.8 (the-as clip-travel-vector-to-mesh-return-info #f)) + (vector+! (-> self nav target-pos) (-> self collide-info trans) (-> self nav travel)) (nav-enemy-travel-post) 0 (none) @@ -541,38 +424,23 @@ nav-enemy-default-event-handler (defbehavior nav-enemy-face-player-post nav-enemy () (if (and *target* (logtest? (-> self nav-enemy-flags) 16)) - (seek-to-point-toward-point! - (-> self collide-info) - (target-pos 0) - (-> self rotate-speed) - (-> self turn-time) - ) - ) + (seek-to-point-toward-point! (-> self collide-info) (target-pos 0) (-> self rotate-speed) (-> self turn-time)) + ) (nav-enemy-simple-post) 0 (none) ) (defbehavior nav-enemy-falling-post nav-enemy () - (vector-v++! - (-> self collide-info transv) - (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) - ) - (dummy-33 - (-> self collide-info) - (-> self collide-info transv) - (-> self collide-info root-prim collide-with) - ) + (vector-v++! (-> self collide-info transv) (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0)) + (dummy-33 (-> self collide-info) (-> self collide-info transv) (-> self collide-info root-prim collide-with)) (nav-enemy-common-post) 0 (none) ) (defbehavior nav-enemy-death-post nav-enemy () - (vector-v++! - (-> self collide-info transv) - (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) - ) + (vector-v++! (-> self collide-info transv) (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0)) (dummy-57 (-> self collide-info) (-> self collide-info transv)) (nav-enemy-common-post) 0 @@ -582,109 +450,83 @@ nav-enemy-default-event-handler (defbehavior nav-enemy-neck-control-look-at nav-enemy () (logior! (-> self nav-enemy-flags) #x4000) (if (nonzero? (-> self neck)) - (set-mode! (-> self neck) (joint-mod-handler-mode look-at)) - ) + (set-mode! (-> self neck) (joint-mod-handler-mode look-at)) + ) 0 (none) ) (defbehavior nav-enemy-neck-control-inactive nav-enemy () - (when - (and (nonzero? (-> self neck)) (logtest? (-> self nav-enemy-flags) #x4000)) - (set! (-> self nav-enemy-flags) (logand -16385 (-> self nav-enemy-flags))) - (shut-down! (-> self neck)) - ) + (when (and (nonzero? (-> self neck)) (logtest? (-> self nav-enemy-flags) #x4000)) + (set! (-> self nav-enemy-flags) (logand -16385 (-> self nav-enemy-flags))) + (shut-down! (-> self neck)) + ) 0 (none) ) (defun nav-enemy-player-vulnerable? () - (the-as - symbol - (and *target* (zero? (logand (-> *target* state-flags) #x80f8))) - ) + (the-as symbol (and *target* (zero? (logand (-> *target* state-flags) #x80f8)))) ) (defmethod TODO-RENAME-46 nav-enemy ((obj nav-enemy) (arg0 float)) (and - *target* - (zero? (logand (-> *target* state-flags) #x80f8)) - (and - (or - (zero? (logand (-> obj nav-enemy-flags) 4096)) - (< - (vector-vector-distance (target-pos 0) (-> obj collide-info trans)) - arg0 + *target* + (zero? (logand (-> *target* state-flags) #x80f8)) + (and + (or + (zero? (logand (-> obj nav-enemy-flags) 4096)) + (< (vector-vector-distance (target-pos 0) (-> obj collide-info trans)) arg0) + ) + (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) ) - ) - (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) ) - ) ) (defbehavior nav-enemy-notice-player? nav-enemy () (let ((gp-0 #f)) - (cond - ((logtest? (-> self nav-enemy-flags) 1) - (when - (>= - (- (-> *display* base-frame-counter) (-> self notice-time)) - (-> self reaction-time) - ) - (set! gp-0 #t) - (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) - ) - ) - (else - (when - (or - (TODO-RENAME-46 self (-> self nav-info notice-distance)) - (and - (-> self nav-info use-proximity-notice) - *target* - (>= - (-> self nav-info proximity-notice-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) - ) + (cond + ((logtest? (-> self nav-enemy-flags) 1) + (when (>= (- (-> *display* base-frame-counter) (-> self notice-time)) (-> self reaction-time)) + (set! gp-0 #t) + (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) ) - ) ) - (logior! (-> self nav-enemy-flags) 1) - (set! (-> self notice-time) (-> *display* base-frame-counter)) + (else + (when (or + (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (and + (-> self nav-info use-proximity-notice) + *target* + (>= (-> self nav-info proximity-notice-distance) + (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)) + ) + ) + ) + (logior! (-> self nav-enemy-flags) 1) + (set! (-> self notice-time) (-> *display* base-frame-counter)) + ) + ) ) - ) + gp-0 ) - gp-0 - ) ) (defbehavior nav-enemy-facing-direction? nav-enemy ((arg0 vector) (arg1 float)) - (let - ((s4-0 - (vector-z-quaternion! - (new 'stack-no-clear 'vector) - (-> self collide-info quat) - ) - ) - (s5-0 (new 'stack-no-clear 'vector)) + (let ((s4-0 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self collide-info quat))) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> arg0 quad)) + (set! (-> s5-0 y) 0.0) + (vector-normalize! s5-0 1.0) + (>= (vector-dot s4-0 s5-0) (cos arg1)) ) - (set! (-> s5-0 quad) (-> arg0 quad)) - (set! (-> s5-0 y) 0.0) - (vector-normalize! s5-0 1.0) - (>= (vector-dot s4-0 s5-0) (cos arg1)) - ) ) (defbehavior nav-enemy-facing-point? nav-enemy ((arg0 vector) (arg1 float)) - (let - ((v1-1 - (vector-! (new 'stack-no-clear 'vector) arg0 (-> self collide-info trans)) - ) + (let ((v1-1 (vector-! (new 'stack-no-clear 'vector) arg0 (-> self collide-info trans)))) + (nav-enemy-facing-direction? v1-1 arg1) ) - (nav-enemy-facing-direction? v1-1 arg1) - ) ) (defun nav-enemy-facing-player? ((arg0 float)) @@ -696,26 +538,18 @@ nav-enemy-default-event-handler ) (defbehavior nav-enemy-test-point-in-nav-mesh? nav-enemy ((arg0 vector)) - (the-as - symbol - (and - (dummy-16 (-> self nav) arg0) - (< - (-> arg0 y) - (+ (-> self collide-info trans y) (-> self enemy-info notice-top)) - ) - ) - ) + (the-as symbol (and + (dummy-16 (-> self nav) arg0) + (< (-> arg0 y) (+ (-> self collide-info trans y) (-> self enemy-info notice-top))) + ) + ) ) (defbehavior nav-enemy-test-point-near-nav-mesh? nav-enemy ((arg0 vector)) (and - (dummy-25 (-> self nav) arg0 (-> self nav-info notice-nav-radius)) - (< - (-> arg0 y) - (+ (-> self collide-info trans y) (-> self enemy-info notice-top)) + (dummy-25 (-> self nav) arg0 (-> self nav-info notice-nav-radius)) + (< (-> arg0 y) (+ (-> self collide-info trans y) (-> self enemy-info notice-top))) ) - ) ) (defbehavior nav-enemy-get-new-patrol-point nav-enemy () @@ -723,73 +557,49 @@ nav-enemy-default-event-handler 0 ) -(defbehavior - nav-enemy-set-base-collide-sphere-collide-with nav-enemy - ((arg0 uint)) +(defbehavior nav-enemy-set-base-collide-sphere-collide-with nav-enemy ((arg0 uint)) (let ((s5-0 (-> self collide-info root-prim))) - (set! (-> s5-0 collide-with) arg0) - (let - ((s4-0 - (if - (and - (nonzero? s5-0) - (type-type? (-> s5-0 type) collide-shape-prim-group) - ) - s5-0 - ) - ) - (s5-1 (the-as collide-shape-prim #f)) - ) - (when s4-0 - (dotimes (s3-0 (-> (the-as collide-shape-prim-group s4-0) num-prims)) - (let* - ((s2-0 - (-> - (the-as collide-shape-prim-group (+ (* s3-0 4) (the-as int s4-0))) - prims - 0 + (set! (-> s5-0 collide-with) arg0) + (let ((s4-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) collide-shape-prim-group)) + s5-0 + ) + ) + (s5-1 (the-as collide-shape-prim #f)) ) - ) - (v1-6 - (if - (and - (nonzero? s2-0) - (type-type? (-> s2-0 type) collide-shape-prim-sphere) - ) - s2-0 - ) - ) - ) - (when v1-6 - (if - (or - (not s5-1) - (< - (-> (the-as collide-shape-prim-sphere v1-6) transform-index) - (-> (the-as collide-shape-prim-group s5-1) transform-index) - ) - (and - (= - (-> (the-as collide-shape-prim-sphere v1-6) transform-index) - (-> (the-as collide-shape-prim-group s5-1) transform-index) + (when s4-0 + (dotimes (s3-0 (-> (the-as collide-shape-prim-group s4-0) num-prims)) + (let* ((s2-0 (-> (the-as collide-shape-prim-group (+ (* s3-0 4) (the-as int s4-0))) prims 0)) + (v1-6 (if (and (nonzero? s2-0) (type-type? (-> s2-0 type) collide-shape-prim-sphere)) + s2-0 + ) + ) + ) + (when v1-6 + (if (or + (not s5-1) + (< (-> (the-as collide-shape-prim-sphere v1-6) transform-index) + (-> (the-as collide-shape-prim-group s5-1) transform-index) + ) + (and + (= (-> (the-as collide-shape-prim-sphere v1-6) transform-index) + (-> (the-as collide-shape-prim-group s5-1) transform-index) + ) + (< (-> (the-as collide-shape-prim-sphere v1-6) local-sphere y) + (-> (the-as collide-shape-prim-group s5-1) local-sphere y) + ) + ) + ) + (set! s5-1 v1-6) + ) + ) ) - (< - (-> (the-as collide-shape-prim-sphere v1-6) local-sphere y) - (-> (the-as collide-shape-prim-group s5-1) local-sphere y) - ) - ) ) - (set! s5-1 v1-6) - ) + (if s5-1 + (set! (-> s5-1 collide-with) arg0) + ) ) - ) ) - (if s5-1 - (set! (-> s5-1 collide-with) arg0) - ) - ) ) - ) 0 (none) ) @@ -797,106 +607,75 @@ nav-enemy-default-event-handler (defbehavior nav-enemy-set-hit-from-direction nav-enemy ((arg0 process)) (let* ((gp-0 (-> self hit-from-dir)) (s5-0 arg0) - (v1-1 - (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) - s5-0 - ) - ) + (v1-1 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) process-drawable)) + s5-0 + ) + ) ) - (set! (-> gp-0 quad) (-> *null-vector* quad)) - (when v1-1 - (vector-! - gp-0 - (-> self collide-info trans) - (-> (the-as process-drawable v1-1) root trans) - ) - (set! (-> gp-0 y) 0.0) - (vector-xz-normalize! gp-0 1.0) + (set! (-> gp-0 quad) (-> *null-vector* quad)) + (when v1-1 + (vector-! gp-0 (-> self collide-info trans) (-> (the-as process-drawable v1-1) root trans)) + (set! (-> gp-0 y) 0.0) + (vector-xz-normalize! gp-0 1.0) + ) ) - ) 0 (none) ) -(defbehavior - nav-enemy-fall-and-play-death-anim nav-enemy - ((arg0 art-joint-anim) (arg1 float) (arg2 float) (arg3 float) (arg4 int)) +(defbehavior nav-enemy-fall-and-play-death-anim nav-enemy ((arg0 art-joint-anim) (arg1 float) (arg2 float) (arg3 float) (arg4 int)) (nav-enemy-neck-control-inactive) (logclear! (-> self mask) (process-mask actor-pause)) (set! (-> self skel root-channel 0 frame-group) arg0) (let ((s4-1 #f) (s3-0 (-> self collide-info)) ) - (when - (if (and (nonzero? s3-0) (type-type? (-> s3-0 type) collide-shape-moving)) - s3-0 - ) - (when (= (vector-xz-length-squared (-> self hit-from-dir)) 0.0) - (vector-z-quaternion! (-> self hit-from-dir) (-> self collide-info quat)) - (vector-negate-in-place! (-> self hit-from-dir)) - (set! (-> self hit-from-dir y) 0.0) - (vector-xz-normalize! (-> self hit-from-dir) 1.0) - ) - (set! (-> self collide-info transv y) 65502.96) - (let ((v1-14 (-> self skel root-channel 0))) - (set! (-> v1-14 num-func) num-func-identity) - (set! (-> v1-14 frame-num) 0.0) - ) - (set! (-> self state-time) (-> *display* base-frame-counter)) - (set! - (-> self collide-info status) - (logand -8 (-> self collide-info status)) - ) - (until (ja-done? 0) - (cond - ((nonzero? (-> self align)) - (when (not s4-1) - (TODO-RENAME-9 (-> self align)) - (TODO-RENAME-10 (-> self align) 4098 1.0 arg1 1.0) - (when (zero? (logand (-> self align flags) 1)) - (let - ((f0-6 - (* - (- (-> self align delta trans z)) - (-> *display* frames-per-second) + (when (if (and (nonzero? s3-0) (type-type? (-> s3-0 type) collide-shape-moving)) + s3-0 + ) + (when (= (vector-xz-length-squared (-> self hit-from-dir)) 0.0) + (vector-z-quaternion! (-> self hit-from-dir) (-> self collide-info quat)) + (vector-negate-in-place! (-> self hit-from-dir)) + (set! (-> self hit-from-dir y) 0.0) + (vector-xz-normalize! (-> self hit-from-dir) 1.0) + ) + (set! (-> self collide-info transv y) 65502.96) + (let ((v1-14 (-> self skel root-channel 0))) + (set! (-> v1-14 num-func) num-func-identity) + (set! (-> v1-14 frame-num) 0.0) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self collide-info status) (logand -8 (-> self collide-info status))) + (until (ja-done? 0) + (cond + ((nonzero? (-> self align)) + (when (not s4-1) + (TODO-RENAME-9 (-> self align)) + (TODO-RENAME-10 (-> self align) 4098 1.0 arg1 1.0) + (when (zero? (logand (-> self align flags) 1)) + (let ((f0-6 (* (- (-> self align delta trans z)) (-> *display* frames-per-second)))) + (set! (-> self collide-info transv x) (* (-> self hit-from-dir x) f0-6)) + (set! (-> self collide-info transv z) (* (-> self hit-from-dir z) f0-6)) + ) + ) ) + ) + (else + (let ((f0-8 20480.0)) + (set! (-> self collide-info transv x) (* (-> self hit-from-dir x) f0-8)) + (set! (-> self collide-info transv z) (* (-> self hit-from-dir z) f0-8)) + ) ) - ) - (set! - (-> self collide-info transv x) - (* (-> self hit-from-dir x) f0-6) - ) - (set! - (-> self collide-info transv z) - (* (-> self hit-from-dir z) f0-6) - ) ) - ) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) arg2) + (joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) - (else - (let ((f0-8 20480.0)) - (set! (-> self collide-info transv x) (* (-> self hit-from-dir x) f0-8)) - (set! (-> self collide-info transv z) (* (-> self hit-from-dir z) f0-8)) - ) - ) ) - (suspend) - (let ((a0-13 (-> self skel root-channel 0))) - (set! - (-> a0-13 param 0) - (the float (+ (-> a0-13 frame-group data 0 length) -1)) - ) - (set! (-> a0-13 param 1) arg2) - (joint-control-channel-group-eval! - a0-13 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) ) - ) 0 (none) ) @@ -904,174 +683,117 @@ nav-enemy-default-event-handler (defbehavior nav-enemy-turn-to-face-dir nav-enemy ((arg0 vector) (arg1 float)) (local-vars (v1-16 symbol)) (let ((s4-0 (-> *display* base-frame-counter))) - (let ((v1-3 (-> self skel root-channel 0))) - (set! - (-> v1-3 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info turn-anim)) + (let ((v1-3 (-> self skel root-channel 0))) + (set! (-> v1-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info turn-anim))) + ) ) - ) - ) - (let ((v1-6 (-> self skel root-channel 0))) - (set! (-> v1-6 num-func) num-func-identity) - (set! (-> v1-6 frame-num) 0.0) - ) - (until v1-16 - (seek-toward-heading-vec! - (-> self collide-info) - arg0 - (-> self rotate-speed) - (-> self turn-time) - ) - (suspend) - (let ((a0-8 (-> self skel root-channel 0))) - (set! (-> a0-8 param 0) 0.75) - (joint-control-channel-group-eval! - a0-8 - (the-as art-joint-anim #f) - num-func-loop! + (let ((v1-6 (-> self skel root-channel 0))) + (set! (-> v1-6 num-func) num-func-identity) + (set! (-> v1-6 frame-num) 0.0) ) - ) - (set! - v1-16 - (or - (>= (- (-> *display* base-frame-counter) s4-0) 3000) - (nav-enemy-facing-direction? arg0 arg1) + (until v1-16 + (seek-toward-heading-vec! (-> self collide-info) arg0 (-> self rotate-speed) (-> self turn-time)) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) 0.75) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-loop!) + ) + (set! v1-16 (or (>= (- (-> *display* base-frame-counter) s4-0) 3000) (nav-enemy-facing-direction? arg0 arg1))) ) - ) ) - ) (forward-up->quaternion (-> self collide-info quat) arg0 *y-vector*) 0 (none) ) (defbehavior nav-enemy-turn-to-face-point nav-enemy ((arg0 vector) (arg1 float)) - (let - ((gp-1 - (vector-! (new 'stack-no-clear 'vector) arg0 (-> self collide-info trans)) - ) + (let ((gp-1 (vector-! (new 'stack-no-clear 'vector) arg0 (-> self collide-info trans)))) + (set! (-> gp-1 y) 0.0) + (when (< 0.0 (vector-length gp-1)) + (vector-normalize! gp-1 1.0) + (nav-enemy-turn-to-face-dir gp-1 arg1) + ) ) - (set! (-> gp-1 y) 0.0) - (when (< 0.0 (vector-length gp-1)) - (vector-normalize! gp-1 1.0) - (nav-enemy-turn-to-face-dir gp-1 arg1) - ) - ) 0 (none) ) (defmethod run-logic? nav-enemy ((obj nav-enemy)) (or - (zero? (logand (-> obj mask) (process-mask actor-pause))) - (or - (and - (nonzero? (-> obj draw)) - (and - (>= - (+ - (-> *ACTOR-bank* pause-dist) - (-> obj collide-info pause-adjust-distance) + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (and + (nonzero? (-> obj draw)) + (and + (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj collide-info pause-adjust-distance)) + (vector-vector-distance (-> obj collide-info trans) (camera-pos)) + ) + (or (logtest? (-> obj draw status) 8) (!= (-> obj next-state name) 'nav-enemy-idle)) + ) ) - (vector-vector-distance (-> obj collide-info trans) (camera-pos)) - ) - (or - (logtest? (-> obj draw status) 8) - (!= (-> obj next-state name) 'nav-enemy-idle) - ) + (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) ) - ) - (and - (nonzero? (-> obj skel)) - (!= (-> obj skel root-channel 0) (-> obj skel channel)) - ) - (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) ) - ) ) (defstate nav-enemy-idle (nav-enemy) :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :enter (behavior () - (nav-enemy-neck-control-inactive) - (set! (-> self state-time) (-> *display* base-frame-counter)) - (if (-> self nav-info move-to-ground) - (dummy-60 - (-> self collide-info) - 40960.0 - 40960.0 - #t - (-> self nav-info gnd-collide-with) - ) + (nav-enemy-neck-control-inactive) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if (-> self nav-info move-to-ground) + (dummy-60 (-> self collide-info) 40960.0 40960.0 #t (-> self nav-info gnd-collide-with)) + ) + (set! (-> self nav-enemy-flags) (logand -7 (-> self nav-enemy-flags))) + (set! (-> self state-timeout) 300) + (none) ) - (set! (-> self nav-enemy-flags) (logand -7 (-> self nav-enemy-flags))) - (set! (-> self state-timeout) 300) - (none) - ) :trans (behavior () - (if - (and - (and - *target* - (>= - (-> self enemy-info idle-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) + (if (and + (and *target* (>= (-> self enemy-info idle-distance) + (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)) + ) + ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout)) + (nonzero? (-> self draw)) + (logtest? (-> self draw status) 8) + ) + (go-virtual nav-enemy-patrol) ) - ) - ) - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (-> self state-timeout) - ) - (nonzero? (-> self draw)) - (logtest? (-> self draw status) 8) - ) - (go-virtual nav-enemy-patrol) + (none) ) - (none) - ) :code (behavior () - (ja-channel-push! 1 22) - (let ((v1-2 (-> self skel root-channel 0))) - (set! - (-> v1-2 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) + (ja-channel-push! 1 22) + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) + ) ) - ) - ) - (let ((v1-5 (-> self skel root-channel 0))) - (set! (-> v1-5 num-func) num-func-identity) - (set! (-> v1-5 frame-num) 0.0) - ) - (let ((f30-0 (nav-enemy-rnd-float-range 0.75 1.25))) - (while #t - (suspend) - (let ((a0-8 (-> self skel root-channel 0))) - (set! (-> a0-8 param 0) f30-0) - (joint-control-channel-group-eval! - a0-8 - (the-as art-joint-anim #f) - num-func-loop! - ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) ) - ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.75 1.25))) + (while #t + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + ) + (none) ) - (none) - ) :post (the-as (function none :behavior nav-enemy) ja-post) ) @@ -1080,336 +802,195 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :enter (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (set! - (-> self nav flags) - (the-as - nav-control-flags - (the-as int (logior (nav-control-flags bit19) (-> self nav flags))) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self nav flags) + (the-as nav-control-flags (the-as int (logior (nav-control-flags bit19) (-> self nav flags)))) + ) + (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) + (logior! (-> self nav-enemy-flags) 8) + (set! (-> self state-timeout) 300) + (set! (-> self target-speed) (-> self nav-info walk-travel-speed)) + (set! (-> self acceleration) (-> self nav-info walk-acceleration)) + (set! (-> self rotate-speed) (-> self nav-info walk-rotate-speed)) + (set! (-> self turn-time) (the-as int (-> self nav-info walk-turn-time))) + (none) ) - (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) - (logior! (-> self nav-enemy-flags) 8) - (set! (-> self state-timeout) 300) - (set! (-> self target-speed) (-> self nav-info walk-travel-speed)) - (set! (-> self acceleration) (-> self nav-info walk-acceleration)) - (set! (-> self rotate-speed) (-> self nav-info walk-rotate-speed)) - (set! (-> self turn-time) (the-as int (-> self nav-info walk-turn-time))) - (none) - ) :exit - (behavior () - (logior! (-> self nav-enemy-flags) 8) - (none) - ) + (behavior () (logior! (-> self nav-enemy-flags) 8) (none)) :trans (behavior () - (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) - (when - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (-> self state-timeout) - ) - (if (and (nonzero? (-> self draw)) (logtest? (-> self draw status) 8)) - (set! (-> self free-time) (-> *display* base-frame-counter)) - ) - (if - (or - (or - (not *target*) - (< - (-> self enemy-info idle-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout)) + (if (and (nonzero? (-> self draw)) (logtest? (-> self draw status) 8)) + (set! (-> self free-time) (-> *display* base-frame-counter)) + ) + (if (or + (or (not *target*) (< (-> self enemy-info idle-distance) + (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)) + ) + ) + (>= (- (-> *display* base-frame-counter) (-> self free-time)) 600) + ) + (go-virtual nav-enemy-idle) + ) + ) + (if (and + (-> self nav-info use-flee) + (and + (and *target* (>= (-> self nav-info notice-distance) + (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)) + ) + ) + (let ((gp-0 'racer) + (a1-2 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 1) + (set! (-> a1-2 message) 'query) + (set! (-> a1-2 param 0) (the-as uint 'mode)) + (= gp-0 (send-event-function *target* a1-2)) + ) + ) + ) + (go-virtual nav-enemy-flee) ) - ) - ) - (>= (- (-> *display* base-frame-counter) (-> self free-time)) 600) - ) - (go-virtual nav-enemy-idle) - ) - ) - (if - (and - (-> self nav-info use-flee) - (and - (and - *target* - (>= - (-> self nav-info notice-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) + (if (nav-enemy-notice-player?) + (go-virtual nav-enemy-notice) ) - ) - ) - (let ((gp-0 'racer) - (a1-2 (new 'stack-no-clear 'event-message-block)) - ) - (set! (-> a1-2 from) self) - (set! (-> a1-2 num-params) 1) - (set! (-> a1-2 message) 'query) - (set! (-> a1-2 param 0) (the-as uint 'mode)) - (= gp-0 (send-event-function *target* a1-2)) - ) - ) ) - (go-virtual nav-enemy-flee) - ) - (if (nav-enemy-notice-player?) - (go-virtual nav-enemy-notice) - ) + (none) ) - (none) - ) :code (behavior () - (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) - (while #t - (let ((a0-1 (-> self skel root-channel 0))) - (set! - (-> a0-1 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) - ) - ) - (set! - (-> a0-1 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) - ) - data - 0 - length - ) - -1 - ) - ) - ) - (set! (-> a0-1 param 1) f30-0) - (set! (-> a0-1 frame-num) 0.0) - (joint-control-channel-group! - a0-1 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-2 (-> self skel root-channel 0))) - (set! - (-> a0-2 param 0) - (the float (+ (-> a0-2 frame-group data 0 length) -1)) - ) - (set! (-> a0-2 param 1) f30-0) - (joint-control-channel-group-eval! - a0-2 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (when (nav-enemy-rnd-go-idle? 0.2) - (let ((a0-5 (-> self skel root-channel 0))) - (set! (-> a0-5 param 0) 1.0) - (joint-control-channel-group! - a0-5 - (the-as art-joint-anim #f) - num-func-loop! - ) - ) - (ja-channel-push! 1 180) - (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) - (let ((a0-8 (-> self skel root-channel 0))) - (set! - (-> a0-8 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) - ) - ) - (set! - (-> a0-8 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) + ) + (set! (-> a0-1 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) data 0 length) -1) + ) + ) + (set! (-> a0-1 param 1) f30-0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) + num-func-seek! ) - data - 0 - length - ) - -1 ) - ) - ) - (set! (-> a0-8 param 1) f30-0) - (set! (-> a0-8 frame-num) 0.0) - (joint-control-channel-group! - a0-8 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (ja-blend-eval) - (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) f30-0) - (joint-control-channel-group-eval! - a0-9 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (until (not (nav-enemy-rnd-go-idle? 0.2)) - (let ((a0-11 (-> self skel root-channel 0))) - (set! - (-> a0-11 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) - ) - ) - (set! - (-> a0-11 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) - ) - data - 0 - length + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) f30-0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) ) - -1 - ) ) - ) - (set! (-> a0-11 param 1) f30-0) - (set! (-> a0-11 frame-num) 0.0) - (joint-control-channel-group! - a0-11 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-12 (-> self skel root-channel 0))) - (set! - (-> a0-12 param 0) - (the float (+ (-> a0-12 frame-group data 0 length) -1)) - ) - (set! (-> a0-12 param 1) f30-0) - (joint-control-channel-group-eval! - a0-12 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - ) - (logior! (-> self nav-enemy-flags) 8) - (let ((a0-15 (-> self skel root-channel 0))) - (set! (-> a0-15 param 0) 1.0) - (joint-control-channel-group! - a0-15 - (the-as art-joint-anim #f) - num-func-loop! - ) - ) - (ja-channel-push! 1 180) - (let ((a0-17 (-> self skel root-channel 0))) - (set! - (-> a0-17 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) - ) - ) - (set! - (-> a0-17 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) + (when (nav-enemy-rnd-go-idle? 0.2) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim #f) num-func-loop!) + ) + (ja-channel-push! 1 180) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) + ) + (set! (-> a0-8 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) data 0 length) -1) + ) + ) + (set! (-> a0-8 param 1) f30-0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! + a0-8 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (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) f30-0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (until (not (nav-enemy-rnd-go-idle? 0.2)) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) + ) + (set! (-> a0-11 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) data 0 length) -1) + ) + ) + (set! (-> a0-11 param 1) f30-0) + (set! (-> a0-11 frame-num) 0.0) + (joint-control-channel-group! + a0-11 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) f30-0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (logior! (-> self nav-enemy-flags) 8) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) 1.0) + (joint-control-channel-group! a0-15 (the-as art-joint-anim #f) num-func-loop!) + ) + (ja-channel-push! 1 180) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) + ) + (set! (-> a0-17 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) data 0 length) -1) + ) + ) + (set! (-> a0-17 param 1) f30-0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! + a0-17 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-18 (-> self skel root-channel 0))) + (set! (-> a0-18 param 0) (the float (+ (-> a0-18 frame-group data 0 length) -1))) + (set! (-> a0-18 param 1) f30-0) + (joint-control-channel-group-eval! a0-18 (the-as art-joint-anim #f) num-func-seek!) + ) ) - data - 0 - length - ) - -1 ) - ) ) - (set! (-> a0-17 param 1) f30-0) - (set! (-> a0-17 frame-num) 0.0) - (joint-control-channel-group! - a0-17 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (ja-blend-eval) - (suspend) - (let ((a0-18 (-> self skel root-channel 0))) - (set! - (-> a0-18 param 0) - (the float (+ (-> a0-18 frame-group data 0 length) -1)) - ) - (set! (-> a0-18 param 1) f30-0) - (joint-control-channel-group-eval! - a0-18 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) ) - ) + (none) ) - (none) - ) :post nav-enemy-patrol-post ) @@ -1418,265 +999,170 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :enter (behavior () - (logior! (-> self nav-enemy-flags) 4) - (nav-enemy-neck-control-look-at) - (if (logtest? (-> self nav-enemy-flags) 2) - (go-virtual nav-enemy-chase) + (logior! (-> self nav-enemy-flags) 4) + (nav-enemy-neck-control-look-at) + (if (logtest? (-> self nav-enemy-flags) 2) + (go-virtual nav-enemy-chase) + ) + (logior! (-> self nav-enemy-flags) 2) + (let ((gp-0 (-> self nav)) + (v1-10 (target-pos 0)) + ) + (set! (-> gp-0 target-pos quad) (-> v1-10 quad)) + ) + (dummy-11 (-> self nav) (-> self nav target-pos)) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time))) + (none) ) - (logior! (-> self nav-enemy-flags) 2) - (let ((gp-0 (-> self nav)) - (v1-10 (target-pos 0)) - ) - (set! (-> gp-0 target-pos quad) (-> v1-10 quad)) - ) - (dummy-11 (-> self nav) (-> self nav target-pos)) - (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) - (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time))) - (none) - ) :code (behavior () - (ja-channel-push! 1 22) - (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) - (let ((a0-2 (-> self skel root-channel 0))) - (set! - (-> a0-2 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info notice-anim)) - ) - ) - (set! - (-> a0-2 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info notice-anim)) + (ja-channel-push! 1 22) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info notice-anim))) + ) + (set! (-> a0-2 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info notice-anim))) data 0 length) -1) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info notice-anim))) + num-func-seek! + ) + ) + (until (ja-done? 0) + (seek-toward-heading-vec! + (-> self collide-info) + (-> self nav travel) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) f30-0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) ) - data - 0 - length - ) - -1 ) - ) ) - (set! (-> a0-2 param 1) f30-0) - (set! (-> a0-2 frame-num) 0.0) - (joint-control-channel-group! - a0-2 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info notice-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (seek-toward-heading-vec! - (-> self collide-info) - (-> self nav travel) - (-> self rotate-speed) - (-> self turn-time) - ) - (suspend) - (let ((a0-4 (-> self skel root-channel 0))) - (set! - (-> a0-4 param 0) - (the float (+ (-> a0-4 frame-group data 0 length) -1)) - ) - (set! (-> a0-4 param 1) f30-0) - (joint-control-channel-group-eval! - a0-4 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (go-virtual nav-enemy-chase) + (none) ) - (go-virtual nav-enemy-chase) - (none) - ) :post nav-enemy-simple-post ) (defbehavior ja-group-index? nav-enemy ((arg0 int)) (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data arg0) - ) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data arg0) + ) ) (defstate nav-enemy-flee (nav-enemy) :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-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 () - (when - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (-> self reaction-time) - ) - (if - (or - (or - (not *target*) - (< - (-> self nav-info stop-chase-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) - ) - ) - ) - (let ((gp-0 'racer) - (a1-1 (new 'stack-no-clear 'event-message-block)) - ) - (set! (-> a1-1 from) self) - (set! (-> a1-1 num-params) 1) - (set! (-> a1-1 message) 'query) - (set! (-> a1-1 param 0) (the-as uint 'mode)) - (!= gp-0 (send-event-function *target* a1-1)) - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self reaction-time)) + (if (or + (or (not *target*) (< (-> self nav-info stop-chase-distance) + (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)) + ) + ) + (let ((gp-0 'racer) + (a1-1 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 1) + (set! (-> a1-1 message) 'query) + (set! (-> a1-1 param 0) (the-as uint 'mode)) + (!= gp-0 (send-event-function *target* a1-1)) + ) + ) + (go-virtual nav-enemy-patrol) + ) ) - (go-virtual nav-enemy-patrol) - ) + (none) ) - (none) - ) :code (behavior () - (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) - (ja-channel-push! 1 60) - (let ((a0-2 (-> self skel root-channel 0))) - (set! - (-> a0-2 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info notice-anim)) - ) - ) - (set! - (-> a0-2 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info notice-anim)) + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (ja-channel-push! 1 60) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info notice-anim))) + ) + (set! (-> a0-2 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info notice-anim))) data 0 length) -1) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info notice-anim))) + num-func-seek! ) - data - 0 - length - ) - -1 ) - ) - ) - (set! (-> a0-2 param 1) f30-0) - (set! (-> a0-2 frame-num) 0.0) - (joint-control-channel-group! - a0-2 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info notice-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-3 (-> self skel root-channel 0))) - (set! - (-> a0-3 param 0) - (the float (+ (-> a0-3 frame-group data 0 length) -1)) - ) - (set! (-> a0-3 param 1) f30-0) - (joint-control-channel-group-eval! - a0-3 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (ja-channel-push! 1 60) - (while #t - (let ((a0-6 (-> self skel root-channel 0))) - (set! - (-> a0-6 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) - ) - ) - (set! - (-> a0-6 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) - ) - data - 0 - length + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) f30-0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) ) - -1 - ) ) - ) - (set! (-> a0-6 param 1) f30-0) - (set! (-> a0-6 frame-num) 0.0) - (joint-control-channel-group! - a0-6 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) + (ja-channel-push! 1 60) + (while #t + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) + ) + (set! (-> a0-6 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) data 0 length) -1) + ) + ) + (set! (-> a0-6 param 1) f30-0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! + a0-6 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) f30-0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) ) - num-func-seek! - ) ) - (until (ja-done? 0) - (suspend) - (let ((a0-7 (-> self skel root-channel 0))) - (set! - (-> a0-7 param 0) - (the float (+ (-> a0-7 frame-group data 0 length) -1)) - ) - (set! (-> a0-7 param 1) f30-0) - (joint-control-channel-group-eval! - a0-7 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - ) + (none) ) - (none) - ) :post nav-enemy-face-player-post ) @@ -1684,8 +1170,8 @@ nav-enemy-default-event-handler (defbehavior nav-enemy-reset-frustration nav-enemy () (set! (-> self nav-enemy-flags) (logand -8193 (-> self nav-enemy-flags))) (if *target* - (set! (-> self frustration-point quad) (-> *target* control shadow-pos quad)) - ) + (set! (-> self frustration-point quad) (-> *target* control shadow-pos quad)) + ) (set! (-> self frustration-time) (-> *display* base-frame-counter)) 0 (none) @@ -1693,124 +1179,96 @@ nav-enemy-default-event-handler (defbehavior nav-enemy-player-at-frustration-point? nav-enemy () (if *target* - (< - (vector-vector-distance - (-> *target* control shadow-pos) - (-> self frustration-point) - ) - 6144.0 - ) - ) + (< (vector-vector-distance (-> *target* control shadow-pos) (-> self frustration-point)) 6144.0) + ) ) (defbehavior nav-enemy-frustrated? nav-enemy () - (and - (logtest? (-> self nav-enemy-flags) 8192) - (nav-enemy-player-at-frustration-point?) - ) + (and (logtest? (-> self nav-enemy-flags) 8192) (nav-enemy-player-at-frustration-point?)) ) (defstate nav-enemy-chase (nav-enemy) :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :enter (behavior () - (nav-enemy-neck-control-look-at) - (set! (-> self state-time) (-> *display* base-frame-counter)) - (set! (-> self free-time) (-> *display* base-frame-counter)) - (logior! (-> self nav-enemy-flags) 4) - (set! (-> self target-speed) (-> self nav-info run-travel-speed)) - (set! (-> self acceleration) (-> self nav-info run-acceleration)) - (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) - (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time))) - (nav-enemy-reset-frustration) - (none) - ) + (nav-enemy-neck-control-look-at) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self free-time) (-> *display* base-frame-counter)) + (logior! (-> self nav-enemy-flags) 4) + (set! (-> self target-speed) (-> self nav-info run-travel-speed)) + (set! (-> self acceleration) (-> self nav-info run-acceleration)) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time))) + (nav-enemy-reset-frustration) + (none) + ) :trans (behavior () - (if (logtest? (-> *target* state-flags) 128) - (go-virtual nav-enemy-patrol) + (if (logtest? (-> *target* state-flags) 128) + (go-virtual nav-enemy-patrol) + ) + (if (logtest? (-> self nav-enemy-flags) 256) + (go-virtual nav-enemy-victory) + ) + (if (or + (not (nav-enemy-player-at-frustration-point?)) + (< (-> self nav-info frustration-distance) + (vector-vector-xz-distance (target-pos 0) (-> self collide-info trans)) + ) + ) + (nav-enemy-reset-frustration) + ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self reaction-time)) + (if (>= (- (-> *display* base-frame-counter) (-> self frustration-time)) + (+ (-> self reaction-time) (-> self nav-info frustration-time)) + ) + (logior! (-> self nav-enemy-flags) 8192) + ) + (if (or + (not (TODO-RENAME-46 self (-> self nav-info stop-chase-distance))) + (logtest? (-> self nav-enemy-flags) 8192) + ) + (go-virtual nav-enemy-stop-chase) + ) + (cond + ((logtest? (nav-control-flags bit17) (-> self nav flags)) + (if (>= (- (-> *display* base-frame-counter) (-> self free-time)) 300) + (go-virtual nav-enemy-patrol) + ) + ) + (else + (set! (-> self free-time) (-> *display* base-frame-counter)) + ) + ) + ) + (none) ) - (if (logtest? (-> self nav-enemy-flags) 256) - (go-virtual nav-enemy-victory) - ) - (if - (or - (not (nav-enemy-player-at-frustration-point?)) - (< - (-> self nav-info frustration-distance) - (vector-vector-xz-distance (target-pos 0) (-> self collide-info trans)) - ) - ) - (nav-enemy-reset-frustration) - ) - (when - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (-> self reaction-time) - ) - (if - (>= - (- (-> *display* base-frame-counter) (-> self frustration-time)) - (+ (-> self reaction-time) (-> self nav-info frustration-time)) - ) - (logior! (-> self nav-enemy-flags) 8192) - ) - (if - (or - (not (TODO-RENAME-46 self (-> self nav-info stop-chase-distance))) - (logtest? (-> self nav-enemy-flags) 8192) - ) - (go-virtual nav-enemy-stop-chase) - ) - (cond - ((logtest? (nav-control-flags bit17) (-> self nav flags)) - (if (>= (- (-> *display* base-frame-counter) (-> self free-time)) 300) - (go-virtual nav-enemy-patrol) - ) - ) - (else - (set! (-> self free-time) (-> *display* base-frame-counter)) - ) - ) - ) - (none) - ) :code (behavior () - (ja-channel-push! 1 60) - (let ((v1-2 (-> self skel root-channel 0))) - (set! - (-> v1-2 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info run-anim)) + (ja-channel-push! 1 60) + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 frame-group) (the-as art-joint-anim (-> self draw art-group data (-> self nav-info run-anim)))) ) - ) - ) - (let ((v1-5 (-> self skel root-channel 0))) - (set! (-> v1-5 num-func) num-func-identity) - (set! (-> v1-5 frame-num) 0.0) - ) - (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) - (while #t - (suspend) - (let ((a0-8 (-> self skel root-channel 0))) - (set! (-> a0-8 param 0) f30-0) - (joint-control-channel-group-eval! - a0-8 - (the-as art-joint-anim #f) - num-func-loop! - ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) ) - ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.9 1.1))) + (while #t + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + ) + (none) ) - (none) - ) :post nav-enemy-chase-post ) @@ -1819,104 +1277,71 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :enter (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (let* - ((f30-0 - (vector-vector-distance (-> self collide-info trans) (target-pos 0)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let* ((f30-0 (vector-vector-distance (-> self collide-info trans) (target-pos 0))) + (gp-1 (the int (+ (lerp-scale 600.0 1800.0 f30-0 32768.0 122880.0) (nav-enemy-rnd-float-range 0.0 30.0)))) + ) + (if (< f30-0 40960.0) + (go-virtual nav-enemy-stare) + ) + (set! (-> self state-timeout) gp-1) ) - (gp-1 - (the - int - (+ - (lerp-scale 600.0 1800.0 f30-0 32768.0 122880.0) - (nav-enemy-rnd-float-range 0.0 30.0) - ) - ) - ) - ) - (if (< f30-0 40960.0) - (go-virtual nav-enemy-stare) - ) - (set! (-> self state-timeout) gp-1) + (set! (-> self target-speed) (-> self nav-info walk-travel-speed)) + (set! (-> self acceleration) (-> self nav-info walk-acceleration)) + (set! (-> self rotate-speed) (-> self nav-info walk-rotate-speed)) + (set! (-> self turn-time) (the-as int (-> self nav-info walk-turn-time))) + (none) ) - (set! (-> self target-speed) (-> self nav-info walk-travel-speed)) - (set! (-> self acceleration) (-> self nav-info walk-acceleration)) - (set! (-> self rotate-speed) (-> self nav-info walk-rotate-speed)) - (set! (-> self turn-time) (the-as int (-> self nav-info walk-turn-time))) - (none) - ) :trans (behavior () - (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) - (if (logtest? (-> *target* state-flags) 128) - (go-virtual nav-enemy-patrol) - ) - (if - (and - (TODO-RENAME-46 self (-> self nav-info notice-distance)) - (not (nav-enemy-frustrated?)) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (if (logtest? (-> *target* state-flags) 128) + (go-virtual nav-enemy-patrol) + ) + (if (and (TODO-RENAME-46 self (-> self nav-info notice-distance)) (not (nav-enemy-frustrated?))) + (go-virtual nav-enemy-chase) + ) + (if (or + (or (not *target*) (< (-> self enemy-info idle-distance) + (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)) + ) + ) + (logtest? (nav-control-flags bit17) (-> self nav flags)) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout)) + ) + (go-virtual nav-enemy-stare) + ) ) - (go-virtual nav-enemy-chase) - ) - (if - (or - (or - (not *target*) - (< - (-> self enemy-info idle-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) - ) - ) - ) - (logtest? (nav-control-flags bit17) (-> self nav flags)) - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (-> self state-timeout) - ) - ) - (go-virtual nav-enemy-stare) - ) + (none) ) - (none) - ) :code (behavior () - (ja-channel-push! 1 30) - (let ((v1-2 (-> self skel root-channel 0))) - (set! - (-> v1-2 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) + (ja-channel-push! 1 30) + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) + ) ) - ) - ) - (let ((v1-5 (-> self skel root-channel 0))) - (set! (-> v1-5 num-func) num-func-identity) - (set! (-> v1-5 frame-num) 0.0) - ) - (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) - (while #t - (suspend) - (let ((a0-8 (-> self skel root-channel 0))) - (set! (-> a0-8 param 0) f30-0) - (joint-control-channel-group-eval! - a0-8 - (the-as art-joint-anim #f) - num-func-loop! - ) + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) ) - ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (while #t + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + ) + (none) ) - (none) - ) :post nav-enemy-chase-post ) @@ -1925,119 +1350,75 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :enter (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) - (let - ((f0-0 (vector-vector-distance (-> self collide-info trans) (target-pos 0))) - ) - (set! - (-> self state-timeout) - (the - int - (+ - (lerp-scale 3000.0 0.0 f0-0 12288.0 122880.0) - (nav-enemy-rnd-float-range 0.0 900.0) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (let ((f0-0 (vector-vector-distance (-> self collide-info trans) (target-pos 0)))) + (set! (-> self state-timeout) + (the int (+ (lerp-scale 3000.0 0.0 f0-0 12288.0 122880.0) (nav-enemy-rnd-float-range 0.0 900.0))) + ) ) - ) + (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) + (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time))) + (set! (-> self collide-info transv quad) (-> *null-vector* quad)) + (none) ) - (set! (-> self rotate-speed) (-> self nav-info run-rotate-speed)) - (set! (-> self turn-time) (the-as int (-> self nav-info run-turn-time))) - (set! (-> self collide-info transv quad) (-> *null-vector* quad)) - (none) - ) :exit - (behavior () - (logior! (-> self nav-enemy-flags) 16) - (none) - ) + (behavior () (logior! (-> self nav-enemy-flags) 16) (none)) :trans (behavior () - (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) - (if (logtest? (-> *target* state-flags) 128) - (go-virtual nav-enemy-patrol) - ) - (cond - ((TODO-RENAME-46 self (-> self nav-info notice-distance)) - (if - (and - (>= - (- (-> *display* base-frame-counter) (-> self notice-time)) - (-> self reaction-time) - ) - (not (nav-enemy-frustrated?)) - ) - (go-virtual nav-enemy-chase) - ) - ) - (else - (set! (-> self notice-time) (-> *display* base-frame-counter)) - ) - ) - (when - (not - (or - (and - *target* - (>= - 40960.0 - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (if (logtest? (-> *target* state-flags) 128) + (go-virtual nav-enemy-patrol) ) + (cond + ((TODO-RENAME-46 self (-> self nav-info notice-distance)) + (if (and + (>= (- (-> *display* base-frame-counter) (-> self notice-time)) (-> self reaction-time)) + (not (nav-enemy-frustrated?)) + ) + (go-virtual nav-enemy-chase) + ) ) - ) - (and - (-> self nav-info use-proximity-notice) - *target* - (>= - (-> self nav-info proximity-notice-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) + (else + (set! (-> self notice-time) (-> *display* base-frame-counter)) ) - ) ) - ) - ) - (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) - (if - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (-> self state-timeout) - ) - (go-virtual nav-enemy-give-up) - ) - ) - (if - (or - (or - (not *target*) - (< - (-> self enemy-info idle-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) - ) + (when (not + (or + (and *target* (>= 40960.0 (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)))) + (and + (-> self nav-info use-proximity-notice) + *target* + (>= (-> self nav-info proximity-notice-distance) + (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)) + ) + ) + ) + ) + (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout)) + (go-virtual nav-enemy-give-up) + ) ) - ) - (logtest? (nav-control-flags bit17) (-> self nav flags)) + (if (or + (or (not *target*) (< (-> self enemy-info idle-distance) + (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)) + ) + ) + (logtest? (nav-control-flags bit17) (-> self nav flags)) + ) + (go-virtual nav-enemy-give-up) + ) ) - (go-virtual nav-enemy-give-up) - ) + (none) ) - (none) - ) :code - (behavior () - (go-virtual nav-enemy-give-up) - (none) - ) + (behavior () (go-virtual nav-enemy-give-up) (none)) :post nav-enemy-face-player-post ) @@ -2046,30 +1427,27 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :enter (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (nav-enemy-neck-control-inactive) - (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) - (none) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (nav-enemy-neck-control-inactive) + (set! (-> self nav-enemy-flags) (logand -5 (-> self nav-enemy-flags))) + (none) + ) :trans (behavior () - (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) - (if (TODO-RENAME-46 self (-> self nav-info notice-distance)) - (go-virtual nav-enemy-chase) - ) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 30) + (if (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + ) + (none) ) - (none) - ) :code - (behavior () - (go-virtual nav-enemy-patrol) - (none) - ) + (behavior () (go-virtual nav-enemy-patrol) (none)) :post nav-enemy-simple-post ) @@ -2078,14 +1456,11 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :code - (behavior () - (go-virtual nav-enemy-victory) - (none) - ) + (behavior () (go-virtual nav-enemy-victory) (none)) :post nav-enemy-simple-post ) @@ -2094,74 +1469,46 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :enter - (behavior () - (set! (-> self collide-info transv quad) (-> *null-vector* quad)) - (none) - ) + (behavior () (set! (-> self collide-info transv quad) (-> *null-vector* quad)) (none)) :code (behavior () - (ja-channel-push! 1 22) - (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) - (let ((a0-2 (-> self skel root-channel 0))) - (set! - (-> a0-2 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info victory-anim)) - ) - ) - (set! - (-> a0-2 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info victory-anim)) + (ja-channel-push! 1 22) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim))) + ) + (set! (-> a0-2 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim))) data 0 length) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim))) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) f30-0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) ) - data - 0 - length - ) - -1 ) - ) ) - (set! (-> a0-2 param 1) f30-0) - (set! (-> a0-2 frame-num) 0.0) - (joint-control-channel-group! - a0-2 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info victory-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-3 (-> self skel root-channel 0))) - (set! - (-> a0-3 param 0) - (the float (+ (-> a0-3 frame-group data 0 length) -1)) - ) - (set! (-> a0-3 param 1) f30-0) - (joint-control-channel-group-eval! - a0-3 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (go-virtual nav-enemy-stare) + (none) ) - (go-virtual nav-enemy-stare) - (none) - ) :post nav-enemy-simple-post ) @@ -2170,38 +1517,32 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - process-drawable-death-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + process-drawable-death-event-handler + ) :enter - (behavior () - (send-event (ppointer->process (-> self parent)) 'child-die) - (none) - ) + (behavior () (send-event (ppointer->process (-> self parent)) 'child-die) (none)) :code (behavior () - (ja-channel-push! 1 22) - (clear-collide-with-as (-> self collide-info)) - (nav-enemy-fall-and-play-death-anim - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info die-anim)) - ) - 1.0 - 1.0 - 1000000000000000.0 - 600 + (ja-channel-push! 1 22) + (clear-collide-with-as (-> self collide-info)) + (nav-enemy-fall-and-play-death-anim + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info die-anim))) + 1.0 + 1.0 + 1000000000000000.0 + 600 + ) + (send-event self 'death-end) + (if (logtest? (-> self enemy-info options) (fact-options fop1)) + (go-virtual nav-enemy-fuel-cell) + ) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + (none) ) - (send-event self 'death-end) - (if (logtest? (-> self enemy-info options) (fact-options fop1)) - (go-virtual nav-enemy-fuel-cell) - ) - (while (-> self child) - (suspend) - ) - (dummy-18 self) - (none) - ) :post nav-enemy-death-post ) @@ -2210,130 +1551,90 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - process-drawable-fuel-cell-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + process-drawable-fuel-cell-handler + ) :code (behavior () - (ja-channel-set! 0) - (clear-collide-with-as (-> self collide-info)) - (ja-post) - (process-entity-status! self (entity-perm-status complete) #t) - (when (not (task-complete? *game-info* (-> self entity extra perm task))) - (label cfg-1) - (birth-pickup-at-point - (-> self collide-info trans) - (pickup-type fuel-cell) - (the float (the-as int (-> self entity extra perm task))) - #f - self - (the-as fact-info #f) - ) - (when (not (-> self child)) - (suspend) - (goto cfg-1) - ) - (while (-> self child) - (suspend) - ) + (ja-channel-set! 0) + (clear-collide-with-as (-> self collide-info)) + (ja-post) + (process-entity-status! self (entity-perm-status complete) #t) + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (label cfg-1) + (birth-pickup-at-point + (-> self collide-info trans) + (pickup-type fuel-cell) + (the float (the-as int (-> self entity extra perm task))) + #f + self + (the-as fact-info #f) + ) + (when (not (-> self child)) + (suspend) + (goto cfg-1) + ) + (while (-> self child) + (suspend) + ) + ) + (dummy-18 self) + (none) ) - (dummy-18 self) - (none) - ) ) (defbehavior nav-enemy-jump-post nav-enemy () (if (logtest? (-> self nav-enemy-flags) 16) - (seek-to-point-toward-point! - (-> self collide-info) - (-> self jump-dest) - (-> self rotate-speed) - (-> self turn-time) - ) - ) - (when (logtest? (-> self nav-enemy-flags) 8) - (let - ((f30-0 - (the - float - (- (-> *display* base-frame-counter) (the-as int (-> self jump-time))) - ) - ) - ) - (let - ((v1-12 - (eval-position! - (-> self jump-trajectory) - f30-0 - (new 'stack-no-clear 'vector) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self jump-dest) + (-> self rotate-speed) + (-> self turn-time) ) - ) ) - (set! (-> self collide-info trans quad) (-> v1-12 quad)) - ) - (eval-velocity! - (-> self jump-trajectory) - f30-0 - (-> self collide-info transv) - ) + (when (logtest? (-> self nav-enemy-flags) 8) + (let ((f30-0 (the float (- (-> *display* base-frame-counter) (the-as int (-> self jump-time)))))) + (let ((v1-12 (eval-position! (-> self jump-trajectory) f30-0 (new 'stack-no-clear 'vector)))) + (set! (-> self collide-info trans quad) (-> v1-12 quad)) + ) + (eval-velocity! (-> self jump-trajectory) f30-0 (-> self collide-info transv)) + ) ) - ) (nav-enemy-simple-post) 0 (none) ) -(defbehavior - nav-enemy-initialize-custom-jump nav-enemy - ((arg0 vector) (arg1 symbol) (arg2 float) (arg3 float) (arg4 float)) +(defbehavior nav-enemy-initialize-custom-jump nav-enemy ((arg0 vector) (arg1 symbol) (arg2 float) (arg3 float) (arg4 float)) (set! (-> self jump-dest quad) (-> arg0 quad)) (let* ((s4-0 (-> self collide-info trans)) (f28-0 (vector-vector-xz-distance s4-0 arg0)) (f30-0 (fmax arg2 (* arg3 f28-0))) ) - (let ((f26-0 (- (-> arg0 y) (-> s4-0 y)))) - (let ((f24-0 (vector-length (-> self collide-info transv))) - (s1-1 - (vector-z-quaternion! - (new 'stack-no-clear 'vector) - (-> self collide-info quat) + (let ((f26-0 (- (-> arg0 y) (-> s4-0 y)))) + (let ((f24-0 (vector-length (-> self collide-info transv))) + (s1-1 (vector-z-quaternion! (new 'stack-no-clear 'vector) (-> self collide-info quat))) + (s2-2 (vector-! (new 'stack-no-clear 'vector) arg0 s4-0)) ) - ) - (s2-2 (vector-! (new 'stack-no-clear 'vector) arg0 s4-0)) + (set! (-> s1-1 y) 0.0) + (set! (-> s2-2 y) 0.0) + (vector-xz-normalize! s1-1 1.0) + (vector-xz-normalize! s2-2 1.0) + (set! (-> self nav-enemy-flags) (logand -1537 (-> self nav-enemy-flags))) + (if (or (>= (* 0.5 (-> self nav-info run-travel-speed)) f24-0) (>= (cos 3640.889) (vector-dot s1-1 s2-2))) + (logior! (-> self nav-enemy-flags) 512) + ) + ) + (if (or (and (< f26-0 0.0) (< f28-0 (fabs f26-0))) (and (< (fabs f26-0) 12288.0) (< f28-0 20480.0))) + (logior! (-> self nav-enemy-flags) 1024) ) - (set! (-> s1-1 y) 0.0) - (set! (-> s2-2 y) 0.0) - (vector-xz-normalize! s1-1 1.0) - (vector-xz-normalize! s2-2 1.0) - (set! (-> self nav-enemy-flags) (logand -1537 (-> self nav-enemy-flags))) - (if - (or - (>= (* 0.5 (-> self nav-info run-travel-speed)) f24-0) - (>= (cos 3640.889) (vector-dot s1-1 s2-2)) - ) - (logior! (-> self nav-enemy-flags) 512) ) - ) - (if - (or - (and (< f26-0 0.0) (< f28-0 (fabs f26-0))) - (and (< (fabs f26-0) 12288.0) (< f28-0 20480.0)) + (when (and arg1 (logtest? (-> self nav-enemy-flags) 1024)) + (set! (-> self nav-enemy-flags) (logand -513 (-> self nav-enemy-flags))) + (set! f30-0 2048.0) ) - (logior! (-> self nav-enemy-flags) 1024) - ) + (setup-from-to-height! (-> self jump-trajectory) s4-0 arg0 f30-0 (* 0.000011111111 arg4)) ) - (when (and arg1 (logtest? (-> self nav-enemy-flags) 1024)) - (set! (-> self nav-enemy-flags) (logand -513 (-> self nav-enemy-flags))) - (set! f30-0 2048.0) - ) - (setup-from-to-height! - (-> self jump-trajectory) - s4-0 - arg0 - f30-0 - (* 0.000011111111 arg4) - ) - ) (set! (-> self nav extra-nav-sphere quad) (-> arg0 quad)) (set! (-> self nav extra-nav-sphere w) (-> self collide-info nav-radius)) (logior! (-> self collide-info nav-flags) 2) @@ -2343,224 +1644,149 @@ nav-enemy-default-event-handler (defbehavior nav-enemy-initialize-jump nav-enemy ((arg0 vector)) (nav-enemy-initialize-custom-jump - arg0 - #t - (-> self nav-info jump-height-min) - (-> self nav-info jump-height-factor) - -409600.0 - ) + arg0 + #t + (-> self nav-info jump-height-min) + (-> self nav-info jump-height-factor) + -409600.0 + ) 0 (none) ) -(defbehavior - nav-enemy-execute-custom-jump nav-enemy - ((arg0 int) (arg1 float) (arg2 float)) +(defbehavior nav-enemy-execute-custom-jump nav-enemy ((arg0 int) (arg1 float) (arg2 float)) (when (logtest? (-> self nav-enemy-flags) 512) - (let ((a0-1 (-> self skel root-channel 0))) - (set! (-> a0-1 param 0) 1.0) - (joint-control-channel-group! - a0-1 - (the-as art-joint-anim #f) - num-func-loop! - ) - ) - (ja-channel-push! 1 30) - (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) - (let ((s3-0 (-> self skel root-channel 0))) - (set! - (-> s3-0 frame-group) - (the-as art-joint-anim (-> self draw art-group data arg0)) - ) - (set! (-> s3-0 param 0) (ja-aframe arg1 0)) - (set! (-> s3-0 param 1) arg2) - (set! (-> s3-0 frame-num) 0.0) - (joint-control-channel-group! - s3-0 - (the-as art-joint-anim (-> self draw art-group data arg0)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (ja-blend-eval) - (suspend) - (let ((s3-1 (-> self skel root-channel 0))) - (set! (-> s3-1 param 0) (ja-aframe arg1 0)) - (set! (-> s3-1 param 1) arg2) - (joint-control-channel-group-eval! - s3-1 - (the-as art-joint-anim #f) - num-func-seek! + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) 1.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim #f) num-func-loop!) + ) + (ja-channel-push! 1 30) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (let ((s3-0 (-> self skel root-channel 0))) + (set! (-> s3-0 frame-group) (the-as art-joint-anim (-> self draw art-group data arg0))) + (set! (-> s3-0 param 0) (ja-aframe arg1 0)) + (set! (-> s3-0 param 1) arg2) + (set! (-> s3-0 frame-num) 0.0) + (joint-control-channel-group! s3-0 (the-as art-joint-anim (-> self draw art-group data arg0)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((s3-1 (-> self skel root-channel 0))) + (set! (-> s3-1 param 0) (ja-aframe arg1 0)) + (set! (-> s3-1 param 1) arg2) + (joint-control-channel-group-eval! s3-1 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) ) - ) (set! (-> self collide-info status) (logand -8 (-> self collide-info status))) (set! (-> self jump-time) (the-as uint (-> *display* base-frame-counter))) (logior! (-> self nav-enemy-flags) 8) (cond - ((logtest? (-> self nav-enemy-flags) 1024) - (cond - ((= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data (-> self nav-info run-anim)) - ) - ) - (else - (let ((a0-22 (-> self skel root-channel 0))) - (set! (-> a0-22 param 0) 1.0) - (joint-control-channel-group! - a0-22 - (the-as art-joint-anim #f) - num-func-loop! + ((logtest? (-> self nav-enemy-flags) 1024) + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data (-> self nav-info run-anim)) + ) ) - ) - (ja-channel-push! 1 30) - (let ((v1-39 (-> self skel root-channel 0))) - (set! - (-> v1-39 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info run-anim)) + (else + (let ((a0-22 (-> self skel root-channel 0))) + (set! (-> a0-22 param 0) 1.0) + (joint-control-channel-group! a0-22 (the-as art-joint-anim #f) num-func-loop!) + ) + (ja-channel-push! 1 30) + (let ((v1-39 (-> self skel root-channel 0))) + (set! (-> v1-39 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info run-anim))) + ) + ) + (let ((v1-42 (-> self skel root-channel 0))) + (set! (-> v1-42 num-func) num-func-identity) + (set! (-> v1-42 frame-num) 0.0) + ) ) + ) + ) + (else + (let ((a0-30 (-> self skel root-channel 0))) + (set! (-> a0-30 param 0) 1.0) + (joint-control-channel-group! a0-30 (the-as art-joint-anim #f) num-func-loop!) + ) + (ja-channel-push! 1 30) + (let ((v1-49 (-> self skel root-channel 0))) + (set! (-> v1-49 frame-group) (the-as art-joint-anim (-> self draw art-group data arg0))) + ) + (let ((s5-1 (-> self skel root-channel 0))) + (set! (-> s5-1 num-func) num-func-identity) + (set! (-> s5-1 frame-num) (ja-aframe arg1 0)) ) - ) - (let ((v1-42 (-> self skel root-channel 0))) - (set! (-> v1-42 num-func) num-func-identity) - (set! (-> v1-42 frame-num) 0.0) - ) ) - ) ) - (else - (let ((a0-30 (-> self skel root-channel 0))) - (set! (-> a0-30 param 0) 1.0) - (joint-control-channel-group! - a0-30 - (the-as art-joint-anim #f) - num-func-loop! + (while (< (the float (- (-> *display* base-frame-counter) (the-as int (-> self jump-time)))) + (-> self jump-trajectory time) + ) + (suspend) + (let ((a0-36 (-> self skel root-channel 0))) + (set! (-> a0-36 param 0) (the float (+ (-> a0-36 frame-group data 0 length) -1))) + (set! (-> a0-36 param 1) 1.0) + (joint-control-channel-group-eval! a0-36 (the-as art-joint-anim #f) num-func-seek!) ) - ) - (ja-channel-push! 1 30) - (let ((v1-49 (-> self skel root-channel 0))) - (set! - (-> v1-49 frame-group) - (the-as art-joint-anim (-> self draw art-group data arg0)) - ) - ) - (let ((s5-1 (-> self skel root-channel 0))) - (set! (-> s5-1 num-func) num-func-identity) - (set! (-> s5-1 frame-num) (ja-aframe arg1 0)) - ) + (ja-blend-eval) ) - ) - (while - (< - (the - float - (- (-> *display* base-frame-counter) (the-as int (-> self jump-time))) - ) - (-> self jump-trajectory time) - ) - (suspend) - (let ((a0-36 (-> self skel root-channel 0))) - (set! - (-> a0-36 param 0) - (the float (+ (-> a0-36 frame-group data 0 length) -1)) - ) - (set! (-> a0-36 param 1) 1.0) - (joint-control-channel-group-eval! - a0-36 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (ja-blend-eval) - ) (set! (-> self collide-info trans quad) (-> self jump-dest quad)) (set! (-> self collide-info transv y) 0.0) - (set! - (-> self collide-info nav-flags) - (logand -3 (-> self collide-info nav-flags)) - ) + (set! (-> self collide-info nav-flags) (logand -3 (-> self collide-info nav-flags))) 0 (none) ) (defbehavior nav-enemy-execute-jump nav-enemy () (nav-enemy-execute-custom-jump - (-> self nav-info jump-anim) - (-> self nav-info jump-anim-start-frame) - (-> self nav-info jump-start-anim-speed) - ) + (-> self nav-info jump-anim) + (-> self nav-info jump-anim-start-frame) + (-> self nav-info jump-start-anim-speed) + ) 0 (none) ) (defbehavior nav-enemy-jump-land-anim nav-enemy () (let ((a0-0 (-> self skel root-channel 0))) - (set! - (-> a0-0 param 0) - (the float (+ (-> a0-0 frame-group data 0 length) -1)) + (set! (-> a0-0 param 0) (the float (+ (-> a0-0 frame-group data 0 length) -1))) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) ) - (set! (-> a0-0 param 1) 1.0) - (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) - ) (ja-channel-push! 1 22) (let ((a0-2 (-> self skel root-channel 0))) - (set! - (-> a0-2 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info jump-land-anim)) - ) - ) - (set! - (-> a0-2 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info jump-land-anim)) - ) - data - 0 - length - ) - -1 + (set! (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info jump-land-anim))) + ) + (set! (-> a0-2 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info jump-land-anim))) 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 (-> self nav-info jump-land-anim))) + num-func-seek! ) - ) ) - (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 (-> self nav-info jump-land-anim)) - ) - num-func-seek! - ) - ) (until (ja-done? 0) - (ja-blend-eval) - (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! - ) + (ja-blend-eval) + (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!) + ) ) - ) 0 (none) ) @@ -2571,36 +1797,29 @@ nav-enemy-default-event-handler nav-enemy-jump-event-handler :enter (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (if - (and - (-> self nav-info use-jump-blocked) - (TODO-RENAME-50 self (-> self event-param-point)) - ) - (go-virtual nav-enemy-jump-blocked) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if (and (-> self nav-info use-jump-blocked) (TODO-RENAME-50 self (-> self event-param-point))) + (go-virtual nav-enemy-jump-blocked) + ) + (nav-enemy-initialize-jump (-> self event-param-point)) + (none) ) - (nav-enemy-initialize-jump (-> self event-param-point)) - (none) - ) :exit - (behavior () - (logior! (-> self nav-enemy-flags) 24) - (none) - ) + (behavior () (logior! (-> self nav-enemy-flags) 24) (none)) :code (behavior () - (nav-enemy-execute-jump) - (let ((a1-0 (-> self nav user-poly))) - (if (not a1-0) - (set! a1-0 (dummy-16 (-> self nav) (-> self jump-dest))) - ) - (if a1-0 - (set-current-poly! (-> self nav) a1-0) - ) + (nav-enemy-execute-jump) + (let ((a1-0 (-> self nav user-poly))) + (if (not a1-0) + (set! a1-0 (dummy-16 (-> self nav) (-> self jump-dest))) + ) + (if a1-0 + (set-current-poly! (-> self nav) a1-0) + ) + ) + (go-virtual nav-enemy-jump-land) + (none) ) - (go-virtual nav-enemy-jump-land) - (none) - ) :post nav-enemy-jump-post ) @@ -2608,60 +1827,43 @@ nav-enemy-default-event-handler (defbehavior nav-enemy-jump-land-post nav-enemy () (TODO-RENAME-9 (-> self align)) (dummy-11 (-> self nav) (-> self nav target-pos)) - (set! - (-> self target-speed) - (seek (-> self target-speed) (-> self nav-info run-travel-speed) 2048.0) - ) + (set! (-> self target-speed) (seek (-> self target-speed) (-> self nav-info run-travel-speed) 2048.0)) (set! (-> self momentum-speed) (-> self target-speed)) - (let* - ((f0-7 - (fmin - (* (-> self speed-scale) (-> self momentum-speed)) - (* (vector-length (-> self nav travel)) (-> *display* frames-per-second)) + (let* ((f0-7 + (fmin + (* (-> self speed-scale) (-> self momentum-speed)) + (* (vector-length (-> self nav travel)) (-> *display* frames-per-second)) + ) + ) + (v1-9 (vector-normalize-copy! (new 'stack-no-clear 'vector) (-> self nav travel) f0-7)) + ) + (set! (-> self collide-info transv x) (-> v1-9 x)) + (set! (-> self collide-info transv z) (-> v1-9 z)) + ) + (if (or (logtest? (-> self nav-enemy-flags) 128) (logtest? (nav-control-flags bit19) (-> self nav flags))) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav target-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (seek-toward-heading-vec! + (-> self collide-info) + (-> self nav travel) + (-> self rotate-speed) + (-> self turn-time) + ) ) - ) - (v1-9 - (vector-normalize-copy! - (new 'stack-no-clear 'vector) - (-> self nav travel) - f0-7 - ) - ) - ) - (set! (-> self collide-info transv x) (-> v1-9 x)) - (set! (-> self collide-info transv z) (-> v1-9 z)) - ) - (if - (or - (logtest? (-> self nav-enemy-flags) 128) - (logtest? (nav-control-flags bit19) (-> self nav flags)) - ) - (seek-to-point-toward-point! - (-> self collide-info) - (-> self nav target-pos) - (-> self rotate-speed) - (-> self turn-time) - ) - (seek-toward-heading-vec! - (-> self collide-info) - (-> self nav travel) - (-> self rotate-speed) - (-> self turn-time) - ) - ) - (vector-v++! - (-> self collide-info transv) - (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0) - ) + (vector-v++! (-> self collide-info transv) (dummy-62 (-> self collide-info) (new-stack-vector0) 0.0)) (dummy-59 - (-> self collide-info) - (-> self collide-info transv) - (-> self nav-info gnd-collide-with) - 8192.0 - #f - (-> self nav-info hover-if-no-ground) - #f - ) + (-> self collide-info) + (-> self collide-info transv) + (-> self nav-info gnd-collide-with) + 8192.0 + #f + (-> self nav-info hover-if-no-ground) + #f + ) (nav-enemy-common-post) (none) ) @@ -2670,40 +1872,35 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :enter (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (logclear! (-> self nav flags) (nav-control-flags bit19)) - (let ((gp-0 (new 'stack-no-clear 'vector))) - (set! (-> gp-0 quad) (-> self collide-info transv quad)) - (set! (-> gp-0 y) 0.0) - (set! (-> self target-speed) (vector-length gp-0)) - (set! (-> self momentum-speed) (-> self target-speed)) - (vector-xz-normalize! gp-0 16384.0) - (vector+! (-> self nav target-pos) (-> self collide-info trans) gp-0) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (logclear! (-> self nav flags) (nav-control-flags bit19)) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self collide-info transv quad)) + (set! (-> gp-0 y) 0.0) + (set! (-> self target-speed) (vector-length gp-0)) + (set! (-> self momentum-speed) (-> self target-speed)) + (vector-xz-normalize! gp-0 16384.0) + (vector+! (-> self nav target-pos) (-> self collide-info trans) gp-0) + ) + (none) ) - (none) - ) :trans (behavior () - (if - (or - (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) - (logtest? (nav-control-flags bit19) (-> self nav flags)) - ) - (go-virtual nav-enemy-chase) + (if (or + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (logtest? (nav-control-flags bit19) (-> self nav flags)) + ) + (go-virtual nav-enemy-chase) + ) + (none) ) - (none) - ) :code - (behavior () - (nav-enemy-jump-land-anim) - (go (-> self jump-return-state)) - (none) - ) + (behavior () (nav-enemy-jump-land-anim) (go (-> self jump-return-state)) (none)) :post nav-enemy-jump-land-post ) @@ -2712,72 +1909,59 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-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 () - (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) - (go (-> self jump-return-state)) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (go (-> self jump-return-state)) + ) + (none) ) - (none) - ) :code (behavior () - (when (not (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (when (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data (-> self nav-info idle-anim)) ) - (-> self draw art-group data (-> self nav-info idle-anim)) ) + (ja-channel-push! 1 60) + (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 (-> self nav-info idle-anim))) + num-func-identity ) - (ja-channel-push! 1 60) - (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 (-> self nav-info idle-anim)) - ) - num-func-identity - ) - (set! - (-> gp-0 frame-num) - (rand-vu-float-range - 0.0 - (the float (+ (-> (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - data - 0 - length - ) - -1 - ) + (set! (-> gp-0 frame-num) + (rand-vu-float-range 0.0 (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) ) - ) ) - ) - ) - (let ((f30-0 (nav-enemy-rnd-float-range 0.75 1.25))) - (while #t - (suspend) - (let ((a0-10 (-> self skel root-channel 0))) - (set! (-> a0-10 param 0) f30-0) - (joint-control-channel-group-eval! - a0-10 - (the-as art-joint-anim #f) - num-func-loop! - ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.75 1.25))) + (while #t + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) f30-0) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-loop!) + ) + ) ) - ) + (none) ) - (none) - ) :post nav-enemy-simple-post ) @@ -2786,60 +1970,48 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior nav-enemy) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior nav-enemy) + nav-enemy-default-event-handler + ) :code (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (logior! (-> self nav-enemy-flags) 2048) - (ja-channel-push! 1 30) - (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) - (let ((v1-6 (-> self skel root-channel 0))) - (set! - (-> v1-6 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) - ) - ) - ) - (let ((v1-9 (-> self skel root-channel 0))) - (set! (-> v1-9 num-func) num-func-identity) - (set! (-> v1-9 frame-num) 0.0) - ) - (while (logtest? (-> self nav-enemy-flags) 2048) - (suspend) - (let ((a0-8 (-> self skel root-channel 0))) - (set! (-> a0-8 param 0) f30-0) - (joint-control-channel-group-eval! - a0-8 - (the-as art-joint-anim #f) - num-func-loop! - ) - ) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (logior! (-> self nav-enemy-flags) 2048) (ja-channel-push! 1 30) - (nav-enemy-turn-to-face-point (-> self event-param-point) 910.2222) - (let ((gp-0 (nav-enemy-rnd-int-range 0 150)) - (s5-0 (-> *display* base-frame-counter)) - ) - (until (>= (- (-> *display* base-frame-counter) s5-0) gp-0) - (let ((a0-12 (-> self skel root-channel 0))) - (set! (-> a0-12 param 0) f30-0) - (joint-control-channel-group-eval! - a0-12 - (the-as art-joint-anim #f) - num-func-loop! + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((v1-6 (-> self skel root-channel 0))) + (set! (-> v1-6 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) + ) + ) + (let ((v1-9 (-> self skel root-channel 0))) + (set! (-> v1-9 num-func) num-func-identity) + (set! (-> v1-9 frame-num) 0.0) + ) + (while (logtest? (-> self nav-enemy-flags) 2048) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) f30-0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (ja-channel-push! 1 30) + (nav-enemy-turn-to-face-point (-> self event-param-point) 910.2222) + (let ((gp-0 (nav-enemy-rnd-int-range 0 150)) + (s5-0 (-> *display* base-frame-counter)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-0) gp-0) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) f30-0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-loop!) + ) + (suspend) + ) ) - ) - (suspend) ) - ) + (go-virtual nav-enemy-jump-to-point) + (none) ) - (go-virtual nav-enemy-jump-to-point) - (none) - ) :post nav-enemy-simple-post ) @@ -2849,107 +2021,73 @@ nav-enemy-default-event-handler :event nav-enemy-jump-event-handler :exit - (behavior () - (logior! (-> self nav-enemy-flags) 24) - (none) - ) + (behavior () (logior! (-> self nav-enemy-flags) 24) (none)) :trans - (behavior () - 0 - (none) - ) + (behavior () 0 (none)) :code (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (nav-enemy-initialize-jump (-> self event-param-point)) - (nav-enemy-neck-control-look-at) - (logior! (-> self nav-enemy-flags) 16) - (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) - (when (not (nav-enemy-facing-point? (-> self jump-dest) 5461.3335)) - (ja-channel-push! 1 60) - (nav-enemy-turn-to-face-point (-> self jump-dest) 1820.4445) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (nav-enemy-initialize-jump (-> self event-param-point)) + (nav-enemy-neck-control-look-at) + (logior! (-> self nav-enemy-flags) 16) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (when (not (nav-enemy-facing-point? (-> self jump-dest) 5461.3335)) + (ja-channel-push! 1 60) + (nav-enemy-turn-to-face-point (-> self jump-dest) 1820.4445) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (nav-enemy-execute-jump) + (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) + (nav-enemy-jump-land-anim) + (go-virtual nav-enemy-wait-for-cue) + (none) ) - (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) - (nav-enemy-execute-jump) - (set! (-> self nav-enemy-flags) (logand -9 (-> self nav-enemy-flags))) - (nav-enemy-jump-land-anim) - (go-virtual nav-enemy-wait-for-cue) - (none) - ) :post nav-enemy-jump-post ) (define *nav-enemy-dummy-shadow-control* - (new 'static 'shadow-control - :settings - (new 'static 'shadow-settings - :center - (new 'static 'vector :w (the-as float #x28)) - :shadow-dir - (new 'static 'vector :y -1.0 :w 614400.0) - :bot-plane (new 'static 'plane :y 1.0 :w 4096.0) - :top-plane (new 'static 'plane :y 1.0 :w -4096.0) - ) - ) + (new 'static 'shadow-control :settings (new 'static 'shadow-settings + :center + (new 'static 'vector :w (the-as float #x28)) + :shadow-dir + (new 'static 'vector :y -1.0 :w 614400.0) + :bot-plane (new 'static 'plane :y 1.0 :w 4096.0) + :top-plane (new 'static 'plane :y 1.0 :w -4096.0) + ) + ) ) (defmethod TODO-RENAME-45 nav-enemy ((obj nav-enemy) (arg0 nav-enemy-info)) (set! (-> obj rand-gen) (new 'process 'random-generator)) (set! (-> obj rand-gen seed) (the-as uint #x666edd1e)) - (set! - (-> obj mask) - (the-as process-mask (logior (process-mask enemy) (-> obj mask))) - ) + (set! (-> obj mask) (the-as process-mask (logior (process-mask enemy) (-> obj mask)))) (TODO-RENAME-49 obj arg0) (if (-> obj draw shadow) - (set! - (-> obj draw shadow-ctrl) - (new - 'process - 'shadow-control - (-> obj nav-info shadow-min-y) - (-> obj nav-info shadow-max-y) - (-> obj nav-info shadow-locus-dist) - (the-as float 17) - 245760.0 - ) - ) - (set! (-> obj draw shadow-ctrl) *nav-enemy-dummy-shadow-control*) - ) + (set! (-> obj draw shadow-ctrl) + (new + 'process + 'shadow-control + (-> obj nav-info shadow-min-y) + (-> obj nav-info shadow-max-y) + (-> obj nav-info shadow-locus-dist) + (the-as float 17) + 245760.0 + ) + ) + (set! (-> obj draw shadow-ctrl) *nav-enemy-dummy-shadow-control*) + ) (set! (-> obj align) (new 'process 'align-control obj)) - (set! - (-> obj nav) - (new - 'process - 'nav-control - (-> obj collide-info) - 16 - (-> arg0 nav-nearest-y-threshold) - ) - ) - (logior! - (-> obj nav flags) - (nav-control-flags display-marks bit3 bit5 bit6 bit7) - ) + (set! (-> obj nav) (new 'process 'nav-control (-> obj collide-info) 16 (-> arg0 nav-nearest-y-threshold))) + (logior! (-> obj nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) (set! (-> obj nav gap-event) 'jump) (dummy-26 (-> obj nav)) (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) - ) - (set! - (-> obj enemy-info) - (new - 'process - 'fact-info-enemy - obj - (pickup-type eco-pill-random) - (-> *FACT-bank* default-pill-inc) - ) - ) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj enemy-info) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) (set! (-> obj reaction-time) (nav-enemy-rnd-int-range 30 240)) (set! (-> obj speed-scale) 1.0) (logior! (-> obj nav-enemy-flags) 4216) @@ -2962,40 +2100,31 @@ nav-enemy-default-event-handler (set! (-> obj rotate-speed) (-> obj nav-info walk-rotate-speed)) (set! (-> obj turn-time) (the-as int (-> obj nav-info walk-turn-time))) (when (and (!= (-> obj nav-info neck-joint) -1) (zero? (-> obj neck))) - (set! - (-> obj neck) - (new - 'process - 'joint-mod - (joint-mod-handler-mode flex-blend) - obj - (-> obj nav-info neck-joint) - ) + (set! (-> obj neck) + (new 'process 'joint-mod (joint-mod-handler-mode flex-blend) obj (-> obj nav-info neck-joint)) + ) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> obj neck up) (the-as uint 1)) + (set! (-> obj neck nose) (the-as uint 2)) + (set! (-> obj neck ear) (the-as uint 0)) + (set! (-> obj neck max-dist) 102400.0) + (let ((f0-6 16384.0)) + (set! (-> obj neck ignore-angle) f0-6) + f0-6 + ) ) - (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) - (set! (-> obj neck up) (the-as uint 1)) - (set! (-> obj neck nose) (the-as uint 2)) - (set! (-> obj neck ear) (the-as uint 0)) - (set! (-> obj neck max-dist) 102400.0) - (let ((f0-6 16384.0)) - (set! (-> obj neck ignore-angle) f0-6) - f0-6 - ) - ) ) -(defbehavior - nav-enemy-init-by-other nav-enemy - ((arg0 battlecontroller) (arg1 vector) (arg2 vector)) +(defbehavior nav-enemy-init-by-other nav-enemy ((arg0 battlecontroller) (arg1 vector) (arg2 vector)) (initialize-collision self) (logior! (-> self mask) (process-mask actor-pause)) (set! (-> self collide-info trans quad) (-> arg1 quad)) (set! (-> self event-param-point quad) (-> arg2 quad)) (let ((s3-1 (vector-! (new 'stack-no-clear 'vector) arg2 arg1))) - (set! (-> s3-1 y) 0.0) - (vector-normalize! s3-1 1.0) - (forward-up->quaternion (-> self collide-info quat) s3-1 *up-vector*) - ) + (set! (-> s3-1 y) 0.0) + (vector-normalize! s3-1 1.0) + (forward-up->quaternion (-> self collide-info quat) s3-1 *up-vector*) + ) (vector-identity! (-> self collide-info scale)) (set! (-> self entity) (-> arg0 entity)) (TODO-RENAME-48 self) @@ -3032,29 +2161,29 @@ nav-enemy-default-event-handler (defmethod TODO-RENAME-50 nav-enemy ((obj nav-enemy) (arg0 vector)) (let ((s4-0 (new 'stack-no-clear 'vector))) - (set! (-> s4-0 quad) (-> obj collide-info trans quad)) - (set! (-> obj collide-info trans quad) (-> arg0 quad)) - (let ((gp-0 (-> obj nav))) - (dummy-28 gp-0 -1) - (set! (-> obj collide-info trans quad) (-> s4-0 quad)) - (let* ((v1-8 (-> gp-0 mesh origin)) - (f0-1 (- (-> arg0 x) (-> v1-8 x))) - (f1-2 (- (-> arg0 z) (-> v1-8 z))) - ) - (countdown (v1-9 (-> gp-0 num-spheres)) - (let* ((a0-10 (-> gp-0 sphere v1-9)) - (f2-2 (- (-> a0-10 x) f0-1)) - (f3-1 (- (-> a0-10 z) f1-2)) - (f4-0 (-> a0-10 w)) + (set! (-> s4-0 quad) (-> obj collide-info trans quad)) + (set! (-> obj collide-info trans quad) (-> arg0 quad)) + (let ((gp-0 (-> obj nav))) + (dummy-28 gp-0 -1) + (set! (-> obj collide-info trans quad) (-> s4-0 quad)) + (let* ((v1-8 (-> gp-0 mesh origin)) + (f0-1 (- (-> arg0 x) (-> v1-8 x))) + (f1-2 (- (-> arg0 z) (-> v1-8 z))) ) - (if (>= (* f4-0 f4-0) (+ (* f2-2 f2-2) (* f3-1 f3-1))) - (return #t) + (countdown (v1-9 (-> gp-0 num-spheres)) + (let* ((a0-10 (-> gp-0 sphere v1-9)) + (f2-2 (- (-> a0-10 x) f0-1)) + (f3-1 (- (-> a0-10 z) f1-2)) + (f4-0 (-> a0-10 w)) + ) + (if (>= (* f4-0 f4-0) (+ (* f2-2 f2-2) (* f3-1 f3-1))) + (return #t) + ) + ) + ) ) - ) ) - ) ) - ) #f ) diff --git a/goal_src/levels/common/sharkey.gc b/goal_src/levels/common/sharkey.gc index 2f72d7d3d2..2f9a68775c 100644 --- a/goal_src/levels/common/sharkey.gc +++ b/goal_src/levels/common/sharkey.gc @@ -7,37 +7,35 @@ ;; DECOMP BEGINS -(set! - (-> *part-group-id-table* 106) - (new 'static 'sparticle-launch-group - :length 16 - :duration #x78 - :linger-duration #x30c - :flags (sp-group-flag use-local-clock) - :name "group-sharkey-splash" - :launcher - (new 'static 'inline-array sparticle-group-item 16 - (sp-item 124 :flags (is-3d) :period 900 :length 63) - (sp-item 125 :period 900 :length 15) - (sp-item 126 :flags (is-3d) :period 900 :length 15) - (sp-item 127 :flags (is-3d) :period 900 :length 15) - (sp-item 128 :period 900 :length 10 :binding 129) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - (sp-item 129 :flags (start-dead) :period 900 :length 120) - ) - :bounds - (new 'static 'sphere :y -49152.0 :w 57344.0) - ) - ) +(set! (-> *part-group-id-table* 106) (new 'static 'sparticle-launch-group + :length 16 + :duration #x78 + :linger-duration #x30c + :flags (sp-group-flag use-local-clock) + :name "group-sharkey-splash" + :launcher + (new 'static 'inline-array sparticle-group-item 16 + (sp-item 124 :flags (is-3d) :period 900 :length 63) + (sp-item 125 :period 900 :length 15) + (sp-item 126 :flags (is-3d) :period 900 :length 15) + (sp-item 127 :flags (is-3d) :period 900 :length 15) + (sp-item 128 :period 900 :length 10 :binding 129) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + (sp-item 129 :flags (start-dead) :period 900 :length 120) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) (deftype sharkey (nav-enemy) ((dir vector :inline :offset-assert 400) @@ -71,17 +69,11 @@ :longest-edge (meters 0) ) -(defmethod - dummy-44 - sharkey - ((obj sharkey) (arg0 process) (arg1 event-message-block)) +(defmethod dummy-44 sharkey ((obj sharkey) (arg0 process) (arg1 event-message-block)) (the-as object #t) ) -(defmethod - dummy-43 - sharkey - ((obj sharkey) (arg0 process) (arg1 event-message-block)) +(defmethod dummy-43 sharkey ((obj sharkey) (arg0 process) (arg1 event-message-block)) (the-as object #t) ) @@ -89,98 +81,58 @@ nav-enemy-default-event-handler (defmethod run-logic? sharkey ((obj sharkey)) (or - (zero? (logand (-> obj mask) (process-mask actor-pause))) - (or - (>= - (+ - (-> *ACTOR-bank* pause-dist) - (-> obj collide-info pause-adjust-distance) + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (>= (+ (-> *ACTOR-bank* pause-dist) (-> obj collide-info pause-adjust-distance)) + (vector-vector-distance (-> obj collide-info trans) (math-camera-pos)) + ) + (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) ) - (vector-vector-distance (-> obj collide-info trans) (math-camera-pos)) - ) - (and - (nonzero? (-> obj skel)) - (!= (-> obj skel root-channel 0) (-> obj skel channel)) - ) - (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) ) - ) ) (defmethod dummy-40 sharkey ((obj sharkey)) (dummy-11 (-> obj nav) (-> obj nav target-pos)) - (let* - ((f0-0 - (vector-vector-xz-distance - (-> obj collide-info trans) - (-> obj nav target-pos) - ) - ) - (f30-0 - (/ - (- - (fmin (-> obj y-max) (-> obj nav target-pos y)) - (-> obj collide-info trans y) - ) - f0-0 - ) - ) + (let* ((f0-0 (vector-vector-xz-distance (-> obj collide-info trans) (-> obj nav target-pos))) + (f30-0 (/ (- (fmin (-> obj y-max) (-> obj nav target-pos y)) (-> obj collide-info trans y)) f0-0)) + ) + (set! (-> obj nav travel y) (* 4.0 (vector-length (-> obj nav travel)) f30-0)) ) - (set! - (-> obj nav travel y) - (* 4.0 (vector-length (-> obj nav travel)) f30-0) - ) - ) 0 (none) ) (defmethod TODO-RENAME-37 sharkey ((obj sharkey)) (let ((s5-0 (new 'stack-no-clear 'vector))) - (when (< 8192.0 (vector-length (-> obj nav travel))) - (vector-normalize-copy! s5-0 (-> obj nav travel) 1.0) - (vector-deg-seek - (-> obj dir) - (-> obj dir) - s5-0 - (* 65536.0 (-> *display* seconds-per-frame)) - ) - (vector-normalize! (-> obj dir) 1.0) - (forward-up->quaternion (-> obj collide-info quat) (-> obj dir) *up-vector*) + (when (< 8192.0 (vector-length (-> obj nav travel))) + (vector-normalize-copy! s5-0 (-> obj nav travel) 1.0) + (vector-deg-seek (-> obj dir) (-> obj dir) s5-0 (* 65536.0 (-> *display* seconds-per-frame))) + (vector-normalize! (-> obj dir) 1.0) + (forward-up->quaternion (-> obj collide-info quat) (-> obj dir) *up-vector*) + ) ) - ) 0 (none) ) (defmethod dummy-41 sharkey ((obj sharkey)) (let* ((f0-1 (- (-> obj target-speed) (-> obj momentum-speed))) - (f1-3 - (fmin - (* (-> obj acceleration) (-> *display* seconds-per-frame)) - (fabs f0-1) - ) - ) + (f1-3 (fmin (* (-> obj acceleration) (-> *display* seconds-per-frame)) (fabs f0-1))) ) - (if (< f0-1 0.0) - (set! (-> obj momentum-speed) (- (-> obj momentum-speed) f1-3)) - (+! (-> obj momentum-speed) f1-3) + (if (< f0-1 0.0) + (set! (-> obj momentum-speed) (- (-> obj momentum-speed) f1-3)) + (+! (-> obj momentum-speed) f1-3) + ) ) - ) - (let - ((f0-9 - (fmin - (* (-> obj speed-scale) (-> obj momentum-speed)) - (* (vector-length (-> obj nav travel)) (-> *display* frames-per-second)) - ) - ) + (let ((f0-9 (fmin + (* (-> obj speed-scale) (-> obj momentum-speed)) + (* (vector-length (-> obj nav travel)) (-> *display* frames-per-second)) + ) + ) + ) + (vector-normalize-copy! (-> obj collide-info transv) (-> obj nav travel) f0-9) ) - (vector-normalize-copy! - (-> obj collide-info transv) - (-> obj nav travel) - f0-9 - ) - ) 0 (none) ) @@ -189,25 +141,21 @@ nav-enemy-default-event-handler (let ((f30-0 (-> obj water height)) (s5-0 (new 'stack-no-clear 'vector)) ) - (let* ((f3-0 (- -36864.0 (-> obj collide-info trans y))) - (f0-2 (fmax 0.0 (fmin 1.0 (- 1.0 (* 0.00008138021 f3-0))))) - ) - (set-vector! (-> obj draw color-mult) f0-2 f0-2 f0-2 1.0) - ) - (dummy-10 (-> obj water)) - (let ((f28-0 (-> obj collide-info trans y))) - (when - (or - (and (< f30-0 f28-0) (>= f30-0 (-> obj last-y))) - (and (>= f30-0 f28-0) (< f30-0 (-> obj last-y))) + (let* ((f3-0 (- -36864.0 (-> obj collide-info trans y))) + (f0-2 (fmax 0.0 (fmin 1.0 (- 1.0 (* 0.00008138021 f3-0))))) + ) + (set-vector! (-> obj draw color-mult) f0-2 f0-2 f0-2 1.0) + ) + (dummy-10 (-> obj water)) + (let ((f28-0 (-> obj collide-info trans y))) + (when (or (and (< f30-0 f28-0) (>= f30-0 (-> obj last-y))) (and (>= f30-0 f28-0) (< f30-0 (-> obj last-y)))) + (set! (-> s5-0 quad) (-> obj collide-info trans quad)) + (set! (-> s5-0 y) f30-0) + (dummy-13 (-> obj water) 1.0 s5-0 1 (-> obj collide-info transv)) + ) + (set! (-> obj last-y) f28-0) ) - (set! (-> s5-0 quad) (-> obj collide-info trans quad)) - (set! (-> s5-0 y) f30-0) - (dummy-13 (-> obj water) 1.0 s5-0 1 (-> obj collide-info transv)) - ) - (set! (-> obj last-y) f28-0) ) - ) ((the-as (function nav-enemy none) (find-parent-method sharkey 39)) obj) 0 (none) @@ -215,20 +163,20 @@ nav-enemy-default-event-handler (defbehavior sharkey-notice-player? sharkey () (if *target* - (and - (< (- (-> *target* control trans y) (-> self y-max)) 0.0) - (let ((gp-0 'racer) - (a1-0 (new 'stack-no-clear 'event-message-block)) + (and + (< (- (-> *target* control trans y) (-> self y-max)) 0.0) + (let ((gp-0 'racer) + (a1-0 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'query) + (set! (-> a1-0 param 0) (the-as uint 'mode)) + (!= gp-0 (send-event-function *target* a1-0)) ) - (set! (-> a1-0 from) self) - (set! (-> a1-0 num-params) 1) - (set! (-> a1-0 message) 'query) - (set! (-> a1-0 param 0) (the-as uint 'mode)) - (!= gp-0 (send-event-function *target* a1-0)) - ) - (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) - ) - ) + (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) + ) + ) ) (defun sharkey-get-player-position ((arg0 vector)) @@ -248,151 +196,121 @@ nav-enemy-default-event-handler (s3-0 (new 'stack-no-clear 'vector)) (gp-0 (new 'stack-no-clear 'vector)) ) - (let ((s4-0 (-> *target* control trans))) - (let ((f30-0 4096000.0)) - (set! (-> s3-0 quad) (-> self entity extra trans quad)) - (set! (-> s5-0 quad) (-> self collide-info trans quad)) - (dotimes (s2-0 (-> self path curve num-cverts)) - (eval-path-curve-div! (-> self path) s3-0 (the float s2-0) 'interp) - (let ((f0-2 (vector-vector-xz-distance s4-0 s3-0))) - (when (< f0-2 f30-0) - (set! f30-0 f0-2) - (set! (-> s5-0 quad) (-> s3-0 quad)) + (let ((s4-0 (-> *target* control trans))) + (let ((f30-0 4096000.0)) + (set! (-> s3-0 quad) (-> self entity extra trans quad)) + (set! (-> s5-0 quad) (-> self collide-info trans quad)) + (dotimes (s2-0 (-> self path curve num-cverts)) + (eval-path-curve-div! (-> self path) s3-0 (the float s2-0) 'interp) + (let ((f0-2 (vector-vector-xz-distance s4-0 s3-0))) + (when (< f0-2 f30-0) + (set! f30-0 f0-2) + (set! (-> s5-0 quad) (-> s3-0 quad)) + ) + ) + ) ) - ) + (vector-! (-> self dir) s4-0 s5-0) + (vector-normalize! (-> self dir) 1.0) + (vector+*! gp-0 s4-0 (-> self dir) (- (-> self spawn-distance))) ) - ) - (vector-! (-> self dir) s4-0 s5-0) - (vector-normalize! (-> self dir) 1.0) - (vector+*! gp-0 s4-0 (-> self dir) (- (-> self spawn-distance))) + (dummy-17 (-> self nav) gp-0 gp-0) + (set! (-> gp-0 y) (-> self y-min)) + (set! (-> self spawn-point quad) (-> gp-0 quad)) ) - ((method-of-object (-> self nav) dummy-17)) - (set! (-> gp-0 y) (-> self y-min)) - (set! (-> self spawn-point quad) (-> gp-0 quad)) - ) (set! (-> self collide-info trans quad) (-> self spawn-point quad)) (forward-up->quaternion (-> self collide-info quat) (-> self dir) *up-vector*) (let ((f0-6 0.0)) - (set! (-> self momentum-speed) f0-6) - f0-6 - ) + (set! (-> self momentum-speed) f0-6) + f0-6 + ) ) (defstate nav-enemy-idle (sharkey) :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior sharkey) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) :enter (behavior () - (set! (-> self state-time) (-> *display* base-frame-counter)) - (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) - (none) - ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) + (none) + ) :exit - (behavior () - (set! (-> self draw status) (logand -3 (-> self draw status))) - (none) - ) + (behavior () (set! (-> self draw status) (logand -3 (-> self draw status))) (none)) :trans (behavior () - (cond - ((-> self enable-patrol) - (if - (and - (and - *target* - (>= - (-> self enemy-info idle-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) - ) - ) - ) - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (-> self state-timeout) - ) + (cond + ((-> self enable-patrol) + (if (and + (and *target* (>= (-> self enemy-info idle-distance) + (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)) + ) + ) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout)) + ) + (go-virtual nav-enemy-patrol) + ) ) - (go-virtual nav-enemy-patrol) - ) - ) - ((sharkey-notice-player?) - (when (zero? (logand (-> self nav-enemy-flags) 1)) - (logior! (-> self nav-enemy-flags) 1) - (set! (-> self notice-time) (-> *display* base-frame-counter)) - ) - (let ((a0-4 (dummy-16 (-> self nav) (-> *target* control trans)))) - (when - (or - (and a0-4 (logtest? (-> a0-4 pat) 2)) - (and - (logtest? (-> self draw status) 2) - (>= - (- (-> *display* base-frame-counter) (-> self notice-time)) - (-> self reaction-time) - ) + ((sharkey-notice-player?) + (when (zero? (logand (-> self nav-enemy-flags) 1)) + (logior! (-> self nav-enemy-flags) 1) + (set! (-> self notice-time) (-> *display* base-frame-counter)) + ) + (let ((a0-4 (dummy-16 (-> self nav) (-> *target* control trans)))) + (when (or + (and a0-4 (logtest? (-> a0-4 pat) 2)) + (and + (logtest? (-> self draw status) 2) + (>= (- (-> *display* base-frame-counter) (-> self notice-time)) (-> self reaction-time)) + ) + ) + (sharkey-move-to-attack-position) + (set! (-> self player-in-water) #t) + (go-virtual nav-enemy-chase) + ) ) - ) - (sharkey-move-to-attack-position) - (set! (-> self player-in-water) #t) - (go-virtual nav-enemy-chase) ) + (else + (if (>= (- (-> *display* base-frame-counter) (-> self notice-time)) 3000) + (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) + ) + ) ) - ) - (else - (if (>= (- (-> *display* base-frame-counter) (-> self notice-time)) 3000) - (set! (-> self nav-enemy-flags) (logand -2 (-> self nav-enemy-flags))) - ) - ) + (none) ) - (none) - ) :code (behavior () - (ja-channel-push! 1 22) - (let ((v1-2 (-> self skel root-channel 0))) - (set! - (-> v1-2 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) + (ja-channel-push! 1 22) + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) + ) ) - ) - ) - (let ((v1-5 (-> self skel root-channel 0))) - (set! (-> v1-5 num-func) num-func-identity) - (set! (-> v1-5 frame-num) 0.0) - ) - (until (= (-> self collide-info trans y) (-> self y-min)) - (let ((a0-7 (-> self skel root-channel 0))) - (set! (-> a0-7 param 0) (-> self anim-speed)) - (joint-control-channel-group-eval! - a0-7 - (the-as art-joint-anim #f) - num-func-loop! + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) ) - ) - (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) - (set! - (-> self collide-info trans y) - (seek - (-> self collide-info trans y) - (-> self y-min) - (* (-> self y-speed) (-> *display* seconds-per-frame)) + (until (= (-> self collide-info trans y) (-> self y-min)) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-loop!) + ) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (set! (-> self collide-info trans y) + (seek (-> self collide-info trans y) (-> self y-min) (* (-> self y-speed) (-> *display* seconds-per-frame))) + ) + (dummy-10 (-> self water)) + (ja-post) + (suspend) ) - ) - (dummy-10 (-> self water)) - (ja-post) - (suspend) + (logior! (-> self draw status) 2) + (anim-loop) + (none) ) - (logior! (-> self draw status) 2) - (anim-loop) - (none) - ) :post (the-as (function none :behavior sharkey) #f) ) @@ -401,125 +319,84 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior sharkey) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) :trans (behavior () - (if (sharkey-notice-player?) - (go-virtual nav-enemy-chase) + (if (sharkey-notice-player?) + (go-virtual nav-enemy-chase) + ) + (none) ) - (none) - ) :code (behavior () - (ja-channel-push! 1 22) - (set! (-> self nav target-pos quad) (-> self spawn-point quad)) - (while #t - (let ((a0-3 (-> self skel root-channel 0))) - (set! - (-> a0-3 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) - ) - ) - (set! - (-> a0-3 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) + (ja-channel-push! 1 22) + (set! (-> self nav target-pos quad) (-> self spawn-point quad)) + (while #t + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) + ) + (set! (-> a0-3 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) data 0 length) -1) + ) + ) + (set! (-> a0-3 param 1) (-> self anim-speed)) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) + num-func-seek! ) - data - 0 - length - ) - -1 ) - ) - ) - (set! (-> a0-3 param 1) (-> self anim-speed)) - (set! (-> a0-3 frame-num) 0.0) - (joint-control-channel-group! - a0-3 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) - (cond - ((-> self enable-patrol) - (set! - (-> self collide-info trans y) - (seek - (-> self collide-info trans y) - (-> self y-max) - (* (-> self y-speed) (-> *display* seconds-per-frame)) - ) + (until (ja-done? 0) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (cond + ((-> self enable-patrol) + (set! (-> self collide-info trans y) + (seek (-> self collide-info trans y) (-> self y-max) (* (-> self y-speed) (-> *display* seconds-per-frame))) + ) + ) + (else + (if (< (- (-> self collide-info trans y) (-> self y-min)) 409.6) + (go-virtual nav-enemy-idle) + ) + ) + ) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) - (else - (if (< (- (-> self collide-info trans y) (-> self y-min)) 409.6) - (go-virtual nav-enemy-idle) - ) - ) ) - (suspend) - (let ((a0-6 (-> self skel root-channel 0))) - (set! - (-> a0-6 param 0) - (the float (+ (-> a0-6 frame-group data 0 length) -1)) - ) - (set! (-> a0-6 param 1) (-> self anim-speed)) - (joint-control-channel-group-eval! - a0-6 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post - (behavior () - (nav-enemy-travel-post) - (none) - ) + (behavior () (nav-enemy-travel-post) (none)) ) (defstate nav-enemy-notice (sharkey) :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior sharkey) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) :enter - (behavior () - (go-virtual nav-enemy-chase) - (none) - ) + (behavior () (go-virtual nav-enemy-chase) (none)) :code - (behavior () - (go-virtual nav-enemy-chase) - (none) - ) + (behavior () (go-virtual nav-enemy-chase) (none)) ) (defbehavior sharkey-follow-trajectory sharkey ((arg0 float)) (let ((gp-0 (-> self jump-trajectory))) - (eval-position! gp-0 arg0 (-> self collide-info trans)) - (eval-velocity! gp-0 arg0 (-> self collide-info transv)) - ) + (eval-position! gp-0 arg0 (-> self collide-info trans)) + (eval-velocity! gp-0 arg0 (-> self collide-info transv)) + ) (vector-normalize-copy! (-> self dir) (-> self collide-info transv) 1.0) (forward-up->quaternion (-> self collide-info quat) (-> self dir) *up-vector*) ) @@ -528,670 +405,426 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior sharkey) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) :code (behavior () - (let ((gp-0 (new 'stack-no-clear 'vector)) - (s5-0 (new 'stack-no-clear 'vector)) - ) - (-> *display* base-frame-counter) - (sound-play-by-name - (static-sound-name "bigshark-bite") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - (set! (-> self state-time) (-> *display* base-frame-counter)) - (set! (-> gp-0 quad) (-> self collide-info trans quad)) - (ja-channel-push! 1 30) - (let ((s4-1 (-> self skel root-channel 0))) - (set! - (-> s4-1 frame-group) - (the-as art-joint-anim (-> self draw art-group data 3)) - ) - (set! (-> s4-1 param 0) (ja-aframe 3.0 0)) - (set! (-> s4-1 param 1) 2.0) - (set! (-> s4-1 frame-num) 0.0) - (joint-control-channel-group! - s4-1 - (the-as art-joint-anim (-> self draw art-group data 3)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (sharkey-get-player-position s5-0) - (setup-from-to-duration! - (-> self jump-trajectory) - gp-0 - s5-0 - 3.0 - -291.27112 - ) - (set! (-> self attack-time) (ja-aframe-num 0)) - (sharkey-follow-trajectory (-> self attack-time)) - (suspend) - (let ((s4-2 (-> self skel root-channel 0))) - (set! (-> s4-2 param 0) (ja-aframe 3.0 0)) - (set! (-> s4-2 param 1) 2.0) - (joint-control-channel-group-eval! - s4-2 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - ) - (let ((a1-7 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-7 from) self) - (set! (-> a1-7 num-params) 2) - (set! (-> a1-7 message) 'attack-invinc) - (set! (-> a1-7 param 0) (the-as uint #f)) - (let ((a0-15 (new 'static 'attack-info :mask #x20))) - (set! (-> a0-15 mode) 'sharkey) - (set! (-> a1-7 param 1) (the-as uint a0-15)) - ) - (when (send-event-function *target* a1-7) - (logclear! (-> self mask) (process-mask enemy)) - (vector-float*! - (-> self collide-info transv) - (-> self collide-info transv) - 8.0 - ) - (set! (-> self state-time) (-> *display* base-frame-counter)) - (let ((f30-0 -409600.0) - (f28-0 (-> self collide-info transv y)) - (f26-0 (-> self collide-info trans y)) - ) - (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) - (let ((gp-1 (-> self skel root-channel 0))) - (set! - (-> gp-1 frame-group) - (the-as art-joint-anim (-> self draw art-group data 3)) - ) - (set! - (-> gp-1 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 3)) - data - 0 - length - ) - -1 - ) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) ) - ) - (set! (-> gp-1 param 1) 1.0) - (set! (-> gp-1 frame-num) (ja-aframe 3.0 0)) - (joint-control-channel-group! - gp-1 - (the-as art-joint-anim (-> self draw art-group data 3)) - num-func-seek! - ) + (-> *display* base-frame-counter) + (sound-play-by-name (static-sound-name "bigshark-bite") (new-sound-id) 1024 0 0 1 #t) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> gp-0 quad) (-> self collide-info trans quad)) + (ja-channel-push! 1 30) + (let ((s4-1 (-> self skel root-channel 0))) + (set! (-> s4-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> s4-1 param 0) (ja-aframe 3.0 0)) + (set! (-> s4-1 param 1) 2.0) + (set! (-> s4-1 frame-num) 0.0) + (joint-control-channel-group! s4-1 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) ) - (until (ja-done? 0) - (+! f28-0 (* f30-0 (-> *display* seconds-per-frame))) - (+! f26-0 (* f28-0 (-> *display* seconds-per-frame))) - (set! (-> self collide-info transv y) f28-0) - (when (< (-> self collide-info trans y) (-> self water height)) - (set! f28-0 (* 0.9 f28-0)) - (vector-float*! - (-> self collide-info transv) - (-> self collide-info transv) - 0.9 - ) - ) - (vector-normalize-copy! (-> self dir) (-> self collide-info transv) 1.0) - (forward-up->quaternion - (-> self collide-info quat) - (-> self dir) - *up-vector* - ) - (dummy-59 - (-> self collide-info) - (-> self collide-info transv) - (the-as uint 1) - 8192.0 - #t - #f - #f - ) - (set! (-> self collide-info trans y) f26-0) + (until (ja-done? 0) + (sharkey-get-player-position s5-0) + (setup-from-to-duration! (-> self jump-trajectory) gp-0 s5-0 3.0 -291.27112) + (set! (-> self attack-time) (ja-aframe-num 0)) + (sharkey-follow-trajectory (-> self attack-time)) (suspend) - (let ((a0-27 (-> self skel root-channel 0))) - (set! - (-> a0-27 param 0) - (the float (+ (-> a0-27 frame-group data 0 length) -1)) + (let ((s4-2 (-> self skel root-channel 0))) + (set! (-> s4-2 param 0) (ja-aframe 3.0 0)) + (set! (-> s4-2 param 1) 2.0) + (joint-control-channel-group-eval! s4-2 (the-as art-joint-anim #f) num-func-seek!) ) - (set! (-> a0-27 param 1) 1.0) - (joint-control-channel-group-eval! - a0-27 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) ) - ) ) - (send-event *target* 'end-mode) - (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) - ) + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 2) + (set! (-> a1-7 message) 'attack-invinc) + (set! (-> a1-7 param 0) (the-as uint #f)) + (let ((a0-15 (new 'static 'attack-info :mask #x20))) + (set! (-> a0-15 mode) 'sharkey) + (set! (-> a1-7 param 1) (the-as uint a0-15)) + ) + (when (send-event-function *target* a1-7) + (logclear! (-> self mask) (process-mask enemy)) + (vector-float*! (-> self collide-info transv) (-> self collide-info transv) 8.0) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((f30-0 -409600.0) + (f28-0 (-> self collide-info transv y)) + (f26-0 (-> self collide-info trans y)) + ) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> gp-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> gp-1 param 1) 1.0) + (set! (-> gp-1 frame-num) (ja-aframe 3.0 0)) + (joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (+! f28-0 (* f30-0 (-> *display* seconds-per-frame))) + (+! f26-0 (* f28-0 (-> *display* seconds-per-frame))) + (set! (-> self collide-info transv y) f28-0) + (when (< (-> self collide-info trans y) (-> self water height)) + (set! f28-0 (* 0.9 f28-0)) + (vector-float*! (-> self collide-info transv) (-> self collide-info transv) 0.9) + ) + (vector-normalize-copy! (-> self dir) (-> self collide-info transv) 1.0) + (forward-up->quaternion (-> self collide-info quat) (-> self dir) *up-vector*) + (dummy-59 (-> self collide-info) (-> self collide-info transv) (the-as uint 1) 8192.0 #t #f #f) + (set! (-> self collide-info trans y) f26-0) + (suspend) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 param 0) (the float (+ (-> a0-27 frame-group data 0 length) -1))) + (set! (-> a0-27 param 1) 1.0) + (joint-control-channel-group-eval! a0-27 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (send-event *target* 'end-mode) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + ) + ) + (sharkey-reset-position) + (logior! (-> self draw status) 2) + (go-virtual nav-enemy-idle) + (none) ) - (sharkey-reset-position) - (logior! (-> self draw status) 2) - (go-virtual nav-enemy-idle) - (none) - ) :post - (behavior () - (nav-enemy-simple-post) - (none) - ) + (behavior () (nav-enemy-simple-post) (none)) ) (defstate nav-enemy-chase (sharkey) :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior sharkey) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) :exit - (behavior () - (sound-stop (-> self sound-id)) - (none) - ) + (behavior () (sound-stop (-> self sound-id)) (none)) :trans (behavior () - (if (not *target*) - (go-virtual nav-enemy-patrol) - ) - (let ((gp-0 (-> *target* control trans))) - (let - ((s5-0 - (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos)) - ) - (s4-0 'racer) - (a1-0 (new 'stack-no-clear 'event-message-block)) - ) - (set! (-> a1-0 from) self) - (set! (-> a1-0 num-params) 1) - (set! (-> a1-0 message) 'query) - (set! (-> a1-0 param 0) (the-as uint 'mode)) - (if (or (= s4-0 (send-event-function *target* a1-0)) (not s5-0)) - (go-virtual nav-enemy-patrol) - ) - ) - (when (logtest? (-> *target* control status) 2) - (set! - (-> self player-in-water) - (logtest? (-> *target* control status) 1024) - ) - (if (-> self player-in-water) - (set! - (-> self player-water-time) - (the-as uint (-> *display* base-frame-counter)) - ) - ) - ) - (if - (and - *target* - (>= - 8192.0 - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) + (if (not *target*) + (go-virtual nav-enemy-patrol) ) - ) - ) - (go-virtual nav-enemy-attack) - ) - (cond - ((-> self player-in-water) - (set! (-> self free-time) (-> *display* base-frame-counter)) - (if - (and - (< (fabs (- (-> gp-0 y) (-> self collide-info trans y))) 40960.0) - (< - (vector-vector-xz-distance gp-0 (-> self collide-info trans)) - 24576.0 + (let ((gp-0 (-> *target* control trans))) + (let ((s5-0 (nav-enemy-test-point-near-nav-mesh? (-> *target* control shadow-pos))) + (s4-0 'racer) + (a1-0 (new 'stack-no-clear 'event-message-block)) + ) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'query) + (set! (-> a1-0 param 0) (the-as uint 'mode)) + (if (or (= s4-0 (send-event-function *target* a1-0)) (not s5-0)) + (go-virtual nav-enemy-patrol) + ) + ) + (when (logtest? (-> *target* control status) 2) + (set! (-> self player-in-water) (logtest? (-> *target* control status) 1024)) + (if (-> self player-in-water) + (set! (-> self player-water-time) (the-as uint (-> *display* base-frame-counter))) + ) + ) + (if (and *target* (>= 8192.0 (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)))) + (go-virtual nav-enemy-attack) + ) + (cond + ((-> self player-in-water) + (set! (-> self free-time) (-> *display* base-frame-counter)) + (if (and + (< (fabs (- (-> gp-0 y) (-> self collide-info trans y))) 40960.0) + (< (vector-vector-xz-distance gp-0 (-> self collide-info trans)) 24576.0) + ) + (go-virtual nav-enemy-attack) + ) ) + (else + (if (>= (- (-> *display* base-frame-counter) (-> self free-time)) 900) + (go-virtual nav-enemy-patrol) + ) + ) ) - (go-virtual nav-enemy-attack) - ) ) - (else - (if (>= (- (-> *display* base-frame-counter) (-> self free-time)) 900) - (go-virtual nav-enemy-patrol) - ) + (let ((a0-10 (-> self nav target-poly))) + (if (and a0-10 (logtest? (-> a0-10 pat) 2)) + (set! (-> self target-speed) (* 2.0 (-> self chase-speed))) + (set! (-> self target-speed) (-> self chase-speed)) + ) ) - ) + (none) ) - (let ((a0-10 (-> self nav target-poly))) - (if (and a0-10 (logtest? (-> a0-10 pat) 2)) - (set! (-> self target-speed) (* 2.0 (-> self chase-speed))) - (set! (-> self target-speed) (-> self chase-speed)) - ) - ) - (none) - ) :code (behavior () - (set! - (-> self player-water-time) - (the-as uint (-> *display* base-frame-counter)) - ) - (ja-channel-push! 1 51) - (sound-play-by-name - (static-sound-name "bigshark-idle") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - (while #t - (let ((a0-3 (-> self skel root-channel 0))) - (set! - (-> a0-3 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info run-anim)) - ) - ) - (set! - (-> a0-3 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info run-anim)) + (set! (-> self player-water-time) (the-as uint (-> *display* base-frame-counter))) + (ja-channel-push! 1 51) + (sound-play-by-name (static-sound-name "bigshark-idle") (new-sound-id) 1024 0 0 1 #t) + (while #t + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data (-> self nav-info run-anim)))) + (set! (-> a0-3 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info run-anim))) data 0 length) -1) + ) + ) + (set! (-> a0-3 param 1) (-> self anim-speed)) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info run-anim))) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 (* 3.0 (-> *display* seconds-per-frame)))) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) (the float (+ (-> a0-5 frame-group data 0 length) -1))) + (set! (-> a0-5 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) ) - data - 0 - length - ) - -1 ) - ) ) - (set! (-> a0-3 param 1) (-> self anim-speed)) - (set! (-> a0-3 frame-num) 0.0) - (joint-control-channel-group! - a0-3 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info run-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (set! - (-> self anim-speed) - (seek (-> self anim-speed) 1.0 (* 3.0 (-> *display* seconds-per-frame))) - ) - (suspend) - (let ((a0-5 (-> self skel root-channel 0))) - (set! - (-> a0-5 param 0) - (the float (+ (-> a0-5 frame-group data 0 length) -1)) - ) - (set! (-> a0-5 param 1) (-> self anim-speed)) - (joint-control-channel-group-eval! - a0-5 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post (behavior () - (sharkey-get-player-position (-> self nav target-pos)) - (nav-enemy-travel-post) - (let* - ((f3-0 - (vector-vector-distance - (-> self collide-info trans) - (-> self nav target-pos) - ) - ) - (f1-2 - (fmax - 0.0 - (fmin - 1.0 - (- 1.0 (/ (+ -24576.0 f3-0) (+ -24576.0 (-> self spawn-distance)))) + (sharkey-get-player-position (-> self nav target-pos)) + (nav-enemy-travel-post) + (let* ((f3-0 (vector-vector-distance (-> self collide-info trans) (-> self nav target-pos))) + (f1-2 (fmax 0.0 (fmin 1.0 (- 1.0 (/ (+ -24576.0 f3-0) (+ -24576.0 (-> self spawn-distance))))))) + (f0-2 (+ 0.5 (* 1.5 f1-2))) + ) + (sound-play-by-name + (static-sound-name "bigshark-alert") + (-> self sound-id) + 1024 + (the int (* 1524.0 f0-2)) + 0 + 1 + (the-as symbol (-> self collide-info trans)) ) - ) ) - (f0-2 (+ 0.5 (* 1.5 f1-2))) - ) - (sound-play-by-name - (static-sound-name "bigshark-alert") - (-> self sound-id) - 1024 - (the int (* 1524.0 f0-2)) - 0 - 1 - (the-as symbol (-> self collide-info trans)) - ) + (none) ) - (none) - ) ) (defstate nav-enemy-stop-chase (sharkey) :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior sharkey) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) :code (behavior () - (ja-channel-push! 1 51) - (while #t - (let ((a0-1 (-> self skel root-channel 0))) - (set! - (-> a0-1 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) - ) - ) - (set! - (-> a0-1 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) + (ja-channel-push! 1 51) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) + ) + (set! (-> a0-1 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) data 0 length) -1) + ) + ) + (set! (-> a0-1 param 1) (-> self anim-speed)) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info walk-anim))) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (set! (-> self collide-info trans y) + (seek (-> self collide-info trans y) (-> self y-max) (* (-> self y-speed) (-> *display* seconds-per-frame))) + ) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) ) - data - 0 - length - ) - -1 ) - ) ) - (set! (-> a0-1 param 1) (-> self anim-speed)) - (set! (-> a0-1 frame-num) 0.0) - (joint-control-channel-group! - a0-1 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info walk-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) - (set! - (-> self collide-info trans y) - (seek - (-> self collide-info trans y) - (-> self y-max) - (* (-> self y-speed) (-> *display* seconds-per-frame)) - ) - ) - (suspend) - (let ((a0-4 (-> self skel root-channel 0))) - (set! - (-> a0-4 param 0) - (the float (+ (-> a0-4 frame-group data 0 length) -1)) - ) - (set! (-> a0-4 param 1) (-> self anim-speed)) - (joint-control-channel-group-eval! - a0-4 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) ) (defstate nav-enemy-stare (sharkey) :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior sharkey) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) :trans (behavior () - (if (TODO-RENAME-46 self (-> self nav-info notice-distance)) - (go-virtual nav-enemy-chase) + (if (TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self state-timeout)) + (go-virtual nav-enemy-patrol) + ) + (none) ) - (if - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (-> self state-timeout) - ) - (go-virtual nav-enemy-patrol) - ) - (none) - ) :code (behavior () - (ja-channel-push! 1 51) - (let ((v1-2 (-> self skel root-channel 0))) - (set! - (-> v1-2 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info idle-anim)) + (ja-channel-push! 1 51) + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info idle-anim))) + ) ) - ) - ) - (let ((v1-5 (-> self skel root-channel 0))) - (set! (-> v1-5 num-func) num-func-identity) - (set! (-> v1-5 frame-num) 0.0) - ) - (while #t - (let ((a0-7 (-> self skel root-channel 0))) - (set! (-> a0-7 param 0) (-> self anim-speed)) - (joint-control-channel-group-eval! - a0-7 - (the-as art-joint-anim #f) - num-func-loop! + (let ((v1-5 (-> self skel root-channel 0))) + (set! (-> v1-5 num-func) num-func-identity) + (set! (-> v1-5 frame-num) 0.0) ) - ) - (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) - (set! - (-> self collide-info trans y) - (seek - (-> self collide-info trans y) - (-> self y-max) - (* (-> self y-speed) (-> *display* seconds-per-frame)) + (while #t + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-loop!) + ) + (set! (-> self anim-speed) (seek (-> self anim-speed) 1.0 0.05)) + (set! (-> self collide-info trans y) + (seek (-> self collide-info trans y) (-> self y-max) (* (-> self y-speed) (-> *display* seconds-per-frame))) + ) + (suspend) ) - ) - (suspend) + (none) ) - (none) - ) ) (defstate nav-enemy-victory (sharkey) :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior sharkey) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior sharkey) + nav-enemy-default-event-handler + ) :code (behavior () - (ja-channel-push! 1 22) - (dotimes (gp-0 3) - (let ((a0-1 (-> self skel root-channel 0))) - (set! - (-> a0-1 frame-group) - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info victory-anim)) - ) - ) - (set! - (-> a0-1 param 0) - (the - float - (+ - (-> - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info victory-anim)) + (ja-channel-push! 1 22) + (dotimes (gp-0 3) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim))) + ) + (set! (-> a0-1 param 0) + (the float + (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim))) data 0 length) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) (-> self anim-speed)) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (the-as art-joint-anim (-> self draw art-group data (-> self nav-info victory-anim))) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) (-> self anim-speed)) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) ) - data - 0 - length - ) - -1 ) - ) ) - (set! (-> a0-1 param 1) (-> self anim-speed)) - (set! (-> a0-1 frame-num) 0.0) - (joint-control-channel-group! - a0-1 - (the-as - art-joint-anim - (-> self draw art-group data (-> self nav-info victory-anim)) - ) - num-func-seek! - ) - ) - (until (ja-done? 0) - (suspend) - (let ((a0-2 (-> self skel root-channel 0))) - (set! - (-> a0-2 param 0) - (the float (+ (-> a0-2 frame-group data 0 length) -1)) - ) - (set! (-> a0-2 param 1) (-> self anim-speed)) - (joint-control-channel-group-eval! - a0-2 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (go-virtual nav-enemy-stare) + (none) ) - (go-virtual nav-enemy-stare) - (none) - ) ) -(define - *sharkey-nav-enemy-info* - (new 'static 'nav-enemy-info - :idle-anim 2 - :walk-anim 2 - :turn-anim -1 - :notice-anim 2 - :run-anim 2 - :jump-anim -1 - :jump-land-anim -1 - :victory-anim 2 - :taunt-anim 2 - :die-anim 2 - :neck-joint -1 - :player-look-at-joint 5 - :run-travel-speed (meters 12.0) - :run-rotate-speed (degrees 1999.9999) - :run-acceleration (meters 6.0) - :run-turn-time (seconds 0.5) - :walk-travel-speed (meters 6.0) - :walk-rotate-speed (degrees 1999.9999) - :walk-acceleration (meters 6.0) - :walk-turn-time (seconds 0.5) - :attack-shove-back (meters 1.0) - :attack-shove-up (meters 0.5) - :shadow-size (meters 2.0) - :notice-nav-radius (meters 3.0) - :nav-nearest-y-threshold (meters 10.0) - :notice-distance (meters 500.0) - :stop-chase-distance (meters 510.0) - :frustration-distance (meters 8.0) - :frustration-time #x4b0 - :die-anim-hold-frame 10000000000.0 - :jump-land-anim-end-frame 10000000000.0 - :jump-height-min (meters 1.0) - :jump-height-factor 0.5 - :jump-start-anim-speed 1.0 - :shadow-max-y (meters 1.0) - :shadow-min-y (meters -1.0) - :shadow-locus-dist (meters 150.0) - :use-align #f - :draw-shadow #f - :move-to-ground #f - :hover-if-no-ground #f - :use-momentum #t - :use-flee #f - :use-proximity-notice #f - :use-jump-blocked #f - :use-jump-patrol #f - :gnd-collide-with #x1 - :debug-draw-neck #f - :debug-draw-jump #f - ) - ) +(define *sharkey-nav-enemy-info* (new 'static 'nav-enemy-info + :idle-anim 2 + :walk-anim 2 + :turn-anim -1 + :notice-anim 2 + :run-anim 2 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 2 + :taunt-anim 2 + :die-anim 2 + :neck-joint -1 + :player-look-at-joint 5 + :run-travel-speed (meters 12.0) + :run-rotate-speed (degrees 1999.9999) + :run-acceleration (meters 6.0) + :run-turn-time (seconds 0.5) + :walk-travel-speed (meters 6.0) + :walk-rotate-speed (degrees 1999.9999) + :walk-acceleration (meters 6.0) + :walk-turn-time (seconds 0.5) + :attack-shove-back (meters 1.0) + :attack-shove-up (meters 0.5) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 3.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 500.0) + :stop-chase-distance (meters 510.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 10000000000.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 1.0) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #f + :move-to-ground #f + :hover-if-no-ground #f + :use-momentum #t + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) (defmethod init-from-entity! sharkey ((obj sharkey) (arg0 entity-actor)) (set! (-> obj scale) (res-lump-float arg0 'scale :default 1.0)) - (let - ((s4-0 - (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) - ) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 2) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 (* 6144.0 (-> obj scale))) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj collide-info) s4-0) ) - (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) - (set! (-> s4-0 reaction) default-collision-reaction) - (set! - (-> s4-0 no-reaction) - (the-as - (function collide-shape-moving collide-shape-intersect vector vector none) - nothing - ) - ) - (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) - (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) - (set! (-> s3-0 collide-with) (the-as uint 16)) - (set! (-> s3-0 prim-core offense) 2) - (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 (* 6144.0 (-> obj scale))) - (set-root-prim! s4-0 s3-0) - ) - (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) - (backup-collide-with-as s4-0) - (set! (-> obj collide-info) s4-0) - ) (process-drawable-from-entity! obj arg0) (initialize-skeleton obj *sharkey-sg* '()) (TODO-RENAME-45 obj *sharkey-nav-enemy-info*) (logclear! (-> obj mask) (process-mask actor-pause)) - (set! - (-> obj water) - (new 'process 'water-control obj 3 12288.0 8192.0 2048.0) - ) + (set! (-> obj water) (new 'process 'water-control obj 3 12288.0 8192.0 2048.0)) (set! (-> obj water flags) (the-as uint #xc00002)) (set! (-> obj water height) (res-lump-float (-> obj entity) 'water-height)) (set! (-> obj water ripple-size) 20480.0) @@ -1202,25 +835,10 @@ nav-enemy-default-event-handler (set! (-> obj y-min) (+ -49152.0 (-> obj y-max))) (set! (-> obj collide-info trans y) (-> obj y-min)) (set! (-> obj anim-speed) 1.0) - (set-vector! - (-> obj collide-info scale) - (-> obj scale) - (-> obj scale) - (-> obj scale) - 1.0 - ) - (set! - (-> obj reaction-time) - (the int (* 300.0 (res-lump-float (-> obj entity) 'delay :default 1.0))) - ) - (set! - (-> obj spawn-distance) - (res-lump-float (-> obj entity) 'distance :default 122880.0) - ) - (set! - (-> obj chase-speed) - (res-lump-float (-> obj entity) 'speed :default 49152.0) - ) + (set-vector! (-> obj collide-info scale) (-> obj scale) (-> obj scale) (-> obj scale) 1.0) + (set! (-> obj reaction-time) (the int (* 300.0 (res-lump-float (-> obj entity) 'delay :default 1.0)))) + (set! (-> obj spawn-distance) (res-lump-float (-> obj entity) 'distance :default 122880.0)) + (set! (-> obj chase-speed) (res-lump-float (-> obj entity) 'speed :default 49152.0)) (set! (-> obj y-speed) (-> obj chase-speed)) (set! (-> obj enable-patrol) #f) (set! (-> obj sound-id) (new-sound-id)) diff --git a/goal_src/levels/maincave/mother-spider-egg.gc b/goal_src/levels/maincave/mother-spider-egg.gc index b38f30ebaf..75dd9dec31 100644 --- a/goal_src/levels/maincave/mother-spider-egg.gc +++ b/goal_src/levels/maincave/mother-spider-egg.gc @@ -39,6 +39,14 @@ (dummy-20 (_type_) none 20) (draw-egg-shadow (_type_ vector symbol) symbol 21) ) + (:states + mother-spider-egg-die + mother-spider-egg-die-exit + mother-spider-egg-die-while-falling + mother-spider-egg-falling + mother-spider-egg-hatch + mother-spider-egg-on-ground + ) ) diff --git a/goal_src/levels/maincave/mother-spider-h.gc b/goal_src/levels/maincave/mother-spider-h.gc index dfe9089e77..979ad761ed 100644 --- a/goal_src/levels/maincave/mother-spider-h.gc +++ b/goal_src/levels/maincave/mother-spider-h.gc @@ -17,6 +17,9 @@ :method-count-assert 20 :size-assert #xf0 :flag-assert #x14008000f0 + (:states + mother-spider-leg-flying + ) ) @@ -126,6 +129,21 @@ (spawn-child (_type_ vector vector symbol) int 30) (is-player-stuck? (_type_) symbol 31) ) + (:states + mother-spider-birth-baby + mother-spider-birthing + mother-spider-die + mother-spider-die-from-uppercut + mother-spider-die-wait-for-children + mother-spider-hit-while-birthing + mother-spider-hit-while-tracking + mother-spider-idle + mother-spider-spit + mother-spider-stop-traveling + mother-spider-tracking + (mother-spider-traveling uint) + wait-for-children + ) ) diff --git a/goal_src/levels/maincave/mother-spider.gc b/goal_src/levels/maincave/mother-spider.gc index 727416f808..fb0524a834 100644 --- a/goal_src/levels/maincave/mother-spider.gc +++ b/goal_src/levels/maincave/mother-spider.gc @@ -5,3 +5,2109 @@ ;; name in dgo: mother-spider ;; dgos: L1, MAI, MAINCAVE +(declare-type mother-spider process-drawable) +(define-extern mother-spider-full-joint-callback (function mother-spider none)) + +;; DECOMP BEGINS + +(defskelgroup *mother-spider-sg* mother-spider + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 8) + :longest-edge (meters 0) + :shadow 4 + ) + +(defskelgroup *mother-spider-leg-sg* mother-spider + 13 + -1 + ((14 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +(define + *mother-spider-threads* + (new 'static 'inline-array mother-spider-thread 9 + (new 'static 'mother-spider-thread :joint-index 27) + (new 'static 'mother-spider-thread :trans-u (the-as float #x1a) :swing-arc-u 0.35) + (new 'static 'mother-spider-thread :joint-index #x3dcccccd :swing-arc-u (the-as float #x19)) + (new 'static 'mother-spider-thread :joint-index #x3f19999a :trans-u 0.35) + (new 'static 'mother-spider-thread :joint-index 24 :trans-u 0.8 :swing-arc-u 0.65) + (new 'static 'mother-spider-thread :trans-u (the-as float #x17) :swing-arc-u 0.9) + (new 'static 'mother-spider-thread :joint-index #x3f4ccccd :swing-arc-u (the-as float #x16)) + (new 'static 'mother-spider-thread :joint-index #x3f733333 :trans-u 0.95) + (new 'static 'mother-spider-thread :joint-index 3 :trans-u 1.0 :swing-arc-u 1.0) + ) + ) + +(define + *mother-spider-leg-infos* + (new 'static 'inline-array mother-spider-leg-info 8 + (new 'static 'mother-spider-leg-info :joint-index0 13 :joint-index1 14 :cprim-index 8) + (new 'static 'mother-spider-leg-info :joint-index0 7 :joint-index1 8 :cprim-index 5) + (new 'static 'mother-spider-leg-info :joint-index0 15 :joint-index1 16 :cprim-index 7) + (new 'static 'mother-spider-leg-info :joint-index0 9 :joint-index1 10 :cprim-index 4) + (new 'static 'mother-spider-leg-info :joint-index0 17 :joint-index1 18 :cprim-index 6) + (new 'static 'mother-spider-leg-info :joint-index0 11 :joint-index1 12 :cprim-index 3) + (new 'static 'mother-spider-leg-info :joint-index0 27) + (new 'static 'mother-spider-leg-info :joint-index0 26 :joint-index1 #x3eb33333 :cprim-index #x3dcccccd) + ) + ) + +(set! (-> *part-group-id-table* 614) (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-mother-spider-leg" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2477)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 2477) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-rnd-flt spt-num 0.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.35) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 96.0 128.0 1.0) + (sp-rnd-flt spt-a 48.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.006666667) 1.0) + (sp-flt spt-scalevel-y (meters 0.002)) + (sp-flt spt-fade-a -0.4) + (sp-rnd-flt spt-accel-y -1.3653333 -1.3653333 1.0) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(defstate mother-spider-leg-flying (mother-spider-leg) + :trans + (behavior () + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (+! (-> self transv y) (* (-> self gravity) (-> *display* seconds-per-frame))) + (let ((gp-0 (new 'stack-no-clear 'collide-tri-result)) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (let ((v1-1 a2-0)) + (.lvf vf1 (&-> (-> self transv) quad)) + (let ((f0-2 (-> *display* seconds-per-frame))) + (.mov at-0 f0-2) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-1 quad) vf1) + ) + (when (>= (dummy-10 *collide-cache* (-> self root trans) a2-0 3276.8 1 self gp-0 1) 0.0) + (let ((f28-0 (vector-xz-length (-> self transv)))) + (vector-reflect! (-> self transv) (-> self transv) (-> gp-0 normal)) + (let ((f30-0 (-> self transv y))) + (set! (-> self transv y) 0.0) + (vector-normalize! (-> self transv) (* f28-0 (rand-vu-float-range 0.3 0.8))) + (set! (-> self transv y) (* 0.7 f30-0)) + ) + ) + (set-vector! + (-> self facing-rotv) + (rand-vu-float-range 5461.3335 40049.777) + 0.0 + (rand-vu-float-range 16384.0 54613.332) + 1.0 + ) + ) + ) + (vector-v+! (-> self root trans) (-> self root trans) (-> self transv)) + (+! (-> self facing-rot x) (* (-> self facing-rotv x) (-> *display* seconds-per-frame))) + (set! (-> self facing-rot z) + (deg-seek (-> self facing-rot z) 16384.0 (* (-> self facing-rotv z) (-> *display* seconds-per-frame))) + ) + (quaternion-zxy! (-> self root quat) (-> self facing-rot)) + (set! (-> self root scale x) (seek (-> self root scale x) 0.0 (* 0.5 (-> *display* seconds-per-frame)))) + (set! (-> self root scale y) (-> self root scale x)) + (set! (-> self root scale z) (-> self root scale x)) + (none) + ) + ) + :code + (behavior () + (ja-channel-push! 1 0) + (let ((f30-0 (rand-vu-float-range 0.2 0.7))) + (dotimes (gp-0 3) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 15))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 15)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 15)) num-func-seek!) + ) + (until (ja-done? 0) + (spawn (-> self part) (-> self root trans)) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) f30-0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) f30-0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) f30-0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider-leg) ja-post) + ) + +(defstate wait-for-children (mother-spider) + :code + (behavior () + (logior! (-> self draw status) 2) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) ja-post) + ) + +(defbehavior mother-spider-leg-init-by-other mother-spider-leg ((arg0 mother-spider) (arg1 vector) (arg2 vector) (arg3 vector)) + (set! (-> self entity) (-> arg0 entity)) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 quad)) + (vector-identity! (-> self root scale)) + (set-heading-vec-clear-roll-pitch! (-> self root) arg2) + (vector-float*! (-> self transv) arg3 (rand-vu-float-range 10240.0 30720.0)) + (rot-zxy-from-vector! (-> self facing-rot) arg2) + (set-vector! + (-> self facing-rotv) + (rand-vu-float-range 5461.3335 16384.0) + 0.0 + (rand-vu-float-range 16384.0 36408.89) + 1.0 + ) + (set! (-> self gravity) (rand-vu-float-range -266240.0 -163840.0)) + (initialize-skeleton self *mother-spider-leg-sg* '()) + (set! (-> self part) (create-launch-control (-> *part-group-id-table* 614) self)) + (create-connection! + *cavecrystal-light-control* + self + (-> self entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 4096.0 + ) + (go mother-spider-leg-flying) + (none) + ) + +(set! (-> *part-group-id-table* 618) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-mother-spider-leg-socket" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2498 :period 90 :length 30)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 2498) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-rnd-flt spt-num 1.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.35) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 96.0 128.0 1.0) + (sp-rnd-flt spt-a 48.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-y (meters 0.002)) + (sp-flt spt-fade-a -0.4) + (sp-flt spt-accel-y -2.7306666) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(defbehavior mother-spider-default-event-handler mother-spider ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (cond + ((= (-> arg0 type) target) + (let ((v1-2 (-> arg3 param 2))) + (when (!= v1-2 (-> self player-attack-id)) + (set! (-> self player-attack-id) v1-2) + (case (-> arg3 param 1) + (('uppercut) + (go mother-spider-die-from-uppercut) + ) + (else + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((v1-5 (target-pos 0))) + (vector-! gp-0 (-> self root-override trans) v1-5) + ) + (set! (-> gp-0 y) 0.0) + (vector-normalize! gp-0 1.0) + (set! (-> self thread-vel) (+ -40960.0 (-> self thread-vel))) + (if (TODO-RENAME-21 self gp-0 102400.0 #t) + (go mother-spider-die) + ) + ) + ) + ) + ) + ) + ) + (else + (let ((gp-1 (new 'stack-no-clear 'vector))) + (let ((v1-10 (-> (the-as process-drawable arg0) root trans))) + (vector-! gp-1 (-> self root-override trans) v1-10) + ) + (set! (-> gp-1 y) 0.0) + (vector-normalize! gp-1 1.0) + (set! (-> self thread-vel) (+ -40960.0 (-> self thread-vel))) + (if (TODO-RENAME-21 self gp-1 102400.0 #t) + (go mother-spider-die) + ) + ) + ) + ) + ) + (('touch) + (when (= (-> arg0 type) target) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) self) + (set! (-> a1-15 num-params) 2) + (set! (-> a1-15 message) 'attack) + (set! (-> a1-15 param 0) (-> arg3 param 0)) + (let ((v1-18 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-18 shove-up) 2048.0) + (set! (-> v1-18 shove-back) 8192.0) + (set! (-> a1-15 param 1) (the-as uint v1-18)) + ) + (when (send-event-function arg0 a1-15) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (let ((v1-20 (target-pos 0))) + (vector-! gp-2 (-> self root-override trans) v1-20) + ) + (set! (-> gp-2 y) 0.0) + (vector-normalize! gp-2 1.0) + (set! (-> self thread-vel) (+ -8192.0 (-> self thread-vel))) + (TODO-RENAME-21 self gp-2 40960.0 #f) + ) + ) + ) + ) + ) + (('trigger) + (when (= (-> arg0 type) mother-spider-egg) + (let ((gp-3 (new 'stack-no-clear 'vector)) + (s5-0 (-> (the-as process-drawable arg0) root trans)) + ) + (vector-! gp-3 (target-pos 0) s5-0) + (set! (-> gp-3 y) 0.0) + (vector-normalize! gp-3 1.0) + (spawn-child self s5-0 gp-3 #t) + ) + ) + ) + (('untrigger) + (when (or (= (-> arg0 type) mother-spider-egg) (= (-> arg0 type) baby-spider)) + (let ((v0-0 (the-as object (+ (-> self baby-count) -1)))) + (set! (-> self baby-count) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + ) + +(defbehavior mother-spider-death-event-handler mother-spider ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (when (= (-> arg0 type) mother-spider-egg) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (-> (the-as process-drawable arg0) root trans)) + ) + (vector-! gp-0 (target-pos 0) s5-0) + (set! (-> gp-0 y) 0.0) + (vector-normalize! gp-0 1.0) + (spawn-child self s5-0 gp-0 #t) + ) + ) + ) + (('death-start) + (drop-pickup (-> self fact) #t *entity-pool* (-> self fact) 0) + ) + (('death-end) + (let ((v0-0 (the-as object (logior (-> self draw status) 2)))) + (set! (-> self draw status) (the-as uint v0-0)) + v0-0 + ) + ) + ) + ) + +(defmethod spawn-child mother-spider ((obj mother-spider) (arg0 vector) (arg1 vector) (arg2 symbol)) + (let ((s3-0 (new 'stack-no-clear 'baby-spider-spawn-params))) + (init! s3-0 arg2 #f #t #f 7 1 'untrigger) + (set-delay! s3-0 2700) + (let ((s2-0 (get-process *default-dead-pool* baby-spider #x4000))) + (when s2-0 + (let ((t9-3 (method-of-type baby-spider activate))) + (t9-3 (the-as baby-spider s2-0) obj 'baby-spider (the-as pointer #x70004000)) + ) + (run-now-in-process s2-0 baby-spider-init-by-other obj arg0 arg1 s3-0) + (-> s2-0 ppointer) + ) + ) + ) + (let ((v0-5 (+ (-> obj baby-count) 1))) + (set! (-> obj baby-count) v0-5) + v0-5 + ) + ) + +(defmethod is-player-stuck? mother-spider ((obj mother-spider)) + (when (and *target* (not (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + ) + (let* ((v1-10 (target-pos 0)) + (f0-1 (- (-> obj anchor-trans y) (-> v1-10 y))) + (f1-2 (- (-> obj player-sticky-dist-from-anchor) f0-1)) + ) + (when (or (< 8192.0 f1-2) (< f1-2 -8192.0)) + (set! (-> obj player-sticky-dist-from-anchor) f0-1) + (return #t) + ) + ) + ) + #f + ) + +(defmethod STUB-27 mother-spider ((obj mother-spider)) + (none) + ) + +(defmethod STUB-28 mother-spider ((obj mother-spider)) + 0 + (none) + ) + +(defmethod TODO-RENAME-24 mother-spider ((obj mother-spider)) + (cond + ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) (logtest? (-> obj draw status) 8)) + (let ((s5-0 (new 'stack-no-clear 'collide-tri-result)) + (a1-0 (new 'stack-no-clear 'vector)) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> a1-0 quad) (-> obj root-override trans quad)) + (set-vector! a2-0 0.0 -81920.0 0.0 1.0) + (set! (-> a1-0 y) (+ -8192.0 (-> a1-0 y))) + (cond + ((>= (dummy-10 *collide-cache* a1-0 a2-0 8192.0 1 obj s5-0 1) 0.0) + (let ((v1-11 (-> obj draw shadow-ctrl))) + (set! (-> v1-11 settings flags) (logand -33 (-> v1-11 settings flags))) + ) + 0 + (let ((v1-14 (-> obj draw shadow-ctrl))) + (set! (-> v1-14 settings bot-plane w) (- (+ -6144.0 (-> s5-0 intersect y)))) + ) + 0 + (let ((v1-17 (-> obj draw shadow-ctrl))) + (set! (-> v1-17 settings top-plane w) (- (+ 6144.0 (-> s5-0 intersect y)))) + ) + 0 + (let* ((f3-0 (vector-vector-distance (-> s5-0 intersect) (-> obj root-override trans))) + (f0-14 (* 0.000030517578 (fmin 32768.0 (fmax 0.0 (+ -57344.0 f3-0))))) + (f0-15 (lerp 409600.0 40960.0 f0-14)) + ) + (set! (-> obj draw shadow-ctrl settings shadow-dir w) f0-15) + f0-15 + ) + ) + (else + (let ((v1-23 (-> obj draw shadow-ctrl))) + (logior! (-> v1-23 settings flags) 32) + ) + 0 + ) + ) + ) + ) + (else + (let ((v1-25 (-> obj draw shadow-ctrl))) + (logior! (-> v1-25 settings flags) 32) + ) + 0 + ) + ) + ) + +(defmethod grab-player? mother-spider ((obj mother-spider)) + (when *target* + (let ((s5-0 (target-pos 0))) + (when (and + (>= 40960.0 (- (-> obj thread-min-trans y) (-> s5-0 y))) + (>= (-> obj activate-xz-dist) (vector-vector-xz-distance (-> obj thread-min-trans) s5-0)) + ) + (cond + ((-> obj check-z-thresh?) + (let ((f0-3 (- (-> s5-0 z) (-> obj root-override trans z)))) + (if (>= (-> obj activate-z-thresh) f0-3) + (return #t) + ) + ) + ) + (else + (return #t) + ) + ) + ) + ) + ) + #f + ) + +(defmethod letgo-player? mother-spider ((obj mother-spider)) + (if (not *target*) + (return #t) + ) + (let ((a1-0 (target-pos 0))) + (when (-> obj check-z-thresh?) + (if (>= (- (-> a1-0 z) (-> obj root-override trans z)) (-> obj deactivate-z-thresh)) + (return #t) + ) + ) + (if (or + (>= (- (-> obj thread-min-trans y) (-> a1-0 y)) 49152.0) + (>= (vector-vector-xz-distance (-> obj thread-min-trans) a1-0) (-> obj deactivate-xz-dist)) + ) + (return #t) + ) + ) + #f + ) + +(defmethod TODO-RENAME-21 mother-spider ((obj mother-spider) (arg0 vector) (arg1 float) (arg2 symbol)) + (local-vars (sv-112 process) (sv-128 vector) (sv-144 vector)) + (let ((f30-0 (vector-length (-> obj swing-pos)))) + (when (< 0.0 f30-0) + (let ((s1-0 (new 'stack-no-clear 'vector)) + (s2-0 (new 'stack-no-clear 'vector)) + ) + (vector-normalize-copy! s1-0 (-> obj swing-pos) 1.0) + (vector-rotate-around-y! s2-0 s1-0 16384.0) + (if (< (vector-dot arg0 s2-0) 0.0) + (vector-negate! s2-0 s2-0) + ) + (let ((f0-4 (fmin 1.0 (/ f30-0 (-> obj max-swing-radius))))) + (vector-lerp! arg0 arg0 s2-0 f0-4) + ) + ) + (vector-normalize! arg0 1.0) + ) + ) + (let ((s2-1 (new 'stack-no-clear 'vector))) + (vector-float*! s2-1 arg0 arg1) + (vector-flatten! (-> obj swing-vel) (-> obj swing-vel) arg0) + (vector+! (-> obj swing-vel) (-> obj swing-vel) s2-1) + ) + (set! (-> obj swing-vel y) 0.0) + (when arg2 + (set! (-> obj hit?) #t) + (set! (-> obj spin-vel) 131072.0) + (set! (-> obj spin-time) (the-as uint (-> *display* base-frame-counter))) + (let ((s4-1 (-> obj damage)) + (s3-1 (-> obj root-override root-prim)) + ) + (dotimes (s2-2 2) + (when (< (-> obj damage) 6) + (+! (-> obj damage) 1) + (logior! (-> obj leg-socket-part-mask) (ash 1 s4-1)) + (set! (-> obj leg-socket-part-time s4-1) (the-as uint (-> *display* base-frame-counter))) + (let ((s1-1 (-> *mother-spider-leg-infos* s4-1))) + (let ((s0-0 (new 'stack-no-clear 'vector))) + (set! sv-128 (new 'stack-no-clear 'vector)) + (set! sv-144 (new 'stack-no-clear 'vector)) + (vector<-cspace! s0-0 (-> obj node-list data (-> s1-1 joint-index0))) + (vector<-cspace! sv-128 (-> obj node-list data (-> s1-1 joint-index1))) + (vector-! sv-128 sv-128 s0-0) + (vector-normalize! sv-128 1.0) + (vector-lerp! sv-144 sv-128 arg0 0.6) + (vector-normalize! sv-144 1.0) + (+! (-> sv-144 y) (rand-vu-float-range 0.0 0.3)) + (vector-normalize! sv-144 1.0) + (set! sv-112 (get-process *default-dead-pool* mother-spider-leg #x4000)) + (when sv-112 + (let ((t9-15 (method-of-type mother-spider-leg activate))) + (t9-15 (the-as mother-spider-leg sv-112) obj 'mother-spider-leg (the-as pointer #x70004000)) + ) + (run-now-in-process sv-112 mother-spider-leg-init-by-other obj s0-0 sv-128 sv-144) + (-> sv-112 ppointer) + ) + ) + (let ((v1-43 (-> (the-as collide-shape-prim-group s3-1) prims (-> s1-1 cprim-index)))) + (set! (-> v1-43 collide-with) (the-as uint 0)) + (set! (-> v1-43 prim-core collide-as) (the-as uint 0)) + ) + ) + 0 + (+! s4-1 1) + ) + ) + ) + ) + (>= (-> obj damage) 6) + ) + +(defmethod TODO-RENAME-29 mother-spider ((obj mother-spider) (arg0 symbol) (arg1 symbol)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-update-time)) + (set! (-> obj last-update-time) (the-as uint v1-1)) + (TODO-RENAME-23 obj) + (let ((f0-1 (fmax 0.0 (- (-> obj dist-from-anchor) (-> obj idle-dist-from-anchor))))) + (cond + ((>= f0-1 20480.0) + (vector-identity! (-> obj root-override scale)) + ) + (else + (let ((f0-2 (* 0.000048828126 f0-1))) + (set-vector! (-> obj root-override scale) f0-2 f0-2 f0-2 1.0) + ) + ) + ) + ) + (if arg0 + (TODO-RENAME-24 obj) + ) + (let ((s4-1 (-> obj leg-socket-part-mask))) + (when (nonzero? s4-1) + (dotimes (s3-0 6) + (when (logtest? s4-1 1) + (cond + ((>= (+ (-> *display* base-frame-counter) -300) (the-as int (-> obj leg-socket-part-time s3-0))) + (set! (-> obj leg-socket-part-mask) (logxor (-> obj leg-socket-part-mask) (ash 1 s3-0))) + ) + (else + (let ((v1-20 (-> *mother-spider-leg-infos* s3-0)) + (s2-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s2-0 (-> obj node-list data (-> v1-20 joint-index0))) + (spawn (-> obj part) s2-0) + ) + ) + ) + ) + (set! s4-1 (/ s4-1 2)) + ) + ) + ) + (when arg1 + (when *target* + (case (-> obj mode) + ((1 2) + (if *target* + (look-at-enemy! (-> *target* neck) (the-as vector (-> obj root-override root-prim prim-core)) 'attacking obj) + ) + ) + ) + ) + (set-target! (-> obj neck) (target-pos 5)) + ) + ) + ) + (none) + ) + +(defmethod TODO-RENAME-23 mother-spider ((obj mother-spider)) + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let* ((f2-0 (-> obj dist-from-anchor)) + (f1-0 (- (-> obj targ-dist-from-anchor) f2-0)) + (f0-1 (-> obj thread-vel)) + ) + (when (or (!= f0-1 0.0) (!= f1-0 0.0)) + (let ((f0-2 (+ f0-1 (* 2.0 f1-0)))) + (let ((f3-4 (-> obj thread-speed))) + (if (< f3-4 (fabs f0-2)) + (set! f0-2 (if (>= f0-2 0.0) + f3-4 + (- f3-4) + ) + ) + ) + ) + (let ((f2-1 (+ f2-0 (* f0-2 (-> *display* seconds-per-frame))))) + (let ((f3-8 (- (-> obj targ-dist-from-anchor) f2-1))) + (cond + ((>= f1-0 0.0) + (if (>= 0.0 f3-8) + (set! f0-2 (- f0-2 (* 0.55 f0-2))) + ) + ) + (else + (if (>= f3-8 0.0) + (set! f0-2 (- f0-2 (* 0.55 f0-2))) + ) + ) + ) + ) + (set! (-> obj dist-from-anchor) (fmax 0.0 f2-1)) + ) + (set! (-> obj thread-vel) f0-2) + ) + ) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-negate! s5-0 (-> obj swing-base-pos)) + (set! (-> s5-0 y) 0.0) + (let ((f0-4 (vector-length s5-0))) + (when (< 0.0 f0-4) + (let ((f1-11 (* 61440.0 (-> *display* seconds-per-frame)))) + (if (< f1-11 f0-4) + (vector-normalize! s5-0 f1-11) + ) + ) + (vector+! (-> obj swing-vel) (-> obj swing-vel) s5-0) + ) + ) + ) + (let ((f0-5 (vector-length (-> obj swing-vel)))) + (when (< 0.0 f0-5) + (let ((f0-6 (* 0.995 f0-5))) + (cond + ((< 40.96 f0-6) + (vector-normalize! (-> obj swing-vel) f0-6) + (let ((s5-1 (new 'stack-no-clear 'event-message-block)) + (s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s4-0 (-> obj node-list data 6)) + (let ((v1-20 s3-0)) + (.lvf vf1 (&-> (-> obj swing-vel) quad)) + (let ((f0-7 (-> *display* seconds-per-frame))) + (.mov at-0 f0-7) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-20 quad) vf1) + ) + (when (>= (dummy-10 *collide-cache* s4-0 s3-0 4915.2 1 obj (the-as collide-tri-result s5-1) 1) 0.0) + (vector-reflect! (-> obj swing-vel) (-> obj swing-vel) (the-as vector (&-> s5-1 param 6))) + (set! (-> obj swing-vel y) 0.0) + (vector-normalize! (-> obj swing-vel) (* 0.5 (vector-length (-> obj swing-vel)))) + (when (and + (!= (-> obj spin-vel) 0.0) + (>= (- (-> *display* base-frame-counter) (the-as int (-> obj spin-time))) 150) + ) + (set! (-> obj spin-vel) (* 0.75 (- (-> obj spin-vel)))) + (set! (-> obj spin-time) (the-as uint (-> *display* base-frame-counter))) + ) + ) + ) + (vector-v+! (-> obj swing-base-pos) (-> obj swing-base-pos) (-> obj swing-vel)) + 0 + ) + (else + (vector-reset! (-> obj swing-vel)) + ) + ) + ) + ) + ) + (set! (-> obj swing-pos quad) (-> obj swing-base-pos quad)) + (let ((f30-1 (the float (- (-> *display* base-frame-counter) (the-as int (-> obj spawned-time)))))) + (+! (-> obj swing-pos x) (* 1024.0 (cos (* 54.613335 f30-1)))) + (+! (-> obj swing-pos z) (* 1024.0 (cos (* 81.817726 f30-1)))) + ) + (let ((f0-26 (vector-length (-> obj swing-pos)))) + (cond + ((!= f0-26 0.0) + (let* ((f30-2 (-> obj dist-from-anchor)) + (f28-2 (* 10430.379 (/ f0-26 f30-2))) + ) + (set-vector! (-> obj root-override trans) 0.0 (* (cos f28-2) (- f30-2)) (* (sin f28-2) f30-2) 1.0) + ) + (let ((f0-36 (atan (-> obj swing-pos x) (-> obj swing-pos z)))) + (vector-rotate-around-y! (-> obj root-override trans) (-> obj root-override trans) f0-36) + ) + (vector+! (-> obj root-override trans) (-> obj root-override trans) (-> obj anchor-trans)) + ) + (else + (set! (-> obj root-override trans quad) (-> obj anchor-trans quad)) + (set! (-> obj root-override trans y) (- (-> obj root-override trans y) (-> obj dist-from-anchor))) + ) + ) + ) + (let ((v1-51 (-> obj draw bounds))) + (vector+! v1-51 (-> obj root-override trans) (-> obj anchor-trans)) + (vector-float*! v1-51 v1-51 0.5) + (vector-! v1-51 v1-51 (-> obj root-override trans)) + (set! (-> v1-51 w) (+ 28672.0 (* 0.5 (-> obj dist-from-anchor)))) + ) + (cond + ((!= (-> obj spin-vel) 0.0) + (let ((f0-44 (+ (-> obj orient-rot y) (* (-> obj spin-vel) (-> *display* seconds-per-frame))))) + (set! (-> obj orient-rot y) (- f0-44 (* (the float (the int (/ f0-44 65536.0))) 65536.0))) + ) + (set! (-> obj spin-vel) (seek (-> obj spin-vel) 0.0 (* 91022.22 (-> *display* seconds-per-frame)))) + (when (< (fabs (-> obj spin-vel)) 69176.89) + (if (>= (-> obj spin-vel) 0.0) + (set! (-> obj spin-vel) 69176.89) + (set! (-> obj spin-vel) -69176.89) + ) + (cond + (*target* + (let* ((v1-59 (target-pos 0)) + (f0-59 (atan (- (-> v1-59 x) (-> obj root-override trans x)) (- (-> v1-59 z) (-> obj root-override trans z)))) + ) + (if (>= 3640.889 (fabs (deg- f0-59 (-> obj orient-rot y)))) + (set! (-> obj spin-vel) 0.0) + ) + ) + ) + (else + (set! (-> obj spin-vel) 0.0) + ) + ) + ) + ) + (else + (when *target* + (let* ((v1-66 (target-pos 0)) + (f0-69 (atan (- (-> v1-66 x) (-> obj root-override trans x)) (- (-> v1-66 z) (-> obj root-override trans z)))) + ) + (set! (-> obj orient-rot y) + (deg-seek-smooth (-> obj orient-rot y) f0-69 (* 32768.0 (-> *display* seconds-per-frame)) 0.2) + ) + ) + ) + ) + ) + (quaternion-zxy! (-> obj root-override quat) (-> obj orient-rot)) + 0 + (none) + ) + ) + +(defstate mother-spider-idle (mother-spider) + :enter + (behavior () + (let ((v1-1 (-> self draw shadow-ctrl))) + (logior! (-> v1-1 settings flags) 32) + ) + 0 + (set! (-> self mode) (the-as uint 0)) + (set! (-> self skel postbind-function) (the-as (function pointer int process-drawable none) 0)) + (clear-collide-with-as (-> self root-override)) + (shut-down! (-> self neck)) + (logior! (-> self mask) (process-mask actor-pause)) + (logior! (-> self draw status) 2) + (none) + ) + :exit + (behavior () + (restore-collide-with-as (-> self root-override)) + (set! (-> self skel postbind-function) + (the-as (function pointer int process-drawable none) mother-spider-full-joint-callback) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + (behavior () + (if (grab-player? self) + (go mother-spider-traveling (the-as uint 1)) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate mother-spider-traveling (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior ((arg0 uint)) + (is-player-stuck? self) + (let ((v1-2 arg0)) + (cond + ((zero? v1-2) + (set! (-> self targ-dist-from-anchor) (-> self idle-dist-from-anchor)) + (set! (-> self thread-speed) 81920.0) + ) + ((= v1-2 1) + (set! (-> self targ-dist-from-anchor) + (fmax + (fmin (+ -28672.0 (-> self player-sticky-dist-from-anchor)) (-> self max-dist-from-anchor)) + (-> self idle-dist-from-anchor) + ) + ) + (if (zero? (-> self mode)) + (set! (-> self thread-speed) 327680.0) + (set! (-> self thread-speed) 81920.0) + ) + (set! (-> self spit-counter) 3) + ) + ((= v1-2 2) + (set! (-> self targ-dist-from-anchor) + (fmax + (fmin (+ -43008.0 (-> self player-sticky-dist-from-anchor)) (-> self max-dist-from-anchor)) + (-> self idle-dist-from-anchor) + ) + ) + (set! (-> self thread-speed) 28672.0) + ) + ) + ) + (set! (-> self mode) arg0) + (set! (-> self hit?) #f) + (set! (-> self going-up?) (< (-> self targ-dist-from-anchor) (-> self dist-from-anchor))) + (none) + ) + :trans + (behavior () + (let ((gp-0 (is-player-stuck? self)) + (v1-1 (-> self mode)) + ) + (cond + ((zero? v1-1) + (if (grab-player? self) + (go mother-spider-traveling (the-as uint 1)) + ) + ) + ((= v1-1 1) + (if (letgo-player? self) + (go mother-spider-traveling (the-as uint 0)) + ) + (when gp-0 + (set! (-> self targ-dist-from-anchor) + (fmax + (fmin (+ -28672.0 (-> self player-sticky-dist-from-anchor)) (-> self max-dist-from-anchor)) + (-> self idle-dist-from-anchor) + ) + ) + (set! (-> self going-up?) (< (-> self targ-dist-from-anchor) (-> self dist-from-anchor))) + ) + ) + ((= v1-1 2) + (if (letgo-player? self) + (go mother-spider-traveling (the-as uint 0)) + ) + (when gp-0 + (set! (-> self targ-dist-from-anchor) + (fmax + (fmin (+ -43008.0 (-> self player-sticky-dist-from-anchor)) (-> self max-dist-from-anchor)) + (-> self idle-dist-from-anchor) + ) + ) + (set! (-> self going-up?) (< (-> self targ-dist-from-anchor) (-> self dist-from-anchor))) + ) + ) + ) + ) + (cond + ((-> self going-up?) + (if (>= (-> self targ-dist-from-anchor) (-> self dist-from-anchor)) + (go mother-spider-stop-traveling) + ) + ) + (else + (if (>= (-> self dist-from-anchor) (-> self targ-dist-from-anchor)) + (go mother-spider-stop-traveling) + ) + ) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior ((arg0 uint)) + (local-vars (v1-12 symbol) (v1-28 symbol)) + (ja-channel-push! 1 30) + (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 7)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (until v1-12 + (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!) + ) + (set! v1-12 (or (ja-done? 0) (-> self hit?))) + ) + (when (-> self hit?) + (until (not (-> self hit?)) + (set! (-> self hit?) #f) + (ja-channel-push! 1 60) + (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 9)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (until v1-28 + (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!) + ) + (set! v1-28 (or (ja-done? 0) (-> self hit?))) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((gp-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +(defstate mother-spider-stop-traveling (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-tracking) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 30) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((v1-22 (-> self mode))) + (cond + ((zero? v1-22) + (go mother-spider-idle) + ) + ((= v1-22 1) + (go mother-spider-tracking) + ) + ((= v1-22 2) + (set! (-> self started-birthing-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self birthing-counter) (max 0 (- (-> self max-baby-count) (-> self baby-count)))) + (go mother-spider-birthing) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +(defstate mother-spider-tracking (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () + (set! (-> self hit?) #f) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self last-player-in-air-time) (the-as uint (-> *display* base-frame-counter))) + (none) + ) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-tracking) + ) + (if (letgo-player? self) + (go mother-spider-traveling (the-as uint 0)) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 6)) + (if (or (logtest? (-> *target* state-flags) #x80f8) (< (vector-vector-distance gp-0 (camera-pos)) 8192.0)) + (go mother-spider-traveling (the-as uint 2)) + ) + ) + (when (is-player-stuck? self) + (let ((f1-4 (fmax + (fmin (+ -28672.0 (-> self player-sticky-dist-from-anchor)) (-> self max-dist-from-anchor)) + (-> self idle-dist-from-anchor) + ) + ) + ) + (if (< 409.6 (fabs (- f1-4 (-> self dist-from-anchor)))) + (go mother-spider-traveling (the-as uint 1)) + ) + ) + ) + (if (or (not *target*) (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + (set! (-> self last-player-in-air-time) (the-as uint (-> *display* base-frame-counter))) + ) + (when (and + *target* + (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-spit-time))) 900) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-player-in-air-time))) 18) + (>= (-> self max-spit-xz-dist) (vector-vector-xz-distance (-> self root-override trans) (target-pos 0))) + ) + (let ((gp-2 (new 'stack-no-clear 'vector)) + (s5-2 (new 'stack-no-clear 'vector)) + ) + (set! (-> gp-2 quad) (-> self root-override trans quad)) + (set! (-> gp-2 w) 4096.0) + (when (sphere-in-view-frustum? (the-as sphere gp-2)) + (vector<-cspace! gp-2 (-> self node-list data 21)) + (set! (-> s5-2 quad) (-> (target-pos 0) quad)) + (set! (-> s5-2 y) (+ 4915.2 (-> s5-2 y))) + (cond + ((< 24576.0 (vector-vector-distance gp-2 s5-2)) + (go mother-spider-spit) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-spit-time))) 1500) + (go mother-spider-traveling (the-as uint 2)) + ) + ) + ) + ) + ) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + ) + (else + (ja-channel-push! 1 75) + ) + ) + (while #t + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +(defstate mother-spider-hit-while-tracking (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-tracking) + ) + (when (= (-> self spin-vel) 0.0) + (set! (-> self last-spit-time) (the-as uint 0)) + (go mother-spider-tracking) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 30) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (ja-channel-push! 1 30) + (while #t + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +(defstate mother-spider-spit (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-tracking) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 75) + (let ((gp-0 #f)) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.5) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (not gp-0) (>= (ja-aframe-num 0) 6.0) (>= 8.0 (ja-aframe-num 0))) + (when *target* + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (s2-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s4-0 (-> self node-list data 21)) + (set! (-> s5-0 quad) (-> (target-pos 0) quad)) + (set! (-> s5-0 y) (+ 4915.2 (-> s5-0 y))) + (when (< 24576.0 (vector-vector-distance s5-0 s4-0)) + (let ((a2-1 (-> self node-list data 19 bone transform))) + (set-vector! s2-0 0.0 0.0 1.0 1.0) + (vector-rotate*! s2-0 s2-0 a2-1) + ) + (set! (-> s2-0 w) 1.0) + (vector-! s5-0 s5-0 s4-0) + (vector-normalize! s5-0 1.0) + (vector-deg-seek s5-0 s2-0 s5-0 6371.5557) + (vector-normalize-copy! s3-0 s5-0 32768.0) + (let ((gp-1 (get-process *default-dead-pool* mother-spider-proj #x4000))) + (when gp-1 + (let ((t9-12 (method-of-type mother-spider-proj activate))) + (t9-12 (the-as mother-spider-proj gp-1) self 'mother-spider-proj (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 projectile-init-by-other (-> self entity) s4-0 s3-0 0 (process->handle *target*)) + (-> gp-1 ppointer) + ) + ) + (set! gp-0 #t) + (set! (-> self last-spit-time) (the-as uint (-> *display* base-frame-counter))) + (vector-negate! s5-0 s5-0) + (TODO-RENAME-21 self s5-0 49152.0 #f) + (when (nonzero? (-> self max-baby-count)) + (+! (-> self spit-counter) -1) + (when (< (-> self spit-counter) 0) + (set! (-> self spit-counter) 0) + 0 + ) + ) + ) + ) + ) + ) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.5) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (if (> (-> self spit-counter) 0) + (go mother-spider-tracking) + (go mother-spider-traveling (the-as uint 2)) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +(defstate mother-spider-birthing (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-birthing) + ) + (if (letgo-player? self) + (go mother-spider-traveling (the-as uint 0)) + ) + (if (and + (>= (- (-> *display* base-frame-counter) (the-as int (-> self started-birthing-time))) 1800) + (zero? (logand (-> *target* state-flags) #x80f8)) + ) + (go mother-spider-traveling (the-as uint 1)) + ) + (if (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 75) + (> (-> self birthing-counter) 0) + (and + (>= 49152.0 (- (-> self max-dist-from-anchor) (-> self dist-from-anchor))) + (zero? (logand (-> *target* state-flags) #x80f8)) + (dummy-21 (-> self nav) (-> self root-override trans)) + ) + ) + (go mother-spider-birth-baby) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + ) + (else + (ja-channel-push! 1 75) + ) + ) + (while #t + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +(defstate mother-spider-birth-baby (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-birthing) + ) + (if (letgo-player? self) + (go mother-spider-traveling (the-as uint 0)) + ) + (if (not (dummy-21 (-> self nav) (-> self root-override trans))) + (go mother-spider-birthing) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 75) + (let ((gp-0 #f)) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.4) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (not gp-0) (>= (ja-aframe-num 0) 10.0)) + (set! gp-0 #t) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (when (TODO-RENAME-20 self s5-0 s4-0) + (let ((s3-0 (get-process *default-dead-pool* mother-spider-egg #x4000))) + (when s3-0 + (let ((t9-5 (method-of-type mother-spider-egg activate))) + (t9-5 (the-as mother-spider-egg s3-0) self 'mother-spider-egg (the-as pointer #x70004000)) + ) + (run-now-in-process + s3-0 + mother-spider-egg-init-by-other + (-> self entity) + (-> self root-override trans) + s5-0 + s4-0 + ) + (-> s3-0 ppointer) + ) + ) + (+! (-> self baby-count) 1) + (+! (-> self birthing-counter) -1) + (sound-play-by-name (static-sound-name "lay-eggs") (new-sound-id) 1024 0 0 1 #t) + ) + ) + ) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.4) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (go mother-spider-birthing) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +(defmethod TODO-RENAME-20 mother-spider ((obj mother-spider) (arg0 vector) (arg1 vector)) + (set! (-> obj nav nav-cull-radius) 40960.0) + (set-current-poly! (-> obj nav) (dummy-16 (-> obj nav) (-> obj root-override trans))) + (dummy-28 (-> obj nav) -1) + (dotimes (s3-1 4) + (let ((f28-0 (+ 32768.0 (-> obj orient-rot y))) + (f30-0 (rand-vu-float-range 16384.0 40960.0)) + ) + (let ((s1-0 (new 'stack-no-clear 'vector)) + (s2-1 (new 'stack-no-clear 'vector)) + ) + (let ((f28-1 (+ f28-0 (rand-vu-float-range -9102.223 9102.223)))) + (set-vector! s1-0 (sin f28-1) 0.0 (cos f28-1) 1.0) + ) + (vector-float*! s2-1 s1-0 f30-0) + (dummy-35 (-> obj nav) (-> obj nav travel) (-> obj root-override trans) s2-1 s1-0 f30-0) + ) + (dummy-24 (-> obj nav) f30-0 (the-as clip-travel-vector-to-mesh-return-info #f)) + ) + (cond + ((>= (vector-xz-length (-> obj nav travel)) 4096.0) + (vector+! arg0 (-> obj root-override trans) (-> obj nav travel)) + (let ((s2-2 (new 'stack-no-clear 'collide-tri-result))) + (cond + ((>= (dummy-10 *collide-cache* arg0 (new 'static 'vector :y -69632.0 :w 1.0) 40.96 1 obj s2-2 1) 0.0) + (set! (-> arg0 y) (-> s2-2 intersect y)) + (set! (-> arg1 quad) (-> s2-2 normal quad)) + (return #t) + ) + (else + 0 + ) + ) + ) + ) + (else + 0 + ) + ) + ) + (dummy-17 (-> obj nav) arg0 (-> obj root-override trans)) + (let ((a1-12 (new 'stack-no-clear 'vector)) + (s3-2 (new 'stack-no-clear 'collide-tri-result)) + ) + (set! (-> a1-12 quad) (-> arg0 quad)) + (set! (-> a1-12 y) (+ 8192.0 (-> a1-12 y))) + (cond + ((>= (dummy-10 *collide-cache* a1-12 (new 'static 'vector :y -69632.0 :w 1.0) 40.96 1 obj s3-2 1) 0.0) + (set! (-> arg0 y) (-> s3-2 intersect y)) + (set! (-> arg1 quad) (-> s3-2 normal quad)) + (return #t) + ) + (else + 0 + ) + ) + ) + #f + ) + +(defstate mother-spider-hit-while-birthing (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-birthing) + ) + (if (= (-> self spin-vel) 0.0) + (go mother-spider-birthing) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 30) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (ja-channel-push! 1 30) + (while #t + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +(defstate mother-spider-die-from-uppercut (mother-spider) + :event + mother-spider-death-event-handler + :enter + (behavior () + (shut-down! (-> self neck)) + (set! (-> self thread-speed) 122880.0) + (set! (-> self targ-dist-from-anchor) (+ -24576.0 (-> self dist-from-anchor))) + (let ((gp-0 (- 6 (-> self damage))) + (s5-0 (-> self damage)) + ) + (set! (-> self damage) 6) + (when (> gp-0 0) + (dotimes (s4-0 gp-0) + (let ((s0-0 (-> *mother-spider-leg-infos* s5-0)) + (s3-0 (new 'stack-no-clear 'vector)) + (s2-0 (new 'stack-no-clear 'vector)) + (s1-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s3-0 (-> self node-list data (-> s0-0 joint-index0))) + (vector<-cspace! s2-0 (-> self node-list data (-> s0-0 joint-index1))) + (vector-! s2-0 s2-0 s3-0) + (vector-normalize! s2-0 1.0) + (set! (-> s1-0 quad) (-> s2-0 quad)) + (set! (-> s1-0 y) (+ 0.3 (-> s1-0 y))) + (vector-normalize! s1-0 1.0) + (let ((s0-1 (get-process *default-dead-pool* mother-spider-leg #x4000))) + (when s0-1 + (let ((t9-6 (method-of-type mother-spider-leg activate))) + (t9-6 (the-as mother-spider-leg s0-1) self 'mother-spider-leg (the-as pointer #x70004000)) + ) + (run-now-in-process s0-1 mother-spider-leg-init-by-other self s3-0 s2-0 s1-0) + (-> s0-1 ppointer) + ) + ) + ) + (+! s5-0 1) + ) + ) + ) + (none) + ) + :trans + (behavior () (TODO-RENAME-29 self #f #f) (none)) + :code + (behavior () + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 0) 1) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 30) + (clear-collide-with-as (-> self root-override)) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 12)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go mother-spider-die-wait-for-children) + (none) + ) + :post + (the-as (function none :behavior mother-spider) ja-post) + ) + +(defstate mother-spider-die (mother-spider) + :event + mother-spider-death-event-handler + :trans + (behavior () (TODO-RENAME-29 self #f #f) (none)) + :code + (behavior () + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 0) 1) + ) + (shut-down! (-> self neck)) + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 30) + (clear-collide-with-as (-> self root-override)) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go mother-spider-die-wait-for-children) + (none) + ) + :post + (the-as (function none :behavior mother-spider) ja-post) + ) + +(defstate mother-spider-die-wait-for-children (mother-spider) + :event + mother-spider-death-event-handler + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (set! (-> self skel postbind-function) #f) + (logior! (-> self draw status) 2) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + (none) + ) + ) + +(defun mother-spider-full-joint-callback ((arg0 mother-spider)) + (/ (-> arg0 dist-from-anchor) (-> arg0 max-dist-from-anchor)) + (let ((a1-0 (the-as matrix #f))) + (dotimes (s5-0 7) + (let* ((v1-1 (the-as mother-spider-thread (+ (the-as uint *mother-spider-threads*) (* s5-0 16)))) + (s4-0 (-> arg0 node-list data (-> v1-1 joint-index) bone transform)) + ) + (vector-! (-> s4-0 vector 3) (-> arg0 root-override trans) (-> arg0 anchor-trans)) + (vector-float*! (-> s4-0 vector 3) (-> s4-0 vector 3) (-> v1-1 trans-u)) + (vector+! (-> s4-0 vector 3) (-> s4-0 vector 3) (-> arg0 anchor-trans)) + (let ((f1-2 (- (-> s4-0 vector 3 x) (-> arg0 anchor-trans x))) + (f0-5 (- (-> s4-0 vector 3 z) (-> arg0 anchor-trans z))) + ) + (set! (-> s4-0 vector 3 x) (+ (-> arg0 anchor-trans x) (* f1-2 (-> v1-1 swing-arc-u)))) + (set! (-> s4-0 vector 3 z) (+ (-> arg0 anchor-trans z) (* f0-5 (-> v1-1 swing-arc-u)))) + ) + (if a1-0 + (dummy-22 arg0 a1-0 (-> s4-0 vector 3)) + ) + (set! a1-0 s4-0) + ) + ) + (let ((a0-11 (-> arg0 node-list data 22 bone transform)) + (a2-7 (new 'stack-no-clear 'vector)) + ) + (vector-! a2-7 (-> arg0 root-override trans) (-> a0-11 vector 3)) + (vector+! a2-7 a2-7 (-> arg0 root-override trans)) + (dummy-22 arg0 a1-0 a2-7) + ) + ) + (dotimes (v1-16 (-> arg0 damage)) + (let ((a0-17 (-> *mother-spider-leg-infos* v1-16))) + (let ((a1-5 (-> arg0 node-list data (-> a0-17 joint-index0) bone transform))) + (set! (-> a1-5 vector 0 quad) (the-as uint128 0)) + (set! (-> a1-5 vector 1 quad) (the-as uint128 0)) + (set! (-> a1-5 vector 2 quad) (the-as uint128 0)) + ) + 0 + (let ((a0-22 (-> arg0 node-list data (-> a0-17 joint-index1) bone transform))) + (set! (-> a0-22 vector 0 quad) (the-as uint128 0)) + (set! (-> a0-22 vector 1 quad) (the-as uint128 0)) + (set! (-> a0-22 vector 2 quad) (the-as uint128 0)) + ) + ) + 0 + ) + 0 + (none) + ) + +(defmethod dummy-22 mother-spider ((obj mother-spider) (arg0 matrix) (arg1 vector)) + (rlet ((vf0 :class vf)) + (init-vf0-vector) + (vector-! (-> arg0 vector 2) arg1 (-> arg0 vector 3)) + (vector-normalize! (-> arg0 vector 2) 1.0) + (.svf (&-> (-> arg0 vector) 0 quad) vf0) + (cond + ((and (= (-> arg0 vector 2 x) 0.0) (= (-> arg0 vector 2 y) 0.0)) + (set! (-> arg0 vector 0 x) (-> arg0 vector 2 z)) + ) + (else + (set! (-> arg0 vector 0 x) (- (-> arg0 vector 2 y))) + (set! (-> arg0 vector 0 y) (-> arg0 vector 2 x)) + ) + ) + (vector-cross! (-> arg0 vector 1) (the-as vector (-> arg0 vector)) (-> arg0 vector 2)) + (vector-normalize! (-> arg0 vector 1) 1.0) + (set! (-> arg0 vector 0 w) 0.0) + (set! (-> arg0 vector 1 w) 0.0) + (let ((f0-8 0.0)) + (set! (-> arg0 vector 2 w) f0-8) + f0-8 + ) + ) + ) + +(defmethod run-logic? mother-spider ((obj mother-spider)) + (or + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (< (vector-vector-xz-distance (-> obj root-override trans) (math-camera-pos)) (-> obj deactivate-xz-dist)) + (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) + ) + ) + ) + +(defmethod relocate mother-spider ((obj mother-spider) (arg0 int)) + (if (nonzero? (-> obj neck)) + (&+! (-> obj neck) arg0) + ) + (the-as mother-spider ((method-of-type process-drawable relocate) obj arg0)) + ) + +(defmethod init-from-entity! mother-spider ((obj mother-spider) (arg0 entity-actor)) + (local-vars (sv-16 res-tag) (sv-64 vector)) + (set! (-> obj baby-count) 0) + (set! (-> obj spit-counter) 0) + (set! (-> obj leg-socket-part-mask) 0) + (set! (-> obj mode) (the-as uint 0)) + (set! (-> obj damage) 0) + (set! (-> obj player-attack-id) (the-as uint 0)) + (set! (-> obj spin-vel) 0.0) + (set! (-> obj thread-speed) 245760.0) + (set! (-> obj thread-vel) 0.0) + (set! (-> obj hit?) #f) + (set! (-> obj last-update-time) (the-as uint 0)) + (set! (-> obj spawned-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> obj spin-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> obj last-spit-time) (the-as uint 0)) + (set! (-> obj started-birthing-time) (the-as uint 0)) + (set! (-> obj check-z-thresh?) #f) + (set! (-> obj activate-z-thresh) 0.0) + (set! (-> obj deactivate-z-thresh) 0.0) + (vector-reset! (-> obj swing-pos)) + (vector-reset! (-> obj swing-base-pos)) + (vector-reset! (-> obj swing-vel)) + (when (name= (-> obj name) "mother-spider-7") + (set! (-> obj check-z-thresh?) #t) + (set! (-> obj activate-z-thresh) -12288.0) + (set! (-> obj deactivate-z-thresh) 24985.6) + ) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 9) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 8192)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 transform-index) 6) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 12697.6) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core offense) 0) + (set! (-> s2-0 transform-index) 6) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4505.6) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core offense) 0) + (set! (-> s2-1 transform-index) 5) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 4505.6) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 0) + (set! (-> s2-2 transform-index) 20) + (set-vector! (-> s2-2 local-sphere) 0.0 -409.6 1228.8 2457.6) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core offense) 0) + (set! (-> s2-3 transform-index) 12) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-3) + ) + (let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core offense) 0) + (set! (-> s2-4 transform-index) 10) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-4) + ) + (let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-5 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core offense) 0) + (set! (-> s2-5 transform-index) 8) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-5) + ) + (let ((s2-6 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-6 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-6 collide-with) (the-as uint 16)) + (set! (-> s2-6 prim-core offense) 0) + (set! (-> s2-6 transform-index) 18) + (set-vector! (-> s2-6 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-6) + ) + (let ((s2-7 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-7 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-7 collide-with) (the-as uint 16)) + (set! (-> s2-7 prim-core offense) 0) + (set! (-> s2-7 transform-index) 16) + (set-vector! (-> s2-7 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-7) + ) + (let ((s2-8 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-8 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-8 collide-with) (the-as uint 16)) + (set! (-> s2-8 prim-core offense) 0) + (set! (-> s2-8 transform-index) 14) + (set-vector! (-> s2-8 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-8) + ) + ) + (set! (-> s4-0 nav-radius) 4096.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *mother-spider-sg* '()) + (set! (-> obj nav) (new 'process 'nav-control (-> obj root-override) 16 40960.0)) + (logior! (-> obj nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (set! (-> obj nav nearest-y-threshold) 409600.0) + (set! (-> obj root-override nav-flags) (logand -2 (-> obj root-override nav-flags))) + (set! (-> obj root-override nav-flags) (logand -3 (-> obj root-override nav-flags))) + (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)) + (set! (-> obj fact) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (set! (-> obj draw shadow-ctrl) (new 'process 'shadow-control 0.0 0.0 4096000.0 (the-as float 60) 245760.0)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 618) obj)) + (logior! (-> obj skel status) 1) + (let ((v0-30 (new 'process 'joint-mod (joint-mod-handler-mode reset) obj 19))) + (set! (-> obj neck) v0-30) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> v0-30 up) (the-as uint 1)) + (set! (-> v0-30 nose) (the-as uint 2)) + (set! (-> v0-30 ear) (the-as uint 0)) + (set! (-> v0-30 max-dist) 102400.0) + (set! (-> v0-30 ignore-angle) 16384.0) + ) + (set! (-> obj thread-min-trans quad) (-> obj root-override trans quad)) + (set! (-> obj anchor-trans quad) (-> obj root-override trans quad)) + (set! (-> obj max-swing-radius) 73728.0) + (set! (-> obj max-baby-count) 4) + (let ((s4-1 #f)) + (set! sv-16 (new 'static 'res-tag)) + (let ((v0-31 (res-lump-data arg0 'mother-spider pointer :tag-ptr (& sv-16)))) + (cond + (v0-31 + (+! (-> obj thread-min-trans y) (-> (the-as (pointer float) v0-31) 0)) + (+! (-> obj anchor-trans y) (-> (the-as (pointer float) v0-31) 1)) + (set! (-> obj max-swing-radius) (-> (the-as (pointer float) v0-31) 2)) + (set! (-> obj max-baby-count) (the int (-> (the-as (pointer float) v0-31) 3))) + (set! s4-1 (!= (-> (the-as (pointer float) v0-31) 4) 0.0)) + (set! (-> obj max-spit-xz-dist) (-> (the-as (pointer float) v0-31) 5)) + (set! (-> obj activate-xz-dist) (-> (the-as (pointer float) v0-31) 6)) + (set! (-> obj deactivate-xz-dist) (-> (the-as (pointer float) v0-31) 7)) + ) + (else + (set! (-> obj thread-min-trans y) (+ 28672.0 (-> obj thread-min-trans y))) + (set! (-> obj anchor-trans y) (+ 204800.0 (-> obj anchor-trans y))) + (set! (-> obj max-spit-xz-dist) 81920.0) + (set! (-> obj activate-xz-dist) 143360.0) + (set! (-> obj deactivate-xz-dist) 163430.4) + ) + ) + ) + (set! (-> obj thread-min-trans w) 1.0) + (set! (-> obj anchor-trans w) 1.0) + (set! (-> obj idle-dist-from-anchor) 16384.0) + (set! (-> obj max-dist-from-anchor) (- (-> obj anchor-trans y) (-> obj thread-min-trans y))) + (set! (-> obj player-sticky-dist-from-anchor) (-> obj max-dist-from-anchor)) + (set! (-> obj targ-dist-from-anchor) (-> obj idle-dist-from-anchor)) + (set! (-> obj root-override trans quad) (-> obj anchor-trans quad)) + (set! (-> obj root-override trans y) (- (-> obj root-override trans y) (-> obj idle-dist-from-anchor))) + (set-vector! (-> obj orient-rot) 0.0 0.0 0.0 1.0) + (quaternion-zxy! (-> obj root-override quat) (-> obj orient-rot)) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 5)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (transform-post) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 10240.0 + ) + (let ((v1-121 #f)) + (if (nonzero? (-> obj entity extra perm user-int8 0)) + (set! v1-121 #t) + ) + (cond + (v1-121 + (go mother-spider-die-wait-for-children) + ) + (else + (when s4-1 + (let ((s5-3 (max 0 (min (+ (-> obj path curve num-cverts) -1) (-> obj max-baby-count)))) + (s4-2 (new 'stack-no-clear 'vector)) + (s3-1 (new 'stack-no-clear 'vector)) + ) + (dotimes (s2-9 s5-3) + (eval-path-curve-div! (-> obj path) s4-2 (the float s2-9) 'interp) + (vector-! s3-1 (target-pos 0) s4-2) + (set! (-> s3-1 y) 0.0) + (let ((s1-2 vector-rotate-around-y!) + (s0-0 s3-1) + ) + (set! sv-64 s3-1) + (let ((a2-21 (rand-vu-float-range -7281.778 7281.778))) + (s1-2 s0-0 sv-64 a2-21) + ) + ) + (vector-normalize! s3-1 1.0) + (spawn-child obj s4-2 s3-1 #f) + ) + ) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go mother-spider-idle) + ) + ) + ) + ) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/bully.gc b/goal_src/levels/sunken/bully.gc index f0f812e66d..1a0c0e1e8d 100644 --- a/goal_src/levels/sunken/bully.gc +++ b/goal_src/levels/sunken/bully.gc @@ -20,7 +20,7 @@ :size-assert #xb0 :flag-assert #x14004000b0 (:states - (bully-broken-cage-explode bully-broken-cage) + bully-broken-cage-explode ) ) @@ -273,23 +273,23 @@ (defstate bully-broken-cage-explode (bully-broken-cage) :code - (behavior ((arg0 bully-broken-cage)) + (behavior () (ja-channel-push! 1 0) - (let ((a0-2 (-> self skel root-channel 0))) - (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) - (set! (-> a0-2 param 0) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) + (set! (-> a0-1 param 0) (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) 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 16)) num-func-seek!) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!) ) (until (ja-done? 0) (suspend) - (let ((a0-3 (-> self skel root-channel 0))) - (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) - (set! (-> a0-3 param 1) 1.0) - (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) ) ) (none) @@ -304,10 +304,8 @@ (set! (-> self root trans quad) (-> self parent-override 0 root-override trans quad)) (quaternion-copy! (-> self root quat) (-> self parent-override 0 root-override quat)) (set! (-> self root scale quad) (-> self parent-override 0 root-override scale quad)) - (let ((a0-13 self)) - (initialize-skeleton a0-13 *bully-broken-cage-sg* '()) - (go bully-broken-cage-explode a0-13) - ) + (initialize-skeleton self *bully-broken-cage-sg* '()) + (go bully-broken-cage-explode) (none) ) diff --git a/test/decompiler/reference/engine/game/fact-h_REF.gc b/test/decompiler/reference/engine/game/fact-h_REF.gc index 5cb3d91adc..60c2d5ff1a 100644 --- a/test/decompiler/reference/engine/game/fact-h_REF.gc +++ b/test/decompiler/reference/engine/game/fact-h_REF.gc @@ -117,7 +117,7 @@ :flag-assert #xc00000028 (:methods (new (symbol type process-drawable pickup-type float) _type_ 0) - (drop-pickup (_type_ symbol process-tree fact-info int) none 9) + (drop-pickup (_type_ symbol process-tree fact-info int) (pointer process) 9) (reset! (_type_ symbol) none 10) (pickup-collectable! (_type_ pickup-type float handle) float 11) ) diff --git a/test/decompiler/reference/engine/nav/navigate-h_REF.gc b/test/decompiler/reference/engine/nav/navigate-h_REF.gc index 48078ff20b..94348d9383 100644 --- a/test/decompiler/reference/engine/nav/navigate-h_REF.gc +++ b/test/decompiler/reference/engine/nav/navigate-h_REF.gc @@ -381,11 +381,11 @@ (set-current-poly! (_type_ nav-poly) none 14) (set-target-pos! (_type_ vector) none 15) (dummy-16 (_type_ vector) nav-poly 16) - (dummy-17 () none 17) + (dummy-17 (_type_ vector vector) none 17) (TODO-RENAME-18 (_type_ vector) nav-poly 18) (dummy-19 (_type_ vector collide-shape-moving vector float) none 19) (dummy-20 () none 20) - (dummy-21 () none 21) + (dummy-21 (_type_ vector) none 21) (dummy-22 () none 22) (dummy-23 (_type_ vector check-vector-collision-with-nav-spheres-info) float 23) (dummy-24 (_type_ float clip-travel-vector-to-mesh-return-info) none 24) @@ -399,7 +399,7 @@ (dummy-32 () none 32) (dummy-33 () none 33) (dummy-34 () none 34) - (dummy-35 () none 35) + (dummy-35 (_type_ vector vector vector vector float) none 35) ) ) diff --git a/test/decompiler/reference/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/levels/common/nav-enemy_REF.gc index ff924a302a..66b36a73e6 100644 --- a/test/decompiler/reference/levels/common/nav-enemy_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy_REF.gc @@ -250,6 +250,7 @@ ) ;; definition for function process-drawable-death-event-handler +;; INFO: Return type mismatch object vs none. (defbehavior process-drawable-death-event-handler process-drawable ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 (('death-start) diff --git a/test/decompiler/reference/levels/common/sharkey_REF.gc b/test/decompiler/reference/levels/common/sharkey_REF.gc index 756413dd6b..1b8e7c50b3 100644 --- a/test/decompiler/reference/levels/common/sharkey_REF.gc +++ b/test/decompiler/reference/levels/common/sharkey_REF.gc @@ -257,7 +257,7 @@ nav-enemy-default-event-handler (vector-normalize! (-> self dir) 1.0) (vector+*! gp-0 s4-0 (-> self dir) (- (-> self spawn-distance))) ) - ((method-of-object (-> self nav) dummy-17)) + (dummy-17 (-> self nav) gp-0 gp-0) (set! (-> gp-0 y) (-> self y-min)) (set! (-> self spawn-point quad) (-> gp-0 quad)) ) diff --git a/test/decompiler/reference/levels/maincave/mother-spider-egg_REF.gc b/test/decompiler/reference/levels/maincave/mother-spider-egg_REF.gc index b19b1965dc..068b8bc68a 100644 --- a/test/decompiler/reference/levels/maincave/mother-spider-egg_REF.gc +++ b/test/decompiler/reference/levels/maincave/mother-spider-egg_REF.gc @@ -22,6 +22,14 @@ (dummy-20 (_type_) none 20) (draw-egg-shadow (_type_ vector symbol) symbol 21) ) + (:states + mother-spider-egg-die + mother-spider-egg-die-exit + mother-spider-egg-die-while-falling + mother-spider-egg-falling + mother-spider-egg-hatch + mother-spider-egg-on-ground + ) ) ;; definition for method 3 of type mother-spider-egg diff --git a/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc b/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc index 0e68ecfb10..c2187b3629 100644 --- a/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc +++ b/test/decompiler/reference/levels/maincave/mother-spider-h_REF.gc @@ -12,6 +12,9 @@ :method-count-assert 20 :size-assert #xf0 :flag-assert #x14008000f0 + (:states + mother-spider-leg-flying + ) ) ;; definition for method 3 of type mother-spider-leg @@ -168,6 +171,21 @@ (spawn-child (_type_ vector vector symbol) int 30) (is-player-stuck? (_type_) symbol 31) ) + (:states + mother-spider-birth-baby + mother-spider-birthing + mother-spider-die + mother-spider-die-from-uppercut + mother-spider-die-wait-for-children + mother-spider-hit-while-birthing + mother-spider-hit-while-tracking + mother-spider-idle + mother-spider-spit + mother-spider-stop-traveling + mother-spider-tracking + (mother-spider-traveling uint) + wait-for-children + ) ) ;; definition for method 3 of type mother-spider diff --git a/test/decompiler/reference/levels/maincave/mother-spider_REF.gc b/test/decompiler/reference/levels/maincave/mother-spider_REF.gc new file mode 100644 index 0000000000..67372f09ad --- /dev/null +++ b/test/decompiler/reference/levels/maincave/mother-spider_REF.gc @@ -0,0 +1,2155 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defskelgroup *mother-spider-sg* mother-spider + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 8) + :longest-edge (meters 0) + :shadow 4 + ) + +;; failed to figure out what this is: +(defskelgroup *mother-spider-leg-sg* mother-spider + 13 + -1 + ((14 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +;; definition for symbol *mother-spider-threads*, type (inline-array mother-spider-thread) +(define + *mother-spider-threads* + (new 'static 'inline-array mother-spider-thread 9 + (new 'static 'mother-spider-thread :joint-index 27) + (new 'static 'mother-spider-thread :trans-u (the-as float #x1a) :swing-arc-u 0.35) + (new 'static 'mother-spider-thread :joint-index #x3dcccccd :swing-arc-u (the-as float #x19)) + (new 'static 'mother-spider-thread :joint-index #x3f19999a :trans-u 0.35) + (new 'static 'mother-spider-thread :joint-index 24 :trans-u 0.8 :swing-arc-u 0.65) + (new 'static 'mother-spider-thread :trans-u (the-as float #x17) :swing-arc-u 0.9) + (new 'static 'mother-spider-thread :joint-index #x3f4ccccd :swing-arc-u (the-as float #x16)) + (new 'static 'mother-spider-thread :joint-index #x3f733333 :trans-u 0.95) + (new 'static 'mother-spider-thread :joint-index 3 :trans-u 1.0 :swing-arc-u 1.0) + ) + ) + +;; definition for symbol *mother-spider-leg-infos*, type (inline-array mother-spider-leg-info) +(define + *mother-spider-leg-infos* + (new 'static 'inline-array mother-spider-leg-info 8 + (new 'static 'mother-spider-leg-info :joint-index0 13 :joint-index1 14 :cprim-index 8) + (new 'static 'mother-spider-leg-info :joint-index0 7 :joint-index1 8 :cprim-index 5) + (new 'static 'mother-spider-leg-info :joint-index0 15 :joint-index1 16 :cprim-index 7) + (new 'static 'mother-spider-leg-info :joint-index0 9 :joint-index1 10 :cprim-index 4) + (new 'static 'mother-spider-leg-info :joint-index0 17 :joint-index1 18 :cprim-index 6) + (new 'static 'mother-spider-leg-info :joint-index0 11 :joint-index1 12 :cprim-index 3) + (new 'static 'mother-spider-leg-info :joint-index0 27) + (new 'static 'mother-spider-leg-info :joint-index0 26 :joint-index1 #x3eb33333 :cprim-index #x3dcccccd) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 614) (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-mother-spider-leg" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2477)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2477) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-rnd-flt spt-num 0.0 1.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.35) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 96.0 128.0 1.0) + (sp-rnd-flt spt-a 48.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.006666667) 1.0) + (sp-flt spt-scalevel-y (meters 0.002)) + (sp-flt spt-fade-a -0.4) + (sp-rnd-flt spt-accel-y -1.3653333 -1.3653333 1.0) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(defstate mother-spider-leg-flying (mother-spider-leg) + :trans + (behavior () + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (+! (-> self transv y) (* (-> self gravity) (-> *display* seconds-per-frame))) + (let ((gp-0 (new 'stack-no-clear 'collide-tri-result)) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (let ((v1-1 a2-0)) + (.lvf vf1 (&-> (-> self transv) quad)) + (let ((f0-2 (-> *display* seconds-per-frame))) + (.mov at-0 f0-2) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-1 quad) vf1) + ) + (when (>= (dummy-10 *collide-cache* (-> self root trans) a2-0 3276.8 1 self gp-0 1) 0.0) + (let ((f28-0 (vector-xz-length (-> self transv)))) + (vector-reflect! (-> self transv) (-> self transv) (-> gp-0 normal)) + (let ((f30-0 (-> self transv y))) + (set! (-> self transv y) 0.0) + (vector-normalize! (-> self transv) (* f28-0 (rand-vu-float-range 0.3 0.8))) + (set! (-> self transv y) (* 0.7 f30-0)) + ) + ) + (set-vector! + (-> self facing-rotv) + (rand-vu-float-range 5461.3335 40049.777) + 0.0 + (rand-vu-float-range 16384.0 54613.332) + 1.0 + ) + ) + ) + (vector-v+! (-> self root trans) (-> self root trans) (-> self transv)) + (+! (-> self facing-rot x) (* (-> self facing-rotv x) (-> *display* seconds-per-frame))) + (set! (-> self facing-rot z) + (deg-seek (-> self facing-rot z) 16384.0 (* (-> self facing-rotv z) (-> *display* seconds-per-frame))) + ) + (quaternion-zxy! (-> self root quat) (-> self facing-rot)) + (set! (-> self root scale x) (seek (-> self root scale x) 0.0 (* 0.5 (-> *display* seconds-per-frame)))) + (set! (-> self root scale y) (-> self root scale x)) + (set! (-> self root scale z) (-> self root scale x)) + (none) + ) + ) + :code + (behavior () + (ja-channel-push! 1 0) + (let ((f30-0 (rand-vu-float-range 0.2 0.7))) + (dotimes (gp-0 3) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 15))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 15)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) f30-0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 15)) num-func-seek!) + ) + (until (ja-done? 0) + (spawn (-> self part) (-> self root trans)) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) f30-0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) f30-0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) f30-0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider-leg) ja-post) + ) + +;; failed to figure out what this is: +(defstate wait-for-children (mother-spider) + :code + (behavior () + (logior! (-> self draw status) 2) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) ja-post) + ) + +;; definition for function mother-spider-leg-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior mother-spider-leg-init-by-other mother-spider-leg ((arg0 mother-spider) (arg1 vector) (arg2 vector) (arg3 vector)) + (set! (-> self entity) (-> arg0 entity)) + (set! (-> self mask) (logior (process-mask enemy) (-> self mask))) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 quad)) + (vector-identity! (-> self root scale)) + (set-heading-vec-clear-roll-pitch! (-> self root) arg2) + (vector-float*! (-> self transv) arg3 (rand-vu-float-range 10240.0 30720.0)) + (rot-zxy-from-vector! (-> self facing-rot) arg2) + (set-vector! + (-> self facing-rotv) + (rand-vu-float-range 5461.3335 16384.0) + 0.0 + (rand-vu-float-range 16384.0 36408.89) + 1.0 + ) + (set! (-> self gravity) (rand-vu-float-range -266240.0 -163840.0)) + (initialize-skeleton self *mother-spider-leg-sg* '()) + (set! (-> self part) (create-launch-control (-> *part-group-id-table* 614) self)) + (create-connection! + *cavecrystal-light-control* + self + (-> self entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 4096.0 + ) + (go mother-spider-leg-flying) + (none) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 618) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-mother-spider-leg-socket" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2498 :period 90 :length 30)) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2498) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-rnd-flt spt-num 1.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.35) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-flt spt-g 0.0) + (sp-rnd-flt spt-b 96.0 128.0 1.0) + (sp-rnd-flt spt-a 48.0 48.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.01) (meters 0.0033333334) 1.0) + (sp-flt spt-scalevel-y (meters 0.002)) + (sp-flt spt-fade-a -0.4) + (sp-flt spt-accel-y -2.7306666) + (sp-int spt-timer 210) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition for function mother-spider-default-event-handler +(defbehavior mother-spider-default-event-handler mother-spider ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (cond + ((= (-> arg0 type) target) + (let ((v1-2 (-> arg3 param 2))) + (when (!= v1-2 (-> self player-attack-id)) + (set! (-> self player-attack-id) v1-2) + (case (-> arg3 param 1) + (('uppercut) + (go mother-spider-die-from-uppercut) + ) + (else + (let ((gp-0 (new 'stack-no-clear 'vector))) + (let ((v1-5 (target-pos 0))) + (vector-! gp-0 (-> self root-override trans) v1-5) + ) + (set! (-> gp-0 y) 0.0) + (vector-normalize! gp-0 1.0) + (set! (-> self thread-vel) (+ -40960.0 (-> self thread-vel))) + (if (TODO-RENAME-21 self gp-0 102400.0 #t) + (go mother-spider-die) + ) + ) + ) + ) + ) + ) + ) + (else + (let ((gp-1 (new 'stack-no-clear 'vector))) + (let ((v1-10 (-> (the-as process-drawable arg0) root trans))) + (vector-! gp-1 (-> self root-override trans) v1-10) + ) + (set! (-> gp-1 y) 0.0) + (vector-normalize! gp-1 1.0) + (set! (-> self thread-vel) (+ -40960.0 (-> self thread-vel))) + (if (TODO-RENAME-21 self gp-1 102400.0 #t) + (go mother-spider-die) + ) + ) + ) + ) + ) + (('touch) + (when (= (-> arg0 type) target) + (let ((a1-15 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-15 from) self) + (set! (-> a1-15 num-params) 2) + (set! (-> a1-15 message) 'attack) + (set! (-> a1-15 param 0) (-> arg3 param 0)) + (let ((v1-18 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-18 shove-up) 2048.0) + (set! (-> v1-18 shove-back) 8192.0) + (set! (-> a1-15 param 1) (the-as uint v1-18)) + ) + (when (send-event-function arg0 a1-15) + (let ((gp-2 (new 'stack-no-clear 'vector))) + (let ((v1-20 (target-pos 0))) + (vector-! gp-2 (-> self root-override trans) v1-20) + ) + (set! (-> gp-2 y) 0.0) + (vector-normalize! gp-2 1.0) + (set! (-> self thread-vel) (+ -8192.0 (-> self thread-vel))) + (TODO-RENAME-21 self gp-2 40960.0 #f) + ) + ) + ) + ) + ) + (('trigger) + (when (= (-> arg0 type) mother-spider-egg) + (let ((gp-3 (new 'stack-no-clear 'vector)) + (s5-0 (-> (the-as process-drawable arg0) root trans)) + ) + (vector-! gp-3 (target-pos 0) s5-0) + (set! (-> gp-3 y) 0.0) + (vector-normalize! gp-3 1.0) + (spawn-child self s5-0 gp-3 #t) + ) + ) + ) + (('untrigger) + (when (or (= (-> arg0 type) mother-spider-egg) (= (-> arg0 type) baby-spider)) + (let ((v0-0 (the-as object (+ (-> self baby-count) -1)))) + (set! (-> self baby-count) (the-as int v0-0)) + v0-0 + ) + ) + ) + ) + ) + +;; definition for function mother-spider-death-event-handler +(defbehavior mother-spider-death-event-handler mother-spider ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (when (= (-> arg0 type) mother-spider-egg) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (-> (the-as process-drawable arg0) root trans)) + ) + (vector-! gp-0 (target-pos 0) s5-0) + (set! (-> gp-0 y) 0.0) + (vector-normalize! gp-0 1.0) + (spawn-child self s5-0 gp-0 #t) + ) + ) + ) + (('death-start) + (drop-pickup (-> self fact) #t *entity-pool* (-> self fact) 0) + ) + (('death-end) + (let ((v0-0 (the-as object (logior (-> self draw status) 2)))) + (set! (-> self draw status) (the-as uint v0-0)) + v0-0 + ) + ) + ) + ) + +;; definition for method 30 of type mother-spider +(defmethod spawn-child mother-spider ((obj mother-spider) (arg0 vector) (arg1 vector) (arg2 symbol)) + (let ((s3-0 (new 'stack-no-clear 'baby-spider-spawn-params))) + (init! s3-0 arg2 #f #t #f 7 1 'untrigger) + (set-delay! s3-0 2700) + (let ((s2-0 (get-process *default-dead-pool* baby-spider #x4000))) + (when s2-0 + (let ((t9-3 (method-of-type baby-spider activate))) + (t9-3 (the-as baby-spider s2-0) obj 'baby-spider (the-as pointer #x70004000)) + ) + (run-now-in-process s2-0 baby-spider-init-by-other obj arg0 arg1 s3-0) + (-> s2-0 ppointer) + ) + ) + ) + (let ((v0-5 (+ (-> obj baby-count) 1))) + (set! (-> obj baby-count) v0-5) + v0-5 + ) + ) + +;; definition for method 31 of type mother-spider +(defmethod is-player-stuck? mother-spider ((obj mother-spider)) + (when (and *target* (not (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + ) + (let* ((v1-10 (target-pos 0)) + (f0-1 (- (-> obj anchor-trans y) (-> v1-10 y))) + (f1-2 (- (-> obj player-sticky-dist-from-anchor) f0-1)) + ) + (when (or (< 8192.0 f1-2) (< f1-2 -8192.0)) + (set! (-> obj player-sticky-dist-from-anchor) f0-1) + (return #t) + ) + ) + ) + #f + ) + +;; definition for method 27 of type mother-spider +;; INFO: Return type mismatch symbol vs none. +(defmethod STUB-27 mother-spider ((obj mother-spider)) + (none) + ) + +;; definition for method 28 of type mother-spider +;; INFO: Return type mismatch int vs none. +(defmethod STUB-28 mother-spider ((obj mother-spider)) + 0 + (none) + ) + +;; definition for method 24 of type mother-spider +;; Used lq/sq +(defmethod TODO-RENAME-24 mother-spider ((obj mother-spider)) + (cond + ((and (-> obj draw shadow) (zero? (-> obj draw cur-lod)) (logtest? (-> obj draw status) 8)) + (let ((s5-0 (new 'stack-no-clear 'collide-tri-result)) + (a1-0 (new 'stack-no-clear 'vector)) + (a2-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> a1-0 quad) (-> obj root-override trans quad)) + (set-vector! a2-0 0.0 -81920.0 0.0 1.0) + (set! (-> a1-0 y) (+ -8192.0 (-> a1-0 y))) + (cond + ((>= (dummy-10 *collide-cache* a1-0 a2-0 8192.0 1 obj s5-0 1) 0.0) + (let ((v1-11 (-> obj draw shadow-ctrl))) + (set! (-> v1-11 settings flags) (logand -33 (-> v1-11 settings flags))) + ) + 0 + (let ((v1-14 (-> obj draw shadow-ctrl))) + (set! (-> v1-14 settings bot-plane w) (- (+ -6144.0 (-> s5-0 intersect y)))) + ) + 0 + (let ((v1-17 (-> obj draw shadow-ctrl))) + (set! (-> v1-17 settings top-plane w) (- (+ 6144.0 (-> s5-0 intersect y)))) + ) + 0 + (let* ((f3-0 (vector-vector-distance (-> s5-0 intersect) (-> obj root-override trans))) + (f0-14 (* 0.000030517578 (fmin 32768.0 (fmax 0.0 (+ -57344.0 f3-0))))) + (f0-15 (lerp 409600.0 40960.0 f0-14)) + ) + (set! (-> obj draw shadow-ctrl settings shadow-dir w) f0-15) + f0-15 + ) + ) + (else + (let ((v1-23 (-> obj draw shadow-ctrl))) + (logior! (-> v1-23 settings flags) 32) + ) + 0 + ) + ) + ) + ) + (else + (let ((v1-25 (-> obj draw shadow-ctrl))) + (logior! (-> v1-25 settings flags) 32) + ) + 0 + ) + ) + ) + +;; definition for method 26 of type mother-spider +(defmethod grab-player? mother-spider ((obj mother-spider)) + (when *target* + (let ((s5-0 (target-pos 0))) + (when (and + (>= 40960.0 (- (-> obj thread-min-trans y) (-> s5-0 y))) + (>= (-> obj activate-xz-dist) (vector-vector-xz-distance (-> obj thread-min-trans) s5-0)) + ) + (cond + ((-> obj check-z-thresh?) + (let ((f0-3 (- (-> s5-0 z) (-> obj root-override trans z)))) + (if (>= (-> obj activate-z-thresh) f0-3) + (return #t) + ) + ) + ) + (else + (return #t) + ) + ) + ) + ) + ) + #f + ) + +;; definition for method 25 of type mother-spider +(defmethod letgo-player? mother-spider ((obj mother-spider)) + (if (not *target*) + (return #t) + ) + (let ((a1-0 (target-pos 0))) + (when (-> obj check-z-thresh?) + (if (>= (- (-> a1-0 z) (-> obj root-override trans z)) (-> obj deactivate-z-thresh)) + (return #t) + ) + ) + (if (or + (>= (- (-> obj thread-min-trans y) (-> a1-0 y)) 49152.0) + (>= (vector-vector-xz-distance (-> obj thread-min-trans) a1-0) (-> obj deactivate-xz-dist)) + ) + (return #t) + ) + ) + #f + ) + +;; definition for method 21 of type mother-spider +;; Used lq/sq +(defmethod TODO-RENAME-21 mother-spider ((obj mother-spider) (arg0 vector) (arg1 float) (arg2 symbol)) + (local-vars (sv-112 process) (sv-128 vector) (sv-144 vector)) + (let ((f30-0 (vector-length (-> obj swing-pos)))) + (when (< 0.0 f30-0) + (let ((s1-0 (new 'stack-no-clear 'vector)) + (s2-0 (new 'stack-no-clear 'vector)) + ) + (vector-normalize-copy! s1-0 (-> obj swing-pos) 1.0) + (vector-rotate-around-y! s2-0 s1-0 16384.0) + (if (< (vector-dot arg0 s2-0) 0.0) + (vector-negate! s2-0 s2-0) + ) + (let ((f0-4 (fmin 1.0 (/ f30-0 (-> obj max-swing-radius))))) + (vector-lerp! arg0 arg0 s2-0 f0-4) + ) + ) + (vector-normalize! arg0 1.0) + ) + ) + (let ((s2-1 (new 'stack-no-clear 'vector))) + (vector-float*! s2-1 arg0 arg1) + (vector-flatten! (-> obj swing-vel) (-> obj swing-vel) arg0) + (vector+! (-> obj swing-vel) (-> obj swing-vel) s2-1) + ) + (set! (-> obj swing-vel y) 0.0) + (when arg2 + (set! (-> obj hit?) #t) + (set! (-> obj spin-vel) 131072.0) + (set! (-> obj spin-time) (the-as uint (-> *display* base-frame-counter))) + (let ((s4-1 (-> obj damage)) + (s3-1 (-> obj root-override root-prim)) + ) + (dotimes (s2-2 2) + (when (< (-> obj damage) 6) + (+! (-> obj damage) 1) + (logior! (-> obj leg-socket-part-mask) (ash 1 s4-1)) + (set! (-> obj leg-socket-part-time s4-1) (the-as uint (-> *display* base-frame-counter))) + (let ((s1-1 (-> *mother-spider-leg-infos* s4-1))) + (let ((s0-0 (new 'stack-no-clear 'vector))) + (set! sv-128 (new 'stack-no-clear 'vector)) + (set! sv-144 (new 'stack-no-clear 'vector)) + (vector<-cspace! s0-0 (-> obj node-list data (-> s1-1 joint-index0))) + (vector<-cspace! sv-128 (-> obj node-list data (-> s1-1 joint-index1))) + (vector-! sv-128 sv-128 s0-0) + (vector-normalize! sv-128 1.0) + (vector-lerp! sv-144 sv-128 arg0 0.6) + (vector-normalize! sv-144 1.0) + (+! (-> sv-144 y) (rand-vu-float-range 0.0 0.3)) + (vector-normalize! sv-144 1.0) + (set! sv-112 (get-process *default-dead-pool* mother-spider-leg #x4000)) + (when sv-112 + (let ((t9-15 (method-of-type mother-spider-leg activate))) + (t9-15 (the-as mother-spider-leg sv-112) obj 'mother-spider-leg (the-as pointer #x70004000)) + ) + (run-now-in-process sv-112 mother-spider-leg-init-by-other obj s0-0 sv-128 sv-144) + (-> sv-112 ppointer) + ) + ) + (let ((v1-43 (-> (the-as collide-shape-prim-group s3-1) prims (-> s1-1 cprim-index)))) + (set! (-> v1-43 collide-with) (the-as uint 0)) + (set! (-> v1-43 prim-core collide-as) (the-as uint 0)) + ) + ) + 0 + (+! s4-1 1) + ) + ) + ) + ) + (>= (-> obj damage) 6) + ) + +;; definition for method 29 of type mother-spider +(defmethod TODO-RENAME-29 mother-spider ((obj mother-spider) (arg0 symbol) (arg1 symbol)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-update-time)) + (set! (-> obj last-update-time) (the-as uint v1-1)) + (TODO-RENAME-23 obj) + (let ((f0-1 (fmax 0.0 (- (-> obj dist-from-anchor) (-> obj idle-dist-from-anchor))))) + (cond + ((>= f0-1 20480.0) + (vector-identity! (-> obj root-override scale)) + ) + (else + (let ((f0-2 (* 0.000048828126 f0-1))) + (set-vector! (-> obj root-override scale) f0-2 f0-2 f0-2 1.0) + ) + ) + ) + ) + (if arg0 + (TODO-RENAME-24 obj) + ) + (let ((s4-1 (-> obj leg-socket-part-mask))) + (when (nonzero? s4-1) + (dotimes (s3-0 6) + (when (logtest? s4-1 1) + (cond + ((>= (+ (-> *display* base-frame-counter) -300) (the-as int (-> obj leg-socket-part-time s3-0))) + (set! (-> obj leg-socket-part-mask) (logxor (-> obj leg-socket-part-mask) (ash 1 s3-0))) + ) + (else + (let ((v1-20 (-> *mother-spider-leg-infos* s3-0)) + (s2-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s2-0 (-> obj node-list data (-> v1-20 joint-index0))) + (spawn (-> obj part) s2-0) + ) + ) + ) + ) + (set! s4-1 (/ s4-1 2)) + ) + ) + ) + (when arg1 + (when *target* + (case (-> obj mode) + ((1 2) + (if *target* + (look-at-enemy! (-> *target* neck) (the-as vector (-> obj root-override root-prim prim-core)) 'attacking obj) + ) + ) + ) + ) + (set-target! (-> obj neck) (target-pos 5)) + ) + ) + ) + (none) + ) + +;; definition for method 23 of type mother-spider +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod TODO-RENAME-23 mother-spider ((obj mother-spider)) + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let* ((f2-0 (-> obj dist-from-anchor)) + (f1-0 (- (-> obj targ-dist-from-anchor) f2-0)) + (f0-1 (-> obj thread-vel)) + ) + (when (or (!= f0-1 0.0) (!= f1-0 0.0)) + (let ((f0-2 (+ f0-1 (* 2.0 f1-0)))) + (let ((f3-4 (-> obj thread-speed))) + (if (< f3-4 (fabs f0-2)) + (set! f0-2 (if (>= f0-2 0.0) + f3-4 + (- f3-4) + ) + ) + ) + ) + (let ((f2-1 (+ f2-0 (* f0-2 (-> *display* seconds-per-frame))))) + (let ((f3-8 (- (-> obj targ-dist-from-anchor) f2-1))) + (cond + ((>= f1-0 0.0) + (if (>= 0.0 f3-8) + (set! f0-2 (- f0-2 (* 0.55 f0-2))) + ) + ) + (else + (if (>= f3-8 0.0) + (set! f0-2 (- f0-2 (* 0.55 f0-2))) + ) + ) + ) + ) + (set! (-> obj dist-from-anchor) (fmax 0.0 f2-1)) + ) + (set! (-> obj thread-vel) f0-2) + ) + ) + ) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-negate! s5-0 (-> obj swing-base-pos)) + (set! (-> s5-0 y) 0.0) + (let ((f0-4 (vector-length s5-0))) + (when (< 0.0 f0-4) + (let ((f1-11 (* 61440.0 (-> *display* seconds-per-frame)))) + (if (< f1-11 f0-4) + (vector-normalize! s5-0 f1-11) + ) + ) + (vector+! (-> obj swing-vel) (-> obj swing-vel) s5-0) + ) + ) + ) + (let ((f0-5 (vector-length (-> obj swing-vel)))) + (when (< 0.0 f0-5) + (let ((f0-6 (* 0.995 f0-5))) + (cond + ((< 40.96 f0-6) + (vector-normalize! (-> obj swing-vel) f0-6) + (let ((s5-1 (new 'stack-no-clear 'event-message-block)) + (s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s4-0 (-> obj node-list data 6)) + (let ((v1-20 s3-0)) + (.lvf vf1 (&-> (-> obj swing-vel) quad)) + (let ((f0-7 (-> *display* seconds-per-frame))) + (.mov at-0 f0-7) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-20 quad) vf1) + ) + (when (>= (dummy-10 *collide-cache* s4-0 s3-0 4915.2 1 obj (the-as collide-tri-result s5-1) 1) 0.0) + (vector-reflect! (-> obj swing-vel) (-> obj swing-vel) (the-as vector (&-> s5-1 param 6))) + (set! (-> obj swing-vel y) 0.0) + (vector-normalize! (-> obj swing-vel) (* 0.5 (vector-length (-> obj swing-vel)))) + (when (and + (!= (-> obj spin-vel) 0.0) + (>= (- (-> *display* base-frame-counter) (the-as int (-> obj spin-time))) 150) + ) + (set! (-> obj spin-vel) (* 0.75 (- (-> obj spin-vel)))) + (set! (-> obj spin-time) (the-as uint (-> *display* base-frame-counter))) + ) + ) + ) + (vector-v+! (-> obj swing-base-pos) (-> obj swing-base-pos) (-> obj swing-vel)) + 0 + ) + (else + (vector-reset! (-> obj swing-vel)) + ) + ) + ) + ) + ) + (set! (-> obj swing-pos quad) (-> obj swing-base-pos quad)) + (let ((f30-1 (the float (- (-> *display* base-frame-counter) (the-as int (-> obj spawned-time)))))) + (+! (-> obj swing-pos x) (* 1024.0 (cos (* 54.613335 f30-1)))) + (+! (-> obj swing-pos z) (* 1024.0 (cos (* 81.817726 f30-1)))) + ) + (let ((f0-26 (vector-length (-> obj swing-pos)))) + (cond + ((!= f0-26 0.0) + (let* ((f30-2 (-> obj dist-from-anchor)) + (f28-2 (* 10430.379 (/ f0-26 f30-2))) + ) + (set-vector! (-> obj root-override trans) 0.0 (* (cos f28-2) (- f30-2)) (* (sin f28-2) f30-2) 1.0) + ) + (let ((f0-36 (atan (-> obj swing-pos x) (-> obj swing-pos z)))) + (vector-rotate-around-y! (-> obj root-override trans) (-> obj root-override trans) f0-36) + ) + (vector+! (-> obj root-override trans) (-> obj root-override trans) (-> obj anchor-trans)) + ) + (else + (set! (-> obj root-override trans quad) (-> obj anchor-trans quad)) + (set! (-> obj root-override trans y) (- (-> obj root-override trans y) (-> obj dist-from-anchor))) + ) + ) + ) + (let ((v1-51 (-> obj draw bounds))) + (vector+! v1-51 (-> obj root-override trans) (-> obj anchor-trans)) + (vector-float*! v1-51 v1-51 0.5) + (vector-! v1-51 v1-51 (-> obj root-override trans)) + (set! (-> v1-51 w) (+ 28672.0 (* 0.5 (-> obj dist-from-anchor)))) + ) + (cond + ((!= (-> obj spin-vel) 0.0) + (let ((f0-44 (+ (-> obj orient-rot y) (* (-> obj spin-vel) (-> *display* seconds-per-frame))))) + (set! (-> obj orient-rot y) (- f0-44 (* (the float (the int (/ f0-44 65536.0))) 65536.0))) + ) + (set! (-> obj spin-vel) (seek (-> obj spin-vel) 0.0 (* 91022.22 (-> *display* seconds-per-frame)))) + (when (< (fabs (-> obj spin-vel)) 69176.89) + (if (>= (-> obj spin-vel) 0.0) + (set! (-> obj spin-vel) 69176.89) + (set! (-> obj spin-vel) -69176.89) + ) + (cond + (*target* + (let* ((v1-59 (target-pos 0)) + (f0-59 (atan (- (-> v1-59 x) (-> obj root-override trans x)) (- (-> v1-59 z) (-> obj root-override trans z)))) + ) + (if (>= 3640.889 (fabs (deg- f0-59 (-> obj orient-rot y)))) + (set! (-> obj spin-vel) 0.0) + ) + ) + ) + (else + (set! (-> obj spin-vel) 0.0) + ) + ) + ) + ) + (else + (when *target* + (let* ((v1-66 (target-pos 0)) + (f0-69 (atan (- (-> v1-66 x) (-> obj root-override trans x)) (- (-> v1-66 z) (-> obj root-override trans z)))) + ) + (set! (-> obj orient-rot y) + (deg-seek-smooth (-> obj orient-rot y) f0-69 (* 32768.0 (-> *display* seconds-per-frame)) 0.2) + ) + ) + ) + ) + ) + (quaternion-zxy! (-> obj root-override quat) (-> obj orient-rot)) + 0 + (none) + ) + ) + +;; failed to figure out what this is: +(defstate mother-spider-idle (mother-spider) + :enter + (behavior () + (let ((v1-1 (-> self draw shadow-ctrl))) + (logior! (-> v1-1 settings flags) 32) + ) + 0 + (set! (-> self mode) (the-as uint 0)) + (set! (-> self skel postbind-function) (the-as (function pointer int process-drawable none) 0)) + (clear-collide-with-as (-> self root-override)) + (shut-down! (-> self neck)) + (logior! (-> self mask) (process-mask actor-pause)) + (logior! (-> self draw status) 2) + (none) + ) + :exit + (behavior () + (restore-collide-with-as (-> self root-override)) + (set! (-> self skel postbind-function) + (the-as (function pointer int process-drawable none) mother-spider-full-joint-callback) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + (behavior () + (if (grab-player? self) + (go mother-spider-traveling (the-as uint 1)) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate mother-spider-traveling (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior ((arg0 uint)) + (is-player-stuck? self) + (let ((v1-2 arg0)) + (cond + ((zero? v1-2) + (set! (-> self targ-dist-from-anchor) (-> self idle-dist-from-anchor)) + (set! (-> self thread-speed) 81920.0) + ) + ((= v1-2 1) + (set! (-> self targ-dist-from-anchor) + (fmax + (fmin (+ -28672.0 (-> self player-sticky-dist-from-anchor)) (-> self max-dist-from-anchor)) + (-> self idle-dist-from-anchor) + ) + ) + (if (zero? (-> self mode)) + (set! (-> self thread-speed) 327680.0) + (set! (-> self thread-speed) 81920.0) + ) + (set! (-> self spit-counter) 3) + ) + ((= v1-2 2) + (set! (-> self targ-dist-from-anchor) + (fmax + (fmin (+ -43008.0 (-> self player-sticky-dist-from-anchor)) (-> self max-dist-from-anchor)) + (-> self idle-dist-from-anchor) + ) + ) + (set! (-> self thread-speed) 28672.0) + ) + ) + ) + (set! (-> self mode) arg0) + (set! (-> self hit?) #f) + (set! (-> self going-up?) (< (-> self targ-dist-from-anchor) (-> self dist-from-anchor))) + (none) + ) + :trans + (behavior () + (let ((gp-0 (is-player-stuck? self)) + (v1-1 (-> self mode)) + ) + (cond + ((zero? v1-1) + (if (grab-player? self) + (go mother-spider-traveling (the-as uint 1)) + ) + ) + ((= v1-1 1) + (if (letgo-player? self) + (go mother-spider-traveling (the-as uint 0)) + ) + (when gp-0 + (set! (-> self targ-dist-from-anchor) + (fmax + (fmin (+ -28672.0 (-> self player-sticky-dist-from-anchor)) (-> self max-dist-from-anchor)) + (-> self idle-dist-from-anchor) + ) + ) + (set! (-> self going-up?) (< (-> self targ-dist-from-anchor) (-> self dist-from-anchor))) + ) + ) + ((= v1-1 2) + (if (letgo-player? self) + (go mother-spider-traveling (the-as uint 0)) + ) + (when gp-0 + (set! (-> self targ-dist-from-anchor) + (fmax + (fmin (+ -43008.0 (-> self player-sticky-dist-from-anchor)) (-> self max-dist-from-anchor)) + (-> self idle-dist-from-anchor) + ) + ) + (set! (-> self going-up?) (< (-> self targ-dist-from-anchor) (-> self dist-from-anchor))) + ) + ) + ) + ) + (cond + ((-> self going-up?) + (if (>= (-> self targ-dist-from-anchor) (-> self dist-from-anchor)) + (go mother-spider-stop-traveling) + ) + ) + (else + (if (>= (-> self dist-from-anchor) (-> self targ-dist-from-anchor)) + (go mother-spider-stop-traveling) + ) + ) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior ((arg0 uint)) + (local-vars (v1-12 symbol) (v1-28 symbol)) + (ja-channel-push! 1 30) + (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 7)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (until v1-12 + (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!) + ) + (set! v1-12 (or (ja-done? 0) (-> self hit?))) + ) + (when (-> self hit?) + (until (not (-> self hit?)) + (set! (-> self hit?) #f) + (ja-channel-push! 1 60) + (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 9)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (until v1-28 + (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!) + ) + (set! v1-28 (or (ja-done? 0) (-> self hit?))) + ) + ) + (ja-channel-push! 1 60) + ) + (let ((gp-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-2 + (the-as art-joint-anim (-> self draw art-group data 7)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-stop-traveling (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-tracking) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 30) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((v1-22 (-> self mode))) + (cond + ((zero? v1-22) + (go mother-spider-idle) + ) + ((= v1-22 1) + (go mother-spider-tracking) + ) + ((= v1-22 2) + (set! (-> self started-birthing-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self birthing-counter) (max 0 (- (-> self max-baby-count) (-> self baby-count)))) + (go mother-spider-birthing) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-tracking (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () + (set! (-> self hit?) #f) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self last-player-in-air-time) (the-as uint (-> *display* base-frame-counter))) + (none) + ) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-tracking) + ) + (if (letgo-player? self) + (go mother-spider-traveling (the-as uint 0)) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! gp-0 (-> self node-list data 6)) + (if (or (logtest? (-> *target* state-flags) #x80f8) (< (vector-vector-distance gp-0 (camera-pos)) 8192.0)) + (go mother-spider-traveling (the-as uint 2)) + ) + ) + (when (is-player-stuck? self) + (let ((f1-4 (fmax + (fmin (+ -28672.0 (-> self player-sticky-dist-from-anchor)) (-> self max-dist-from-anchor)) + (-> self idle-dist-from-anchor) + ) + ) + ) + (if (< 409.6 (fabs (- f1-4 (-> self dist-from-anchor)))) + (go mother-spider-traveling (the-as uint 1)) + ) + ) + ) + (if (or (not *target*) (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + (set! (-> self last-player-in-air-time) (the-as uint (-> *display* base-frame-counter))) + ) + (when (and + *target* + (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-spit-time))) 900) + (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-player-in-air-time))) 18) + (>= (-> self max-spit-xz-dist) (vector-vector-xz-distance (-> self root-override trans) (target-pos 0))) + ) + (let ((gp-2 (new 'stack-no-clear 'vector)) + (s5-2 (new 'stack-no-clear 'vector)) + ) + (set! (-> gp-2 quad) (-> self root-override trans quad)) + (set! (-> gp-2 w) 4096.0) + (when (sphere-in-view-frustum? (the-as sphere gp-2)) + (vector<-cspace! gp-2 (-> self node-list data 21)) + (set! (-> s5-2 quad) (-> (target-pos 0) quad)) + (set! (-> s5-2 y) (+ 4915.2 (-> s5-2 y))) + (cond + ((< 24576.0 (vector-vector-distance gp-2 s5-2)) + (go mother-spider-spit) + ) + (else + (if (>= (- (-> *display* base-frame-counter) (the-as int (-> self last-spit-time))) 1500) + (go mother-spider-traveling (the-as uint 2)) + ) + ) + ) + ) + ) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + ) + (else + (ja-channel-push! 1 75) + ) + ) + (while #t + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-hit-while-tracking (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-tracking) + ) + (when (= (-> self spin-vel) 0.0) + (set! (-> self last-spit-time) (the-as uint 0)) + (go mother-spider-tracking) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 30) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (ja-channel-push! 1 30) + (while #t + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-spit (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-tracking) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 75) + (let ((gp-0 #f)) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.5) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (not gp-0) (>= (ja-aframe-num 0) 6.0) (>= 8.0 (ja-aframe-num 0))) + (when *target* + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + (s2-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s4-0 (-> self node-list data 21)) + (set! (-> s5-0 quad) (-> (target-pos 0) quad)) + (set! (-> s5-0 y) (+ 4915.2 (-> s5-0 y))) + (when (< 24576.0 (vector-vector-distance s5-0 s4-0)) + (let ((a2-1 (-> self node-list data 19 bone transform))) + (set-vector! s2-0 0.0 0.0 1.0 1.0) + (vector-rotate*! s2-0 s2-0 a2-1) + ) + (set! (-> s2-0 w) 1.0) + (vector-! s5-0 s5-0 s4-0) + (vector-normalize! s5-0 1.0) + (vector-deg-seek s5-0 s2-0 s5-0 6371.5557) + (vector-normalize-copy! s3-0 s5-0 32768.0) + (let ((gp-1 (get-process *default-dead-pool* mother-spider-proj #x4000))) + (when gp-1 + (let ((t9-12 (method-of-type mother-spider-proj activate))) + (t9-12 (the-as mother-spider-proj gp-1) self 'mother-spider-proj (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 projectile-init-by-other (-> self entity) s4-0 s3-0 0 (process->handle *target*)) + (-> gp-1 ppointer) + ) + ) + (set! gp-0 #t) + (set! (-> self last-spit-time) (the-as uint (-> *display* base-frame-counter))) + (vector-negate! s5-0 s5-0) + (TODO-RENAME-21 self s5-0 49152.0 #f) + (when (nonzero? (-> self max-baby-count)) + (+! (-> self spit-counter) -1) + (when (< (-> self spit-counter) 0) + (set! (-> self spit-counter) 0) + 0 + ) + ) + ) + ) + ) + ) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.5) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (if (> (-> self spit-counter) 0) + (go mother-spider-tracking) + (go mother-spider-traveling (the-as uint 2)) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-birthing (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-birthing) + ) + (if (letgo-player? self) + (go mother-spider-traveling (the-as uint 0)) + ) + (if (and + (>= (- (-> *display* base-frame-counter) (the-as int (-> self started-birthing-time))) 1800) + (zero? (logand (-> *target* state-flags) #x80f8)) + ) + (go mother-spider-traveling (the-as uint 1)) + ) + (if (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 75) + (> (-> self birthing-counter) 0) + (and + (>= 49152.0 (- (-> self max-dist-from-anchor) (-> self dist-from-anchor))) + (zero? (logand (-> *target* state-flags) #x80f8)) + (dummy-21 (-> self nav) (-> self root-override trans)) + ) + ) + (go mother-spider-birth-baby) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + ) + (else + (ja-channel-push! 1 75) + ) + ) + (while #t + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-birth-baby (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-birthing) + ) + (if (letgo-player? self) + (go mother-spider-traveling (the-as uint 0)) + ) + (if (not (dummy-21 (-> self nav) (-> self root-override trans))) + (go mother-spider-birthing) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 75) + (let ((gp-0 #f)) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.4) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (not gp-0) (>= (ja-aframe-num 0) 10.0)) + (set! gp-0 #t) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'vector)) + ) + (when (TODO-RENAME-20 self s5-0 s4-0) + (let ((s3-0 (get-process *default-dead-pool* mother-spider-egg #x4000))) + (when s3-0 + (let ((t9-5 (method-of-type mother-spider-egg activate))) + (t9-5 (the-as mother-spider-egg s3-0) self 'mother-spider-egg (the-as pointer #x70004000)) + ) + (run-now-in-process + s3-0 + mother-spider-egg-init-by-other + (-> self entity) + (-> self root-override trans) + s5-0 + s4-0 + ) + (-> s3-0 ppointer) + ) + ) + (+! (-> self baby-count) 1) + (+! (-> self birthing-counter) -1) + (sound-play-by-name (static-sound-name "lay-eggs") (new-sound-id) 1024 0 0 1 #t) + ) + ) + ) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.4) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (go mother-spider-birthing) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +;; definition for method 20 of type mother-spider +;; Used lq/sq +(defmethod TODO-RENAME-20 mother-spider ((obj mother-spider) (arg0 vector) (arg1 vector)) + (set! (-> obj nav nav-cull-radius) 40960.0) + (set-current-poly! (-> obj nav) (dummy-16 (-> obj nav) (-> obj root-override trans))) + (dummy-28 (-> obj nav) -1) + (dotimes (s3-1 4) + (let ((f28-0 (+ 32768.0 (-> obj orient-rot y))) + (f30-0 (rand-vu-float-range 16384.0 40960.0)) + ) + (let ((s1-0 (new 'stack-no-clear 'vector)) + (s2-1 (new 'stack-no-clear 'vector)) + ) + (let ((f28-1 (+ f28-0 (rand-vu-float-range -9102.223 9102.223)))) + (set-vector! s1-0 (sin f28-1) 0.0 (cos f28-1) 1.0) + ) + (vector-float*! s2-1 s1-0 f30-0) + (dummy-35 (-> obj nav) (-> obj nav travel) (-> obj root-override trans) s2-1 s1-0 f30-0) + ) + (dummy-24 (-> obj nav) f30-0 (the-as clip-travel-vector-to-mesh-return-info #f)) + ) + (cond + ((>= (vector-xz-length (-> obj nav travel)) 4096.0) + (vector+! arg0 (-> obj root-override trans) (-> obj nav travel)) + (let ((s2-2 (new 'stack-no-clear 'collide-tri-result))) + (cond + ((>= (dummy-10 *collide-cache* arg0 (new 'static 'vector :y -69632.0 :w 1.0) 40.96 1 obj s2-2 1) 0.0) + (set! (-> arg0 y) (-> s2-2 intersect y)) + (set! (-> arg1 quad) (-> s2-2 normal quad)) + (return #t) + ) + (else + 0 + ) + ) + ) + ) + (else + 0 + ) + ) + ) + (dummy-17 (-> obj nav) arg0 (-> obj root-override trans)) + (let ((a1-12 (new 'stack-no-clear 'vector)) + (s3-2 (new 'stack-no-clear 'collide-tri-result)) + ) + (set! (-> a1-12 quad) (-> arg0 quad)) + (set! (-> a1-12 y) (+ 8192.0 (-> a1-12 y))) + (cond + ((>= (dummy-10 *collide-cache* a1-12 (new 'static 'vector :y -69632.0 :w 1.0) 40.96 1 obj s3-2 1) 0.0) + (set! (-> arg0 y) (-> s3-2 intersect y)) + (set! (-> arg1 quad) (-> s3-2 normal quad)) + (return #t) + ) + (else + 0 + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate mother-spider-hit-while-birthing (mother-spider) + :event + mother-spider-default-event-handler + :enter + (behavior () (set! (-> self hit?) #f) (none)) + :trans + (behavior () + (if (-> self hit?) + (go mother-spider-hit-while-birthing) + ) + (if (= (-> self spin-vel) 0.0) + (go mother-spider-birthing) + ) + (TODO-RENAME-29 self #t #t) + (none) + ) + :code + (behavior () + (ja-channel-push! 1 30) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (ja-channel-push! 1 30) + (while #t + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior mother-spider) transform-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-die-from-uppercut (mother-spider) + :event + mother-spider-death-event-handler + :enter + (behavior () + (shut-down! (-> self neck)) + (set! (-> self thread-speed) 122880.0) + (set! (-> self targ-dist-from-anchor) (+ -24576.0 (-> self dist-from-anchor))) + (let ((gp-0 (- 6 (-> self damage))) + (s5-0 (-> self damage)) + ) + (set! (-> self damage) 6) + (when (> gp-0 0) + (dotimes (s4-0 gp-0) + (let ((s0-0 (-> *mother-spider-leg-infos* s5-0)) + (s3-0 (new 'stack-no-clear 'vector)) + (s2-0 (new 'stack-no-clear 'vector)) + (s1-0 (new 'stack-no-clear 'vector)) + ) + (vector<-cspace! s3-0 (-> self node-list data (-> s0-0 joint-index0))) + (vector<-cspace! s2-0 (-> self node-list data (-> s0-0 joint-index1))) + (vector-! s2-0 s2-0 s3-0) + (vector-normalize! s2-0 1.0) + (set! (-> s1-0 quad) (-> s2-0 quad)) + (set! (-> s1-0 y) (+ 0.3 (-> s1-0 y))) + (vector-normalize! s1-0 1.0) + (let ((s0-1 (get-process *default-dead-pool* mother-spider-leg #x4000))) + (when s0-1 + (let ((t9-6 (method-of-type mother-spider-leg activate))) + (t9-6 (the-as mother-spider-leg s0-1) self 'mother-spider-leg (the-as pointer #x70004000)) + ) + (run-now-in-process s0-1 mother-spider-leg-init-by-other self s3-0 s2-0 s1-0) + (-> s0-1 ppointer) + ) + ) + ) + (+! s5-0 1) + ) + ) + ) + (none) + ) + :trans + (behavior () (TODO-RENAME-29 self #f #f) (none)) + :code + (behavior () + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 0) 1) + ) + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 30) + (clear-collide-with-as (-> self root-override)) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 12)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go mother-spider-die-wait-for-children) + (none) + ) + :post + (the-as (function none :behavior mother-spider) ja-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-die (mother-spider) + :event + mother-spider-death-event-handler + :trans + (behavior () (TODO-RENAME-29 self #f #f) (none)) + :code + (behavior () + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 0) 1) + ) + (shut-down! (-> self neck)) + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 30) + (clear-collide-with-as (-> self root-override)) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) data 0 length) -1)) + ) + (set! (-> a0-7 param 1) 1.0) + (set! (-> a0-7 frame-num) 0.0) + (joint-control-channel-group! a0-7 (the-as art-joint-anim (-> self draw art-group data 11)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) (the float (+ (-> a0-8 frame-group data 0 length) -1))) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go mother-spider-die-wait-for-children) + (none) + ) + :post + (the-as (function none :behavior mother-spider) ja-post) + ) + +;; failed to figure out what this is: +(defstate mother-spider-die-wait-for-children (mother-spider) + :event + mother-spider-death-event-handler + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (clear-collide-with-as (-> self root-override)) + (set! (-> self skel postbind-function) #f) + (logior! (-> self draw status) 2) + (while (-> self child) + (suspend) + ) + (dummy-18 self) + (none) + ) + ) + +;; definition for function mother-spider-full-joint-callback +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun mother-spider-full-joint-callback ((arg0 mother-spider)) + (/ (-> arg0 dist-from-anchor) (-> arg0 max-dist-from-anchor)) + (let ((a1-0 (the-as matrix #f))) + (dotimes (s5-0 7) + (let* ((v1-1 (the-as mother-spider-thread (+ (the-as uint *mother-spider-threads*) (* s5-0 16)))) + (s4-0 (-> arg0 node-list data (-> v1-1 joint-index) bone transform)) + ) + (vector-! (-> s4-0 vector 3) (-> arg0 root-override trans) (-> arg0 anchor-trans)) + (vector-float*! (-> s4-0 vector 3) (-> s4-0 vector 3) (-> v1-1 trans-u)) + (vector+! (-> s4-0 vector 3) (-> s4-0 vector 3) (-> arg0 anchor-trans)) + (let ((f1-2 (- (-> s4-0 vector 3 x) (-> arg0 anchor-trans x))) + (f0-5 (- (-> s4-0 vector 3 z) (-> arg0 anchor-trans z))) + ) + (set! (-> s4-0 vector 3 x) (+ (-> arg0 anchor-trans x) (* f1-2 (-> v1-1 swing-arc-u)))) + (set! (-> s4-0 vector 3 z) (+ (-> arg0 anchor-trans z) (* f0-5 (-> v1-1 swing-arc-u)))) + ) + (if a1-0 + (dummy-22 arg0 a1-0 (-> s4-0 vector 3)) + ) + (set! a1-0 s4-0) + ) + ) + (let ((a0-11 (-> arg0 node-list data 22 bone transform)) + (a2-7 (new 'stack-no-clear 'vector)) + ) + (vector-! a2-7 (-> arg0 root-override trans) (-> a0-11 vector 3)) + (vector+! a2-7 a2-7 (-> arg0 root-override trans)) + (dummy-22 arg0 a1-0 a2-7) + ) + ) + (dotimes (v1-16 (-> arg0 damage)) + (let ((a0-17 (-> *mother-spider-leg-infos* v1-16))) + (let ((a1-5 (-> arg0 node-list data (-> a0-17 joint-index0) bone transform))) + (set! (-> a1-5 vector 0 quad) (the-as uint128 0)) + (set! (-> a1-5 vector 1 quad) (the-as uint128 0)) + (set! (-> a1-5 vector 2 quad) (the-as uint128 0)) + ) + 0 + (let ((a0-22 (-> arg0 node-list data (-> a0-17 joint-index1) bone transform))) + (set! (-> a0-22 vector 0 quad) (the-as uint128 0)) + (set! (-> a0-22 vector 1 quad) (the-as uint128 0)) + (set! (-> a0-22 vector 2 quad) (the-as uint128 0)) + ) + ) + 0 + ) + 0 + (none) + ) + +;; definition for method 22 of type mother-spider +(defmethod dummy-22 mother-spider ((obj mother-spider) (arg0 matrix) (arg1 vector)) + (rlet ((vf0 :class vf)) + (init-vf0-vector) + (vector-! (-> arg0 vector 2) arg1 (-> arg0 vector 3)) + (vector-normalize! (-> arg0 vector 2) 1.0) + (.svf (&-> (-> arg0 vector) 0 quad) vf0) + (cond + ((and (= (-> arg0 vector 2 x) 0.0) (= (-> arg0 vector 2 y) 0.0)) + (set! (-> arg0 vector 0 x) (-> arg0 vector 2 z)) + ) + (else + (set! (-> arg0 vector 0 x) (- (-> arg0 vector 2 y))) + (set! (-> arg0 vector 0 y) (-> arg0 vector 2 x)) + ) + ) + (vector-cross! (-> arg0 vector 1) (the-as vector (-> arg0 vector)) (-> arg0 vector 2)) + (vector-normalize! (-> arg0 vector 1) 1.0) + (set! (-> arg0 vector 0 w) 0.0) + (set! (-> arg0 vector 1 w) 0.0) + (let ((f0-8 0.0)) + (set! (-> arg0 vector 2 w) f0-8) + f0-8 + ) + ) + ) + +;; definition for method 12 of type mother-spider +(defmethod run-logic? mother-spider ((obj mother-spider)) + (or + (zero? (logand (-> obj mask) (process-mask actor-pause))) + (or + (< (vector-vector-xz-distance (-> obj root-override trans) (math-camera-pos)) (-> obj deactivate-xz-dist)) + (and (nonzero? (-> obj skel)) (!= (-> obj skel root-channel 0) (-> obj skel channel))) + (and (nonzero? (-> obj draw)) (logtest? (-> obj draw status) 16)) + ) + ) + ) + +;; definition for method 7 of type mother-spider +;; INFO: Return type mismatch process-drawable vs mother-spider. +(defmethod relocate mother-spider ((obj mother-spider) (arg0 int)) + (if (nonzero? (-> obj neck)) + (&+! (-> obj neck) arg0) + ) + (the-as mother-spider ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; definition for method 11 of type mother-spider +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! mother-spider ((obj mother-spider) (arg0 entity-actor)) + (local-vars (sv-16 res-tag) (sv-64 vector)) + (set! (-> obj baby-count) 0) + (set! (-> obj spit-counter) 0) + (set! (-> obj leg-socket-part-mask) 0) + (set! (-> obj mode) (the-as uint 0)) + (set! (-> obj damage) 0) + (set! (-> obj player-attack-id) (the-as uint 0)) + (set! (-> obj spin-vel) 0.0) + (set! (-> obj thread-speed) 245760.0) + (set! (-> obj thread-vel) 0.0) + (set! (-> obj hit?) #f) + (set! (-> obj last-update-time) (the-as uint 0)) + (set! (-> obj spawned-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> obj spin-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> obj last-spit-time) (the-as uint 0)) + (set! (-> obj started-birthing-time) (the-as uint 0)) + (set! (-> obj check-z-thresh?) #f) + (set! (-> obj activate-z-thresh) 0.0) + (set! (-> obj deactivate-z-thresh) 0.0) + (vector-reset! (-> obj swing-pos)) + (vector-reset! (-> obj swing-base-pos)) + (vector-reset! (-> obj swing-vel)) + (when (name= (-> obj name) "mother-spider-7") + (set! (-> obj check-z-thresh?) #t) + (set! (-> obj activate-z-thresh) -12288.0) + (set! (-> obj deactivate-z-thresh) 24985.6) + ) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum usually-hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 9) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 8192)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 transform-index) 6) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 12697.6) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core offense) 0) + (set! (-> s2-0 transform-index) 6) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4505.6) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core offense) 0) + (set! (-> s2-1 transform-index) 5) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 4505.6) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 0) + (set! (-> s2-2 transform-index) 20) + (set-vector! (-> s2-2 local-sphere) 0.0 -409.6 1228.8 2457.6) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core offense) 0) + (set! (-> s2-3 transform-index) 12) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-3) + ) + (let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core offense) 0) + (set! (-> s2-4 transform-index) 10) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-4) + ) + (let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-5 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core offense) 0) + (set! (-> s2-5 transform-index) 8) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-5) + ) + (let ((s2-6 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-6 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-6 collide-with) (the-as uint 16)) + (set! (-> s2-6 prim-core offense) 0) + (set! (-> s2-6 transform-index) 18) + (set-vector! (-> s2-6 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-6) + ) + (let ((s2-7 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-7 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-7 collide-with) (the-as uint 16)) + (set! (-> s2-7 prim-core offense) 0) + (set! (-> s2-7 transform-index) 16) + (set-vector! (-> s2-7 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-7) + ) + (let ((s2-8 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-8 prim-core collide-as) (the-as uint 8192)) + (set! (-> s2-8 collide-with) (the-as uint 16)) + (set! (-> s2-8 prim-core offense) 0) + (set! (-> s2-8 transform-index) 14) + (set-vector! (-> s2-8 local-sphere) 0.0 0.0 0.0 2048.0) + (append-prim s3-0 s2-8) + ) + ) + (set! (-> s4-0 nav-radius) 4096.0) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *mother-spider-sg* '()) + (set! (-> obj nav) (new 'process 'nav-control (-> obj root-override) 16 40960.0)) + (logior! (-> obj nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) + (set! (-> obj nav nearest-y-threshold) 409600.0) + (set! (-> obj root-override nav-flags) (logand -2 (-> obj root-override nav-flags))) + (set! (-> obj root-override nav-flags) (logand -3 (-> obj root-override nav-flags))) + (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)) + (set! (-> obj fact) + (new 'process 'fact-info-enemy obj (pickup-type eco-pill-random) (-> *FACT-bank* default-pill-inc)) + ) + (set! (-> obj draw shadow-ctrl) (new 'process 'shadow-control 0.0 0.0 4096000.0 (the-as float 60) 245760.0)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 618) obj)) + (logior! (-> obj skel status) 1) + (let ((v0-30 (new 'process 'joint-mod (joint-mod-handler-mode reset) obj 19))) + (set! (-> obj neck) v0-30) + (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) + (set! (-> v0-30 up) (the-as uint 1)) + (set! (-> v0-30 nose) (the-as uint 2)) + (set! (-> v0-30 ear) (the-as uint 0)) + (set! (-> v0-30 max-dist) 102400.0) + (set! (-> v0-30 ignore-angle) 16384.0) + ) + (set! (-> obj thread-min-trans quad) (-> obj root-override trans quad)) + (set! (-> obj anchor-trans quad) (-> obj root-override trans quad)) + (set! (-> obj max-swing-radius) 73728.0) + (set! (-> obj max-baby-count) 4) + (let ((s4-1 #f)) + (set! sv-16 (new 'static 'res-tag)) + (let ((v0-31 (res-lump-data arg0 'mother-spider pointer :tag-ptr (& sv-16)))) + (cond + (v0-31 + (+! (-> obj thread-min-trans y) (-> (the-as (pointer float) v0-31) 0)) + (+! (-> obj anchor-trans y) (-> (the-as (pointer float) v0-31) 1)) + (set! (-> obj max-swing-radius) (-> (the-as (pointer float) v0-31) 2)) + (set! (-> obj max-baby-count) (the int (-> (the-as (pointer float) v0-31) 3))) + (set! s4-1 (!= (-> (the-as (pointer float) v0-31) 4) 0.0)) + (set! (-> obj max-spit-xz-dist) (-> (the-as (pointer float) v0-31) 5)) + (set! (-> obj activate-xz-dist) (-> (the-as (pointer float) v0-31) 6)) + (set! (-> obj deactivate-xz-dist) (-> (the-as (pointer float) v0-31) 7)) + ) + (else + (set! (-> obj thread-min-trans y) (+ 28672.0 (-> obj thread-min-trans y))) + (set! (-> obj anchor-trans y) (+ 204800.0 (-> obj anchor-trans y))) + (set! (-> obj max-spit-xz-dist) 81920.0) + (set! (-> obj activate-xz-dist) 143360.0) + (set! (-> obj deactivate-xz-dist) 163430.4) + ) + ) + ) + (set! (-> obj thread-min-trans w) 1.0) + (set! (-> obj anchor-trans w) 1.0) + (set! (-> obj idle-dist-from-anchor) 16384.0) + (set! (-> obj max-dist-from-anchor) (- (-> obj anchor-trans y) (-> obj thread-min-trans y))) + (set! (-> obj player-sticky-dist-from-anchor) (-> obj max-dist-from-anchor)) + (set! (-> obj targ-dist-from-anchor) (-> obj idle-dist-from-anchor)) + (set! (-> obj root-override trans quad) (-> obj anchor-trans quad)) + (set! (-> obj root-override trans y) (- (-> obj root-override trans y) (-> obj idle-dist-from-anchor))) + (set-vector! (-> obj orient-rot) 0.0 0.0 0.0 1.0) + (quaternion-zxy! (-> obj root-override quat) (-> obj orient-rot)) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 5)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (transform-post) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 10240.0 + ) + (let ((v1-121 #f)) + (if (nonzero? (-> obj entity extra perm user-int8 0)) + (set! v1-121 #t) + ) + (cond + (v1-121 + (go mother-spider-die-wait-for-children) + ) + (else + (when s4-1 + (let ((s5-3 (max 0 (min (+ (-> obj path curve num-cverts) -1) (-> obj max-baby-count)))) + (s4-2 (new 'stack-no-clear 'vector)) + (s3-1 (new 'stack-no-clear 'vector)) + ) + (dotimes (s2-9 s5-3) + (eval-path-curve-div! (-> obj path) s4-2 (the float s2-9) 'interp) + (vector-! s3-1 (target-pos 0) s4-2) + (set! (-> s3-1 y) 0.0) + (let ((s1-2 vector-rotate-around-y!) + (s0-0 s3-1) + ) + (set! sv-64 s3-1) + (let ((a2-21 (rand-vu-float-range -7281.778 7281.778))) + (s1-2 s0-0 sv-64 a2-21) + ) + ) + (vector-normalize! s3-1 1.0) + (spawn-child obj s4-2 s3-1 #f) + ) + ) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go mother-spider-idle) + ) + ) + ) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/bully_REF.gc b/test/decompiler/reference/levels/sunken/bully_REF.gc index 9bcf5bc265..3f104f41a7 100644 --- a/test/decompiler/reference/levels/sunken/bully_REF.gc +++ b/test/decompiler/reference/levels/sunken/bully_REF.gc @@ -10,7 +10,7 @@ :size-assert #xb0 :flag-assert #x14004000b0 (:states - (bully-broken-cage-explode bully-broken-cage) + bully-broken-cage-explode ) ) @@ -304,23 +304,23 @@ ;; failed to figure out what this is: (defstate bully-broken-cage-explode (bully-broken-cage) :code - (behavior ((arg0 bully-broken-cage)) + (behavior () (ja-channel-push! 1 0) - (let ((a0-2 (-> self skel root-channel 0))) - (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) - (set! (-> a0-2 param 0) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 16))) + (set! (-> a0-1 param 0) (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 16)) 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 16)) num-func-seek!) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 16)) num-func-seek!) ) (until (ja-done? 0) (suspend) - (let ((a0-3 (-> self skel root-channel 0))) - (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) - (set! (-> a0-3 param 1) 1.0) - (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) ) ) (none) @@ -338,10 +338,8 @@ (set! (-> self root trans quad) (-> self parent-override 0 root-override trans quad)) (quaternion-copy! (-> self root quat) (-> self parent-override 0 root-override quat)) (set! (-> self root scale quad) (-> self parent-override 0 root-override scale quad)) - (let ((a0-13 self)) - (initialize-skeleton a0-13 *bully-broken-cage-sg* '()) - (go bully-broken-cage-explode a0-13) - ) + (initialize-skeleton self *bully-broken-cage-sg* '()) + (go bully-broken-cage-explode) (none) ) diff --git a/test/decompiler/reference/levels/sunken/puffer_REF.gc b/test/decompiler/reference/levels/sunken/puffer_REF.gc index 533c67557a..f01a1dcc5e 100644 --- a/test/decompiler/reference/levels/sunken/puffer_REF.gc +++ b/test/decompiler/reference/levels/sunken/puffer_REF.gc @@ -721,7 +721,7 @@ (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (let ((v1-0 arg2)) (the-as - object + uint (cond ((= v1-0 'death-start) (the-as uint (drop-pickup (-> self fact-info-override) #t *entity-pool* (-> self fact-info-override) 0))