diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 59e4d7d007..1fde496e03 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -934,6 +934,8 @@ (MISSING-orb-hint #x233) + (beach-eco-rock-increment #x239) + (jungle-maindoor-hint #x23c) (firecanyon-not-enough-cells #x24f) @@ -998,10 +1000,13 @@ (red-eco-tutorial #x2a6) (daxter-blue-eco-plat-tutorial #x2a7) - (misty-bone-bridge-hint #x2aa) (fish? #x2a9) + (misty-bone-bridge-hint #x2aa) + + (beach-grottopole-increment #x2af) + (firecanyon-collect-cells-collected #x2b1) (firecanyon-collect-cells-collected-reminder #x2b2) (firecanyon-collect-cells-text #x2b3) @@ -1009,10 +1014,6 @@ (missed #x2b5) (lose! #x2b6) - - - - (village2-gambler-money #x300) (village2-geologist-money #x301) (village2-warrior-money #x302) @@ -1052,7 +1053,7 @@ (reach-center #x323) ;; task name? (rolling-ring-chase-1 #x324) (rolling-ring-chase-2 #x325) - + (sunken-kiera-you-raised-a-piece-of-lpc #x326) (rolling-beat-lurkers #x327) (swamp-finished-with-flutflut #x328) (rolling-race-beat-record #x335) @@ -1065,6 +1066,7 @@ (rolling-ring-hint-be-quick-to-next #x340) (rolling-ring-hint-be-quick-all #x341) + (sunken-pipegame-follow-it #x343) (sunken-helix-daxter-bad-feeling #x344) (sunken-blue-eco-charger-hint #x345) (sunken-double-lurker-hint #x347) @@ -1492,7 +1494,7 @@ (define-extern process type) ; deftype provided by C Kernel (deftype process (process-tree) ((pool dead-pool :offset-assert #x20) - (status basic :offset-assert #x24) + (status basic :offset-assert #x24) ; a symbol (pid int32 :offset-assert #x28) (main-thread cpu-thread :offset-assert #x2c) (top-thread thread :offset-assert #x30) @@ -23944,6 +23946,8 @@ :size-assert #xb4 :heap-base #x50 :flag-assert #x14005000b4 + (:states + windmill-one-idle) ) (deftype grottopole (process-drawable) @@ -23958,6 +23962,10 @@ :size-assert #xc8 :heap-base #x60 :flag-assert #x14006000c8 + (:states + grottopole-idle + grottopole-moving-up + grottopole-moving-down) ) (deftype ecoventrock (process-drawable) @@ -23966,6 +23974,9 @@ :size-assert #xb0 :heap-base #x40 :flag-assert #x14004000b0 + (:states + (ecoventrock-break symbol) + ecoventrock-idle) ) (deftype flying-rock (process-drawable) @@ -23976,6 +23987,9 @@ :size-assert #xc0 :heap-base #x50 :flag-assert #x14005000c0 + (:states + flying-rock-rolling + flying-rock-idle) ) (deftype bladeassm (process-drawable) @@ -23986,6 +24000,8 @@ :size-assert #xb4 :heap-base #x50 :flag-assert #x14005000b4 + (:states + bladeassm-idle) ) (deftype flutflutegg (process-drawable) @@ -24008,6 +24024,11 @@ (:methods (dummy-20 (_type_ float float float) none 20) ) + (:states + (flutflutegg-break symbol) + flutflutegg-idle + flutflutegg-physics-fall + flutflutegg-physics) ) (deftype harvester (process-drawable) @@ -24018,6 +24039,9 @@ :size-assert #xb4 :heap-base #x50 :flag-assert #x14005000b4 + (:states + harvester-idle + (harvester-inflate symbol)) ) (deftype beachcam (process-hidden) @@ -24040,27 +24064,12 @@ (define-extern *beachcam-sg* skeleton-group) (define-extern *harvester-sg* skeleton-group) -(define-extern harvester-idle (state harvester)) ;; unknown type -(define-extern harvester-inflate (state symbol harvester)) ;; unknown type (define-extern *flutflutegg-sg* skeleton-group) -(define-extern flutflutegg-break (state symbol flutflutegg)) ;; unknown type -(define-extern flutflutegg-idle (state flutflutegg)) ;; unknown type -(define-extern flutflutegg-physics-fall (state flutflutegg)) ;; unknown type -(define-extern flutflutegg-physics (state flutflutegg)) ;; unknown type (define-extern *bladeassm-sg* skeleton-group) -(define-extern bladeassm-idle (state bladeassm)) ;; unknown type (define-extern *kickrock-sg* skeleton-group) -(define-extern flying-rock-rolling (state flying-rock)) ;; unknown type -(define-extern flying-rock-idle (state flying-rock)) ;; unknown type (define-extern *ecoventrock-sg* skeleton-group) -(define-extern ecoventrock-break (state symbol ecoventrock)) ;; unknown type -(define-extern ecoventrock-idle (state ecoventrock)) ;; unknown type (define-extern *grottopole-sg* skeleton-group) -(define-extern grottopole-idle (state grottopole)) ;; unknown type -(define-extern grottopole-moving-up (state grottopole)) ;; unknown type -(define-extern grottopole-moving-down (state grottopole)) ;; unknown type (define-extern *windmill-one-sg* skeleton-group) -(define-extern windmill-one-idle (state windmill-one)) ;; unknown type (define-extern *flutflut-naked-sg* skeleton-group) @@ -33330,6 +33339,9 @@ (:methods (dummy-20 (_type_ float) vector 20) ) + (:states + blue-eco-charger-orb-idle + blue-eco-charger-orb-active) ) (deftype blue-eco-charger (process-drawable) @@ -33346,6 +33358,11 @@ (dummy-20 (_type_) object 20) (dummy-21 (_type_ symbol) object 21) ) + (:states + blue-eco-charger-idle + (blue-eco-charger-open symbol) + blue-eco-charger-close + blue-eco-charger-stuck-open) ) (deftype exit-chamber-items (structure) @@ -33385,6 +33402,13 @@ (dummy-23 (_type_ symbol) object 23) (dummy-24 (_type_ float) none 24) ) + (:states + exit-chamber-charger-puzzle + exit-chamber-idle-in-sunken + (exit-chamber-idle-in-village symbol) + exit-chamber-lower + exit-chamber-rise + exit-chamber-charger-puzzle-beaten) ) (deftype exit-chamber-button (basebutton) @@ -33403,20 +33427,8 @@ ;; - Unknowns (define-extern *exit-chamber-sg* skeleton-group) -(define-extern exit-chamber-charger-puzzle (state exit-chamber)) ;; unknown type -(define-extern exit-chamber-idle-in-sunken (state exit-chamber)) ;; unknown type -(define-extern exit-chamber-idle-in-village (state exit-chamber)) ;; unknown type -(define-extern exit-chamber-lower (state exit-chamber)) ;; unknown type -(define-extern exit-chamber-rise (state exit-chamber)) ;; unknown type -(define-extern exit-chamber-charger-puzzle-beaten (state exit-chamber)) ;; unknown type (define-extern *blue-eco-charger-sg* skeleton-group) -(define-extern blue-eco-charger-idle (state blue-eco-charger)) ;; unknown type -(define-extern blue-eco-charger-open (state symbol blue-eco-charger)) ;; unknown type -(define-extern blue-eco-charger-close (state blue-eco-charger)) ;; unknown type -(define-extern blue-eco-charger-stuck-open (state blue-eco-charger)) ;; unknown type (define-extern *blue-eco-charger-orb-sg* skeleton-group) -(define-extern blue-eco-charger-orb-idle (state blue-eco-charger-orb)) ;; unknown type -(define-extern blue-eco-charger-orb-active (state blue-eco-charger-orb)) ;; unknown type ;; ---------------------- @@ -33537,8 +33549,8 @@ (sucked-up-far-part-pos vector :inline :offset-assert 80) (blown-out-jar-part-pos vector :inline :offset-assert 96) (blown-out-far-part-pos vector :inline :offset-assert 112) - (sucked-up-part basic :offset-assert 128) - (blown-out-part basic :offset-assert 132) + (sucked-up-part sparticle-launch-control :offset-assert 128) ; guesses + (blown-out-part sparticle-launch-control :offset-assert 132) ; guesses ) :method-count-assert 9 :size-assert #x88 @@ -33546,11 +33558,11 @@ ) (deftype sunken-pipegame (process-drawable) - ((abort-audio-if-beaten? basic :offset-assert 176) + ((abort-audio-if-beaten? symbol :offset-assert 176) (challenges-mask uint32 :offset-assert 180) (challenge int32 :offset-assert 184) (ticker ticky :inline :offset-assert 192) - (button sunken-pipegame-button 3 :offset-assert 224) + (button (pointer sunken-pipegame-button) 3 :offset-assert 224) (prize sunken-pipegame-prize 3 :inline :offset-assert 240) ) :method-count-assert 23 @@ -33558,23 +33570,21 @@ :heap-base #x230 :flag-assert #x17023002a0 (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) - (dummy-22 () none 22) + (dummy-20 (_type_) none 20) + (dummy-21 (_type_ symbol) symbol 21) + (dummy-22 (_type_ symbol) none 22) ) + (:states + sunken-pipegame-start-up + sunken-pipegame-idle + sunken-pipegame-end-play + sunken-pipegame-beat-challenge + sunken-pipegame-begin-play) ) ;; - Functions -(define-extern sunken-pipegame-button-init-by-other function) - -;; - Unknowns - -(define-extern sunken-pipegame-start-up (state sunken-pipegame)) ;; unknown type -(define-extern sunken-pipegame-idle (state sunken-pipegame)) ;; unknown type -(define-extern sunken-pipegame-end-play (state sunken-pipegame)) ;; unknown type -(define-extern sunken-pipegame-beat-challenge (state sunken-pipegame)) ;; unknown type -(define-extern sunken-pipegame-begin-play (state sunken-pipegame)) ;; unknown type +(define-extern sunken-pipegame-button-init-by-other (function vector quaternion entity-actor symbol none :behavior sunken-pipegame-button)) ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index 077ba65017..ff7acce611 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -2767,7 +2767,7 @@ "(code exit-chamber-idle-in-sunken)": [[16, "event-message-block"]], "(event exit-chamber-idle-in-sunken)": [ - [16, "event-message-block"], + [16, "vector"], [32, "event-message-block"] ], @@ -5947,5 +5947,58 @@ [96, "event-message-block"] ], + "(method 11 sunken-pipegame)": [ + [16, "vector"], + [32, "quaternion"], + [48, "event-message-block"] + ], + + "(code sunken-pipegame-begin-play)": [ + [16, "vector"], + [32, "event-message-block"], + [112, "vector"], + [128, "vector"], + [144, "vector"], + [160, "vector"], + [176, "vector"], + [192, "vector"] + ], + + "(code sunken-pipegame-end-play)": [ + [16, "event-message-block"] + ], + + "(enter sunken-pipegame-begin-play)": [ + [16, "event-message-block"] + ], + + "(trans exit-chamber-idle-in-village)": [ + [16, "event-message-block"] + ], + + "(code exit-chamber-idle-in-village)": [ + [16, "event-message-block"] + ], + + "(code exit-chamber-lower)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(code exit-chamber-rise)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(event exit-chamber-idle-in-village)": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "(method 11 exit-chamber)": [ + [16, "matrix"], + [96, "vector"] + ], + "placeholder-do-not-add-below!": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc index 2c1507c61b..a468fd3a1c 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -3149,9 +3149,19 @@ [33, "s4", "process-drawable"] ], - "(method 23 exit-chamber)": [[107, "a1", "fuel-cell"]], + "(method 23 exit-chamber)": [ + [113, "a0", "fuel-cell"] + ], - "(code exit-chamber-rise)": [[15, "v1", "fuel-cell"]], + "(code exit-chamber-rise)": [ + [15, "v1", "fuel-cell"], + [64, "v1", "sunkencam"], + [81, "v1", "art-joint-anim"], + [157, "v1", "art-joint-anim"], + [211, "v1", "art-joint-anim"], + [292, "v1", "art-joint-anim"], + [424, "v1", "fuel-cell"] + ], "(method 25 sunken-water)": [ [121, "v1", "uint"], @@ -4346,10 +4356,11 @@ ], "beachcam-spawn": [ - [68, "gp", "handle"], - [77, "a0", "pov-camera"], - [88, "v1", "handle"], - [106, "s5", "handle"] + [[57, 85], "gp", "handle"], + [[68, 76], "v1", "handle"], + [80, "v1", "pov-camera"], + [[84, 92], "v1", "handle"], + [[103, 110], "s5", "handle"] ], "(code ecoventrock-break)": [ @@ -7298,5 +7309,57 @@ [[9, 42], "a2", "(pointer int8)"] ], + "(event sunken-pipegame-idle)": [ + [6, "a0", "sunken-pipegame-button"] + ], + + "(method 11 sunken-pipegame)": [ + [189, "a1", "collectable"], + [280, "s0", "collectable"], + [371, "s0", "collectable"], + [[407, 410], "v1", "sunken-pipegame-button"] + ], + + "(method 7 sunken-pipegame)": [ + [33, "t9", "(function process-drawable int process-drawable)"] + ], + + "(code sunken-pipegame-begin-play)": [ + [179, "v1", "float"], + [260, "v1", "float"], + [519, "v1", "float"], + [596, "v1", "float"] + ], + + "(method 22 sunken-pipegame)": [ + [20, "v1", "collectable"], + [25, "v1", "collectable"], + [54, "v1", "collectable"], + [59, "v1", "collectable"] + ], + + "(enter exit-chamber-lower)": [ + [14, "v1", "fuel-cell"] + ], + + "(code exit-chamber-lower)": [ + [29, "v1", "sunkencam"], + [50, "v1", "art-joint-anim"], + [162, "v1", "art-joint-anim"], + [241, "v1", "art-joint-anim"], + [308, "v1", "fuel-cell"] + ], + + "(method 11 exit-chamber)": [ + [190, "v1", "art-joint-anim"] + ], + + "ray-cylinder-intersect": [ + [20, "v1", "uint"], + [20, "a0", "uint"] + // [25, "v1", "uint"], + // [25, "a0", "uint"] + ], + "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 1696f5760f..3125577d5b 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -3827,5 +3827,20 @@ } }, + "(method 23 exit-chamber)": { + "vars": { + "v1-39": ["v1-39", "handle"] + } + }, + + "beachcam-spawn": { + "vars": { + "gp-1": ["gp-1", "handle"], + "v1-12": ["v1-12", "handle"], + "v1-15": ["v1-15", "handle"], + "s5-2": ["s5-2", "handle"] + } + }, + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc index d384525728..f71d3b1741 100644 --- a/goal_src/engine/ui/text-h.gc +++ b/goal_src/engine/ui/text-h.gc @@ -147,6 +147,8 @@ (MISSING-orb-hint #x233) + (beach-eco-rock-increment #x239) + (jungle-maindoor-hint #x23c) (firecanyon-not-enough-cells #x24f) @@ -211,10 +213,13 @@ (red-eco-tutorial #x2a6) (daxter-blue-eco-plat-tutorial #x2a7) - (misty-bone-bridge-hint #x2aa) (fish? #x2a9) + (misty-bone-bridge-hint #x2aa) + + (beach-grottopole-increment #x2af) + (firecanyon-collect-cells-collected #x2b1) (firecanyon-collect-cells-collected-reminder #x2b2) (firecanyon-collect-cells-text #x2b3) @@ -222,10 +227,6 @@ (missed #x2b5) (lose! #x2b6) - - - - (village2-gambler-money #x300) (village2-geologist-money #x301) (village2-warrior-money #x302) @@ -265,7 +266,7 @@ (reach-center #x323) ;; task name? (rolling-ring-chase-1 #x324) (rolling-ring-chase-2 #x325) - + (sunken-kiera-you-raised-a-piece-of-lpc #x326) (rolling-beat-lurkers #x327) (swamp-finished-with-flutflut #x328) (rolling-race-beat-record #x335) @@ -278,6 +279,7 @@ (rolling-ring-hint-be-quick-to-next #x340) (rolling-ring-hint-be-quick-all #x341) + (sunken-pipegame-follow-it #x343) (sunken-helix-daxter-bad-feeling #x344) (sunken-blue-eco-charger-hint #x345) (sunken-double-lurker-hint #x347) diff --git a/goal_src/levels/beach/beach-obs.gc b/goal_src/levels/beach/beach-obs.gc index 089ebf1184..4d0e4fc3f5 100644 --- a/goal_src/levels/beach/beach-obs.gc +++ b/goal_src/levels/beach/beach-obs.gc @@ -5,12 +5,1748 @@ ;; name in dgo: beach-obs ;; dgos: BEA, L1 -(define-extern *beachcam-sg* skeleton-group) -(define-extern *harvester-sg* skeleton-group) -(define-extern *flutflutegg-sg* skeleton-group) -(define-extern *bladeassm-sg* skeleton-group) -(define-extern *kickrock-sg* skeleton-group) -(define-extern *ecoventrock-sg* skeleton-group) -(define-extern *grottopole-sg* skeleton-group) -(define-extern *windmill-one-sg* skeleton-group) -(define-extern *flutflut-naked-sg* skeleton-group) \ No newline at end of file +(define-extern spawn-flying-rock (function vector vector float entity none)) + +;; DECOMP BEGINS + +(defskelgroup *beachcam-sg* beachcam + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 60) + :longest-edge (meters 0) + ) + +(deftype windmill-one (process-drawable) + ((root-override collide-shape-moving :offset 112) + (sound-id sound-id :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + windmill-one-idle + ) + ) + + +(defskelgroup *windmill-one-sg* windmill-one + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem -12 -8 -1 16) + :longest-edge (meters 7.5) + ) + +(defstate windmill-one-idle (windmill-one) + :exit + (behavior () (sound-stop (-> self sound-id)) (none)) + :trans + (behavior () + (rider-trans) + (let ((t2-0 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 4)))) + (if (!= (+ (-> t2-0 x) (-> t2-0 y) (-> t2-0 z)) 0.0) + (sound-play-by-name (static-sound-name "gears-rumble") (-> self sound-id) 1024 0 0 1 (the-as symbol t2-0)) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 0.5) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 0.5) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior windmill-one) rider-post) + ) + +(defmethod init-from-entity! windmill-one ((obj windmill-one) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) -40960.0 -40960.0 32768.0 69632.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 3)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 8) + (set-vector! (-> s2-0 local-sphere) 4915.2 0.0 -4915.2 13516.8) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 3)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 9) + (set-vector! (-> s2-1 local-sphere) 4915.2 0.0 -4915.2 13516.8) + (append-prim s3-0 s2-1) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (set! (-> obj root-override pause-adjust-distance) 409600.0) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *windmill-one-sg* '()) + (logior! (-> obj skel status) 1) + (dummy-47 (-> obj root-override)) + (set! (-> obj sound-id) (new-sound-id)) + (go windmill-one-idle) + (none) + ) + +(set! (-> *part-group-id-table* 155) (new 'static 'sparticle-launch-group + :length 7 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-beach-grotto-pole-rocks" + :launcher + (new 'static 'inline-array sparticle-group-item 7 + (sp-item 539 :period 1500 :length 15) + (sp-item 539 :period 1500 :length 30) + (sp-item 539 :period 1500 :length 45) + (sp-item 539 :period 1500 :length 75) + (sp-item 539 :period 1500 :length 150) + (sp-item 539 :period 1500 :length 300) + (sp-item 540 :period 1500 :length 30) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +(set! (-> *part-id-table* 539) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters -9.0) (meters 18.0) 1.0) + (sp-flt spt-y (meters -6.0)) + (sp-rnd-flt spt-z -36864.0 73728.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 40.0 1.0) + (sp-rnd-flt spt-g 32.0 40.0 1.0) + (sp-rnd-flt spt-b 32.0 40.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters -0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -0.68266666 1.0) + (sp-int spt-timer 390) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 540) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 12.0) + (sp-flt spt-y (meters -7.0)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 4.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 48.0 16.0 1.0) + (sp-flt spt-g 48.0) + (sp-flt spt-b 48.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-fade-a 1.0666667) + (sp-flt spt-accel-y 0.06826667) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 541) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 3.5) (meters 6.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 541) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a 0.0) + (sp-int-plain-rnd spt-next-time 450 239 1) + (sp-launcher-by-id spt-next-launcher 542) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 542) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.14222223) (sp-end)) + ) + ) + +(deftype grottopole (process-drawable) + ((root-override collide-shape :offset 112) + (speed meters :offset-assert 176) + (distance meters :offset-assert 180) + (position int32 :offset-assert 184) + (max-position int32 :offset-assert 188) + (incomming-attack-id uint64 :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xc8 + :flag-assert #x14006000c8 + (:states + grottopole-idle + grottopole-moving-down + grottopole-moving-up + ) + ) + + +(defskelgroup *grottopole-sg* grottopole + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -8 0 9) + :longest-edge (meters 0) + ) + +(defstate grottopole-idle (grottopole) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (when (= (-> arg0 type) target) + (case arg2 + (('attack) + (let ((v1-2 (-> arg3 param 2))) + (when (!= v1-2 (-> self incomming-attack-id)) + (set! (-> self incomming-attack-id) v1-2) + (case (-> arg3 param 1) + (('uppercut) + (when (and + (< (-> *target* control trans y) (+ -40960.0 (-> self root-override trans y))) + (< (-> self position) (-> self max-position)) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 2) + ) + ) + (sound-play-by-name (static-sound-name "grotto-pole-hit") (new-sound-id) 1024 0 0 1 #t) + (sound-play-by-name (static-sound-name "dirt-crumble") (new-sound-id) 1024 0 0 1 #t) + (increment-success-for-hint (game-text-id beach-grottopole-increment)) + (go grottopole-moving-up) + ) + ) + (('flop) + (when (and + (< (+ -40960.0 (-> self root-override trans y)) (-> *target* control trans y)) + (> (-> self position) 0) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 1) + ) + ) + (sound-play-by-name (static-sound-name "grotto-pole-hit") (new-sound-id) 1024 0 0 1 #t) + (sound-play-by-name (static-sound-name "dirt-crumble") (new-sound-id) 1024 0 0 1 #t) + (go grottopole-moving-down) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (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 3)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (suspend) + (while #t + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + (none) + ) + ) + +(defun move-grottopole ((arg0 grottopole) (arg1 float)) + (let ((f30-0 0.0) + (s4-0 (new-stack-vector0)) + (s3-0 (new-stack-vector0)) + (s2-0 #f) + ) + (set! (-> arg0 part local-clock) 0) + (set-vector! s4-0 0.0 0.0 0.0 1.0) + (while (and (not s2-0) (< f30-0 (-> arg0 distance))) + (let ((f28-0 (* (-> arg0 speed) (-> *display* seconds-per-frame)))) + (when (< (-> arg0 distance) (+ f30-0 f28-0)) + (set! f28-0 (- (-> arg0 distance) f30-0)) + (set! s2-0 #t) + ) + (set! (-> s4-0 y) (* f28-0 arg1)) + (TODO-RENAME-28 (-> arg0 root-override) s4-0) + (+! f30-0 f28-0) + ) + (set! (-> s3-0 quad) (-> arg0 entity extra trans quad)) + (set! (-> s3-0 y) (+ -4096.0 (-> s3-0 y))) + (spawn (-> arg0 part) s3-0) + (suspend) + 0 + ) + ) + 0 + (none) + ) + +(defun move-grottopole-to-position ((arg0 grottopole)) + (let ((a1-0 (new 'stack-no-clear 'vector))) + (set-vector! a1-0 0.0 (* (-> arg0 distance) (the float (-> arg0 position))) 0.0 1.0) + (TODO-RENAME-28 (-> arg0 root-override) a1-0) + ) + 0 + (none) + ) + +(defstate grottopole-moving-up (grottopole) + :code + (behavior () + (+! (-> self position) 1) + (let ((v1-4 (-> self entity extra perm))) + (logior! (-> v1-4 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-4 user-int16 0) (-> self position)) + ) + (move-grottopole self 1.0) + (go grottopole-idle) + (none) + ) + :post + (the-as (function none :behavior grottopole) transform-post) + ) + +(defstate grottopole-moving-down (grottopole) + :code + (behavior () + (+! (-> self position) -1) + (let ((v1-4 (-> self entity extra perm))) + (logior! (-> v1-4 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-4 user-int16 0) (-> self position)) + ) + (move-grottopole self -1.0) + (go grottopole-idle) + (none) + ) + :post + (the-as (function none :behavior grottopole) transform-post) + ) + +(defmethod init-from-entity! grottopole ((obj grottopole) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 -20480.0 0.0 40960.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 3) + (set-vector! (-> s2-0 local-sphere) 0.0 -20480.0 0.0 40960.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 3) + (set-vector! (-> s2-1 local-sphere) 0.0 -20480.0 0.0 40960.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 2) (the-as uint 2)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 3) + (set-vector! (-> s2-2 local-sphere) 0.0 -20480.0 0.0 40960.0) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *grottopole-sg* '()) + (set! (-> obj speed) (res-lump-float arg0 'speed :default 81920.0)) + (set! (-> obj distance) (res-lump-float arg0 'distance :default 3072.0)) + (set! (-> obj position) 0) + (set! (-> obj max-position) (res-lump-value arg0 'num-positions int :default (the-as uint128 3))) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 155) obj)) + (set! (-> obj position) (-> obj entity extra perm user-int16 0)) + (move-grottopole-to-position obj) + (go grottopole-idle) + (none) + ) + +(deftype ecoventrock (process-drawable) + ((root-override collide-shape :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + (ecoventrock-break symbol) + ecoventrock-idle + ) + ) + + +(defskelgroup *ecoventrock-sg* ecoventrock + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 1 0 3) + :longest-edge (meters 0) + ) + +(set! (-> *part-group-id-table* 156) (new 'static 'sparticle-launch-group + :length 6 + :duration #x258 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-beach-harvester-rock-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 6 + (sp-item 543 :period 1500 :length 5) + (sp-item 544 :period 1500 :length 5) + (sp-item 545 :period 1500 :length 5) + (sp-item 546 :period 1500 :length 5) + (sp-item 547 :period 1500 :length 5) + (sp-item 548 :period 1500 :length 15) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 547) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 15.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 130.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 54.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.1333334) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 543) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 4.0 6.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 16.0 1.0) + (sp-rnd-flt spt-g 70.0 16.0 1.0) + (sp-flt spt-b 70.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-y (meters 0.06666667)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-accel-y -10.922667) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 174) + (sp-launcher-by-id spt-next-launcher 549) + (sp-flt spt-conerot-x (degrees 45.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 544) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 4.0 6.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 16.0 1.0) + (sp-rnd-flt spt-g 70.0 16.0 1.0) + (sp-flt spt-b 70.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-y (meters 0.04)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-accel-y -10.922667) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 125) + (sp-launcher-by-id spt-next-launcher 549) + (sp-flt spt-conerot-x (degrees 30.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 545) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 4.0 6.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 80.0 16.0 1.0) + (sp-rnd-flt spt-g 80.0 16.0 1.0) + (sp-flt spt-b 80.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-y (meters 0.08)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-accel-y -10.922667) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 195) + (sp-launcher-by-id spt-next-launcher 549) + (sp-flt spt-conerot-x (degrees 35.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 549) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-vel-y (meters 0.026666667)) + (sp-rnd-int-flt spt-rotvel-z (degrees -1.2) 1 436.90668) + (sp-flt spt-fade-a -1.0666667) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 548) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 1.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-flt spt-scalevel-y (meters 0.0033333334)) + (sp-flt spt-accel-y -1.0922667) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-int-plain-rnd spt-next-time 30 299 1) + (sp-launcher-by-id spt-next-launcher 550) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 550) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.2) (sp-end)) + ) + ) + +(defstate ecoventrock-idle (ecoventrock) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (sound-play-by-name (static-sound-name "cannon-shot") (new-sound-id) 1024 0 0 1 #t) + (increment-success-for-hint (game-text-id beach-eco-rock-increment)) + (go ecoventrock-break #f) + ) + ) + ) + :code + (behavior () + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + (none) + ) + ) + +(defstate ecoventrock-break (ecoventrock) + :event + (the-as + (function process int symbol event-message-block object :behavior ecoventrock) + process-drawable-fuel-cell-handler + ) + :enter + (behavior ((arg0 symbol)) (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :code + (behavior ((arg0 symbol)) + (local-vars (sv-128 symbol)) + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (process-entity-status! self (entity-perm-status complete) #t) + (let ((v1-2 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (send-event + (if v1-2 + (-> v1-2 extra process) + ) + 'update + ) + ) + (when (not arg0) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker s5-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + part-tracker-init + (-> *part-group-id-table* 156) + -1 + #f + #f + #f + (-> self root-override root-prim prim-core) + ) + (-> s5-0 ppointer) + ) + ) + (let* ((s5-1 (-> self root-override trans)) + (v1-14 (target-pos 0)) + (f0-1 (- (-> s5-1 x) (-> v1-14 x))) + (f1-2 (- (-> s5-1 z) (-> v1-14 z))) + (f2-1 7372.8) + (f30-0 5734.4) + (f2-2 (/ f2-1 (sqrtf (+ (* f0-1 f0-1) (* f1-2 f1-2))))) + (f28-0 (* f0-1 f2-2)) + (f26-0 (* f1-2 f2-2)) + (s4-0 (new-stack-vector0)) + (s3-0 (new-stack-vector0)) + ) + (set-vector! s3-0 f28-0 f30-0 f26-0 1.0) + (set-vector! s4-0 (+ (-> s5-1 x) (-> s3-0 x)) (-> s5-1 y) (+ (-> s5-1 z) (-> s3-0 z)) 1.0) + (vector-float*! s3-0 s3-0 10.0) + (spawn-flying-rock s4-0 s3-0 1.0 (-> self entity)) + (let ((f20-0 (rand-vu-float-range 90.0 130.0)) + (f24-0 (rand-vu-float-range 230.0 270.0)) + ) + (let ((f22-0 (cos (* 182.04445 f20-0))) + (f0-14 (sin (* 182.04445 f20-0))) + ) + (set-vector! s3-0 (+ (* f26-0 f0-14) (* f28-0 f22-0)) f30-0 (+ (* f28-0 (- f0-14)) (* f26-0 f22-0)) 1.0) + ) + (set-vector! s4-0 (+ (-> s5-1 x) (-> s3-0 x)) (-> s5-1 y) (+ (-> s5-1 z) (-> s3-0 z)) 1.0) + (vector-float*! s3-0 s3-0 10.0) + (spawn-flying-rock s4-0 s3-0 1.0 (-> self entity)) + (let ((f22-1 (cos (* 182.04445 f24-0))) + (f0-30 (sin (* 182.04445 f24-0))) + ) + (set-vector! s3-0 (+ (* f26-0 f0-30) (* f28-0 f22-1)) f30-0 (+ (* f28-0 (- f0-30)) (* f26-0 f22-1)) 1.0) + ) + ) + (set-vector! s4-0 (+ (-> s5-1 x) (-> s3-0 x)) (-> s5-1 y) (+ (-> s5-1 z) (-> s3-0 z)) 1.0) + (vector-float*! s3-0 s3-0 10.0) + (spawn-flying-rock s4-0 s3-0 1.0 (-> self entity)) + (set-vector! s3-0 (+ (* -0.866 f26-0) (* 0.5 f28-0)) (* 0.5 f30-0) (+ (* 0.866 f28-0) (* 0.5 f26-0)) 1.0) + (set-vector! s4-0 (-> s5-1 x) (+ 3276.8 (-> s5-1 y)) (-> s5-1 z) 1.0) + (vector-float*! s3-0 s3-0 10.0) + (spawn-flying-rock s4-0 s3-0 1.0 (-> self entity)) + ) + ) + (when (or (-> self link prev) (-> self link next)) + (set! sv-128 (the-as symbol #f)) + (apply-all (-> self link) actor-link-subtask-complete-hook (& sv-128)) + (when sv-128 + (let ((s5-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s5-2) 150) + (suspend) + ) + ) + (let ((gp-1 + (cond + (arg0 + (the-as int #f) + ) + (else + (ambient-hint-spawn "gamcam10" (the-as vector #f) *entity-pool* 'camera) + (let ((gp-2 (get-process *default-dead-pool* pov-camera #x4000))) + (ppointer->handle (when gp-2 + (let ((t9-23 (method-of-type pov-camera activate))) + (t9-23 (the-as pov-camera gp-2) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-2 + pov-camera-init-by-other + (-> self root-override trans) + *beachcam-sg* + (-> self name) + 0 + #f + '() + ) + (-> gp-2 ppointer) + ) + ) + ) + ) + ) + ) + ) + (process-drawable-birth-fuel-cell (the-as entity #f) (the-as vector #f) #f) + (while (handle->process (the-as handle gp-1)) + (suspend) + ) + ) + (while (-> self child) + (suspend) + ) + ) + ) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + (none) + ) + ) + +(defmethod init-from-entity! ecoventrock ((obj ecoventrock) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 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! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 2457.6 0.0 6963.2) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *ecoventrock-sg* '()) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (transform-post) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go ecoventrock-break #t) + (go ecoventrock-idle) + ) + (none) + ) + +(deftype flying-rock (process-drawable) + ((root-override collide-shape-moving :offset 112) + (tumble quaternion :inline :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xc0 + :flag-assert #x14005000c0 + (:states + flying-rock-idle + flying-rock-rolling + ) + ) + + +(defskelgroup *kickrock-sg* kickrock + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +(defstate flying-rock-rolling (flying-rock) + :enter + (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :code + (behavior () + (let ((gp-0 #f) + (f30-0 0.99) + (s5-0 0) + ) + (while (< s5-0 2) + (cond + ((logtest? (-> self root-override status) 1) + (when (not gp-0) + (+! s5-0 1) + (set! f30-0 0.8) + (set! gp-0 #t) + ) + ) + (else + (when gp-0 + (set! f30-0 0.99) + (set! gp-0 #f) + ) + ) + ) + (vector-float*! (-> self root-override transv) (-> self root-override transv) f30-0) + (set! (-> self root-override transv w) 1.0) + (if (not gp-0) + (vector-v++! (-> self root-override transv) (dummy-62 (-> self root-override) (new-stack-vector0) 1.0)) + ) + (dummy-47 (-> self root-override)) + (dummy-33 (-> self root-override) (-> self root-override transv) (the-as uint 1)) + (quaternion*! (-> self root-override quat) (-> self root-override quat) (-> self tumble)) + (suspend) + ) + ) + (while (< 2048.0 (vector-length (-> self root-override transv))) + (cond + ((logtest? (-> self root-override status) 1) + (vector-float*! (-> self root-override transv) (-> self root-override transv) 0.8) + ) + (else + (vector-float*! (-> self root-override transv) (-> self root-override transv) 0.99) + (vector-v++! (-> self root-override transv) (dummy-62 (-> self root-override) (new-stack-vector0) 1.0)) + ) + ) + (set! (-> self root-override transv w) 1.0) + (dummy-47 (-> self root-override)) + (dummy-33 (-> self root-override) (-> self root-override transv) (the-as uint 1)) + (let ((gp-2 (new 'stack-no-clear 'vector)) + (f30-1 (vector-length (-> self root-override transv))) + ) + (set-vector! gp-2 (-> self root-override transv z) 0.0 (- (-> self root-override transv x)) 1.0) + (vector-normalize! gp-2 1.0) + (let ((f0-12 (* 0.00061035156 (-> *display* seconds-per-frame) f30-1))) + (quaternion-vector-angle! (-> self tumble) gp-2 (* 10430.379 f0-12)) + ) + ) + (quaternion*! (-> self root-override quat) (-> self tumble) (-> self root-override quat)) + (suspend) + ) + (go flying-rock-idle) + (none) + ) + :post + (behavior () + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (go flying-rock-idle) + ) + (ja-post) + (none) + ) + ) + +(defstate flying-rock-idle (flying-rock) + :code + (behavior () + (clear-collide-with-as (-> self root-override)) + (while (or + (logtest? (-> self draw status) (draw-status drwf03)) + (and + *target* + (>= 204800.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + (suspend) + ) + (deactivate self) + (none) + ) + :post + (the-as (function none :behavior flying-rock) ja-post) + ) + +(defbehavior flying-rock-init-by-other flying-rock ((arg0 vector) (arg1 vector) (arg2 float) (arg3 entity)) + (set! (-> self entity) arg3) + (let ((s3-0 (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player)))) + (set! (-> s3-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s3-0 reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) simple-collision-reaction) + ) + (set! (-> s3-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s3-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 17)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 0) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 (* 409.6 arg2)) + (set-root-prim! s3-0 s2-0) + ) + (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) + (backup-collide-with-as s3-0) + (set! (-> self root-override) s3-0) + ) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (set-vector! (-> self root-override scale) arg2 arg2 arg2 1.0) + (let ((s5-1 (new-stack-vector0))) + (set-vector! + s5-1 + (rand-vu-float-range -1.0 1.0) + (rand-vu-float-range -1.0 1.0) + (rand-vu-float-range -1.0 1.0) + 1.0 + ) + (vector-normalize! s5-1 1.0) + (quaternion-vector-angle! (-> self tumble) s5-1 (rand-vu-float-range 0.0 1820.4445)) + ) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 (rand-vu-float-range 0.0 65536.0)) + (initialize-skeleton self *kickrock-sg* '()) + (set! (-> self root-override transv quad) (-> arg1 quad)) + (go flying-rock-rolling) + (none) + ) + +(defun spawn-flying-rock ((arg0 vector) (arg1 vector) (arg2 float) (arg3 entity)) + (let ((s2-0 (get-process *default-dead-pool* flying-rock #x4000))) + (when s2-0 + (let ((t9-1 (method-of-type flying-rock activate))) + (t9-1 (the-as flying-rock s2-0) *entity-pool* 'flying-rock (the-as pointer #x70004000)) + ) + (run-now-in-process s2-0 flying-rock-init-by-other arg0 arg1 arg2 arg3) + (-> s2-0 ppointer) + ) + ) + 0 + (none) + ) + +(deftype bladeassm (process-drawable) + ((root-override collide-shape-moving :offset 112) + (angle float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + bladeassm-idle + ) + ) + + +(defskelgroup *bladeassm-sg* bladeassm + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 10) + ) + +(defstate bladeassm-idle (bladeassm) + :code + (behavior () + (while #t + (+! (-> self angle) (* 3640.889 (-> *display* seconds-per-frame))) + (set! (-> self angle) (the float (sar (shl (the int (-> self angle)) 48) 48))) + (pusher-post) + (suspend) + ) + (none) + ) + ) + +(defun bladeassm-prebind-function ((arg0 process-drawable) (arg1 int) (arg2 bladeassm) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (quaternion-axis-angle! (the-as quaternion (&-> arg0 link)) 0.0 0.0 1.0 (-> v1-0 angle)) + ) + (the-as object 0) + ) + +(defmethod init-from-entity! bladeassm ((obj bladeassm) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 49152.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 *bladeassm-sg* '()) + (set! (-> obj skel prebind-function) + (the-as (function pointer int process-drawable none) bladeassm-prebind-function) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go bladeassm-idle) + (none) + ) + +(deftype flutflutegg (process-drawable) + ((root-override collide-shape-moving :offset 112) + (fall-dist meters :offset-assert 176) + (start vector :inline :offset-assert 192) + (dir vector :inline :offset-assert 208) + (pos float :offset-assert 224) + (vel float :offset-assert 228) + (wobbler wobbler :offset-assert 232) + (last-impulse-time int32 :offset-assert 236) + (incomming-attack-id uint64 :offset-assert 240) + (ambients-played int32 :offset-assert 248) + (ambient ambient-control :inline :offset-assert 256) + ) + :heap-base #xa0 + :method-count-assert 21 + :size-assert #x110 + :flag-assert #x1500a00110 + (:methods + (dummy-20 (_type_ float float float) none 20) + ) + (:states + (flutflutegg-break symbol) + flutflutegg-idle + flutflutegg-physics + flutflutegg-physics-fall + ) + ) + + +(defskelgroup *flutflutegg-sg* flutflutegg + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 3.5 0 3.5) + :longest-edge (meters 0) + ) + +(defskelgroup *flutflut-naked-sg* flutflut + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 8) + :longest-edge (meters 0) + ) + +(defmethod relocate flutflutegg ((obj flutflutegg) (arg0 int)) + (if (nonzero? (-> obj wobbler)) + (&+! (-> obj wobbler) arg0) + ) + (the-as + flutflutegg + ((the-as (function process-drawable int process-drawable) (find-parent-method flutflutegg 7)) obj arg0) + ) + ) + +;; WARN: Expression building failed: Function (method 20 flutflutegg) has a return type of none, but the expression builder found a return statement. +(defmethod dummy-20 flutflutegg ((obj flutflutegg) (arg0 float) (arg1 float) (arg2 float)) + (if (< (- (-> *display* base-frame-counter) (-> obj last-impulse-time)) 150) + (return 0) + ) + (set! (-> obj last-impulse-time) (-> *display* base-frame-counter)) + (+! (-> obj vel) arg0) + (inc-xy-vel! (-> obj wobbler) arg1 arg2) + 0 + (none) + ) + +(defbehavior flutflutegg-hit-sounds flutflutegg () + (sound-play-by-name (static-sound-name "egg-hit") (new-sound-id) 1024 0 0 1 #t) + (cond + ((not (task-closed? (game-task beach-flutflut) (task-status need-introduction))) + ) + ((zero? (logand (-> self ambients-played) 8)) + (if (play-ambient (-> self ambient) "BIR-AM04" #f (the-as vector #f)) + (logior! (-> self ambients-played) 8) + ) + ) + ((zero? (logand (-> self ambients-played) 512)) + (if (play-ambient (-> self ambient) "BIR-AM10" #f (the-as vector #f)) + (logior! (-> self ambients-played) 512) + ) + ) + ) + (none) + ) + +(defstate flutflutegg-idle (flutflutegg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (when (and + (= arg2 'attack) + (or (= (-> arg3 param 1) 'punch) (= (-> arg3 param 1) 'spin) (= (-> arg3 param 1) 'spin-air)) + (!= (-> self incomming-attack-id) (-> arg3 param 2)) + ) + (set! (-> self incomming-attack-id) (-> arg3 param 2)) + (flutflutegg-hit-sounds) + (let ((s5-1 + (vector-! (new-stack-vector0) (-> (the-as process-drawable arg0) root trans) (-> self root-override trans)) + ) + ) + (set! (-> s5-1 y) 0.0) + (vector-normalize! s5-1 1.0) + (let ((f0-2 (vector-dot s5-1 (-> self dir))) + (f1-2 (- (* (-> s5-1 x) (-> self dir z)) (* (-> s5-1 z) (-> self dir x)))) + ) + (if (< f0-2 -0.7) + (dummy-20 self 24576.0 (* -8192.0 f1-2) (* -8192.0 f0-2)) + (dummy-20 self 0.0 (* -8192.0 f1-2) (* -8192.0 f0-2)) + ) + ) + ) + (go flutflutegg-physics) + ) + ) + :trans + (behavior () + (let* ((gp-0 (TODO-RENAME-10 (-> self ambient) (new 'stack-no-clear 'vector) 900 368640.0 self)) + (v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-3 (the-as number (logior #x3f800000 v1-2))) + (f30-0 (+ -1.0 (the-as float v1-3))) + ) + (cond + ((not (task-closed? (game-task beach-flutflut) (task-status need-introduction))) + ) + ((not gp-0) + ) + ((< 327680.0 (vector-length gp-0)) + (set! (-> self ambients-played) 0) + 0 + ) + ((and (zero? (logand (-> self ambients-played) 1)) (< (vector-length gp-0) 327680.0) (< -61440.0 (-> gp-0 y))) + (if (play-ambient (-> self ambient) "BIR-AM01" #f (the-as vector #f)) + (logior! (-> self ambients-played) 1) + ) + ) + ((and (zero? (logand (-> self ambients-played) 2)) (< (vector-length gp-0) 163840.0) (< -40960.0 (-> gp-0 y))) + (if (play-ambient (-> self ambient) "BIR-AM02" #f (the-as vector #f)) + (logior! (-> self ambients-played) 2) + ) + ) + ((and (zero? (logand (-> self ambients-played) 16)) (< (vector-length gp-0) 81920.0) (< -24576.0 (-> gp-0 y))) + (if (play-ambient (-> self ambient) "BIR-AM05" #f (the-as vector #f)) + (logior! (-> self ambients-played) 16) + ) + ) + ((and (zero? (logand (-> self ambients-played) 4)) (< (vector-length gp-0) 40960.0) (< -24576.0 (-> gp-0 y))) + (if (play-ambient (-> self ambient) "BIR-AM03" #f (the-as vector #f)) + (logior! (-> self ambients-played) 4) + ) + ) + ((< (-> gp-0 y) -24576.0) + ) + ((< (- (-> *display* base-frame-counter) (-> self ambient last-ambient-time)) 9000) + ) + ((< 0.8 f30-0) + (play-ambient (-> self ambient) "BIR-AM07" #f (-> self root-override trans)) + ) + ((< 0.6 f30-0) + (play-ambient (-> self ambient) "BIR-AM08" #f (-> self root-override trans)) + ) + ((< 0.4 f30-0) + (play-ambient (-> self ambient) "BIR-AM09" #f (-> self root-override trans)) + ) + ((< 0.2 f30-0) + (play-ambient (-> self ambient) "BIR-AM12" #f (-> self root-override trans)) + ) + (else + (play-ambient (-> self ambient) "BIR-AM13" #f (-> self root-override trans)) + ) + ) + ) + (none) + ) + :code + (behavior () + (ja-post) + (while #t + (suspend) + ) + (none) + ) + ) + +(defstate flutflutegg-physics (flutflutegg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (the-as + object + (when (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (= arg2 'attack) + (or (= (-> arg3 param 1) 'punch) (= (-> arg3 param 1) 'spin) (= (-> arg3 param 1) 'spin-air)) + (!= (-> self incomming-attack-id) (-> arg3 param 2)) + ) + (set! (-> self incomming-attack-id) (-> arg3 param 2)) + (flutflutegg-hit-sounds) + (let ((s5-1 + (vector-! (new-stack-vector0) (-> (the-as process-drawable arg0) root trans) (-> self root-override trans)) + ) + ) + (set! (-> s5-1 y) 0.0) + (vector-normalize! s5-1 1.0) + (let ((f0-2 (vector-dot s5-1 (-> self dir))) + (f1-2 (- (* (-> s5-1 x) (-> self dir z)) (* (-> s5-1 z) (-> self dir x)))) + ) + (if (< f0-2 -0.7) + (dummy-20 self 24576.0 (* -8192.0 f1-2) (* -8192.0 f0-2)) + (dummy-20 self 0.0 (* -8192.0 f1-2) (* -8192.0 f0-2)) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (+! (-> self pos) (* (-> self vel) (-> *display* seconds-per-frame))) + (set! (-> self vel) (* 0.95 (-> self vel))) + (move! (-> self wobbler)) + (let ((a1-0 (new 'stack-no-clear 'vector))) + (vector-float*! a1-0 (-> self dir) (-> self pos)) + (vector+! a1-0 a1-0 (-> self start)) + (TODO-RENAME-30 (-> self root-override) a1-0) + ) + (TODO-RENAME-12 (-> self wobbler) (-> self root-override quat)) + (let ((a2-3 (quaternion-axis-angle! (new 'stack-no-clear 'quaternion) 0.0 1.0 0.0 -18204.445))) + (quaternion*! (-> self root-override quat) (-> self root-override quat) a2-3) + ) + (suspend) + (when (>= (-> self pos) (-> self fall-dist)) + (when (task-closed? (game-task beach-flutflut) (task-status need-introduction)) + (if (play-ambient (-> self ambient) "BIR-AM06" #f (the-as vector #f)) + (logior! (-> self ambients-played) 32) + ) + ) + (go flutflutegg-physics-fall) + ) + ) + (none) + ) + :post + (the-as (function none :behavior flutflutegg) ja-post) + ) + +(defstate flutflutegg-physics-fall (flutflutegg) + :code + (behavior () + (local-vars (v1-25 symbol)) + (let ((gp-0 (get-process *default-dead-pool* camera-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type camera-tracker activate))) + (t9-1 (the-as camera-tracker gp-0) self 'camera-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + camera-tracker-init + (lambda :behavior camera-tracker + () + (while (not (process-grab? *target*)) + (suspend) + ) + (camera-change-to "camera-135" 0 #f) + (camera-look-at (the-as pair (ppointer->process (-> self parent))) (the-as uint 9)) + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 1200) + (suspend) + ) + ) + (while (not (process-release? (handle->process (-> self grab-target)))) + (suspend) + ) + (camera-look-at (the-as pair *target*) (the-as uint 0)) + (send-event *camera* 'blend-from-as-fixed) + (camera-change-to (the-as string 'base) 75 #f) + (none) + ) + ) + (-> gp-0 ppointer) + ) + ) + (close-specific-task! (game-task beach-flutflut) (task-status need-reminder)) + (while #t + (vector-float*! (-> self root-override transv) (-> self dir) (-> self vel)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until v1-25 + (vector-v++! (-> self root-override transv) (dummy-62 (-> self root-override) (new-stack-vector0) 0.0)) + (dummy-59 (-> self root-override) (-> self root-override transv) (the-as uint 1) 8192.0 #f #f #f) + (move! (-> self wobbler)) + (TODO-RENAME-12 (-> self wobbler) (-> self root-override quat)) + (let ((a2-6 (quaternion-axis-angle! (new 'stack-no-clear 'quaternion) 0.0 1.0 0.0 -18204.445))) + (quaternion*! (-> self root-override quat) (-> self root-override quat) a2-6) + ) + (suspend) + (set! v1-25 (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (logtest? (-> self root-override status) 1) + ) + ) + ) + (sound-play-by-name (static-sound-name "sack-land") (new-sound-id) 2048 0 0 1 #t) + (go flutflutegg-break #f) + ) + (none) + ) + :post + (the-as (function none :behavior flutflutegg) ja-post) + ) + +(defstate flutflutegg-break (flutflutegg) + :code + (behavior ((arg0 symbol)) + (when arg0 + (set-vector! (-> self root-override trans) -231190.94 64559.105 -1164727.5 1.0) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 -18204.445) + ) + (suspend) + (dummy-47 (-> self root-override)) + (when (not arg0) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (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) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + ) + (while (and + (not (task-closed? (game-task beach-flutflut) (task-status need-reward-speech))) + (zero? (logand (-> self ambients-played) 1024)) + ) + (if (play-ambient (-> self ambient) "BIR-AM11" #f (the-as vector #f)) + (logior! (-> self ambients-played) 1024) + ) + (suspend) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (while (not (task-closed? (game-task beach-flutflut) (task-status need-reward-speech))) + (if (>= (- (-> *display* base-frame-counter) gp-2) 3000) + (level-hint-spawn + (game-text-id beach-flutflutegg-hint) + "sksp0029" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (suspend) + ) + ) + (ja-channel-set! 0) + (while (not (task-closed? (game-task beach-flutflut) (task-status need-resolution))) + (suspend) + ) + (ja-channel-set! 1) + (set-vector! (-> self root-override trans) -231190.94 64559.105 -1164727.5 1.0) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 0.0) + (let ((gp-3 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-3 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + ) + (while #t + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior flutflutegg) ja-post) + ) + +(defmethod init-from-entity! flutflutegg ((obj flutflutegg) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> 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) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set-vector! (-> s2-0 local-sphere) 0.0 8192.0 0.0 8192.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set-vector! (-> s2-1 local-sphere) 0.0 16384.0 0.0 7782.4) + (append-prim s3-0 s2-1) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *flutflutegg-sg* '()) + (vector-z-quaternion! (-> obj dir) (-> obj root-override quat)) + (set! (-> obj start quad) (-> obj root-override trans quad)) + (set! (-> obj fall-dist) 20480.0) + (set-yaw-angle-clear-roll-pitch! (-> obj root-override) (+ -16384.0 (y-angle (-> obj root-override)))) + (set! (-> obj pos) 0.0) + (set! (-> obj vel) 0.0) + (set! (-> obj wobbler) (new 'process 'wobbler)) + (reset! (-> obj wobbler) 0.1 0.98 4096.0) + (set! (-> obj last-impulse-time) 0) + (set! (-> obj ambients-played) 0) + (if (task-closed? (game-task beach-flutflut) (task-status need-reminder)) + (go flutflutegg-break #t) + (go flutflutegg-idle) + ) + (none) + ) + +(deftype harvester (process-drawable) + ((root-override collide-shape :offset 112) + (alt-actor entity-actor :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + harvester-idle + (harvester-inflate symbol) + ) + ) + + +(defskelgroup *harvester-sg* harvester + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 7 0 11) + :longest-edge (meters 0) + ) + +(defstate harvester-idle (harvester) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('update) + (if (and (-> self alt-actor) (logtest? (-> self alt-actor extra perm status) (entity-perm-status complete))) + (go harvester-inflate #f) + ) + ) + ) + ) + :code + (behavior () + (if (and (-> self alt-actor) (logtest? (-> self alt-actor extra perm status) (entity-perm-status complete))) + (go harvester-inflate #t) + ) + (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 5)) + num-func-identity + ) + (set! (-> gp-0 frame-num) (ja-aframe 1.0 0)) + ) + (ja-post) + (while #t + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + (none) + ) + ) + +(defstate harvester-inflate (harvester) + :code + (behavior ((arg0 symbol)) + (when (not arg0) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (while #t + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) 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 4)) num-func-seek!) + ) + (until (ja-done? 0) + (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!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior harvester) ja-post) + ) + +(defmethod init-from-entity! harvester ((obj harvester) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 5) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 1)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 20480.0 0.0 40960.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 4) + (set-vector! (-> s2-0 local-sphere) 0.0 6144.0 0.0 24576.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 4) + (set-vector! (-> s2-1 local-sphere) 16384.0 -20480.0 16384.0 20480.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 2) (the-as uint 0)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 4) + (set-vector! (-> s2-2 local-sphere) 16384.0 -20480.0 -16384.0 20480.0) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 3) (the-as uint 0)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 4) + (set-vector! (-> s2-3 local-sphere) -16384.0 -20480.0 -16384.0 20480.0) + (append-prim s3-0 s2-3) + ) + (let ((s2-4 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 4) (the-as uint 0)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 1)) + (set! (-> s2-4 prim-core offense) 4) + (set! (-> s2-4 transform-index) 4) + (set-vector! (-> s2-4 local-sphere) -16384.0 -20480.0 16384.0 20480.0) + (append-prim s3-0 s2-4) + ) + ) + (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 *harvester-sg* '()) + (set! (-> obj alt-actor) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (go harvester-idle) + (none) + ) + +(deftype beachcam (process-hidden) + () + :method-count-assert 15 + :size-assert #x70 + :flag-assert #xf00000070 + ) + + +(defun beachcam-spawn () + (with-pp + (let ((gp-0 (entity-actor-lookup (-> pp entity) 'alt-actor 0))) + (when gp-0 + (let* ((s5-0 (get-process *default-dead-pool* pov-camera #x4000)) + (gp-1 + (ppointer->handle + (when s5-0 + (let ((t9-2 (method-of-type pov-camera activate))) + (t9-2 (the-as pov-camera s5-0) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> gp-0 extra trans) + *beachcam-sg* + (new 'static 'spool-anim :name "beachcam-cannon" :index 3 :parts 1 :command-list '()) + 0 + #f + '() + ) + (-> s5-0 ppointer) + ) + ) + ) + (s5-1 (get-process *default-dead-pool* fuel-cell #x4000)) + (s5-2 + (ppointer->handle (when s5-1 + (let ((t9-5 (method-of-type fuel-cell activate))) + (t9-5 (the-as fuel-cell s5-1) pp 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 fuel-cell-init-as-clone gp-1 (-> pp entity extra perm task)) + (-> s5-1 ppointer) + ) + ) + ) + ) + (let ((v1-13 (handle->process gp-1))) + (if v1-13 + (set! (-> (the-as pov-camera v1-13) notify-handle) (the-as handle s5-2)) + ) + ) + (while (handle->process gp-1) + (suspend) + ) + (send-event (handle->process s5-2) 'stop-cloning) + ) + ) + ) + 0 + (none) + ) + ) + + + + diff --git a/goal_src/levels/sunken/sun-exit-chamber.gc b/goal_src/levels/sunken/sun-exit-chamber.gc index 86322b5c57..da1d453ba8 100644 --- a/goal_src/levels/sunken/sun-exit-chamber.gc +++ b/goal_src/levels/sunken/sun-exit-chamber.gc @@ -5,3 +5,1495 @@ ;; name in dgo: sun-exit-chamber ;; dgos: L1, SUN, SUNKEN +(declare-type blue-eco-charger process-drawable) +(declare-type exit-chamber-button basebutton) + +;; DECOMP BEGINS + +(deftype blue-eco-charger-orb (process-drawable) + ((parent-process (pointer blue-eco-charger) :offset 12) + (orbit-rot vector :inline :offset-assert 176) + (orbit-rotv vector :inline :offset-assert 192) + (targ-orbit-rotv vector :inline :offset-assert 208) + (rest-pos vector :inline :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 21 + :size-assert #xf0 + :flag-assert #x15008000f0 + (:methods + (dummy-20 (_type_ float) vector 20) + ) + (:states + blue-eco-charger-orb-active + blue-eco-charger-orb-idle + ) + ) + + +(defskelgroup *blue-eco-charger-orb-sg* blue-eco-charger-orb + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 1.1) + :longest-edge (meters 0) + ) + +(deftype blue-eco-charger (process-drawable) + ((root-override collide-shape :offset 112) + (charger-id int32 :offset-assert 176) + (open-level float :offset-assert 180) + (master entity-actor :offset-assert 184) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xbc + :flag-assert #x16005000bc + (:methods + (dummy-20 (_type_) object 20) + (dummy-21 (_type_ symbol) object 21) + ) + (:states + blue-eco-charger-close + blue-eco-charger-idle + (blue-eco-charger-open symbol) + blue-eco-charger-stuck-open + ) + ) + + +(defskelgroup *blue-eco-charger-sg* blue-eco-charger + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 1.9 0 2.7) + :longest-edge (meters 0) + ) + +(deftype exit-chamber-items (structure) + ((door-pos vector :inline :offset-assert 0) + (door-quat quaternion :inline :offset-assert 16) + (button-pos vector :inline :offset-assert 32) + (button-quat quaternion :inline :offset-assert 48) + (fcell-pos vector :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + + +(deftype exit-chamber (process-drawable) + ((root-override collide-shape-moving :offset 112) + (chargers-active uint32 :offset-assert 176) + (move-player? symbol :offset-assert 180) + (move-fcell? symbol :offset-assert 184) + (play-assistant-message? symbol :offset-assert 188) + (wave-scale float :offset-assert 192) + (button (pointer exit-chamber-button) :offset-assert 196) + (door (pointer sun-iris-door) :offset-assert 200) + (fcell-handle handle :offset-assert 208) + (orig-trans vector :inline :offset-assert 224) + (last-pos vector :inline :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 25 + :size-assert #x100 + :flag-assert #x1900900100 + (:methods + (dummy-20 (_type_ float) float 20) + (dummy-21 (_type_ exit-chamber-items) vector 21) + (dummy-22 (_type_) none 22) + (dummy-23 (_type_ symbol) object 23) + (dummy-24 (_type_ float) none 24) + ) + (:states + exit-chamber-charger-puzzle + exit-chamber-charger-puzzle-beaten + exit-chamber-idle-in-sunken + (exit-chamber-idle-in-village symbol) + exit-chamber-lower + exit-chamber-rise + ) + ) + + +(defskelgroup *exit-chamber-sg* exit-chamber + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 4 0 16.5) + :longest-edge (meters 0) + ) + +(set! (-> *part-group-id-table* 620) + (new 'static 'sparticle-launch-group + :length 1 + :duration #x384 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-exit-chamber-ripples" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2512 :flags (is-3d))) + :bounds (new 'static 'sphere :w 262144.0) + ) + ) + +(set! (-> *part-id-table* 2513) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-func spt-birth-func 'birth-func-ocean-height) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters 5.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 12.0) (meters 6.0) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.02) (meters 0.02) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 3.2) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags bit2 bit14) + (sp-flt spt-userdata 2048.0) + (sp-int-plain-rnd spt-next-time 10 29 1) + (sp-launcher-by-id spt-next-launcher 2514) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2514) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.094814815) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2512) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-func spt-birth-func 'birth-func-ocean-height) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters 6.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 3.5) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 3.2) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags bit2 bit14) + (sp-flt spt-userdata 2048.0) + (sp-int-plain-rnd spt-next-time 10 29 1) + (sp-launcher-by-id spt-next-launcher 2514) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(defmethod dummy-20 blue-eco-charger-orb ((obj blue-eco-charger-orb) (arg0 float)) + (set-vector! + (-> obj targ-orbit-rotv) + (rand-vu-float-range 72817.78 258503.11) + (rand-vu-float-range 72817.78 258503.11) + (rand-vu-float-range 72817.78 258503.11) + 1.0 + ) + (vector-float*! (-> obj targ-orbit-rotv) (-> obj targ-orbit-rotv) arg0) + ) + +(defstate blue-eco-charger-orb-idle (blue-eco-charger-orb) + :code + (behavior () + (set! (-> self root trans quad) (-> self rest-pos quad)) + (while #t + (let ((f0-0 (-> self parent-process 0 open-level))) + (if (< 0.0 f0-0) + (go blue-eco-charger-orb-active) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior blue-eco-charger-orb) ja-post) + ) + +(defstate blue-eco-charger-orb-active (blue-eco-charger-orb) + :code + (behavior () + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (dummy-20 self (-> self parent-process 0 open-level)) + (vector-reset! (-> self orbit-rotv)) + (while #t + (let ((f30-0 (-> self parent-process 0 open-level))) + (if (>= 0.0 f30-0) + (go blue-eco-charger-orb-idle) + ) + (if (zero? (rand-vu-int-count 30)) + (dummy-20 self f30-0) + ) + (set! (-> self orbit-rotv x) + (seek-with-smooth (-> self orbit-rotv x) (-> self targ-orbit-rotv x) 873.81335 0.8 0.12136297) + ) + (set! (-> self orbit-rotv y) + (seek-with-smooth (-> self orbit-rotv y) (-> self targ-orbit-rotv y) 873.81335 0.8 0.12136297) + ) + (set! (-> self orbit-rotv z) + (seek-with-smooth (-> self orbit-rotv z) (-> self targ-orbit-rotv z) 873.81335 0.8 0.12136297) + ) + (let ((a1-5 (-> self orbit-rot)) + (v1-13 (-> self orbit-rot)) + (a0-6 (new 'stack-no-clear 'vector)) + ) + (.lvf vf1 (&-> (-> self orbit-rotv) quad)) + (let ((f0-11 (-> *display* seconds-per-frame))) + (.mov at-0 f0-11) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> a0-6 quad) vf1) + (vector+! a1-5 v1-13 a0-6) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 x) (* 1228.8 f30-0 (cos (-> self orbit-rot x)))) + (set! (-> gp-0 y) (* 1228.8 f30-0 (cos (-> self orbit-rot y)))) + (set! (-> gp-0 z) (* 1228.8 f30-0 (cos (-> self orbit-rot z)))) + (vector+! (-> self root trans) gp-0 (-> self rest-pos)) + (set-vector! + gp-0 + (cos (* 436.90668 (the float (mod (-> *display* base-frame-counter) 150)))) + (cos (* 247.39902 (the float (mod (-> *display* base-frame-counter) 264)))) + (cos (* 601.7998 (the float (mod (-> *display* base-frame-counter) 108)))) + 1.0 + ) + (vector-normalize! gp-0 1.0) + (quaternion-vector-angle! + (-> self root quat) + gp-0 + (* 463.8075 (the float (mod (-> *display* base-frame-counter) 141))) + ) + ) + ) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (set! (-> gp-1 x) (rand-vu-float-range -4096.0 4096.0)) + (set! (-> gp-1 y) (rand-vu-float-range -4096.0 4096.0)) + (set! (-> gp-1 z) (rand-vu-float-range -4096.0 4096.0)) + (vector+! gp-1 gp-1 (-> self root trans)) + (eco-blue-glow gp-1) + (set! (-> gp-1 x) (rand-vu-float-range -4096.0 4096.0)) + (set! (-> gp-1 y) (rand-vu-float-range -4096.0 4096.0)) + (set! (-> gp-1 z) (rand-vu-float-range -4096.0 4096.0)) + (vector+! gp-1 gp-1 (-> self root trans)) + (vector-lerp! gp-1 gp-1 (-> self parent-process 0 root-override trans) (rand-vu-float-range 0.2 0.8)) + (eco-blue-glow gp-1) + ) + (suspend) + ) + (none) + ) + ) + :post + (the-as (function none :behavior blue-eco-charger-orb) ja-post) + ) + +(defbehavior blue-eco-charger-orb-init-by-other blue-eco-charger-orb ((arg0 entity) (arg1 blue-eco-charger-orb)) + (set! (-> self entity) arg0) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 root trans quad)) + (quaternion-copy! (-> self root quat) (-> arg1 root quat)) + (set! (-> self root scale quad) (-> arg1 root scale quad)) + (set! (-> self root trans y) (+ 14069.76 (-> self root trans y))) + (set! (-> self rest-pos quad) (-> self root trans quad)) + (initialize-skeleton self *blue-eco-charger-orb-sg* '()) + (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 2)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (set-vector! (-> self orbit-rot) 0.0 0.0 0.0 1.0) + (go blue-eco-charger-orb-idle) + (none) + ) + +(defmethod dummy-21 blue-eco-charger ((obj blue-eco-charger) (arg0 symbol)) + (let* ((v1-0 (-> obj master)) + (a0-1 (if v1-0 + (-> v1-0 extra process) + ) + ) + ) + (when (not a0-1) + (set! (-> obj master) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (let ((v1-3 (-> obj master))) + (set! a0-1 (if v1-3 + (-> v1-3 extra process) + ) + ) + ) + ) + (if a0-1 + (send-event + a0-1 + 'notify + (if arg0 + 1 + 2 + ) + (-> obj charger-id) + ) + ) + ) + ) + +(defmethod dummy-20 blue-eco-charger ((obj blue-eco-charger)) + (and + (and *target* (>= 16384.0 (vector-vector-distance (-> obj root-override trans) (-> *target* control trans)))) + (send-event *target* 'query 'powerup 3) + ) + ) + +(defstate blue-eco-charger-idle (blue-eco-charger) + :code + (behavior () + (set! (-> self open-level) 0.0) + (ja-channel-set! 1) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (when (logtest? (-> self draw status) (draw-status drwf03)) + (if (and + (and *target* (>= 16384.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (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) 'query) + (set! (-> a1-2 param 0) (the-as uint 'powerup)) + (set! (-> a1-2 param 1) (the-as uint 3)) + (not (send-event-function *target* a1-2)) + ) + ) + (level-hint-spawn + (game-text-id sunken-blue-eco-charger-hint) + "sksp0125" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (when (dummy-20 self) + (increment-success-for-hint (game-text-id sunken-blue-eco-charger-hint)) + (go blue-eco-charger-open #t) + ) + (if (nonzero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (go blue-eco-charger-open #t) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior blue-eco-charger) ja-post) + ) + +(defstate blue-eco-charger-open (blue-eco-charger) + :enter + (behavior ((arg0 symbol)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if arg0 + (sound-play-by-name (static-sound-name "blue-eco-start") (new-sound-id) 1024 0 0 1 #t) + ) + (dummy-21 self #t) + (none) + ) + :trans + (behavior () + (if (dummy-20 self) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (update! (-> self sound)) + (none) + ) + :code + (behavior ((arg0 symbol)) + (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! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (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!) + ) + (set! (-> self open-level) + (/ (ja-frame-num 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + (while #t + (cond + ((zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 6000) + (level-hint-spawn + (game-text-id sunken-blue-eco-charger-all-hint) + "sksp0133" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (go blue-eco-charger-close) + ) + ) + (else + (go blue-eco-charger-stuck-open) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior blue-eco-charger) ja-post) + ) + +(defstate blue-eco-charger-stuck-open (blue-eco-charger) + :trans + (behavior () (update! (-> self sound)) (none)) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defstate blue-eco-charger-close (blue-eco-charger) + :exit + (behavior () (stop! (-> self sound)) (none)) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 0.0) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (when (dummy-20 self) + (increment-success-for-hint (game-text-id sunken-blue-eco-charger-hint)) + (go blue-eco-charger-open #t) + ) + (if (nonzero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (go blue-eco-charger-open #t) + ) + (update! (-> self sound)) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) 0.0) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! (-> self open-level) + (/ (ja-frame-num 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + (dummy-21 self #f) + (go blue-eco-charger-idle) + (none) + ) + :post + (the-as (function none :behavior blue-eco-charger) ja-post) + ) + +(defmethod init-from-entity! blue-eco-charger ((obj blue-eco-charger) (arg0 entity-actor)) + (set! (-> obj open-level) 0.0) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 8192.0 0.0 0.0 16384.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) 6553.6) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *blue-eco-charger-sg* '()) + (let ((f0-6 (res-lump-float (-> obj entity) 'rotoffset))) + (if (!= f0-6 0.0) + (quaternion-rotate-y! (-> obj root-override quat) (-> obj root-override quat) f0-6) + ) + ) + (ja-channel-set! 1) + (let ((s4-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (set! (-> obj master) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj charger-id) (+ (actor-count-before (-> obj link)) 1)) + (let ((s5-1 (get-process *default-dead-pool* blue-eco-charger-orb #x4000))) + (when s5-1 + (let ((t9-17 (method-of-type blue-eco-charger-orb activate))) + (t9-17 (the-as blue-eco-charger-orb s5-1) obj 'blue-eco-charger-orb (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 blue-eco-charger-orb-init-by-other (-> obj entity) obj) + (-> s5-1 ppointer) + ) + ) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "blue-eco-charg") + :volume #x400 + :fo-max 35 + ) + (-> obj root-override trans) + ) + ) + (if (zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (go blue-eco-charger-idle) + (go blue-eco-charger-open #f) + ) + (none) + ) + +(deftype exit-chamber-button (basebutton) + () + :heap-base #x90 + :method-count-assert 32 + :size-assert #x100 + :flag-assert #x2000900100 + ) + + +(defbehavior exit-chamber-button-init-by-other exit-chamber-button ((arg0 vector) (arg1 quaternion) (arg2 entity-actor) (arg3 symbol)) + (basebutton-init-by-other (the-as basebutton #f) arg0 arg1 arg2 arg3 0.0) + (none) + ) + +(defmethod dummy-20 exit-chamber ((obj exit-chamber) (arg0 float)) + (let ((f0-5 (+ (-> obj orig-trans y) + (* 2252.8 arg0 (cos (* 36.40889 (the float (mod (-> *display* base-frame-counter) 1800))))) + ) + ) + ) + (set! (-> obj root-override trans y) f0-5) + f0-5 + ) + ) + +(set! (-> *part-id-table* 2515) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.2) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.3) (meters 0.1) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 40.0 24.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.013333334) 1.0) + (sp-flt spt-accel-y 2.7306666) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-above-and-die) + (sp-end) + ) + ) + ) + +(defmethod dummy-24 exit-chamber ((obj exit-chamber) (arg0 float)) + (let ((s4-0 (-> obj node-list data 3 bone transform)) + (f30-0 (rand-vu-float-range 0.0 65536.0)) + (f28-0 (rand-vu-float-range 8192.0 40960.0)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (set-vector! gp-0 (* (sin f30-0) arg0) f28-0 (* (cos f30-0) arg0) 1.0) + (vector-matrix*! gp-0 gp-0 s4-0) + (vector-float*! gp-0 gp-0 (/ 1.0 (-> gp-0 w))) + (set! (-> *part-id-table* 2515 init-specs 13 initial-valuef) (+ 24576.0 (-> gp-0 y))) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2515) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (none) + ) + +(defmethod dummy-21 exit-chamber ((obj exit-chamber) (arg0 exit-chamber-items)) + (let ((s5-0 (-> obj node-list data 3 bone transform))) + (set-vector! (-> arg0 door-pos) 0.0 13107.2 -40960.0 1.0) + (vector-matrix*! (-> arg0 door-pos) (-> arg0 door-pos) s5-0) + (vector-float*! (-> arg0 door-pos) (-> arg0 door-pos) (/ 1.0 (-> arg0 door-pos w))) + (matrix->quaternion (-> arg0 door-quat) s5-0) + (set-vector! (-> arg0 button-pos) 0.0 -3072.0 0.0 1.0) + (vector-matrix*! (-> arg0 button-pos) (-> arg0 button-pos) s5-0) + (vector-float*! (-> arg0 button-pos) (-> arg0 button-pos) (/ 1.0 (-> arg0 button-pos w))) + (quaternion-copy! (-> arg0 button-quat) (-> arg0 door-quat)) + (set-vector! (-> arg0 fcell-pos) 0.0 68300.8 0.0 1.0) + (vector-matrix*! (-> arg0 fcell-pos) (-> arg0 fcell-pos) s5-0) + ) + (vector-float*! (-> arg0 fcell-pos) (-> arg0 fcell-pos) (/ 1.0 (-> arg0 fcell-pos w))) + ) + +(defmethod dummy-23 exit-chamber ((obj exit-chamber) (arg0 symbol)) + (new 'stack-no-clear 'vector) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! (-> obj last-pos) (-> obj node-list data 3)) + (vector-! s5-0 (-> obj last-pos) (-> obj root-override trans)) + (set! (-> obj draw bounds quad) (-> s5-0 quad)) + ) + (set! (-> obj draw bounds y) (+ 16384.0 (-> obj draw bounds y))) + (set! (-> obj draw bounds w) 67584.0) + (let ((s5-1 (new 'stack-no-clear 'exit-chamber-items))) + (dummy-21 obj s5-1) + (if (-> obj button) + (send-event (ppointer->process (-> obj button)) 'move-to (-> s5-1 button-pos) (-> s5-1 button-quat)) + ) + (when (and *target* (-> obj move-player?)) + (let ((a1-6 (new 'stack-no-clear 'vector))) + (set! (-> a1-6 quad) (-> s5-1 button-pos quad)) + (set! (-> a1-6 y) (+ 2662.4 (-> a1-6 y))) + (TODO-RENAME-30 (-> *target* control) a1-6) + ) + (vector-reset! (-> *target* control transv)) + ) + (if (-> obj door) + (send-event (ppointer->process (-> obj door)) 'move-to (-> s5-1 door-pos) (-> s5-1 door-quat)) + ) + (when arg0 + (let ((a0-12 (handle->process (-> obj fcell-handle)))) + (when a0-12 + (when (or (-> obj move-fcell?) (< (-> (the-as fuel-cell a0-12) root-override trans y) (-> s5-1 fcell-pos y))) + (when (not (-> obj move-fcell?)) + (set! (-> obj move-fcell?) #t) + (let ((v1-50 (-> obj entity extra perm))) + (logior! (-> v1-50 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-50 user-int8 0) 1) + ) + ) + (send-event a0-12 'trans (-> s5-1 fcell-pos)) + ) + ) + ) + ) + ) + ) + +(defstate exit-chamber-charger-puzzle (exit-chamber) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('notify) + (case (-> arg3 param 0) + ((1) + (when (zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (let* ((a1-2 (-> arg3 param 1)) + (v1-5 (logior (-> self chargers-active) (ash 1 a1-2))) + ) + (set! (-> self chargers-active) v1-5) + (when (= v1-5 62) + (save-reminder (get-task-control (game-task sunken-room)) 1 0) + (go exit-chamber-charger-puzzle-beaten) + (return #t) + v0-0 + ) + ) + ) + ) + ((2) + (when (zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (let ((a1-6 (-> arg3 param 1))) + (set! v0-0 (logclear (-> self chargers-active) (ash 1 a1-6))) + ) + (set! (-> self chargers-active) (the-as uint v0-0)) + v0-0 + ) + ) + ) + ) + ) + ) + :exit + (behavior () (logclear! (-> self draw status) (draw-status drwf01)) (none)) + :code + (behavior () + (while #t + (if (>= 214228270000.0 (vector-vector-distance-squared (camera-pos) (-> self root-override trans))) + (logclear! (-> self draw status) (draw-status drwf01)) + (logior! (-> self draw status) (draw-status drwf01)) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior exit-chamber) ja-post) + ) + +(defstate exit-chamber-charger-puzzle-beaten (exit-chamber) + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type pov-camera activate))) + (t9-1 (the-as pov-camera gp-0) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + pov-camera-init-by-other + (-> self root-override trans) + *sunkencam-sg* + "exit-chamber-door-open" + 0 + #f + '() + ) + (-> gp-0 ppointer) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 750) + (suspend) + ) + (send-event (ppointer->process (-> self door)) 'trigger) + (go exit-chamber-idle-in-sunken) + (none) + ) + ) + +(defstate exit-chamber-idle-in-sunken (exit-chamber) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-1 object)) + (case arg2 + (('trigger) + (go exit-chamber-rise) + (return #t) + v0-1 + ) + (('notify) + (when (and (= (-> arg0 type) fuel-cell) (= (-> arg3 param 0) 'pickup)) + (let ((a0-5 (handle->process (-> self fcell-handle)))) + (when a0-5 + (let ((v1-10 (new 'stack-no-clear 'vector))) + (set-vector! v1-10 0.0 64102.4 0.0 1.0) + (vector+! v1-10 v1-10 (-> self last-pos)) + (send-event a0-5 'set-movie-pos v1-10) + ) + ) + ) + ) + ) + ) + ) + :exit + (behavior () (logclear! (-> self draw status) (draw-status drwf01)) (none)) + :code + (behavior () + (save-reminder (get-task-control (game-task sunken-room)) 1 0) + (set! (-> self wave-scale) 0.0) + (if (-> self door) + (send-event (ppointer->process (-> self door)) 'trigger) + ) + (if (-> self button) + (send-event (ppointer->process (-> self button)) 'untrigger) + ) + (while #t + (if (>= 214228270000.0 (vector-vector-distance-squared (camera-pos) (-> self root-override trans))) + (logclear! (-> self draw status) (draw-status drwf01)) + (logior! (-> self draw status) (draw-status drwf01)) + ) + (suspend) + ) + (none) + ) + ) + +(defstate exit-chamber-rise (exit-chamber) + :enter + (behavior () (set! (-> self move-player?) #f) (none)) + :trans + (behavior () + (if (not (-> self move-player?)) + (rider-trans) + ) + (none) + ) + :code + (behavior () + (aybabtu 2) + (let ((v1-1 (handle->process (-> self fcell-handle)))) + (if v1-1 + (clear-collide-with-as (-> (the-as fuel-cell v1-1) root-override)) + ) + ) + (close-specific-task! (game-task sunken-room) (task-status need-reminder)) + (send-event *target* 'reset-pickup 'eco) + (let ((gp-0 (get-process *default-dead-pool* sunkencam #x4000))) + (set! (-> (the-as sunkencam (-> (when gp-0 + (let ((t9-5 (method-of-type sunkencam activate))) + (t9-5 (the-as sunkencam gp-0) self 'sunkencam (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + pov-camera-init-by-other + (-> self root-override trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> gp-0 ppointer) + ) + 0 + ) + ) + seq + ) + (the-as uint 0) + ) + ) + 0 + (suspend) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-1 #f)) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-13 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-13 param 1) 1.0) + (set! (-> a0-13 frame-num) 0.0) + (joint-control-channel-group! a0-13 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (not gp-1) (>= (- (-> *display* base-frame-counter) (-> self state-time)) 225) (-> self door)) + (set! gp-1 #t) + (send-event (ppointer->process (-> self door)) 'untrigger) + ) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (set! (-> self move-player?) #t) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-19 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) 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 4)) 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!) + ) + ) + (load-state-want-levels 'sunken 'village2) + (let ((a0-23 (-> self skel root-channel 0))) + (set! (-> a0-23 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-23 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-23 param 1) 1.0) + (set! (-> a0-23 frame-num) 0.0) + (joint-control-channel-group! a0-23 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (dummy-24 self 51200.0) + (update-trans! (-> self sound) (-> self last-pos)) + (update! (-> self sound)) + (suspend) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 param 0) (the float (+ (-> a0-27 frame-group data 0 length) -1))) + (set! (-> a0-27 param 1) 1.0) + (joint-control-channel-group-eval! a0-27 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (stop! (-> self sound)) + (load-state-want-display-level 'village2 'display) + (load-state-want-display-level 'sunken 'special) + (let ((gp-2 #f)) + (let ((a0-32 (-> self skel root-channel 0))) + (set! (-> a0-32 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-32 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-32 param 1) 1.0) + (set! (-> a0-32 frame-num) 0.0) + (joint-control-channel-group! a0-32 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (set! (-> self wave-scale) (seek (-> self wave-scale) 1.0 0.0016666667)) + (dummy-20 self (-> self wave-scale)) + (if (and (-> self move-player?) (>= (ja-aframe-num 0) 310.0)) + (set! (-> self move-player?) #f) + ) + (let ((a0-36 (new 'stack-no-clear 'vector))) + (set! (-> a0-36 quad) (-> self last-pos quad)) + (set! (-> a0-36 y) (+ 51814.4 (-> a0-36 y))) + (when (>= (-> a0-36 y) (ocean-get-height a0-36)) + (if (not gp-2) + (set! gp-2 #t) + ) + (spawn (-> self part) (-> self last-pos)) + (spawn (-> self part) (-> self last-pos)) + (spawn (-> self part) (-> self last-pos)) + ) + ) + (suspend) + (let ((a0-40 (-> self skel root-channel 0))) + (set! (-> a0-40 param 0) (the float (+ (-> a0-40 frame-group data 0 length) -1))) + (set! (-> a0-40 param 1) 1.0) + (joint-control-channel-group-eval! a0-40 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (kill-and-free-particles (-> self part)) + (load-state-want-vis 'vi2) + (send-event *target* 'dry) + (let ((v1-143 (handle->process (-> self fcell-handle)))) + (if v1-143 + (restore-collide-with-as (-> (the-as fuel-cell v1-143) root-override)) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (set! (-> self wave-scale) (seek (-> self wave-scale) 1.0 0.0016666667)) + (dummy-20 self (-> self wave-scale)) + (suspend) + ) + (if (-> self door) + (send-event (ppointer->process (-> self door)) 'trigger) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 750) + (set! (-> self wave-scale) (seek (-> self wave-scale) 1.0 0.0016666667)) + (dummy-20 self (-> self wave-scale)) + (suspend) + ) + (go exit-chamber-idle-in-village #f) + (none) + ) + :post + (behavior () + (if (-> self move-player?) + (transform-post) + (rider-post) + ) + (dummy-23 self #t) + (none) + ) + ) + +(defstate exit-chamber-idle-in-village (exit-chamber) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (go exit-chamber-lower) + ) + (('notify) + (when (and (= (-> arg0 type) fuel-cell) (= (-> arg3 param 0) 'pickup)) + (let ((a0-5 (handle->process (-> self fcell-handle)))) + (when a0-5 + (let ((v1-8 (new 'stack-no-clear 'vector))) + (set-vector! v1-8 0.0 64102.4 0.0 1.0) + (vector+! v1-8 v1-8 (-> self last-pos)) + (send-event a0-5 'set-movie-pos v1-8) + ) + ) + ) + ) + ) + ) + ) + :enter + (behavior ((arg0 symbol)) + (set! (-> self mask) (logior (process-mask platform) (-> self mask))) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :exit + (behavior () (logclear! (-> self mask) (process-mask platform)) (none)) + :trans + (behavior () + (rider-trans) + (when *target* + (let ((f30-0 (vector-vector-xz-distance (target-pos 0) (-> self last-pos)))) + (when (-> self door) + (if (and *target* (>= 114688.0 f30-0)) + (send-event (ppointer->process (-> self door)) 'trigger) + (send-event (ppointer->process (-> self door)) 'untrigger) + ) + ) + (when (and (-> self play-assistant-message?) (>= f30-0 57344.0)) + (set! (-> self play-assistant-message?) #f) + (level-hint-spawn + (game-text-id sunken-kiera-you-raised-a-piece-of-lpc) + "asstvb22" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + ) + (none) + ) + :code + (behavior ((arg0 symbol)) + (set! (-> self move-player?) #f) + (set! (-> self wave-scale) 1.0) + (save-reminder (get-task-control (game-task sunken-room)) 2 0) + (if (-> self button) + (send-event (ppointer->process (-> self button)) 'untrigger) + ) + (when arg0 + (logior! (-> self draw status) (draw-status drwf05)) + (dummy-20 self 1.0) + (suspend) + (logclear! (-> self draw status) (draw-status drwf05)) + ) + (while #t + (dummy-20 self 1.0) + (suspend) + ) + (none) + ) + :post + (behavior () + (rider-post) + (dummy-23 self #t) + (if (and *target* (>= (vector-vector-xz-distance (target-pos 0) (-> self last-pos)) 40960.0)) + (spawn (-> self part) (-> self last-pos)) + ) + (none) + ) + ) + +(defstate exit-chamber-lower (exit-chamber) + :enter + (behavior () + (set! (-> self move-player?) #t) + (let ((v1-2 (handle->process (-> self fcell-handle)))) + (if v1-2 + (clear-collide-with-as (-> (the-as fuel-cell v1-2) root-override)) + ) + ) + (none) + ) + :trans + (behavior () + (if (not (-> self move-player?)) + (rider-trans) + ) + (set! (-> self wave-scale) (seek (-> self wave-scale) 0.0 0.0016666667)) + (dummy-20 self (-> self wave-scale)) + (none) + ) + :code + (behavior () + (let* ((gp-0 (get-process *default-dead-pool* sunkencam #x4000)) + (v1-1 (when gp-0 + (let ((t9-1 (method-of-type sunkencam activate))) + (t9-1 (the-as sunkencam gp-0) self 'sunkencam (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + pov-camera-init-by-other + (-> self root-override trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> gp-0 ppointer) + ) + ) + ) + (set! (-> (the-as sunkencam (-> v1-1 0)) seq) (the-as uint 1)) + ) + (load-state-want-display-level 'sunken 'display) + (suspend) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-1 #f) + (s5-0 #f) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (not gp-1) (>= (- (-> *display* base-frame-counter) (-> self state-time)) 75) (-> self door)) + (set! gp-1 #t) + (send-event (ppointer->process (-> self door)) 'untrigger) + ) + (when (+ (-> *display* base-frame-counter) -30) + (let ((a0-9 (new 'stack-no-clear 'vector))) + (set! (-> a0-9 quad) (-> self last-pos quad)) + (set! (-> a0-9 y) (+ 64102.4 (-> a0-9 y))) + (when (< (-> a0-9 y) (+ 12288.0 (ocean-get-height a0-9))) + (if (not s5-0) + (set! s5-0 #t) + ) + ) + ) + (spawn (-> self part) (-> self last-pos)) + ) + (suspend) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1))) + (set! (-> a0-11 param 1) 1.0) + (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (load-state-want-levels 'sunken 'sunkenb) + (kill-and-free-particles (-> self part)) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-15 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! a0-15 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (dummy-24 self 47104.0) + (update-trans! (-> self sound) (-> self last-pos)) + (update! (-> self sound)) + (suspend) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 param 0) (the float (+ (-> a0-19 frame-group data 0 length) -1))) + (set! (-> a0-19 param 1) 1.0) + (joint-control-channel-group-eval! a0-19 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (stop! (-> self sound)) + (load-state-want-display-level 'sunkenb 'display) + (load-state-want-vis 'sub) + (let ((a0-24 (-> self skel root-channel 0))) + (set! (-> a0-24 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-24 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-24 param 1) 1.0) + (set! (-> a0-24 frame-num) 0.0) + (joint-control-channel-group! a0-24 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-25 (-> self skel root-channel 0))) + (set! (-> a0-25 param 0) (the float (+ (-> a0-25 frame-group data 0 length) -1))) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group-eval! a0-25 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self move-player?) #f) + (if (-> self door) + (send-event (ppointer->process (-> self door)) 'trigger) + ) + (let ((v1-109 (handle->process (-> self fcell-handle)))) + (if v1-109 + (restore-collide-with-as (-> (the-as fuel-cell v1-109) root-override)) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (suspend) + ) + (set-continue! *game-info* "sunkenb-start") + (go exit-chamber-idle-in-sunken) + (none) + ) + :post + (behavior () + (if (-> self move-player?) + (transform-post) + (rider-post) + ) + (dummy-23 self #t) + (none) + ) + ) + +(defmethod init-from-entity! exit-chamber ((obj exit-chamber) (arg0 entity-actor)) + (process-entity-status! obj (entity-perm-status bit-3) #t) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (set! (-> obj move-player?) #f) + (set! (-> obj move-fcell?) #f) + (set! (-> obj play-assistant-message?) #t) + (set! (-> obj wave-scale) 0.0) + (set! (-> obj fcell-handle) (the-as handle #f)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 16384.0 0.0 67584.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 *exit-chamber-sg* '()) + (logior! (-> obj skel status) 1) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 620) obj)) + (ja-channel-set! 1) + (let ((s4-1 (get-reminder (get-task-control (game-task sunken-room)) 0))) + (let ((s2-0 #f) + (s3-1 (new 'stack-no-clear 'matrix)) + ) + (let ((a0-17 (-> obj entity extra perm))) + (set! (-> obj move-fcell?) (nonzero? (-> a0-17 user-int8 0))) + ) + (let ((v1-35 s4-1)) + (cond + ((zero? v1-35) + (set! (-> obj chargers-active) (the-as uint 0)) + (let ((s1-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s1-0 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s1-0 frame-num) 0.0) + ) + ) + ((= v1-35 1) + (set! (-> obj chargers-active) (the-as uint 62)) + (let ((s1-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s1-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s1-1 frame-num) 0.0) + ) + ) + ((= v1-35 2) + (set! (-> obj chargers-active) (the-as uint 62)) + (let ((s1-2 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s1-2 + (the-as art-joint-anim (-> obj draw art-group data 6)) + num-func-identity + ) + (set! (-> s1-2 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> obj draw art-group data 6)) data 0 length) -1)) + ) + ) + ) + ) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (dummy-21 obj (the-as exit-chamber-items s3-1)) + (let ((s1-3 #t)) + (let ((v1-64 s4-1)) + (cond + ((zero? v1-64) + (set! s1-3 #f) + ) + ((= v1-64 2) + (if (or (not *target*) (< 114688.0 (vector-vector-xz-distance (target-pos 0) (-> obj last-pos)))) + (set! s1-3 #f) + ) + ) + ) + ) + (let ((s0-1 (get-process *default-dead-pool* sun-iris-door #x4000))) + (set! (-> obj door) + (the-as + (pointer sun-iris-door) + (when s0-1 + (let ((t9-23 (method-of-type sun-iris-door activate))) + (t9-23 (the-as sun-iris-door s0-1) obj 'sun-iris-door (the-as pointer #x70004000)) + ) + (run-now-in-process s0-1 sun-iris-door-init-by-other (-> s3-1 vector) (-> s3-1 vector 1) s1-3) + (-> s0-1 ppointer) + ) + ) + ) + ) + ) + (let ((s1-4 (get-process *default-dead-pool* exit-chamber-button #x4000))) + (set! (-> obj button) + (the-as + (pointer exit-chamber-button) + (when s1-4 + (let ((t9-26 (method-of-type exit-chamber-button activate))) + (t9-26 (the-as exit-chamber-button s1-4) obj 'exit-chamber-button (the-as pointer #x70004000)) + ) + (run-now-in-process s1-4 exit-chamber-button-init-by-other (-> s3-1 vector 2) (-> s3-1 vector 3) arg0 #f) + (-> s1-4 ppointer) + ) + ) + ) + ) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #xc0 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "chamber-move") + :volume #x400 + :fo-min #x12c + :fo-max #x190 + ) + (-> obj root-override trans) + ) + ) + (when (not (task-complete? *game-info* (game-task sunken-room))) + (let ((a0-40 (new 'stack-no-clear 'vector))) + (if s2-0 + (set! (-> a0-40 quad) (-> (&+ s3-1 64) vector 0 quad)) + (set-vector! a0-40 2357755.5 -882327.1 -6879603.0 1.0) + ) + (set! (-> obj fcell-handle) (ppointer->handle (birth-pickup-at-point + a0-40 + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + ) + ) + ) + ) + ) + (set! (-> obj orig-trans quad) (-> obj root-override trans quad)) + (set! (-> obj last-pos quad) (-> obj root-override trans quad)) + (set! (-> obj move-player?) #f) + (dummy-23 obj #t) + (set! (-> obj move-player?) #f) + (cond + ((zero? s4-1) + (go exit-chamber-charger-puzzle) + ) + ((= s4-1 1) + (go exit-chamber-idle-in-sunken) + ) + ((= s4-1 2) + (go exit-chamber-idle-in-village #t) + ) + ) + ) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/sunken-pipegame.gc b/goal_src/levels/sunken/sunken-pipegame.gc index 4d3a836a80..5fd73f4e87 100644 --- a/goal_src/levels/sunken/sunken-pipegame.gc +++ b/goal_src/levels/sunken/sunken-pipegame.gc @@ -5,3 +5,1264 @@ ;; name in dgo: sunken-pipegame ;; dgos: L1, SUN, SUNKEN +;; DECOMP BEGINS + +(deftype sunken-pipegame-button (basebutton) + () + :heap-base #x90 + :method-count-assert 32 + :size-assert #x100 + :flag-assert #x2000900100 + ) + + +(deftype sunken-pipegame-prize (structure) + ((puzzle-delay uint64 :offset-assert 0) + (pipe-travel-time-to-far uint64 :offset-assert 8) + (pipe-travel-time-to-jar uint64 :offset-assert 16) + (actor-handle handle :offset-assert 24) + (jar-pos vector :inline :offset-assert 32) + (far-pos vector :inline :offset-assert 48) + (sucked-up-jar-part-pos vector :inline :offset-assert 64) + (sucked-up-far-part-pos vector :inline :offset-assert 80) + (blown-out-jar-part-pos vector :inline :offset-assert 96) + (blown-out-far-part-pos vector :inline :offset-assert 112) + (sucked-up-part sparticle-launch-control :offset-assert 128) + (blown-out-part sparticle-launch-control :offset-assert 132) + ) + :method-count-assert 9 + :size-assert #x88 + :flag-assert #x900000088 + ) + + +(deftype sunken-pipegame (process-drawable) + ((abort-audio-if-beaten? symbol :offset-assert 176) + (challenges-mask uint32 :offset-assert 180) + (challenge int32 :offset-assert 184) + (ticker ticky :inline :offset-assert 192) + (button (pointer sunken-pipegame-button) 3 :offset-assert 224) + (prize sunken-pipegame-prize 3 :inline :offset-assert 240) + ) + :heap-base #x230 + :method-count-assert 23 + :size-assert #x2a0 + :flag-assert #x17023002a0 + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_ symbol) symbol 21) + (dummy-22 (_type_ symbol) none 22) + ) + (:states + sunken-pipegame-beat-challenge + sunken-pipegame-begin-play + sunken-pipegame-end-play + sunken-pipegame-idle + sunken-pipegame-start-up + ) + ) + + +(set! (-> *part-group-id-table* 448) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-jar-suck0" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1741) + (sp-item 1742) + (sp-item 1743) + (sp-item 1744 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1741) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 10.0) + (sp-flt spt-y (meters 6.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-fade-a 1.4222223) + (sp-flt spt-accel-y 13.653334) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1745) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters -10.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1745) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a 0.0) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 1742) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 8.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -3.657143) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 2.5) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1743) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 4.0)) + (sp-rnd-flt spt-scale-x (meters 7.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 7.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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* 1744) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 449) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-jar-suck1" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1746) + (sp-item 1742) + (sp-item 1747) + (sp-item 1748 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1746) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 10.0) + (sp-flt spt-y (meters 6.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-fade-a 1.4222223) + (sp-flt spt-accel-y 13.653334) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1745) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters -10.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1747) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 4.0)) + (sp-rnd-flt spt-scale-x (meters 7.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 7.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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* 1748) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 450) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-jar-suck2" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1749) + (sp-item 1742) + (sp-item 1750) + (sp-item 1751 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1749) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 10.0) + (sp-flt spt-y (meters 6.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-fade-a 1.4222223) + (sp-flt spt-accel-y 13.653334) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1745) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters -10.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1750) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 4.0)) + (sp-rnd-flt spt-scale-x (meters 7.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 7.0) (meters 3.0) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 64.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* 1751) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 451) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-blow0" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1752) + (sp-item 1753) + (sp-item 1754) + (sp-item 1755 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1752) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-vel-y (meters -0.033333335)) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-accel-y -27.306667) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1756) + (sp-rnd-flt spt-conerot-x (degrees 150.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1756) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.4222223) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 1753) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters 0.0) (meters -8.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -3.657143) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 2.5) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1754) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -3.5)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 0.5) 1.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-rnd-flt spt-scale-y (meters 13.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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* 1755) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 452) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-blow1" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1757) + (sp-item 1753) + (sp-item 1758) + (sp-item 1759 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1757) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 0.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-vel-y (meters -0.033333335)) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-accel-y -27.306667) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1756) + (sp-rnd-flt spt-conerot-x (degrees 150.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1758) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -3.5)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 0.5) 1.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-rnd-flt spt-scale-y (meters 13.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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* 1759) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 453) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-blow2" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1760) + (sp-item 1753) + (sp-item 1761) + (sp-item 1762 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 1760) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-vel-y (meters -0.033333335)) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-accel-y -27.306667) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1756) + (sp-rnd-flt spt-conerot-x (degrees 150.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.0)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1761) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -3.5)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 0.5) 1.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-rnd-flt spt-scale-y (meters 13.0) (meters 3.0) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 64.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* 1762) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(defbehavior sunken-pipegame-button-init-by-other sunken-pipegame-button ((arg0 vector) (arg1 quaternion) (arg2 entity-actor) (arg3 symbol)) + (basebutton-init-by-other (the-as basebutton #f) arg0 arg1 arg2 arg3 0.0) + (none) + ) + +(defmethod dummy-20 sunken-pipegame ((obj sunken-pipegame)) + (let ((gp-0 0)) + (if (task-complete? *game-info* (game-task sunken-pipe)) + (+! gp-0 1) + ) + (if (got-buzzer? *game-info* (game-task sunken-buzzer) 0) + (+! gp-0 2) + ) + (if (got-buzzer? *game-info* (game-task sunken-buzzer) 1) + (+! gp-0 4) + ) + ) + (none) + ) + +(defstate sunken-pipegame-start-up (sunken-pipegame) + :code + (behavior () + (suspend) + (send-event (handle->process (-> self prize 0 actor-handle)) 'anim #f) + (go sunken-pipegame-idle) + (none) + ) + ) + +(defstate sunken-pipegame-idle (sunken-pipegame) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (when (= (-> arg0 type) sunken-pipegame-button) + (set! (-> self challenge) (-> (the-as sunken-pipegame-button arg0) button-id)) + (go sunken-pipegame-begin-play) + ) + ) + ) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + ) + +(defstate sunken-pipegame-begin-play (sunken-pipegame) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (case (-> arg0 type) + ((fuel-cell buzzer) + (go sunken-pipegame-beat-challenge) + ) + ) + ) + ) + ) + :enter + (behavior () + (dummy-21 self #f) + (set! (-> self abort-audio-if-beaten?) #f) + (dotimes (gp-0 3) + (let ((v1-4 (-> self button gp-0))) + (if (and (!= gp-0 (-> self challenge)) (zero? (logand (ash 1 gp-0) (-> self challenges-mask)))) + (send-event (ppointer->process v1-4) 'trigger) + ) + ) + ) + (none) + ) + :code + (behavior () + (local-vars (v1-112 symbol)) + (let ((gp-0 (-> *display* base-frame-counter))) + (if (not (handle->process (-> self prize (-> self challenge) actor-handle))) + (go sunken-pipegame-end-play) + ) + (kill-current-level-hint '(camera) '() 'exit) + (let ((v1-10 (-> self challenge))) + (cond + ((zero? v1-10) + (ambient-hint-spawn "gamcam27" (the-as vector #f) *entity-pool* 'camera) + (let ((s5-0 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-0 + (let ((t9-4 (method-of-type pov-camera activate))) + (t9-4 (the-as pov-camera s5-0) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "pipegame-left" + 0 + #f + '() + ) + (-> s5-0 ppointer) + ) + ) + ) + ((= v1-10 1) + (ambient-hint-spawn "gamcam25" (the-as vector #f) *entity-pool* 'camera) + (let ((s5-1 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-1 + (let ((t9-8 (method-of-type pov-camera activate))) + (t9-8 (the-as pov-camera s5-1) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-1 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "pipegame-middle" + 0 + #f + '() + ) + (-> s5-1 ppointer) + ) + ) + ) + ((= v1-10 2) + (ambient-hint-spawn "gamcam26" (the-as vector #f) *entity-pool* 'camera) + (let ((s5-2 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-2 + (let ((t9-12 (method-of-type pov-camera activate))) + (t9-12 (the-as pov-camera s5-2) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-2 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "pipegame-right" + 0 + #f + '() + ) + (-> s5-2 ppointer) + ) + ) + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((f30-0 0.0)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (let ((s5-3 (-> self prize (-> self challenge)))) + (spawn (-> s5-3 sucked-up-part) (-> s5-3 sucked-up-jar-part-pos)) + (spawn (-> s5-3 blown-out-part) (-> s5-3 blown-out-far-part-pos)) + ) + (+! f30-0 (* 1024.0 (-> *display* seconds-per-frame))) + (let ((s5-4 (new 'stack-no-clear 'vector))) + (set! (-> s5-4 quad) (-> (the-as (pointer uint128) (&+ (&-> self stack 160) (* 144 (-> self challenge)))))) + (let* ((f28-0 (-> s5-4 y)) + (v1-39 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-40 (the-as number (logior #x3f800000 v1-39))) + ) + (set! (-> s5-4 y) (+ f28-0 (* (+ -1.0 (the-as float v1-40)) f30-0))) + ) + (let ((a1-18 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-18 from) self) + (set! (-> a1-18 num-params) 1) + (set! (-> a1-18 message) 'trans) + (set! (-> a1-18 param 0) (the-as uint s5-4)) + (let ((t9-17 send-event-function) + (a0-32 (handle->process (-> self prize (-> self challenge) actor-handle))) + ) + (t9-17 a0-32 a1-18) + ) + ) + ) + (suspend) + ) + (let ((f28-1 0.0)) + (until (= f28-1 20480.0) + (let ((s5-5 (-> self prize (-> self challenge)))) + (spawn (-> s5-5 sucked-up-part) (-> s5-5 sucked-up-jar-part-pos)) + (spawn (-> s5-5 blown-out-part) (-> s5-5 blown-out-far-part-pos)) + (set! f28-1 (seek f28-1 20480.0 (* 81920.0 (-> *display* seconds-per-frame)))) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set! (-> s4-0 quad) (-> s5-5 jar-pos quad)) + (let* ((f26-0 (-> s4-0 y)) + (v1-65 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-66 (the-as number (logior #x3f800000 v1-65))) + ) + (set! (-> s4-0 y) (+ f26-0 (+ (* (+ -1.0 (the-as float v1-66)) f30-0) f28-1))) + ) + (let ((a1-22 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-22 from) self) + (set! (-> a1-22 num-params) 1) + (set! (-> a1-22 message) 'trans) + (set! (-> a1-22 param 0) (the-as uint s4-0)) + (let ((t9-22 send-event-function) + (a0-45 (handle->process (-> s5-5 actor-handle))) + ) + (t9-22 a0-45 a1-22) + ) + ) + ) + ) + (suspend) + ) + ) + ) + (until (>= (- (-> *display* base-frame-counter) gp-0) + (the-as int (-> self prize (-> self challenge) pipe-travel-time-to-far)) + ) + (let ((s5-6 (-> self prize (-> self challenge)))) + (spawn (-> s5-6 sucked-up-part) (-> s5-6 sucked-up-jar-part-pos)) + (spawn (-> s5-6 blown-out-part) (-> s5-6 blown-out-far-part-pos)) + ) + (suspend) + ) + ) + (dummy-22 self #t) + (let ((f30-1 20480.0)) + (until (= f30-1 0.0) + (set! f30-1 (seek f30-1 0.0 (* 81920.0 (-> *display* seconds-per-frame)))) + (let ((gp-1 (-> self prize (-> self challenge)))) + (spawn (-> gp-1 sucked-up-part) (-> gp-1 sucked-up-jar-part-pos)) + (spawn (-> gp-1 blown-out-part) (-> gp-1 blown-out-far-part-pos)) + (let ((v1-96 (new 'stack-no-clear 'vector))) + (set! (-> v1-96 quad) (-> gp-1 far-pos quad)) + (+! (-> v1-96 y) f30-1) + (let ((a1-32 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-32 from) self) + (set! (-> a1-32 num-params) 1) + (set! (-> a1-32 message) 'trans) + (set! (-> a1-32 param 0) (the-as uint v1-96)) + (let ((t9-29 send-event-function) + (a0-64 (handle->process (-> gp-1 actor-handle))) + ) + (t9-29 a0-64 a1-32) + ) + ) + ) + ) + (suspend) + ) + ) + (if (not (handle->process (-> self prize (-> self challenge) actor-handle))) + (go sunken-pipegame-end-play) + ) + (until v1-112 + (suspend) + (set! v1-112 (or (not *target*) (zero? (logand (-> *target* state-flags) 256)))) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (sleep (-> self ticker) (-> self prize (-> self challenge) puzzle-delay)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (completed? (-> self ticker)) + (suspend) + ) + (level-hint-spawn + (game-text-id sunken-pipegame-follow-it) + "sksp0123" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (close-specific-task! (-> self entity extra perm task) (task-status need-hint)) + (until (completed? (-> self ticker)) + (suspend) + ) + (kill-current-level-hint '(camera) '() 'exit) + (ambient-hint-spawn "gamcam26" (the-as vector #f) *entity-pool* 'camera) + (set! (-> self abort-audio-if-beaten?) #t) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((f30-2 0.0)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (let ((gp-2 (-> self prize (-> self challenge)))) + (spawn (-> gp-2 sucked-up-part) (-> gp-2 sucked-up-far-part-pos)) + (spawn (-> gp-2 blown-out-part) (-> gp-2 blown-out-jar-part-pos)) + (+! f30-2 (* 1024.0 (-> *display* seconds-per-frame))) + (let ((s5-7 (new 'stack-no-clear 'vector))) + (set! (-> s5-7 quad) (-> gp-2 far-pos quad)) + (let* ((f28-2 (-> s5-7 y)) + (v1-146 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-147 (the-as number (logior #x3f800000 v1-146))) + ) + (set! (-> s5-7 y) (+ f28-2 (* (+ -1.0 (the-as float v1-147)) f30-2))) + ) + (let ((a1-42 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-42 from) self) + (set! (-> a1-42 num-params) 1) + (set! (-> a1-42 message) 'trans) + (set! (-> a1-42 param 0) (the-as uint s5-7)) + (let ((t9-41 send-event-function) + (a0-91 (handle->process (-> gp-2 actor-handle))) + ) + (t9-41 a0-91 a1-42) + ) + ) + ) + ) + (suspend) + ) + (let ((f28-3 0.0)) + (until (= f28-3 20480.0) + (let ((gp-3 (-> self prize (-> self challenge)))) + (spawn (-> gp-3 sucked-up-part) (-> gp-3 sucked-up-far-part-pos)) + (spawn (-> gp-3 blown-out-part) (-> gp-3 blown-out-jar-part-pos)) + (set! f28-3 (seek f28-3 20480.0 (* 81920.0 (-> *display* seconds-per-frame)))) + (let ((s5-8 (new 'stack-no-clear 'vector))) + (set! (-> s5-8 quad) (-> gp-3 far-pos quad)) + (let* ((f26-1 (-> s5-8 y)) + (v1-169 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-170 (the-as number (logior #x3f800000 v1-169))) + ) + (set! (-> s5-8 y) (+ f26-1 (+ (* (+ -1.0 (the-as float v1-170)) f30-2) f28-3))) + ) + (let ((a1-46 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-46 from) self) + (set! (-> a1-46 num-params) 1) + (set! (-> a1-46 message) 'trans) + (set! (-> a1-46 param 0) (the-as uint s5-8)) + (let ((t9-46 send-event-function) + (a0-104 (handle->process (-> gp-3 actor-handle))) + ) + (t9-46 a0-104 a1-46) + ) + ) + ) + ) + (suspend) + ) + ) + ) + (dummy-22 self #f) + (set! (-> self abort-audio-if-beaten?) #f) + (let ((v1-184 (-> self prize (-> self challenge))) + (a0-109 (new 'stack-no-clear 'vector)) + ) + (set! (-> a0-109 quad) (-> v1-184 jar-pos quad)) + (set! (-> a0-109 y) (+ 40960.0 (-> a0-109 y))) + (send-event (handle->process (-> v1-184 actor-handle)) 'trans a0-109) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) + (the-as int (-> self prize (-> self challenge) pipe-travel-time-to-jar)) + ) + (let ((gp-4 (-> self prize (-> self challenge)))) + (spawn (-> gp-4 sucked-up-part) (-> gp-4 sucked-up-far-part-pos)) + (spawn (-> gp-4 blown-out-part) (-> gp-4 blown-out-jar-part-pos)) + ) + (suspend) + ) + (let ((f30-3 20480.0)) + (until (= f30-3 0.0) + (set! f30-3 (seek f30-3 0.0 (* 40960.0 (-> *display* seconds-per-frame)))) + (let ((v1-203 (new 'stack-no-clear 'vector))) + (set! (-> v1-203 quad) (-> (the-as (pointer uint128) (&+ (&-> self stack 160) (* 144 (-> self challenge)))))) + (+! (-> v1-203 y) f30-3) + (let ((a1-57 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-57 from) self) + (set! (-> a1-57 num-params) 1) + (set! (-> a1-57 message) 'trans) + (set! (-> a1-57 param 0) (the-as uint v1-203)) + (let ((t9-52 send-event-function) + (a0-128 (handle->process (-> self prize (-> self challenge) actor-handle))) + ) + (t9-52 a0-128 a1-57) + ) + ) + ) + (suspend) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 450) + (suspend) + ) + (ambient-hint-spawn "st-lose" (the-as vector #f) *entity-pool* 'stinger) + (go sunken-pipegame-end-play) + (none) + ) + ) + +(defstate sunken-pipegame-beat-challenge (sunken-pipegame) + :code + (behavior () + (logior! (-> self challenges-mask) (ash 1 (-> self challenge))) + (if (-> self abort-audio-if-beaten?) + (kill-current-level-hint '(camera) '() 'exit) + ) + (go sunken-pipegame-end-play) + (none) + ) + ) + +(defstate sunken-pipegame-end-play (sunken-pipegame) + :code + (behavior () + (local-vars (v1-3 symbol)) + (dummy-21 self #t) + (set! (-> self abort-audio-if-beaten?) #f) + (until v1-3 + (suspend) + (set! v1-3 (or (not *target*) (zero? (logand (-> *target* state-flags) 256)))) + ) + (if (not (handle->process (-> self prize (-> self challenge) actor-handle))) + (logior! (-> self challenges-mask) (ash 1 (-> self challenge))) + ) + (set! (-> self challenge) -1) + (dotimes (gp-0 3) + (let ((v1-18 (-> self button gp-0))) + (if (zero? (logand (ash 1 gp-0) (-> self challenges-mask))) + (send-event (ppointer->process v1-18) 'untrigger) + ) + ) + ) + (go sunken-pipegame-idle) + (none) + ) + ) + +(defmethod dummy-22 sunken-pipegame ((obj sunken-pipegame) (arg0 symbol)) + (let* ((v1-0 (-> obj challenge)) + (a2-0 v1-0) + ) + (cond + ((zero? a2-0) + (let ((v1-5 (handle->process (-> obj prize v1-0 actor-handle)))) + (when v1-5 + (if arg0 + (restore-collide-with-as (-> (the-as collectable v1-5) root-override)) + (clear-collide-with-as (-> (the-as collectable v1-5) root-override)) + ) + ) + ) + ) + ((or (= a2-0 1) (= a2-0 2)) + (let ((v1-13 (handle->process (-> obj prize v1-0 actor-handle)))) + (when v1-13 + (if arg0 + (restore-collide-with-as (-> (the-as collectable v1-13) root-override)) + (clear-collide-with-as (-> (the-as collectable v1-13) root-override)) + ) + ) + ) + ) + ) + ) + (none) + ) + +(defmethod dummy-21 sunken-pipegame ((obj sunken-pipegame) (arg0 symbol)) + (if arg0 + (logior! (-> obj mask) (process-mask actor-pause)) + (logclear! (-> obj mask) (process-mask actor-pause)) + ) + (let ((v1-4 (-> obj child))) + (while v1-4 + (if arg0 + (logior! (-> v1-4 0 mask) (process-mask actor-pause)) + (logclear! (-> v1-4 0 mask) (process-mask actor-pause)) + ) + (set! v1-4 (-> v1-4 0 brother)) + ) + ) + #f + ) + +(defmethod deactivate sunken-pipegame ((obj sunken-pipegame)) + (dotimes (s5-0 3) + (let ((s4-0 (-> obj prize s5-0))) + (if (nonzero? (-> s4-0 sucked-up-part)) + (kill-and-free-particles (-> s4-0 sucked-up-part)) + ) + (if (nonzero? (-> s4-0 blown-out-part)) + (kill-and-free-particles (-> s4-0 blown-out-part)) + ) + ) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defmethod relocate sunken-pipegame ((obj sunken-pipegame) (arg0 int)) + (dotimes (v1-0 3) + (let ((a0-4 (-> obj prize v1-0))) + (when (nonzero? (-> a0-4 sucked-up-part)) + (if (nonzero? (-> a0-4 sucked-up-part)) + (&+! (-> a0-4 sucked-up-part) arg0) + ) + ) + (when (nonzero? (-> a0-4 blown-out-part)) + (if (nonzero? (-> a0-4 blown-out-part)) + (&+! (-> a0-4 blown-out-part) arg0) + ) + ) + ) + ) + (the-as + sunken-pipegame + ((the-as (function process-drawable int process-drawable) (find-parent-method sunken-pipegame 7)) obj arg0) + ) + ) + +(defmethod init-from-entity! sunken-pipegame ((obj sunken-pipegame) (arg0 entity-actor)) + (set! (-> obj abort-audio-if-beaten?) #f) + (stack-size-set! (-> obj main-thread) 512) + (set! (-> obj challenge) -1) + (dotimes (v1-3 3) + (set! (-> obj prize v1-3 actor-handle) (the-as handle #f)) + ) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj challenges-mask) (the-as uint (dummy-20 obj))) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'quaternion)) + ) + (quaternion-identity! s3-0) + (dotimes (s2-0 3) + (let* ((s0-0 (-> obj prize s2-0)) + (v1-17 (ash 1 s2-0)) + (s1-1 (logtest? v1-17 (-> obj challenges-mask))) + ) + (eval-path-curve-div! (-> obj path) (-> s0-0 jar-pos) (the float (* s2-0 2)) 'interp) + (eval-path-curve-div! (-> obj path) (-> s0-0 far-pos) (the float (+ (* s2-0 2) 1)) 'interp) + (set! (-> s0-0 sucked-up-jar-part-pos quad) (-> s0-0 jar-pos quad)) + (set! (-> s0-0 sucked-up-far-part-pos quad) (-> s0-0 far-pos quad)) + (set! (-> s0-0 blown-out-jar-part-pos quad) (-> s0-0 jar-pos quad)) + (set! (-> s0-0 blown-out-jar-part-pos y) (+ 24576.0 (-> s0-0 blown-out-jar-part-pos y))) + (set! (-> s0-0 blown-out-far-part-pos quad) (-> s0-0 far-pos quad)) + (set! (-> s0-0 blown-out-far-part-pos y) (+ 28672.0 (-> s0-0 blown-out-far-part-pos y))) + (let ((v1-30 s2-0)) + (cond + ((zero? v1-30) + (set! (-> s0-0 puzzle-delay) (the-as uint 7500)) + (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 2550)) + (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750)) + (set-vector! s4-0 -30720.0 1146.88 5120.0 1.0) + (set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 448) obj)) + (set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 451) obj)) + (set! (-> s0-0 jar-pos y) (+ 11673.6 (-> s0-0 jar-pos y))) + (set! (-> s0-0 far-pos y) (+ 11673.6 (-> s0-0 far-pos y))) + (when (not s1-1) + (set! (-> s0-0 actor-handle) + (ppointer->handle + (birth-pickup-at-point (-> s0-0 jar-pos) (pickup-type fuel-cell) 45.0 #f obj (the-as fact-info #f)) + ) + ) + (let ((a1-10 (handle->process (-> s0-0 actor-handle)))) + (if a1-10 + (clear-collide-with-as (-> (the-as collectable a1-10) root-override)) + ) + ) + ) + ) + ((= v1-30 1) + (set! (-> s0-0 puzzle-delay) (the-as uint 4500)) + (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 1650)) + (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750)) + (set-vector! s4-0 0.0 1146.88 5120.0 1.0) + (set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 449) obj)) + (set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 452) obj)) + (set! (-> s0-0 jar-pos y) (+ 7168.0 (-> s0-0 jar-pos y))) + (set! (-> s0-0 far-pos y) (+ 7168.0 (-> s0-0 far-pos y))) + (set! (-> s0-0 blown-out-far-part-pos y) (+ 4096.0 (-> s0-0 blown-out-far-part-pos y))) + (when (not s1-1) + (set! (-> s0-0 actor-handle) + (ppointer->handle + (birth-pickup-at-point (-> s0-0 jar-pos) (pickup-type buzzer) 49.0 #f obj (the-as fact-info #f)) + ) + ) + (let ((s0-1 (handle->process (-> s0-0 actor-handle)))) + (when s0-1 + (send-event s0-1 'movie-pos 1) + (clear-collide-with-as (-> (the-as collectable s0-1) root-override)) + ) + ) + ) + ) + ((= v1-30 2) + (set! (-> s0-0 puzzle-delay) (the-as uint 4500)) + (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 1350)) + (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750)) + (set-vector! s4-0 30720.0 1146.88 5120.0 1.0) + (set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 450) obj)) + (set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 453) obj)) + (set! (-> s0-0 jar-pos y) (+ 7168.0 (-> s0-0 jar-pos y))) + (set! (-> s0-0 far-pos y) (+ 7168.0 (-> s0-0 far-pos y))) + (set! (-> s0-0 blown-out-far-part-pos y) (+ 4096.0 (-> s0-0 blown-out-far-part-pos y))) + (when (not s1-1) + (set! (-> s0-0 actor-handle) + (ppointer->handle + (birth-pickup-at-point (-> s0-0 jar-pos) (pickup-type buzzer) 65585.0 #f obj (the-as fact-info #f)) + ) + ) + (let ((s0-2 (handle->process (-> s0-0 actor-handle)))) + (when s0-2 + (send-event s0-2 'movie-pos 2) + (clear-collide-with-as (-> (the-as collectable s0-2) root-override)) + ) + ) + ) + ) + ) + ) + (vector+! s4-0 s4-0 (-> obj root trans)) + (let* ((s0-3 (get-process *default-dead-pool* sunken-pipegame-button #x4000)) + (v1-102 + (when s0-3 + (let ((t9-23 (method-of-type sunken-pipegame-button activate))) + (t9-23 (the-as sunken-pipegame-button s0-3) obj 'sunken-pipegame-button (the-as pointer #x70004000)) + ) + (run-now-in-process s0-3 sunken-pipegame-button-init-by-other s4-0 s3-0 arg0 s1-1) + (-> s0-3 ppointer) + ) + ) + ) + (set! (-> obj button s2-0) (the-as (pointer sunken-pipegame-button) v1-102)) + (set! (-> (the-as sunken-pipegame-button (-> (the-as sunken-pipegame-button v1-102) name)) button-id) s2-0) + ) + ) + ) + ) + (go sunken-pipegame-start-up) + (none) + ) + + + + diff --git a/scripts/check-gsrc-file.py b/scripts/check-gsrc-file.py index 6fe394313d..3b9af31a05 100644 --- a/scripts/check-gsrc-file.py +++ b/scripts/check-gsrc-file.py @@ -15,7 +15,7 @@ method_split_pattern = re.compile('t9-\d+\s\(method-of-object') function_split_pattern = re.compile('\(t9-\d+\)') missing_res_tag_pattern = re.compile('(sv-\d{2,} int)') decompiler_error_pattern = re.compile(';; ERROR') -missing_state_arg = re.compile('\s\(-> arg3 param \d\)\s') +missing_arg = re.compile('local-vars.*none\)') for file in files: src_path = "" @@ -54,12 +54,11 @@ for file in files: print("decompiler_error - {}:{}".format(file_path, lineno + 1)) throw_error = True continue - # todo - not good enough, ignore if there is only whitespace on the leftof the match - # missing_state_arg_match = missing_state_arg.search(line) - # if missing_state_arg_match: - # print("missing_state_arg - {}:{}".format(file_path, lineno + 1)) - # throw_error = True - # continue + missing_arg_match = missing_arg.search(line) + if missing_arg_match: + print("missing_arg - {}:{}".format(file_path, lineno + 1)) + throw_error = True + continue if throw_error: print("found potential problems!") diff --git a/test/decompiler/reference/engine/collide/collide-func_REF.gc b/test/decompiler/reference/engine/collide/collide-func_REF.gc index c359864790..9420f43482 100644 --- a/test/decompiler/reference/engine/collide/collide-func_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-func_REF.gc @@ -106,7 +106,7 @@ (cyl-len float) (arg6 vector) ) - (local-vars (v0-1 float) (v1-0 float) (v1-2 float) (a0-1 float) (a0-2 float) (a0-4 float) (a0-5 float)) + (local-vars (v0-1 float) (v1-0 number) (v1-2 float) (a0-1 uint) (a0-2 float) (a0-4 float) (a0-5 float)) (rlet ((vf1 :class vf) (vf10 :class vf) (vf11 :class vf) @@ -141,9 +141,9 @@ (.mov v1-0 vf16) (.sub.x.vf vf20 vf18 vf14) (.mov a0-1 vf18) - (let ((v1-1 (logand v1-0 (the-as uint a0-1)))) + (let ((v1-1 (logand (the-as uint v1-0) a0-1))) (.sub.vf vf1 vf15 vf1) - (b! (< v1-1 0) cfg-6 :delay (.sub.vf vf2 vf11 vf2)) + (b! (< (the-as int v1-1) 0) cfg-6 :delay (.sub.vf vf2 vf11 vf2)) ) (.mov v1-2 vf19) (.mov a0-2 vf20) @@ -379,3 +379,6 @@ ) ) + + + diff --git a/test/decompiler/reference/levels/beach/beach-obs_REF.gc b/test/decompiler/reference/levels/beach/beach-obs_REF.gc new file mode 100644 index 0000000000..ed3b60661c --- /dev/null +++ b/test/decompiler/reference/levels/beach/beach-obs_REF.gc @@ -0,0 +1,1917 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defskelgroup *beachcam-sg* beachcam + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 60) + :longest-edge (meters 0) + ) + +;; definition of type windmill-one +(deftype windmill-one (process-drawable) + ((root-override collide-shape-moving :offset 112) + (sound-id sound-id :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + windmill-one-idle + ) + ) + +;; definition for method 3 of type windmill-one +(defmethod inspect windmill-one ((obj windmill-one)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tsound-id: ~D~%" (-> obj sound-id)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *windmill-one-sg* windmill-one + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem -12 -8 -1 16) + :longest-edge (meters 7.5) + ) + +;; failed to figure out what this is: +(defstate windmill-one-idle (windmill-one) + :exit + (behavior () (sound-stop (-> self sound-id)) (none)) + :trans + (behavior () + (rider-trans) + (let ((t2-0 (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 4)))) + (if (!= (+ (-> t2-0 x) (-> t2-0 y) (-> t2-0 z)) 0.0) + (sound-play-by-name (static-sound-name "gears-rumble") (-> self sound-id) 1024 0 0 1 (the-as symbol t2-0)) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 0.5) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 0.5) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior windmill-one) rider-post) + ) + +;; definition for method 11 of type windmill-one +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! windmill-one ((obj windmill-one) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) -40960.0 -40960.0 32768.0 69632.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 3)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 8) + (set-vector! (-> s2-0 local-sphere) 4915.2 0.0 -4915.2 13516.8) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 3)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 9) + (set-vector! (-> s2-1 local-sphere) 4915.2 0.0 -4915.2 13516.8) + (append-prim s3-0 s2-1) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (set! (-> obj root-override pause-adjust-distance) 409600.0) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *windmill-one-sg* '()) + (logior! (-> obj skel status) 1) + (dummy-47 (-> obj root-override)) + (set! (-> obj sound-id) (new-sound-id)) + (go windmill-one-idle) + (none) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 155) (new 'static 'sparticle-launch-group + :length 7 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-beach-grotto-pole-rocks" + :launcher + (new 'static 'inline-array sparticle-group-item 7 + (sp-item 539 :period 1500 :length 15) + (sp-item 539 :period 1500 :length 30) + (sp-item 539 :period 1500 :length 45) + (sp-item 539 :period 1500 :length 75) + (sp-item 539 :period 1500 :length 150) + (sp-item 539 :period 1500 :length 300) + (sp-item 540 :period 1500 :length 30) + ) + :bounds + (new 'static 'sphere :y -49152.0 :w 57344.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 539) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters -9.0) (meters 18.0) 1.0) + (sp-flt spt-y (meters -6.0)) + (sp-rnd-flt spt-z -36864.0 73728.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 40.0 1.0) + (sp-rnd-flt spt-g 32.0 40.0 1.0) + (sp-rnd-flt spt-b 32.0 40.0 1.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters -0.04) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-rnd-flt spt-accel-y -6.826667 -0.68266666 1.0) + (sp-int spt-timer 390) + (sp-cpuinfo-flags bit2) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-drop) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 540) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 12.0) + (sp-flt spt-y (meters -7.0)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 4.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 48.0 16.0 1.0) + (sp-flt spt-g 48.0) + (sp-flt spt-b 48.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.006666667) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.3) (degrees 0.6) 1.0) + (sp-flt spt-fade-a 1.0666667) + (sp-flt spt-accel-y 0.06826667) + (sp-int spt-timer 1200) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 60) + (sp-launcher-by-id spt-next-launcher 541) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 10.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 3.5) (meters 6.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 541) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-fade-a 0.0) + (sp-int-plain-rnd spt-next-time 450 239 1) + (sp-launcher-by-id spt-next-launcher 542) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 542) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.14222223) (sp-end)) + ) + ) + +;; definition of type grottopole +(deftype grottopole (process-drawable) + ((root-override collide-shape :offset 112) + (speed meters :offset-assert 176) + (distance meters :offset-assert 180) + (position int32 :offset-assert 184) + (max-position int32 :offset-assert 188) + (incomming-attack-id uint64 :offset-assert 192) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xc8 + :flag-assert #x14006000c8 + (:states + grottopole-idle + grottopole-moving-down + grottopole-moving-up + ) + ) + +;; definition for method 3 of type grottopole +(defmethod inspect grottopole ((obj grottopole)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tspeed: (meters ~m)~%" (-> obj speed)) + (format #t "~T~Tdistance: (meters ~m)~%" (-> obj distance)) + (format #t "~T~Tposition: ~D~%" (-> obj position)) + (format #t "~T~Tmax-position: ~D~%" (-> obj max-position)) + (format #t "~T~Tincomming-attack-id: ~D~%" (-> obj incomming-attack-id)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *grottopole-sg* grottopole + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -8 0 9) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate grottopole-idle (grottopole) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (when (= (-> arg0 type) target) + (case arg2 + (('attack) + (let ((v1-2 (-> arg3 param 2))) + (when (!= v1-2 (-> self incomming-attack-id)) + (set! (-> self incomming-attack-id) v1-2) + (case (-> arg3 param 1) + (('uppercut) + (when (and + (< (-> *target* control trans y) (+ -40960.0 (-> self root-override trans y))) + (< (-> self position) (-> self max-position)) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 2) + ) + ) + (sound-play-by-name (static-sound-name "grotto-pole-hit") (new-sound-id) 1024 0 0 1 #t) + (sound-play-by-name (static-sound-name "dirt-crumble") (new-sound-id) 1024 0 0 1 #t) + (increment-success-for-hint (game-text-id beach-grottopole-increment)) + (go grottopole-moving-up) + ) + ) + (('flop) + (when (and + (< (+ -40960.0 (-> self root-override trans y)) (-> *target* control trans y)) + (> (-> self position) 0) + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (the-as collide-shape-moving (-> self root-override)) + (the-as uint 1) + ) + ) + (sound-play-by-name (static-sound-name "grotto-pole-hit") (new-sound-id) 1024 0 0 1 #t) + (sound-play-by-name (static-sound-name "dirt-crumble") (new-sound-id) 1024 0 0 1 #t) + (go grottopole-moving-down) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (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 3)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (transform-post) + (suspend) + (while #t + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + (none) + ) + ) + +;; definition for function move-grottopole +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun move-grottopole ((arg0 grottopole) (arg1 float)) + (let ((f30-0 0.0) + (s4-0 (new-stack-vector0)) + (s3-0 (new-stack-vector0)) + (s2-0 #f) + ) + (set! (-> arg0 part local-clock) 0) + (set-vector! s4-0 0.0 0.0 0.0 1.0) + (while (and (not s2-0) (< f30-0 (-> arg0 distance))) + (let ((f28-0 (* (-> arg0 speed) (-> *display* seconds-per-frame)))) + (when (< (-> arg0 distance) (+ f30-0 f28-0)) + (set! f28-0 (- (-> arg0 distance) f30-0)) + (set! s2-0 #t) + ) + (set! (-> s4-0 y) (* f28-0 arg1)) + (TODO-RENAME-28 (-> arg0 root-override) s4-0) + (+! f30-0 f28-0) + ) + (set! (-> s3-0 quad) (-> arg0 entity extra trans quad)) + (set! (-> s3-0 y) (+ -4096.0 (-> s3-0 y))) + (spawn (-> arg0 part) s3-0) + (suspend) + 0 + ) + ) + 0 + (none) + ) + +;; definition for function move-grottopole-to-position +;; INFO: Return type mismatch int vs none. +(defun move-grottopole-to-position ((arg0 grottopole)) + (let ((a1-0 (new 'stack-no-clear 'vector))) + (set-vector! a1-0 0.0 (* (-> arg0 distance) (the float (-> arg0 position))) 0.0 1.0) + (TODO-RENAME-28 (-> arg0 root-override) a1-0) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate grottopole-moving-up (grottopole) + :code + (behavior () + (+! (-> self position) 1) + (let ((v1-4 (-> self entity extra perm))) + (logior! (-> v1-4 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-4 user-int16 0) (-> self position)) + ) + (move-grottopole self 1.0) + (go grottopole-idle) + (none) + ) + :post + (the-as (function none :behavior grottopole) transform-post) + ) + +;; failed to figure out what this is: +(defstate grottopole-moving-down (grottopole) + :code + (behavior () + (+! (-> self position) -1) + (let ((v1-4 (-> self entity extra perm))) + (logior! (-> v1-4 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-4 user-int16 0) (-> self position)) + ) + (move-grottopole self -1.0) + (go grottopole-idle) + (none) + ) + :post + (the-as (function none :behavior grottopole) transform-post) + ) + +;; definition for method 11 of type grottopole +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! grottopole ((obj grottopole) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 3) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set-vector! (-> s3-0 local-sphere) 0.0 -20480.0 0.0 40960.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 3) + (set-vector! (-> s2-0 local-sphere) 0.0 -20480.0 0.0 40960.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 3) + (set-vector! (-> s2-1 local-sphere) 0.0 -20480.0 0.0 40960.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 2) (the-as uint 2)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 3) + (set-vector! (-> s2-2 local-sphere) 0.0 -20480.0 0.0 40960.0) + (append-prim s3-0 s2-2) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *grottopole-sg* '()) + (set! (-> obj speed) (res-lump-float arg0 'speed :default 81920.0)) + (set! (-> obj distance) (res-lump-float arg0 'distance :default 3072.0)) + (set! (-> obj position) 0) + (set! (-> obj max-position) (res-lump-value arg0 'num-positions int :default (the-as uint128 3))) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 155) obj)) + (set! (-> obj position) (-> obj entity extra perm user-int16 0)) + (move-grottopole-to-position obj) + (go grottopole-idle) + (none) + ) + +;; definition of type ecoventrock +(deftype ecoventrock (process-drawable) + ((root-override collide-shape :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + (ecoventrock-break symbol) + ecoventrock-idle + ) + ) + +;; definition for method 3 of type ecoventrock +(defmethod inspect ecoventrock ((obj ecoventrock)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *ecoventrock-sg* ecoventrock + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 1 0 3) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 156) (new 'static 'sparticle-launch-group + :length 6 + :duration #x258 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-beach-harvester-rock-explosion" + :launcher + (new 'static 'inline-array sparticle-group-item 6 + (sp-item 543 :period 1500 :length 5) + (sp-item 544 :period 1500 :length 5) + (sp-item 545 :period 1500 :length 5) + (sp-item 546 :period 1500 :length 5) + (sp-item 547 :period 1500 :length 5) + (sp-item 548 :period 1500 :length 15) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 547) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 15.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 130.0) + (sp-flt spt-g 64.0) + (sp-flt spt-b 54.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.1333334) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 543) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 4.0 6.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 16.0 1.0) + (sp-rnd-flt spt-g 70.0 16.0 1.0) + (sp-flt spt-b 70.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-y (meters 0.06666667)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-accel-y -10.922667) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 174) + (sp-launcher-by-id spt-next-launcher 549) + (sp-flt spt-conerot-x (degrees 45.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 544) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 4.0 6.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 70.0 16.0 1.0) + (sp-rnd-flt spt-g 70.0 16.0 1.0) + (sp-flt spt-b 70.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-y (meters 0.04)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-accel-y -10.922667) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 125) + (sp-launcher-by-id spt-next-launcher 549) + (sp-flt spt-conerot-x (degrees 30.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 545) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-rnd-flt spt-num 4.0 6.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.3) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 80.0 16.0 1.0) + (sp-rnd-flt spt-g 80.0 16.0 1.0) + (sp-flt spt-b 80.0) + (sp-flt spt-a 128.0) + (sp-flt spt-vel-y (meters 0.08)) + (sp-rnd-flt spt-rotvel-z (degrees -1.2) (degrees 2.4) 1.0) + (sp-flt spt-accel-y -10.922667) + (sp-flt spt-friction 0.99) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 195) + (sp-launcher-by-id spt-next-launcher 549) + (sp-flt spt-conerot-x (degrees 35.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 549) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-vel-y (meters 0.026666667)) + (sp-rnd-int-flt spt-rotvel-z (degrees -1.2) 1 436.90668) + (sp-flt spt-fade-a -1.0666667) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 548) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 16.0) + (sp-rnd-flt spt-y (meters 0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.5) (meters 1.5) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 96.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 48.0 1.0) + (sp-rnd-flt spt-b 64.0 16.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.016666668) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-flt spt-scalevel-y (meters 0.0033333334)) + (sp-flt spt-accel-y -1.0922667) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-int-plain-rnd spt-next-time 30 299 1) + (sp-launcher-by-id spt-next-launcher 550) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 550) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.2) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(defstate ecoventrock-idle (ecoventrock) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (sound-play-by-name (static-sound-name "cannon-shot") (new-sound-id) 1024 0 0 1 #t) + (increment-success-for-hint (game-text-id beach-eco-rock-increment)) + (go ecoventrock-break #f) + ) + ) + ) + :code + (behavior () + (transform-post) + (while #t + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate ecoventrock-break (ecoventrock) + :event + (the-as + (function process int symbol event-message-block object :behavior ecoventrock) + process-drawable-fuel-cell-handler + ) + :enter + (behavior ((arg0 symbol)) (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :code + (behavior ((arg0 symbol)) + (local-vars (sv-128 symbol)) + (ja-channel-set! 0) + (clear-collide-with-as (-> self root-override)) + (ja-post) + (process-entity-status! self (entity-perm-status complete) #t) + (let ((v1-2 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (send-event + (if v1-2 + (-> v1-2 extra process) + ) + 'update + ) + ) + (when (not arg0) + (let ((s5-0 (get-process *default-dead-pool* part-tracker #x4000))) + (when s5-0 + (let ((t9-7 (method-of-type part-tracker activate))) + (t9-7 (the-as part-tracker s5-0) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + part-tracker-init + (-> *part-group-id-table* 156) + -1 + #f + #f + #f + (-> self root-override root-prim prim-core) + ) + (-> s5-0 ppointer) + ) + ) + (let* ((s5-1 (-> self root-override trans)) + (v1-14 (target-pos 0)) + (f0-1 (- (-> s5-1 x) (-> v1-14 x))) + (f1-2 (- (-> s5-1 z) (-> v1-14 z))) + (f2-1 7372.8) + (f30-0 5734.4) + (f2-2 (/ f2-1 (sqrtf (+ (* f0-1 f0-1) (* f1-2 f1-2))))) + (f28-0 (* f0-1 f2-2)) + (f26-0 (* f1-2 f2-2)) + (s4-0 (new-stack-vector0)) + (s3-0 (new-stack-vector0)) + ) + (set-vector! s3-0 f28-0 f30-0 f26-0 1.0) + (set-vector! s4-0 (+ (-> s5-1 x) (-> s3-0 x)) (-> s5-1 y) (+ (-> s5-1 z) (-> s3-0 z)) 1.0) + (vector-float*! s3-0 s3-0 10.0) + (spawn-flying-rock s4-0 s3-0 1.0 (-> self entity)) + (let ((f20-0 (rand-vu-float-range 90.0 130.0)) + (f24-0 (rand-vu-float-range 230.0 270.0)) + ) + (let ((f22-0 (cos (* 182.04445 f20-0))) + (f0-14 (sin (* 182.04445 f20-0))) + ) + (set-vector! s3-0 (+ (* f26-0 f0-14) (* f28-0 f22-0)) f30-0 (+ (* f28-0 (- f0-14)) (* f26-0 f22-0)) 1.0) + ) + (set-vector! s4-0 (+ (-> s5-1 x) (-> s3-0 x)) (-> s5-1 y) (+ (-> s5-1 z) (-> s3-0 z)) 1.0) + (vector-float*! s3-0 s3-0 10.0) + (spawn-flying-rock s4-0 s3-0 1.0 (-> self entity)) + (let ((f22-1 (cos (* 182.04445 f24-0))) + (f0-30 (sin (* 182.04445 f24-0))) + ) + (set-vector! s3-0 (+ (* f26-0 f0-30) (* f28-0 f22-1)) f30-0 (+ (* f28-0 (- f0-30)) (* f26-0 f22-1)) 1.0) + ) + ) + (set-vector! s4-0 (+ (-> s5-1 x) (-> s3-0 x)) (-> s5-1 y) (+ (-> s5-1 z) (-> s3-0 z)) 1.0) + (vector-float*! s3-0 s3-0 10.0) + (spawn-flying-rock s4-0 s3-0 1.0 (-> self entity)) + (set-vector! s3-0 (+ (* -0.866 f26-0) (* 0.5 f28-0)) (* 0.5 f30-0) (+ (* 0.866 f28-0) (* 0.5 f26-0)) 1.0) + (set-vector! s4-0 (-> s5-1 x) (+ 3276.8 (-> s5-1 y)) (-> s5-1 z) 1.0) + (vector-float*! s3-0 s3-0 10.0) + (spawn-flying-rock s4-0 s3-0 1.0 (-> self entity)) + ) + ) + (when (or (-> self link prev) (-> self link next)) + (set! sv-128 (the-as symbol #f)) + (apply-all (-> self link) actor-link-subtask-complete-hook (& sv-128)) + (when sv-128 + (let ((s5-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s5-2) 150) + (suspend) + ) + ) + (let ((gp-1 + (cond + (arg0 + (the-as int #f) + ) + (else + (ambient-hint-spawn "gamcam10" (the-as vector #f) *entity-pool* 'camera) + (let ((gp-2 (get-process *default-dead-pool* pov-camera #x4000))) + (ppointer->handle (when gp-2 + (let ((t9-23 (method-of-type pov-camera activate))) + (t9-23 (the-as pov-camera gp-2) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-2 + pov-camera-init-by-other + (-> self root-override trans) + *beachcam-sg* + (-> self name) + 0 + #f + '() + ) + (-> gp-2 ppointer) + ) + ) + ) + ) + ) + ) + ) + (process-drawable-birth-fuel-cell (the-as entity #f) (the-as vector #f) #f) + (while (handle->process (the-as handle gp-1)) + (suspend) + ) + ) + (while (-> self child) + (suspend) + ) + ) + ) + (process-entity-status! self (entity-perm-status dead) #t) + (deactivate self) + (none) + ) + ) + +;; definition for method 11 of type ecoventrock +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! ecoventrock ((obj ecoventrock) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 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! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 2457.6 0.0 6963.2) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *ecoventrock-sg* '()) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (transform-post) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (if (and (-> obj entity) (logtest? (-> obj entity extra perm status) (entity-perm-status complete))) + (go ecoventrock-break #t) + (go ecoventrock-idle) + ) + (none) + ) + +;; definition of type flying-rock +(deftype flying-rock (process-drawable) + ((root-override collide-shape-moving :offset 112) + (tumble quaternion :inline :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xc0 + :flag-assert #x14005000c0 + (:states + flying-rock-idle + flying-rock-rolling + ) + ) + +;; definition for method 3 of type flying-rock +(defmethod inspect flying-rock ((obj flying-rock)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttumble: #~%" (-> obj tumble)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *kickrock-sg* kickrock + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate flying-rock-rolling (flying-rock) + :enter + (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :code + (behavior () + (let ((gp-0 #f) + (f30-0 0.99) + (s5-0 0) + ) + (while (< s5-0 2) + (cond + ((logtest? (-> self root-override status) 1) + (when (not gp-0) + (+! s5-0 1) + (set! f30-0 0.8) + (set! gp-0 #t) + ) + ) + (else + (when gp-0 + (set! f30-0 0.99) + (set! gp-0 #f) + ) + ) + ) + (vector-float*! (-> self root-override transv) (-> self root-override transv) f30-0) + (set! (-> self root-override transv w) 1.0) + (if (not gp-0) + (vector-v++! (-> self root-override transv) (dummy-62 (-> self root-override) (new-stack-vector0) 1.0)) + ) + (dummy-47 (-> self root-override)) + (dummy-33 (-> self root-override) (-> self root-override transv) (the-as uint 1)) + (quaternion*! (-> self root-override quat) (-> self root-override quat) (-> self tumble)) + (suspend) + ) + ) + (while (< 2048.0 (vector-length (-> self root-override transv))) + (cond + ((logtest? (-> self root-override status) 1) + (vector-float*! (-> self root-override transv) (-> self root-override transv) 0.8) + ) + (else + (vector-float*! (-> self root-override transv) (-> self root-override transv) 0.99) + (vector-v++! (-> self root-override transv) (dummy-62 (-> self root-override) (new-stack-vector0) 1.0)) + ) + ) + (set! (-> self root-override transv w) 1.0) + (dummy-47 (-> self root-override)) + (dummy-33 (-> self root-override) (-> self root-override transv) (the-as uint 1)) + (let ((gp-2 (new 'stack-no-clear 'vector)) + (f30-1 (vector-length (-> self root-override transv))) + ) + (set-vector! gp-2 (-> self root-override transv z) 0.0 (- (-> self root-override transv x)) 1.0) + (vector-normalize! gp-2 1.0) + (let ((f0-12 (* 0.00061035156 (-> *display* seconds-per-frame) f30-1))) + (quaternion-vector-angle! (-> self tumble) gp-2 (* 10430.379 f0-12)) + ) + ) + (quaternion*! (-> self root-override quat) (-> self tumble) (-> self root-override quat)) + (suspend) + ) + (go flying-rock-idle) + (none) + ) + :post + (behavior () + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (go flying-rock-idle) + ) + (ja-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate flying-rock-idle (flying-rock) + :code + (behavior () + (clear-collide-with-as (-> self root-override)) + (while (or + (logtest? (-> self draw status) (draw-status drwf03)) + (and + *target* + (>= 204800.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + ) + (suspend) + ) + (deactivate self) + (none) + ) + :post + (the-as (function none :behavior flying-rock) ja-post) + ) + +;; definition for function flying-rock-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior flying-rock-init-by-other flying-rock ((arg0 vector) (arg1 vector) (arg2 float) (arg3 entity)) + (set! (-> self entity) arg3) + (let ((s3-0 (new 'process 'collide-shape-moving self (collide-list-enum hit-by-player)))) + (set! (-> s3-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s3-0 reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) simple-collision-reaction) + ) + (set! (-> s3-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s3-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 17)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 0) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 (* 409.6 arg2)) + (set-root-prim! s3-0 s2-0) + ) + (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) + (backup-collide-with-as s3-0) + (set! (-> self root-override) s3-0) + ) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (set-vector! (-> self root-override scale) arg2 arg2 arg2 1.0) + (let ((s5-1 (new-stack-vector0))) + (set-vector! + s5-1 + (rand-vu-float-range -1.0 1.0) + (rand-vu-float-range -1.0 1.0) + (rand-vu-float-range -1.0 1.0) + 1.0 + ) + (vector-normalize! s5-1 1.0) + (quaternion-vector-angle! (-> self tumble) s5-1 (rand-vu-float-range 0.0 1820.4445)) + ) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 (rand-vu-float-range 0.0 65536.0)) + (initialize-skeleton self *kickrock-sg* '()) + (set! (-> self root-override transv quad) (-> arg1 quad)) + (go flying-rock-rolling) + (none) + ) + +;; definition for function spawn-flying-rock +;; INFO: Return type mismatch int vs none. +(defun spawn-flying-rock ((arg0 vector) (arg1 vector) (arg2 float) (arg3 entity)) + (let ((s2-0 (get-process *default-dead-pool* flying-rock #x4000))) + (when s2-0 + (let ((t9-1 (method-of-type flying-rock activate))) + (t9-1 (the-as flying-rock s2-0) *entity-pool* 'flying-rock (the-as pointer #x70004000)) + ) + (run-now-in-process s2-0 flying-rock-init-by-other arg0 arg1 arg2 arg3) + (-> s2-0 ppointer) + ) + ) + 0 + (none) + ) + +;; definition of type bladeassm +(deftype bladeassm (process-drawable) + ((root-override collide-shape-moving :offset 112) + (angle float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + bladeassm-idle + ) + ) + +;; definition for method 3 of type bladeassm +(defmethod inspect bladeassm ((obj bladeassm)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tangle: ~f~%" (-> obj angle)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *bladeassm-sg* bladeassm + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 10) + ) + +;; failed to figure out what this is: +(defstate bladeassm-idle (bladeassm) + :code + (behavior () + (while #t + (+! (-> self angle) (* 3640.889 (-> *display* seconds-per-frame))) + (set! (-> self angle) (the float (sar (shl (the int (-> self angle)) 48) 48))) + (pusher-post) + (suspend) + ) + (none) + ) + ) + +;; definition for function bladeassm-prebind-function +;; INFO: Return type mismatch int vs object. +(defun bladeassm-prebind-function ((arg0 process-drawable) (arg1 int) (arg2 bladeassm) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (quaternion-axis-angle! (the-as quaternion (&-> arg0 link)) 0.0 0.0 1.0 (-> v1-0 angle)) + ) + (the-as object 0) + ) + +;; definition for method 11 of type bladeassm +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! bladeassm ((obj bladeassm) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 49152.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 *bladeassm-sg* '()) + (set! (-> obj skel prebind-function) + (the-as (function pointer int process-drawable none) bladeassm-prebind-function) + ) + (logclear! (-> obj mask) (process-mask actor-pause)) + (go bladeassm-idle) + (none) + ) + +;; definition of type flutflutegg +(deftype flutflutegg (process-drawable) + ((root-override collide-shape-moving :offset 112) + (fall-dist meters :offset-assert 176) + (start vector :inline :offset-assert 192) + (dir vector :inline :offset-assert 208) + (pos float :offset-assert 224) + (vel float :offset-assert 228) + (wobbler wobbler :offset-assert 232) + (last-impulse-time int32 :offset-assert 236) + (incomming-attack-id uint64 :offset-assert 240) + (ambients-played int32 :offset-assert 248) + (ambient ambient-control :inline :offset-assert 256) + ) + :heap-base #xa0 + :method-count-assert 21 + :size-assert #x110 + :flag-assert #x1500a00110 + (:methods + (dummy-20 (_type_ float float float) none 20) + ) + (:states + (flutflutegg-break symbol) + flutflutegg-idle + flutflutegg-physics + flutflutegg-physics-fall + ) + ) + +;; definition for method 3 of type flutflutegg +(defmethod inspect flutflutegg ((obj flutflutegg)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tfall-dist: (meters ~m)~%" (-> obj fall-dist)) + (format #t "~T~Tstart: ~`vector`P~%" (-> obj start)) + (format #t "~T~Tdir: ~`vector`P~%" (-> obj dir)) + (format #t "~T~Tpos: ~f~%" (-> obj pos)) + (format #t "~T~Tvel: ~f~%" (-> obj vel)) + (format #t "~T~Twobbler: ~A~%" (-> obj wobbler)) + (format #t "~T~Tlast-impulse-time: ~D~%" (-> obj last-impulse-time)) + (format #t "~T~Tincomming-attack-id: ~D~%" (-> obj incomming-attack-id)) + (format #t "~T~Tambients-played: ~D~%" (-> obj ambients-played)) + (format #t "~T~Tambient: #~%" (-> obj ambient)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *flutflutegg-sg* flutflutegg + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 3.5 0 3.5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *flutflut-naked-sg* flutflut + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 8) + :longest-edge (meters 0) + ) + +;; definition for method 7 of type flutflutegg +;; INFO: Return type mismatch process-drawable vs flutflutegg. +(defmethod relocate flutflutegg ((obj flutflutegg) (arg0 int)) + (if (nonzero? (-> obj wobbler)) + (&+! (-> obj wobbler) arg0) + ) + (the-as + flutflutegg + ((the-as (function process-drawable int process-drawable) (find-parent-method flutflutegg 7)) obj arg0) + ) + ) + +;; definition for method 20 of type flutflutegg +;; INFO: Return type mismatch int vs none. +;; WARN: Expression building failed: Function (method 20 flutflutegg) has a return type of none, but the expression builder found a return statement. +(defmethod dummy-20 flutflutegg ((obj flutflutegg) (arg0 float) (arg1 float) (arg2 float)) + (if (< (- (-> *display* base-frame-counter) (-> obj last-impulse-time)) 150) + (return 0) + ) + (set! (-> obj last-impulse-time) (-> *display* base-frame-counter)) + (+! (-> obj vel) arg0) + (inc-xy-vel! (-> obj wobbler) arg1 arg2) + 0 + (none) + ) + +;; definition for function flutflutegg-hit-sounds +;; INFO: Return type mismatch int vs none. +(defbehavior flutflutegg-hit-sounds flutflutegg () + (sound-play-by-name (static-sound-name "egg-hit") (new-sound-id) 1024 0 0 1 #t) + (cond + ((not (task-closed? (game-task beach-flutflut) (task-status need-introduction))) + ) + ((zero? (logand (-> self ambients-played) 8)) + (if (play-ambient (-> self ambient) "BIR-AM04" #f (the-as vector #f)) + (logior! (-> self ambients-played) 8) + ) + ) + ((zero? (logand (-> self ambients-played) 512)) + (if (play-ambient (-> self ambient) "BIR-AM10" #f (the-as vector #f)) + (logior! (-> self ambients-played) 512) + ) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate flutflutegg-idle (flutflutegg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (when (and + (= arg2 'attack) + (or (= (-> arg3 param 1) 'punch) (= (-> arg3 param 1) 'spin) (= (-> arg3 param 1) 'spin-air)) + (!= (-> self incomming-attack-id) (-> arg3 param 2)) + ) + (set! (-> self incomming-attack-id) (-> arg3 param 2)) + (flutflutegg-hit-sounds) + (let ((s5-1 + (vector-! (new-stack-vector0) (-> (the-as process-drawable arg0) root trans) (-> self root-override trans)) + ) + ) + (set! (-> s5-1 y) 0.0) + (vector-normalize! s5-1 1.0) + (let ((f0-2 (vector-dot s5-1 (-> self dir))) + (f1-2 (- (* (-> s5-1 x) (-> self dir z)) (* (-> s5-1 z) (-> self dir x)))) + ) + (if (< f0-2 -0.7) + (dummy-20 self 24576.0 (* -8192.0 f1-2) (* -8192.0 f0-2)) + (dummy-20 self 0.0 (* -8192.0 f1-2) (* -8192.0 f0-2)) + ) + ) + ) + (go flutflutegg-physics) + ) + ) + :trans + (behavior () + (let* ((gp-0 (TODO-RENAME-10 (-> self ambient) (new 'stack-no-clear 'vector) 900 368640.0 self)) + (v1-2 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-3 (the-as number (logior #x3f800000 v1-2))) + (f30-0 (+ -1.0 (the-as float v1-3))) + ) + (cond + ((not (task-closed? (game-task beach-flutflut) (task-status need-introduction))) + ) + ((not gp-0) + ) + ((< 327680.0 (vector-length gp-0)) + (set! (-> self ambients-played) 0) + 0 + ) + ((and (zero? (logand (-> self ambients-played) 1)) (< (vector-length gp-0) 327680.0) (< -61440.0 (-> gp-0 y))) + (if (play-ambient (-> self ambient) "BIR-AM01" #f (the-as vector #f)) + (logior! (-> self ambients-played) 1) + ) + ) + ((and (zero? (logand (-> self ambients-played) 2)) (< (vector-length gp-0) 163840.0) (< -40960.0 (-> gp-0 y))) + (if (play-ambient (-> self ambient) "BIR-AM02" #f (the-as vector #f)) + (logior! (-> self ambients-played) 2) + ) + ) + ((and (zero? (logand (-> self ambients-played) 16)) (< (vector-length gp-0) 81920.0) (< -24576.0 (-> gp-0 y))) + (if (play-ambient (-> self ambient) "BIR-AM05" #f (the-as vector #f)) + (logior! (-> self ambients-played) 16) + ) + ) + ((and (zero? (logand (-> self ambients-played) 4)) (< (vector-length gp-0) 40960.0) (< -24576.0 (-> gp-0 y))) + (if (play-ambient (-> self ambient) "BIR-AM03" #f (the-as vector #f)) + (logior! (-> self ambients-played) 4) + ) + ) + ((< (-> gp-0 y) -24576.0) + ) + ((< (- (-> *display* base-frame-counter) (-> self ambient last-ambient-time)) 9000) + ) + ((< 0.8 f30-0) + (play-ambient (-> self ambient) "BIR-AM07" #f (-> self root-override trans)) + ) + ((< 0.6 f30-0) + (play-ambient (-> self ambient) "BIR-AM08" #f (-> self root-override trans)) + ) + ((< 0.4 f30-0) + (play-ambient (-> self ambient) "BIR-AM09" #f (-> self root-override trans)) + ) + ((< 0.2 f30-0) + (play-ambient (-> self ambient) "BIR-AM12" #f (-> self root-override trans)) + ) + (else + (play-ambient (-> self ambient) "BIR-AM13" #f (-> self root-override trans)) + ) + ) + ) + (none) + ) + :code + (behavior () + (ja-post) + (while #t + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate flutflutegg-physics (flutflutegg) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (the-as + object + (when (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (= arg2 'attack) + (or (= (-> arg3 param 1) 'punch) (= (-> arg3 param 1) 'spin) (= (-> arg3 param 1) 'spin-air)) + (!= (-> self incomming-attack-id) (-> arg3 param 2)) + ) + (set! (-> self incomming-attack-id) (-> arg3 param 2)) + (flutflutegg-hit-sounds) + (let ((s5-1 + (vector-! (new-stack-vector0) (-> (the-as process-drawable arg0) root trans) (-> self root-override trans)) + ) + ) + (set! (-> s5-1 y) 0.0) + (vector-normalize! s5-1 1.0) + (let ((f0-2 (vector-dot s5-1 (-> self dir))) + (f1-2 (- (* (-> s5-1 x) (-> self dir z)) (* (-> s5-1 z) (-> self dir x)))) + ) + (if (< f0-2 -0.7) + (dummy-20 self 24576.0 (* -8192.0 f1-2) (* -8192.0 f0-2)) + (dummy-20 self 0.0 (* -8192.0 f1-2) (* -8192.0 f0-2)) + ) + ) + ) + ) + ) + ) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (+! (-> self pos) (* (-> self vel) (-> *display* seconds-per-frame))) + (set! (-> self vel) (* 0.95 (-> self vel))) + (move! (-> self wobbler)) + (let ((a1-0 (new 'stack-no-clear 'vector))) + (vector-float*! a1-0 (-> self dir) (-> self pos)) + (vector+! a1-0 a1-0 (-> self start)) + (TODO-RENAME-30 (-> self root-override) a1-0) + ) + (TODO-RENAME-12 (-> self wobbler) (-> self root-override quat)) + (let ((a2-3 (quaternion-axis-angle! (new 'stack-no-clear 'quaternion) 0.0 1.0 0.0 -18204.445))) + (quaternion*! (-> self root-override quat) (-> self root-override quat) a2-3) + ) + (suspend) + (when (>= (-> self pos) (-> self fall-dist)) + (when (task-closed? (game-task beach-flutflut) (task-status need-introduction)) + (if (play-ambient (-> self ambient) "BIR-AM06" #f (the-as vector #f)) + (logior! (-> self ambients-played) 32) + ) + ) + (go flutflutegg-physics-fall) + ) + ) + (none) + ) + :post + (the-as (function none :behavior flutflutegg) ja-post) + ) + +;; failed to figure out what this is: +(defstate flutflutegg-physics-fall (flutflutegg) + :code + (behavior () + (local-vars (v1-25 symbol)) + (let ((gp-0 (get-process *default-dead-pool* camera-tracker #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type camera-tracker activate))) + (t9-1 (the-as camera-tracker gp-0) self 'camera-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + camera-tracker-init + (lambda :behavior camera-tracker + () + (while (not (process-grab? *target*)) + (suspend) + ) + (camera-change-to "camera-135" 0 #f) + (camera-look-at (the-as pair (ppointer->process (-> self parent))) (the-as uint 9)) + (let ((gp-0 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-0) 1200) + (suspend) + ) + ) + (while (not (process-release? (handle->process (-> self grab-target)))) + (suspend) + ) + (camera-look-at (the-as pair *target*) (the-as uint 0)) + (send-event *camera* 'blend-from-as-fixed) + (camera-change-to (the-as string 'base) 75 #f) + (none) + ) + ) + (-> gp-0 ppointer) + ) + ) + (close-specific-task! (game-task beach-flutflut) (task-status need-reminder)) + (while #t + (vector-float*! (-> self root-override transv) (-> self dir) (-> self vel)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until v1-25 + (vector-v++! (-> self root-override transv) (dummy-62 (-> self root-override) (new-stack-vector0) 0.0)) + (dummy-59 (-> self root-override) (-> self root-override transv) (the-as uint 1) 8192.0 #f #f #f) + (move! (-> self wobbler)) + (TODO-RENAME-12 (-> self wobbler) (-> self root-override quat)) + (let ((a2-6 (quaternion-axis-angle! (new 'stack-no-clear 'quaternion) 0.0 1.0 0.0 -18204.445))) + (quaternion*! (-> self root-override quat) (-> self root-override quat) a2-6) + ) + (suspend) + (set! v1-25 (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (logtest? (-> self root-override status) 1) + ) + ) + ) + (sound-play-by-name (static-sound-name "sack-land") (new-sound-id) 2048 0 0 1 #t) + (go flutflutegg-break #f) + ) + (none) + ) + :post + (the-as (function none :behavior flutflutegg) ja-post) + ) + +;; failed to figure out what this is: +(defstate flutflutegg-break (flutflutegg) + :code + (behavior ((arg0 symbol)) + (when arg0 + (set-vector! (-> self root-override trans) -231190.94 64559.105 -1164727.5 1.0) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 -18204.445) + ) + (suspend) + (dummy-47 (-> self root-override)) + (when (not arg0) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-3 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) (the float (+ (-> a0-4 frame-group data 0 length) -1))) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (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) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + ) + (while (and + (not (task-closed? (game-task beach-flutflut) (task-status need-reward-speech))) + (zero? (logand (-> self ambients-played) 1024)) + ) + (if (play-ambient (-> self ambient) "BIR-AM11" #f (the-as vector #f)) + (logior! (-> self ambients-played) 1024) + ) + (suspend) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (while (not (task-closed? (game-task beach-flutflut) (task-status need-reward-speech))) + (if (>= (- (-> *display* base-frame-counter) gp-2) 3000) + (level-hint-spawn + (game-text-id beach-flutflutegg-hint) + "sksp0029" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (suspend) + ) + ) + (ja-channel-set! 0) + (while (not (task-closed? (game-task beach-flutflut) (task-status need-resolution))) + (suspend) + ) + (ja-channel-set! 1) + (set-vector! (-> self root-override trans) -231190.94 64559.105 -1164727.5 1.0) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 0.0) + (let ((gp-3 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-3 + (the-as art-joint-anim (-> self draw art-group data 6)) + num-func-identity + ) + (set! (-> gp-3 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + ) + (while #t + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior flutflutegg) ja-post) + ) + +;; definition for method 11 of type flutflutegg +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! flutflutegg ((obj flutflutegg) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 2) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> 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) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set-vector! (-> s2-0 local-sphere) 0.0 8192.0 0.0 8192.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set-vector! (-> s2-1 local-sphere) 0.0 16384.0 0.0 7782.4) + (append-prim s3-0 s2-1) + ) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *flutflutegg-sg* '()) + (vector-z-quaternion! (-> obj dir) (-> obj root-override quat)) + (set! (-> obj start quad) (-> obj root-override trans quad)) + (set! (-> obj fall-dist) 20480.0) + (set-yaw-angle-clear-roll-pitch! (-> obj root-override) (+ -16384.0 (y-angle (-> obj root-override)))) + (set! (-> obj pos) 0.0) + (set! (-> obj vel) 0.0) + (set! (-> obj wobbler) (new 'process 'wobbler)) + (reset! (-> obj wobbler) 0.1 0.98 4096.0) + (set! (-> obj last-impulse-time) 0) + (set! (-> obj ambients-played) 0) + (if (task-closed? (game-task beach-flutflut) (task-status need-reminder)) + (go flutflutegg-break #t) + (go flutflutegg-idle) + ) + (none) + ) + +;; definition of type harvester +(deftype harvester (process-drawable) + ((root-override collide-shape :offset 112) + (alt-actor entity-actor :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + harvester-idle + (harvester-inflate symbol) + ) + ) + +;; definition for method 3 of type harvester +(defmethod inspect harvester ((obj harvester)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Talt-actor: ~A~%" (-> obj alt-actor)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *harvester-sg* harvester + 0 + 4 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 7 0 11) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate harvester-idle (harvester) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('update) + (if (and (-> self alt-actor) (logtest? (-> self alt-actor extra perm status) (entity-perm-status complete))) + (go harvester-inflate #f) + ) + ) + ) + ) + :code + (behavior () + (if (and (-> self alt-actor) (logtest? (-> self alt-actor extra perm status) (entity-perm-status complete))) + (go harvester-inflate #t) + ) + (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 5)) + num-func-identity + ) + (set! (-> gp-0 frame-num) (ja-aframe 1.0 0)) + ) + (ja-post) + (while #t + (logior! (-> self mask) (process-mask sleep)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate harvester-inflate (harvester) + :code + (behavior ((arg0 symbol)) + (when (not arg0) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! a0-1 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (while #t + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) 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 4)) num-func-seek!) + ) + (until (ja-done? 0) + (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!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior harvester) ja-post) + ) + +;; definition for method 11 of type harvester +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! harvester ((obj harvester) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask ambient) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 5) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 1)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 20480.0 0.0 40960.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 4) + (set-vector! (-> s2-0 local-sphere) 0.0 6144.0 0.0 24576.0) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 1) (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 4) + (set-vector! (-> s2-1 local-sphere) 16384.0 -20480.0 16384.0 20480.0) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 2) (the-as uint 0)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 4) + (set-vector! (-> s2-2 local-sphere) 16384.0 -20480.0 -16384.0 20480.0) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 3) (the-as uint 0)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 4) + (set-vector! (-> s2-3 local-sphere) -16384.0 -20480.0 -16384.0 20480.0) + (append-prim s3-0 s2-3) + ) + (let ((s2-4 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 4) (the-as uint 0)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 2048)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 1)) + (set! (-> s2-4 prim-core offense) 4) + (set! (-> s2-4 transform-index) 4) + (set-vector! (-> s2-4 local-sphere) -16384.0 -20480.0 16384.0 20480.0) + (append-prim s3-0 s2-4) + ) + ) + (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 *harvester-sg* '()) + (set! (-> obj alt-actor) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (go harvester-idle) + (none) + ) + +;; definition of type beachcam +(deftype beachcam (process-hidden) + () + :method-count-assert 15 + :size-assert #x70 + :flag-assert #xf00000070 + ) + +;; definition for method 3 of type beachcam +(defmethod inspect beachcam ((obj beachcam)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tname: ~A~%" (-> obj name)) + (format #t "~Tmask: ~D~%" (-> obj mask)) + (format #t "~Tparent: #x~X~%" (-> obj parent)) + (format #t "~Tbrother: #x~X~%" (-> obj brother)) + (format #t "~Tchild: #x~X~%" (-> obj child)) + (format #t "~Tppointer: #x~X~%" (-> obj ppointer)) + (format #t "~Tself: ~A~%" (-> obj self)) + (format #t "~Tpool: ~A~%" (-> obj pool)) + (format #t "~Tstatus: ~A~%" (-> obj status)) + (format #t "~Tpid: ~D~%" (-> obj pid)) + (format #t "~Tmain-thread: ~A~%" (-> obj main-thread)) + (format #t "~Ttop-thread: ~A~%" (-> obj top-thread)) + (format #t "~Tentity: ~A~%" (-> obj entity)) + (format #t "~Tstate: ~A~%" (-> obj state)) + (format #t "~Ttrans-hook: ~A~%" (-> obj trans-hook)) + (format #t "~Tpost-hook: ~A~%" (-> obj post-hook)) + (format #t "~Tevent-hook: ~A~%" (-> obj event-hook)) + (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~Tnext-state: ~A~%" (-> obj next-state)) + (format #t "~Theap-base: #x~X~%" (-> obj heap-base)) + (format #t "~Theap-top: #x~X~%" (-> obj heap-top)) + (format #t "~Theap-cur: #x~X~%" (-> obj heap-cur)) + (format #t "~Tstack-frame-top: ~A~%" (-> obj stack-frame-top)) + (format #t "~Theap: #~%" (&-> obj heap-base)) + (format #t "~Tconnection-list: ~`'connectable`P~%" (-> obj connection-list)) + (format #t "~Tstack[0] @ #x~X~%" (-> obj stack)) + obj + ) + +;; definition for function beachcam-spawn +;; INFO: Return type mismatch int vs none. +(defun beachcam-spawn () + (with-pp + (let ((gp-0 (entity-actor-lookup (-> pp entity) 'alt-actor 0))) + (when gp-0 + (let* ((s5-0 (get-process *default-dead-pool* pov-camera #x4000)) + (gp-1 + (ppointer->handle + (when s5-0 + (let ((t9-2 (method-of-type pov-camera activate))) + (t9-2 (the-as pov-camera s5-0) pp 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> gp-0 extra trans) + *beachcam-sg* + (new 'static 'spool-anim :name "beachcam-cannon" :index 3 :parts 1 :command-list '()) + 0 + #f + '() + ) + (-> s5-0 ppointer) + ) + ) + ) + (s5-1 (get-process *default-dead-pool* fuel-cell #x4000)) + (s5-2 + (ppointer->handle (when s5-1 + (let ((t9-5 (method-of-type fuel-cell activate))) + (t9-5 (the-as fuel-cell s5-1) pp 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 fuel-cell-init-as-clone gp-1 (-> pp entity extra perm task)) + (-> s5-1 ppointer) + ) + ) + ) + ) + (let ((v1-13 (handle->process gp-1))) + (if v1-13 + (set! (-> (the-as pov-camera v1-13) notify-handle) (the-as handle s5-2)) + ) + ) + (while (handle->process gp-1) + (suspend) + ) + (send-event (handle->process s5-2) 'stop-cloning) + ) + ) + ) + 0 + (none) + ) + ) diff --git a/test/decompiler/reference/levels/sunken/sun-exit-chamber_REF.gc b/test/decompiler/reference/levels/sunken/sun-exit-chamber_REF.gc new file mode 100644 index 0000000000..8793f33c10 --- /dev/null +++ b/test/decompiler/reference/levels/sunken/sun-exit-chamber_REF.gc @@ -0,0 +1,1583 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type blue-eco-charger-orb +(deftype blue-eco-charger-orb (process-drawable) + ((parent-process (pointer blue-eco-charger) :offset 12) + (orbit-rot vector :inline :offset-assert 176) + (orbit-rotv vector :inline :offset-assert 192) + (targ-orbit-rotv vector :inline :offset-assert 208) + (rest-pos vector :inline :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 21 + :size-assert #xf0 + :flag-assert #x15008000f0 + (:methods + (dummy-20 (_type_ float) vector 20) + ) + (:states + blue-eco-charger-orb-active + blue-eco-charger-orb-idle + ) + ) + +;; definition for method 3 of type blue-eco-charger-orb +(defmethod inspect blue-eco-charger-orb ((obj blue-eco-charger-orb)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Torbit-rot: #~%" (-> obj orbit-rot)) + (format #t "~T~Torbit-rotv: #~%" (-> obj orbit-rotv)) + (format #t "~T~Ttarg-orbit-rotv: #~%" (-> obj targ-orbit-rotv)) + (format #t "~T~Trest-pos: #~%" (-> obj rest-pos)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *blue-eco-charger-orb-sg* blue-eco-charger-orb + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 1.1) + :longest-edge (meters 0) + ) + +;; definition of type blue-eco-charger +(deftype blue-eco-charger (process-drawable) + ((root-override collide-shape :offset 112) + (charger-id int32 :offset-assert 176) + (open-level float :offset-assert 180) + (master entity-actor :offset-assert 184) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xbc + :flag-assert #x16005000bc + (:methods + (dummy-20 (_type_) object 20) + (dummy-21 (_type_ symbol) object 21) + ) + (:states + blue-eco-charger-close + blue-eco-charger-idle + (blue-eco-charger-open symbol) + blue-eco-charger-stuck-open + ) + ) + +;; definition for method 3 of type blue-eco-charger +(defmethod inspect blue-eco-charger ((obj blue-eco-charger)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tcharger-id: ~D~%" (-> obj charger-id)) + (format #t "~T~Topen-level: ~f~%" (-> obj open-level)) + (format #t "~T~Tmaster: ~A~%" (-> obj master)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *blue-eco-charger-sg* blue-eco-charger + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 1.9 0 2.7) + :longest-edge (meters 0) + ) + +;; definition of type exit-chamber-items +(deftype exit-chamber-items (structure) + ((door-pos vector :inline :offset-assert 0) + (door-quat quaternion :inline :offset-assert 16) + (button-pos vector :inline :offset-assert 32) + (button-quat quaternion :inline :offset-assert 48) + (fcell-pos vector :inline :offset-assert 64) + ) + :method-count-assert 9 + :size-assert #x50 + :flag-assert #x900000050 + ) + +;; definition for method 3 of type exit-chamber-items +(defmethod inspect exit-chamber-items ((obj exit-chamber-items)) + (format #t "[~8x] ~A~%" obj 'exit-chamber-items) + (format #t "~Tdoor-pos: #~%" (-> obj door-pos)) + (format #t "~Tdoor-quat: #~%" (-> obj door-quat)) + (format #t "~Tbutton-pos: #~%" (-> obj button-pos)) + (format #t "~Tbutton-quat: #~%" (-> obj button-quat)) + (format #t "~Tfcell-pos: #~%" (-> obj fcell-pos)) + obj + ) + +;; definition of type exit-chamber +(deftype exit-chamber (process-drawable) + ((root-override collide-shape-moving :offset 112) + (chargers-active uint32 :offset-assert 176) + (move-player? symbol :offset-assert 180) + (move-fcell? symbol :offset-assert 184) + (play-assistant-message? symbol :offset-assert 188) + (wave-scale float :offset-assert 192) + (button (pointer exit-chamber-button) :offset-assert 196) + (door (pointer sun-iris-door) :offset-assert 200) + (fcell-handle handle :offset-assert 208) + (orig-trans vector :inline :offset-assert 224) + (last-pos vector :inline :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 25 + :size-assert #x100 + :flag-assert #x1900900100 + (:methods + (dummy-20 (_type_ float) float 20) + (dummy-21 (_type_ exit-chamber-items) vector 21) + (dummy-22 (_type_) none 22) + (dummy-23 (_type_ symbol) object 23) + (dummy-24 (_type_ float) none 24) + ) + (:states + exit-chamber-charger-puzzle + exit-chamber-charger-puzzle-beaten + exit-chamber-idle-in-sunken + (exit-chamber-idle-in-village symbol) + exit-chamber-lower + exit-chamber-rise + ) + ) + +;; definition for method 3 of type exit-chamber +(defmethod inspect exit-chamber ((obj exit-chamber)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tchargers-active: ~D~%" (-> obj chargers-active)) + (format #t "~T~Tmove-player?: ~A~%" (-> obj move-player?)) + (format #t "~T~Tmove-fcell?: ~A~%" (-> obj move-fcell?)) + (format #t "~T~Tplay-assistant-message?: ~A~%" (-> obj play-assistant-message?)) + (format #t "~T~Twave-scale: ~f~%" (-> obj wave-scale)) + (format #t "~T~Tbutton: #x~X~%" (-> obj button)) + (format #t "~T~Tdoor: #x~X~%" (-> obj door)) + (format #t "~T~Tfcell-handle: ~D~%" (-> obj fcell-handle)) + (format #t "~T~Torig-trans: #~%" (-> obj orig-trans)) + (format #t "~T~Tlast-pos: #~%" (-> obj last-pos)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *exit-chamber-sg* exit-chamber + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 4 0 16.5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 620) + (new 'static 'sparticle-launch-group + :length 1 + :duration #x384 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-exit-chamber-ripples" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2512 :flags (is-3d))) + :bounds (new 'static 'sphere :w 262144.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2513) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-func spt-birth-func 'birth-func-ocean-height) + (sp-flt spt-num 0.25) + (sp-rnd-flt spt-x (meters 5.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 12.0) (meters 6.0) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.02) (meters 0.02) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 3.2) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags bit2 bit14) + (sp-flt spt-userdata 2048.0) + (sp-int-plain-rnd spt-next-time 10 29 1) + (sp-launcher-by-id spt-next-launcher 2514) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2514) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.094814815) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2512) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 23 + (sp-tex spt-texture (new 'static 'texture-id :index #x1e :page #x2)) + (sp-func spt-birth-func 'birth-func-ocean-height) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters 6.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 3.5) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-scalevel-x (meters 0.013333334) (meters 0.01) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 3.2) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags bit2 bit14) + (sp-flt spt-userdata 2048.0) + (sp-int-plain-rnd spt-next-time 10 29 1) + (sp-launcher-by-id spt-next-launcher 2514) + (sp-rnd-flt spt-conerot-x (degrees 70.0) (degrees 20.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition for method 20 of type blue-eco-charger-orb +(defmethod dummy-20 blue-eco-charger-orb ((obj blue-eco-charger-orb) (arg0 float)) + (set-vector! + (-> obj targ-orbit-rotv) + (rand-vu-float-range 72817.78 258503.11) + (rand-vu-float-range 72817.78 258503.11) + (rand-vu-float-range 72817.78 258503.11) + 1.0 + ) + (vector-float*! (-> obj targ-orbit-rotv) (-> obj targ-orbit-rotv) arg0) + ) + +;; failed to figure out what this is: +(defstate blue-eco-charger-orb-idle (blue-eco-charger-orb) + :code + (behavior () + (set! (-> self root trans quad) (-> self rest-pos quad)) + (while #t + (let ((f0-0 (-> self parent-process 0 open-level))) + (if (< 0.0 f0-0) + (go blue-eco-charger-orb-active) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior blue-eco-charger-orb) ja-post) + ) + +;; failed to figure out what this is: +(defstate blue-eco-charger-orb-active (blue-eco-charger-orb) + :code + (behavior () + (local-vars (at-0 int)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (dummy-20 self (-> self parent-process 0 open-level)) + (vector-reset! (-> self orbit-rotv)) + (while #t + (let ((f30-0 (-> self parent-process 0 open-level))) + (if (>= 0.0 f30-0) + (go blue-eco-charger-orb-idle) + ) + (if (zero? (rand-vu-int-count 30)) + (dummy-20 self f30-0) + ) + (set! (-> self orbit-rotv x) + (seek-with-smooth (-> self orbit-rotv x) (-> self targ-orbit-rotv x) 873.81335 0.8 0.12136297) + ) + (set! (-> self orbit-rotv y) + (seek-with-smooth (-> self orbit-rotv y) (-> self targ-orbit-rotv y) 873.81335 0.8 0.12136297) + ) + (set! (-> self orbit-rotv z) + (seek-with-smooth (-> self orbit-rotv z) (-> self targ-orbit-rotv z) 873.81335 0.8 0.12136297) + ) + (let ((a1-5 (-> self orbit-rot)) + (v1-13 (-> self orbit-rot)) + (a0-6 (new 'stack-no-clear 'vector)) + ) + (.lvf vf1 (&-> (-> self orbit-rotv) quad)) + (let ((f0-11 (-> *display* seconds-per-frame))) + (.mov at-0 f0-11) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> a0-6 quad) vf1) + (vector+! a1-5 v1-13 a0-6) + ) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 x) (* 1228.8 f30-0 (cos (-> self orbit-rot x)))) + (set! (-> gp-0 y) (* 1228.8 f30-0 (cos (-> self orbit-rot y)))) + (set! (-> gp-0 z) (* 1228.8 f30-0 (cos (-> self orbit-rot z)))) + (vector+! (-> self root trans) gp-0 (-> self rest-pos)) + (set-vector! + gp-0 + (cos (* 436.90668 (the float (mod (-> *display* base-frame-counter) 150)))) + (cos (* 247.39902 (the float (mod (-> *display* base-frame-counter) 264)))) + (cos (* 601.7998 (the float (mod (-> *display* base-frame-counter) 108)))) + 1.0 + ) + (vector-normalize! gp-0 1.0) + (quaternion-vector-angle! + (-> self root quat) + gp-0 + (* 463.8075 (the float (mod (-> *display* base-frame-counter) 141))) + ) + ) + ) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (set! (-> gp-1 x) (rand-vu-float-range -4096.0 4096.0)) + (set! (-> gp-1 y) (rand-vu-float-range -4096.0 4096.0)) + (set! (-> gp-1 z) (rand-vu-float-range -4096.0 4096.0)) + (vector+! gp-1 gp-1 (-> self root trans)) + (eco-blue-glow gp-1) + (set! (-> gp-1 x) (rand-vu-float-range -4096.0 4096.0)) + (set! (-> gp-1 y) (rand-vu-float-range -4096.0 4096.0)) + (set! (-> gp-1 z) (rand-vu-float-range -4096.0 4096.0)) + (vector+! gp-1 gp-1 (-> self root trans)) + (vector-lerp! gp-1 gp-1 (-> self parent-process 0 root-override trans) (rand-vu-float-range 0.2 0.8)) + (eco-blue-glow gp-1) + ) + (suspend) + ) + (none) + ) + ) + :post + (the-as (function none :behavior blue-eco-charger-orb) ja-post) + ) + +;; definition for function blue-eco-charger-orb-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior blue-eco-charger-orb-init-by-other blue-eco-charger-orb ((arg0 entity) (arg1 blue-eco-charger-orb)) + (set! (-> self entity) arg0) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 root trans quad)) + (quaternion-copy! (-> self root quat) (-> arg1 root quat)) + (set! (-> self root scale quad) (-> arg1 root scale quad)) + (set! (-> self root trans y) (+ 14069.76 (-> self root trans y))) + (set! (-> self rest-pos quad) (-> self root trans quad)) + (initialize-skeleton self *blue-eco-charger-orb-sg* '()) + (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 2)) + num-func-identity + ) + (set! (-> gp-1 frame-num) 0.0) + ) + (set-vector! (-> self orbit-rot) 0.0 0.0 0.0 1.0) + (go blue-eco-charger-orb-idle) + (none) + ) + +;; definition for method 21 of type blue-eco-charger +(defmethod dummy-21 blue-eco-charger ((obj blue-eco-charger) (arg0 symbol)) + (let* ((v1-0 (-> obj master)) + (a0-1 (if v1-0 + (-> v1-0 extra process) + ) + ) + ) + (when (not a0-1) + (set! (-> obj master) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (let ((v1-3 (-> obj master))) + (set! a0-1 (if v1-3 + (-> v1-3 extra process) + ) + ) + ) + ) + (if a0-1 + (send-event + a0-1 + 'notify + (if arg0 + 1 + 2 + ) + (-> obj charger-id) + ) + ) + ) + ) + +;; definition for method 20 of type blue-eco-charger +(defmethod dummy-20 blue-eco-charger ((obj blue-eco-charger)) + (and + (and *target* (>= 16384.0 (vector-vector-distance (-> obj root-override trans) (-> *target* control trans)))) + (send-event *target* 'query 'powerup 3) + ) + ) + +;; failed to figure out what this is: +(defstate blue-eco-charger-idle (blue-eco-charger) + :code + (behavior () + (set! (-> self open-level) 0.0) + (ja-channel-set! 1) + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data 2)) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (when (logtest? (-> self draw status) (draw-status drwf03)) + (if (and + (and *target* (>= 16384.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (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) 'query) + (set! (-> a1-2 param 0) (the-as uint 'powerup)) + (set! (-> a1-2 param 1) (the-as uint 3)) + (not (send-event-function *target* a1-2)) + ) + ) + (level-hint-spawn + (game-text-id sunken-blue-eco-charger-hint) + "sksp0125" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + (when (dummy-20 self) + (increment-success-for-hint (game-text-id sunken-blue-eco-charger-hint)) + (go blue-eco-charger-open #t) + ) + (if (nonzero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (go blue-eco-charger-open #t) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior blue-eco-charger) ja-post) + ) + +;; failed to figure out what this is: +(defstate blue-eco-charger-open (blue-eco-charger) + :enter + (behavior ((arg0 symbol)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if arg0 + (sound-play-by-name (static-sound-name "blue-eco-start") (new-sound-id) 1024 0 0 1 #t) + ) + (dummy-21 self #t) + (none) + ) + :trans + (behavior () + (if (dummy-20 self) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (update! (-> self sound)) + (none) + ) + :code + (behavior ((arg0 symbol)) + (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! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (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!) + ) + (set! (-> self open-level) + (/ (ja-frame-num 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + (while #t + (cond + ((zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 6000) + (level-hint-spawn + (game-text-id sunken-blue-eco-charger-all-hint) + "sksp0133" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (go blue-eco-charger-close) + ) + ) + (else + (go blue-eco-charger-stuck-open) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior blue-eco-charger) ja-post) + ) + +;; failed to figure out what this is: +(defstate blue-eco-charger-stuck-open (blue-eco-charger) + :trans + (behavior () (update! (-> self sound)) (none)) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate blue-eco-charger-close (blue-eco-charger) + :exit + (behavior () (stop! (-> self sound)) (none)) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 0.0) + (set! (-> a0-0 param 1) 1.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (when (dummy-20 self) + (increment-success-for-hint (game-text-id sunken-blue-eco-charger-hint)) + (go blue-eco-charger-open #t) + ) + (if (nonzero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (go blue-eco-charger-open #t) + ) + (update! (-> self sound)) + (suspend) + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 param 0) 0.0) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group-eval! a0-8 (the-as art-joint-anim #f) num-func-seek!) + ) + (set! (-> self open-level) + (/ (ja-frame-num 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + (dummy-21 self #f) + (go blue-eco-charger-idle) + (none) + ) + :post + (the-as (function none :behavior blue-eco-charger) ja-post) + ) + +;; definition for method 11 of type blue-eco-charger +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! blue-eco-charger ((obj blue-eco-charger) (arg0 entity-actor)) + (set! (-> obj open-level) 0.0) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 8192.0 0.0 0.0 16384.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) 6553.6) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *blue-eco-charger-sg* '()) + (let ((f0-6 (res-lump-float (-> obj entity) 'rotoffset))) + (if (!= f0-6 0.0) + (quaternion-rotate-y! (-> obj root-override quat) (-> obj root-override quat) f0-6) + ) + ) + (ja-channel-set! 1) + (let ((s4-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (set! (-> obj master) (entity-actor-lookup arg0 'alt-actor 0)) + (set! (-> obj link) (new 'process 'actor-link-info obj)) + (set! (-> obj charger-id) (+ (actor-count-before (-> obj link)) 1)) + (let ((s5-1 (get-process *default-dead-pool* blue-eco-charger-orb #x4000))) + (when s5-1 + (let ((t9-17 (method-of-type blue-eco-charger-orb activate))) + (t9-17 (the-as blue-eco-charger-orb s5-1) obj 'blue-eco-charger-orb (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 blue-eco-charger-orb-init-by-other (-> obj entity) obj) + (-> s5-1 ppointer) + ) + ) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "blue-eco-charg") + :volume #x400 + :fo-max 35 + ) + (-> obj root-override trans) + ) + ) + (if (zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (go blue-eco-charger-idle) + (go blue-eco-charger-open #f) + ) + (none) + ) + +;; definition of type exit-chamber-button +(deftype exit-chamber-button (basebutton) + () + :heap-base #x90 + :method-count-assert 32 + :size-assert #x100 + :flag-assert #x2000900100 + ) + +;; definition for method 3 of type exit-chamber-button +(defmethod inspect exit-chamber-button ((obj exit-chamber-button)) + (let ((t9-0 (method-of-type basebutton inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for function exit-chamber-button-init-by-other +(defbehavior exit-chamber-button-init-by-other exit-chamber-button ((arg0 vector) (arg1 quaternion) (arg2 entity-actor) (arg3 symbol)) + (basebutton-init-by-other (the-as basebutton #f) arg0 arg1 arg2 arg3 0.0) + (none) + ) + +;; definition for method 20 of type exit-chamber +(defmethod dummy-20 exit-chamber ((obj exit-chamber) (arg0 float)) + (let ((f0-5 (+ (-> obj orig-trans y) + (* 2252.8 arg0 (cos (* 36.40889 (the float (mod (-> *display* base-frame-counter) 1800))))) + ) + ) + ) + (set! (-> obj root-override trans y) f0-5) + f0-5 + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2515) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.6) (meters 0.2) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.3) (meters 0.1) 1.0) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 40.0 24.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.006666667) (meters 0.013333334) 1.0) + (sp-flt spt-accel-y 2.7306666) + (sp-flt spt-friction 0.96) + (sp-int spt-timer 1500) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-flt spt-userdata 0.0) + (sp-func spt-func 'check-water-level-above-and-die) + (sp-end) + ) + ) + ) + +;; definition for method 24 of type exit-chamber +(defmethod dummy-24 exit-chamber ((obj exit-chamber) (arg0 float)) + (let ((s4-0 (-> obj node-list data 3 bone transform)) + (f30-0 (rand-vu-float-range 0.0 65536.0)) + (f28-0 (rand-vu-float-range 8192.0 40960.0)) + (gp-0 (new 'stack-no-clear 'vector)) + ) + (set-vector! gp-0 (* (sin f30-0) arg0) f28-0 (* (cos f30-0) arg0) 1.0) + (vector-matrix*! gp-0 gp-0 s4-0) + (vector-float*! gp-0 gp-0 (/ 1.0 (-> gp-0 w))) + (set! (-> *part-id-table* 2515 init-specs 13 initial-valuef) (+ 24576.0 (-> gp-0 y))) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 2515) + gp-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (none) + ) + +;; definition for method 21 of type exit-chamber +(defmethod dummy-21 exit-chamber ((obj exit-chamber) (arg0 exit-chamber-items)) + (let ((s5-0 (-> obj node-list data 3 bone transform))) + (set-vector! (-> arg0 door-pos) 0.0 13107.2 -40960.0 1.0) + (vector-matrix*! (-> arg0 door-pos) (-> arg0 door-pos) s5-0) + (vector-float*! (-> arg0 door-pos) (-> arg0 door-pos) (/ 1.0 (-> arg0 door-pos w))) + (matrix->quaternion (-> arg0 door-quat) s5-0) + (set-vector! (-> arg0 button-pos) 0.0 -3072.0 0.0 1.0) + (vector-matrix*! (-> arg0 button-pos) (-> arg0 button-pos) s5-0) + (vector-float*! (-> arg0 button-pos) (-> arg0 button-pos) (/ 1.0 (-> arg0 button-pos w))) + (quaternion-copy! (-> arg0 button-quat) (-> arg0 door-quat)) + (set-vector! (-> arg0 fcell-pos) 0.0 68300.8 0.0 1.0) + (vector-matrix*! (-> arg0 fcell-pos) (-> arg0 fcell-pos) s5-0) + ) + (vector-float*! (-> arg0 fcell-pos) (-> arg0 fcell-pos) (/ 1.0 (-> arg0 fcell-pos w))) + ) + +;; definition for method 23 of type exit-chamber +;; Used lq/sq +(defmethod dummy-23 exit-chamber ((obj exit-chamber) (arg0 symbol)) + (new 'stack-no-clear 'vector) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! (-> obj last-pos) (-> obj node-list data 3)) + (vector-! s5-0 (-> obj last-pos) (-> obj root-override trans)) + (set! (-> obj draw bounds quad) (-> s5-0 quad)) + ) + (set! (-> obj draw bounds y) (+ 16384.0 (-> obj draw bounds y))) + (set! (-> obj draw bounds w) 67584.0) + (let ((s5-1 (new 'stack-no-clear 'exit-chamber-items))) + (dummy-21 obj s5-1) + (if (-> obj button) + (send-event (ppointer->process (-> obj button)) 'move-to (-> s5-1 button-pos) (-> s5-1 button-quat)) + ) + (when (and *target* (-> obj move-player?)) + (let ((a1-6 (new 'stack-no-clear 'vector))) + (set! (-> a1-6 quad) (-> s5-1 button-pos quad)) + (set! (-> a1-6 y) (+ 2662.4 (-> a1-6 y))) + (TODO-RENAME-30 (-> *target* control) a1-6) + ) + (vector-reset! (-> *target* control transv)) + ) + (if (-> obj door) + (send-event (ppointer->process (-> obj door)) 'move-to (-> s5-1 door-pos) (-> s5-1 door-quat)) + ) + (when arg0 + (let ((a0-12 (handle->process (-> obj fcell-handle)))) + (when a0-12 + (when (or (-> obj move-fcell?) (< (-> (the-as fuel-cell a0-12) root-override trans y) (-> s5-1 fcell-pos y))) + (when (not (-> obj move-fcell?)) + (set! (-> obj move-fcell?) #t) + (let ((v1-50 (-> obj entity extra perm))) + (logior! (-> v1-50 status) (entity-perm-status user-set-from-cstage)) + (set! (-> v1-50 user-int8 0) 1) + ) + ) + (send-event a0-12 'trans (-> s5-1 fcell-pos)) + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate exit-chamber-charger-puzzle (exit-chamber) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('notify) + (case (-> arg3 param 0) + ((1) + (when (zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (let* ((a1-2 (-> arg3 param 1)) + (v1-5 (logior (-> self chargers-active) (ash 1 a1-2))) + ) + (set! (-> self chargers-active) v1-5) + (when (= v1-5 62) + (save-reminder (get-task-control (game-task sunken-room)) 1 0) + (go exit-chamber-charger-puzzle-beaten) + (return #t) + v0-0 + ) + ) + ) + ) + ((2) + (when (zero? (get-reminder (get-task-control (game-task sunken-room)) 0)) + (let ((a1-6 (-> arg3 param 1))) + (set! v0-0 (logclear (-> self chargers-active) (ash 1 a1-6))) + ) + (set! (-> self chargers-active) (the-as uint v0-0)) + v0-0 + ) + ) + ) + ) + ) + ) + :exit + (behavior () (logclear! (-> self draw status) (draw-status drwf01)) (none)) + :code + (behavior () + (while #t + (if (>= 214228270000.0 (vector-vector-distance-squared (camera-pos) (-> self root-override trans))) + (logclear! (-> self draw status) (draw-status drwf01)) + (logior! (-> self draw status) (draw-status drwf01)) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior exit-chamber) ja-post) + ) + +;; failed to figure out what this is: +(defstate exit-chamber-charger-puzzle-beaten (exit-chamber) + :code + (behavior () + (let ((gp-0 (get-process *default-dead-pool* pov-camera #x4000))) + (when gp-0 + (let ((t9-1 (method-of-type pov-camera activate))) + (t9-1 (the-as pov-camera gp-0) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + pov-camera-init-by-other + (-> self root-override trans) + *sunkencam-sg* + "exit-chamber-door-open" + 0 + #f + '() + ) + (-> gp-0 ppointer) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 750) + (suspend) + ) + (send-event (ppointer->process (-> self door)) 'trigger) + (go exit-chamber-idle-in-sunken) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate exit-chamber-idle-in-sunken (exit-chamber) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-1 object)) + (case arg2 + (('trigger) + (go exit-chamber-rise) + (return #t) + v0-1 + ) + (('notify) + (when (and (= (-> arg0 type) fuel-cell) (= (-> arg3 param 0) 'pickup)) + (let ((a0-5 (handle->process (-> self fcell-handle)))) + (when a0-5 + (let ((v1-10 (new 'stack-no-clear 'vector))) + (set-vector! v1-10 0.0 64102.4 0.0 1.0) + (vector+! v1-10 v1-10 (-> self last-pos)) + (send-event a0-5 'set-movie-pos v1-10) + ) + ) + ) + ) + ) + ) + ) + :exit + (behavior () (logclear! (-> self draw status) (draw-status drwf01)) (none)) + :code + (behavior () + (save-reminder (get-task-control (game-task sunken-room)) 1 0) + (set! (-> self wave-scale) 0.0) + (if (-> self door) + (send-event (ppointer->process (-> self door)) 'trigger) + ) + (if (-> self button) + (send-event (ppointer->process (-> self button)) 'untrigger) + ) + (while #t + (if (>= 214228270000.0 (vector-vector-distance-squared (camera-pos) (-> self root-override trans))) + (logclear! (-> self draw status) (draw-status drwf01)) + (logior! (-> self draw status) (draw-status drwf01)) + ) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate exit-chamber-rise (exit-chamber) + :enter + (behavior () (set! (-> self move-player?) #f) (none)) + :trans + (behavior () + (if (not (-> self move-player?)) + (rider-trans) + ) + (none) + ) + :code + (behavior () + (aybabtu 2) + (let ((v1-1 (handle->process (-> self fcell-handle)))) + (if v1-1 + (clear-collide-with-as (-> (the-as fuel-cell v1-1) root-override)) + ) + ) + (close-specific-task! (game-task sunken-room) (task-status need-reminder)) + (send-event *target* 'reset-pickup 'eco) + (let ((gp-0 (get-process *default-dead-pool* sunkencam #x4000))) + (set! (-> (the-as sunkencam (-> (when gp-0 + (let ((t9-5 (method-of-type sunkencam activate))) + (t9-5 (the-as sunkencam gp-0) self 'sunkencam (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + pov-camera-init-by-other + (-> self root-override trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> gp-0 ppointer) + ) + 0 + ) + ) + seq + ) + (the-as uint 0) + ) + ) + 0 + (suspend) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-1 #f)) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-13 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) data 0 length) -1)) + ) + (set! (-> a0-13 param 1) 1.0) + (set! (-> a0-13 frame-num) 0.0) + (joint-control-channel-group! a0-13 (the-as art-joint-anim (-> self draw art-group data 3)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (not gp-1) (>= (- (-> *display* base-frame-counter) (-> self state-time)) 225) (-> self door)) + (set! gp-1 #t) + (send-event (ppointer->process (-> self door)) 'untrigger) + ) + (suspend) + (let ((a0-17 (-> self skel root-channel 0))) + (set! (-> a0-17 param 0) (the float (+ (-> a0-17 frame-group data 0 length) -1))) + (set! (-> a0-17 param 1) 1.0) + (joint-control-channel-group-eval! a0-17 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (set! (-> self move-player?) #t) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-19 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) 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 4)) 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!) + ) + ) + (load-state-want-levels 'sunken 'village2) + (let ((a0-23 (-> self skel root-channel 0))) + (set! (-> a0-23 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-23 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-23 param 1) 1.0) + (set! (-> a0-23 frame-num) 0.0) + (joint-control-channel-group! a0-23 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (dummy-24 self 51200.0) + (update-trans! (-> self sound) (-> self last-pos)) + (update! (-> self sound)) + (suspend) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 param 0) (the float (+ (-> a0-27 frame-group data 0 length) -1))) + (set! (-> a0-27 param 1) 1.0) + (joint-control-channel-group-eval! a0-27 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (stop! (-> self sound)) + (load-state-want-display-level 'village2 'display) + (load-state-want-display-level 'sunken 'special) + (let ((gp-2 #f)) + (let ((a0-32 (-> self skel root-channel 0))) + (set! (-> a0-32 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-32 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-32 param 1) 1.0) + (set! (-> a0-32 frame-num) 0.0) + (joint-control-channel-group! a0-32 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (set! (-> self wave-scale) (seek (-> self wave-scale) 1.0 0.0016666667)) + (dummy-20 self (-> self wave-scale)) + (if (and (-> self move-player?) (>= (ja-aframe-num 0) 310.0)) + (set! (-> self move-player?) #f) + ) + (let ((a0-36 (new 'stack-no-clear 'vector))) + (set! (-> a0-36 quad) (-> self last-pos quad)) + (set! (-> a0-36 y) (+ 51814.4 (-> a0-36 y))) + (when (>= (-> a0-36 y) (ocean-get-height a0-36)) + (if (not gp-2) + (set! gp-2 #t) + ) + (spawn (-> self part) (-> self last-pos)) + (spawn (-> self part) (-> self last-pos)) + (spawn (-> self part) (-> self last-pos)) + ) + ) + (suspend) + (let ((a0-40 (-> self skel root-channel 0))) + (set! (-> a0-40 param 0) (the float (+ (-> a0-40 frame-group data 0 length) -1))) + (set! (-> a0-40 param 1) 1.0) + (joint-control-channel-group-eval! a0-40 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (kill-and-free-particles (-> self part)) + (load-state-want-vis 'vi2) + (send-event *target* 'dry) + (let ((v1-143 (handle->process (-> self fcell-handle)))) + (if v1-143 + (restore-collide-with-as (-> (the-as fuel-cell v1-143) root-override)) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (set! (-> self wave-scale) (seek (-> self wave-scale) 1.0 0.0016666667)) + (dummy-20 self (-> self wave-scale)) + (suspend) + ) + (if (-> self door) + (send-event (ppointer->process (-> self door)) 'trigger) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 750) + (set! (-> self wave-scale) (seek (-> self wave-scale) 1.0 0.0016666667)) + (dummy-20 self (-> self wave-scale)) + (suspend) + ) + (go exit-chamber-idle-in-village #f) + (none) + ) + :post + (behavior () + (if (-> self move-player?) + (transform-post) + (rider-post) + ) + (dummy-23 self #t) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate exit-chamber-idle-in-village (exit-chamber) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (go exit-chamber-lower) + ) + (('notify) + (when (and (= (-> arg0 type) fuel-cell) (= (-> arg3 param 0) 'pickup)) + (let ((a0-5 (handle->process (-> self fcell-handle)))) + (when a0-5 + (let ((v1-8 (new 'stack-no-clear 'vector))) + (set-vector! v1-8 0.0 64102.4 0.0 1.0) + (vector+! v1-8 v1-8 (-> self last-pos)) + (send-event a0-5 'set-movie-pos v1-8) + ) + ) + ) + ) + ) + ) + ) + :enter + (behavior ((arg0 symbol)) + (set! (-> self mask) (logior (process-mask platform) (-> self mask))) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :exit + (behavior () (logclear! (-> self mask) (process-mask platform)) (none)) + :trans + (behavior () + (rider-trans) + (when *target* + (let ((f30-0 (vector-vector-xz-distance (target-pos 0) (-> self last-pos)))) + (when (-> self door) + (if (and *target* (>= 114688.0 f30-0)) + (send-event (ppointer->process (-> self door)) 'trigger) + (send-event (ppointer->process (-> self door)) 'untrigger) + ) + ) + (when (and (-> self play-assistant-message?) (>= f30-0 57344.0)) + (set! (-> self play-assistant-message?) #f) + (level-hint-spawn + (game-text-id sunken-kiera-you-raised-a-piece-of-lpc) + "asstvb22" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + ) + (none) + ) + :code + (behavior ((arg0 symbol)) + (set! (-> self move-player?) #f) + (set! (-> self wave-scale) 1.0) + (save-reminder (get-task-control (game-task sunken-room)) 2 0) + (if (-> self button) + (send-event (ppointer->process (-> self button)) 'untrigger) + ) + (when arg0 + (logior! (-> self draw status) (draw-status drwf05)) + (dummy-20 self 1.0) + (suspend) + (logclear! (-> self draw status) (draw-status drwf05)) + ) + (while #t + (dummy-20 self 1.0) + (suspend) + ) + (none) + ) + :post + (behavior () + (rider-post) + (dummy-23 self #t) + (if (and *target* (>= (vector-vector-xz-distance (target-pos 0) (-> self last-pos)) 40960.0)) + (spawn (-> self part) (-> self last-pos)) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate exit-chamber-lower (exit-chamber) + :enter + (behavior () + (set! (-> self move-player?) #t) + (let ((v1-2 (handle->process (-> self fcell-handle)))) + (if v1-2 + (clear-collide-with-as (-> (the-as fuel-cell v1-2) root-override)) + ) + ) + (none) + ) + :trans + (behavior () + (if (not (-> self move-player?)) + (rider-trans) + ) + (set! (-> self wave-scale) (seek (-> self wave-scale) 0.0 0.0016666667)) + (dummy-20 self (-> self wave-scale)) + (none) + ) + :code + (behavior () + (let* ((gp-0 (get-process *default-dead-pool* sunkencam #x4000)) + (v1-1 (when gp-0 + (let ((t9-1 (method-of-type sunkencam activate))) + (t9-1 (the-as sunkencam gp-0) self 'sunkencam (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + pov-camera-init-by-other + (-> self root-override trans) + *sunkencam-sg* + "qbert-show-door-open" + 0 + #f + '() + ) + (-> gp-0 ppointer) + ) + ) + ) + (set! (-> (the-as sunkencam (-> v1-1 0)) seq) (the-as uint 1)) + ) + (load-state-want-display-level 'sunken 'display) + (suspend) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((gp-1 #f) + (s5-0 #f) + ) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-5 param 1) 1.0) + (set! (-> a0-5 frame-num) 0.0) + (joint-control-channel-group! a0-5 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and (not gp-1) (>= (- (-> *display* base-frame-counter) (-> self state-time)) 75) (-> self door)) + (set! gp-1 #t) + (send-event (ppointer->process (-> self door)) 'untrigger) + ) + (when (+ (-> *display* base-frame-counter) -30) + (let ((a0-9 (new 'stack-no-clear 'vector))) + (set! (-> a0-9 quad) (-> self last-pos quad)) + (set! (-> a0-9 y) (+ 64102.4 (-> a0-9 y))) + (when (< (-> a0-9 y) (+ 12288.0 (ocean-get-height a0-9))) + (if (not s5-0) + (set! s5-0 #t) + ) + ) + ) + (spawn (-> self part) (-> self last-pos)) + ) + (suspend) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 param 0) (the float (+ (-> a0-11 frame-group data 0 length) -1))) + (set! (-> a0-11 param 1) 1.0) + (joint-control-channel-group-eval! a0-11 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (load-state-want-levels 'sunken 'sunkenb) + (kill-and-free-particles (-> self part)) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-15 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-15 param 1) 1.0) + (set! (-> a0-15 frame-num) 0.0) + (joint-control-channel-group! a0-15 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (dummy-24 self 47104.0) + (update-trans! (-> self sound) (-> self last-pos)) + (update! (-> self sound)) + (suspend) + (let ((a0-19 (-> self skel root-channel 0))) + (set! (-> a0-19 param 0) (the float (+ (-> a0-19 frame-group data 0 length) -1))) + (set! (-> a0-19 param 1) 1.0) + (joint-control-channel-group-eval! a0-19 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (stop! (-> self sound)) + (load-state-want-display-level 'sunkenb 'display) + (load-state-want-vis 'sub) + (let ((a0-24 (-> self skel root-channel 0))) + (set! (-> a0-24 frame-group) (the-as art-joint-anim (-> self draw art-group data 9))) + (set! (-> a0-24 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 9)) data 0 length) -1)) + ) + (set! (-> a0-24 param 1) 1.0) + (set! (-> a0-24 frame-num) 0.0) + (joint-control-channel-group! a0-24 (the-as art-joint-anim (-> self draw art-group data 9)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-25 (-> self skel root-channel 0))) + (set! (-> a0-25 param 0) (the float (+ (-> a0-25 frame-group data 0 length) -1))) + (set! (-> a0-25 param 1) 1.0) + (joint-control-channel-group-eval! a0-25 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self move-player?) #f) + (if (-> self door) + (send-event (ppointer->process (-> self door)) 'trigger) + ) + (let ((v1-109 (handle->process (-> self fcell-handle)))) + (if v1-109 + (restore-collide-with-as (-> (the-as fuel-cell v1-109) root-override)) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (suspend) + ) + (set-continue! *game-info* "sunkenb-start") + (go exit-chamber-idle-in-sunken) + (none) + ) + :post + (behavior () + (if (-> self move-player?) + (transform-post) + (rider-post) + ) + (dummy-23 self #t) + (none) + ) + ) + +;; definition for method 11 of type exit-chamber +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! exit-chamber ((obj exit-chamber) (arg0 entity-actor)) + (process-entity-status! obj (entity-perm-status bit-3) #t) + (process-entity-status! obj (entity-perm-status bit-7) #t) + (set! (-> obj move-player?) #f) + (set! (-> obj move-fcell?) #f) + (set! (-> obj play-assistant-message?) #t) + (set! (-> obj wave-scale) 0.0) + (set! (-> obj fcell-handle) (the-as handle #f)) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-others)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 0.0 16384.0 0.0 67584.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 *exit-chamber-sg* '()) + (logior! (-> obj skel status) 1) + (logclear! (-> obj mask) (process-mask actor-pause)) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 620) obj)) + (ja-channel-set! 1) + (let ((s4-1 (get-reminder (get-task-control (game-task sunken-room)) 0))) + (let ((s2-0 #f) + (s3-1 (new 'stack-no-clear 'matrix)) + ) + (let ((a0-17 (-> obj entity extra perm))) + (set! (-> obj move-fcell?) (nonzero? (-> a0-17 user-int8 0))) + ) + (let ((v1-35 s4-1)) + (cond + ((zero? v1-35) + (set! (-> obj chargers-active) (the-as uint 0)) + (let ((s1-0 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s1-0 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s1-0 frame-num) 0.0) + ) + ) + ((= v1-35 1) + (set! (-> obj chargers-active) (the-as uint 62)) + (let ((s1-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s1-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s1-1 frame-num) 0.0) + ) + ) + ((= v1-35 2) + (set! (-> obj chargers-active) (the-as uint 62)) + (let ((s1-2 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s1-2 + (the-as art-joint-anim (-> obj draw art-group data 6)) + num-func-identity + ) + (set! (-> s1-2 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> obj draw art-group data 6)) data 0 length) -1)) + ) + ) + ) + ) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (dummy-21 obj (the-as exit-chamber-items s3-1)) + (let ((s1-3 #t)) + (let ((v1-64 s4-1)) + (cond + ((zero? v1-64) + (set! s1-3 #f) + ) + ((= v1-64 2) + (if (or (not *target*) (< 114688.0 (vector-vector-xz-distance (target-pos 0) (-> obj last-pos)))) + (set! s1-3 #f) + ) + ) + ) + ) + (let ((s0-1 (get-process *default-dead-pool* sun-iris-door #x4000))) + (set! (-> obj door) + (the-as + (pointer sun-iris-door) + (when s0-1 + (let ((t9-23 (method-of-type sun-iris-door activate))) + (t9-23 (the-as sun-iris-door s0-1) obj 'sun-iris-door (the-as pointer #x70004000)) + ) + (run-now-in-process s0-1 sun-iris-door-init-by-other (-> s3-1 vector) (-> s3-1 vector 1) s1-3) + (-> s0-1 ppointer) + ) + ) + ) + ) + ) + (let ((s1-4 (get-process *default-dead-pool* exit-chamber-button #x4000))) + (set! (-> obj button) + (the-as + (pointer exit-chamber-button) + (when s1-4 + (let ((t9-26 (method-of-type exit-chamber-button activate))) + (t9-26 (the-as exit-chamber-button s1-4) obj 'exit-chamber-button (the-as pointer #x70004000)) + ) + (run-now-in-process s1-4 exit-chamber-button-init-by-other (-> s3-1 vector 2) (-> s3-1 vector 3) arg0 #f) + (-> s1-4 ppointer) + ) + ) + ) + ) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #xc0 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "chamber-move") + :volume #x400 + :fo-min #x12c + :fo-max #x190 + ) + (-> obj root-override trans) + ) + ) + (when (not (task-complete? *game-info* (game-task sunken-room))) + (let ((a0-40 (new 'stack-no-clear 'vector))) + (if s2-0 + (set! (-> a0-40 quad) (-> (&+ s3-1 64) vector 0 quad)) + (set-vector! a0-40 2357755.5 -882327.1 -6879603.0 1.0) + ) + (set! (-> obj fcell-handle) (ppointer->handle (birth-pickup-at-point + a0-40 + (pickup-type fuel-cell) + (the float (-> obj entity extra perm task)) + #f + obj + (the-as fact-info #f) + ) + ) + ) + ) + ) + ) + (set! (-> obj orig-trans quad) (-> obj root-override trans quad)) + (set! (-> obj last-pos quad) (-> obj root-override trans quad)) + (set! (-> obj move-player?) #f) + (dummy-23 obj #t) + (set! (-> obj move-player?) #f) + (cond + ((zero? s4-1) + (go exit-chamber-charger-puzzle) + ) + ((= s4-1 1) + (go exit-chamber-idle-in-sunken) + ) + ((= s4-1 2) + (go exit-chamber-idle-in-village #t) + ) + ) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/sunken-pipegame_REF.gc b/test/decompiler/reference/levels/sunken/sunken-pipegame_REF.gc new file mode 100644 index 0000000000..5106061982 --- /dev/null +++ b/test/decompiler/reference/levels/sunken/sunken-pipegame_REF.gc @@ -0,0 +1,1342 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type sunken-pipegame-button +(deftype sunken-pipegame-button (basebutton) + () + :heap-base #x90 + :method-count-assert 32 + :size-assert #x100 + :flag-assert #x2000900100 + ) + +;; definition for method 3 of type sunken-pipegame-button +(defmethod inspect sunken-pipegame-button ((obj sunken-pipegame-button)) + (let ((t9-0 (method-of-type basebutton inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition of type sunken-pipegame-prize +(deftype sunken-pipegame-prize (structure) + ((puzzle-delay uint64 :offset-assert 0) + (pipe-travel-time-to-far uint64 :offset-assert 8) + (pipe-travel-time-to-jar uint64 :offset-assert 16) + (actor-handle handle :offset-assert 24) + (jar-pos vector :inline :offset-assert 32) + (far-pos vector :inline :offset-assert 48) + (sucked-up-jar-part-pos vector :inline :offset-assert 64) + (sucked-up-far-part-pos vector :inline :offset-assert 80) + (blown-out-jar-part-pos vector :inline :offset-assert 96) + (blown-out-far-part-pos vector :inline :offset-assert 112) + (sucked-up-part sparticle-launch-control :offset-assert 128) + (blown-out-part sparticle-launch-control :offset-assert 132) + ) + :method-count-assert 9 + :size-assert #x88 + :flag-assert #x900000088 + ) + +;; definition for method 3 of type sunken-pipegame-prize +(defmethod inspect sunken-pipegame-prize ((obj sunken-pipegame-prize)) + (format #t "[~8x] ~A~%" obj 'sunken-pipegame-prize) + (format #t "~Tpuzzle-delay: ~D~%" (-> obj puzzle-delay)) + (format #t "~Tpipe-travel-time-to-far: ~D~%" (-> obj pipe-travel-time-to-far)) + (format #t "~Tpipe-travel-time-to-jar: ~D~%" (-> obj pipe-travel-time-to-jar)) + (format #t "~Tactor-handle: ~D~%" (-> obj actor-handle)) + (format #t "~Tjar-pos: #~%" (-> obj jar-pos)) + (format #t "~Tfar-pos: #~%" (-> obj far-pos)) + (format #t "~Tsucked-up-jar-part-pos: #~%" (-> obj sucked-up-jar-part-pos)) + (format #t "~Tsucked-up-far-part-pos: #~%" (-> obj sucked-up-far-part-pos)) + (format #t "~Tblown-out-jar-part-pos: #~%" (-> obj blown-out-jar-part-pos)) + (format #t "~Tblown-out-far-part-pos: #~%" (-> obj blown-out-far-part-pos)) + (format #t "~Tsucked-up-part: ~A~%" (-> obj sucked-up-part)) + (format #t "~Tblown-out-part: ~A~%" (-> obj blown-out-part)) + obj + ) + +;; definition of type sunken-pipegame +(deftype sunken-pipegame (process-drawable) + ((abort-audio-if-beaten? symbol :offset-assert 176) + (challenges-mask uint32 :offset-assert 180) + (challenge int32 :offset-assert 184) + (ticker ticky :inline :offset-assert 192) + (button (pointer sunken-pipegame-button) 3 :offset-assert 224) + (prize sunken-pipegame-prize 3 :inline :offset-assert 240) + ) + :heap-base #x230 + :method-count-assert 23 + :size-assert #x2a0 + :flag-assert #x17023002a0 + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_ symbol) symbol 21) + (dummy-22 (_type_ symbol) none 22) + ) + (:states + sunken-pipegame-beat-challenge + sunken-pipegame-begin-play + sunken-pipegame-end-play + sunken-pipegame-idle + sunken-pipegame-start-up + ) + ) + +;; definition for method 3 of type sunken-pipegame +(defmethod inspect sunken-pipegame ((obj sunken-pipegame)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tabort-audio-if-beaten?: ~A~%" (-> obj abort-audio-if-beaten?)) + (format #t "~T~Tchallenges-mask: ~D~%" (-> obj challenges-mask)) + (format #t "~T~Tchallenge: ~D~%" (-> obj challenge)) + (format #t "~T~Tticker: #~%" (-> obj ticker)) + (format #t "~T~Tbutton[3] @ #x~X~%" (-> obj button)) + (format #t "~T~Tprize[3] @ #x~X~%" (-> obj prize)) + obj + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 448) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-jar-suck0" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1741) + (sp-item 1742) + (sp-item 1743) + (sp-item 1744 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1741) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 10.0) + (sp-flt spt-y (meters 6.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-fade-a 1.4222223) + (sp-flt spt-accel-y 13.653334) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1745) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters -10.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1745) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a 0.0) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1742) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 8.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -3.657143) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 2.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1743) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 4.0)) + (sp-rnd-flt spt-scale-x (meters 7.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 7.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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* 1744) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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-group-id-table* 449) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-jar-suck1" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1746) + (sp-item 1742) + (sp-item 1747) + (sp-item 1748 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1746) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 10.0) + (sp-flt spt-y (meters 6.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 64.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-fade-a 1.4222223) + (sp-flt spt-accel-y 13.653334) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1745) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters -10.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1747) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 4.0)) + (sp-rnd-flt spt-scale-x (meters 7.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 7.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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* 1748) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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-group-id-table* 450) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-jar-suck2" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1749) + (sp-item 1742) + (sp-item 1750) + (sp-item 1751 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1749) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 10.0) + (sp-flt spt-y (meters 6.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-fade-a 1.4222223) + (sp-flt spt-accel-y 13.653334) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1745) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters -10.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1750) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 4.0)) + (sp-rnd-flt spt-scale-x (meters 7.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 7.0) (meters 3.0) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 64.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* 1751) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 64.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-group-id-table* 451) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-blow0" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1752) + (sp-item 1753) + (sp-item 1754) + (sp-item 1755 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1752) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 64.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-vel-y (meters -0.033333335)) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-accel-y -27.306667) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1756) + (sp-rnd-flt spt-conerot-x (degrees 150.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1756) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.4222223) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1753) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 5.0) + (sp-rnd-flt spt-y (meters 0.0) (meters -8.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -3.657143) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 2.5) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1754) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -3.5)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 0.5) 1.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-rnd-flt spt-scale-y (meters 13.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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* 1755) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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-group-id-table* 452) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-blow1" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1757) + (sp-item 1753) + (sp-item 1758) + (sp-item 1759 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1757) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-rnd-flt spt-r 0.0 32.0 1.0) + (sp-rnd-flt spt-g 64.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-vel-y (meters -0.033333335)) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-accel-y -27.306667) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1756) + (sp-rnd-flt spt-conerot-x (degrees 150.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1758) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -3.5)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 0.5) 1.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-rnd-flt spt-scale-y (meters 13.0) (meters 3.0) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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* 1759) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 64.0 64.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-group-id-table* 453) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-pipegame-blow2" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1760) + (sp-item 1753) + (sp-item 1761) + (sp-item 1762 :flags (is-3d)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1760) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 4.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.1) (meters 0.1) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 32.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-vel-y (meters -0.033333335)) + (sp-flt spt-scalevel-y (meters 0.006666667)) + (sp-flt spt-accel-y -27.306667) + (sp-int spt-timer 120) + (sp-cpuinfo-flags bit2) + (sp-int-plain-rnd spt-next-time 45 44 1) + (sp-launcher-by-id spt-next-launcher 1756) + (sp-rnd-flt spt-conerot-x (degrees 150.0) (degrees 30.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.0)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1761) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 14 + (sp-tex spt-texture (new 'static 'texture-id :index #x29 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -3.5)) + (sp-rnd-flt spt-scale-x (meters 3.0) (meters 0.5) 1.0) + (sp-flt spt-rot-z (degrees 180.0)) + (sp-rnd-flt spt-scale-y (meters 13.0) (meters 3.0) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 64.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* 1762) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.3)) + (sp-rnd-flt spt-scale-x (meters 5.5) (meters 2.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 5.5) (meters 2.0) 1.0) + (sp-flt spt-r 0.0) + (sp-rnd-flt spt-g 0.0 64.0 1.0) + (sp-rnd-flt spt-b 128.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-flt spt-fade-a -8.533334) + (sp-int spt-timer 10) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; definition for function sunken-pipegame-button-init-by-other +(defbehavior sunken-pipegame-button-init-by-other sunken-pipegame-button ((arg0 vector) (arg1 quaternion) (arg2 entity-actor) (arg3 symbol)) + (basebutton-init-by-other (the-as basebutton #f) arg0 arg1 arg2 arg3 0.0) + (none) + ) + +;; definition for method 20 of type sunken-pipegame +;; INFO: Return type mismatch int vs none. +(defmethod dummy-20 sunken-pipegame ((obj sunken-pipegame)) + (let ((gp-0 0)) + (if (task-complete? *game-info* (game-task sunken-pipe)) + (+! gp-0 1) + ) + (if (got-buzzer? *game-info* (game-task sunken-buzzer) 0) + (+! gp-0 2) + ) + (if (got-buzzer? *game-info* (game-task sunken-buzzer) 1) + (+! gp-0 4) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate sunken-pipegame-start-up (sunken-pipegame) + :code + (behavior () + (suspend) + (send-event (handle->process (-> self prize 0 actor-handle)) 'anim #f) + (go sunken-pipegame-idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate sunken-pipegame-idle (sunken-pipegame) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (when (= (-> arg0 type) sunken-pipegame-button) + (set! (-> self challenge) (-> (the-as sunken-pipegame-button arg0) button-id)) + (go sunken-pipegame-begin-play) + ) + ) + ) + ) + :code + (behavior () + (while #t + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate sunken-pipegame-begin-play (sunken-pipegame) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('notify) + (case (-> arg0 type) + ((fuel-cell buzzer) + (go sunken-pipegame-beat-challenge) + ) + ) + ) + ) + ) + :enter + (behavior () + (dummy-21 self #f) + (set! (-> self abort-audio-if-beaten?) #f) + (dotimes (gp-0 3) + (let ((v1-4 (-> self button gp-0))) + (if (and (!= gp-0 (-> self challenge)) (zero? (logand (ash 1 gp-0) (-> self challenges-mask)))) + (send-event (ppointer->process v1-4) 'trigger) + ) + ) + ) + (none) + ) + :code + (behavior () + (local-vars (v1-112 symbol)) + (let ((gp-0 (-> *display* base-frame-counter))) + (if (not (handle->process (-> self prize (-> self challenge) actor-handle))) + (go sunken-pipegame-end-play) + ) + (kill-current-level-hint '(camera) '() 'exit) + (let ((v1-10 (-> self challenge))) + (cond + ((zero? v1-10) + (ambient-hint-spawn "gamcam27" (the-as vector #f) *entity-pool* 'camera) + (let ((s5-0 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-0 + (let ((t9-4 (method-of-type pov-camera activate))) + (t9-4 (the-as pov-camera s5-0) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-0 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "pipegame-left" + 0 + #f + '() + ) + (-> s5-0 ppointer) + ) + ) + ) + ((= v1-10 1) + (ambient-hint-spawn "gamcam25" (the-as vector #f) *entity-pool* 'camera) + (let ((s5-1 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-1 + (let ((t9-8 (method-of-type pov-camera activate))) + (t9-8 (the-as pov-camera s5-1) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-1 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "pipegame-middle" + 0 + #f + '() + ) + (-> s5-1 ppointer) + ) + ) + ) + ((= v1-10 2) + (ambient-hint-spawn "gamcam26" (the-as vector #f) *entity-pool* 'camera) + (let ((s5-2 (get-process *default-dead-pool* pov-camera #x4000))) + (when s5-2 + (let ((t9-12 (method-of-type pov-camera activate))) + (t9-12 (the-as pov-camera s5-2) self 'pov-camera (the-as pointer #x70004000)) + ) + (run-now-in-process + s5-2 + pov-camera-init-by-other + (-> self root trans) + *sunkencam-sg* + "pipegame-right" + 0 + #f + '() + ) + (-> s5-2 ppointer) + ) + ) + ) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((f30-0 0.0)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (let ((s5-3 (-> self prize (-> self challenge)))) + (spawn (-> s5-3 sucked-up-part) (-> s5-3 sucked-up-jar-part-pos)) + (spawn (-> s5-3 blown-out-part) (-> s5-3 blown-out-far-part-pos)) + ) + (+! f30-0 (* 1024.0 (-> *display* seconds-per-frame))) + (let ((s5-4 (new 'stack-no-clear 'vector))) + (set! (-> s5-4 quad) (-> (the-as (pointer uint128) (&+ (&-> self stack 160) (* 144 (-> self challenge)))))) + (let* ((f28-0 (-> s5-4 y)) + (v1-39 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-40 (the-as number (logior #x3f800000 v1-39))) + ) + (set! (-> s5-4 y) (+ f28-0 (* (+ -1.0 (the-as float v1-40)) f30-0))) + ) + (let ((a1-18 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-18 from) self) + (set! (-> a1-18 num-params) 1) + (set! (-> a1-18 message) 'trans) + (set! (-> a1-18 param 0) (the-as uint s5-4)) + (let ((t9-17 send-event-function) + (a0-32 (handle->process (-> self prize (-> self challenge) actor-handle))) + ) + (t9-17 a0-32 a1-18) + ) + ) + ) + (suspend) + ) + (let ((f28-1 0.0)) + (until (= f28-1 20480.0) + (let ((s5-5 (-> self prize (-> self challenge)))) + (spawn (-> s5-5 sucked-up-part) (-> s5-5 sucked-up-jar-part-pos)) + (spawn (-> s5-5 blown-out-part) (-> s5-5 blown-out-far-part-pos)) + (set! f28-1 (seek f28-1 20480.0 (* 81920.0 (-> *display* seconds-per-frame)))) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (set! (-> s4-0 quad) (-> s5-5 jar-pos quad)) + (let* ((f26-0 (-> s4-0 y)) + (v1-65 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-66 (the-as number (logior #x3f800000 v1-65))) + ) + (set! (-> s4-0 y) (+ f26-0 (+ (* (+ -1.0 (the-as float v1-66)) f30-0) f28-1))) + ) + (let ((a1-22 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-22 from) self) + (set! (-> a1-22 num-params) 1) + (set! (-> a1-22 message) 'trans) + (set! (-> a1-22 param 0) (the-as uint s4-0)) + (let ((t9-22 send-event-function) + (a0-45 (handle->process (-> s5-5 actor-handle))) + ) + (t9-22 a0-45 a1-22) + ) + ) + ) + ) + (suspend) + ) + ) + ) + (until (>= (- (-> *display* base-frame-counter) gp-0) + (the-as int (-> self prize (-> self challenge) pipe-travel-time-to-far)) + ) + (let ((s5-6 (-> self prize (-> self challenge)))) + (spawn (-> s5-6 sucked-up-part) (-> s5-6 sucked-up-jar-part-pos)) + (spawn (-> s5-6 blown-out-part) (-> s5-6 blown-out-far-part-pos)) + ) + (suspend) + ) + ) + (dummy-22 self #t) + (let ((f30-1 20480.0)) + (until (= f30-1 0.0) + (set! f30-1 (seek f30-1 0.0 (* 81920.0 (-> *display* seconds-per-frame)))) + (let ((gp-1 (-> self prize (-> self challenge)))) + (spawn (-> gp-1 sucked-up-part) (-> gp-1 sucked-up-jar-part-pos)) + (spawn (-> gp-1 blown-out-part) (-> gp-1 blown-out-far-part-pos)) + (let ((v1-96 (new 'stack-no-clear 'vector))) + (set! (-> v1-96 quad) (-> gp-1 far-pos quad)) + (+! (-> v1-96 y) f30-1) + (let ((a1-32 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-32 from) self) + (set! (-> a1-32 num-params) 1) + (set! (-> a1-32 message) 'trans) + (set! (-> a1-32 param 0) (the-as uint v1-96)) + (let ((t9-29 send-event-function) + (a0-64 (handle->process (-> gp-1 actor-handle))) + ) + (t9-29 a0-64 a1-32) + ) + ) + ) + ) + (suspend) + ) + ) + (if (not (handle->process (-> self prize (-> self challenge) actor-handle))) + (go sunken-pipegame-end-play) + ) + (until v1-112 + (suspend) + (set! v1-112 (or (not *target*) (zero? (logand (-> *target* state-flags) 256)))) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (sleep (-> self ticker) (-> self prize (-> self challenge) puzzle-delay)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 150) + (completed? (-> self ticker)) + (suspend) + ) + (level-hint-spawn + (game-text-id sunken-pipegame-follow-it) + "sksp0123" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (close-specific-task! (-> self entity extra perm task) (task-status need-hint)) + (until (completed? (-> self ticker)) + (suspend) + ) + (kill-current-level-hint '(camera) '() 'exit) + (ambient-hint-spawn "gamcam26" (the-as vector #f) *entity-pool* 'camera) + (set! (-> self abort-audio-if-beaten?) #t) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (let ((f30-2 0.0)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 600) + (let ((gp-2 (-> self prize (-> self challenge)))) + (spawn (-> gp-2 sucked-up-part) (-> gp-2 sucked-up-far-part-pos)) + (spawn (-> gp-2 blown-out-part) (-> gp-2 blown-out-jar-part-pos)) + (+! f30-2 (* 1024.0 (-> *display* seconds-per-frame))) + (let ((s5-7 (new 'stack-no-clear 'vector))) + (set! (-> s5-7 quad) (-> gp-2 far-pos quad)) + (let* ((f28-2 (-> s5-7 y)) + (v1-146 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-147 (the-as number (logior #x3f800000 v1-146))) + ) + (set! (-> s5-7 y) (+ f28-2 (* (+ -1.0 (the-as float v1-147)) f30-2))) + ) + (let ((a1-42 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-42 from) self) + (set! (-> a1-42 num-params) 1) + (set! (-> a1-42 message) 'trans) + (set! (-> a1-42 param 0) (the-as uint s5-7)) + (let ((t9-41 send-event-function) + (a0-91 (handle->process (-> gp-2 actor-handle))) + ) + (t9-41 a0-91 a1-42) + ) + ) + ) + ) + (suspend) + ) + (let ((f28-3 0.0)) + (until (= f28-3 20480.0) + (let ((gp-3 (-> self prize (-> self challenge)))) + (spawn (-> gp-3 sucked-up-part) (-> gp-3 sucked-up-far-part-pos)) + (spawn (-> gp-3 blown-out-part) (-> gp-3 blown-out-jar-part-pos)) + (set! f28-3 (seek f28-3 20480.0 (* 81920.0 (-> *display* seconds-per-frame)))) + (let ((s5-8 (new 'stack-no-clear 'vector))) + (set! (-> s5-8 quad) (-> gp-3 far-pos quad)) + (let* ((f26-1 (-> s5-8 y)) + (v1-169 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-170 (the-as number (logior #x3f800000 v1-169))) + ) + (set! (-> s5-8 y) (+ f26-1 (+ (* (+ -1.0 (the-as float v1-170)) f30-2) f28-3))) + ) + (let ((a1-46 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-46 from) self) + (set! (-> a1-46 num-params) 1) + (set! (-> a1-46 message) 'trans) + (set! (-> a1-46 param 0) (the-as uint s5-8)) + (let ((t9-46 send-event-function) + (a0-104 (handle->process (-> gp-3 actor-handle))) + ) + (t9-46 a0-104 a1-46) + ) + ) + ) + ) + (suspend) + ) + ) + ) + (dummy-22 self #f) + (set! (-> self abort-audio-if-beaten?) #f) + (let ((v1-184 (-> self prize (-> self challenge))) + (a0-109 (new 'stack-no-clear 'vector)) + ) + (set! (-> a0-109 quad) (-> v1-184 jar-pos quad)) + (set! (-> a0-109 y) (+ 40960.0 (-> a0-109 y))) + (send-event (handle->process (-> v1-184 actor-handle)) 'trans a0-109) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) + (the-as int (-> self prize (-> self challenge) pipe-travel-time-to-jar)) + ) + (let ((gp-4 (-> self prize (-> self challenge)))) + (spawn (-> gp-4 sucked-up-part) (-> gp-4 sucked-up-far-part-pos)) + (spawn (-> gp-4 blown-out-part) (-> gp-4 blown-out-jar-part-pos)) + ) + (suspend) + ) + (let ((f30-3 20480.0)) + (until (= f30-3 0.0) + (set! f30-3 (seek f30-3 0.0 (* 40960.0 (-> *display* seconds-per-frame)))) + (let ((v1-203 (new 'stack-no-clear 'vector))) + (set! (-> v1-203 quad) (-> (the-as (pointer uint128) (&+ (&-> self stack 160) (* 144 (-> self challenge)))))) + (+! (-> v1-203 y) f30-3) + (let ((a1-57 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-57 from) self) + (set! (-> a1-57 num-params) 1) + (set! (-> a1-57 message) 'trans) + (set! (-> a1-57 param 0) (the-as uint v1-203)) + (let ((t9-52 send-event-function) + (a0-128 (handle->process (-> self prize (-> self challenge) actor-handle))) + ) + (t9-52 a0-128 a1-57) + ) + ) + ) + (suspend) + ) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 450) + (suspend) + ) + (ambient-hint-spawn "st-lose" (the-as vector #f) *entity-pool* 'stinger) + (go sunken-pipegame-end-play) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate sunken-pipegame-beat-challenge (sunken-pipegame) + :code + (behavior () + (logior! (-> self challenges-mask) (ash 1 (-> self challenge))) + (if (-> self abort-audio-if-beaten?) + (kill-current-level-hint '(camera) '() 'exit) + ) + (go sunken-pipegame-end-play) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate sunken-pipegame-end-play (sunken-pipegame) + :code + (behavior () + (local-vars (v1-3 symbol)) + (dummy-21 self #t) + (set! (-> self abort-audio-if-beaten?) #f) + (until v1-3 + (suspend) + (set! v1-3 (or (not *target*) (zero? (logand (-> *target* state-flags) 256)))) + ) + (if (not (handle->process (-> self prize (-> self challenge) actor-handle))) + (logior! (-> self challenges-mask) (ash 1 (-> self challenge))) + ) + (set! (-> self challenge) -1) + (dotimes (gp-0 3) + (let ((v1-18 (-> self button gp-0))) + (if (zero? (logand (ash 1 gp-0) (-> self challenges-mask))) + (send-event (ppointer->process v1-18) 'untrigger) + ) + ) + ) + (go sunken-pipegame-idle) + (none) + ) + ) + +;; definition for method 22 of type sunken-pipegame +(defmethod dummy-22 sunken-pipegame ((obj sunken-pipegame) (arg0 symbol)) + (let* ((v1-0 (-> obj challenge)) + (a2-0 v1-0) + ) + (cond + ((zero? a2-0) + (let ((v1-5 (handle->process (-> obj prize v1-0 actor-handle)))) + (when v1-5 + (if arg0 + (restore-collide-with-as (-> (the-as collectable v1-5) root-override)) + (clear-collide-with-as (-> (the-as collectable v1-5) root-override)) + ) + ) + ) + ) + ((or (= a2-0 1) (= a2-0 2)) + (let ((v1-13 (handle->process (-> obj prize v1-0 actor-handle)))) + (when v1-13 + (if arg0 + (restore-collide-with-as (-> (the-as collectable v1-13) root-override)) + (clear-collide-with-as (-> (the-as collectable v1-13) root-override)) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for method 21 of type sunken-pipegame +(defmethod dummy-21 sunken-pipegame ((obj sunken-pipegame) (arg0 symbol)) + (if arg0 + (logior! (-> obj mask) (process-mask actor-pause)) + (logclear! (-> obj mask) (process-mask actor-pause)) + ) + (let ((v1-4 (-> obj child))) + (while v1-4 + (if arg0 + (logior! (-> v1-4 0 mask) (process-mask actor-pause)) + (logclear! (-> v1-4 0 mask) (process-mask actor-pause)) + ) + (set! v1-4 (-> v1-4 0 brother)) + ) + ) + #f + ) + +;; definition for method 10 of type sunken-pipegame +(defmethod deactivate sunken-pipegame ((obj sunken-pipegame)) + (dotimes (s5-0 3) + (let ((s4-0 (-> obj prize s5-0))) + (if (nonzero? (-> s4-0 sucked-up-part)) + (kill-and-free-particles (-> s4-0 sucked-up-part)) + ) + (if (nonzero? (-> s4-0 blown-out-part)) + (kill-and-free-particles (-> s4-0 blown-out-part)) + ) + ) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 7 of type sunken-pipegame +;; INFO: Return type mismatch process-drawable vs sunken-pipegame. +(defmethod relocate sunken-pipegame ((obj sunken-pipegame) (arg0 int)) + (dotimes (v1-0 3) + (let ((a0-4 (-> obj prize v1-0))) + (when (nonzero? (-> a0-4 sucked-up-part)) + (if (nonzero? (-> a0-4 sucked-up-part)) + (&+! (-> a0-4 sucked-up-part) arg0) + ) + ) + (when (nonzero? (-> a0-4 blown-out-part)) + (if (nonzero? (-> a0-4 blown-out-part)) + (&+! (-> a0-4 blown-out-part) arg0) + ) + ) + ) + ) + (the-as + sunken-pipegame + ((the-as (function process-drawable int process-drawable) (find-parent-method sunken-pipegame 7)) obj arg0) + ) + ) + +;; definition for method 11 of type sunken-pipegame +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! sunken-pipegame ((obj sunken-pipegame) (arg0 entity-actor)) + (set! (-> obj abort-audio-if-beaten?) #f) + (stack-size-set! (-> obj main-thread) 512) + (set! (-> obj challenge) -1) + (dotimes (v1-3 3) + (set! (-> obj prize v1-3 actor-handle) (the-as handle #f)) + ) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! (-> obj path flags) (path-control-flag display draw-line draw-point draw-text)) + (set! (-> obj challenges-mask) (the-as uint (dummy-20 obj))) + (let ((s4-0 (new 'stack-no-clear 'vector)) + (s3-0 (new 'stack-no-clear 'quaternion)) + ) + (quaternion-identity! s3-0) + (dotimes (s2-0 3) + (let* ((s0-0 (-> obj prize s2-0)) + (v1-17 (ash 1 s2-0)) + (s1-1 (logtest? v1-17 (-> obj challenges-mask))) + ) + (eval-path-curve-div! (-> obj path) (-> s0-0 jar-pos) (the float (* s2-0 2)) 'interp) + (eval-path-curve-div! (-> obj path) (-> s0-0 far-pos) (the float (+ (* s2-0 2) 1)) 'interp) + (set! (-> s0-0 sucked-up-jar-part-pos quad) (-> s0-0 jar-pos quad)) + (set! (-> s0-0 sucked-up-far-part-pos quad) (-> s0-0 far-pos quad)) + (set! (-> s0-0 blown-out-jar-part-pos quad) (-> s0-0 jar-pos quad)) + (set! (-> s0-0 blown-out-jar-part-pos y) (+ 24576.0 (-> s0-0 blown-out-jar-part-pos y))) + (set! (-> s0-0 blown-out-far-part-pos quad) (-> s0-0 far-pos quad)) + (set! (-> s0-0 blown-out-far-part-pos y) (+ 28672.0 (-> s0-0 blown-out-far-part-pos y))) + (let ((v1-30 s2-0)) + (cond + ((zero? v1-30) + (set! (-> s0-0 puzzle-delay) (the-as uint 7500)) + (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 2550)) + (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750)) + (set-vector! s4-0 -30720.0 1146.88 5120.0 1.0) + (set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 448) obj)) + (set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 451) obj)) + (set! (-> s0-0 jar-pos y) (+ 11673.6 (-> s0-0 jar-pos y))) + (set! (-> s0-0 far-pos y) (+ 11673.6 (-> s0-0 far-pos y))) + (when (not s1-1) + (set! (-> s0-0 actor-handle) + (ppointer->handle + (birth-pickup-at-point (-> s0-0 jar-pos) (pickup-type fuel-cell) 45.0 #f obj (the-as fact-info #f)) + ) + ) + (let ((a1-10 (handle->process (-> s0-0 actor-handle)))) + (if a1-10 + (clear-collide-with-as (-> (the-as collectable a1-10) root-override)) + ) + ) + ) + ) + ((= v1-30 1) + (set! (-> s0-0 puzzle-delay) (the-as uint 4500)) + (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 1650)) + (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750)) + (set-vector! s4-0 0.0 1146.88 5120.0 1.0) + (set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 449) obj)) + (set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 452) obj)) + (set! (-> s0-0 jar-pos y) (+ 7168.0 (-> s0-0 jar-pos y))) + (set! (-> s0-0 far-pos y) (+ 7168.0 (-> s0-0 far-pos y))) + (set! (-> s0-0 blown-out-far-part-pos y) (+ 4096.0 (-> s0-0 blown-out-far-part-pos y))) + (when (not s1-1) + (set! (-> s0-0 actor-handle) + (ppointer->handle + (birth-pickup-at-point (-> s0-0 jar-pos) (pickup-type buzzer) 49.0 #f obj (the-as fact-info #f)) + ) + ) + (let ((s0-1 (handle->process (-> s0-0 actor-handle)))) + (when s0-1 + (send-event s0-1 'movie-pos 1) + (clear-collide-with-as (-> (the-as collectable s0-1) root-override)) + ) + ) + ) + ) + ((= v1-30 2) + (set! (-> s0-0 puzzle-delay) (the-as uint 4500)) + (set! (-> s0-0 pipe-travel-time-to-far) (the-as uint 1350)) + (set! (-> s0-0 pipe-travel-time-to-jar) (the-as uint 750)) + (set-vector! s4-0 30720.0 1146.88 5120.0 1.0) + (set! (-> s0-0 sucked-up-part) (create-launch-control (-> *part-group-id-table* 450) obj)) + (set! (-> s0-0 blown-out-part) (create-launch-control (-> *part-group-id-table* 453) obj)) + (set! (-> s0-0 jar-pos y) (+ 7168.0 (-> s0-0 jar-pos y))) + (set! (-> s0-0 far-pos y) (+ 7168.0 (-> s0-0 far-pos y))) + (set! (-> s0-0 blown-out-far-part-pos y) (+ 4096.0 (-> s0-0 blown-out-far-part-pos y))) + (when (not s1-1) + (set! (-> s0-0 actor-handle) + (ppointer->handle + (birth-pickup-at-point (-> s0-0 jar-pos) (pickup-type buzzer) 65585.0 #f obj (the-as fact-info #f)) + ) + ) + (let ((s0-2 (handle->process (-> s0-0 actor-handle)))) + (when s0-2 + (send-event s0-2 'movie-pos 2) + (clear-collide-with-as (-> (the-as collectable s0-2) root-override)) + ) + ) + ) + ) + ) + ) + (vector+! s4-0 s4-0 (-> obj root trans)) + (let* ((s0-3 (get-process *default-dead-pool* sunken-pipegame-button #x4000)) + (v1-102 + (when s0-3 + (let ((t9-23 (method-of-type sunken-pipegame-button activate))) + (t9-23 (the-as sunken-pipegame-button s0-3) obj 'sunken-pipegame-button (the-as pointer #x70004000)) + ) + (run-now-in-process s0-3 sunken-pipegame-button-init-by-other s4-0 s3-0 arg0 s1-1) + (-> s0-3 ppointer) + ) + ) + ) + (set! (-> obj button s2-0) (the-as (pointer sunken-pipegame-button) v1-102)) + (set! (-> (the-as sunken-pipegame-button (-> (the-as sunken-pipegame-button v1-102) name)) button-id) s2-0) + ) + ) + ) + ) + (go sunken-pipegame-start-up) + (none) + ) diff --git a/test/offline/config.jsonc b/test/offline/config.jsonc index 3293f39957..c5b64f39ae 100644 --- a/test/offline/config.jsonc +++ b/test/offline/config.jsonc @@ -194,6 +194,8 @@ "(method 12 drawable-tree-instance-tie)", "(method 13 drawable-tree-instance-tie)", + "ray-triangle-intersect", // requires SLL implementation + // not in use in PC port "tie-near-init-engine", "tie-near-end-buffer"