From 221e33c5d103e2f891aa45f0dc70a49360dabf39 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Tue, 28 Dec 2021 19:14:50 -0500 Subject: [PATCH] decomp: finish `pelican` | `double-lurker` | `rolling-race-ring` (#1020) * decomp: finish `pelican` * decomp: finish `double-lurker` * decomp: finish `rolling-race-ring` * decomp: update draw-status related code * fix mistakes --- decompiler/config/all-types.gc | 60 +- .../stack_structures.jsonc | 2 +- .../jak1_ntsc_black_label/type_casts.jsonc | 11 +- .../jak1_ntsc_black_label/var_names.jsonc | 15 + goal_src/levels/beach/pelican.gc | 1156 ++++++++++++++ goal_src/levels/common/nav-enemy-h.gc | 2 +- goal_src/levels/finalboss/green-eco-lurker.gc | 5 +- goal_src/levels/maincave/baby-spider.gc | 1395 +++++++---------- goal_src/levels/misty/muse.gc | 1153 +++++--------- goal_src/levels/rolling/rolling-race-ring.gc | 1264 +++++++++++++++ goal_src/levels/sunken/double-lurker.gc | 1261 +++++++++++++++ .../reference/levels/beach/pelican_REF.gc | 1218 ++++++++++++++ .../levels/common/nav-enemy-h_REF.gc | 2 +- .../levels/finalboss/green-eco-lurker_REF.gc | 6 +- .../levels/maincave/baby-spider_REF.gc | 37 +- .../reference/levels/misty/muse_REF.gc | 49 +- .../levels/rolling/rolling-race-ring_REF.gc | 1320 ++++++++++++++++ .../levels/sunken/double-lurker_REF.gc | 1325 ++++++++++++++++ 18 files changed, 8621 insertions(+), 1660 deletions(-) create mode 100644 test/decompiler/reference/levels/beach/pelican_REF.gc create mode 100644 test/decompiler/reference/levels/rolling/rolling-race-ring_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/double-lurker_REF.gc diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 1fde496e03..c50ec98a6a 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -22907,7 +22907,7 @@ (TODO-RENAME-48 (_type_) none 48) ;; object past to method 60 -- see citb-bunny (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) (TODO-RENAME-50 (_type_ vector) symbol 50) - (dummy-51 (_type_ vector) object 51) ;; ret - float | symbol + (dummy-51 (_type_) object 51) ;; ret - float | symbol (dummy-52 (_type_ vector) symbol 52) ;; ret - symbol | vector (dummy-53 (_type_) symbol 53) ;; ret - symbol | none (dummy-54 (_type_) none 54) @@ -24225,28 +24225,29 @@ :heap-base #xf0 :size-assert #x160 :flag-assert #x1400f00160 + (:states + (pelican-wait-at-end symbol) + (pelican-wait-at-nest symbol) + pelican-circle + (pelican-dive path-control curve-control uint) + pelican-from-nest + (pelican-explode symbol) + pelican-spit + (pelican-fly-to-end path-control int) + (pelican-to-nest path-control int)) ) ;; - Functions -(define-extern pelican-fly (function (function int) (function int) none :behavior pelican)) +(define-extern pelican-fly (function (function pelican int) (function pelican int) none :behavior pelican)) (define-extern pelican-path-update (function float int float float symbol quaternion :behavior pelican)) (define-extern pelican-post (function none :behavior pelican)) ;; - Unknowns (define-extern *pelican-sg* skeleton-group) -(define-extern pelican-wait-at-end (state pelican)) -(define-extern pelican-wait-at-nest (state symbol pelican)) -(define-extern pelican-circle (state pelican)) (define-extern zero-func (function int)) (define-extern *PELICAN-bank* pelican-bank) -(define-extern pelican-dive (state path-control curve-control uint pelican)) -(define-extern pelican-from-nest (state pelican)) -(define-extern pelican-explode (state symbol pelican)) -(define-extern pelican-spit (state pelican)) -(define-extern pelican-fly-to-end (state path-control int pelican)) -(define-extern pelican-to-nest (state path-control int pelican)) ;; ---------------------- @@ -26959,6 +26960,8 @@ :size-assert #x1d8 :heap-base #x170 :flag-assert #x4c017001d8 + (:methods + (dummy-51 (_type_ vector) symbol :replace 51)) (:states green-eco-lurker-appear green-eco-lurker-appear-land @@ -33670,6 +33673,11 @@ :size-assert #x1a0 :heap-base #x130 :flag-assert #x4c013001a0 + (:states + double-lurker-top-on-shoulders + double-lurker-top-resume + (double-lurker-top-knocked-down object vector vector) + double-lurker-top-on-shoulders-die) ) (deftype double-lurker (nav-enemy) @@ -33679,10 +33687,22 @@ (buddy-dead? symbol :offset-assert 412) (buddy-handle handle :offset-assert 416) ; double-lurker-top ) + (:methods + (initialize-collision (_type_) collide-shape-moving :replace 47) + (dummy-53 (_type_ vector) symbol :replace 53)) :method-count-assert 76 :size-assert #x1a8 :heap-base #x140 :flag-assert #x4c014001a8 + (:states + double-lurker-waiting-to-die + double-lurker-resume + double-lurker-break-apart + double-lurker-both-knocked-back + double-lurker-buddy-was-hit + double-lurker-show-anims + double-lurker-knocked-back + ) ) ;; - Functions @@ -33692,22 +33712,11 @@ ;; - Unknowns -(define-extern double-lurker-waiting-to-die (state double-lurker)) ;; unknown type (define-extern *double-lurker-sg* skeleton-group) (define-extern *double-lurker-when-both-nav-enemy-info* nav-enemy-info) (define-extern *double-lurker-nav-enemy-info* nav-enemy-info) -(define-extern double-lurker-resume (state double-lurker)) ;; unknown type -(define-extern double-lurker-break-apart (state double-lurker)) ;; unknown type -(define-extern double-lurker-buddy-was-hit (state object object double-lurker-top double-lurker)) ;; unknown type -(define-extern double-lurker-both-knocked-back (state double-lurker)) ;; unknown type -(define-extern double-lurker-top-on-shoulders (state double-lurker-top)) ;; unknown type -(define-extern double-lurker-top-resume (state double-lurker-top)) ;; unknown type (define-extern *double-lurker-top-sg* skeleton-group) (define-extern *double-lurker-top-nav-enemy-info* nav-enemy-info) -(define-extern double-lurker-top-knocked-down (state object vector vector double-lurker-top)) ;; unknown type -(define-extern double-lurker-top-on-shoulders-die (state double-lurker-top)) ;; unknown type -(define-extern double-lurker-show-anims (state double-lurker)) ;; unknown type -(define-extern double-lurker-knocked-back (state double-lurker)) ;; unknown type ;; ---------------------- @@ -34306,6 +34315,10 @@ :size-assert #x130 :heap-base #xc0 :flag-assert #x1400c00130 + (:states + race-ring-active + race-ring-wait + race-ring-idle) ) ;; - Functions @@ -34318,9 +34331,6 @@ ;; - Unknowns (define-extern *race-ring-sg* skeleton-group) -(define-extern race-ring-active (state race-ring)) ;; unknown type -(define-extern race-ring-wait (state race-ring)) ;; unknown type -(define-extern race-ring-idle (state race-ring)) ;; unknown type ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index ff7acce611..c4c7836945 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -3749,7 +3749,7 @@ "(method 52 double-lurker)": [ [16, "vector"], [32, "vector"], - [48, "collide-mesh-cache-tri"] + [48, "collide-tri-result"] ], "double-lurker-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 a468fd3a1c..d09d662224 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -3510,11 +3510,9 @@ ], "(code race-ring-active)": [ - [242, "v1", "handle"], - [245, "v1", "handle"], + [[241, 249], "v1", "handle"], [253, "gp", "handle"], - [269, "s5", "handle"], - [272, "s5", "handle"] + [[269, 276], "s5", "handle"] ], "(trans race-ring-active)": [[26, "a0", "part-tracker"]], @@ -5335,6 +5333,7 @@ ], "(method 51 double-lurker)": [ + [6, "v1", "collide-shape-prim-group"], [18, "v1", "collide-shape-prim-group"], [22, "v1", "collide-shape-prim-group"] ], @@ -7361,5 +7360,9 @@ // [25, "a0", "uint"] ], + "(anon-function 15 pelican)": [ + [24, "v1", "collectable"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc index 3125577d5b..d9b8d4d619 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -3842,5 +3842,20 @@ } }, + "(code pelican-spit)": { + "vars": { + "gp-1": ["gp-1", "handle"], + "s4-0": ["s4-0", "handle"] + } + }, + + "(code race-ring-active)": { + "vars": { + "gp-2": ["gp-2", "handle"], + "v1-65": ["v1-65", "handle"], + "s5-2": ["s5-2", "handle"] + } + }, + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/goal_src/levels/beach/pelican.gc b/goal_src/levels/beach/pelican.gc index 7532c3fb1b..2d742be632 100644 --- a/goal_src/levels/beach/pelican.gc +++ b/goal_src/levels/beach/pelican.gc @@ -5,3 +5,1159 @@ ;; name in dgo: pelican ;; dgos: BEA, L1 +;; DECOMP BEGINS + +(deftype pelican-bank (basic) + ((circle-speed meters :offset-assert 4) + (dive-time seconds :offset-assert 8) + (to-nest0-time seconds :offset-assert 16) + (to-nest1-time seconds :offset-assert 24) + (land-time seconds :offset-assert 32) + (from-nest-time seconds :offset-assert 40) + (spit-time seconds :offset-assert 48) + (pre-spit-wait-time seconds :offset-assert 56) + (post-spit-wait-time seconds :offset-assert 64) + (run-away-time seconds :offset-assert 72) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + + +(define *PELICAN-bank* (new 'static 'pelican-bank + :circle-speed (meters 16.0) + :dive-time (seconds 2) + :to-nest0-time (seconds 4) + :to-nest1-time (seconds 8) + :land-time (seconds 2.4) + :from-nest-time (seconds 20) + :spit-time (seconds 1) + :pre-spit-wait-time (seconds 0.5) + :post-spit-wait-time (seconds 1.5) + :run-away-time (seconds 10) + ) + ) + +(deftype pelican (process-drawable) + ((root-override collide-shape-moving :offset 112) + (query gui-query :inline :offset-assert 176) + (fuel-cell handle :offset-assert 208) + (cam-tracker handle :offset-assert 216) + (path-data curve-control 8 :offset-assert 224) + (path-circle curve-control :offset 224) + (path-dive0 curve-control :offset 228) + (path-to-nest0 curve-control :offset 232) + (path-from-nest0 curve-control :offset 236) + (path-spit0 curve-control :offset 240) + (path-dive1 curve-control :offset 244) + (path-to-nest1 curve-control :offset 248) + (path-to-nest2 curve-control :offset 252) + (path-cache curve-control :offset-assert 256) + (time-cache uint64 :offset-assert 264) + (path-pos float :offset-assert 272) + (path-speed float :offset-assert 276) + (path-max float :offset-assert 280) + (path-vector vector :inline :offset-assert 288) + (state-vector vector :inline :offset-assert 304) + (state-vector1 vector :inline :offset-assert 320) + (state-float float 2 :offset-assert 336) + (state-object symbol :offset-assert 344) + (neck joint-mod :offset-assert 348) + ) + :heap-base #xf0 + :method-count-assert 20 + :size-assert #x160 + :flag-assert #x1400f00160 + (:states + pelican-circle + (pelican-dive path-control curve-control uint) + (pelican-explode symbol) + (pelican-fly-to-end path-control int) + pelican-from-nest + pelican-spit + (pelican-to-nest path-control int) + (pelican-wait-at-end symbol) + (pelican-wait-at-nest symbol) + ) + ) + + +(defmethod relocate pelican ((obj pelican) (arg0 int)) + (countdown (v1-0 8) + (if (nonzero? (-> obj path-data v1-0)) + (&+! (-> obj path-data v1-0) arg0) + ) + ) + (if (nonzero? (-> obj path-cache)) + (&+! (-> obj path-cache) arg0) + ) + (if (nonzero? (-> obj neck)) + (&+! (-> obj neck) arg0) + ) + (the-as + pelican + ((the-as (function process-drawable int process-drawable) (find-parent-method pelican 7)) obj arg0) + ) + ) + +(defskelgroup *pelican-sg* pelican + 0 + 5 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 3 0 5) + :longest-edge (meters 0) + :shadow 4 + ) + +(defbehavior pelican-path-update pelican ((arg0 float) (arg1 int) (arg2 float) (arg3 float) (arg4 symbol)) + (TODO-RENAME-9 (-> self align)) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (let* ((f0-1 (+ (-> self path-pos) (* (-> self align align trans z) arg3))) + (f1-2 (-> self path-max)) + (f30-0 (- f0-1 (* (the float (the int (/ f0-1 f1-2))) f1-2))) + ) + (eval-path-curve-div! (-> self path) s3-0 f30-0 'interp) + (+! (-> s3-0 y) (-> self align align trans y)) + (TODO-RENAME-30 (-> self root-override) s3-0) + (TODO-RENAME-12 (-> self path) s3-0 f30-0) + ) + (if arg4 + (set-heading-vec-clear-roll-pitch! (-> self root-override) s3-0) + (seek-toward-heading-vec! (-> self root-override) s3-0 arg0 arg1) + ) + ) + ) + +(defbehavior pelican-fly pelican ((arg0 (function pelican int)) (arg1 (function pelican int))) + (while #t + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + (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) 1.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + ) + (else + (ja-channel-push! 1 75) + ) + ) + (let ((s4-0 (arg0 self))) + (dotimes (s3-0 s4-0) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) (the float (+ (-> a0-10 frame-group data 0 length) -1))) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (let ((s4-1 (arg1 self))) + (when (> s4-1 0) + (let ((s3-1 (-> self skel root-channel 0))) + (set! (-> s3-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> s3-1 param 0) (ja-aframe 12.0 0)) + (set! (-> s3-1 param 1) 1.0) + (set! (-> s3-1 frame-num) 0.0) + (joint-control-channel-group! s3-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((s3-2 (-> self skel root-channel 0))) + (set! (-> s3-2 param 0) (ja-aframe 12.0 0)) + (set! (-> s3-2 param 1) 1.0) + (joint-control-channel-group-eval! s3-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-18 (-> self skel root-channel 0))) + (set! (-> a0-18 param 0) 0.25) + (joint-control-channel-group! a0-18 (the-as art-joint-anim #f) num-func-loop!) + ) + (ja-channel-push! 1 300) + (dotimes (s3-3 s4-1) + (let ((a0-20 (-> self skel root-channel 0))) + (set! (-> a0-20 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-20 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-20 param 1) 1.0) + (set! (-> a0-20 frame-num) 0.0) + (joint-control-channel-group! a0-20 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-21 (-> self skel root-channel 0))) + (set! (-> a0-21 param 0) (the float (+ (-> a0-21 frame-group data 0 length) -1))) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group-eval! a0-21 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (let ((a0-23 (-> self skel root-channel 0))) + (set! (-> a0-23 param 0) 1.0) + (joint-control-channel-group! a0-23 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + ) + ) + (none) + ) + +(defbehavior pelican-post pelican () + (ja-post) + (none) + ) + +(defstate pelican-circle (pelican) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'dive) + (let ((v0-0 (the-as structure #t))) + (set! (-> self state-object) (the-as symbol v0-0)) + v0-0 + ) + ) + ((= v1-0 'fuel-cell) + (handle->process (-> self fuel-cell)) + ) + ((= v1-0 'position) + (set! (-> self path-pos) (the-as float (-> arg3 param 0))) + (let ((a1-3 (TODO-RENAME-12 (-> self path) (new 'stack-no-clear 'vector) (-> self path-pos)))) + (set-heading-vec! (-> self root-override) a1-3) + ) + ) + ) + ) + ) + ) + :enter + (behavior () + (while (-> self child) + (deactivate (-> self child 0)) + ) + (set! (-> self state-object) #f) + (let ((gp-0 (-> self path-vector))) + (eval-path-curve-div! (-> self path-dive0) gp-0 4.5 'interp) + (set! (-> gp-0 y) (+ -4505.6 (-> gp-0 y))) + (let* ((s5-0 (get-process *default-dead-pool* manipy #x4000)) + (v1-8 + (when s5-0 + (let ((t9-3 (method-of-type manipy activate))) + (t9-3 (the-as manipy s5-0) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 manipy-init gp-0 (-> self entity) *fuel-cell-sg* (new 'static 'vector :w 4915.2)) + (-> s5-0 ppointer) + ) + ) + ) + (set! (-> self fuel-cell) (ppointer->handle v1-8)) + (if v1-8 + (send-event + (ppointer->process v1-8) + 'eval + (lambda :behavior pelican () (let ((v0-0 (create-launch-control (-> *part-group-id-table* 63) self))) + (set! (-> self part) v0-0) + v0-0 + ) + ) + ) + ) + ) + ) + (set! (-> self path) (-> self path-circle)) + (set! (-> self path-pos) 0.0) + (set! (-> self path-max) (the float (+ (-> self path curve num-cverts) -1))) + (set! (-> self path-speed) + (/ (* (-> *PELICAN-bank* circle-speed) (-> self path-max)) (path-distance (-> self path))) + ) + (set-roll-to-grav-2! (-> self root-override) -2730.6667) + (none) + ) + :trans + (behavior () + (pelican-path-update 728177.75 30 1.0 (/ (-> self path-max) (path-distance (-> self path))) #f) + (let ((f0-3 (+ (-> self path-pos) (* (-> self path-speed) (-> *display* seconds-per-frame)))) + (f1-2 (-> self path-max)) + ) + (set! (-> self path-pos) (- f0-3 (* (the float (the int (/ f0-3 f1-2))) f1-2))) + ) + (when (and + (and *target* (>= 81920.0 (vector-vector-xz-distance (-> self path-vector) (-> *target* control trans)))) + (not (handle->process (-> self cam-tracker))) + ) + (let ((gp-1 (get-process *default-dead-pool* camera-tracker #x4000))) + (set! (-> self cam-tracker) + (ppointer->handle (when gp-1 + (let ((t9-4 (method-of-type camera-tracker activate))) + (t9-4 (the-as camera-tracker gp-1) self 'camera-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + camera-tracker-init + (lambda :behavior camera-tracker + () + (local-vars + (a0-6 process-tree) + (a1-5 event-message-block) + (t9-6 (function process-tree event-message-block object)) + ) + (while (not (process-grab? *target*)) + (suspend) + ) + (send-event (ppointer->process (-> self parent)) 'position 4.0) + (send-event (ppointer->process (-> self parent)) 'dive) + (suspend) + (suspend) + (send-event *camera* 'blend-from-as-fixed) + (camera-look-at (the-as pair (ppointer->process (-> self parent))) (the-as uint 0)) + (camera-change-to "camera-215" 0 #f) + (until (t9-6 a0-6 a1-5) + (suspend) + (set! a1-5 (new 'stack-no-clear 'event-message-block)) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 0) + (set! (-> a1-5 message) 'got-cell?) + (set! t9-6 send-event-function) + (set! a0-6 (ppointer->process (-> self parent))) + ) + (send-event *camera* 'point-of-interest #f) + (while (!= (-> self message) 'release) + (suspend) + ) + (set! (-> self message) #f) + (while (not (process-release? (handle->process (-> self grab-target)))) + (suspend) + ) + (send-event *camera* 'blend-from-as-fixed) + (camera-look-at (the-as pair *target*) (the-as uint 0)) + (camera-change-to (the-as string 'base) 150 #f) + (none) + ) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + (set! (-> self draw force-lod) 0) + 0 + ) + (when (and (-> self state-object) (>= (-> self path-pos) 6.0) (< (-> self path-pos) 7.0)) + (let ((v1-24 (-> self entity extra perm))) + (logior! (-> v1-24 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-24 user-int8 0) 2) + ) + (go pelican-dive (-> self path-dive0) (-> self path-to-nest0) (the-as uint (-> *PELICAN-bank* to-nest0-time))) + ) + (none) + ) + :code + (behavior () + (suspend) + (send-event (-> self fuel-cell process 0) 'trans-hook fuel-cell-animate) + (pelican-fly + (the-as (function pelican int) (lambda () (rand-vu-int-range 2 4))) + (the-as (function pelican int) (lambda () (rand-vu-int-range 3 5))) + ) + (none) + ) + :post + pelican-post + ) + +(defstate pelican-dive (pelican) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'got-cell?) + (-> self state-object) + ) + ((= v1-0 'fuel-cell) + (handle->process (-> self fuel-cell)) + ) + ) + ) + ) + ) + :enter + (behavior ((arg0 path-control) (arg1 curve-control) (arg2 uint)) + (init! (-> self query) (the-as string #f) 40 150 25 #t (the-as string #f)) + (set! (-> self state-object) #f) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set-roll-to-grav-2! (-> self root-override) 0.0) + (let ((a0-4 (handle->process (-> self fuel-cell)))) + (cond + (a0-4 + (send-event a0-4 'trans-hook fuel-cell-animate) + ) + (else + ) + ) + ) + (set! (-> self path-cache) arg1) + (set! (-> self time-cache) arg2) + (set! (-> self path) arg0) + (set! (-> self path-pos) 0.0) + (set! (-> self path-max) (the float (+ (-> self path curve num-cverts) -1))) + (set! (-> self path-speed) (/ (* 300.0 (-> self path-max)) (the float (-> *PELICAN-bank* dive-time)))) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (TODO-RENAME-12 (-> self path) gp-1 (-> self path-pos)) + (set-heading-vec! (-> self root-override) gp-1) + ) + (set! (-> self draw force-lod) 0) + 0 + (none) + ) + :exit + (behavior () (set! (-> self draw force-lod) -1) (none)) + :trans + (behavior () + (if (not (handle->process (-> self fuel-cell))) + (go pelican-fly-to-end (-> self path-to-nest2) (the-as int (-> *PELICAN-bank* run-away-time))) + ) + (pelican-path-update 364088.88 30 0.0 0.0 #t) + (set! (-> self path-pos) + (seek (-> self path-pos) (-> self path-max) (* (-> self path-speed) (-> *display* seconds-per-frame))) + ) + (if (= (-> self path-pos) (-> self path-max)) + (go pelican-to-nest (-> self path-cache) (the-as int (-> self time-cache))) + ) + (none) + ) + :code + (behavior ((arg0 path-control) (arg1 curve-control) (arg2 uint)) + (ja-channel-push! 1 60) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> gp-0 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-0 param 1) 0.5) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (let ((gp-1 (handle->process (-> self fuel-cell)))) + (when (and gp-1 (>= (-> self path-pos) 3.8) (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'query) + (set! (-> a1-5 param 0) (the-as uint 'grab)) + (not (send-event-function gp-1 a1-5)) + ) + ) + (level-hint-spawn (game-text-id zero) (the-as string #f) (-> self entity) *entity-pool* (game-task none)) + (send-event gp-1 'grab self) + (send-event gp-1 'draw #f) + (send-event gp-1 'event-hook #f) + (set! (-> self state-object) #t) + ) + ) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-2 param 1) 0.5) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) (the float (+ (-> a0-15 frame-group data 0 length) -1))) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group! a0-15 (the-as art-joint-anim #f) num-func-seek!) + ) + (ja-channel-push! 1 60) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-17 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-17 param 1) 1.0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! a0-17 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (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) 1.0) + (joint-control-channel-group-eval! a0-18 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (anim-loop) + (none) + ) + :post + pelican-post + ) + +(defstate pelican-to-nest (pelican) + :enter + (behavior ((arg0 path-control) (arg1 int)) + (set! (-> self path) arg0) + (set! (-> self path-pos) 0.0) + (set! (-> self path-max) (the float (+ (-> self path curve num-cverts) -1))) + (set! (-> self path-speed) (/ (* 300.0 (-> self path-max)) (the float arg1))) + (none) + ) + :trans + (behavior () + (pelican-path-update 546133.3 30 0.0 0.0 #f) + (set! (-> self path-pos) + (seek (-> self path-pos) (-> self path-max) (* (-> self path-speed) (-> *display* seconds-per-frame))) + ) + (if (= (-> self path-pos) (-> self path-max)) + (go pelican-wait-at-nest #f) + ) + (none) + ) + :code + (behavior ((arg0 path-control) (arg1 int)) + (pelican-fly + (the-as (function pelican int) (lambda () 1)) + (lambda ((arg0 pelican)) (if (and (>= (-> arg0 path-pos) 4.0) (>= 6.0 (-> arg0 path-pos))) + 1 + 0 + ) + ) + ) + (none) + ) + :post + pelican-post + ) + +(defstate pelican-wait-at-nest (pelican) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'attack) + (case (-> arg3 param 1) + (('explode) + (let ((a0-2 (handle->process (-> self fuel-cell)))) + (if a0-2 + (send-event a0-2 'trans (-> self root-override trans)) + ) + ) + (go pelican-explode #f) + #f + ) + (else + (let* ((gp-0 arg0) + (v1-13 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) + gp-0 + ) + ) + (f30-0 8192.0) + (gp-1 (-> self root-override)) + (s4-0 (-> (the-as process-drawable v1-13) root trans)) + ) + (if (< f30-0 + (fabs + (deg-diff (y-angle gp-1) (vector-y-angle (vector-! (new 'stack-no-clear 'vector) s4-0 (-> gp-1 trans)))) + ) + ) + (go pelican-spit) + ) + ) + ) + ) + ) + ((= v1-0 'touch) + (dummy-55 (-> self root-override) arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 0.7 6144.0 16384.0) + ) + ) + ) + ) + ) + :enter + (behavior ((arg0 symbol)) + (set! (-> self path) (-> self path-from-nest0)) + (set! (-> self path-pos) 0.0) + (set! (-> self path-max) (the float (+ (-> self path curve num-cverts) -1))) + (set! (-> self path-speed) (/ (* 300.0 (-> self path-max)) (the float (-> *PELICAN-bank* from-nest-time)))) + (let ((s5-0 (-> self state-vector))) + (eval-path-curve-div! (-> self path) s5-0 (-> self path-pos) 'interp) + (set! (-> self state-float 0) (/ (* 300.0 (vector-vector-distance (-> self root-override trans) s5-0)) + (the float (-> *PELICAN-bank* land-time)) + ) + ) + ) + (TODO-RENAME-12 (-> self path) (-> self path-vector) (-> self path-pos)) + (when arg0 + (TODO-RENAME-30 (-> self root-override) (-> self state-vector)) + (set-heading-vec! (-> self root-override) (-> self path-vector)) + (let ((a0-7 (handle->process (-> self fuel-cell)))) + (if a0-7 + (send-event a0-7 'draw #f) + ) + ) + (let ((a0-10 (-> self entity extra perm))) + (if (< 2 (-> a0-10 user-int8 0)) + (go pelican-explode #t) + ) + ) + ) + (if (nonzero? (-> self neck)) + (set-mode! (-> self neck) (joint-mod-handler-mode look-at)) + ) + (none) + ) + :exit + (behavior () + (if (nonzero? (-> self neck)) + (set-mode! (-> self neck) (joint-mod-handler-mode flex-blend)) + ) + (none) + ) + :trans + (behavior () + (let ((a1-0 (-> self state-vector)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (vector-seek! gp-0 a1-0 (* (-> self state-float 0) (-> *display* seconds-per-frame))) + (TODO-RENAME-30 (-> self root-override) gp-0) + ) + (dummy-45 (-> self root-override)) + (seek-toward-heading-vec! (-> self root-override) (-> self path-vector) 131072.0 300) + (spool-push *art-control* "pelican-spit-ext" 0 self -99.0) + (none) + ) + :code + (behavior ((arg0 symbol)) + (cond + (arg0 + (ja-channel-set! 1) + ) + (else + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) 0.25) + (joint-control-channel-group! a0-2 (the-as art-joint-anim #f) num-func-loop!) + ) + (ja-channel-push! 1 75) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (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) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (until (vector= (-> self root-override trans) (-> self state-vector)) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) 1.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim #f) num-func-loop!) + ) + (set! (-> self state-float 0) (* 4.0 (-> self state-float 0))) + (ja-channel-push! 1 15) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-11 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-11 param 1) 1.0) + (set! (-> a0-11 frame-num) 0.0) + (joint-control-channel-group! a0-11 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (ja-channel-push! 1 150) + ) + ) + (send-event (handle->process (-> self cam-tracker)) 'message 'release) + (while #t + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-19 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-19 param 1) 1.0) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! a0-19 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-20 (-> self skel root-channel 0))) + (set! (-> a0-20 param 0) (the float (+ (-> a0-20 frame-group data 0 length) -1))) + (set! (-> a0-20 param 1) 1.0) + (joint-control-channel-group-eval! a0-20 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (behavior () + (when *target* + (if *target* + (look-at-enemy! (-> *target* neck) (the-as vector (-> self root-override root-prim prim-core)) 'nothing self) + ) + (if (nonzero? (-> self neck)) + (set-target! (-> self neck) (target-pos 5)) + ) + ) + (pelican-post) + (none) + ) + ) + +(defstate pelican-spit (pelican) + :event + (-> pelican-circle event) + :code + (behavior () + (local-vars (v1-21 symbol) (v1-31 symbol)) + (let* ((gp-0 (get-process *default-dead-pool* manipy #x4000)) + (gp-1 + (ppointer->handle + (when gp-0 + (let ((t9-1 (method-of-type manipy activate))) + (t9-1 (the-as manipy gp-0) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 manipy-init (-> self entity extra trans) (-> self entity) *beachcam-sg* #f) + (-> gp-0 ppointer) + ) + ) + ) + ) + (let ((s5-0 (get-process *default-dead-pool* othercam #x4000))) + (ppointer->handle (when s5-0 + (let ((t9-4 (method-of-type othercam activate))) + (t9-4 (the-as othercam s5-0) (-> gp-1 process 0) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 othercam-init-by-other (-> gp-1 process 0) 4 #f #t) + (-> s5-0 ppointer) + ) + ) + ) + (let* ((s5-1 (get-process *default-dead-pool* fuel-cell #x4000)) + (s4-0 (ppointer->handle (when s5-1 + (let ((t9-7 (method-of-type fuel-cell activate))) + (t9-7 (the-as fuel-cell s5-1) self 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 fuel-cell-init-as-clone (process->handle self) 0) + (-> s5-1 ppointer) + ) + ) + ) + (s5-2 (new 'stack-no-clear 'quaternion)) + ) + (quaternion-copy! s5-2 (-> self root-override quat)) + (until v1-21 + (suspend) + (set! v1-21 (or (not *target*) (process-grab? *target*))) + ) + (send-event (-> gp-1 process 0) 'anim-mode 'clone-anim) + (ja-play-spooled-anim + (new 'static 'spool-anim + :name "pelican-spit-ext" + :index 11 + :parts 2 + :command-list + '((10 send-event camera 'teleport-to-vector-start-string (static-vectorm -179 16 -421))) + ) + (the-as art-joint-anim (-> self draw art-group data 10)) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (until v1-31 + (suspend) + (set! v1-31 (or (not *target*) (process-release? *target*))) + ) + (if (handle->process gp-1) + (deactivate (-> gp-1 process 0)) + ) + (if (handle->process s4-0) + (deactivate (-> s4-0 process 0)) + ) + (quaternion-copy! (-> self root-override quat) s5-2) + ) + ) + (let ((gp-2 (get-process *default-dead-pool* process #x4000))) + (when gp-2 + (let ((t9-18 (method-of-type process activate))) + (t9-18 gp-2 self 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process gp-2 (lambda :behavior pelican + () + (while (or + (-> *setting-control* current ambient) + (-> *setting-control* current movie) + (-> *setting-control* current hint) + ) + (suspend) + ) + (level-hint-spawn + (game-text-id beach-pelican-quick-get-cell) + "sksp0027" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (none) + ) + ) + (-> gp-2 ppointer) + ) + ) + (let ((gp-3 (handle->process (-> self fuel-cell)))) + (when gp-3 + (send-event gp-3 'release) + (set! (-> self path-cache) (-> self path-spit0)) + (let ((s5-3 (new 'stack-no-clear 'vector))) + (eval-path-curve-div! + (-> self path-cache) + s5-3 + (the float (+ (-> self path-cache curve num-cverts) -1)) + 'interp + ) + (send-event gp-3 'trans s5-3) + ) + (send-event gp-3 'draw #t) + (send-event + gp-3 + 'event-hook + (lambda :behavior pelican + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (the-as object (when (or (= arg2 'touch) (= arg2 'attack)) + (let ((v1-7 (birth-pickup-at-point + (-> self root-override trans) + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + (the-as process-drawable *entity-pool*) + (the-as fact-info #f) + ) + ) + ) + (when v1-7 + (set! (-> (the-as collectable (-> v1-7 0)) collect-timeout) 0) + 0 + ) + ) + (deactivate self) + ) + ) + ) + ) + ) + ) + (go pelican-from-nest) + (none) + ) + :post + (behavior () + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 10) + ) + ) + (quaternion-identity! (-> self root-override quat)) + ) + (pelican-post) + (none) + ) + ) + +(defstate pelican-from-nest (pelican) + :enter + (behavior () (set! (-> self path-pos) 1.5) (none)) + :trans + (behavior () + (pelican-path-update 131072.0 150 0.0 0.0 #f) + (set! (-> self path-pos) + (seek (-> self path-pos) (-> self path-max) (* (-> self path-speed) (-> *display* seconds-per-frame))) + ) + (if (= (-> self path-pos) (-> self path-max)) + (go pelican-dive (-> self path-dive1) (-> self path-to-nest1) (the-as uint (-> *PELICAN-bank* to-nest1-time))) + ) + (none) + ) + :code + (behavior () + (pelican-fly + (the-as (function pelican int) (lambda () (rand-vu-int-range 2 4))) + (the-as (function pelican int) zero-func) + ) + (none) + ) + :post + pelican-post + ) + +(defstate pelican-fly-to-end (pelican) + :enter + (behavior ((arg0 path-control) (arg1 int)) + (process-entity-status! self (entity-perm-status complete) #t) + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 0) 10) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self path) arg0) + (set! (-> self path-pos) 0.0) + (set! (-> self path-max) (the float (+ (-> self path curve num-cverts) -1))) + (set! (-> self path-speed) (/ (* 300.0 (-> self path-max)) (the float arg1))) + (set! (-> self state-vector quad) (-> self root-override trans quad)) + (set! (-> self state-float 0) 0.0) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (eval-path-curve-div! (-> self path) gp-1 0.0 'interp) + (set! (-> self state-float 1) (* 0.0073242188 (vector-vector-distance (-> self root-override trans) gp-1))) + ) + (none) + ) + :trans + (behavior () + (pelican-path-update 546133.3 30 0.0 0.0 #f) + (set! (-> self path-pos) + (seek (-> self path-pos) (-> self path-max) (* (-> self path-speed) (-> *display* seconds-per-frame))) + ) + (if (= (-> self path-pos) (-> self path-max)) + (go pelican-wait-at-end #f) + ) + (when (< (- (-> *display* base-frame-counter) (-> self state-time)) (the int (-> self state-float 1))) + (set! (-> self state-float 0) + (/ (the float (- (-> *display* base-frame-counter) (-> self state-time))) (-> self state-float 1)) + ) + (vector-lerp! + (-> self root-override trans) + (-> self state-vector) + (-> self root-override trans) + (-> self state-float 0) + ) + ) + (none) + ) + :code + (behavior ((arg0 path-control) (arg1 int)) + (pelican-fly + (the-as (function pelican int) (lambda () 1)) + (lambda ((arg0 pelican)) (if (and (>= (-> arg0 path-pos) 4.0) (>= 6.0 (-> arg0 path-pos))) + 1 + 0 + ) + ) + ) + (none) + ) + :post + pelican-post + ) + +(defstate pelican-wait-at-end (pelican) + :code + (behavior ((arg0 symbol)) (dummy-18 self) (none)) + ) + +(defstate pelican-explode (pelican) + :code + (behavior ((arg0 symbol)) + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 0) 5) + ) + (when (not arg0) + (sound-play-by-name (static-sound-name "scrate-break") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 (the-as part-tracker gp-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 71) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + (let ((gp-2 (new-stack-vector0))) + (set! (-> gp-2 quad) (-> self root-override trans quad)) + (let ((a0-7 (handle->process (-> self fuel-cell)))) + (when a0-7 + (set! (-> gp-2 quad) (-> (the-as process-drawable a0-7) root trans quad)) + (set! (-> gp-2 y) (+ 8192.0 (-> gp-2 y))) + (deactivate a0-7) + ) + ) + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (let ((v1-29 (birth-pickup-at-point + gp-2 + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + self + (the-as fact-info #f) + ) + ) + ) + (send-event (ppointer->process v1-29) 'movie-pos 1) + ) + ) + ) + (clear-collide-with-as (-> self root-override)) + (ja-channel-set! 0) + (anim-loop) + (none) + ) + :post + (the-as (function none :behavior pelican) ja-post) + ) + +(defmethod init-from-entity! pelican ((obj pelican) (arg0 entity-actor)) + (stack-size-set! (-> obj main-thread) 512) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 12288.0 0.0 12288.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *pelican-sg* '()) + (set! (-> obj draw shadow-ctrl) + (new 'process 'shadow-control -81920.0 4096.0 614400.0 (the-as float 25) 409600.0) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj align) (new 'process 'align-control obj)) + (dotimes (s5-1 8) + (let ((v1-27 (new 'process 'curve-control obj 'path (the float (+ s5-1 1))))) + (set! (-> obj path-data s5-1) v1-27) + (logior! (-> v1-27 flags) (path-control-flag display draw-line draw-point draw-text)) + ) + ) + (set! (-> obj fuel-cell) (the-as handle #f)) + (set! (-> obj cam-tracker) (the-as handle #f)) + (set! (-> obj neck) (new 'process 'joint-mod (joint-mod-handler-mode flex-blend) obj 9)) + (set-vector! (-> obj neck twist-max) 2730.6667 2730.6667 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) 61440.0) + (set! (-> obj neck ignore-angle) 16384.0) + (case (-> obj entity extra perm user-int8 0) + ((10) + (go pelican-wait-at-end #t) + ) + ((5) + (go pelican-wait-at-nest #t) + ) + ((2) + (let* ((s4-1 (get-process *default-dead-pool* manipy #x4000)) + (s5-2 (when s4-1 + (let ((t9-15 (method-of-type manipy activate))) + (t9-15 (the-as manipy s4-1) obj 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-1 + manipy-init + (-> obj root-override trans) + (-> obj entity) + *fuel-cell-sg* + (new 'static 'vector :w 4915.2) + ) + (-> s4-1 ppointer) + ) + ) + ) + (set! (-> obj fuel-cell) (the-as handle (if s5-2 + (ppointer->handle s5-2) + (the-as int #f) + ) + ) + ) + (when s5-2 + (send-event + (ppointer->process s5-2) + 'eval + (lambda :behavior pelican () (let ((v0-0 (create-launch-control (-> *part-group-id-table* 63) self))) + (set! (-> self part) v0-0) + v0-0 + ) + ) + ) + (send-event (ppointer->process s5-2) 'trans-hook fuel-cell-animate) + ) + ) + (go pelican-wait-at-nest #t) + ) + (else + (go pelican-circle) + ) + ) + (none) + ) + + + + diff --git a/goal_src/levels/common/nav-enemy-h.gc b/goal_src/levels/common/nav-enemy-h.gc index db2f7e45c5..8fd2010263 100644 --- a/goal_src/levels/common/nav-enemy-h.gc +++ b/goal_src/levels/common/nav-enemy-h.gc @@ -136,7 +136,7 @@ (TODO-RENAME-48 (_type_) none 48) (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) (TODO-RENAME-50 (_type_ vector) symbol 50) - (dummy-51 (_type_ vector) object 51) + (dummy-51 (_type_) object 51) (dummy-52 (_type_ vector) symbol 52) (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) diff --git a/goal_src/levels/finalboss/green-eco-lurker.gc b/goal_src/levels/finalboss/green-eco-lurker.gc index bb248ea00f..18fe7c8000 100644 --- a/goal_src/levels/finalboss/green-eco-lurker.gc +++ b/goal_src/levels/finalboss/green-eco-lurker.gc @@ -17,6 +17,9 @@ :method-count-assert 76 :size-assert #x1d8 :flag-assert #x4c017001d8 + (:methods + (dummy-51 (_type_ vector) symbol :replace 51) + ) (:states green-eco-lurker-appear green-eco-lurker-appear-land @@ -392,7 +395,7 @@ (set! (-> v1-3 w) (-> obj collide-info root-prim local-sphere w)) ) (if (not (TODO-RENAME-50 obj arg0)) - (return (the-as object #t)) + (return #t) ) ) #f diff --git a/goal_src/levels/maincave/baby-spider.gc b/goal_src/levels/maincave/baby-spider.gc index 0fd521405e..8bab5c3485 100644 --- a/goal_src/levels/maincave/baby-spider.gc +++ b/goal_src/levels/maincave/baby-spider.gc @@ -68,128 +68,121 @@ :shadow 4 ) -(define - *baby-spider-nav-enemy-info* - (new 'static 'nav-enemy-info - :idle-anim 6 - :walk-anim 8 - :turn-anim 8 - :notice-anim 11 - :run-anim 7 - :jump-anim 9 - :jump-land-anim 10 - :victory-anim 12 - :taunt-anim 12 - :die-anim 13 - :neck-joint 18 - :run-travel-speed (meters 7.0) - :run-rotate-speed (degrees 7999.9995) - :run-acceleration (meters 1.0) - :run-turn-time (seconds 0.07333333) - :walk-travel-speed (meters 2.0) - :walk-rotate-speed (degrees 7999.9995) - :walk-acceleration (meters 1.0) - :walk-turn-time (seconds 0.07333333) - :attack-shove-back (meters 3.0) - :attack-shove-up (meters 2.0) - :shadow-size (meters 1.0) - :notice-nav-radius (meters 1.0) - :nav-nearest-y-threshold (meters 10.0) - :notice-distance (meters 30.0) - :stop-chase-distance (meters 40.0) - :frustration-distance (meters 3.0) - :frustration-time #x1c2 - :die-anim-hold-frame 10000000000.0 - :jump-anim-start-frame 2.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 #t - :hover-if-no-ground #f - :use-momentum #f - :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 *baby-spider-nav-enemy-info* (new 'static 'nav-enemy-info + :idle-anim 6 + :walk-anim 8 + :turn-anim 8 + :notice-anim 11 + :run-anim 7 + :jump-anim 9 + :jump-land-anim 10 + :victory-anim 12 + :taunt-anim 12 + :die-anim 13 + :neck-joint 18 + :run-travel-speed (meters 7.0) + :run-rotate-speed (degrees 7999.9995) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.07333333) + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 7999.9995) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.07333333) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 1.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 3.0) + :frustration-time #x1c2 + :die-anim-hold-frame 10000000000.0 + :jump-anim-start-frame 2.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 #t + :hover-if-no-ground #f + :use-momentum #f + :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 - *baby-spider-nav-enemy-info-for-cave-trap* - (new 'static 'nav-enemy-info - :idle-anim 6 - :walk-anim 8 - :turn-anim 8 - :notice-anim 11 - :run-anim 7 - :jump-anim 9 - :jump-land-anim 10 - :victory-anim 12 - :taunt-anim 12 - :die-anim 13 - :neck-joint 18 - :run-travel-speed (meters 7.0) - :run-rotate-speed (degrees 7999.9995) - :run-acceleration (meters 1.0) - :run-turn-time (seconds 0.07333333) - :walk-travel-speed (meters 2.0) - :walk-rotate-speed (degrees 7999.9995) - :walk-acceleration (meters 1.0) - :walk-turn-time (seconds 0.07333333) - :attack-shove-back (meters 3.0) - :attack-shove-up (meters 2.0) - :shadow-size (meters 1.0) - :notice-nav-radius (meters 1.0) - :nav-nearest-y-threshold (meters 10.0) - :notice-distance (meters 80.0) - :stop-chase-distance (meters 90.0) - :frustration-distance (meters 3.0) - :frustration-time #x1c2 - :die-anim-hold-frame 10000000000.0 - :jump-anim-start-frame 2.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 #t - :hover-if-no-ground #f - :use-momentum #f - :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 *baby-spider-nav-enemy-info-for-cave-trap* (new 'static 'nav-enemy-info + :idle-anim 6 + :walk-anim 8 + :turn-anim 8 + :notice-anim 11 + :run-anim 7 + :jump-anim 9 + :jump-land-anim 10 + :victory-anim 12 + :taunt-anim 12 + :die-anim 13 + :neck-joint 18 + :run-travel-speed (meters 7.0) + :run-rotate-speed (degrees 7999.9995) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.07333333) + :walk-travel-speed (meters 2.0) + :walk-rotate-speed (degrees 7999.9995) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.07333333) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 1.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 80.0) + :stop-chase-distance (meters 90.0) + :frustration-distance (meters 3.0) + :frustration-time #x1c2 + :die-anim-hold-frame 10000000000.0 + :jump-anim-start-frame 2.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 #t + :hover-if-no-ground #f + :use-momentum #f + :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! - baby-spider-spawn-params - ((obj baby-spider-spawn-params) - (arg0 symbol) - (arg1 symbol) - (arg2 symbol) - (arg3 symbol) - (arg4 int) - (arg5 int) - (arg6 symbol) - ) +(defmethod init! baby-spider-spawn-params ((obj baby-spider-spawn-params) + (arg0 symbol) + (arg1 symbol) + (arg2 symbol) + (arg3 symbol) + (arg4 int) + (arg5 int) + (arg6 symbol) + ) (set! (-> obj hatched?) arg0) (set! (-> obj fast-start?) arg1) (set! (-> obj die-if-not-visible?) arg2) @@ -198,145 +191,109 @@ (set! (-> obj pickup-amount) arg5) (set! (-> obj event-death) arg6) (let ((v0-0 600)) - (set! (-> obj delay-before-dying-if-not-visible) v0-0) - v0-0 - ) + (set! (-> obj delay-before-dying-if-not-visible) v0-0) + v0-0 + ) ) -(defmethod - set-delay! - baby-spider-spawn-params - ((obj baby-spider-spawn-params) (arg0 int)) +(defmethod set-delay! baby-spider-spawn-params ((obj baby-spider-spawn-params) (arg0 int)) (set! (-> obj delay-before-dying-if-not-visible) arg0) arg0 ) -(defmethod - dummy-44 - baby-spider - ((obj baby-spider) (arg0 process) (arg1 event-message-block)) - (when - ((method-of-type touching-shapes-entry prims-touching?) - (the-as touching-shapes-entry (-> arg1 param 0)) - (-> obj collide-info) - (the-as uint 1) +(defmethod dummy-44 baby-spider ((obj baby-spider) (arg0 process) (arg1 event-message-block)) + (when ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg1 param 0)) + (-> obj collide-info) + (the-as uint 1) + ) + (if (nav-enemy-send-attack arg0 (the-as touching-shapes-entry (-> arg1 param 0)) 'generic) + (go (method-of-object obj nav-enemy-victory)) + ) ) - (if - (nav-enemy-send-attack - arg0 - (the-as touching-shapes-entry (-> arg1 param 0)) - 'generic - ) - (go (method-of-object obj nav-enemy-victory)) - ) - ) ) ;; WARN: rewrite_to_get_var got a none typed variable. Is there unreachable code? [OP: 7] -(defbehavior - baby-spider-default-event-handler baby-spider - ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) +(defbehavior baby-spider-default-event-handler baby-spider ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (let ((v1-0 arg2)) - (the-as object (if (= v1-0 'victory) - (go-virtual nav-enemy-victory) - (nav-enemy-default-event-handler arg0 arg1 arg2 arg3) - ) + (the-as object (if (= v1-0 'victory) + (go-virtual nav-enemy-victory) + (nav-enemy-default-event-handler arg0 arg1 arg2 arg3) + ) + ) ) - ) ) baby-spider-default-event-handler (defmethod common-post baby-spider ((obj baby-spider)) (when (logtest? (-> obj collide-info status) 1) - (vector-deg-seek - (-> obj up-vector) - (-> obj up-vector) - (-> obj collide-info surface-normal) - 910.2222 + (vector-deg-seek (-> obj up-vector) (-> obj up-vector) (-> obj collide-info surface-normal) 910.2222) + (vector-normalize! (-> obj up-vector) 1.0) ) - (vector-normalize! (-> obj up-vector) 1.0) - ) (forward-up-nopitch->quaternion - (-> obj collide-info quat) - (vector-z-quaternion! (new-stack-vector0) (-> obj collide-info quat)) - (-> obj up-vector) - ) + (-> obj collide-info quat) + (vector-z-quaternion! (new-stack-vector0) (-> obj collide-info quat)) + (-> obj up-vector) + ) ((the-as (function nav-enemy none) (find-parent-method baby-spider 39)) obj) (none) ) (defmethod TODO-RENAME-38 baby-spider ((obj baby-spider)) - (dummy-59 - (-> obj collide-info) - (-> obj collide-info transv) - (the-as uint 1) - 8192.0 - #t - #f - #f - ) + (dummy-59 (-> obj collide-info) (-> obj collide-info transv) (the-as uint 1) 8192.0 #t #f #f) (none) ) -(defmethod dummy-51 baby-spider ((obj baby-spider) (arg0 vector)) +(defmethod dummy-51 baby-spider ((obj baby-spider)) (let* ((f0-0 (rand-vu-float-range 0.0 1.0)) (f1-1 (+ 1.0 (* 2.0 f0-0))) (f2-2 f1-1) (f2-4 (/ 1.0 f2-2)) (f0-2 (+ 1.0 (* 0.2 f0-0))) ) - (set! (-> obj delta-wiggle-angle) (* 910.2222 f1-1)) - (set! (-> obj wiggle-factor) (* 1.5 f2-4)) - (let ((f0-3 (* 28672.0 f0-2))) - (set! (-> obj target-speed) f0-3) - (the-as object f0-3) + (set! (-> obj delta-wiggle-angle) (* 910.2222 f1-1)) + (set! (-> obj wiggle-factor) (* 1.5 f2-4)) + (let ((f0-3 (* 28672.0 f0-2))) + (set! (-> obj target-speed) f0-3) + (the-as object f0-3) + ) ) - ) ) (defmethod dummy-52 baby-spider ((obj baby-spider) (arg0 vector)) (+! (-> obj wiggle-angle) (-> obj delta-wiggle-angle)) (if (< 65536.0 (-> obj wiggle-angle)) - (set! (-> obj wiggle-angle) (+ -65536.0 (-> obj wiggle-angle))) - ) + (set! (-> obj wiggle-angle) (+ -65536.0 (-> obj wiggle-angle))) + ) (let* ((v1-3 (-> obj collide-info trans)) (a1-2 (vector-! (new 'stack-no-clear 'vector) v1-3 arg0)) - (s2-0 - (vector-rotate-around-y! (new 'stack-no-clear 'vector) a1-2 16384.0) - ) + (s2-0 (vector-rotate-around-y! (new 'stack-no-clear 'vector) a1-2 16384.0)) (v1-4 - (vector+*! - (new 'stack-no-clear 'vector) - arg0 - s2-0 - (* (-> obj wiggle-factor) (sin (-> obj wiggle-angle))) + (vector+*! (new 'stack-no-clear 'vector) arg0 s2-0 (* (-> obj wiggle-factor) (sin (-> obj wiggle-angle)))) ) - ) (v0-3 (-> obj nav target-pos)) ) - (set! (-> v0-3 quad) (-> v1-4 quad)) - (the-as symbol v0-3) - ) + (set! (-> v0-3 quad) (-> v1-4 quad)) + (the-as symbol v0-3) + ) ) (defmethod dummy-53 baby-spider ((obj baby-spider)) (cond - ((logtest? (-> obj draw status) 8) - (set! (-> obj last-visible-time) (-> *display* base-frame-counter)) - (return #f) - ) - (else - (if (-> obj die-if-not-visible?) - (return - (>= - (- (-> *display* base-frame-counter) (-> obj last-visible-time)) - (-> obj delay-before-dying-if-not-visible) - ) - ) + ((logtest? (-> obj draw status) (draw-status drwf03)) + (set! (-> obj last-visible-time) (-> *display* base-frame-counter)) + (return #f) ) + (else + (if (-> obj die-if-not-visible?) + (return (>= (- (-> *display* base-frame-counter) (-> obj last-visible-time)) + (-> obj delay-before-dying-if-not-visible) + ) + ) + ) + ) ) - ) #f ) @@ -345,56 +302,30 @@ baby-spider-default-event-handler baby-spider-default-event-handler :code (behavior () - (ja-channel-push! 1 0) - (let ((a0-1 (-> self skel root-channel 0))) - (set! - (-> a0-1 frame-group) - (the-as art-joint-anim (-> self draw art-group data 5)) - ) - (set! - (-> a0-1 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 5)) - data - 0 - length + (ja-channel-push! 1 0) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (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!) ) - -1 - ) ) - ) - (set! (-> a0-1 param 1) 1.0) - (set! (-> a0-1 frame-num) 0.0) - (joint-control-channel-group! - a0-1 - (the-as art-joint-anim (-> self draw art-group data 5)) - num-func-seek! - ) + (go baby-spider-resume) + (none) ) - (until (ja-done? 0) - (if (dummy-53 self) - (go baby-spider-die-fast) - ) - (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! - ) - ) - ) - (go baby-spider-resume) - (none) - ) :post (the-as (function none :behavior baby-spider) nav-enemy-simple-post) ) @@ -404,37 +335,28 @@ baby-spider-default-event-handler baby-spider-default-event-handler :code (behavior () - (cond - ((not *target*) - (go-virtual nav-enemy-idle) - ) - ((TODO-RENAME-46 self (-> self nav-info notice-distance)) - (go-virtual nav-enemy-chase) - ) - ((and - (and - *target* - (>= - (-> self enemy-info idle-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) + (cond + ((not *target*) + (go-virtual nav-enemy-idle) + ) + ((TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + ((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) (draw-status drwf03)) ) - ) + (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) - ) + (go-virtual nav-enemy-idle) + (none) ) - (go-virtual nav-enemy-idle) - (none) - ) ) (defstate nav-enemy-idle (baby-spider) @@ -443,36 +365,33 @@ baby-spider-default-event-handler baby-spider-default-event-handler :enter (behavior () - (let ((gp-0 (new 'stack-no-clear 'vector))) - (set! (-> gp-0 quad) (-> self collide-info trans quad)) - (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-idle) enter))) - (if t9-0 - (t9-0) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self collide-info trans quad)) + (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-idle) enter))) + (if t9-0 + (t9-0) + ) + ) + (if (-> self hack-move-above-ground?) + (set! (-> self collide-info trans quad) (-> gp-0 quad)) + ) ) - ) - (if (-> self hack-move-above-ground?) - (set! (-> self collide-info trans quad) (-> gp-0 quad)) - ) + (none) ) - (none) - ) :trans (behavior () - (if (dummy-53 self) - (go baby-spider-die-fast) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-idle) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) ) - (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-idle) trans))) - (if t9-2 - (t9-2) - ) - ) - (none) - ) :post - (behavior () - (ja-post) - (none) - ) + (behavior () (ja-post) (none)) ) (defstate nav-enemy-patrol (baby-spider) @@ -481,76 +400,49 @@ baby-spider-default-event-handler baby-spider-default-event-handler :trans (behavior () - (if (dummy-53 self) - (go baby-spider-die-fast) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-patrol) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) ) - (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-patrol) trans))) - (if t9-2 - (t9-2) - ) - ) - (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 + (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!) + ) ) - -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! - ) - ) - ) - ) + (none) ) - (none) - ) ) (defstate nav-enemy-notice (baby-spider) @@ -559,86 +451,49 @@ baby-spider-default-event-handler baby-spider-default-event-handler :trans (behavior () - (if (dummy-53 self) - (go baby-spider-die-fast) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-notice) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) ) - (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-notice) trans))) - (if t9-2 - (t9-2) - ) - ) - (none) - ) :code (behavior () - (let ((a0-0 (-> self skel root-channel 0))) - (set! (-> a0-0 param 0) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-loop! - ) - ) - (ja-channel-push! 1 51) - (let ((a0-2 (-> self skel root-channel 0))) - (set! - (-> a0-2 frame-group) - (the-as art-joint-anim (-> self draw art-group data 11)) - ) - (set! - (-> a0-2 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 11)) - data - 0 - length + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-loop!) + ) + (ja-channel-push! 1 51) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) 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 11)) 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!) ) - -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 11)) - 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)) + (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) 1.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim #f) num-func-seek!) ) - (set! (-> a0-3 param 1) 1.0) - (joint-control-channel-group-eval! - a0-3 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) + (go-virtual nav-enemy-chase) + (none) ) - (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) 1.0) - (joint-control-channel-group! - a0-5 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (go-virtual nav-enemy-chase) - (none) - ) ) (defstate nav-enemy-chase (baby-spider) @@ -647,60 +502,49 @@ baby-spider-default-event-handler baby-spider-default-event-handler :trans (behavior () - (if (dummy-53 self) - (go baby-spider-die-fast) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self chase-rest-time)) + (go-virtual nav-enemy-victory) + ) + (let ((t9-3 (-> (method-of-type nav-enemy nav-enemy-chase) trans))) + (if t9-3 + (t9-3) + ) + ) + (none) ) - (if - (>= - (- (-> *display* base-frame-counter) (-> self state-time)) - (-> self chase-rest-time) - ) - (go-virtual nav-enemy-victory) - ) - (let ((t9-3 (-> (method-of-type nav-enemy nav-enemy-chase) trans))) - (if t9-3 - (t9-3) - ) - ) - (none) - ) :code (behavior () - (set! (-> self target-nav-time) (-> *display* base-frame-counter)) - (set! (-> self wiggle-time) (+ (-> *display* base-frame-counter) -3000)) - (set! (-> self wiggle-angle) 0.0) - (set! (-> self chase-rest-time) (rand-vu-int-range 300 1200)) - (ja-channel-push! 1 51) - (let* ((gp-0 (-> self skel root-channel 0)) - (t9-2 joint-control-channel-group-eval!) - (a0-2 gp-0) - (a1-2 (-> self draw art-group data 7)) - ) - (t9-2 a0-2 (the-as art-joint-anim a1-2) num-func-identity) - (set! (-> gp-0 frame-num) 0.0) + (set! (-> self target-nav-time) (-> *display* base-frame-counter)) + (set! (-> self wiggle-time) (+ (-> *display* base-frame-counter) -3000)) + (set! (-> self wiggle-angle) 0.0) + (set! (-> self chase-rest-time) (rand-vu-int-range 300 1200)) + (ja-channel-push! 1 51) + (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 - (when (>= (- (-> *display* base-frame-counter) (-> self wiggle-time)) 300) - (set! (-> self wiggle-time) (-> *display* base-frame-counter)) - (dummy-51 self (the-as vector a1-2)) + (when (>= (- (-> *display* base-frame-counter) (-> self wiggle-time)) 300) + (set! (-> self wiggle-time) (-> *display* base-frame-counter)) + (dummy-51 self) + ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-loop!) + ) ) - (suspend) - (let ((a0-5 (-> self skel root-channel 0))) - (set! (-> a0-5 param 0) 1.0) - (let ((t9-4 joint-control-channel-group-eval!)) - (set! a1-2 (the-as art-element #f)) - (t9-4 a0-5 (the-as art-joint-anim a1-2) num-func-loop!) - ) - ) - ) + (none) ) - (none) - ) :post - (behavior () - (dummy-52 self (target-pos 0)) - (nav-enemy-travel-post) - (none) - ) + (behavior () (dummy-52 self (target-pos 0)) (nav-enemy-travel-post) (none)) ) (defstate nav-enemy-stop-chase (baby-spider) @@ -709,16 +553,16 @@ baby-spider-default-event-handler baby-spider-default-event-handler :trans (behavior () - (if (dummy-53 self) - (go baby-spider-die-fast) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-stop-chase) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) ) - (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-stop-chase) trans))) - (if t9-2 - (t9-2) - ) - ) - (none) - ) :code (-> (method-of-type nav-enemy nav-enemy-stop-chase) code) ) @@ -729,93 +573,63 @@ baby-spider-default-event-handler baby-spider-default-event-handler :trans (behavior () - (if (dummy-53 self) - (go baby-spider-die-fast) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-stare) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) ) - (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-stare) trans))) - (if t9-2 - (t9-2) - ) - ) - (none) - ) :code (behavior () - (set! (-> self rotate-speed) 1456355.5) - (set! (-> self turn-time) 22) - (let ((f30-0 (rand-vu-float-range 0.8 1.2))) - (while #t - (logior! (-> self nav-enemy-flags) 16) - (ja-channel-push! 1 30) - (let ((a0-2 (-> self skel root-channel 0))) - (set! - (-> a0-2 frame-group) - (the-as art-joint-anim (-> self draw art-group data 12)) - ) - (set! - (-> a0-2 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 12)) - data - 0 - length + (set! (-> self rotate-speed) 1456355.5) + (set! (-> self turn-time) 22) + (let ((f30-0 (rand-vu-float-range 0.8 1.2))) + (while #t + (logior! (-> self nav-enemy-flags) 16) + (ja-channel-push! 1 30) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 12))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 12)) 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 12)) 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!) + ) + ) + (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!) + ) + (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) + (let ((gp-0 (rand-vu-int-range 300 600)) + (s5-0 (-> *display* base-frame-counter)) + ) + (until (>= (- (-> *display* base-frame-counter) s5-0) gp-0) + (let ((v1-33 (-> self skel root-channel 0))) + (set! (-> v1-33 num-func) num-func-identity) + (set! (-> v1-33 frame-num) 0.0) + ) + (ja-blend-eval) + (suspend) + (suspend) + ) ) - -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 12)) - 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! - ) - ) - ) - (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! - ) - ) - (set! (-> self nav-enemy-flags) (logand -17 (-> self nav-enemy-flags))) - (let ((gp-0 (rand-vu-int-range 300 600)) - (s5-0 (-> *display* base-frame-counter)) - ) - (until (>= (- (-> *display* base-frame-counter) s5-0) gp-0) - (let ((v1-33 (-> self skel root-channel 0))) - (set! (-> v1-33 num-func) num-func-identity) - (set! (-> v1-33 frame-num) 0.0) - ) - (ja-blend-eval) - (suspend) - (suspend) - ) - ) - ) + (none) ) - (none) - ) ) (defstate nav-enemy-give-up (baby-spider) @@ -824,116 +638,64 @@ baby-spider-default-event-handler baby-spider-default-event-handler :trans (behavior () - (if (dummy-53 self) - (go baby-spider-die-fast) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-give-up) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) ) - (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-give-up) trans))) - (if t9-2 - (t9-2) - ) - ) - (none) - ) :code (behavior () - (ja-channel-push! 1 22) - (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 + (ja-channel-push! 1 22) + (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.0) + (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) + (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!) ) - -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 6)) - 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)) + (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) + (nav-enemy-get-new-patrol-point) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-7 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) 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 6)) num-func-seek!) ) - (set! (-> a0-2 param 1) 1.0) - (joint-control-channel-group-eval! - a0-2 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (logclear! (-> self nav flags) (nav-control-flags bit17 bit19)) - (nav-enemy-get-new-patrol-point) - (let ((a0-7 (-> self skel root-channel 0))) - (set! - (-> a0-7 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) - ) - (set! - (-> a0-7 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 6)) - data - 0 - length + (until (ja-done? 0) + (seek-to-point-toward-point! + (-> self collide-info) + (-> self nav destination-pos) + (-> self rotate-speed) + (-> self turn-time) + ) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) ) - -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 6)) - num-func-seek! - ) + (go-virtual nav-enemy-patrol) + (none) ) - (until (ja-done? 0) - (seek-to-point-toward-point! - (-> self collide-info) - (-> self nav destination-pos) - (-> self rotate-speed) - (-> self turn-time) - ) - (suspend) - (let ((a0-9 (-> self skel root-channel 0))) - (set! - (-> a0-9 param 0) - (the float (+ (-> a0-9 frame-group data 0 length) -1)) - ) - (set! (-> a0-9 param 1) 1.0) - (joint-control-channel-group-eval! - a0-9 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (go-virtual nav-enemy-patrol) - (none) - ) ) (defstate nav-enemy-attack (baby-spider) @@ -942,65 +704,39 @@ baby-spider-default-event-handler baby-spider-default-event-handler :trans (behavior () - (if (dummy-53 self) - (go baby-spider-die-fast) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-attack) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) ) - (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-attack) trans))) - (if t9-2 - (t9-2) - ) - ) - (none) - ) :code (behavior () - (ja-channel-push! 1 22) - (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 + (ja-channel-push! 1 22) + (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.0) + (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) + (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!) ) - -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 6)) - num-func-seek! - ) + (go-virtual nav-enemy-victory) + (none) ) - (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! - ) - ) - ) - (go-virtual nav-enemy-victory) - (none) - ) ) (defstate nav-enemy-victory (baby-spider) @@ -1009,16 +745,16 @@ baby-spider-default-event-handler baby-spider-default-event-handler :trans (behavior () - (if (dummy-53 self) - (go baby-spider-die-fast) + (if (dummy-53 self) + (go baby-spider-die-fast) + ) + (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-victory) trans))) + (if t9-2 + (t9-2) + ) + ) + (none) ) - (let ((t9-2 (-> (method-of-type nav-enemy nav-enemy-victory) trans))) - (if t9-2 - (t9-2) - ) - ) - (none) - ) :code (-> (method-of-type nav-enemy nav-enemy-victory) code) ) @@ -1027,25 +763,25 @@ baby-spider-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior baby-spider) - process-drawable-death-event-handler - ) + (function process int symbol event-message-block object :behavior baby-spider) + process-drawable-death-event-handler + ) :enter (behavior () - (let ((v1-0 (-> self event-death))) - (if v1-0 - (send-event (ppointer->process (-> self parent)) v1-0) - ) + (let ((v1-0 (-> self event-death))) + (if v1-0 + (send-event (ppointer->process (-> self parent)) v1-0) + ) + ) + (set! (-> self draw bounds y) 8192.0) + (set! (-> self draw bounds w) 22528.0) + (let ((t9-1 (-> (method-of-type nav-enemy nav-enemy-die) enter))) + (if t9-1 + (t9-1) + ) + ) + (none) ) - (set! (-> self draw bounds y) 8192.0) - (set! (-> self draw bounds w) 22528.0) - (let ((t9-1 (-> (method-of-type nav-enemy nav-enemy-die) enter))) - (if t9-1 - (t9-1) - ) - ) - (none) - ) ) (defstate baby-spider-die-fast (baby-spider) @@ -1053,48 +789,35 @@ baby-spider-default-event-handler baby-spider-default-event-handler :code (behavior () - (dummy-18 self) - (let ((v1-2 (-> self event-death))) - (if v1-2 - (send-event (ppointer->process (-> self parent)) v1-2) - ) + (dummy-18 self) + (let ((v1-2 (-> self event-death))) + (if v1-2 + (send-event (ppointer->process (-> self parent)) v1-2) + ) + ) + (none) ) - (none) - ) ) (defmethod initialize-collision baby-spider ((obj baby-spider)) - (let - ((s5-0 - (new - 'process - 'collide-shape-moving - obj - (collide-list-enum usually-hit-by-player) + (let ((s5-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) 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 3)))) + (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) 2) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 4096.0) + (set-root-prim! s5-0 s4-0) ) - ) + (set! (-> s5-0 nav-radius) 4096.0) + (backup-collide-with-as s5-0) + (set! (-> obj collide-info) 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 3)))) - (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) 2) - (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 4096.0) - (set-root-prim! s5-0 s4-0) - ) - (set! (-> s5-0 nav-radius) 4096.0) - (backup-collide-with-as s5-0) - (set! (-> obj collide-info) s5-0) - ) 0 (none) ) @@ -1103,13 +826,13 @@ baby-spider-default-event-handler (set! (-> obj last-visible-time) (-> *display* base-frame-counter)) (initialize-skeleton obj *baby-spider-sg* '()) (if (= (-> obj parent 0 type) cave-trap) - (TODO-RENAME-45 obj *baby-spider-nav-enemy-info-for-cave-trap*) - (TODO-RENAME-45 obj *baby-spider-nav-enemy-info*) - ) + (TODO-RENAME-45 obj *baby-spider-nav-enemy-info-for-cave-trap*) + (TODO-RENAME-45 obj *baby-spider-nav-enemy-info*) + ) (let ((v1-11 (-> obj draw shadow-ctrl settings))) - (set! (-> v1-11 flags) (logand -9 (-> v1-11 flags))) - (set! (-> v1-11 fade-dist) 98304.0) - ) + (set! (-> v1-11 flags) (logand -9 (-> v1-11 flags))) + (set! (-> v1-11 fade-dist) 98304.0) + ) (vector-float*! (-> obj collide-info scale) *identity-vector* 0.63) (set! (-> obj neck up) (the-as uint 1)) (set! (-> obj neck nose) (the-as uint 2)) @@ -1124,19 +847,10 @@ baby-spider-default-event-handler (none) ) -(defbehavior - baby-spider-init-by-other baby-spider - ((arg0 baby-spider) - (arg1 vector) - (arg2 vector) - (arg3 baby-spider-spawn-params) - ) +(defbehavior baby-spider-init-by-other baby-spider ((arg0 baby-spider) (arg1 vector) (arg2 vector) (arg3 baby-spider-spawn-params)) (set! (-> self event-death) (-> arg3 event-death)) (set! (-> self die-if-not-visible?) (-> arg3 die-if-not-visible?)) - (set! - (-> self delay-before-dying-if-not-visible) - (-> arg3 delay-before-dying-if-not-visible) - ) + (set! (-> self delay-before-dying-if-not-visible) (-> arg3 delay-before-dying-if-not-visible)) (initialize-collision self) (logior! (-> self mask) (process-mask actor-pause)) (set! (-> self collide-info trans quad) (-> arg1 quad)) @@ -1149,27 +863,24 @@ baby-spider-default-event-handler (set! (-> self enemy-info pickup-type) (the-as pickup-type (-> arg3 pickup))) (set! (-> self enemy-info pickup-amount) (the float (-> arg3 pickup-amount))) (create-connection! - *cavecrystal-light-control* - self - (-> self entity) - (the-as - (function object object object object object) - cavecrystal-light-control-default-callback + *cavecrystal-light-control* + self + (-> self entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 4096.0 ) - -1 - 4096.0 - ) (cond - ((-> arg3 hatched?) - (go baby-spider-hatching) + ((-> arg3 hatched?) + (go baby-spider-hatching) + ) + ((-> arg3 fast-start?) + (go baby-spider-resume) + ) + (else + (go-virtual nav-enemy-idle) + ) ) - ((-> arg3 fast-start?) - (go baby-spider-resume) - ) - (else - (go-virtual nav-enemy-idle) - ) - ) (none) ) @@ -1182,30 +893,18 @@ baby-spider-default-event-handler (process-drawable-from-entity! obj arg0) (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) (logior! (-> obj mask) (process-mask actor-pause)) - (set! - (-> obj nav) - (new 'process 'nav-control (-> obj collide-info) 24 40960.0) - ) - (logior! - (-> obj nav flags) - (nav-control-flags display-marks bit3 bit5 bit6 bit7) - ) + (set! (-> obj nav) (new 'process 'nav-control (-> obj collide-info) 24 40960.0)) + (logior! (-> obj nav flags) (nav-control-flags display-marks bit3 bit5 bit6 bit7)) (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) - ) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) (create-connection! - *cavecrystal-light-control* - obj - (-> obj entity) - (the-as - (function object object object object object) - cavecrystal-light-control-default-callback + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 4096.0 ) - -1 - 4096.0 - ) (TODO-RENAME-48 obj) (go (method-of-object obj nav-enemy-idle)) (none) diff --git a/goal_src/levels/misty/muse.gc b/goal_src/levels/misty/muse.gc index fd78564a4b..90f6fad318 100644 --- a/goal_src/levels/misty/muse.gc +++ b/goal_src/levels/misty/muse.gc @@ -48,44 +48,33 @@ (defun analyze-point-on-path-segment ((arg0 point-on-path-segment-info)) (vector-! (-> arg0 dir) (-> arg0 segment 1) (the-as vector (-> arg0 segment))) (vector-normalize! (-> arg0 dir) 1.0) - (set! - (-> arg0 segment-length) - (vector-vector-distance - (the-as vector (-> arg0 segment)) - (-> arg0 segment 1) - ) - ) + (set! (-> arg0 segment-length) (vector-vector-distance (the-as vector (-> arg0 segment)) (-> arg0 segment 1))) (let ((s5-0 (new 'stack-no-clear 'vector))) - (vector-! s5-0 (the-as vector (-> arg0 segment)) (-> arg0 point)) - (vector+*! s5-0 s5-0 (-> arg0 dir) (- (vector-dot s5-0 (-> arg0 dir)))) - (vector+! (-> arg0 nearest-point) (-> arg0 point) s5-0) - (set! (-> arg0 distance-to-segment) (vector-length s5-0)) - (vector-! s5-0 (-> arg0 point) (the-as vector (-> arg0 segment))) - (set! - (-> arg0 parametric-index) - (/ (vector-dot (-> arg0 dir) s5-0) (-> arg0 segment-length)) + (vector-! s5-0 (the-as vector (-> arg0 segment)) (-> arg0 point)) + (vector+*! s5-0 s5-0 (-> arg0 dir) (- (vector-dot s5-0 (-> arg0 dir)))) + (vector+! (-> arg0 nearest-point) (-> arg0 point) s5-0) + (set! (-> arg0 distance-to-segment) (vector-length s5-0)) + (vector-! s5-0 (-> arg0 point) (the-as vector (-> arg0 segment))) + (set! (-> arg0 parametric-index) (/ (vector-dot (-> arg0 dir) s5-0) (-> arg0 segment-length))) ) - ) (cond - ((< (-> arg0 parametric-index) 0.0) - (set! (-> arg0 parametric-index) 0.0) - (set! (-> arg0 nearest-point quad) (-> arg0 segment 0 quad)) - (let - ((f0-10 (vector-vector-distance (-> arg0 nearest-point) (-> arg0 point)))) - (set! (-> arg0 distance-to-segment) f0-10) - f0-10 + ((< (-> arg0 parametric-index) 0.0) + (set! (-> arg0 parametric-index) 0.0) + (set! (-> arg0 nearest-point quad) (-> arg0 segment 0 quad)) + (let ((f0-10 (vector-vector-distance (-> arg0 nearest-point) (-> arg0 point)))) + (set! (-> arg0 distance-to-segment) f0-10) + f0-10 + ) + ) + ((< 1.0 (-> arg0 parametric-index)) + (set! (-> arg0 parametric-index) 1.0) + (set! (-> arg0 nearest-point quad) (-> arg0 segment 1 quad)) + (let ((f0-13 (vector-vector-distance (-> arg0 nearest-point) (-> arg0 point)))) + (set! (-> arg0 distance-to-segment) f0-13) + f0-13 + ) ) ) - ((< 1.0 (-> arg0 parametric-index)) - (set! (-> arg0 parametric-index) 1.0) - (set! (-> arg0 nearest-point quad) (-> arg0 segment 1 quad)) - (let - ((f0-13 (vector-vector-distance (-> arg0 nearest-point) (-> arg0 point)))) - (set! (-> arg0 distance-to-segment) f0-13) - f0-13 - ) - ) - ) ) (defbehavior muse-get-path-point muse ((arg0 vector) (arg1 int)) @@ -101,103 +90,79 @@ (f24-0 4096000.0) (f28-0 0.0) ) - (let ((s5-0 (+ (-> self path curve num-cverts) -1)) - (s4-0 (target-pos 0)) + (let ((s5-0 (+ (-> self path curve num-cverts) -1)) + (s4-0 (target-pos 0)) + ) + (dotimes (s3-0 s5-0) + (let ((f22-0 (the float s3-0))) + (let ((f20-0 (the float (+ s3-0 1)))) + (eval-path-curve-div! (-> self path) (the-as vector (-> gp-0 segment)) f22-0 'interp) + (eval-path-curve-div! (-> self path) (-> gp-0 segment 1) f20-0 'interp) + ) + (set! (-> gp-0 point quad) (-> s4-0 quad)) + (analyze-point-on-path-segment gp-0) + (when (< (-> gp-0 distance-to-segment) f24-0) + (set! f24-0 (-> gp-0 distance-to-segment)) + (set! f28-0 (+ f22-0 (-> gp-0 parametric-index))) + ) + (set! (-> gp-0 point quad) (-> self collide-info trans quad)) + (analyze-point-on-path-segment gp-0) + (when (< (-> gp-0 distance-to-segment) f26-0) + (set! f26-0 (-> gp-0 distance-to-segment)) + (set! f30-0 (+ f22-0 (-> gp-0 parametric-index))) + ) + ) + 0 + ) + ) + (let ((f0-6 (- f30-0 f28-0))) + (if (< f0-6 (* -0.5 (-> self max-path-index))) + (+! f0-6 (-> self max-path-index)) + ) + (if (< (* 0.5 (-> self max-path-index)) f0-6) + (set! f0-6 (- f0-6 (-> self max-path-index))) + ) + (cond + ((>= f0-6 0.0) + (set! (-> self dest-path-index) (the float (the int (+ 2.5 f30-0)))) + (if (>= (-> self dest-path-index) (-> self max-path-index)) + (set! (-> self dest-path-index) (- (-> self dest-path-index) (-> self max-path-index))) + ) ) - (dotimes (s3-0 s5-0) - (let ((f22-0 (the float s3-0))) - (let ((f20-0 (the float (+ s3-0 1)))) - (eval-path-curve-div! - (-> self path) - (the-as vector (-> gp-0 segment)) - f22-0 - 'interp + (else + (set! (-> self dest-path-index) (+ -1.5 f30-0)) + (if (< (-> self dest-path-index) 0.0) + (+! (-> self dest-path-index) (-> self max-path-index)) + ) + (set! (-> self dest-path-index) (the float (the int (-> self dest-path-index)))) + ) ) - (eval-path-curve-div! (-> self path) (-> gp-0 segment 1) f20-0 'interp) - ) - (set! (-> gp-0 point quad) (-> s4-0 quad)) - (analyze-point-on-path-segment gp-0) - (when (< (-> gp-0 distance-to-segment) f24-0) - (set! f24-0 (-> gp-0 distance-to-segment)) - (set! f28-0 (+ f22-0 (-> gp-0 parametric-index))) - ) - (set! (-> gp-0 point quad) (-> self collide-info trans quad)) - (analyze-point-on-path-segment gp-0) - (when (< (-> gp-0 distance-to-segment) f26-0) - (set! f26-0 (-> gp-0 distance-to-segment)) - (set! f30-0 (+ f22-0 (-> gp-0 parametric-index))) - ) ) - 0 - ) ) - (let ((f0-6 (- f30-0 f28-0))) - (if (< f0-6 (* -0.5 (-> self max-path-index))) - (+! f0-6 (-> self max-path-index)) - ) - (if (< (* 0.5 (-> self max-path-index)) f0-6) - (set! f0-6 (- f0-6 (-> self max-path-index))) - ) - (cond - ((>= f0-6 0.0) - (set! (-> self dest-path-index) (the float (the int (+ 2.5 f30-0)))) - (if (>= (-> self dest-path-index) (-> self max-path-index)) - (set! - (-> self dest-path-index) - (- (-> self dest-path-index) (-> self max-path-index)) - ) - ) - ) - (else - (set! (-> self dest-path-index) (+ -1.5 f30-0)) - (if (< (-> self dest-path-index) 0.0) - (+! (-> self dest-path-index) (-> self max-path-index)) - ) - (set! - (-> self dest-path-index) - (the float (the int (-> self dest-path-index))) - ) - ) - ) - ) - ) - (eval-path-curve-div! - (-> self path) - (-> self dest-point) - (-> self dest-path-index) - 'interp - ) + (eval-path-curve-div! (-> self path) (-> self dest-point) (-> self dest-path-index) 'interp) 0 (none) ) -(defmethod dummy-51 muse ((obj muse) (arg0 vector)) +(defmethod dummy-51 muse ((obj muse)) (dotimes (s5-0 2) - (let ((v1-2 (rand-vu-int-range 3 (+ (-> obj node-list length) -1)))) - (sp-launch-particles-var - *sp-particle-system-2d* - (-> *part-id-table* 271) - (vector<-cspace! - (new 'stack-no-clear 'vector) - (-> obj node-list data v1-2) + (let ((v1-2 (rand-vu-int-range 3 (+ (-> obj node-list length) -1)))) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 271) + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data v1-2)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) ) - (the-as sparticle-launch-state #f) - (the-as sparticle-launch-control #f) - 1.0 - ) ) - ) (the-as object 0) ) (defmethod common-post muse ((obj muse)) - (let* ((a0-1 *art-control*) - (t9-0 (method-of-object a0-1 spool-push)) - (a1-0 (-> obj anim name)) - ) - (t9-0 a0-1 a1-0 0 obj -99.0) - (dummy-51 obj (the-as vector a1-0)) - ) + (spool-push *art-control* (-> obj anim name) 0 obj -99.0) + (dummy-51 obj) ((method-of-type nav-enemy common-post) obj) (none) ) @@ -224,168 +189,76 @@ nav-enemy-default-event-handler (defstate muse-idle (muse) :event (the-as - (function process int symbol event-message-block object :behavior muse) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior muse) + nav-enemy-default-event-handler + ) :trans (behavior () - (set! - (-> self sprint-distance) - (seek - (-> self sprint-distance) - 61440.0 - (* 8192.0 (-> *display* seconds-per-frame)) - ) + (set! (-> self sprint-distance) + (seek (-> self sprint-distance) 61440.0 (* 8192.0 (-> *display* seconds-per-frame))) + ) + (if (and *target* (>= 102400.0 (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)))) + (level-hint-spawn (game-text-id zero) (the-as string #f) (-> self entity) *entity-pool* (game-task none)) + ) + (if (and *target* (>= 81920.0 (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)))) + (go-virtual nav-enemy-chase) + ) + (none) ) - (if - (and - *target* - (>= - 102400.0 - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) - ) - ) - ) - (level-hint-spawn - (game-text-id zero) - (the-as string #f) - (-> self entity) - *entity-pool* - (game-task none) - ) - ) - (if - (and - *target* - (>= - 81920.0 - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) - ) - ) - ) - (go-virtual nav-enemy-chase) - ) - (none) - ) :code (behavior () - (when (= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 4) ) - (-> self draw art-group data 4) + (ja-channel-push! 1 30) + (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!) + ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (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!) ) - (ja-channel-push! 1 30) - (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! - ) - ) - (let ((a0-6 (-> self skel root-channel 0))) - (set! - (-> a0-6 frame-group) - (the-as art-joint-anim (-> self draw art-group data 6)) - ) - (set! - (-> a0-6 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 6)) - data - 0 - length - ) - -1 ) - ) ) - (set! (-> a0-6 param 1) 1.0) - (set! (-> a0-6 frame-num) 0.0) - (joint-control-channel-group! - a0-6 - (the-as art-joint-anim (-> self draw art-group data 6)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (ja-blend-eval) - (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! - ) - ) - ) - ) - (while #t - (let ((a0-9 (-> self skel root-channel 0))) - (set! - (-> a0-9 frame-group) - (the-as art-joint-anim (-> self draw art-group data 3)) - ) - (set! - (-> a0-9 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 3)) - data - 0 - length - ) - -1 + (while #t + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (spool-push *art-control* (-> self anim name) 0 self -99.0) + (dummy-51 self) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) ) - ) ) - (set! (-> a0-9 param 1) 1.0) - (set! (-> a0-9 frame-num) 0.0) - (joint-control-channel-group! - a0-9 - (the-as art-joint-anim (-> self draw art-group data 3)) - num-func-seek! - ) - ) - (until (ja-done? 0) - (let* ((a0-10 *art-control*) - (t9-7 (method-of-object a0-10 spool-push)) - (a1-5 (-> self anim name)) - ) - (t9-7 a0-10 a1-5 0 self -99.0) - (dummy-51 self (the-as vector a1-5)) - ) - (suspend) - (let ((a0-12 (-> self skel root-channel 0))) - (set! - (-> a0-12 param 0) - (the float (+ (-> a0-12 frame-group data 0 length) -1)) - ) - (set! (-> a0-12 param 1) 1.0) - (joint-control-channel-group-eval! - a0-12 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) + (none) ) - (none) - ) :post (the-as (function none :behavior muse) ja-post) ) @@ -394,177 +267,125 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior muse) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior muse) + 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 () - (cond - ((or - (not *target*) - (< - 102400.0 - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) - ) + (cond + ((or + (not *target*) + (< 102400.0 (vector-vector-distance (-> self collide-info trans) (-> *target* control trans))) + ) + (set! (-> self target-speed) 0.0) + (if (= (-> self momentum-speed) 0.0) + (go muse-idle) + ) ) - ) - (set! (-> self target-speed) 0.0) - (if (= (-> self momentum-speed) 0.0) - (go muse-idle) - ) - ) - ((or - (not *target*) - (< - (-> self sprint-distance) - (vector-vector-distance - (-> self collide-info trans) - (-> *target* control trans) - ) + ((or + (not *target*) + (< (-> self sprint-distance) + (vector-vector-distance (-> self collide-info trans) (-> *target* control trans)) + ) + ) + (set! (-> self target-speed) 40960.0) ) + (else + (set! (-> self target-speed) 61440.0) + ) ) - (set! (-> self target-speed) 40960.0) - ) - (else - (set! (-> self target-speed) 61440.0) - ) + (set! (-> self sprint-distance) + (seek (-> self sprint-distance) 0.0 (* 4096.0 (-> *display* seconds-per-frame))) + ) + (muse-check-dest-point) + (none) ) - (set! - (-> self sprint-distance) - (seek - (-> self sprint-distance) - 0.0 - (* 4096.0 (-> *display* seconds-per-frame)) - ) - ) - (muse-check-dest-point) - (none) - ) :code (behavior () - (cond - ((= (if (> (-> self skel active-channels) 0) - (-> self skel root-channel 0 frame-group) - ) - (-> self draw art-group data 3) - ) - (ja-channel-push! 1 30) - (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! - ) - ) - (let ((a0-6 (-> self skel root-channel 0))) - (set! - (-> a0-6 frame-group) - (the-as art-joint-anim (-> self draw art-group data 5)) - ) - (set! - (-> a0-6 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 5)) - data - 0 - length + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 3) ) - -1 + (ja-channel-push! 1 30) + (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!) ) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) 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 5)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (else + (ja-channel-push! 1 30) ) - ) - (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 5)) - num-func-seek! - ) ) - (until (ja-done? 0) - (ja-blend-eval) + (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 4)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t (suspend) - (let ((a0-7 (-> self skel root-channel 0))) - (set! - (-> a0-7 param 0) - (the float (+ (-> a0-7 frame-group data 0 length) -1)) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) (* 0.000016276043 (-> self momentum-speed))) + (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-loop!) ) - (set! (-> a0-7 param 1) 1.0) - (joint-control-channel-group-eval! - a0-7 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) ) - ) - (else - (ja-channel-push! 1 30) - ) + (none) ) - (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 4)) - num-func-identity - ) - (set! (-> gp-0 frame-num) 0.0) - ) - (while #t - (suspend) - (let ((a0-11 (-> self skel root-channel 0))) - (set! (-> a0-11 param 0) (* 0.000016276043 (-> self momentum-speed))) - (joint-control-channel-group-eval! - a0-11 - (the-as art-joint-anim #f) - num-func-loop! - ) - ) - ) - (none) - ) :post (behavior () - (set! (-> self nav destination-pos quad) (-> self dest-point quad)) - (dummy-19 - (-> self nav) - (-> self nav target-pos) - (-> self collide-info) - (-> self nav destination-pos) - 546133.3 + (set! (-> self nav destination-pos quad) (-> self dest-point quad)) + (dummy-19 + (-> self nav) + (-> self nav target-pos) + (-> self collide-info) + (-> self nav destination-pos) + 546133.3 + ) + (if (logtest? (nav-control-flags bit21) (-> self nav flags)) + (logclear! (-> self nav flags) (nav-control-flags bit10)) + ) + (nav-enemy-travel-post) + (none) ) - (if (logtest? (nav-control-flags bit21) (-> self nav flags)) - (logclear! (-> self nav flags) (nav-control-flags bit10)) - ) - (nav-enemy-travel-post) - (none) - ) ) (defstate nav-enemy-jump (muse) :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior muse) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior muse) + nav-enemy-default-event-handler + ) :enter (behavior () - ((-> (method-of-type nav-enemy nav-enemy-jump) enter)) - (set! (-> self nav-enemy-flags) (logand -513 (-> self nav-enemy-flags))) - (none) - ) + ((-> (method-of-type nav-enemy nav-enemy-jump) enter)) + (set! (-> self nav-enemy-flags) (logand -513 (-> self nav-enemy-flags))) + (none) + ) :code (-> (method-of-type nav-enemy nav-enemy-jump) code) ) @@ -573,339 +394,233 @@ nav-enemy-default-event-handler :virtual #t :event (the-as - (function process int symbol event-message-block object :behavior muse) - nav-enemy-default-event-handler - ) + (function process int symbol event-message-block object :behavior muse) + nav-enemy-default-event-handler + ) :code (behavior () - (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 1) 1.0) - (joint-control-channel-group! - a0-0 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - (ja-channel-push! 1 22) - (let ((gp-0 (-> self skel root-channel 0))) - (set! - (-> gp-0 frame-group) - (the-as art-joint-anim (-> self draw art-group data 4)) - ) - (set! - (-> gp-0 param 0) - (the - float - (+ - (-> - (the-as art-joint-anim (-> self draw art-group data 4)) - data - 0 - length + (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 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) + ) + (ja-channel-push! 1 22) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> gp-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> gp-0 param 1) 0.8) + (set! (-> gp-0 frame-num) (ja-aframe 6.0 0)) + (joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 0.8) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) ) - -1 - ) ) - ) - (set! (-> gp-0 param 1) 0.8) - (set! (-> gp-0 frame-num) (ja-aframe 6.0 0)) - (joint-control-channel-group! - gp-0 - (the-as art-joint-anim (-> self draw art-group data 4)) - num-func-seek! - ) + (go-virtual nav-enemy-chase) + (none) ) - (until (ja-done? 0) - (ja-blend-eval) - (suspend) - (let ((a0-4 (-> self skel root-channel 0))) - (set! - (-> a0-4 param 0) - (the float (+ (-> a0-4 frame-group data 0 length) -1)) - ) - (set! (-> a0-4 param 1) 0.8) - (joint-control-channel-group-eval! - a0-4 - (the-as art-joint-anim #f) - num-func-seek! - ) - ) - ) - (go-virtual nav-enemy-chase) - (none) - ) ) (defstate muse-caught (muse) :event - (the-as - (function process int symbol event-message-block object :behavior muse) - #f - ) + (the-as (function process int symbol event-message-block object :behavior muse) #f) :trans - (behavior () - (spool-push *art-control* (-> self anim name) 0 self -1.0) - (none) - ) + (behavior () (spool-push *art-control* (-> self anim name) 0 self -1.0) (none)) :code (behavior () - (sound-play-by-name - (static-sound-name "money-pickup") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) - (close-specific-task! (game-task misty-muse) (task-status need-reminder)) - (process-entity-status! self (entity-perm-status dead) #t) - (suspend) - (let ((a1-3 (new 'stack-no-clear 'event-message-block))) - (set! (-> a1-3 from) self) - (set! (-> a1-3 num-params) 1) - (set! (-> a1-3 message) 'clone-anim) - (set! (-> a1-3 param 0) (the-as uint self)) - (when (send-event-function *target* a1-3) - (set-blackout-frames 3000) - (let ((gp-1 (res-lump-struct (-> self entity) 'movie-pos vector))) - (cond - (gp-1 - (TODO-RENAME-30 (-> self collide-info) gp-1) - (set-yaw-angle-clear-roll-pitch! (-> self collide-info) (-> gp-1 w)) - ) - (else - (TODO-RENAME-30 (-> self collide-info) (-> *target* control trans)) - (quaternion-copy! - (-> self collide-info quat) - (-> *target* control quat) - ) - (dummy-60 (-> self collide-info) 40960.0 40960.0 #f (the-as uint 1)) - ) - ) - ) - (send-event *target* 'trans 'save (-> self old-target-pos)) - (send-event (ppointer->process (-> *target* sidekick)) 'matrix 'play-anim) - (send-event *target* 'blend-shape #t) - (if (!= *kernel-boot-message* 'play) - (set! - (-> self trans-hook) - (lambda :behavior muse - () - (spool-push *art-control* (-> self victory-anim name) 0 self -1.0) - (none) - ) - ) - ) - (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 - ) - (logclear! (-> self mask) (process-mask enemy)) - (let ((gp-2 (get-process *default-dead-pool* othercam #x4000))) - (when gp-2 - (let ((t9-19 (method-of-type othercam activate))) - (t9-19 - (the-as othercam gp-2) - self - 'othercam - (the-as pointer #x70004000) - ) - ) - (run-now-in-process gp-2 othercam-init-by-other self 3 #f #t) - (-> gp-2 ppointer) - ) - ) - (auto-save-command 'auto-save 0 0 *default-pool*) - (ja-play-spooled-anim - (-> self anim) - (the-as art-joint-anim (-> self draw art-group data 3)) - (the-as art-joint-anim (-> self draw art-group data 3)) - (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) - (cond - ((!= *kernel-boot-message* 'play) - (set-blackout-frames 0) - (ja-channel-set! 0) - (ja-post) - (clear-collide-with-as (-> self collide-info)) - (send-event *target* 'trans 'reset) - (let - ((gp-4 - (ppointer->handle - (birth-pickup-at-point - (target-pos 0) - (pickup-type fuel-cell) - (the float (-> self entity extra perm task)) - #f - self - (the-as fact-info #f) + (sound-play-by-name (static-sound-name "money-pickup") (new-sound-id) 1024 0 0 1 #t) + (close-specific-task! (game-task misty-muse) (task-status need-reminder)) + (process-entity-status! self (entity-perm-status dead) #t) + (suspend) + (let ((a1-3 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-3 from) self) + (set! (-> a1-3 num-params) 1) + (set! (-> a1-3 message) 'clone-anim) + (set! (-> a1-3 param 0) (the-as uint self)) + (when (send-event-function *target* a1-3) + (set-blackout-frames 3000) + (let ((gp-1 (res-lump-struct (-> self entity) 'movie-pos vector))) + (cond + (gp-1 + (TODO-RENAME-30 (-> self collide-info) gp-1) + (set-yaw-angle-clear-roll-pitch! (-> self collide-info) (-> gp-1 w)) + ) + (else + (TODO-RENAME-30 (-> self collide-info) (-> *target* control trans)) + (quaternion-copy! (-> self collide-info quat) (-> *target* control quat)) + (dummy-60 (-> self collide-info) 40960.0 40960.0 #f (the-as uint 1)) + ) + ) + ) + (send-event *target* 'trans 'save (-> self old-target-pos)) + (send-event (ppointer->process (-> *target* sidekick)) 'matrix 'play-anim) + (send-event *target* 'blend-shape #t) + (if (!= *kernel-boot-message* 'play) + (set! (-> self trans-hook) + (lambda :behavior muse () (spool-push *art-control* (-> self victory-anim name) 0 self -1.0) (none)) + ) + ) + (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 + ) + (logclear! (-> self mask) (process-mask enemy)) + (let ((gp-2 (get-process *default-dead-pool* othercam #x4000))) + (when gp-2 + (let ((t9-19 (method-of-type othercam activate))) + (t9-19 (the-as othercam gp-2) self 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-2 othercam-init-by-other self 3 #f #t) + (-> gp-2 ppointer) + ) + ) + (auto-save-command 'auto-save 0 0 *default-pool*) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim (-> self draw art-group data 3)) + (the-as art-joint-anim (-> self draw art-group data 3)) + (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) + (cond + ((!= *kernel-boot-message* 'play) + (set-blackout-frames 0) + (ja-channel-set! 0) + (ja-post) + (clear-collide-with-as (-> self collide-info)) + (send-event *target* 'trans 'reset) + (let ((gp-4 (ppointer->handle (birth-pickup-at-point + (target-pos 0) + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + self + (the-as fact-info #f) + ) + ) + ) + ) + (send-event (handle->process (the-as handle gp-4)) 'pickup) + (while (handle->process (the-as handle gp-4)) + (suspend) + ) + ) + ) + (else + (send-event *target* 'trans 'restore (-> self old-target-pos)) + (set-blackout-frames 0) + (set-blackout-frames 30) ) - ) ) - ) - (send-event (handle->process (the-as handle gp-4)) 'pickup) - (while (handle->process (the-as handle gp-4)) - (suspend) - ) ) - ) - (else - (send-event *target* 'trans 'restore (-> self old-target-pos)) - (set-blackout-frames 0) - (set-blackout-frames 30) - ) ) - ) + (none) ) - (none) - ) :post - (behavior () - (local-vars (a1-0 none)) - (dummy-51 self (the-as vector a1-0)) - (level-hint-surpress!) - (kill-current-level-hint '() '() 'exit) - (ja-post) - (none) - ) + (behavior () (dummy-51 self) (level-hint-surpress!) (kill-current-level-hint '() '() 'exit) (ja-post) (none)) ) -(define - *muse-nav-enemy-info* - (new 'static 'nav-enemy-info - :idle-anim 3 - :walk-anim 4 - :turn-anim -1 - :notice-anim 3 - :run-anim 4 - :jump-anim 7 - :jump-land-anim 8 - :victory-anim 3 - :taunt-anim 3 - :die-anim 3 - :neck-joint 6 - :player-look-at-joint 5 - :run-travel-speed (meters 10.0) - :run-rotate-speed (degrees 999.99994) - :run-acceleration (meters 5.0) - :run-turn-time (seconds 0.15) - :walk-travel-speed (meters 10.0) - :walk-rotate-speed (degrees 999.99994) - :walk-acceleration (meters 1.0) - :walk-turn-time (seconds 0.15) - :attack-shove-back (meters 3.0) - :attack-shove-up (meters 2.0) - :shadow-size (meters 2.0) - :notice-nav-radius (meters 1.0) - :nav-nearest-y-threshold (meters 10.0) - :notice-distance (meters 30.0) - :stop-chase-distance (meters 40.0) - :frustration-distance (meters 8.0) - :frustration-time #x4b0 - :die-anim-hold-frame 10000000000.0 - :jump-anim-start-frame 6.5 - :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 #t - :move-to-ground #t - :hover-if-no-ground #f - :use-momentum #f - :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 *muse-nav-enemy-info* (new 'static 'nav-enemy-info + :idle-anim 3 + :walk-anim 4 + :turn-anim -1 + :notice-anim 3 + :run-anim 4 + :jump-anim 7 + :jump-land-anim 8 + :victory-anim 3 + :taunt-anim 3 + :die-anim 3 + :neck-joint 6 + :player-look-at-joint 5 + :run-travel-speed (meters 10.0) + :run-rotate-speed (degrees 999.99994) + :run-acceleration (meters 5.0) + :run-turn-time (seconds 0.15) + :walk-travel-speed (meters 10.0) + :walk-rotate-speed (degrees 999.99994) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.15) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 1.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 10000000000.0 + :jump-anim-start-frame 6.5 + :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 #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :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! muse ((obj muse) (arg0 entity-actor)) (stack-size-set! (-> obj main-thread) 512) (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) - (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 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 2457.6 0.0 2457.6) + (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 0)))) - (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) - (set! (-> s3-0 collide-with) (the-as uint 16)) - (set! (-> s3-0 prim-core action) (the-as uint 1)) - (set! (-> s3-0 prim-core offense) 4) - (set-vector! (-> s3-0 local-sphere) 0.0 2457.6 0.0 2457.6) - (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 *muse-sg* '()) (logclear! (-> obj mask) (process-mask actor-pause)) (TODO-RENAME-45 obj *muse-nav-enemy-info*) - (set! - (-> obj max-path-index) - (the float (+ (-> obj path curve num-cverts) -1)) - ) + (set! (-> obj max-path-index) (the float (+ (-> obj path curve num-cverts) -1))) (set! (-> obj current-path-index) 7.0) (set! (-> obj prev-path-index) 7.0) (set! (-> obj dest-path-index) 7.0) (set! (-> obj player-path-index) 0.0) - (eval-path-curve-div! - (-> obj path) - (-> obj dest-point) - (-> obj current-path-index) - 'interp - ) + (eval-path-curve-div! (-> obj path) (-> obj dest-point) (-> obj current-path-index) 'interp) (set! (-> obj collide-info trans quad) (-> obj dest-point quad)) (set! (-> obj nav nearest-y-threshold) 20480.0) (set-vector! (-> obj neck twist-max) 8192.0 8192.0 0.0 1.0) @@ -914,22 +629,14 @@ nav-enemy-default-event-handler (set! (-> obj neck ear) (the-as uint 2)) (set! (-> obj neck max-dist) 102400.0) (set! (-> obj neck ignore-angle) 16384.0) - (set! - (-> obj anim) - (new 'static 'spool-anim - :name "muse-victory" - :index 9 - :parts 2 - :command-list - '( - ((the binteger 1) - blackout - 0 + (set! (-> obj anim) (new 'static 'spool-anim + :name "muse-victory" + :index 9 + :parts 2 + :command-list + '((1 blackout 0) (219 blackout 60)) + ) ) - ((the binteger 219) blackout (the binteger 60)) - ) - ) - ) (set! (-> obj victory-anim) (fuel-cell-pick-anim obj)) (go muse-idle) (none) diff --git a/goal_src/levels/rolling/rolling-race-ring.gc b/goal_src/levels/rolling/rolling-race-ring.gc index 42f10611e4..ce5d710fe6 100644 --- a/goal_src/levels/rolling/rolling-race-ring.gc +++ b/goal_src/levels/rolling/rolling-race-ring.gc @@ -5,3 +5,1267 @@ ;; name in dgo: rolling-race-ring ;; dgos: L1, ROL +;; DECOMP BEGINS + +(deftype race-ring (process-drawable) + ((rot-y float :offset-assert 176) + (face-vec vector :inline :offset-assert 192) + (part-track handle :offset-assert 208) + (keep-part-track-alive symbol :offset-assert 216) + (timeout uint64 :offset-assert 224) + (alt-actor entity-actor :offset-assert 232) + (alt-task uint8 :offset-assert 236) + (cyl cylinder-flat :inline :offset-assert 240) + (old-hips vector :inline :offset-assert 288) + ) + :heap-base #xc0 + :method-count-assert 20 + :size-assert #x130 + :flag-assert #x1400c00130 + (:states + race-ring-active + race-ring-idle + race-ring-wait + ) + ) + + +(set! (-> *part-group-id-table* 457) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :name "group-rolling-ring" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1773 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1774 :fade-after (meters 80.0)) + (sp-item 1775 :flags (is-3d)) + (sp-item 1776 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1773) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-rnd-flt spt-num 2.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1115684864 1 64.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -1.4222221) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1774) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1115684864 1 64.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -1.4222221) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1775) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 10.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1776) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 12.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 458) (new 'static 'sparticle-launch-group + :length 3 + :duration #x5 + :linger-duration #x8d + :name "group-rolling-spawn-ring" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 1777 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1778 :flags (is-3d)) + (sp-item 1779 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1777) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1115684864 1 64.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-int spt-a 0 63 1.0) + (sp-flt spt-vel-y (meters 0.03)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit3) + (sp-int-plain-rnd spt-next-time 20 19 1) + (sp-launcher-by-id spt-next-launcher 1780) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.0)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1780) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-rnd-int spt-r 1115684864 1 64.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-int spt-a 0 63 1.0) + (sp-int-plain-rnd spt-next-time 20 19 1) + (sp-launcher-by-id spt-next-launcher 1780) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1778) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.06666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1781) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1781) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1781) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1779) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.08)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1782) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1782) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1782) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 459) (new 'static 'sparticle-launch-group + :length 2 + :duration #x5 + :linger-duration #x96 + :name "group-rolling-explode-ring" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1783 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1784 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1783) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 64.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1115684864 1 64.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.1) (meters 0.033333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1784) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 2.0) + (sp-flt spt-scale-x (meters 10.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters 0.06666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.85333335) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(defun race-ring-set-particle-rotation-callback ((arg0 part-tracker)) + (let ((f0-0 (-> (the-as (pointer race-ring) (-> arg0 userdata)) 0 rot-y))) + (set! (-> *part-id-table* 1773 init-specs 15 initial-valuef) f0-0) + (set! (-> *part-id-table* 1774 init-specs 15 initial-valuef) f0-0) + (set! (-> *part-id-table* 1775 init-specs 4 initial-valuef) (+ -182.04445 f0-0)) + (set! (-> *part-id-table* 1776 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1777 init-specs 17 initial-valuef) f0-0) + (set! (-> *part-id-table* 1778 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1779 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1783 init-specs 17 initial-valuef) f0-0) + (set! (-> *part-id-table* 1784 init-specs 4 initial-valuef) f0-0) + ) + 0 + (none) + ) + +(set! (-> *part-group-id-table* 460) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :name "group-rolling-ring-blue" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1785 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1786 :fade-after (meters 80.0)) + (sp-item 1787 :flags (is-3d)) + (sp-item 1788 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1785) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-rnd-flt spt-num 2.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1115684864 1 64.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -1.4222221) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1786) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1115684864 1 64.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -1.4222221) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1787) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 10.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1788) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 12.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 461) (new 'static 'sparticle-launch-group + :length 3 + :duration #x5 + :linger-duration #x8d + :name "group-rolling-spawn-ring-blue" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 1789 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1790 :flags (is-3d)) + (sp-item 1791 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1789) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1115684864 1 64.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-int spt-a 0 63 1.0) + (sp-flt spt-vel-y (meters 0.03)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit3) + (sp-int-plain-rnd spt-next-time 20 19 1) + (sp-launcher-by-id spt-next-launcher 1792) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.0)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1792) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1115684864 1 64.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-int spt-a 0 63 1.0) + (sp-int-plain-rnd spt-next-time 20 19 1) + (sp-launcher-by-id spt-next-launcher 1792) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1790) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.06666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1793) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1793) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1793) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1791) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.08)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1794) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1794) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1794) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 462) (new 'static 'sparticle-launch-group + :length 2 + :duration #x5 + :linger-duration #x96 + :name "group-rolling-explode-ring-blue" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1795 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1796 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1795) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 64.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1115684864 1 64.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.1) (meters 0.033333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1796) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 2.0) + (sp-flt spt-scale-x (meters 10.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters 0.06666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.85333335) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(defun race-ring-blue-set-particle-rotation-callback ((arg0 part-tracker)) + (let ((f0-0 (-> (the-as (pointer race-ring) (-> arg0 userdata)) 0 rot-y))) + (set! (-> *part-id-table* 1785 init-specs 15 initial-valuef) f0-0) + (set! (-> *part-id-table* 1786 init-specs 15 initial-valuef) f0-0) + (set! (-> *part-id-table* 1787 init-specs 4 initial-valuef) (+ -182.04445 f0-0)) + (set! (-> *part-id-table* 1788 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1789 init-specs 17 initial-valuef) f0-0) + (set! (-> *part-id-table* 1790 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1791 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1795 init-specs 17 initial-valuef) f0-0) + (set! (-> *part-id-table* 1796 init-specs 4 initial-valuef) f0-0) + ) + 0 + (none) + ) + +(defskelgroup *race-ring-sg* race-ring + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +(defun first-ring? ((arg0 race-ring)) + (not (-> arg0 alt-actor)) + ) + +(defun last-ring? ((arg0 race-ring)) + (not (-> arg0 link next)) + ) + +(defstate race-ring-active (race-ring) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 symbol)) + (let ((v1-0 arg2)) + (the-as + object + (when (= v1-0 'notify) + (when (and (= (-> arg3 param 0) 'die) (= arg0 (-> self part-track process 0))) + (cond + ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 (the-as part-tracker gp-0) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 460) + -1 + race-ring-blue-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (set! v0-0 #t) + (set! (-> self keep-part-track-alive) v0-0) + ) + (else + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-1 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-1) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 457) + -1 + race-ring-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + (set! v0-0 #t) + (set! (-> self keep-part-track-alive) v0-0) + ) + ) + v0-0 + ) + ) + ) + ) + ) + :enter + (behavior () + (cond + ((first-ring? self) + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + ) + (else + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + ) + ) + (set! (-> self keep-part-track-alive) #f) + (cond + ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-0 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-0) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 461) + -1 + race-ring-blue-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + ) + (else + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-1 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker gp-1) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 458) + -1 + race-ring-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + ) + ) + (set! (-> self old-hips quad) (-> (target-pos 26) quad)) + (set! (-> self old-hips x) (+ 1.0 (-> self old-hips x))) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :exit + (behavior () + (sound-play-by-name (static-sound-name "close-racering") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-3 (handle->process (-> self part-track)))) + (if a0-3 + (deactivate a0-3) + ) + ) + (cond + ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-1 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-1) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 462) + -1 + race-ring-blue-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + ) + (else + (let ((gp-2 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-2 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker gp-2) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-2 + part-tracker-init + (-> *part-group-id-table* 459) + -1 + race-ring-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-2 ppointer) + ) + ) + ) + ) + ) + ) + (cond + ((first-ring? self) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + ) + (else + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + ) + ) + (none) + ) + :trans + (behavior () + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (cond + ((handle->process (-> self part-track)) + (if (-> self keep-part-track-alive) + (set! (-> (the-as part-tracker (-> self part-track process 0)) start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-0 + (let ((t9-2 (method-of-type part-tracker activate))) + (t9-2 (the-as part-tracker gp-0) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 460) + -1 + race-ring-blue-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (set! (-> self keep-part-track-alive) #t) + ) + (else + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-1 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 (the-as part-tracker gp-1) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 457) + -1 + race-ring-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + (set! (-> self keep-part-track-alive) #t) + ) + ) + (cond + ((not (last-ring? self)) + ) + ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (spool-push *art-control* "race-ring-second-anim" 0 self -99.0) + ) + (else + (spool-push *art-control* "race-ring-anim" 0 self -99.0) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (cond + ((first-ring? self) + ) + ((>= (- (-> *display* game-frame-counter) (-> self state-time)) (the-as int (-> self timeout))) + (level-hint-spawn + (game-text-id rolling-ring-hint-be-quick-all) + "sksp0121" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (ambient-hint-spawn "st-lose" (the-as vector #f) *entity-pool* 'stinger) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'activate) + (let ((t9-3 send-event-function) + (v1-7 (-> self alt-actor)) + ) + (t9-3 + (if v1-7 + (-> v1-7 extra process) + ) + a1-2 + ) + ) + ) + (go race-ring-idle) + ) + ) + (when *target* + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self old-hips quad)) + (set! (-> self old-hips quad) (-> (target-pos 26) quad)) + (vector-! gp-0 gp-0 (-> self old-hips)) + (when (>= (ray-flat-cyl-intersect (-> self cyl) (-> self old-hips) gp-0) 0.0) + (level-hint-spawn + (game-text-id rolling-ring-hint-one-ring-down) + "sksp0119" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (if (= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (level-hint-spawn + (game-text-id rolling-ring-hint-be-quick-to-next) + "sksp0120" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (cond + ((first-ring? self) + (close-specific-task! (-> self entity extra perm task) (task-status need-hint)) + (entity-birth-no-kill (-> self link next)) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 0) + (set! (-> a1-9 message) 'activate) + (let ((t9-12 send-event-function) + (v1-30 (-> self link next)) + ) + (t9-12 + (if v1-30 + (-> v1-30 extra process) + ) + a1-9 + ) + ) + ) + ) + ((last-ring? self) + (let* ((gp-1 (get-process *default-dead-pool* othercam #x4000)) + (gp-2 (ppointer->handle (when gp-1 + (let ((t9-15 (method-of-type othercam activate))) + (t9-15 (the-as othercam gp-1) self 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 othercam-init-by-other self 4 #f #t) + (-> gp-1 ppointer) + ) + ) + ) + (s5-1 (get-process *default-dead-pool* fuel-cell #x4000)) + (s5-2 + (ppointer->handle + (when s5-1 + (let ((t9-18 (method-of-type fuel-cell activate))) + (t9-18 (the-as fuel-cell s5-1) self 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 fuel-cell-init-as-clone (process->handle self) (-> self entity extra perm task)) + (-> s5-1 ppointer) + ) + ) + ) + ) + (if *target* + (logior! (-> *target* mask) (process-mask sleep)) + ) + (close-specific-task! (-> self entity extra perm task) (task-status need-reminder)) + (logclear! (-> self draw status) (draw-status drwf01)) + (logior! (-> self draw status) (draw-status drwf05)) + (if (= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (ja-play-spooled-anim + (new 'static 'spool-anim :name "race-ring-second-anim" :index 4 :parts 2 :command-list '()) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (ja-play-spooled-anim + (new 'static 'spool-anim :name "race-ring-anim" :index 3 :parts 2 :command-list '()) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + ) + (logclear! (-> self draw status) (draw-status drwf05)) + (logior! (-> self draw status) (draw-status drwf01)) + (cond + ((handle->process (the-as int gp-2)) + (deactivate (-> gp-2 process 0)) + ) + (else + ) + ) + (if *target* + (logclear! (-> *target* mask) (process-mask sleep)) + ) + (let ((a0-54 (handle->process s5-2))) + (if a0-54 + (send-event a0-54 'stop-cloning) + ) + ) + ) + ) + (else + (entity-birth-no-kill (-> self link next)) + (let ((a1-22 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-22 from) self) + (set! (-> a1-22 num-params) 0) + (set! (-> a1-22 message) 'activate) + (let ((t9-26 send-event-function) + (v1-86 (-> self link next)) + ) + (t9-26 + (if v1-86 + (-> v1-86 extra process) + ) + a1-22 + ) + ) + ) + ) + ) + (go race-ring-idle) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior race-ring) ja-post) + ) + +(defstate race-ring-wait (race-ring) + :code + (behavior () + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (while #t + (suspend) + (when (= (get-task-status (the-as game-task (-> self alt-task))) (task-status invalid)) + (close-specific-task! (-> self entity extra perm task) (task-status need-hint)) + (logclear! (-> self mask) (process-mask actor-pause)) + (go race-ring-active) + ) + ) + (none) + ) + ) + +(defstate race-ring-idle (race-ring) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('activate) + (logclear! (-> self mask) (process-mask actor-pause)) + (go race-ring-active) + ) + ) + ) + :code + (behavior () + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (while #t + (suspend) + ) + (none) + ) + ) + +(defmethod init-from-entity! race-ring ((obj race-ring) (arg0 entity-actor)) + (let ((a0-1 arg0)) + (if (not (entity-actor-lookup a0-1 'next-actor 0)) + (stack-size-set! (-> obj main-thread) 512) + ) + ) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *race-ring-sg* '()) + (set! (-> obj root pause-adjust-distance) 122880.0) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj part-track) (the-as handle #f)) + (set! (-> obj alt-actor) (entity-actor-lookup arg0 'alt-actor 0)) + (logior! (-> obj draw status) (draw-status drwf01)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "loop-racering") + :volume #x400 + :fo-max 40 + ) + (-> obj root trans) + ) + ) + (let ((f0-1 (res-lump-float arg0 'timeout))) + (set! (-> obj timeout) (the-as uint (the int (* 300.0 f0-1)))) + ) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (cond + ((-> obj link next) + (vector-! (-> obj face-vec) (-> obj link next extra trans) (-> obj root trans)) + ) + ((-> obj link prev) + (vector-! (-> obj face-vec) (-> obj root trans) (-> obj link prev extra trans)) + ) + ) + (vector-flatten! (-> obj face-vec) (-> obj face-vec) (new 'static 'vector :y 1.0)) + (vector-normalize! (-> obj face-vec) 1.0) + (cond + ((and (-> obj link next) (-> obj link prev)) + (vector-! s4-0 (-> obj link prev extra trans) (-> obj root trans)) + (vector-flatten! s4-0 s4-0 (new 'static 'vector :y 1.0)) + (vector-normalize! s4-0 1.0) + (vector+! s4-0 s4-0 (-> obj face-vec)) + (vector-normalize! s4-0 1.0) + (set! (-> obj rot-y) (acos (vector-dot s4-0 (new 'static 'vector :z 1.0)))) + (if (< (vector-dot s4-0 (new 'static 'vector :x 1.0)) 0.0) + (set! (-> obj rot-y) (- (-> obj rot-y))) + ) + ) + (else + (set! (-> obj rot-y) (acos (vector-dot (-> obj face-vec) (new 'static 'vector :z 1.0)))) + (if (< (vector-dot (-> obj face-vec) (new 'static 'vector :x 1.0)) 0.0) + (set! (-> obj rot-y) (- (-> obj rot-y))) + ) + (set! (-> obj rot-y) (+ 16384.0 (-> obj rot-y))) + ) + ) + ) + (+! (-> obj rot-y) (res-lump-float arg0 'rotoffset)) + (set-vector! (-> obj cyl axis) (cos (-> obj rot-y)) 0.0 (- (sin (-> obj rot-y))) 1.0) + (vector+float*! (the-as vector (-> obj cyl)) (-> obj root trans) (-> obj cyl axis) -2048.0) + (set! (-> obj cyl radius) 24576.0) + (set! (-> obj cyl length) 4096.0) + (cond + ((and + (first-ring? obj) + (!= (get-task-status (-> obj entity extra perm task)) (task-status invalid)) + (!= (get-task-status (-> obj entity extra perm task)) 7) + ) + (set! (-> obj alt-task) (res-lump-value (-> obj entity) 'alt-task uint)) + (if (or (= (-> obj alt-task) 0) (= (get-task-status (the-as game-task (-> obj alt-task))) (task-status invalid))) + (go race-ring-active) + (go race-ring-wait) + ) + ) + ((and (last-ring? obj) (= (get-task-status (-> obj entity extra perm task)) (task-status need-resolution))) + (let ((s5-2 (new 'stack-no-clear 'vector))) + (logclear! (-> obj draw status) (draw-status drwf01)) + (ja-post) + (vector<-cspace! s5-2 (-> obj node-list data 5)) + (logior! (-> obj draw status) (draw-status drwf01)) + (birth-pickup-at-point + s5-2 + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + ) + ) + ((and (last-ring? obj) (!= (get-task-status (-> obj entity extra perm task)) (task-status invalid))) + ) + ) + (set! (-> obj event-hook) (-> race-ring-idle event)) + (go race-ring-idle) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/double-lurker.gc b/goal_src/levels/sunken/double-lurker.gc index 5473482449..605f47083c 100644 --- a/goal_src/levels/sunken/double-lurker.gc +++ b/goal_src/levels/sunken/double-lurker.gc @@ -5,3 +5,1264 @@ ;; name in dgo: double-lurker ;; dgos: L1, SUN, SUNKEN +(declare-type double-lurker nav-enemy) + +;; DECOMP BEGINS + +(deftype double-lurker-top (nav-enemy) + ((parent-process (pointer double-lurker) :offset 12) + (fall-dest vector :inline :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x1a0 + :flag-assert #x4c013001a0 + (:states + (double-lurker-top-knocked-down object vector vector) + double-lurker-top-on-shoulders + double-lurker-top-on-shoulders-die + double-lurker-top-resume + ) + ) + + +(deftype double-lurker (nav-enemy) + ((knocked-back-speed float :offset-assert 400) + (buddy-on-shoulders? symbol :offset-assert 404) + (dead? symbol :offset-assert 408) + (buddy-dead? symbol :offset-assert 412) + (buddy-handle handle :offset-assert 416) + ) + :heap-base #x140 + :method-count-assert 76 + :size-assert #x1a8 + :flag-assert #x4c014001a8 + (:methods + (initialize-collision (_type_) collide-shape-moving :replace 47) + (dummy-53 (_type_ vector) symbol :replace 53) + ) + (:states + double-lurker-both-knocked-back + double-lurker-break-apart + double-lurker-buddy-was-hit + double-lurker-knocked-back + double-lurker-resume + double-lurker-show-anims + double-lurker-waiting-to-die + ) + ) + + +(defskelgroup *double-lurker-sg* double-lurker + 0 + 5 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1 0 4.5) + :longest-edge (meters 1) + :shadow 4 + ) + +(defskelgroup *double-lurker-top-sg* double-lurker-top + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0.5 0 4.5) + :longest-edge (meters 1) + :shadow 4 + ) + +(define *double-lurker-top-nav-enemy-info* (new 'static 'nav-enemy-info + :idle-anim 12 + :walk-anim 13 + :turn-anim -1 + :notice-anim 14 + :run-anim 15 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 16 + :taunt-anim 16 + :die-anim 17 + :neck-joint -1 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 2880.0) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.1) + :walk-travel-speed (meters 3.0) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.5) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 3.0) + :notice-nav-radius (meters 2.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.25) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :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 *double-lurker-when-both-nav-enemy-info* (new 'static 'nav-enemy-info + :idle-anim 5 + :walk-anim 6 + :turn-anim -1 + :notice-anim 7 + :run-anim 8 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 9 + :taunt-anim 9 + :die-anim 17 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 720.0) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.1) + :walk-travel-speed (meters 3.8) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.5) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 4.0) + :notice-nav-radius (meters 2.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.25) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :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 *double-lurker-nav-enemy-info* (new 'static 'nav-enemy-info + :idle-anim 12 + :walk-anim 13 + :turn-anim -1 + :notice-anim 14 + :run-anim 15 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 16 + :taunt-anim 16 + :die-anim 17 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 720.0) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.1) + :walk-travel-speed (meters 3.8) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.5) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 4.0) + :notice-nav-radius (meters 2.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.25) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :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 + ) + ) + +(defstate double-lurker-top-on-shoulders (double-lurker-top) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (let ((v1-1 (-> self fall-dest)) + (a0-4 (-> (the-as vector (-> arg3 param 0)) quad)) + ) + (set! (-> v1-1 quad) a0-4) + (go double-lurker-top-knocked-down a0-4 (the-as vector arg1) (the-as vector arg2)) + ) + ) + (('instant-death) + (let ((v1-3 (the-as object (-> arg3 param 0)))) + (quaternion-axis-angle! + (-> self collide-info quat) + 0.0 + 1.0 + 0.0 + (atan (-> (the-as vector v1-3) x) (-> (the-as vector v1-3) z)) + ) + ) + (go double-lurker-top-on-shoulders-die) + ) + ) + ) + :code + (behavior () + (while #t + (clone-anim-once + (ppointer->handle (-> self parent-process)) + (the-as int (-> self draw origin-joint-index)) + #t + "" + ) + (dummy-47 (-> self collide-info)) + (suspend) + ) + (none) + ) + ) + +(defstate double-lurker-top-on-shoulders-die (double-lurker-top) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 30) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 18))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 18)) 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 18)) 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!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior double-lurker-top) ja-post) + ) + +(defstate double-lurker-top-knocked-down (double-lurker-top) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'shove) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (let ((v1-4 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-4 shove-up) 12288.0) + (set! (-> v1-4 shove-back) 8192.0) + (set! (-> a1-2 param 1) (the-as uint v1-4)) + ) + (send-event-function arg0 a1-2) + ) + ) + ) + ) + :code + (behavior ((arg0 object) (arg1 vector) (arg2 vector)) + (dummy-51 self) + (let ((v1-3 (-> self draw shadow-ctrl))) + (set! (-> v1-3 settings flags) (logand -33 (-> v1-3 settings flags))) + ) + 0 + (set! (-> self collide-info nav-flags) (logand -2 (-> self collide-info nav-flags))) + (logior! (-> self collide-info nav-flags) 2) + (set! (-> self nav extra-nav-sphere quad) (-> self fall-dest quad)) + (set! (-> self nav extra-nav-sphere w) 9011.2) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self collide-info trans quad)) + (ja-channel-push! 1 30) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-14 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (vector-lerp! + (-> self collide-info trans) + gp-0 + (-> self fall-dest) + (fmin 1.0 (/ (ja-frame-num 0) (ja-aframe 44.0 0))) + ) + (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) 1.0) + (joint-control-channel-group-eval! a0-18 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (logior! (-> self collide-info nav-flags) 1) + (set! (-> self collide-info nav-flags) (logand -3 (-> self collide-info nav-flags))) + (dummy-27 (-> self nav)) + (go double-lurker-top-resume) + (none) + ) + :post + (the-as (function none :behavior double-lurker-top) transform-post) + ) + +(defstate double-lurker-top-resume (double-lurker-top) + :code + (behavior () + (cond + ((not *target*) + (go-virtual nav-enemy-idle) + ) + ((TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + ((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) (draw-status drwf03)) + ) + (go-virtual nav-enemy-patrol) + ) + ) + (go-virtual nav-enemy-idle) + (none) + ) + ) + +(defstate nav-enemy-patrol (double-lurker-top) + :virtual #t + :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 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 ((t9-1 (-> (method-of-type nav-enemy nav-enemy-patrol) code))) + (if t9-1 + ((the-as (function none) t9-1)) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-die (double-lurker-top) + :virtual #t + :enter + (behavior () + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 1) 1) + ) + (set! (-> self parent-process 0 dead?) #t) + (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-die) enter))) + (if t9-0 + (t9-0) + ) + ) + (none) + ) + ) + +(defmethod dummy-51 double-lurker-top ((obj double-lurker-top)) + (restore-collide-with-as (-> obj collide-info)) + (logior! (-> obj collide-info nav-flags) 1) + (the-as object (dummy-27 (-> obj nav))) + ) + +(defmethod initialize-collision double-lurker-top ((obj double-lurker-top)) + (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-group s5-0 (the-as uint 6) 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-vector! (-> s4-0 local-sphere) 0.0 10240.0 0.0 14336.0) + (set-root-prim! s5-0 s4-0) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 2662.4 0.0 4096.0) + (append-prim s4-0 s3-0) + ) + (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 1) + (set-vector! (-> s3-1 local-sphere) 0.0 6758.4 0.0 4096.0) + (append-prim s4-0 s3-1) + ) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-2 collide-with) (the-as uint 16)) + (set! (-> s3-2 prim-core action) (the-as uint 1)) + (set! (-> s3-2 prim-core offense) 1) + (set-vector! (-> s3-2 local-sphere) 0.0 10854.4 0.0 4096.0) + (append-prim s4-0 s3-2) + ) + (let ((s3-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-3 collide-with) (the-as uint 16)) + (set! (-> s3-3 prim-core offense) 2) + (set! (-> s3-3 transform-index) 10) + (set-vector! (-> s3-3 local-sphere) 0.0 0.0 0.0 1228.8) + (append-prim s4-0 s3-3) + ) + (let ((s3-4 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-4 collide-with) (the-as uint 16)) + (set! (-> s3-4 prim-core offense) 2) + (set! (-> s3-4 transform-index) 16) + (set-vector! (-> s3-4 local-sphere) 0.0 0.0 0.0 1228.8) + (append-prim s4-0 s3-4) + ) + (let ((s3-5 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-5 collide-with) (the-as uint 16)) + (set! (-> s3-5 prim-core offense) 2) + (set! (-> s3-5 transform-index) 5) + (set-vector! (-> s3-5 local-sphere) 0.0 -2048.0 0.0 3276.8) + (append-prim s4-0 s3-5) + ) + ) + (set! (-> s5-0 nav-radius) 9011.2) + (backup-collide-with-as s5-0) + (set! (-> obj collide-info) s5-0) + ) + (clear-collide-with-as (-> obj collide-info)) + (none) + ) + +(defmethod TODO-RENAME-48 double-lurker-top ((obj double-lurker-top)) + (initialize-skeleton obj *double-lurker-top-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (TODO-RENAME-45 obj *double-lurker-top-nav-enemy-info*) + (let ((v1-5 (-> obj parent-process))) + (set! (-> obj collide-info trans quad) (-> v1-5 0 collide-info trans quad)) + (set-vector! (-> obj collide-info scale) 1.0 1.0 1.0 1.0) + (quaternion-copy! (-> obj collide-info quat) (-> v1-5 0 collide-info quat)) + ) + (set! (-> obj collide-info nav-flags) (logand -2 (-> obj collide-info nav-flags))) + (none) + ) + +(defbehavior double-lurker-top-init-by-other double-lurker-top ((arg0 entity) (arg1 double-lurker) (arg2 symbol) (arg3 vector)) + (initialize-collision self) + (set! (-> self entity) (-> arg1 entity)) + (TODO-RENAME-48 self) + (set! (-> self collide-info trans quad) (-> arg3 quad)) + (cond + (arg2 + (ja-channel-set! 1) + (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 5)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (transform-post) + (let ((v1-13 (-> self draw shadow-ctrl))) + (logior! (-> v1-13 settings flags) 32) + ) + 0 + (go double-lurker-top-on-shoulders) + ) + (else + (ja-channel-set! 1) + (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 12)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + (transform-post) + (dummy-60 (-> self collide-info) 40960.0 40960.0 #t (the-as uint 1)) + (dummy-51 self) + (go double-lurker-top-resume) + ) + ) + (none) + ) + +;; WARN: disable def twice: 80. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +;; WARN: disable def twice: 120. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +(defbehavior double-lurker-default-event-handler double-lurker ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('touch) + (set! (-> self touch-time) (-> *display* base-frame-counter)) + (dummy-44 self arg0 arg3) + ) + (('attack) + (when (= (-> arg0 type) target) + (nav-enemy-set-hit-from-direction arg0) + (cond + ((-> self buddy-on-shoulders?) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (vector-! s4-0 (target-pos 0) (-> self collide-info trans)) + (cond + ((and + (>= (-> s4-0 y) 8192.0) + (>= 14563.556 (fabs (deg- (quaternion-y-angle (-> self collide-info quat)) (atan (-> s4-0 x) (-> s4-0 z))))) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'shove) + (set! (-> a1-4 param 0) (-> arg3 param 0)) + (let ((v1-13 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-13 shove-up) 12288.0) + (set! (-> v1-13 shove-back) 8192.0) + (set! (-> a1-4 param 1) (the-as uint v1-13)) + ) + (when (send-event-function arg0 a1-4) + (increment-success-for-hint (game-text-id sunken-double-lurker-hint)) + (go double-lurker-buddy-was-hit) + (return #f) + v0-0 + ) + ) + ) + (else + (when (and + ((method-of-type touching-shapes-entry prims-touching-action?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> (the-as target arg0) control) + (the-as uint 1) + (the-as uint 0) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'shove) + (set! (-> a1-6 param 0) (-> arg3 param 0)) + (let ((v1-23 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-23 shove-up) 12288.0) + (set! (-> v1-23 shove-back) 8192.0) + (set! (-> a1-6 param 1) (the-as uint v1-23)) + ) + (send-event-function arg0 a1-6) + ) + ) + (level-hint-spawn + (game-text-id sunken-double-lurker-hint) + "sksp0127" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (go double-lurker-both-knocked-back) + (return #f) + v0-0 + ) + ) + ) + ) + ) + (else + (nav-enemy-set-hit-from-direction arg0) + (dummy-43 self arg0 arg3) + ) + ) + ) + ) + ) + ) + +(defstate double-lurker-show-anims (double-lurker) + :trans + (behavior () 0 (none)) + :code + (behavior () 0 (none)) + :post + (the-as (function none :behavior double-lurker) transform-post) + ) + +(defstate double-lurker-resume (double-lurker) + :code + (behavior () + (cond + ((not *target*) + (go-virtual nav-enemy-idle) + ) + ((TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + ((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) (draw-status drwf03)) + ) + (go-virtual nav-enemy-patrol) + ) + ) + (go-virtual nav-enemy-idle) + (none) + ) + ) + +(defstate nav-enemy-idle (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + ) + +(defstate nav-enemy-patrol (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + :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 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 ((t9-1 (-> (method-of-type nav-enemy nav-enemy-patrol) code))) + (if t9-1 + ((the-as (function none) t9-1)) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-notice (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + :enter + (behavior () + (start-hint-timer (game-text-id sunken-double-lurker-hint)) + (let ((t9-1 (-> (method-of-type nav-enemy nav-enemy-notice) enter))) + (if t9-1 + (t9-1) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-chase (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + ) + +(defstate nav-enemy-stop-chase (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + ) + +(defstate nav-enemy-stare (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + ) + +(defstate nav-enemy-victory (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + ) + +(defstate nav-enemy-die (double-lurker) + :virtual #t + :enter + (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) + ) + (set! (-> self dead?) #t) + (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-die) enter))) + (if t9-0 + (t9-0) + ) + ) + (none) + ) + ) + +(defstate double-lurker-both-knocked-back (double-lurker) + :enter + (behavior () (set! (-> self knocked-back-speed) 40960.0) (none)) + :trans + (behavior () + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let* ((f0-3 + (seek-with-smooth (-> self knocked-back-speed) 0.0 (* 49152.0 (-> *display* seconds-per-frame)) 0.5 0.01) + ) + (f30-0 (* f0-3 (-> *display* seconds-per-frame))) + ) + (set! (-> self knocked-back-speed) f0-3) + (vector-float*! (-> self collide-info transv) (-> self hit-from-dir) f0-3) + (when (< 0.0 f0-3) + (let ((v1-7 (-> self nav travel))) + (.lvf vf1 (&-> (-> self collide-info transv) quad)) + (let ((f0-4 (-> *display* seconds-per-frame))) + (.mov at-0 f0-4) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-7 quad) vf1) + ) + (let ((gp-0 #f)) + (dummy-28 (-> self nav) -1) + (let ((a2-1 (new 'stack-no-clear 'check-vector-collision-with-nav-spheres-info))) + (if (>= (dummy-23 (-> self nav) (-> self nav travel) a2-1) 0.0) + (set! gp-0 #t) + ) + ) + (when (not gp-0) + (let ((s5-0 (new 'stack 'clip-travel-vector-to-mesh-return-info))) + (dummy-24 (-> self nav) (* 1.2 f30-0) s5-0) + (if (-> s5-0 found-boundary) + (set! gp-0 #t) + ) + ) + ) + (when gp-0 + (set! (-> self knocked-back-speed) 0.0) + (vector-reset! (-> self collide-info transv)) + ) + ) + ) + ) + (set! (-> self collide-info transv y) (+ -36864.0 (-> self collide-info transv y))) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (the-as uint 1) + 8192.0 + #t + (-> self nav-info hover-if-no-ground) + #f + ) + (dummy-27 (-> self nav)) + (none) + ) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) 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 11)) 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!) + ) + ) + (go double-lurker-resume) + (none) + ) + :post + (the-as (function none :behavior double-lurker) nav-enemy-simple-post) + ) + +(defmethod dummy-52 double-lurker ((obj double-lurker) (arg0 vector)) + (dummy-28 (-> obj nav) -1) + (let ((a1-2 (new 'stack-no-clear 'vector))) + (vector-float*! a1-2 (-> obj hit-from-dir) 22937.602) + (vector+! a1-2 a1-2 (-> obj collide-info trans)) + (dummy-13 (-> obj nav) a1-2 (-> obj hit-from-dir)) + ) + (when (>= (vector-xz-length (-> obj nav travel)) 18841.602) + (vector+! arg0 (-> obj collide-info trans) (-> obj nav travel)) + (let ((a1-5 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'collide-tri-result)) + ) + (set! (-> a1-5 quad) (-> arg0 quad)) + (set! (-> a1-5 y) (+ 8192.0 (-> a1-5 y))) + (when (>= (dummy-10 *collide-cache* a1-5 (new 'static 'vector :y -40960.0 :w 1.0) 40.96 1 obj s4-0 1) 0.0) + (set! (-> arg0 y) (-> s4-0 intersect y)) + (return #t) + ) + ) + ) + #f + ) + +(defstate double-lurker-buddy-was-hit (double-lurker) + :code + (behavior () + (set! (-> self buddy-on-shoulders?) #f) + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 2) 1) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (if (dummy-52 self gp-0) + (send-event (handle->process (-> self buddy-handle)) 'trigger gp-0) + (send-event (handle->process (-> self buddy-handle)) 'instant-death (-> self hit-from-dir)) + ) + ) + (dummy-51 self) + (TODO-RENAME-49 self *double-lurker-nav-enemy-info*) + (go double-lurker-break-apart) + (none) + ) + ) + +(defstate double-lurker-break-apart (double-lurker) + :event + double-lurker-default-event-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go double-lurker-resume) + (none) + ) + :post + (the-as (function none :behavior double-lurker) nav-enemy-simple-post) + ) + +(defstate double-lurker-knocked-back (double-lurker) + :enter + (behavior () (set! (-> self knocked-back-speed) 40960.0) (none)) + :trans + (behavior () + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let* ((f0-3 + (seek-with-smooth (-> self knocked-back-speed) 0.0 (* 49152.0 (-> *display* seconds-per-frame)) 0.5 0.01) + ) + (f30-0 (* f0-3 (-> *display* seconds-per-frame))) + ) + (set! (-> self knocked-back-speed) f0-3) + (vector-float*! (-> self collide-info transv) (-> self hit-from-dir) f0-3) + (when (< 0.0 f0-3) + (let ((v1-7 (-> self nav travel))) + (.lvf vf1 (&-> (-> self collide-info transv) quad)) + (let ((f0-4 (-> *display* seconds-per-frame))) + (.mov at-0 f0-4) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-7 quad) vf1) + ) + (let ((gp-0 #f)) + (dummy-28 (-> self nav) -1) + (let ((a2-1 (new 'stack-no-clear 'check-vector-collision-with-nav-spheres-info))) + (if (>= (dummy-23 (-> self nav) (-> self nav travel) a2-1) 0.0) + (set! gp-0 #t) + ) + ) + (when (not gp-0) + (let ((s5-0 (new 'stack 'clip-travel-vector-to-mesh-return-info))) + (dummy-24 (-> self nav) (* 1.2 f30-0) s5-0) + (if (-> s5-0 found-boundary) + (set! gp-0 #t) + ) + ) + ) + (when gp-0 + (set! (-> self knocked-back-speed) 0.0) + (vector-reset! (-> self collide-info transv)) + ) + ) + ) + ) + (set! (-> self collide-info transv y) (+ -36864.0 (-> self collide-info transv y))) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (the-as uint 1) + 8192.0 + #t + (-> self nav-info hover-if-no-ground) + #f + ) + (dummy-27 (-> self nav)) + (none) + ) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 18))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 18)) 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 18)) 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!) + ) + ) + (go double-lurker-resume) + (none) + ) + :post + (the-as (function none :behavior double-lurker) nav-enemy-simple-post) + ) + +(defstate double-lurker-waiting-to-die (double-lurker) + :code + (behavior () + (clear-collide-with-as (-> self collide-info)) + (logior! (-> self draw status) (draw-status drwf01)) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + ) + +(defmethod dummy-53 double-lurker ((obj double-lurker) (arg0 vector)) + (let* ((s3-0 (-> obj path curve num-cverts)) + (s4-0 (rand-vu-int-count s3-0)) + ) + (while (nonzero? s3-0) + (+! s3-0 -1) + (eval-path-curve-div! (-> obj path) arg0 (the float s4-0) 'interp) + (if (not (TODO-RENAME-50 obj arg0)) + (return #t) + ) + ) + ) + #f + ) + +(defmethod initialize-collision double-lurker ((obj double-lurker)) + (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-group s5-0 (the-as uint 9) 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-vector! (-> s4-0 local-sphere) 0.0 12288.0 0.0 18432.0) + (set-root-prim! s5-0 s4-0) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 15564.8 0.0 3686.4) + (append-prim s4-0 s3-0) + ) + (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 4) + (set-vector! (-> s3-1 local-sphere) 0.0 19660.8 0.0 3686.4) + (append-prim s4-0 s3-1) + ) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-2 collide-with) (the-as uint 16)) + (set! (-> s3-2 prim-core offense) 0) + (set! (-> s3-2 transform-index) 5) + (set-vector! (-> s3-2 local-sphere) 0.0 8192.0 -1024.0 3276.8) + (append-prim s4-0 s3-2) + ) + (let ((s3-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-3 collide-with) (the-as uint 16)) + (set! (-> s3-3 prim-core action) (the-as uint 1)) + (set! (-> s3-3 prim-core offense) 4) + (set-vector! (-> s3-3 local-sphere) 0.0 3276.8 0.0 3686.4) + (append-prim s4-0 s3-3) + ) + (let ((s3-4 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-4 collide-with) (the-as uint 16)) + (set! (-> s3-4 prim-core action) (the-as uint 1)) + (set! (-> s3-4 prim-core offense) 4) + (set-vector! (-> s3-4 local-sphere) 0.0 7372.8 0.0 3686.4) + (append-prim s4-0 s3-4) + ) + (let ((s3-5 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-5 collide-with) (the-as uint 16)) + (set! (-> s3-5 prim-core action) (the-as uint 1)) + (set! (-> s3-5 prim-core offense) 4) + (set-vector! (-> s3-5 local-sphere) 0.0 11468.8 0.0 3686.4) + (append-prim s4-0 s3-5) + ) + (let ((s3-6 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-6 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-6 collide-with) (the-as uint 16)) + (set! (-> s3-6 prim-core offense) 2) + (set! (-> s3-6 transform-index) 5) + (set-vector! (-> s3-6 local-sphere) 0.0 -2048.0 -2048.0 3686.4) + (append-prim s4-0 s3-6) + ) + (let ((s3-7 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-7 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-7 collide-with) (the-as uint 16)) + (set! (-> s3-7 prim-core offense) 2) + (set! (-> s3-7 transform-index) 10) + (set-vector! (-> s3-7 local-sphere) 0.0 1024.0 0.0 1638.4) + (append-prim s4-0 s3-7) + ) + (let ((s3-8 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-8 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-8 collide-with) (the-as uint 16)) + (set! (-> s3-8 prim-core offense) 2) + (set! (-> s3-8 transform-index) 16) + (set-vector! (-> s3-8 local-sphere) 0.0 -1024.0 0.0 1638.4) + (append-prim s4-0 s3-8) + ) + ) + (set! (-> s5-0 nav-radius) 9830.4) + (backup-collide-with-as s5-0) + (set! (-> obj collide-info) s5-0) + s5-0 + ) + ) + +(defmethod dummy-51 double-lurker ((obj double-lurker)) + (let ((v1-1 (-> obj collide-info root-prim))) + (let ((a0-1 0)) + (dotimes (a1-0 3) + (let ((a2-2 (-> (the-as collide-shape-prim-group v1-1) prims a0-1))) + (set! (-> a2-2 collide-with) (the-as uint 0)) + (set! (-> a2-2 prim-core collide-as) (the-as uint 0)) + (set! (-> a2-2 prim-core action) (the-as uint 0)) + (set! (-> a2-2 prim-core offense) 0) + ) + 0 + (+! a0-1 1) + ) + ) + (countdown (a0-4 (-> (the-as collide-shape-prim-group v1-1) num-prims)) + (let ((a1-3 (-> (the-as collide-shape-prim-group v1-1) prims a0-4))) + (if (and (= (-> a1-3 prim-core offense) 4) (logtest? (-> a1-3 prim-id) 2)) + (set! (-> a1-3 prim-core offense) 1) + ) + ) + ) + ) + (the-as object #f) + ) + +(defmethod TODO-RENAME-48 double-lurker ((obj double-lurker)) + (set! (-> obj buddy-handle) (the-as handle #f)) + (process-drawable-from-entity! obj (the-as entity-actor (-> obj entity))) + (set! (-> obj align) (new 'process 'align-control obj)) + (initialize-skeleton obj *double-lurker-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (set! (-> obj buddy-on-shoulders?) #t) + (set! (-> obj dead?) #f) + (set! (-> obj buddy-dead?) #f) + (let ((v1-7 (-> obj entity extra perm))) + (if (nonzero? (-> v1-7 user-int8 2)) + (set! (-> obj buddy-on-shoulders?) #f) + ) + (when (nonzero? (-> v1-7 user-int8 0)) + (set! (-> obj dead?) #t) + (set! (-> obj buddy-on-shoulders?) #f) + ) + (when (nonzero? (-> v1-7 user-int8 1)) + (set! (-> obj buddy-dead?) #t) + (set! (-> obj buddy-on-shoulders?) #f) + ) + ) + (TODO-RENAME-45 obj *double-lurker-when-both-nav-enemy-info*) + (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-vector! (-> obj neck twist-max) 12743.111 12743.111 0.0 1.0) + (when (not (-> obj buddy-dead?)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (when (not (-> obj buddy-on-shoulders?)) + (when (not (dummy-53 obj s5-0)) + (set! (-> obj buddy-on-shoulders?) #t) + (let ((v1-29 (-> obj entity extra perm))) + (logior! (-> v1-29 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-29 user-int8 2) 0) + ) + 0 + ) + ) + (if (-> obj buddy-on-shoulders?) + (set! (-> s5-0 quad) (-> obj collide-info trans quad)) + ) + (let ((s4-0 (get-process *default-dead-pool* double-lurker-top #x4000))) + (set! (-> obj buddy-handle) + (ppointer->handle + (when s4-0 + (let ((t9-6 (method-of-type double-lurker-top activate))) + (t9-6 (the-as double-lurker-top s4-0) obj 'double-lurker-top (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-0 + double-lurker-top-init-by-other + (-> obj entity) + obj + (-> obj buddy-on-shoulders?) + s5-0 + ) + (-> s4-0 ppointer) + ) + ) + ) + ) + ) + ) + (when (and (not (-> obj dead?)) (not (-> obj buddy-on-shoulders?))) + (dummy-51 obj) + (TODO-RENAME-49 obj *double-lurker-nav-enemy-info*) + ) + (none) + ) + +(defmethod init-from-entity! double-lurker ((obj double-lurker) (arg0 entity-actor)) + (initialize-collision obj) + (TODO-RENAME-48 obj) + (if (-> obj dead?) + (go double-lurker-waiting-to-die) + (go (method-of-object obj nav-enemy-idle)) + ) + (none) + ) + + + + diff --git a/test/decompiler/reference/levels/beach/pelican_REF.gc b/test/decompiler/reference/levels/beach/pelican_REF.gc new file mode 100644 index 0000000000..5ab34c8267 --- /dev/null +++ b/test/decompiler/reference/levels/beach/pelican_REF.gc @@ -0,0 +1,1218 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type pelican-bank +(deftype pelican-bank (basic) + ((circle-speed meters :offset-assert 4) + (dive-time seconds :offset-assert 8) + (to-nest0-time seconds :offset-assert 16) + (to-nest1-time seconds :offset-assert 24) + (land-time seconds :offset-assert 32) + (from-nest-time seconds :offset-assert 40) + (spit-time seconds :offset-assert 48) + (pre-spit-wait-time seconds :offset-assert 56) + (post-spit-wait-time seconds :offset-assert 64) + (run-away-time seconds :offset-assert 72) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +;; definition for method 3 of type pelican-bank +(defmethod inspect pelican-bank ((obj pelican-bank)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tcircle-speed: (meters ~m)~%" (-> obj circle-speed)) + (format #t "~Tdive-time: (seconds ~e)~%" (-> obj dive-time)) + (format #t "~Tto-nest0-time: (seconds ~e)~%" (-> obj to-nest0-time)) + (format #t "~Tto-nest1-time: (seconds ~e)~%" (-> obj to-nest1-time)) + (format #t "~Tland-time: (seconds ~e)~%" (-> obj land-time)) + (format #t "~Tfrom-nest-time: (seconds ~e)~%" (-> obj from-nest-time)) + (format #t "~Tspit-time: (seconds ~e)~%" (-> obj spit-time)) + (format #t "~Tpre-spit-wait-time: (seconds ~e)~%" (-> obj pre-spit-wait-time)) + (format #t "~Tpost-spit-wait-time: (seconds ~e)~%" (-> obj post-spit-wait-time)) + (format #t "~Trun-away-time: (seconds ~e)~%" (-> obj run-away-time)) + obj + ) + +;; definition for symbol *PELICAN-bank*, type pelican-bank +(define *PELICAN-bank* (new 'static 'pelican-bank + :circle-speed (meters 16.0) + :dive-time (seconds 2) + :to-nest0-time (seconds 4) + :to-nest1-time (seconds 8) + :land-time (seconds 2.4) + :from-nest-time (seconds 20) + :spit-time (seconds 1) + :pre-spit-wait-time (seconds 0.5) + :post-spit-wait-time (seconds 1.5) + :run-away-time (seconds 10) + ) + ) + +;; definition of type pelican +(deftype pelican (process-drawable) + ((root-override collide-shape-moving :offset 112) + (query gui-query :inline :offset-assert 176) + (fuel-cell handle :offset-assert 208) + (cam-tracker handle :offset-assert 216) + (path-data curve-control 8 :offset-assert 224) + (path-circle curve-control :offset 224) + (path-dive0 curve-control :offset 228) + (path-to-nest0 curve-control :offset 232) + (path-from-nest0 curve-control :offset 236) + (path-spit0 curve-control :offset 240) + (path-dive1 curve-control :offset 244) + (path-to-nest1 curve-control :offset 248) + (path-to-nest2 curve-control :offset 252) + (path-cache curve-control :offset-assert 256) + (time-cache uint64 :offset-assert 264) + (path-pos float :offset-assert 272) + (path-speed float :offset-assert 276) + (path-max float :offset-assert 280) + (path-vector vector :inline :offset-assert 288) + (state-vector vector :inline :offset-assert 304) + (state-vector1 vector :inline :offset-assert 320) + (state-float float 2 :offset-assert 336) + (state-object symbol :offset-assert 344) + (neck joint-mod :offset-assert 348) + ) + :heap-base #xf0 + :method-count-assert 20 + :size-assert #x160 + :flag-assert #x1400f00160 + (:states + pelican-circle + (pelican-dive path-control curve-control uint) + (pelican-explode symbol) + (pelican-fly-to-end path-control int) + pelican-from-nest + pelican-spit + (pelican-to-nest path-control int) + (pelican-wait-at-end symbol) + (pelican-wait-at-nest symbol) + ) + ) + +;; definition for method 3 of type pelican +(defmethod inspect pelican ((obj pelican)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tquery: #~%" (-> obj query)) + (format #t "~T~Tfuel-cell: ~D~%" (-> obj fuel-cell)) + (format #t "~T~Tcam-tracker: ~D~%" (-> obj cam-tracker)) + (format #t "~T~Tpath-data[8] @ #x~X~%" (-> obj path-data)) + (format #t "~T~Tpath-circle: ~A~%" (-> obj path-circle)) + (format #t "~T~Tpath-dive0: ~A~%" (-> obj path-dive0)) + (format #t "~T~Tpath-to-nest0: ~A~%" (-> obj path-to-nest0)) + (format #t "~T~Tpath-from-nest0: ~A~%" (-> obj path-from-nest0)) + (format #t "~T~Tpath-spit0: ~A~%" (-> obj path-spit0)) + (format #t "~T~Tpath-dive1: ~A~%" (-> obj path-dive1)) + (format #t "~T~Tpath-to-nest1: ~A~%" (-> obj path-to-nest1)) + (format #t "~T~Tpath-to-nest2: ~A~%" (-> obj path-to-nest2)) + (format #t "~T~Tpath-cache: ~A~%" (-> obj path-cache)) + (format #t "~T~Ttime-cache: ~D~%" (-> obj time-cache)) + (format #t "~T~Tpath-pos: ~f~%" (-> obj path-pos)) + (format #t "~T~Tpath-speed: ~f~%" (-> obj path-speed)) + (format #t "~T~Tpath-max: ~f~%" (-> obj path-max)) + (format #t "~T~Tpath-vector: ~`vector`P~%" (-> obj path-vector)) + (format #t "~T~Tstate-vector: ~`vector`P~%" (-> obj state-vector)) + (format #t "~T~Tstate-vector1: ~`vector`P~%" (-> obj state-vector1)) + (format #t "~T~Tstate-float[2] @ #x~X~%" (-> obj state-float)) + (format #t "~T~Tstate-object: ~A~%" (-> obj state-object)) + (format #t "~T~Tneck: ~A~%" (-> obj neck)) + obj + ) + +;; definition for method 7 of type pelican +;; INFO: Return type mismatch process-drawable vs pelican. +(defmethod relocate pelican ((obj pelican) (arg0 int)) + (countdown (v1-0 8) + (if (nonzero? (-> obj path-data v1-0)) + (&+! (-> obj path-data v1-0) arg0) + ) + ) + (if (nonzero? (-> obj path-cache)) + (&+! (-> obj path-cache) arg0) + ) + (if (nonzero? (-> obj neck)) + (&+! (-> obj neck) arg0) + ) + (the-as + pelican + ((the-as (function process-drawable int process-drawable) (find-parent-method pelican 7)) obj arg0) + ) + ) + +;; failed to figure out what this is: +(defskelgroup *pelican-sg* pelican + 0 + 5 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 3 0 5) + :longest-edge (meters 0) + :shadow 4 + ) + +;; definition for function pelican-path-update +(defbehavior pelican-path-update pelican ((arg0 float) (arg1 int) (arg2 float) (arg3 float) (arg4 symbol)) + (TODO-RENAME-9 (-> self align)) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (let* ((f0-1 (+ (-> self path-pos) (* (-> self align align trans z) arg3))) + (f1-2 (-> self path-max)) + (f30-0 (- f0-1 (* (the float (the int (/ f0-1 f1-2))) f1-2))) + ) + (eval-path-curve-div! (-> self path) s3-0 f30-0 'interp) + (+! (-> s3-0 y) (-> self align align trans y)) + (TODO-RENAME-30 (-> self root-override) s3-0) + (TODO-RENAME-12 (-> self path) s3-0 f30-0) + ) + (if arg4 + (set-heading-vec-clear-roll-pitch! (-> self root-override) s3-0) + (seek-toward-heading-vec! (-> self root-override) s3-0 arg0 arg1) + ) + ) + ) + +;; definition for function pelican-fly +(defbehavior pelican-fly pelican ((arg0 (function pelican int)) (arg1 (function pelican int))) + (while #t + (cond + ((= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 5) + ) + (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) 1.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + ) + (else + (ja-channel-push! 1 75) + ) + ) + (let ((s4-0 (arg0 self))) + (dotimes (s3-0 s4-0) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-9 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 param 0) (the float (+ (-> a0-10 frame-group data 0 length) -1))) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! a0-10 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (let ((s4-1 (arg1 self))) + (when (> s4-1 0) + (let ((s3-1 (-> self skel root-channel 0))) + (set! (-> s3-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> s3-1 param 0) (ja-aframe 12.0 0)) + (set! (-> s3-1 param 1) 1.0) + (set! (-> s3-1 frame-num) 0.0) + (joint-control-channel-group! s3-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((s3-2 (-> self skel root-channel 0))) + (set! (-> s3-2 param 0) (ja-aframe 12.0 0)) + (set! (-> s3-2 param 1) 1.0) + (joint-control-channel-group-eval! s3-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-18 (-> self skel root-channel 0))) + (set! (-> a0-18 param 0) 0.25) + (joint-control-channel-group! a0-18 (the-as art-joint-anim #f) num-func-loop!) + ) + (ja-channel-push! 1 300) + (dotimes (s3-3 s4-1) + (let ((a0-20 (-> self skel root-channel 0))) + (set! (-> a0-20 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-20 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-20 param 1) 1.0) + (set! (-> a0-20 frame-num) 0.0) + (joint-control-channel-group! a0-20 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-21 (-> self skel root-channel 0))) + (set! (-> a0-21 param 0) (the float (+ (-> a0-21 frame-group data 0 length) -1))) + (set! (-> a0-21 param 1) 1.0) + (joint-control-channel-group-eval! a0-21 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (let ((a0-23 (-> self skel root-channel 0))) + (set! (-> a0-23 param 0) 1.0) + (joint-control-channel-group! a0-23 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + ) + ) + (none) + ) + +;; definition for function pelican-post +(defbehavior pelican-post pelican () + (ja-post) + (none) + ) + +;; failed to figure out what this is: +(defstate pelican-circle (pelican) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'dive) + (let ((v0-0 (the-as structure #t))) + (set! (-> self state-object) (the-as symbol v0-0)) + v0-0 + ) + ) + ((= v1-0 'fuel-cell) + (handle->process (-> self fuel-cell)) + ) + ((= v1-0 'position) + (set! (-> self path-pos) (the-as float (-> arg3 param 0))) + (let ((a1-3 (TODO-RENAME-12 (-> self path) (new 'stack-no-clear 'vector) (-> self path-pos)))) + (set-heading-vec! (-> self root-override) a1-3) + ) + ) + ) + ) + ) + ) + :enter + (behavior () + (while (-> self child) + (deactivate (-> self child 0)) + ) + (set! (-> self state-object) #f) + (let ((gp-0 (-> self path-vector))) + (eval-path-curve-div! (-> self path-dive0) gp-0 4.5 'interp) + (set! (-> gp-0 y) (+ -4505.6 (-> gp-0 y))) + (let* ((s5-0 (get-process *default-dead-pool* manipy #x4000)) + (v1-8 + (when s5-0 + (let ((t9-3 (method-of-type manipy activate))) + (t9-3 (the-as manipy s5-0) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 manipy-init gp-0 (-> self entity) *fuel-cell-sg* (new 'static 'vector :w 4915.2)) + (-> s5-0 ppointer) + ) + ) + ) + (set! (-> self fuel-cell) (ppointer->handle v1-8)) + (if v1-8 + (send-event + (ppointer->process v1-8) + 'eval + (lambda :behavior pelican () (let ((v0-0 (create-launch-control (-> *part-group-id-table* 63) self))) + (set! (-> self part) v0-0) + v0-0 + ) + ) + ) + ) + ) + ) + (set! (-> self path) (-> self path-circle)) + (set! (-> self path-pos) 0.0) + (set! (-> self path-max) (the float (+ (-> self path curve num-cverts) -1))) + (set! (-> self path-speed) + (/ (* (-> *PELICAN-bank* circle-speed) (-> self path-max)) (path-distance (-> self path))) + ) + (set-roll-to-grav-2! (-> self root-override) -2730.6667) + (none) + ) + :trans + (behavior () + (pelican-path-update 728177.75 30 1.0 (/ (-> self path-max) (path-distance (-> self path))) #f) + (let ((f0-3 (+ (-> self path-pos) (* (-> self path-speed) (-> *display* seconds-per-frame)))) + (f1-2 (-> self path-max)) + ) + (set! (-> self path-pos) (- f0-3 (* (the float (the int (/ f0-3 f1-2))) f1-2))) + ) + (when (and + (and *target* (>= 81920.0 (vector-vector-xz-distance (-> self path-vector) (-> *target* control trans)))) + (not (handle->process (-> self cam-tracker))) + ) + (let ((gp-1 (get-process *default-dead-pool* camera-tracker #x4000))) + (set! (-> self cam-tracker) + (ppointer->handle (when gp-1 + (let ((t9-4 (method-of-type camera-tracker activate))) + (t9-4 (the-as camera-tracker gp-1) self 'camera-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + camera-tracker-init + (lambda :behavior camera-tracker + () + (local-vars + (a0-6 process-tree) + (a1-5 event-message-block) + (t9-6 (function process-tree event-message-block object)) + ) + (while (not (process-grab? *target*)) + (suspend) + ) + (send-event (ppointer->process (-> self parent)) 'position 4.0) + (send-event (ppointer->process (-> self parent)) 'dive) + (suspend) + (suspend) + (send-event *camera* 'blend-from-as-fixed) + (camera-look-at (the-as pair (ppointer->process (-> self parent))) (the-as uint 0)) + (camera-change-to "camera-215" 0 #f) + (until (t9-6 a0-6 a1-5) + (suspend) + (set! a1-5 (new 'stack-no-clear 'event-message-block)) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 0) + (set! (-> a1-5 message) 'got-cell?) + (set! t9-6 send-event-function) + (set! a0-6 (ppointer->process (-> self parent))) + ) + (send-event *camera* 'point-of-interest #f) + (while (!= (-> self message) 'release) + (suspend) + ) + (set! (-> self message) #f) + (while (not (process-release? (handle->process (-> self grab-target)))) + (suspend) + ) + (send-event *camera* 'blend-from-as-fixed) + (camera-look-at (the-as pair *target*) (the-as uint 0)) + (camera-change-to (the-as string 'base) 150 #f) + (none) + ) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + (set! (-> self draw force-lod) 0) + 0 + ) + (when (and (-> self state-object) (>= (-> self path-pos) 6.0) (< (-> self path-pos) 7.0)) + (let ((v1-24 (-> self entity extra perm))) + (logior! (-> v1-24 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-24 user-int8 0) 2) + ) + (go pelican-dive (-> self path-dive0) (-> self path-to-nest0) (the-as uint (-> *PELICAN-bank* to-nest0-time))) + ) + (none) + ) + :code + (behavior () + (suspend) + (send-event (-> self fuel-cell process 0) 'trans-hook fuel-cell-animate) + (pelican-fly + (the-as (function pelican int) (lambda () (rand-vu-int-range 2 4))) + (the-as (function pelican int) (lambda () (rand-vu-int-range 3 5))) + ) + (none) + ) + :post + pelican-post + ) + +;; failed to figure out what this is: +(defstate pelican-dive (pelican) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'got-cell?) + (-> self state-object) + ) + ((= v1-0 'fuel-cell) + (handle->process (-> self fuel-cell)) + ) + ) + ) + ) + ) + :enter + (behavior ((arg0 path-control) (arg1 curve-control) (arg2 uint)) + (init! (-> self query) (the-as string #f) 40 150 25 #t (the-as string #f)) + (set! (-> self state-object) #f) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set-roll-to-grav-2! (-> self root-override) 0.0) + (let ((a0-4 (handle->process (-> self fuel-cell)))) + (cond + (a0-4 + (send-event a0-4 'trans-hook fuel-cell-animate) + ) + (else + ) + ) + ) + (set! (-> self path-cache) arg1) + (set! (-> self time-cache) arg2) + (set! (-> self path) arg0) + (set! (-> self path-pos) 0.0) + (set! (-> self path-max) (the float (+ (-> self path curve num-cverts) -1))) + (set! (-> self path-speed) (/ (* 300.0 (-> self path-max)) (the float (-> *PELICAN-bank* dive-time)))) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (TODO-RENAME-12 (-> self path) gp-1 (-> self path-pos)) + (set-heading-vec! (-> self root-override) gp-1) + ) + (set! (-> self draw force-lod) 0) + 0 + (none) + ) + :exit + (behavior () (set! (-> self draw force-lod) -1) (none)) + :trans + (behavior () + (if (not (handle->process (-> self fuel-cell))) + (go pelican-fly-to-end (-> self path-to-nest2) (the-as int (-> *PELICAN-bank* run-away-time))) + ) + (pelican-path-update 364088.88 30 0.0 0.0 #t) + (set! (-> self path-pos) + (seek (-> self path-pos) (-> self path-max) (* (-> self path-speed) (-> *display* seconds-per-frame))) + ) + (if (= (-> self path-pos) (-> self path-max)) + (go pelican-to-nest (-> self path-cache) (the-as int (-> self time-cache))) + ) + (none) + ) + :code + (behavior ((arg0 path-control) (arg1 curve-control) (arg2 uint)) + (ja-channel-push! 1 60) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> gp-0 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-0 param 1) 0.5) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (let ((gp-1 (handle->process (-> self fuel-cell)))) + (when (and gp-1 (>= (-> self path-pos) 3.8) (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 1) + (set! (-> a1-5 message) 'query) + (set! (-> a1-5 param 0) (the-as uint 'grab)) + (not (send-event-function gp-1 a1-5)) + ) + ) + (level-hint-spawn (game-text-id zero) (the-as string #f) (-> self entity) *entity-pool* (game-task none)) + (send-event gp-1 'grab self) + (send-event gp-1 'draw #f) + (send-event gp-1 'event-hook #f) + (set! (-> self state-object) #t) + ) + ) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (ja-aframe 48.0 0)) + (set! (-> gp-2 param 1) 0.5) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) (the float (+ (-> a0-15 frame-group data 0 length) -1))) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group! a0-15 (the-as art-joint-anim #f) num-func-seek!) + ) + (ja-channel-push! 1 60) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-17 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-17 param 1) 1.0) + (set! (-> a0-17 frame-num) 0.0) + (joint-control-channel-group! a0-17 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (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) 1.0) + (joint-control-channel-group-eval! a0-18 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (anim-loop) + (none) + ) + :post + pelican-post + ) + +;; failed to figure out what this is: +(defstate pelican-to-nest (pelican) + :enter + (behavior ((arg0 path-control) (arg1 int)) + (set! (-> self path) arg0) + (set! (-> self path-pos) 0.0) + (set! (-> self path-max) (the float (+ (-> self path curve num-cverts) -1))) + (set! (-> self path-speed) (/ (* 300.0 (-> self path-max)) (the float arg1))) + (none) + ) + :trans + (behavior () + (pelican-path-update 546133.3 30 0.0 0.0 #f) + (set! (-> self path-pos) + (seek (-> self path-pos) (-> self path-max) (* (-> self path-speed) (-> *display* seconds-per-frame))) + ) + (if (= (-> self path-pos) (-> self path-max)) + (go pelican-wait-at-nest #f) + ) + (none) + ) + :code + (behavior ((arg0 path-control) (arg1 int)) + (pelican-fly + (the-as (function pelican int) (lambda () 1)) + (lambda ((arg0 pelican)) (if (and (>= (-> arg0 path-pos) 4.0) (>= 6.0 (-> arg0 path-pos))) + 1 + 0 + ) + ) + ) + (none) + ) + :post + pelican-post + ) + +;; failed to figure out what this is: +(defstate pelican-wait-at-nest (pelican) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (cond + ((= v1-0 'attack) + (case (-> arg3 param 1) + (('explode) + (let ((a0-2 (handle->process (-> self fuel-cell)))) + (if a0-2 + (send-event a0-2 'trans (-> self root-override trans)) + ) + ) + (go pelican-explode #f) + #f + ) + (else + (let* ((gp-0 arg0) + (v1-13 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) process-drawable)) + gp-0 + ) + ) + (f30-0 8192.0) + (gp-1 (-> self root-override)) + (s4-0 (-> (the-as process-drawable v1-13) root trans)) + ) + (if (< f30-0 + (fabs + (deg-diff (y-angle gp-1) (vector-y-angle (vector-! (new 'stack-no-clear 'vector) s4-0 (-> gp-1 trans)))) + ) + ) + (go pelican-spit) + ) + ) + ) + ) + ) + ((= v1-0 'touch) + (dummy-55 (-> self root-override) arg0 (the-as touching-shapes-entry (-> arg3 param 0)) 0.7 6144.0 16384.0) + ) + ) + ) + ) + ) + :enter + (behavior ((arg0 symbol)) + (set! (-> self path) (-> self path-from-nest0)) + (set! (-> self path-pos) 0.0) + (set! (-> self path-max) (the float (+ (-> self path curve num-cverts) -1))) + (set! (-> self path-speed) (/ (* 300.0 (-> self path-max)) (the float (-> *PELICAN-bank* from-nest-time)))) + (let ((s5-0 (-> self state-vector))) + (eval-path-curve-div! (-> self path) s5-0 (-> self path-pos) 'interp) + (set! (-> self state-float 0) (/ (* 300.0 (vector-vector-distance (-> self root-override trans) s5-0)) + (the float (-> *PELICAN-bank* land-time)) + ) + ) + ) + (TODO-RENAME-12 (-> self path) (-> self path-vector) (-> self path-pos)) + (when arg0 + (TODO-RENAME-30 (-> self root-override) (-> self state-vector)) + (set-heading-vec! (-> self root-override) (-> self path-vector)) + (let ((a0-7 (handle->process (-> self fuel-cell)))) + (if a0-7 + (send-event a0-7 'draw #f) + ) + ) + (let ((a0-10 (-> self entity extra perm))) + (if (< 2 (-> a0-10 user-int8 0)) + (go pelican-explode #t) + ) + ) + ) + (if (nonzero? (-> self neck)) + (set-mode! (-> self neck) (joint-mod-handler-mode look-at)) + ) + (none) + ) + :exit + (behavior () + (if (nonzero? (-> self neck)) + (set-mode! (-> self neck) (joint-mod-handler-mode flex-blend)) + ) + (none) + ) + :trans + (behavior () + (let ((a1-0 (-> self state-vector)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (vector-seek! gp-0 a1-0 (* (-> self state-float 0) (-> *display* seconds-per-frame))) + (TODO-RENAME-30 (-> self root-override) gp-0) + ) + (dummy-45 (-> self root-override)) + (seek-toward-heading-vec! (-> self root-override) (-> self path-vector) 131072.0 300) + (spool-push *art-control* "pelican-spit-ext" 0 self -99.0) + (none) + ) + :code + (behavior ((arg0 symbol)) + (cond + (arg0 + (ja-channel-set! 1) + ) + (else + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) 0.25) + (joint-control-channel-group! a0-2 (the-as art-joint-anim #f) num-func-loop!) + ) + (ja-channel-push! 1 75) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-4 param 1) 1.0) + (set! (-> a0-4 frame-num) 0.0) + (joint-control-channel-group! a0-4 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (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) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (until (vector= (-> self root-override trans) (-> self state-vector)) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) 1.0) + (joint-control-channel-group! a0-9 (the-as art-joint-anim #f) num-func-loop!) + ) + (set! (-> self state-float 0) (* 4.0 (-> self state-float 0))) + (ja-channel-push! 1 15) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-11 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-11 param 1) 1.0) + (set! (-> a0-11 frame-num) 0.0) + (joint-control-channel-group! a0-11 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (ja-blend-eval) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (ja-channel-push! 1 150) + ) + ) + (send-event (handle->process (-> self cam-tracker)) 'message 'release) + (while #t + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-19 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-19 param 1) 1.0) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! a0-19 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-20 (-> self skel root-channel 0))) + (set! (-> a0-20 param 0) (the float (+ (-> a0-20 frame-group data 0 length) -1))) + (set! (-> a0-20 param 1) 1.0) + (joint-control-channel-group-eval! a0-20 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (behavior () + (when *target* + (if *target* + (look-at-enemy! (-> *target* neck) (the-as vector (-> self root-override root-prim prim-core)) 'nothing self) + ) + (if (nonzero? (-> self neck)) + (set-target! (-> self neck) (target-pos 5)) + ) + ) + (pelican-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate pelican-spit (pelican) + :event + (-> pelican-circle event) + :code + (behavior () + (local-vars (v1-21 symbol) (v1-31 symbol)) + (let* ((gp-0 (get-process *default-dead-pool* manipy #x4000)) + (gp-1 + (ppointer->handle + (when gp-0 + (let ((t9-1 (method-of-type manipy activate))) + (t9-1 (the-as manipy gp-0) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 manipy-init (-> self entity extra trans) (-> self entity) *beachcam-sg* #f) + (-> gp-0 ppointer) + ) + ) + ) + ) + (let ((s5-0 (get-process *default-dead-pool* othercam #x4000))) + (ppointer->handle (when s5-0 + (let ((t9-4 (method-of-type othercam activate))) + (t9-4 (the-as othercam s5-0) (-> gp-1 process 0) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 othercam-init-by-other (-> gp-1 process 0) 4 #f #t) + (-> s5-0 ppointer) + ) + ) + ) + (let* ((s5-1 (get-process *default-dead-pool* fuel-cell #x4000)) + (s4-0 (ppointer->handle (when s5-1 + (let ((t9-7 (method-of-type fuel-cell activate))) + (t9-7 (the-as fuel-cell s5-1) self 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 fuel-cell-init-as-clone (process->handle self) 0) + (-> s5-1 ppointer) + ) + ) + ) + (s5-2 (new 'stack-no-clear 'quaternion)) + ) + (quaternion-copy! s5-2 (-> self root-override quat)) + (until v1-21 + (suspend) + (set! v1-21 (or (not *target*) (process-grab? *target*))) + ) + (send-event (-> gp-1 process 0) 'anim-mode 'clone-anim) + (ja-play-spooled-anim + (new 'static 'spool-anim + :name "pelican-spit-ext" + :index 11 + :parts 2 + :command-list + '((10 send-event camera 'teleport-to-vector-start-string (static-vectorm -179 16 -421))) + ) + (the-as art-joint-anim (-> self draw art-group data 10)) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (until v1-31 + (suspend) + (set! v1-31 (or (not *target*) (process-release? *target*))) + ) + (if (handle->process gp-1) + (deactivate (-> gp-1 process 0)) + ) + (if (handle->process s4-0) + (deactivate (-> s4-0 process 0)) + ) + (quaternion-copy! (-> self root-override quat) s5-2) + ) + ) + (let ((gp-2 (get-process *default-dead-pool* process #x4000))) + (when gp-2 + (let ((t9-18 (method-of-type process activate))) + (t9-18 gp-2 self 'process (the-as pointer #x70004000)) + ) + (run-next-time-in-process gp-2 (lambda :behavior pelican + () + (while (or + (-> *setting-control* current ambient) + (-> *setting-control* current movie) + (-> *setting-control* current hint) + ) + (suspend) + ) + (level-hint-spawn + (game-text-id beach-pelican-quick-get-cell) + "sksp0027" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (none) + ) + ) + (-> gp-2 ppointer) + ) + ) + (let ((gp-3 (handle->process (-> self fuel-cell)))) + (when gp-3 + (send-event gp-3 'release) + (set! (-> self path-cache) (-> self path-spit0)) + (let ((s5-3 (new 'stack-no-clear 'vector))) + (eval-path-curve-div! + (-> self path-cache) + s5-3 + (the float (+ (-> self path-cache curve num-cverts) -1)) + 'interp + ) + (send-event gp-3 'trans s5-3) + ) + (send-event gp-3 'draw #t) + (send-event + gp-3 + 'event-hook + (lambda :behavior pelican + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (the-as object (when (or (= arg2 'touch) (= arg2 'attack)) + (let ((v1-7 (birth-pickup-at-point + (-> self root-override trans) + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + (the-as process-drawable *entity-pool*) + (the-as fact-info #f) + ) + ) + ) + (when v1-7 + (set! (-> (the-as collectable (-> v1-7 0)) collect-timeout) 0) + 0 + ) + ) + (deactivate self) + ) + ) + ) + ) + ) + ) + (go pelican-from-nest) + (none) + ) + :post + (behavior () + (if (not (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 10) + ) + ) + (quaternion-identity! (-> self root-override quat)) + ) + (pelican-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate pelican-from-nest (pelican) + :enter + (behavior () (set! (-> self path-pos) 1.5) (none)) + :trans + (behavior () + (pelican-path-update 131072.0 150 0.0 0.0 #f) + (set! (-> self path-pos) + (seek (-> self path-pos) (-> self path-max) (* (-> self path-speed) (-> *display* seconds-per-frame))) + ) + (if (= (-> self path-pos) (-> self path-max)) + (go pelican-dive (-> self path-dive1) (-> self path-to-nest1) (the-as uint (-> *PELICAN-bank* to-nest1-time))) + ) + (none) + ) + :code + (behavior () + (pelican-fly + (the-as (function pelican int) (lambda () (rand-vu-int-range 2 4))) + (the-as (function pelican int) zero-func) + ) + (none) + ) + :post + pelican-post + ) + +;; failed to figure out what this is: +(defstate pelican-fly-to-end (pelican) + :enter + (behavior ((arg0 path-control) (arg1 int)) + (process-entity-status! self (entity-perm-status complete) #t) + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 0) 10) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self path) arg0) + (set! (-> self path-pos) 0.0) + (set! (-> self path-max) (the float (+ (-> self path curve num-cverts) -1))) + (set! (-> self path-speed) (/ (* 300.0 (-> self path-max)) (the float arg1))) + (set! (-> self state-vector quad) (-> self root-override trans quad)) + (set! (-> self state-float 0) 0.0) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (eval-path-curve-div! (-> self path) gp-1 0.0 'interp) + (set! (-> self state-float 1) (* 0.0073242188 (vector-vector-distance (-> self root-override trans) gp-1))) + ) + (none) + ) + :trans + (behavior () + (pelican-path-update 546133.3 30 0.0 0.0 #f) + (set! (-> self path-pos) + (seek (-> self path-pos) (-> self path-max) (* (-> self path-speed) (-> *display* seconds-per-frame))) + ) + (if (= (-> self path-pos) (-> self path-max)) + (go pelican-wait-at-end #f) + ) + (when (< (- (-> *display* base-frame-counter) (-> self state-time)) (the int (-> self state-float 1))) + (set! (-> self state-float 0) + (/ (the float (- (-> *display* base-frame-counter) (-> self state-time))) (-> self state-float 1)) + ) + (vector-lerp! + (-> self root-override trans) + (-> self state-vector) + (-> self root-override trans) + (-> self state-float 0) + ) + ) + (none) + ) + :code + (behavior ((arg0 path-control) (arg1 int)) + (pelican-fly + (the-as (function pelican int) (lambda () 1)) + (lambda ((arg0 pelican)) (if (and (>= (-> arg0 path-pos) 4.0) (>= 6.0 (-> arg0 path-pos))) + 1 + 0 + ) + ) + ) + (none) + ) + :post + pelican-post + ) + +;; failed to figure out what this is: +(defstate pelican-wait-at-end (pelican) + :code + (behavior ((arg0 symbol)) (dummy-18 self) (none)) + ) + +;; failed to figure out what this is: +(defstate pelican-explode (pelican) + :code + (behavior ((arg0 symbol)) + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 0) 5) + ) + (when (not arg0) + (sound-play-by-name (static-sound-name "scrate-break") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-3 (method-of-type part-tracker activate))) + (t9-3 (the-as part-tracker gp-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 71) + -1 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + (let ((gp-2 (new-stack-vector0))) + (set! (-> gp-2 quad) (-> self root-override trans quad)) + (let ((a0-7 (handle->process (-> self fuel-cell)))) + (when a0-7 + (set! (-> gp-2 quad) (-> (the-as process-drawable a0-7) root trans quad)) + (set! (-> gp-2 y) (+ 8192.0 (-> gp-2 y))) + (deactivate a0-7) + ) + ) + (when (not (task-complete? *game-info* (-> self entity extra perm task))) + (let ((v1-29 (birth-pickup-at-point + gp-2 + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + self + (the-as fact-info #f) + ) + ) + ) + (send-event (ppointer->process v1-29) 'movie-pos 1) + ) + ) + ) + (clear-collide-with-as (-> self root-override)) + (ja-channel-set! 0) + (anim-loop) + (none) + ) + :post + (the-as (function none :behavior pelican) ja-post) + ) + +;; definition for method 11 of type pelican +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! pelican ((obj pelican) (arg0 entity-actor)) + (stack-size-set! (-> obj main-thread) 512) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum usually-hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 12288.0 0.0 12288.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *pelican-sg* '()) + (set! (-> obj draw shadow-ctrl) + (new 'process 'shadow-control -81920.0 4096.0 614400.0 (the-as float 25) 409600.0) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj align) (new 'process 'align-control obj)) + (dotimes (s5-1 8) + (let ((v1-27 (new 'process 'curve-control obj 'path (the float (+ s5-1 1))))) + (set! (-> obj path-data s5-1) v1-27) + (logior! (-> v1-27 flags) (path-control-flag display draw-line draw-point draw-text)) + ) + ) + (set! (-> obj fuel-cell) (the-as handle #f)) + (set! (-> obj cam-tracker) (the-as handle #f)) + (set! (-> obj neck) (new 'process 'joint-mod (joint-mod-handler-mode flex-blend) obj 9)) + (set-vector! (-> obj neck twist-max) 2730.6667 2730.6667 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) 61440.0) + (set! (-> obj neck ignore-angle) 16384.0) + (case (-> obj entity extra perm user-int8 0) + ((10) + (go pelican-wait-at-end #t) + ) + ((5) + (go pelican-wait-at-nest #t) + ) + ((2) + (let* ((s4-1 (get-process *default-dead-pool* manipy #x4000)) + (s5-2 (when s4-1 + (let ((t9-15 (method-of-type manipy activate))) + (t9-15 (the-as manipy s4-1) obj 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-1 + manipy-init + (-> obj root-override trans) + (-> obj entity) + *fuel-cell-sg* + (new 'static 'vector :w 4915.2) + ) + (-> s4-1 ppointer) + ) + ) + ) + (set! (-> obj fuel-cell) (the-as handle (if s5-2 + (ppointer->handle s5-2) + (the-as int #f) + ) + ) + ) + (when s5-2 + (send-event + (ppointer->process s5-2) + 'eval + (lambda :behavior pelican () (let ((v0-0 (create-launch-control (-> *part-group-id-table* 63) self))) + (set! (-> self part) v0-0) + v0-0 + ) + ) + ) + (send-event (ppointer->process s5-2) 'trans-hook fuel-cell-animate) + ) + ) + (go pelican-wait-at-nest #t) + ) + (else + (go pelican-circle) + ) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc index 2a7c5bf968..23401a7afb 100644 --- a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc @@ -182,7 +182,7 @@ (TODO-RENAME-48 (_type_) none 48) (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) (TODO-RENAME-50 (_type_ vector) symbol 50) - (dummy-51 (_type_ vector) object 51) + (dummy-51 (_type_) object 51) (dummy-52 (_type_ vector) symbol 52) (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) diff --git a/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc b/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc index b5637c780a..07ad546e96 100644 --- a/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc +++ b/test/decompiler/reference/levels/finalboss/green-eco-lurker_REF.gc @@ -12,6 +12,9 @@ :method-count-assert 76 :size-assert #x1d8 :flag-assert #x4c017001d8 + (:methods + (dummy-51 (_type_ vector) symbol :replace 51) + ) (:states green-eco-lurker-appear green-eco-lurker-appear-land @@ -418,7 +421,6 @@ ) ;; definition for method 51 of type green-eco-lurker -;; INFO: Return type mismatch symbol vs object. ;; Used lq/sq (defmethod dummy-51 green-eco-lurker ((obj green-eco-lurker) (arg0 vector)) (when (or (not *target*) (>= (vector-vector-xz-distance arg0 (target-pos 0)) 36864.0)) @@ -427,7 +429,7 @@ (set! (-> v1-3 w) (-> obj collide-info root-prim local-sphere w)) ) (if (not (TODO-RENAME-50 obj arg0)) - (return (the-as object #t)) + (return #t) ) ) #f diff --git a/test/decompiler/reference/levels/maincave/baby-spider_REF.gc b/test/decompiler/reference/levels/maincave/baby-spider_REF.gc index b69e114fec..aaf9a45055 100644 --- a/test/decompiler/reference/levels/maincave/baby-spider_REF.gc +++ b/test/decompiler/reference/levels/maincave/baby-spider_REF.gc @@ -288,7 +288,7 @@ baby-spider-default-event-handler ;; definition for method 51 of type baby-spider ;; INFO: Return type mismatch float vs object. -(defmethod dummy-51 baby-spider ((obj baby-spider) (arg0 vector)) +(defmethod dummy-51 baby-spider ((obj baby-spider)) (let* ((f0-0 (rand-vu-float-range 0.0 1.0)) (f1-1 (+ 1.0 (* 2.0 f0-0))) (f2-2 f1-1) @@ -575,26 +575,23 @@ baby-spider-default-event-handler (set! (-> self wiggle-angle) 0.0) (set! (-> self chase-rest-time) (rand-vu-int-range 300 1200)) (ja-channel-push! 1 51) - (let* ((gp-0 (-> self skel root-channel 0)) - (t9-2 joint-control-channel-group-eval!) - (a0-2 gp-0) - (a1-2 (-> self draw art-group data 7)) - ) - (t9-2 a0-2 (the-as art-joint-anim a1-2) num-func-identity) + (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 - (when (>= (- (-> *display* base-frame-counter) (-> self wiggle-time)) 300) - (set! (-> self wiggle-time) (-> *display* base-frame-counter)) - (dummy-51 self (the-as vector a1-2)) - ) - (suspend) - (let ((a0-5 (-> self skel root-channel 0))) - (set! (-> a0-5 param 0) 1.0) - (let ((t9-4 joint-control-channel-group-eval!)) - (set! a1-2 (the-as art-element #f)) - (t9-4 a0-5 (the-as art-joint-anim a1-2) num-func-loop!) - ) - ) + ) + (while #t + (when (>= (- (-> *display* base-frame-counter) (-> self wiggle-time)) 300) + (set! (-> self wiggle-time) (-> *display* base-frame-counter)) + (dummy-51 self) + ) + (suspend) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 param 0) 1.0) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-loop!) ) ) (none) diff --git a/test/decompiler/reference/levels/misty/muse_REF.gc b/test/decompiler/reference/levels/misty/muse_REF.gc index 0b861b435f..98621eb33d 100644 --- a/test/decompiler/reference/levels/misty/muse_REF.gc +++ b/test/decompiler/reference/levels/misty/muse_REF.gc @@ -175,7 +175,7 @@ ;; definition for method 51 of type muse ;; INFO: Return type mismatch int vs object. -(defmethod dummy-51 muse ((obj muse) (arg0 vector)) +(defmethod dummy-51 muse ((obj muse)) (dotimes (s5-0 2) (let ((v1-2 (rand-vu-int-range 3 (+ (-> obj node-list length) -1)))) (sp-launch-particles-var @@ -193,13 +193,8 @@ ;; definition for method 39 of type muse (defmethod common-post muse ((obj muse)) - (let* ((a0-1 *art-control*) - (t9-0 (method-of-object a0-1 spool-push)) - (a1-0 (-> obj anim name)) - ) - (t9-0 a0-1 a1-0 0 obj -99.0) - (dummy-51 obj (the-as vector a1-0)) - ) + (spool-push *art-control* (-> obj anim name) 0 obj -99.0) + (dummy-51 obj) ((method-of-type nav-enemy common-post) obj) (none) ) @@ -289,13 +284,8 @@ nav-enemy-default-event-handler (joint-control-channel-group! a0-9 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) ) (until (ja-done? 0) - (let* ((a0-10 *art-control*) - (t9-7 (method-of-object a0-10 spool-push)) - (a1-5 (-> self anim name)) - ) - (t9-7 a0-10 a1-5 0 self -99.0) - (dummy-51 self (the-as vector a1-5)) - ) + (spool-push *art-control* (-> self anim name) 0 self -99.0) + (dummy-51 self) (suspend) (let ((a0-12 (-> self skel root-channel 0))) (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) @@ -556,18 +546,16 @@ nav-enemy-default-event-handler (ja-post) (clear-collide-with-as (-> self collide-info)) (send-event *target* 'trans 'reset) - (let ((gp-4 - (ppointer->handle - (birth-pickup-at-point - (target-pos 0) - (pickup-type fuel-cell) - (the float (-> self entity extra perm task)) - #f - self - (the-as fact-info #f) + (let ((gp-4 (ppointer->handle (birth-pickup-at-point + (target-pos 0) + (pickup-type fuel-cell) + (the float (-> self entity extra perm task)) + #f + self + (the-as fact-info #f) + ) + ) ) - ) - ) ) (send-event (handle->process (the-as handle gp-4)) 'pickup) (while (handle->process (the-as handle gp-4)) @@ -586,14 +574,7 @@ nav-enemy-default-event-handler (none) ) :post - (behavior () - (local-vars (a1-0 none)) - (dummy-51 self (the-as vector a1-0)) - (level-hint-surpress!) - (kill-current-level-hint '() '() 'exit) - (ja-post) - (none) - ) + (behavior () (dummy-51 self) (level-hint-surpress!) (kill-current-level-hint '() '() 'exit) (ja-post) (none)) ) ;; definition for symbol *muse-nav-enemy-info*, type nav-enemy-info diff --git a/test/decompiler/reference/levels/rolling/rolling-race-ring_REF.gc b/test/decompiler/reference/levels/rolling/rolling-race-ring_REF.gc new file mode 100644 index 0000000000..e4a1f0dfb7 --- /dev/null +++ b/test/decompiler/reference/levels/rolling/rolling-race-ring_REF.gc @@ -0,0 +1,1320 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type race-ring +(deftype race-ring (process-drawable) + ((rot-y float :offset-assert 176) + (face-vec vector :inline :offset-assert 192) + (part-track handle :offset-assert 208) + (keep-part-track-alive symbol :offset-assert 216) + (timeout uint64 :offset-assert 224) + (alt-actor entity-actor :offset-assert 232) + (alt-task uint8 :offset-assert 236) + (cyl cylinder-flat :inline :offset-assert 240) + (old-hips vector :inline :offset-assert 288) + ) + :heap-base #xc0 + :method-count-assert 20 + :size-assert #x130 + :flag-assert #x1400c00130 + (:states + race-ring-active + race-ring-idle + race-ring-wait + ) + ) + +;; definition for method 3 of type race-ring +(defmethod inspect race-ring ((obj race-ring)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Trot-y: ~f~%" (-> obj rot-y)) + (format #t "~T~Tface-vec: #~%" (-> obj face-vec)) + (format #t "~T~Tpart-track: ~D~%" (-> obj part-track)) + (format #t "~T~Tkeep-part-track-alive: ~A~%" (-> obj keep-part-track-alive)) + (format #t "~T~Ttimeout: ~D~%" (-> obj timeout)) + (format #t "~T~Talt-actor: ~A~%" (-> obj alt-actor)) + (format #t "~T~Talt-task: ~D~%" (-> obj alt-task)) + (format #t "~T~Tcyl: #~%" (-> obj cyl)) + (format #t "~T~Told-hips: #~%" (-> obj old-hips)) + obj + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 457) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :name "group-rolling-ring" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1773 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1774 :fade-after (meters 80.0)) + (sp-item 1775 :flags (is-3d)) + (sp-item 1776 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1773) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-rnd-flt spt-num 2.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1115684864 1 64.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -1.4222221) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1774) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1115684864 1 64.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -1.4222221) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1775) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 10.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1776) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 12.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 458) (new 'static 'sparticle-launch-group + :length 3 + :duration #x5 + :linger-duration #x8d + :name "group-rolling-spawn-ring" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 1777 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1778 :flags (is-3d)) + (sp-item 1779 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1777) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1115684864 1 64.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-int spt-a 0 63 1.0) + (sp-flt spt-vel-y (meters 0.03)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit3) + (sp-int-plain-rnd spt-next-time 20 19 1) + (sp-launcher-by-id spt-next-launcher 1780) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.0)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1780) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-rnd-int spt-r 1115684864 1 64.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-int spt-a 0 63 1.0) + (sp-int-plain-rnd spt-next-time 20 19 1) + (sp-launcher-by-id spt-next-launcher 1780) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1778) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.06666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1781) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1781) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1781) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1779) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.08)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1782) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1782) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1782) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 459) (new 'static 'sparticle-launch-group + :length 2 + :duration #x5 + :linger-duration #x96 + :name "group-rolling-explode-ring" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1783 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1784 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1783) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 64.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1115684864 1 64.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.1) (meters 0.033333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1784) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 2.0) + (sp-flt spt-scale-x (meters 10.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-int spt-r 1124073472 1 127.0) + (sp-flt spt-g 0.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters 0.06666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.85333335) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; definition for function race-ring-set-particle-rotation-callback +;; INFO: Return type mismatch int vs none. +(defun race-ring-set-particle-rotation-callback ((arg0 part-tracker)) + (let ((f0-0 (-> (the-as (pointer race-ring) (-> arg0 userdata)) 0 rot-y))) + (set! (-> *part-id-table* 1773 init-specs 15 initial-valuef) f0-0) + (set! (-> *part-id-table* 1774 init-specs 15 initial-valuef) f0-0) + (set! (-> *part-id-table* 1775 init-specs 4 initial-valuef) (+ -182.04445 f0-0)) + (set! (-> *part-id-table* 1776 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1777 init-specs 17 initial-valuef) f0-0) + (set! (-> *part-id-table* 1778 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1779 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1783 init-specs 17 initial-valuef) f0-0) + (set! (-> *part-id-table* 1784 init-specs 4 initial-valuef) f0-0) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 460) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :name "group-rolling-ring-blue" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1785 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1786 :fade-after (meters 80.0)) + (sp-item 1787 :flags (is-3d)) + (sp-item 1788 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1785) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-rnd-flt spt-num 2.0 2.0 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1115684864 1 64.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -1.4222221) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1786) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1115684864 1 64.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -1.4222221) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1787) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 10.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1788) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 12.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 461) (new 'static 'sparticle-launch-group + :length 3 + :duration #x5 + :linger-duration #x8d + :name "group-rolling-spawn-ring-blue" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 1789 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1790 :flags (is-3d)) + (sp-item 1791 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1789) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 32.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1115684864 1 64.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-int spt-a 0 63 1.0) + (sp-flt spt-vel-y (meters 0.03)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit3) + (sp-int-plain-rnd spt-next-time 20 19 1) + (sp-launcher-by-id spt-next-launcher 1792) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.0)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1792) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1115684864 1 64.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-int spt-a 0 63 1.0) + (sp-int-plain-rnd spt-next-time 20 19 1) + (sp-launcher-by-id spt-next-launcher 1792) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1790) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 96.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.06666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1793) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1793) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1793) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1791) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x4 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-flt spt-rot-y (degrees 0.0)) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters 0.08)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3 left-multiply-quat) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1794) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1794) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 7 + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-int spt-next-time 5) + (sp-launcher-by-id spt-next-launcher 1794) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 462) (new 'static 'sparticle-launch-group + :length 2 + :duration #x5 + :linger-duration #x96 + :name "group-rolling-explode-ring-blue" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1795 :fade-after (meters 100.0) :falloff-to (meters 100.0)) + (sp-item 1796 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1795) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 64.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1115684864 1 64.0) + (sp-rnd-int spt-b 1115684864 1 64.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.1) (meters 0.033333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 4.5)) + (sp-flt spt-rotate-y (degrees 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1796) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-flt spt-num 2.0) + (sp-flt spt-scale-x (meters 10.0)) + (sp-rnd-flt spt-rot-x 0.0 65536.0 1.0) + (sp-rnd-flt spt-rot-y (degrees -1.0) (degrees 2.0) 1.0) + (sp-flt spt-rot-z (degrees 90.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-rnd-int spt-g 1124073472 1 127.0) + (sp-rnd-int spt-b 1124073472 1 127.0) + (sp-flt spt-a 128.0) + (sp-flt spt-scalevel-x (meters 0.06666667)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.85333335) + (sp-int spt-timer 150) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; definition for function race-ring-blue-set-particle-rotation-callback +;; INFO: Return type mismatch int vs none. +(defun race-ring-blue-set-particle-rotation-callback ((arg0 part-tracker)) + (let ((f0-0 (-> (the-as (pointer race-ring) (-> arg0 userdata)) 0 rot-y))) + (set! (-> *part-id-table* 1785 init-specs 15 initial-valuef) f0-0) + (set! (-> *part-id-table* 1786 init-specs 15 initial-valuef) f0-0) + (set! (-> *part-id-table* 1787 init-specs 4 initial-valuef) (+ -182.04445 f0-0)) + (set! (-> *part-id-table* 1788 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1789 init-specs 17 initial-valuef) f0-0) + (set! (-> *part-id-table* 1790 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1791 init-specs 4 initial-valuef) f0-0) + (set! (-> *part-id-table* 1795 init-specs 17 initial-valuef) f0-0) + (set! (-> *part-id-table* 1796 init-specs 4 initial-valuef) f0-0) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *race-ring-sg* race-ring + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +;; definition for function first-ring? +(defun first-ring? ((arg0 race-ring)) + (not (-> arg0 alt-actor)) + ) + +;; definition for function last-ring? +(defun last-ring? ((arg0 race-ring)) + (not (-> arg0 link next)) + ) + +;; failed to figure out what this is: +(defstate race-ring-active (race-ring) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 symbol)) + (let ((v1-0 arg2)) + (the-as + object + (when (= v1-0 'notify) + (when (and (= (-> arg3 param 0) 'die) (= arg0 (-> self part-track process 0))) + (cond + ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-0 + (let ((t9-1 (method-of-type part-tracker activate))) + (t9-1 (the-as part-tracker gp-0) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 460) + -1 + race-ring-blue-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (set! v0-0 #t) + (set! (-> self keep-part-track-alive) v0-0) + ) + (else + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-1 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-1) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 457) + -1 + race-ring-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + (set! v0-0 #t) + (set! (-> self keep-part-track-alive) v0-0) + ) + ) + v0-0 + ) + ) + ) + ) + ) + :enter + (behavior () + (cond + ((first-ring? self) + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + ) + (else + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + ) + ) + (set! (-> self keep-part-track-alive) #f) + (cond + ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-0 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-0) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 461) + -1 + race-ring-blue-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + ) + (else + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-1 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker gp-1) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 458) + -1 + race-ring-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + ) + ) + (set! (-> self old-hips quad) (-> (target-pos 26) quad)) + (set! (-> self old-hips x) (+ 1.0 (-> self old-hips x))) + (set! (-> self state-time) (-> *display* game-frame-counter)) + (none) + ) + :exit + (behavior () + (sound-play-by-name (static-sound-name "close-racering") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-3 (handle->process (-> self part-track)))) + (if a0-3 + (deactivate a0-3) + ) + ) + (cond + ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-1 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-1) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 462) + -1 + race-ring-blue-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + ) + (else + (let ((gp-2 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-2 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker gp-2) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-2 + part-tracker-init + (-> *part-group-id-table* 459) + -1 + race-ring-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-2 ppointer) + ) + ) + ) + ) + ) + ) + (cond + ((first-ring? self) + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + ) + (else + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + ) + ) + (none) + ) + :trans + (behavior () + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (cond + ((handle->process (-> self part-track)) + (if (-> self keep-part-track-alive) + (set! (-> (the-as part-tracker (-> self part-track process 0)) start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (let ((gp-0 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-0 + (let ((t9-2 (method-of-type part-tracker activate))) + (t9-2 (the-as part-tracker gp-0) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + part-tracker-init + (-> *part-group-id-table* 460) + -1 + race-ring-blue-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (set! (-> self keep-part-track-alive) #t) + ) + (else + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (set! (-> self part-track) + (ppointer->handle (when gp-1 + (let ((t9-5 (method-of-type part-tracker activate))) + (t9-5 (the-as part-tracker gp-1) self 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 457) + -1 + race-ring-set-particle-rotation-callback + (-> self ppointer) + #f + (-> self root trans) + ) + (-> gp-1 ppointer) + ) + ) + ) + ) + (set! (-> self keep-part-track-alive) #t) + ) + ) + (cond + ((not (last-ring? self)) + ) + ((= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (spool-push *art-control* "race-ring-second-anim" 0 self -99.0) + ) + (else + (spool-push *art-control* "race-ring-anim" 0 self -99.0) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (cond + ((first-ring? self) + ) + ((>= (- (-> *display* game-frame-counter) (-> self state-time)) (the-as int (-> self timeout))) + (level-hint-spawn + (game-text-id rolling-ring-hint-be-quick-all) + "sksp0121" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (ambient-hint-spawn "st-lose" (the-as vector #f) *entity-pool* 'stinger) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 0) + (set! (-> a1-2 message) 'activate) + (let ((t9-3 send-event-function) + (v1-7 (-> self alt-actor)) + ) + (t9-3 + (if v1-7 + (-> v1-7 extra process) + ) + a1-2 + ) + ) + ) + (go race-ring-idle) + ) + ) + (when *target* + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self old-hips quad)) + (set! (-> self old-hips quad) (-> (target-pos 26) quad)) + (vector-! gp-0 gp-0 (-> self old-hips)) + (when (>= (ray-flat-cyl-intersect (-> self cyl) (-> self old-hips) gp-0) 0.0) + (level-hint-spawn + (game-text-id rolling-ring-hint-one-ring-down) + "sksp0119" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (if (= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (level-hint-spawn + (game-text-id rolling-ring-hint-be-quick-to-next) + "sksp0120" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (cond + ((first-ring? self) + (close-specific-task! (-> self entity extra perm task) (task-status need-hint)) + (entity-birth-no-kill (-> self link next)) + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) self) + (set! (-> a1-9 num-params) 0) + (set! (-> a1-9 message) 'activate) + (let ((t9-12 send-event-function) + (v1-30 (-> self link next)) + ) + (t9-12 + (if v1-30 + (-> v1-30 extra process) + ) + a1-9 + ) + ) + ) + ) + ((last-ring? self) + (let* ((gp-1 (get-process *default-dead-pool* othercam #x4000)) + (gp-2 (ppointer->handle (when gp-1 + (let ((t9-15 (method-of-type othercam activate))) + (t9-15 (the-as othercam gp-1) self 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 othercam-init-by-other self 4 #f #t) + (-> gp-1 ppointer) + ) + ) + ) + (s5-1 (get-process *default-dead-pool* fuel-cell #x4000)) + (s5-2 + (ppointer->handle + (when s5-1 + (let ((t9-18 (method-of-type fuel-cell activate))) + (t9-18 (the-as fuel-cell s5-1) self 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 fuel-cell-init-as-clone (process->handle self) (-> self entity extra perm task)) + (-> s5-1 ppointer) + ) + ) + ) + ) + (if *target* + (logior! (-> *target* mask) (process-mask sleep)) + ) + (close-specific-task! (-> self entity extra perm task) (task-status need-reminder)) + (logclear! (-> self draw status) (draw-status drwf01)) + (logior! (-> self draw status) (draw-status drwf05)) + (if (= (-> self entity extra perm task) (game-task rolling-ring-chase-2)) + (ja-play-spooled-anim + (new 'static 'spool-anim :name "race-ring-second-anim" :index 4 :parts 2 :command-list '()) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (ja-play-spooled-anim + (new 'static 'spool-anim :name "race-ring-anim" :index 3 :parts 2 :command-list '()) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + ) + (logclear! (-> self draw status) (draw-status drwf05)) + (logior! (-> self draw status) (draw-status drwf01)) + (cond + ((handle->process (the-as int gp-2)) + (deactivate (-> gp-2 process 0)) + ) + (else + ) + ) + (if *target* + (logclear! (-> *target* mask) (process-mask sleep)) + ) + (let ((a0-54 (handle->process s5-2))) + (if a0-54 + (send-event a0-54 'stop-cloning) + ) + ) + ) + ) + (else + (entity-birth-no-kill (-> self link next)) + (let ((a1-22 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-22 from) self) + (set! (-> a1-22 num-params) 0) + (set! (-> a1-22 message) 'activate) + (let ((t9-26 send-event-function) + (v1-86 (-> self link next)) + ) + (t9-26 + (if v1-86 + (-> v1-86 extra process) + ) + a1-22 + ) + ) + ) + ) + ) + (go race-ring-idle) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior race-ring) ja-post) + ) + +;; failed to figure out what this is: +(defstate race-ring-wait (race-ring) + :code + (behavior () + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (while #t + (suspend) + (when (= (get-task-status (the-as game-task (-> self alt-task))) (task-status invalid)) + (close-specific-task! (-> self entity extra perm task) (task-status need-hint)) + (logclear! (-> self mask) (process-mask actor-pause)) + (go race-ring-active) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate race-ring-idle (race-ring) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('activate) + (logclear! (-> self mask) (process-mask actor-pause)) + (go race-ring-active) + ) + ) + ) + :code + (behavior () + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (while #t + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type race-ring +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! race-ring ((obj race-ring) (arg0 entity-actor)) + (let ((a0-1 arg0)) + (if (not (entity-actor-lookup a0-1 'next-actor 0)) + (stack-size-set! (-> obj main-thread) 512) + ) + ) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *race-ring-sg* '()) + (set! (-> obj root pause-adjust-distance) 122880.0) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj part-track) (the-as handle #f)) + (set! (-> obj alt-actor) (entity-actor-lookup arg0 'alt-actor 0)) + (logior! (-> obj draw status) (draw-status drwf01)) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "loop-racering") + :volume #x400 + :fo-max 40 + ) + (-> obj root trans) + ) + ) + (let ((f0-1 (res-lump-float arg0 'timeout))) + (set! (-> obj timeout) (the-as uint (the int (* 300.0 f0-1)))) + ) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (cond + ((-> obj link next) + (vector-! (-> obj face-vec) (-> obj link next extra trans) (-> obj root trans)) + ) + ((-> obj link prev) + (vector-! (-> obj face-vec) (-> obj root trans) (-> obj link prev extra trans)) + ) + ) + (vector-flatten! (-> obj face-vec) (-> obj face-vec) (new 'static 'vector :y 1.0)) + (vector-normalize! (-> obj face-vec) 1.0) + (cond + ((and (-> obj link next) (-> obj link prev)) + (vector-! s4-0 (-> obj link prev extra trans) (-> obj root trans)) + (vector-flatten! s4-0 s4-0 (new 'static 'vector :y 1.0)) + (vector-normalize! s4-0 1.0) + (vector+! s4-0 s4-0 (-> obj face-vec)) + (vector-normalize! s4-0 1.0) + (set! (-> obj rot-y) (acos (vector-dot s4-0 (new 'static 'vector :z 1.0)))) + (if (< (vector-dot s4-0 (new 'static 'vector :x 1.0)) 0.0) + (set! (-> obj rot-y) (- (-> obj rot-y))) + ) + ) + (else + (set! (-> obj rot-y) (acos (vector-dot (-> obj face-vec) (new 'static 'vector :z 1.0)))) + (if (< (vector-dot (-> obj face-vec) (new 'static 'vector :x 1.0)) 0.0) + (set! (-> obj rot-y) (- (-> obj rot-y))) + ) + (set! (-> obj rot-y) (+ 16384.0 (-> obj rot-y))) + ) + ) + ) + (+! (-> obj rot-y) (res-lump-float arg0 'rotoffset)) + (set-vector! (-> obj cyl axis) (cos (-> obj rot-y)) 0.0 (- (sin (-> obj rot-y))) 1.0) + (vector+float*! (the-as vector (-> obj cyl)) (-> obj root trans) (-> obj cyl axis) -2048.0) + (set! (-> obj cyl radius) 24576.0) + (set! (-> obj cyl length) 4096.0) + (cond + ((and + (first-ring? obj) + (!= (get-task-status (-> obj entity extra perm task)) (task-status invalid)) + (!= (get-task-status (-> obj entity extra perm task)) 7) + ) + (set! (-> obj alt-task) (res-lump-value (-> obj entity) 'alt-task uint)) + (if (or (= (-> obj alt-task) 0) (= (get-task-status (the-as game-task (-> obj alt-task))) (task-status invalid))) + (go race-ring-active) + (go race-ring-wait) + ) + ) + ((and (last-ring? obj) (= (get-task-status (-> obj entity extra perm task)) (task-status need-resolution))) + (let ((s5-2 (new 'stack-no-clear 'vector))) + (logclear! (-> obj draw status) (draw-status drwf01)) + (ja-post) + (vector<-cspace! s5-2 (-> obj node-list data 5)) + (logior! (-> obj draw status) (draw-status drwf01)) + (birth-pickup-at-point + s5-2 + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + ) + ) + ((and (last-ring? obj) (!= (get-task-status (-> obj entity extra perm task)) (task-status invalid))) + ) + ) + (set! (-> obj event-hook) (-> race-ring-idle event)) + (go race-ring-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/double-lurker_REF.gc b/test/decompiler/reference/levels/sunken/double-lurker_REF.gc new file mode 100644 index 0000000000..3434b0c275 --- /dev/null +++ b/test/decompiler/reference/levels/sunken/double-lurker_REF.gc @@ -0,0 +1,1325 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type double-lurker-top +(deftype double-lurker-top (nav-enemy) + ((parent-process (pointer double-lurker) :offset 12) + (fall-dest vector :inline :offset-assert 400) + ) + :heap-base #x130 + :method-count-assert 76 + :size-assert #x1a0 + :flag-assert #x4c013001a0 + (:states + (double-lurker-top-knocked-down object vector vector) + double-lurker-top-on-shoulders + double-lurker-top-on-shoulders-die + double-lurker-top-resume + ) + ) + +;; definition for method 3 of type double-lurker-top +(defmethod inspect double-lurker-top ((obj double-lurker-top)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Tfall-dest: #~%" (-> obj fall-dest)) + obj + ) + +;; definition of type double-lurker +(deftype double-lurker (nav-enemy) + ((knocked-back-speed float :offset-assert 400) + (buddy-on-shoulders? symbol :offset-assert 404) + (dead? symbol :offset-assert 408) + (buddy-dead? symbol :offset-assert 412) + (buddy-handle handle :offset-assert 416) + ) + :heap-base #x140 + :method-count-assert 76 + :size-assert #x1a8 + :flag-assert #x4c014001a8 + (:methods + (initialize-collision (_type_) collide-shape-moving :replace 47) + (dummy-53 (_type_ vector) symbol :replace 53) + ) + (:states + double-lurker-both-knocked-back + double-lurker-break-apart + double-lurker-buddy-was-hit + double-lurker-knocked-back + double-lurker-resume + double-lurker-show-anims + double-lurker-waiting-to-die + ) + ) + +;; definition for method 3 of type double-lurker +(defmethod inspect double-lurker ((obj double-lurker)) + (let ((t9-0 (method-of-type nav-enemy inspect))) + (t9-0 obj) + ) + (format #t "~T~Tknocked-back-speed: ~f~%" (-> obj knocked-back-speed)) + (format #t "~T~Tbuddy-on-shoulders?: ~A~%" (-> obj buddy-on-shoulders?)) + (format #t "~T~Tdead?: ~A~%" (-> obj dead?)) + (format #t "~T~Tbuddy-dead?: ~A~%" (-> obj buddy-dead?)) + (format #t "~T~Tbuddy-handle: ~D~%" (-> obj buddy-handle)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *double-lurker-sg* double-lurker + 0 + 5 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 1 0 4.5) + :longest-edge (meters 1) + :shadow 4 + ) + +;; failed to figure out what this is: +(defskelgroup *double-lurker-top-sg* double-lurker-top + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0.5 0 4.5) + :longest-edge (meters 1) + :shadow 4 + ) + +;; definition for symbol *double-lurker-top-nav-enemy-info*, type nav-enemy-info +(define *double-lurker-top-nav-enemy-info* (new 'static 'nav-enemy-info + :idle-anim 12 + :walk-anim 13 + :turn-anim -1 + :notice-anim 14 + :run-anim 15 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 16 + :taunt-anim 16 + :die-anim 17 + :neck-joint -1 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 2880.0) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.1) + :walk-travel-speed (meters 3.0) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.5) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 3.0) + :notice-nav-radius (meters 2.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.25) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :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 + ) + ) + +;; definition for symbol *double-lurker-when-both-nav-enemy-info*, type nav-enemy-info +(define *double-lurker-when-both-nav-enemy-info* (new 'static 'nav-enemy-info + :idle-anim 5 + :walk-anim 6 + :turn-anim -1 + :notice-anim 7 + :run-anim 8 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 9 + :taunt-anim 9 + :die-anim 17 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 720.0) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.1) + :walk-travel-speed (meters 3.8) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.5) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 4.0) + :notice-nav-radius (meters 2.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.25) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :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 + ) + ) + +;; definition for symbol *double-lurker-nav-enemy-info*, type nav-enemy-info +(define *double-lurker-nav-enemy-info* (new 'static 'nav-enemy-info + :idle-anim 12 + :walk-anim 13 + :turn-anim -1 + :notice-anim 14 + :run-anim 15 + :jump-anim -1 + :jump-land-anim -1 + :victory-anim 16 + :taunt-anim 16 + :die-anim 17 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 720.0) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.1) + :walk-travel-speed (meters 3.8) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.5) + :attack-shove-back (meters 3.0) + :attack-shove-up (meters 2.0) + :shadow-size (meters 4.0) + :notice-nav-radius (meters 2.0) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 30.0) + :stop-chase-distance (meters 40.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 24.0 + :jump-anim-start-frame 10.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 3.0) + :jump-height-factor 0.5 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.25) + :shadow-min-y (meters -1.0) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :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 + ) + ) + +;; failed to figure out what this is: +(defstate double-lurker-top-on-shoulders (double-lurker-top) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (let ((v1-1 (-> self fall-dest)) + (a0-4 (-> (the-as vector (-> arg3 param 0)) quad)) + ) + (set! (-> v1-1 quad) a0-4) + (go double-lurker-top-knocked-down a0-4 (the-as vector arg1) (the-as vector arg2)) + ) + ) + (('instant-death) + (let ((v1-3 (the-as object (-> arg3 param 0)))) + (quaternion-axis-angle! + (-> self collide-info quat) + 0.0 + 1.0 + 0.0 + (atan (-> (the-as vector v1-3) x) (-> (the-as vector v1-3) z)) + ) + ) + (go double-lurker-top-on-shoulders-die) + ) + ) + ) + :code + (behavior () + (while #t + (clone-anim-once + (ppointer->handle (-> self parent-process)) + (the-as int (-> self draw origin-joint-index)) + #t + "" + ) + (dummy-47 (-> self collide-info)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate double-lurker-top-on-shoulders-die (double-lurker-top) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (ja-channel-push! 1 30) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 18))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 18)) 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 18)) 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!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior double-lurker-top) ja-post) + ) + +;; failed to figure out what this is: +(defstate double-lurker-top-knocked-down (double-lurker-top) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) self) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'shove) + (set! (-> a1-2 param 0) (-> arg3 param 0)) + (let ((v1-4 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-4 shove-up) 12288.0) + (set! (-> v1-4 shove-back) 8192.0) + (set! (-> a1-2 param 1) (the-as uint v1-4)) + ) + (send-event-function arg0 a1-2) + ) + ) + ) + ) + :code + (behavior ((arg0 object) (arg1 vector) (arg2 vector)) + (dummy-51 self) + (let ((v1-3 (-> self draw shadow-ctrl))) + (set! (-> v1-3 settings flags) (logand -33 (-> v1-3 settings flags))) + ) + 0 + (set! (-> self collide-info nav-flags) (logand -2 (-> self collide-info nav-flags))) + (logior! (-> self collide-info nav-flags) 2) + (set! (-> self nav extra-nav-sphere quad) (-> self fall-dest quad)) + (set! (-> self nav extra-nav-sphere w) 9011.2) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self collide-info trans quad)) + (ja-channel-push! 1 30) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-14 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (vector-lerp! + (-> self collide-info trans) + gp-0 + (-> self fall-dest) + (fmin 1.0 (/ (ja-frame-num 0) (ja-aframe 44.0 0))) + ) + (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) 1.0) + (joint-control-channel-group-eval! a0-18 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (logior! (-> self collide-info nav-flags) 1) + (set! (-> self collide-info nav-flags) (logand -3 (-> self collide-info nav-flags))) + (dummy-27 (-> self nav)) + (go double-lurker-top-resume) + (none) + ) + :post + (the-as (function none :behavior double-lurker-top) transform-post) + ) + +;; failed to figure out what this is: +(defstate double-lurker-top-resume (double-lurker-top) + :code + (behavior () + (cond + ((not *target*) + (go-virtual nav-enemy-idle) + ) + ((TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + ((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) (draw-status drwf03)) + ) + (go-virtual nav-enemy-patrol) + ) + ) + (go-virtual nav-enemy-idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (double-lurker-top) + :virtual #t + :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 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 ((t9-1 (-> (method-of-type nav-enemy nav-enemy-patrol) code))) + (if t9-1 + ((the-as (function none) t9-1)) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-die (double-lurker-top) + :virtual #t + :enter + (behavior () + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 1) 1) + ) + (set! (-> self parent-process 0 dead?) #t) + (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-die) enter))) + (if t9-0 + (t9-0) + ) + ) + (none) + ) + ) + +;; definition for method 51 of type double-lurker-top +;; INFO: Return type mismatch none vs object. +(defmethod dummy-51 double-lurker-top ((obj double-lurker-top)) + (restore-collide-with-as (-> obj collide-info)) + (logior! (-> obj collide-info nav-flags) 1) + (the-as object (dummy-27 (-> obj nav))) + ) + +;; definition for method 47 of type double-lurker-top +(defmethod initialize-collision double-lurker-top ((obj double-lurker-top)) + (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-group s5-0 (the-as uint 6) 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-vector! (-> s4-0 local-sphere) 0.0 10240.0 0.0 14336.0) + (set-root-prim! s5-0 s4-0) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 1) + (set-vector! (-> s3-0 local-sphere) 0.0 2662.4 0.0 4096.0) + (append-prim s4-0 s3-0) + ) + (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 1) + (set-vector! (-> s3-1 local-sphere) 0.0 6758.4 0.0 4096.0) + (append-prim s4-0 s3-1) + ) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-2 collide-with) (the-as uint 16)) + (set! (-> s3-2 prim-core action) (the-as uint 1)) + (set! (-> s3-2 prim-core offense) 1) + (set-vector! (-> s3-2 local-sphere) 0.0 10854.4 0.0 4096.0) + (append-prim s4-0 s3-2) + ) + (let ((s3-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-3 collide-with) (the-as uint 16)) + (set! (-> s3-3 prim-core offense) 2) + (set! (-> s3-3 transform-index) 10) + (set-vector! (-> s3-3 local-sphere) 0.0 0.0 0.0 1228.8) + (append-prim s4-0 s3-3) + ) + (let ((s3-4 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-4 collide-with) (the-as uint 16)) + (set! (-> s3-4 prim-core offense) 2) + (set! (-> s3-4 transform-index) 16) + (set-vector! (-> s3-4 local-sphere) 0.0 0.0 0.0 1228.8) + (append-prim s4-0 s3-4) + ) + (let ((s3-5 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-5 collide-with) (the-as uint 16)) + (set! (-> s3-5 prim-core offense) 2) + (set! (-> s3-5 transform-index) 5) + (set-vector! (-> s3-5 local-sphere) 0.0 -2048.0 0.0 3276.8) + (append-prim s4-0 s3-5) + ) + ) + (set! (-> s5-0 nav-radius) 9011.2) + (backup-collide-with-as s5-0) + (set! (-> obj collide-info) s5-0) + ) + (clear-collide-with-as (-> obj collide-info)) + (none) + ) + +;; definition for method 48 of type double-lurker-top +;; INFO: Return type mismatch uint vs none. +;; Used lq/sq +(defmethod TODO-RENAME-48 double-lurker-top ((obj double-lurker-top)) + (initialize-skeleton obj *double-lurker-top-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (TODO-RENAME-45 obj *double-lurker-top-nav-enemy-info*) + (let ((v1-5 (-> obj parent-process))) + (set! (-> obj collide-info trans quad) (-> v1-5 0 collide-info trans quad)) + (set-vector! (-> obj collide-info scale) 1.0 1.0 1.0 1.0) + (quaternion-copy! (-> obj collide-info quat) (-> v1-5 0 collide-info quat)) + ) + (set! (-> obj collide-info nav-flags) (logand -2 (-> obj collide-info nav-flags))) + (none) + ) + +;; definition for function double-lurker-top-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior double-lurker-top-init-by-other double-lurker-top ((arg0 entity) (arg1 double-lurker) (arg2 symbol) (arg3 vector)) + (initialize-collision self) + (set! (-> self entity) (-> arg1 entity)) + (TODO-RENAME-48 self) + (set! (-> self collide-info trans quad) (-> arg3 quad)) + (cond + (arg2 + (ja-channel-set! 1) + (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 5)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (transform-post) + (let ((v1-13 (-> self draw shadow-ctrl))) + (logior! (-> v1-13 settings flags) 32) + ) + 0 + (go double-lurker-top-on-shoulders) + ) + (else + (ja-channel-set! 1) + (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 12)) + num-func-identity + ) + (set! (-> gp-2 frame-num) 0.0) + ) + (transform-post) + (dummy-60 (-> self collide-info) 40960.0 40960.0 #t (the-as uint 1)) + (dummy-51 self) + (go double-lurker-top-resume) + ) + ) + (none) + ) + +;; definition for function double-lurker-default-event-handler +;; WARN: disable def twice: 80. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +;; WARN: disable def twice: 120. This may happen when a cond (no else) is nested inside of another conditional, but it should be rare. +(defbehavior double-lurker-default-event-handler double-lurker ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('touch) + (set! (-> self touch-time) (-> *display* base-frame-counter)) + (dummy-44 self arg0 arg3) + ) + (('attack) + (when (= (-> arg0 type) target) + (nav-enemy-set-hit-from-direction arg0) + (cond + ((-> self buddy-on-shoulders?) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (vector-! s4-0 (target-pos 0) (-> self collide-info trans)) + (cond + ((and + (>= (-> s4-0 y) 8192.0) + (>= 14563.556 (fabs (deg- (quaternion-y-angle (-> self collide-info quat)) (atan (-> s4-0 x) (-> s4-0 z))))) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'shove) + (set! (-> a1-4 param 0) (-> arg3 param 0)) + (let ((v1-13 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-13 shove-up) 12288.0) + (set! (-> v1-13 shove-back) 8192.0) + (set! (-> a1-4 param 1) (the-as uint v1-13)) + ) + (when (send-event-function arg0 a1-4) + (increment-success-for-hint (game-text-id sunken-double-lurker-hint)) + (go double-lurker-buddy-was-hit) + (return #f) + v0-0 + ) + ) + ) + (else + (when (and + ((method-of-type touching-shapes-entry prims-touching-action?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> (the-as target arg0) control) + (the-as uint 1) + (the-as uint 0) + ) + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'shove) + (set! (-> a1-6 param 0) (-> arg3 param 0)) + (let ((v1-23 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-23 shove-up) 12288.0) + (set! (-> v1-23 shove-back) 8192.0) + (set! (-> a1-6 param 1) (the-as uint v1-23)) + ) + (send-event-function arg0 a1-6) + ) + ) + (level-hint-spawn + (game-text-id sunken-double-lurker-hint) + "sksp0127" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (go double-lurker-both-knocked-back) + (return #f) + v0-0 + ) + ) + ) + ) + ) + (else + (nav-enemy-set-hit-from-direction arg0) + (dummy-43 self arg0 arg3) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate double-lurker-show-anims (double-lurker) + :trans + (behavior () 0 (none)) + :code + (behavior () 0 (none)) + :post + (the-as (function none :behavior double-lurker) transform-post) + ) + +;; failed to figure out what this is: +(defstate double-lurker-resume (double-lurker) + :code + (behavior () + (cond + ((not *target*) + (go-virtual nav-enemy-idle) + ) + ((TODO-RENAME-46 self (-> self nav-info notice-distance)) + (go-virtual nav-enemy-chase) + ) + ((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) (draw-status drwf03)) + ) + (go-virtual nav-enemy-patrol) + ) + ) + (go-virtual nav-enemy-idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-idle (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + ) + +;; failed to figure out what this is: +(defstate nav-enemy-patrol (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + :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 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 ((t9-1 (-> (method-of-type nav-enemy nav-enemy-patrol) code))) + (if t9-1 + ((the-as (function none) t9-1)) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-notice (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + :enter + (behavior () + (start-hint-timer (game-text-id sunken-double-lurker-hint)) + (let ((t9-1 (-> (method-of-type nav-enemy nav-enemy-notice) enter))) + (if t9-1 + (t9-1) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stop-chase (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (double-lurker) + :virtual #t + :event + double-lurker-default-event-handler + ) + +;; failed to figure out what this is: +(defstate nav-enemy-die (double-lurker) + :virtual #t + :enter + (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) + ) + (set! (-> self dead?) #t) + (let ((t9-0 (-> (method-of-type nav-enemy nav-enemy-die) enter))) + (if t9-0 + (t9-0) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate double-lurker-both-knocked-back (double-lurker) + :enter + (behavior () (set! (-> self knocked-back-speed) 40960.0) (none)) + :trans + (behavior () + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let* ((f0-3 + (seek-with-smooth (-> self knocked-back-speed) 0.0 (* 49152.0 (-> *display* seconds-per-frame)) 0.5 0.01) + ) + (f30-0 (* f0-3 (-> *display* seconds-per-frame))) + ) + (set! (-> self knocked-back-speed) f0-3) + (vector-float*! (-> self collide-info transv) (-> self hit-from-dir) f0-3) + (when (< 0.0 f0-3) + (let ((v1-7 (-> self nav travel))) + (.lvf vf1 (&-> (-> self collide-info transv) quad)) + (let ((f0-4 (-> *display* seconds-per-frame))) + (.mov at-0 f0-4) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-7 quad) vf1) + ) + (let ((gp-0 #f)) + (dummy-28 (-> self nav) -1) + (let ((a2-1 (new 'stack-no-clear 'check-vector-collision-with-nav-spheres-info))) + (if (>= (dummy-23 (-> self nav) (-> self nav travel) a2-1) 0.0) + (set! gp-0 #t) + ) + ) + (when (not gp-0) + (let ((s5-0 (new 'stack 'clip-travel-vector-to-mesh-return-info))) + (dummy-24 (-> self nav) (* 1.2 f30-0) s5-0) + (if (-> s5-0 found-boundary) + (set! gp-0 #t) + ) + ) + ) + (when gp-0 + (set! (-> self knocked-back-speed) 0.0) + (vector-reset! (-> self collide-info transv)) + ) + ) + ) + ) + (set! (-> self collide-info transv y) (+ -36864.0 (-> self collide-info transv y))) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (the-as uint 1) + 8192.0 + #t + (-> self nav-info hover-if-no-ground) + #f + ) + (dummy-27 (-> self nav)) + (none) + ) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 11))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 11)) 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 11)) 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!) + ) + ) + (go double-lurker-resume) + (none) + ) + :post + (the-as (function none :behavior double-lurker) nav-enemy-simple-post) + ) + +;; definition for method 52 of type double-lurker +;; Used lq/sq +(defmethod dummy-52 double-lurker ((obj double-lurker) (arg0 vector)) + (dummy-28 (-> obj nav) -1) + (let ((a1-2 (new 'stack-no-clear 'vector))) + (vector-float*! a1-2 (-> obj hit-from-dir) 22937.602) + (vector+! a1-2 a1-2 (-> obj collide-info trans)) + (dummy-13 (-> obj nav) a1-2 (-> obj hit-from-dir)) + ) + (when (>= (vector-xz-length (-> obj nav travel)) 18841.602) + (vector+! arg0 (-> obj collide-info trans) (-> obj nav travel)) + (let ((a1-5 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'collide-tri-result)) + ) + (set! (-> a1-5 quad) (-> arg0 quad)) + (set! (-> a1-5 y) (+ 8192.0 (-> a1-5 y))) + (when (>= (dummy-10 *collide-cache* a1-5 (new 'static 'vector :y -40960.0 :w 1.0) 40.96 1 obj s4-0 1) 0.0) + (set! (-> arg0 y) (-> s4-0 intersect y)) + (return #t) + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate double-lurker-buddy-was-hit (double-lurker) + :code + (behavior () + (set! (-> self buddy-on-shoulders?) #f) + (let ((v1-2 (-> self entity extra perm))) + (logior! (-> v1-2 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-2 user-int8 2) 1) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (if (dummy-52 self gp-0) + (send-event (handle->process (-> self buddy-handle)) 'trigger gp-0) + (send-event (handle->process (-> self buddy-handle)) 'instant-death (-> self hit-from-dir)) + ) + ) + (dummy-51 self) + (TODO-RENAME-49 self *double-lurker-nav-enemy-info*) + (go double-lurker-break-apart) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate double-lurker-break-apart (double-lurker) + :event + double-lurker-default-event-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 10))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 10)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 10)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go double-lurker-resume) + (none) + ) + :post + (the-as (function none :behavior double-lurker) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(defstate double-lurker-knocked-back (double-lurker) + :enter + (behavior () (set! (-> self knocked-back-speed) 40960.0) (none)) + :trans + (behavior () + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let* ((f0-3 + (seek-with-smooth (-> self knocked-back-speed) 0.0 (* 49152.0 (-> *display* seconds-per-frame)) 0.5 0.01) + ) + (f30-0 (* f0-3 (-> *display* seconds-per-frame))) + ) + (set! (-> self knocked-back-speed) f0-3) + (vector-float*! (-> self collide-info transv) (-> self hit-from-dir) f0-3) + (when (< 0.0 f0-3) + (let ((v1-7 (-> self nav travel))) + (.lvf vf1 (&-> (-> self collide-info transv) quad)) + (let ((f0-4 (-> *display* seconds-per-frame))) + (.mov at-0 f0-4) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> v1-7 quad) vf1) + ) + (let ((gp-0 #f)) + (dummy-28 (-> self nav) -1) + (let ((a2-1 (new 'stack-no-clear 'check-vector-collision-with-nav-spheres-info))) + (if (>= (dummy-23 (-> self nav) (-> self nav travel) a2-1) 0.0) + (set! gp-0 #t) + ) + ) + (when (not gp-0) + (let ((s5-0 (new 'stack 'clip-travel-vector-to-mesh-return-info))) + (dummy-24 (-> self nav) (* 1.2 f30-0) s5-0) + (if (-> s5-0 found-boundary) + (set! gp-0 #t) + ) + ) + ) + (when gp-0 + (set! (-> self knocked-back-speed) 0.0) + (vector-reset! (-> self collide-info transv)) + ) + ) + ) + ) + (set! (-> self collide-info transv y) (+ -36864.0 (-> self collide-info transv y))) + (dummy-59 + (-> self collide-info) + (-> self collide-info transv) + (the-as uint 1) + 8192.0 + #t + (-> self nav-info hover-if-no-ground) + #f + ) + (dummy-27 (-> self nav)) + (none) + ) + ) + :code + (behavior () + (ja-channel-push! 1 60) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 18))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 18)) 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 18)) 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!) + ) + ) + (go double-lurker-resume) + (none) + ) + :post + (the-as (function none :behavior double-lurker) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(defstate double-lurker-waiting-to-die (double-lurker) + :code + (behavior () + (clear-collide-with-as (-> self collide-info)) + (logior! (-> self draw status) (draw-status drwf01)) + (until (not (-> self child)) + (suspend) + ) + (none) + ) + ) + +;; definition for method 53 of type double-lurker +(defmethod dummy-53 double-lurker ((obj double-lurker) (arg0 vector)) + (let* ((s3-0 (-> obj path curve num-cverts)) + (s4-0 (rand-vu-int-count s3-0)) + ) + (while (nonzero? s3-0) + (+! s3-0 -1) + (eval-path-curve-div! (-> obj path) arg0 (the float s4-0) 'interp) + (if (not (TODO-RENAME-50 obj arg0)) + (return #t) + ) + ) + ) + #f + ) + +;; definition for method 47 of type double-lurker +(defmethod initialize-collision double-lurker ((obj double-lurker)) + (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-group s5-0 (the-as uint 9) 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-vector! (-> s4-0 local-sphere) 0.0 12288.0 0.0 18432.0) + (set-root-prim! s5-0 s4-0) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 15564.8 0.0 3686.4) + (append-prim s4-0 s3-0) + ) + (let ((s3-1 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 4) + (set-vector! (-> s3-1 local-sphere) 0.0 19660.8 0.0 3686.4) + (append-prim s4-0 s3-1) + ) + (let ((s3-2 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-2 collide-with) (the-as uint 16)) + (set! (-> s3-2 prim-core offense) 0) + (set! (-> s3-2 transform-index) 5) + (set-vector! (-> s3-2 local-sphere) 0.0 8192.0 -1024.0 3276.8) + (append-prim s4-0 s3-2) + ) + (let ((s3-3 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-3 collide-with) (the-as uint 16)) + (set! (-> s3-3 prim-core action) (the-as uint 1)) + (set! (-> s3-3 prim-core offense) 4) + (set-vector! (-> s3-3 local-sphere) 0.0 3276.8 0.0 3686.4) + (append-prim s4-0 s3-3) + ) + (let ((s3-4 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-4 collide-with) (the-as uint 16)) + (set! (-> s3-4 prim-core action) (the-as uint 1)) + (set! (-> s3-4 prim-core offense) 4) + (set-vector! (-> s3-4 local-sphere) 0.0 7372.8 0.0 3686.4) + (append-prim s4-0 s3-4) + ) + (let ((s3-5 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 2)))) + (set! (-> s3-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-5 collide-with) (the-as uint 16)) + (set! (-> s3-5 prim-core action) (the-as uint 1)) + (set! (-> s3-5 prim-core offense) 4) + (set-vector! (-> s3-5 local-sphere) 0.0 11468.8 0.0 3686.4) + (append-prim s4-0 s3-5) + ) + (let ((s3-6 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-6 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-6 collide-with) (the-as uint 16)) + (set! (-> s3-6 prim-core offense) 2) + (set! (-> s3-6 transform-index) 5) + (set-vector! (-> s3-6 local-sphere) 0.0 -2048.0 -2048.0 3686.4) + (append-prim s4-0 s3-6) + ) + (let ((s3-7 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-7 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-7 collide-with) (the-as uint 16)) + (set! (-> s3-7 prim-core offense) 2) + (set! (-> s3-7 transform-index) 10) + (set-vector! (-> s3-7 local-sphere) 0.0 1024.0 0.0 1638.4) + (append-prim s4-0 s3-7) + ) + (let ((s3-8 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 1)))) + (set! (-> s3-8 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-8 collide-with) (the-as uint 16)) + (set! (-> s3-8 prim-core offense) 2) + (set! (-> s3-8 transform-index) 16) + (set-vector! (-> s3-8 local-sphere) 0.0 -1024.0 0.0 1638.4) + (append-prim s4-0 s3-8) + ) + ) + (set! (-> s5-0 nav-radius) 9830.4) + (backup-collide-with-as s5-0) + (set! (-> obj collide-info) s5-0) + s5-0 + ) + ) + +;; definition for method 51 of type double-lurker +;; INFO: Return type mismatch symbol vs object. +(defmethod dummy-51 double-lurker ((obj double-lurker)) + (let ((v1-1 (-> obj collide-info root-prim))) + (let ((a0-1 0)) + (dotimes (a1-0 3) + (let ((a2-2 (-> (the-as collide-shape-prim-group v1-1) prims a0-1))) + (set! (-> a2-2 collide-with) (the-as uint 0)) + (set! (-> a2-2 prim-core collide-as) (the-as uint 0)) + (set! (-> a2-2 prim-core action) (the-as uint 0)) + (set! (-> a2-2 prim-core offense) 0) + ) + 0 + (+! a0-1 1) + ) + ) + (countdown (a0-4 (-> (the-as collide-shape-prim-group v1-1) num-prims)) + (let ((a1-3 (-> (the-as collide-shape-prim-group v1-1) prims a0-4))) + (if (and (= (-> a1-3 prim-core offense) 4) (logtest? (-> a1-3 prim-id) 2)) + (set! (-> a1-3 prim-core offense) 1) + ) + ) + ) + ) + (the-as object #f) + ) + +;; definition for method 48 of type double-lurker +;; INFO: Return type mismatch float vs none. +;; Used lq/sq +(defmethod TODO-RENAME-48 double-lurker ((obj double-lurker)) + (set! (-> obj buddy-handle) (the-as handle #f)) + (process-drawable-from-entity! obj (the-as entity-actor (-> obj entity))) + (set! (-> obj align) (new 'process 'align-control obj)) + (initialize-skeleton obj *double-lurker-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (set! (-> obj buddy-on-shoulders?) #t) + (set! (-> obj dead?) #f) + (set! (-> obj buddy-dead?) #f) + (let ((v1-7 (-> obj entity extra perm))) + (if (nonzero? (-> v1-7 user-int8 2)) + (set! (-> obj buddy-on-shoulders?) #f) + ) + (when (nonzero? (-> v1-7 user-int8 0)) + (set! (-> obj dead?) #t) + (set! (-> obj buddy-on-shoulders?) #f) + ) + (when (nonzero? (-> v1-7 user-int8 1)) + (set! (-> obj buddy-dead?) #t) + (set! (-> obj buddy-on-shoulders?) #f) + ) + ) + (TODO-RENAME-45 obj *double-lurker-when-both-nav-enemy-info*) + (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-vector! (-> obj neck twist-max) 12743.111 12743.111 0.0 1.0) + (when (not (-> obj buddy-dead?)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (when (not (-> obj buddy-on-shoulders?)) + (when (not (dummy-53 obj s5-0)) + (set! (-> obj buddy-on-shoulders?) #t) + (let ((v1-29 (-> obj entity extra perm))) + (logior! (-> v1-29 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-29 user-int8 2) 0) + ) + 0 + ) + ) + (if (-> obj buddy-on-shoulders?) + (set! (-> s5-0 quad) (-> obj collide-info trans quad)) + ) + (let ((s4-0 (get-process *default-dead-pool* double-lurker-top #x4000))) + (set! (-> obj buddy-handle) + (ppointer->handle + (when s4-0 + (let ((t9-6 (method-of-type double-lurker-top activate))) + (t9-6 (the-as double-lurker-top s4-0) obj 'double-lurker-top (the-as pointer #x70004000)) + ) + (run-now-in-process + s4-0 + double-lurker-top-init-by-other + (-> obj entity) + obj + (-> obj buddy-on-shoulders?) + s5-0 + ) + (-> s4-0 ppointer) + ) + ) + ) + ) + ) + ) + (when (and (not (-> obj dead?)) (not (-> obj buddy-on-shoulders?))) + (dummy-51 obj) + (TODO-RENAME-49 obj *double-lurker-nav-enemy-info*) + ) + (none) + ) + +;; definition for method 11 of type double-lurker +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! double-lurker ((obj double-lurker) (arg0 entity-actor)) + (initialize-collision obj) + (TODO-RENAME-48 obj) + (if (-> obj dead?) + (go double-lurker-waiting-to-die) + (go (method-of-object obj nav-enemy-idle)) + ) + (none) + )