diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 7c6d6b6f1..bbcbd5cf9 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -1095,7 +1095,6 @@ (swamp-tethers-completion-sage-precursor-arm #x36b) - (village2-warp-gate-reminder #x36f) (village2-warp-gate-reminder-annoyed #x370) (village2-warp-gate-reminder-very-annoyed #x371) @@ -1107,6 +1106,7 @@ (rolling-race-record-string-prefix #x374) (rolling-race-new-record-string-prefix #x375) (rolling-race-try-again-string #x376) + (rolling-race-start-race-aborted #x377) ;; double check this (village3-miner-money #x400) (village3-oracle-money #x401) @@ -12077,6 +12077,8 @@ (target-clone-anim handle) target-title target-demo + target-title-play + target-title-wait (target-warp-in vector vector) ) ) @@ -21289,7 +21291,7 @@ (define-extern hud-hidden (state hud)) (define-extern hud-leaving (state int hud)) (define-extern hud-in (state hud)) -(define-extern hud-collecting (state handle hud)) ;; TODO accepts a handle - CRASH in `hud` +(define-extern hud-collecting (state handle collectable)) ;; ---------------------- @@ -26221,6 +26223,9 @@ (update-connected-crystals! (_type_) none 20) (compute-glow (_type_) float 21) ) + (:states + cavecrystal-active + cavecrystal-idle) ) ;; - Unknowns @@ -31993,6 +31998,8 @@ :size-assert #xb0 :heap-base #x40 :flag-assert #x14004000b0 + (:states + cavecrusher-idle) ) (deftype cavetrapdoor (process-drawable) @@ -32023,6 +32030,8 @@ :size-assert #xf0 :heap-base #x80 :flag-assert #x14008000f0 + (:states + caveflamepots-active) ) (deftype cavespatula (process-drawable) @@ -32033,6 +32042,8 @@ :size-assert #xb8 :heap-base #x50 :flag-assert #x14005000b8 + (:states + cavespatula-idle) ) (deftype cavespatulatwo (process-drawable) @@ -32043,6 +32054,8 @@ :size-assert #xb8 :heap-base #x50 :flag-assert #x14005000b8 + (:states + cavespatulatwo-idle) ) (deftype caveelevator (process-drawable) @@ -32054,8 +32067,8 @@ (orig-trans vector :inline :offset-assert 208) (sync sync-info :inline :offset-assert 224) (smush smush-control :inline :offset-assert 232) - (anim spool-anim 2 :offset-assert 264) - (wheel-ry-mat matrix :inline :offset-assert 272) + (anim int32 2 :offset-assert 264) + (wheel-ry-mat matrix :inline :offset 272) ) :method-count-assert 22 :size-assert #x150 @@ -32065,6 +32078,12 @@ (TODO-RENAME-20 (_type_) none 20) (TODO-RENAME-21 (_type_) float 21) ) + (:states + caveelevator-cycle-active + caveelevator-one-way-idle-start + caveelevator-one-way-travel-to-start + caveelevator-one-way-idle-end + caveelevator-one-way-travel-to-end) ) ;; - Functions @@ -32075,20 +32094,11 @@ ;; - Unknowns (define-extern *caveelevator-sg* skeleton-group) -(define-extern caveelevator-cycle-active (state caveelevator)) ;; unknown type -(define-extern caveelevator-one-way-idle-start (state caveelevator)) ;; unknown type -(define-extern caveelevator-one-way-travel-to-start (state caveelevator)) ;; unknown type -(define-extern caveelevator-one-way-idle-end (state caveelevator)) ;; unknown type -(define-extern caveelevator-one-way-travel-to-end (state caveelevator)) ;; unknown type (define-extern *cavespatulatwo-sg* skeleton-group) -(define-extern cavespatulatwo-idle (state cavespatulatwo)) ;; unknown type (define-extern *cavespatula-darkcave-sg* skeleton-group) (define-extern *cavespatula-sg* skeleton-group) -(define-extern cavespatula-idle (state cavespatula)) ;; unknown type -(define-extern caveflamepots-active (state caveflamepots)) ;; unknown type (define-extern *cavetrapdoor-sg* skeleton-group) (define-extern *cavecrusher-sg* skeleton-group) -(define-extern cavecrusher-idle (state cavecrusher)) ;; unknown type (define-extern ripple-for-cave-water ripple-wave-set) ;; unknown type (define-extern *maincavecam-sg* skeleton-group) @@ -33935,6 +33945,8 @@ :size-assert #xf8 :heap-base #x90 :flag-assert #x14009000f8 + (:states + pusher-idle) ) (deftype gorge-pusher (pusher-base) @@ -33944,6 +33956,8 @@ :size-assert #xb8 :heap-base #x50 :flag-assert #x14005000b8 + (:states + gorge-pusher-idle) ) (deftype dark-plant (process-drawable) @@ -33954,6 +33968,12 @@ :size-assert #xc4 :heap-base #x60 :flag-assert #x14006000c4 + (:states + dark-plant-gone + dark-plant-startup + dark-plant-idle + dark-plant-sprout + dark-plant-death) ) (deftype happy-plant (process-drawable) @@ -33964,6 +33984,10 @@ :size-assert #xb4 :heap-base #x50 :flag-assert #x14005000b4 + (:states + happy-plant-opened + happy-plant-init + happy-plant-opening) ) (deftype race-time (structure) @@ -33983,6 +34007,9 @@ :size-assert #xf5 :heap-base #x90 :flag-assert #x14009000f5 + (:states + rolling-start-whole + (rolling-start-break symbol)) ) (deftype gorge (process-drawable) @@ -34010,6 +34037,12 @@ :size-assert #x140 :heap-base #xd0 :flag-assert #x1400d00140 + (:states + gorge-start-idle + gorge-start-ready + gorge-start-racing + gorge-start-race-finished + gorge-start-race-aborted) ) (deftype gorge-finish (gorge) @@ -34019,6 +34052,8 @@ :size-assert #xfc :heap-base #x90 :flag-assert #x14009000fc + (:states + gorge-finish-idle) ) (deftype gorge-abort (gorge) @@ -34027,6 +34062,8 @@ :size-assert #xf8 :heap-base #x90 :flag-assert #x14009000f8 + (:states + gorge-abort-idle) ) (deftype rolling-water (water-anim) @@ -34065,31 +34102,12 @@ ;; - Unknowns (define-extern ripple-for-rolling-water object) ;; unknown type -(define-extern gorge-start-idle (state gorge-start)) ;; unknown type -(define-extern gorge-start-ready (state gorge-start)) ;; unknown type -(define-extern gorge-start-racing (state gorge-start)) ;; unknown type -(define-extern gorge-start-race-finished (state gorge-start)) ;; unknown type -(define-extern gorge-start-race-aborted (state gorge-start)) ;; unknown type -(define-extern gorge-finish-idle (state gorge-finish)) ;; unknown type -(define-extern gorge-abort-idle (state gorge-abort)) ;; unknown type (define-extern *rolling-start-whole-sg* skeleton-group) (define-extern *rolling-start-broken-sg* skeleton-group) -(define-extern rolling-start-whole (state rolling-start)) ;; unknown type -(define-extern rolling-start-break (state rolling-start)) ;; unknown type (define-extern *happy-plant-sg* skeleton-group) -(define-extern happy-plant-opened (state happy-plant)) ;; unknown type -(define-extern happy-plant-init (state happy-plant)) ;; unknown type -(define-extern happy-plant-opening (state happy-plant)) ;; unknown type (define-extern *rollingcam-sg* skeleton-group) (define-extern *dark-plant-sg* skeleton-group) -(define-extern dark-plant-gone (state dark-plant)) ;; unknown type -(define-extern dark-plant-startup (state dark-plant)) ;; unknown type -(define-extern dark-plant-idle (state dark-plant)) ;; unknown type -(define-extern dark-plant-sprout (state dark-plant)) ;; unknown type -(define-extern dark-plant-death (state dark-plant)) ;; unknown type (define-extern *pusher-sg* skeleton-group) -(define-extern gorge-pusher-idle (state gorge-pusher)) ;; unknown type -(define-extern pusher-idle (state pusher)) ;; unknown type ;; ---------------------- @@ -36091,7 +36109,7 @@ ;; - Functions (define-extern energyarm-init-by-other (function vector float none :behavior energyarm)) -(define-extern energyhub-set-lava-height (function float :behavior energyhub)) +(define-extern energyhub-set-lava-height (function float float :behavior energyhub)) (define-extern energyhub-trans (function quaternion :behavior energyhub)) (define-extern energyarm-init (function energyarm sparticle-launch-control)) (define-extern energyball-init-by-other (function vector none :behavior energyball)) @@ -38100,8 +38118,6 @@ ;; - Unknowns -(define-extern target-title-play (state target)) ;; unknown type -(define-extern target-title-wait (state target)) ;; unknown type (define-extern *logo-japan-sg* skeleton-group) (define-extern *logo-sg* skeleton-group) (define-extern *ndi-sg* skeleton-group) diff --git a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc index 5adb4c4da..9345c6d0a 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -306,8 +306,6 @@ // all unchecked and in level DGO code "(anon-function 21 plant-boss)", // CFG "target-flut-falling-anim-trans", // CFG failure - "(anon-function 6 title-obs)", - "(anon-function 43 maincave-obs)", "(anon-function 2 target-tube)", "(anon-function 5 orbit-plat)", // CFG "(anon-function 2 ogreboss)" diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index fc5cd0dc7..654e33341 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -1210,6 +1210,17 @@ "rolling-obs": [ ["L234", "vector"], + ["L238", "vector"], + ["L239", "vector"], + ["L240", "vector"], + ["L241", "vector"], + ["L242", "vector"], + ["L243", "vector"], + ["L244", "vector"], + ["L245", "vector"], + ["L246", "vector"], + ["L247", "vector"], + ["L248", "vector"], ["L257", "vector"] ], diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index 3c00c6088..8c9e844ab 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -2154,7 +2154,8 @@ ], "(code gorge-start-race-aborted)": [ - [16, "event-message-block"] + [16, "event-message-block"], + [96, "font-context"] ], "(enter gorge-start-racing)": [ @@ -6012,5 +6013,9 @@ [16, "event-message-block"] ], + "(code gorge-start-idle)": [ + [16, "event-message-block"] + ], + "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 d04d57e41..fb40c9066 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -4598,8 +4598,7 @@ ], "(code pov-camera-playing maincavecam)": [ - [47, "gp", "handle"], - [50, "gp", "handle"] + [[40, 54], "gp", "handle"] ], "(code cavecrusher-idle)": [ @@ -4621,7 +4620,15 @@ ], "(method 11 caveflamepots)": [ - [290, "s4", "collide-shape-prim-group"] + ["_stack_", 16, "res-tag"], + ["_stack_", 32, "res-tag"], + ["_stack_", 48, "res-tag"], + [258, "s4", "vector"], + [281, "s4", "collide-shape-prim-group"], + [290, "s4", "collide-shape-prim-group"], + [311, "v0", "(pointer float)"], + [342, "v0", "(pointer float)"], + [372, "v0", "(pointer float)"] ], "(code pov-camera-playing sunkencam)": [ @@ -4686,11 +4693,9 @@ [76, "gp", "handle"], [84, "gp", "handle"], [145, "gp", "handle"], - [168, "v1", "handle"], - [171, "v1", "handle"], + [[167, 175], "v1", "handle"], [179, "gp", "handle"], - [185, "s5", "handle"], - [188, "s5", "handle"] + [[185, 192], "s5", "handle"] ], "(trans spike-idle)": [ @@ -4839,7 +4844,9 @@ ], "(code target-title)": [ - [20, "a0", "handle"], + // [[19, 22], "v1", "handle"], + [[57, 65], "v1", "handle"], + [[69, 77], "v1", "handle"], [214, "s5", "handle"] ], @@ -5456,10 +5463,6 @@ [28, "v1", "process-drawable"] ], - "(trans energyhub-idle)": [ - [34, "v1", "energyarm"] - ], - "(post idle citb-sage)": [ [3, "t9", "(function none :behavior citb-sage)"] ], @@ -7370,5 +7373,25 @@ [[108, 116], "v1", "handle"] ], + "(code hud-collecting)": [ + [[2, 10], "v1", "handle"], + [13, "s4", "hud"], + [25, "s4", "hud"], + [27, "s4", "hud"] + ], + + "(code caveelevator-one-way-idle-start)": [ + [10, "v1", "art-joint-anim"] + ], + + "(method 11 caveelevator)": [ + ["_stack_", 16, "res-tag"], + [109, "v0", "(pointer float)"] + ], + + "(trans energyhub-idle)": [ + [31, "s4", "energyarm"] + ], + "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 e2ec92de2..e85211bf9 100644 --- a/decompiler/config/jak1_ntsc_black_label/var_names.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/var_names.jsonc @@ -3916,5 +3916,25 @@ } }, + "(code happy-plant-opening)": { + "vars": { + "gp-2": ["gp-2", "handle"], + "v1-40": ["v1-40", "handle"], + "s5-3": ["s5-3", "handle"] + } + }, + + "(code target-title)": { + "vars": { + "gp-0": ["gp-0", "handle"] + } + }, + + "(code hud-collecting)": { + "vars": { + "v1-0": ["v1-0", "handle"] + } + }, + "aaaaaaaaaaaaaaaaaaaaaaa": {} } diff --git a/goal_src/build/all_files.gc b/goal_src/build/all_files.gc index 45861e74a..3024a5e64 100644 --- a/goal_src/build/all_files.gc +++ b/goal_src/build/all_files.gc @@ -439,6 +439,7 @@ "goal_src/levels/swamp/swamp-part.gc" "goal_src/levels/swamp/billy.gc" "goal_src/levels/maincave/cavecrystal-light.gc" + "goal_src/levels/darkcave/darkcave-obs.gc" "goal_src/levels/maincave/maincave-obs.gc" "goal_src/levels/maincave/maincave-part.gc" "goal_src/levels/maincave/spiderwebs.gc" @@ -450,7 +451,6 @@ "goal_src/levels/maincave/mother-spider.gc" "goal_src/levels/maincave/gnawer.gc" "goal_src/levels/maincave/driller-lurker.gc" - "goal_src/levels/darkcave/darkcave-obs.gc" "goal_src/levels/sunken/sunken-part.gc" "goal_src/levels/sunken/sunken-part2.gc" "goal_src/levels/sunken/sunken-part3.gc" diff --git a/goal_src/engine/target/target-h.gc b/goal_src/engine/target/target-h.gc index 3fe95866a..dba9077c7 100644 --- a/goal_src/engine/target/target-h.gc +++ b/goal_src/engine/target/target-h.gc @@ -104,6 +104,8 @@ (target-racing-hit handle attack-info) (target-racing-jump float float symbol) target-title + target-title-play + target-title-wait (target-warp-in vector vector) ) ) diff --git a/goal_src/engine/ui/hud-classes.gc b/goal_src/engine/ui/hud-classes.gc index e1b70b2e9..be771c42b 100644 --- a/goal_src/engine/ui/hud-classes.gc +++ b/goal_src/engine/ui/hud-classes.gc @@ -7,166 +7,150 @@ ;; DECOMP BEGINS -(set! - (-> *part-group-id-table* 75) - (new 'static 'sparticle-launch-group - :length 11 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag screen-space) - :name "group-part-hud-pickup" - :launcher - (new 'static 'inline-array sparticle-group-item 11 - (sp-item 303 :flags (launch-asap) :binding 304) - (sp-item 304 :flags (start-dead launch-asap) :binding 305) - (sp-item 305 :flags (start-dead launch-asap) :binding 306) - (sp-item 306 :flags (start-dead launch-asap) :binding 307) - (sp-item 306 :flags (start-dead launch-asap) :binding 307) - (sp-item 306 :flags (start-dead launch-asap) :binding 307) - (sp-item 306 :flags (start-dead launch-asap) :binding 307) - (sp-item 307 :fade-after (meters 40.0) :flags (start-dead)) - (sp-item 307 :fade-after (meters 40.0) :flags (start-dead)) - (sp-item 307 :fade-after (meters 40.0) :flags (start-dead)) - (sp-item 307 :fade-after (meters 40.0) :flags (start-dead)) - ) - :bounds (new 'static 'sphere :w 8192.0) - ) - ) +(set! (-> *part-group-id-table* 75) (new 'static 'sparticle-launch-group + :length 11 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-part-hud-pickup" + :launcher + (new 'static 'inline-array sparticle-group-item 11 + (sp-item 303 :flags (launch-asap) :binding 304) + (sp-item 304 :flags (start-dead launch-asap) :binding 305) + (sp-item 305 :flags (start-dead launch-asap) :binding 306) + (sp-item 306 :flags (start-dead launch-asap) :binding 307) + (sp-item 306 :flags (start-dead launch-asap) :binding 307) + (sp-item 306 :flags (start-dead launch-asap) :binding 307) + (sp-item 306 :flags (start-dead launch-asap) :binding 307) + (sp-item 307 :fade-after (meters 40.0) :flags (start-dead)) + (sp-item 307 :fade-after (meters 40.0) :flags (start-dead)) + (sp-item 307 :fade-after (meters 40.0) :flags (start-dead)) + (sp-item 307 :fade-after (meters 40.0) :flags (start-dead)) + ) + :bounds (new 'static 'sphere :w 8192.0) + ) + ) -(set! - (-> *part-id-table* 303) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 10 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 0.5)) - (sp-copy-from-other spt-scale-y -4) - (sp-rnd-flt spt-r 32.0 92.0 1.0) - (sp-rnd-flt spt-g 128.0 128.0 1.0) - (sp-flt spt-a 0.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit3 bit9) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 303) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 10 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.5)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 32.0 92.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-a 0.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit3 bit9) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 304) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 18 - (sp-tex spt-texture (new 'static 'texture-id :page #x2)) - (sp-flt spt-num 1.0) - (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) - (sp-flt spt-z 122.88) - (sp-flt spt-scale-x (meters 2.5)) - (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 92.0 1.0) - (sp-rnd-flt spt-g 128.0 128.0 1.0) - (sp-flt spt-a 24.0) - (sp-rnd-flt spt-omega 0.0 65536.0 1.0) - (sp-rnd-flt spt-vel-x (meters 0.026666667) (meters 0.026666667) 1.0) - (sp-flt spt-vel-y (meters 0.0014814815)) - (sp-flt spt-vel-z (meters 0.0)) - (sp-flt spt-rotvel-z (degrees 0.2)) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit7 bit9) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 304) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) + (sp-flt spt-z 122.88) + (sp-flt spt-scale-x (meters 2.5)) + (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 92.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-a 24.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-flt spt-vel-y (meters 0.0014814815)) + (sp-flt spt-vel-z (meters 0.0)) + (sp-flt spt-rotvel-z (degrees 0.2)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit7 bit9) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 305) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 18 - (sp-tex spt-texture (new 'static 'texture-id :page #x2)) - (sp-flt spt-num 3.0) - (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) - (sp-flt spt-z 266.24) - (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.4) 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 92.0 1.0) - (sp-rnd-flt spt-g 128.0 128.0 1.0) - (sp-flt spt-a 24.0) - (sp-rnd-flt spt-omega 0.0 65536.0 1.0) - (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.017777778) 1.0) - (sp-flt spt-vel-y (meters 0.0)) - (sp-flt spt-vel-z (meters 0.0)) - (sp-rnd-int-flt spt-rotvel-z (degrees -0.4) 1 145.63556) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit3 bit7 bit9) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 305) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 3.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) + (sp-flt spt-z 266.24) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.4) 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 92.0 1.0) + (sp-rnd-flt spt-g 128.0 128.0 1.0) + (sp-flt spt-a 24.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.017777778) (meters 0.017777778) 1.0) + (sp-flt spt-vel-y (meters 0.0)) + (sp-flt spt-vel-z (meters 0.0)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.4) 1 145.63556) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit3 bit7 bit9) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 306) - (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 1.0) - (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) - (sp-flt spt-z 491.52) - (sp-flt spt-scale-x (meters 0.4)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 255.0) - (sp-flt spt-a 24.0) - (sp-rnd-flt spt-omega 0.0 65536.0 1.0) - (sp-rnd-flt spt-vel-x (meters 0.053333335) (meters 0.053333335) 1.0) - (sp-flt spt-vel-y (meters 0.0)) - (sp-flt spt-vel-z (meters 0.0)) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit3 bit7 bit9) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 306) (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 1.0) + (sp-rnd-flt spt-y (meters 0.0) (meters 16.0) 1.0) + (sp-flt spt-z 491.52) + (sp-flt spt-scale-x (meters 0.4)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 255.0) + (sp-flt spt-a 24.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-rnd-flt spt-vel-x (meters 0.053333335) (meters 0.053333335) 1.0) + (sp-flt spt-vel-y (meters 0.0)) + (sp-flt spt-vel-z (meters 0.0)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit3 bit7 bit9) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 307) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 17 - (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) - (sp-flt spt-num 0.25) - (sp-flt spt-scale-x (meters 0.35)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 255.0) - (sp-flt spt-g 255.0) - (sp-flt spt-b 0.0) - (sp-flt spt-a 96.0) - (sp-flt spt-scalevel-x (meters -0.0012500001)) - (sp-copy-from-other spt-scalevel-y -4) - (sp-flt spt-fade-r -2.125) - (sp-flt spt-accel-y -0.08192) - (sp-int-plain-rnd spt-timer 30 239 1) - (sp-cpuinfo-flags bit2 bit9) - (sp-int spt-next-time 120) - (sp-launcher-by-id spt-next-launcher 308) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 307) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 0.25) + (sp-flt spt-scale-x (meters 0.35)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 96.0) + (sp-flt spt-scalevel-x (meters -0.0012500001)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-r -2.125) + (sp-flt spt-accel-y -0.08192) + (sp-int-plain-rnd spt-timer 30 239 1) + (sp-cpuinfo-flags bit2 bit9) + (sp-int spt-next-time 120) + (sp-launcher-by-id spt-next-launcher 308) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 308) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 2 - (sp-flt spt-fade-r 0.0) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 308) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-r 0.0) (sp-end)) + ) + ) (deftype hud-pickups (hud) () @@ -179,79 +163,70 @@ (defmethod dummy-15 hud-pickups ((obj hud-pickups)) (let ((t9-0 (method-of-type hud dummy-15))) - (t9-0 obj) - ) + (t9-0 obj) + ) (let* ((s5-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) (gp-0 (-> s5-0 base)) ) - (let ((s4-0 draw-string-xy)) - (format (clear *temp-string*) "~D" (-> obj value)) - (s4-0 - *temp-string* - s5-0 - (+ (-> obj text-x) (* (-> obj x-sgn) (-> obj offset))) - (/ - (* - (+ (-> obj text-y) (* (-> obj y-sgn) (-> obj offset)) (-> obj y-offset)) - (the int (-> *video-parms* relative-y-scale)) - ) - 2 + (let ((s4-0 draw-string-xy)) + (format (clear *temp-string*) "~D" (-> obj value)) + (s4-0 + *temp-string* + s5-0 + (+ (-> obj text-x) (* (-> obj x-sgn) (-> obj offset))) + (/ (* (+ (-> obj text-y) (* (-> obj y-sgn) (-> obj offset)) (-> obj y-offset)) + (the int (-> *video-parms* relative-y-scale)) + ) + 2 + ) + (font-color bright-green) + (font-flags shadow kerning large) + ) + ) + (let ((a3-7 (-> s5-0 base))) + (let ((v1-8 (the-as object (-> s5-0 base)))) + (set! (-> (the-as (pointer int64) v1-8)) #x20000000) + (set! (-> (the-as dma-packet v1-8) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-8) vif1) (new 'static 'vif-tag)) + (set! (-> s5-0 base) (&+ (the-as pointer v1-8) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-0 + (the-as (pointer dma-tag) a3-7) + ) ) - (font-color bright-green) - (font-flags shadow kerning large) - ) ) - (let ((a3-7 (-> s5-0 base))) - (let ((v1-8 (the-as object (-> s5-0 base)))) - (set! (-> (the-as (pointer int64) v1-8)) #x20000000) - (set! (-> (the-as dma-packet v1-8) vif0) (new 'static 'vif-tag)) - (set! (-> (the-as dma-packet v1-8) vif1) (new 'static 'vif-tag)) - (set! (-> s5-0 base) (&+ (the-as pointer v1-8) 16)) - ) - (dma-bucket-insert-tag - (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) - gp-0 - (the-as (pointer dma-tag) a3-7) - ) - ) - ) 0 (none) ) (defmethod TODO-RENAME-19 hud-pickups ((obj hud-pickups)) (if *target* - (TODO-RENAME-16 - obj - (the int (+ 0.5 (-> *target* fact-info-target eco-pill))) - 0 - ) - ) + (TODO-RENAME-16 obj (the int (+ 0.5 (-> *target* fact-info-target eco-pill))) 0) + ) 0 (none) ) (defmethod init-particles! hud-pickups ((obj hud-pickups) (arg0 int)) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s5-0 (-> obj nb-of-particles))) - (set! (-> obj particles s5-0) (new 'static 'hud-particle)) - (set! - (-> obj particles s5-0 part) - (create-launch-control (-> *part-group-id-table* 75) obj) - ) - (set! (-> obj particles s5-0 init-pos x) 110.0) - (set! (-> obj particles s5-0 init-pos y) 55.0) - (set! (-> obj particles s5-0 init-pos z) 1.0) - (set! (-> obj particles s5-0 part matrix) -1) + (let ((s5-0 (-> obj nb-of-particles))) + (set! (-> obj particles s5-0) (new 'static 'hud-particle)) + (set! (-> obj particles s5-0 part) (create-launch-control (-> *part-group-id-table* 75) obj)) + (set! (-> obj particles s5-0 init-pos x) 110.0) + (set! (-> obj particles s5-0 init-pos y) 55.0) + (set! (-> obj particles s5-0 init-pos z) 1.0) + (set! (-> obj particles s5-0 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (dotimes (s5-1 (-> obj nb-of-particles)) - (if (= (-> obj particles s5-1 part matrix) -1) - (set! (-> obj particles s5-1 part matrix) (sprite-allocate-user-hvdf)) + (if (= (-> obj particles s5-1 part matrix) -1) + (set! (-> obj particles s5-1 part matrix) (sprite-allocate-user-hvdf)) + ) ) - ) (set! (-> obj text-x) 118) (set! (-> obj text-y) 45) (set! (-> obj x-sgn) -1) @@ -261,116 +236,101 @@ (none) ) -(set! - (-> *part-group-id-table* 76) - (new 'static 'sparticle-launch-group - :length 1 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag screen-space) - :name "group-part-hud-health-1" - :launcher - (new 'static 'inline-array sparticle-group-item 1 - (sp-item 309 :flags (launch-asap)) - ) - :bounds (new 'static 'sphere :w 409600.0) - ) - ) +(set! (-> *part-group-id-table* 76) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-part-hud-health-1" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 309 :flags (launch-asap))) + :bounds (new 'static 'sphere :w 409600.0) + ) + ) -(set! - (-> *part-group-id-table* 77) - (new 'static 'sparticle-launch-group - :length 1 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag screen-space) - :name "group-part-hud-health-2" - :launcher - (new 'static 'inline-array sparticle-group-item 1 - (sp-item 310 :flags (launch-asap)) - ) - :bounds (new 'static 'sphere :w 409600.0) - ) - ) +(set! (-> *part-group-id-table* 77) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-part-hud-health-2" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 310 :flags (launch-asap))) + :bounds (new 'static 'sphere :w 409600.0) + ) + ) -(set! - (-> *part-group-id-table* 78) - (new 'static 'sparticle-launch-group - :length 1 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag screen-space) - :name "group-part-hud-health-3" - :launcher - (new 'static 'inline-array sparticle-group-item 1 - (sp-item 311 :flags (launch-asap)) - ) - :bounds (new 'static 'sphere :w 409600.0) - ) - ) +(set! (-> *part-group-id-table* 78) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-part-hud-health-3" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 311 :flags (launch-asap))) + :bounds (new 'static 'sphere :w 409600.0) + ) + ) -(set! - (-> *part-id-table* 309) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #x2d :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 1.7)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-func spt-func 'part-hud-health-01-func) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 309) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x2d :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 1.7)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-func spt-func 'part-hud-health-01-func) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 310) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 1.7)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-func spt-func 'part-hud-health-03-func) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 310) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x2e :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 1.7)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-func spt-func 'part-hud-health-03-func) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 311) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #x2f :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 1.7)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-func spt-func 'part-hud-health-02-func) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 311) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x2f :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 1.7)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-func spt-func 'part-hud-health-02-func) + (sp-end) + ) + ) + ) (deftype hud-health (hud) ((scale float :offset-assert 280) @@ -384,57 +344,57 @@ (defun part-hud-health-01-func ((arg0 basic) (arg1 basic) (arg2 hud-particle)) (let ((f0-0 (-> *hud-parts* health 0 scale))) - (set! (-> arg2 init-pos x) f0-0) - (set! (-> arg2 pos x) f0-0) - ) + (set! (-> arg2 init-pos x) f0-0) + (set! (-> arg2 pos x) f0-0) + ) (cond - ((and *target* (< (-> *target* fact-info-target health) 1.0)) - (set! (-> arg2 prev-pos x) 32.0) - ) - (else - (let ((f0-3 128.0)) - (when (and *target* (= (-> *target* fact-info-target health) 1.0)) - (let ((v1-16 (logand (-> *display* integral-frame-counter) 7))) - (set! f0-3 (if (zero? (logand (-> *display* integral-frame-counter) 8)) - (+ 128.0 (* 18.142857 (the float v1-16))) - (- 255.0 (* 18.142857 (the float v1-16))) - ) - ) - ) - ) - (set! (-> arg2 pos y) f0-3) - (set! (-> arg2 pos z) f0-3) - (set! (-> arg2 pos w) f0-3) + ((and *target* (< (-> *target* fact-info-target health) 1.0)) + (set! (-> arg2 prev-pos x) 32.0) ) - (set! (-> arg2 prev-pos x) 128.0) + (else + (let ((f0-3 128.0)) + (when (and *target* (= (-> *target* fact-info-target health) 1.0)) + (let ((v1-16 (logand (-> *display* integral-frame-counter) 7))) + (set! f0-3 (if (zero? (logand (-> *display* integral-frame-counter) 8)) + (+ 128.0 (* 18.142857 (the float v1-16))) + (- 255.0 (* 18.142857 (the float v1-16))) + ) + ) + ) + ) + (set! (-> arg2 pos y) f0-3) + (set! (-> arg2 pos z) f0-3) + (set! (-> arg2 pos w) f0-3) + ) + (set! (-> arg2 prev-pos x) 128.0) + ) ) - ) 0 (none) ) (defun part-hud-health-02-func ((arg0 basic) (arg1 basic) (arg2 hud-particle)) (let ((f0-0 (-> *hud-parts* health 0 scale))) - (set! (-> arg2 init-pos x) f0-0) - (set! (-> arg2 pos x) f0-0) - ) + (set! (-> arg2 init-pos x) f0-0) + (set! (-> arg2 pos x) f0-0) + ) (if (and *target* (< (-> *target* fact-info-target health) 2.0)) - (set! (-> arg2 prev-pos x) 32.0) - (set! (-> arg2 prev-pos x) 128.0) - ) + (set! (-> arg2 prev-pos x) 32.0) + (set! (-> arg2 prev-pos x) 128.0) + ) 0 (none) ) (defun part-hud-health-03-func ((arg0 basic) (arg1 basic) (arg2 hud-particle)) (let ((f0-0 (-> *hud-parts* health 0 scale))) - (set! (-> arg2 init-pos x) f0-0) - (set! (-> arg2 pos x) f0-0) - ) + (set! (-> arg2 init-pos x) f0-0) + (set! (-> arg2 pos x) f0-0) + ) (if (and *target* (< (-> *target* fact-info-target health) 3.0)) - (set! (-> arg2 prev-pos x) 32.0) - (set! (-> arg2 prev-pos x) 128.0) - ) + (set! (-> arg2 prev-pos x) 32.0) + (set! (-> arg2 prev-pos x) 128.0) + ) 0 (none) ) @@ -447,64 +407,55 @@ (defmethod TODO-RENAME-19 hud-health ((obj hud-health)) (if *target* - (TODO-RENAME-16 - obj - (the int (-> *target* fact-info-target health)) - (the-as int (-> *target* fact-info-target health-pickup-time)) - ) - ) + (TODO-RENAME-16 + obj + (the int (-> *target* fact-info-target health)) + (the-as int (-> *target* fact-info-target health-pickup-time)) + ) + ) 0 (none) ) (defmethod init-particles! hud-health ((obj hud-health) (arg0 int)) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s5-0 (-> obj nb-of-particles))) - (set! (-> obj particles s5-0) (new 'static 'hud-particle)) - (set! - (-> obj particles s5-0 part) - (create-launch-control (-> *part-group-id-table* 76) obj) - ) - (set! (-> obj particles s5-0 init-pos x) 61.0) - (set! (-> obj particles s5-0 init-pos y) 55.0) - (set! (-> obj particles s5-0 init-pos z) 5.0) - (set! (-> obj particles s5-0 part matrix) -1) + (let ((s5-0 (-> obj nb-of-particles))) + (set! (-> obj particles s5-0) (new 'static 'hud-particle)) + (set! (-> obj particles s5-0 part) (create-launch-control (-> *part-group-id-table* 76) obj)) + (set! (-> obj particles s5-0 init-pos x) 61.0) + (set! (-> obj particles s5-0 init-pos y) 55.0) + (set! (-> obj particles s5-0 init-pos z) 5.0) + (set! (-> obj particles s5-0 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s5-1 (-> obj nb-of-particles))) - (set! (-> obj particles s5-1) (new 'static 'hud-particle)) - (set! - (-> obj particles s5-1 part) - (create-launch-control (-> *part-group-id-table* 77) obj) - ) - (set! (-> obj particles s5-1 init-pos x) 98.0) - (set! (-> obj particles s5-1 init-pos y) 55.0) - (set! (-> obj particles s5-1 init-pos z) 5.0) - (set! (-> obj particles s5-1 part matrix) -1) + (let ((s5-1 (-> obj nb-of-particles))) + (set! (-> obj particles s5-1) (new 'static 'hud-particle)) + (set! (-> obj particles s5-1 part) (create-launch-control (-> *part-group-id-table* 77) obj)) + (set! (-> obj particles s5-1 init-pos x) 98.0) + (set! (-> obj particles s5-1 init-pos y) 55.0) + (set! (-> obj particles s5-1 init-pos z) 5.0) + (set! (-> obj particles s5-1 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s5-2 (-> obj nb-of-particles))) - (set! (-> obj particles s5-2) (new 'static 'hud-particle)) - (set! - (-> obj particles s5-2 part) - (create-launch-control (-> *part-group-id-table* 78) obj) - ) - (set! (-> obj particles s5-2 init-pos x) 70.0) - (set! (-> obj particles s5-2 init-pos y) 76.0) - (set! (-> obj particles s5-2 init-pos z) 5.0) - (set! (-> obj particles s5-2 part matrix) -1) + (let ((s5-2 (-> obj nb-of-particles))) + (set! (-> obj particles s5-2) (new 'static 'hud-particle)) + (set! (-> obj particles s5-2 part) (create-launch-control (-> *part-group-id-table* 78) obj)) + (set! (-> obj particles s5-2 init-pos x) 70.0) + (set! (-> obj particles s5-2 init-pos y) 76.0) + (set! (-> obj particles s5-2 init-pos z) 5.0) + (set! (-> obj particles s5-2 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (dotimes (s5-3 (-> obj nb-of-particles)) - (if (= (-> obj particles s5-3 part matrix) -1) - (set! (-> obj particles s5-3 part matrix) (sprite-allocate-user-hvdf)) + (if (= (-> obj particles s5-3 part matrix) -1) + (set! (-> obj particles s5-3 part matrix) (sprite-allocate-user-hvdf)) + ) ) - ) (animate! obj (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal)) (set! (-> obj x-sgn) -1) (set! (-> obj y-sgn) -1) @@ -515,64 +466,59 @@ (defmethod animate! hud-health ((obj hud-health) (arg0 symbol) (arg1 symbol)) (cond - (arg0 - (set! (-> obj particles 0 init-pos x) 65.0) - (set! (-> obj particles 0 init-pos y) 55.0) - (set! (-> obj particles 1 init-pos x) 98.0) - (set! (-> obj particles 1 init-pos y) 55.0) - (set! (-> obj particles 2 init-pos x) 73.0) - (set! (-> obj particles 2 init-pos y) 80.0) - (set! (-> obj scale) 6144.0) + (arg0 + (set! (-> obj particles 0 init-pos x) 65.0) + (set! (-> obj particles 0 init-pos y) 55.0) + (set! (-> obj particles 1 init-pos x) 98.0) + (set! (-> obj particles 1 init-pos y) 55.0) + (set! (-> obj particles 2 init-pos x) 73.0) + (set! (-> obj particles 2 init-pos y) 80.0) + (set! (-> obj scale) 6144.0) + ) + (else + (set! (-> obj particles 0 init-pos x) 61.0) + (set! (-> obj particles 0 init-pos y) 55.0) + (set! (-> obj particles 1 init-pos x) 98.0) + (set! (-> obj particles 1 init-pos y) 55.0) + (set! (-> obj particles 2 init-pos x) 70.0) + (set! (-> obj particles 2 init-pos y) 76.0) + (set! (-> obj scale) 6963.2) + ) ) - (else - (set! (-> obj particles 0 init-pos x) 61.0) - (set! (-> obj particles 0 init-pos y) 55.0) - (set! (-> obj particles 1 init-pos x) 98.0) - (set! (-> obj particles 1 init-pos y) 55.0) - (set! (-> obj particles 2 init-pos x) 70.0) - (set! (-> obj particles 2 init-pos y) 76.0) - (set! (-> obj scale) 6963.2) - ) - ) 0 (none) ) -(set! - (-> *part-group-id-table* 705) - (new 'static 'sparticle-launch-group - :length 1 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag screen-space) - :name "group-part-hud-orb-all" - :launcher - (new 'static 'inline-array sparticle-group-item 1 - (sp-item 2964 :flags (launch-asap)) - ) - :bounds (new 'static 'sphere :w 409600.0) - ) - ) +(set! (-> *part-group-id-table* 705) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-part-hud-orb-all" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 2964 :flags (launch-asap))) + :bounds (new 'static 'sphere :w 409600.0) + ) + ) -(set! - (-> *part-id-table* 2964) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 11 - (sp-tex spt-texture (new 'static 'texture-id :index #x2c :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 2.4)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 2964) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 11 + (sp-tex spt-texture (new 'static 'texture-id :index #x2c :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.4)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) (deftype hud-money-all (hud) ((x-scale float :offset-assert 280) @@ -591,231 +537,170 @@ (defmethod dummy-15 hud-money-all ((obj hud-money-all)) (let ((t9-0 (method-of-type hud dummy-15))) - (t9-0 obj) - ) + (t9-0 obj) + ) 0 (let ((s5-0 0)) - (when (>= (-> obj level-index) 0) - (let - ((s5-1 - (new - 'stack - 'font-context - *font-default-matrix* - (+ (* (-> obj x-sgn) (-> obj offset)) -60 (-> obj text-x)) - (+ - (/ - (* - (+ - (-> obj text-y) - (* (-> obj y-sgn) (-> obj offset)) - (-> obj y-offset) + (when (>= (-> obj level-index) 0) + (let ((s5-1 + (new + 'stack + 'font-context + *font-default-matrix* + (+ (* (-> obj x-sgn) (-> obj offset)) -60 (-> obj text-x)) + (+ (/ (* (+ (-> obj text-y) (* (-> obj y-sgn) (-> obj offset)) (-> obj y-offset)) + (the int (-> *video-parms* relative-y-scale)) + ) + 2 + ) + -17 + ) + 0.0 + (font-color orange-red) + (font-flags shadow kerning) + ) + ) ) - (the int (-> *video-parms* relative-y-scale)) + (let ((v1-12 s5-1)) + (set! (-> v1-12 width) (the float 228)) + ) + (let ((v1-13 s5-1)) + (set! (-> v1-13 height) (the float 45)) + ) + (let ((v1-14 s5-1)) + (set! (-> v1-14 scale) 0.6) + ) + (set! (-> s5-1 flags) (font-flags shadow kerning middle left large)) + (print-game-text + (lookup-text! *common-text* (-> *level-task-data* (-> obj level-index) level-name-id) #f) + s5-1 + #f + 128 + 18 + ) + ) + (set! s5-0 13) + ) + (let* ((s1-0 50) + (s3-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) + (s4-1 (-> s3-0 base)) ) - 2 + (let ((s2-0 draw-string-xy)) + (format (clear *temp-string*) "~D/~D" (-> obj total-orbs) (-> obj total-orbs)) + (s2-0 + *temp-string* + s3-0 + (+ (-> obj text-x) (* (-> obj x-sgn) (-> obj offset)) s1-0) + (+ (/ (* (+ (-> obj text-y) (* (-> obj y-sgn) (-> obj offset)) (-> obj y-offset)) + (the int (-> *video-parms* relative-y-scale)) + ) + 2 + ) + s5-0 + ) + (font-color dark-yellow) + (font-flags shadow kerning middle large) ) - -17 - ) - 0.0 - (font-color orange-red) - (font-flags shadow kerning) ) - ) - ) - (let ((v1-12 s5-1)) - (set! (-> v1-12 width) (the float 228)) - ) - (let ((v1-13 s5-1)) - (set! (-> v1-13 height) (the float 45)) - ) - (let ((v1-14 s5-1)) - (set! (-> v1-14 scale) 0.6) - ) - (set! (-> s5-1 flags) (font-flags shadow kerning middle left large)) - (print-game-text - (lookup-text! - *common-text* - (-> *level-task-data* (-> obj level-index) level-name-id) - #f - ) - s5-1 - #f - 128 - 18 - ) - ) - (set! s5-0 13) - ) - (let* ((s1-0 50) - (s3-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) - (s4-1 (-> s3-0 base)) + (let ((a3-12 (-> s3-0 base))) + (let ((v1-32 (the-as dma-packet (-> s3-0 base)))) + (set! (-> v1-32 dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> v1-32 vif0) (new 'static 'vif-tag)) + (set! (-> v1-32 vif1) (new 'static 'vif-tag)) + (set! (-> s3-0 base) (&+ (the-as pointer v1-32) 16)) ) - (let ((s2-0 draw-string-xy)) - (format - (clear *temp-string*) - "~D/~D" - (-> obj total-orbs) - (-> obj total-orbs) - ) - (s2-0 - *temp-string* - s3-0 - (+ (-> obj text-x) (* (-> obj x-sgn) (-> obj offset)) s1-0) - (+ - (/ - (* - (+ - (-> obj text-y) - (* (-> obj y-sgn) (-> obj offset)) - (-> obj y-offset) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + s4-1 + (the-as (pointer dma-tag) a3-12) ) - (the int (-> *video-parms* relative-y-scale)) - ) - 2 ) - s5-0 - ) - (font-color dark-yellow) - (font-flags shadow kerning middle large) ) - ) - (let ((a3-12 (-> s3-0 base))) - (let ((v1-32 (the-as dma-packet (-> s3-0 base)))) - (set! (-> v1-32 dma) (new 'static 'dma-tag :id (dma-tag-id next))) - (set! (-> v1-32 vif0) (new 'static 'vif-tag)) - (set! (-> v1-32 vif1) (new 'static 'vif-tag)) - (set! (-> s3-0 base) (&+ (the-as pointer v1-32) 16)) - ) - (dma-bucket-insert-tag - (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) - s4-1 - (the-as (pointer dma-tag) a3-12) - ) - ) ) - ) 0 (none) ) (defmethod TODO-RENAME-19 hud-money-all ((obj hud-money-all)) (when *target* - (hide-bottom-hud) - (when (!= *master-mode* 'pause) - (when (and (!= (-> obj icons 0) 0) (-> obj icons 0 icon)) - (set! (-> obj icons 0 scale-x) (-> obj x-scale)) - (set! (-> obj icons 0 scale-y) (-> obj y-scale)) - (set! - (-> obj icons 0 icon-y) - (* (-> obj y-pos) (the int (-> *video-parms* relative-y-scale))) + (hide-bottom-hud) + (when (!= *master-mode* 'pause) + (when (and (!= (-> obj icons 0) 0) (-> obj icons 0 icon)) + (set! (-> obj icons 0 scale-x) (-> obj x-scale)) + (set! (-> obj icons 0 scale-y) (-> obj y-scale)) + (set! (-> obj icons 0 icon-y) (* (-> obj y-pos) (the int (-> *video-parms* relative-y-scale)))) + (let ((a0-6 (-> obj icons 0 icon 0 root))) + (set-yaw-angle-clear-roll-pitch! + a0-6 + (- (y-angle a0-6) (* 182.04445 (* 4.0 (-> *display* time-adjust-ratio)))) + ) + ) + ) ) - (let ((a0-6 (-> obj icons 0 icon 0 root))) - (set-yaw-angle-clear-roll-pitch! - a0-6 - (- (y-angle a0-6) (* 182.04445 (* 4.0 (-> *display* time-adjust-ratio)))) - ) - ) - ) + (if (>= (+ (-> *display* base-frame-counter) -1500) (the-as int (-> obj start-time))) + (set! (-> obj deactivate-when-hidden) #t) + (TODO-RENAME-16 obj (-> *display* base-frame-counter) 0) + ) ) - (if - (>= - (+ (-> *display* base-frame-counter) -1500) - (the-as int (-> obj start-time)) - ) - (set! (-> obj deactivate-when-hidden) #t) - (TODO-RENAME-16 obj (-> *display* base-frame-counter) 0) - ) - ) 0 (none) ) (defmethod init-particles! hud-money-all ((obj hud-money-all) (arg0 int)) (when (< (-> obj nb-of-icons) 6) - (let ((s4-0 (-> obj nb-of-icons))) - (set! (-> obj icons s4-0) (new 'static 'hud-icon)) - (let* ((s2-0 (get-process *default-dead-pool* manipy #x4000)) - (s3-0 (when s2-0 - (let ((t9-1 (method-of-type manipy activate))) - (t9-1 - (the-as manipy s2-0) - obj - 'manipy - (the-as pointer #x70004000) - ) + (let ((s4-0 (-> obj nb-of-icons))) + (set! (-> obj icons s4-0) (new 'static 'hud-icon)) + (let* ((s2-0 (get-process *default-dead-pool* manipy #x4000)) + (s3-0 (when s2-0 + (let ((t9-1 (method-of-type manipy activate))) + (t9-1 (the-as manipy s2-0) obj 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process s2-0 manipy-init (new 'static 'vector :w 1.0) #f *money-sg* #f) + (-> s2-0 ppointer) + ) ) - (run-now-in-process - s2-0 - manipy-init - (new 'static 'vector :w 1.0) - #f - *money-sg* - #f - ) - (-> s2-0 ppointer) - ) - ) - ) - (when s3-0 - (set! - (-> (the-as process-drawable (-> s3-0 0)) draw dma-add-func) - dma-add-process-drawable-hud - ) - (set-vector! - (-> (the-as process-drawable (-> s3-0 0)) root trans) - 0.0 - 0.0 - 0.0 - 1.0 - ) - (set-vector! - (-> (the-as process-drawable (-> s3-0 0)) root scale) - 0.0095 - -0.011 - 0.0095 - 1.0 - ) - (if #f - (send-event (ppointer->process s3-0) 'trans-hook #f) - ) + ) + (when s3-0 + (set! (-> (the-as process-drawable (-> s3-0 0)) draw dma-add-func) dma-add-process-drawable-hud) + (set-vector! (-> (the-as process-drawable (-> s3-0 0)) root trans) 0.0 0.0 0.0 1.0) + (set-vector! (-> (the-as process-drawable (-> s3-0 0)) root scale) 0.0095 -0.011 0.0095 1.0) + (if #f + (send-event (ppointer->process s3-0) 'trans-hook #f) + ) + ) + (set! (-> obj icons s4-0 icon) (the-as (pointer manipy) s3-0)) + (when s3-0 + (logior! (-> s3-0 0 mask) (process-mask pause)) + (logclear! (-> s3-0 0 mask) (process-mask menu progress)) + (set! (-> (the-as process-drawable (-> s3-0 0)) root trans z) 1024.0) + (set! (-> obj icons s4-0 icon-x) 170) + (set! (-> obj icons s4-0 icon-y) 0) + (set! (-> obj icons s4-0 icon-z) 0) + (set! (-> obj icons s4-0 scale-x) 0.0095) + (set! (-> obj icons s4-0 scale-y) -0.011) + ) + ) ) - (set! (-> obj icons s4-0 icon) (the-as (pointer manipy) s3-0)) - (when s3-0 - (logior! (-> s3-0 0 mask) (process-mask pause)) - (logclear! (-> s3-0 0 mask) (process-mask menu progress)) - (set! (-> (the-as process-drawable (-> s3-0 0)) root trans z) 1024.0) - (set! (-> obj icons s4-0 icon-x) 170) - (set! (-> obj icons s4-0 icon-y) 0) - (set! (-> obj icons s4-0 icon-z) 0) - (set! (-> obj icons s4-0 scale-x) 0.0095) - (set! (-> obj icons s4-0 scale-y) -0.011) - ) - ) + (+! (-> obj nb-of-icons) 1) ) - (+! (-> obj nb-of-icons) 1) - ) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s4-1 (-> obj nb-of-particles))) - (set! (-> obj particles s4-1) (new 'static 'hud-particle)) - (set! - (-> obj particles s4-1 part) - (create-launch-control (-> *part-group-id-table* 705) obj) - ) - (set! (-> obj particles s4-1 init-pos x) 172.0) - (set! (-> obj particles s4-1 init-pos y) 330.0) - (set! (-> obj particles s4-1 init-pos z) 2.0) - (set! (-> obj particles s4-1 part matrix) -1) + (let ((s4-1 (-> obj nb-of-particles))) + (set! (-> obj particles s4-1) (new 'static 'hud-particle)) + (set! (-> obj particles s4-1 part) (create-launch-control (-> *part-group-id-table* 705) obj)) + (set! (-> obj particles s4-1 init-pos x) 172.0) + (set! (-> obj particles s4-1 init-pos y) 330.0) + (set! (-> obj particles s4-1 init-pos z) 2.0) + (set! (-> obj particles s4-1 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (animate! obj (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal)) (dotimes (s4-3 (-> obj nb-of-particles)) - (if (= (-> obj particles s4-3 part matrix) -1) - (set! (-> obj particles s4-3 part matrix) (sprite-allocate-user-hvdf)) + (if (= (-> obj particles s4-3 part matrix) -1) + (set! (-> obj particles s4-3 part matrix) (sprite-allocate-user-hvdf)) + ) ) - ) (set! (-> obj text-x) 251) (set! (-> obj text-y) 305) (set! (-> obj x-sgn) 0) @@ -825,118 +710,95 @@ (s3-2 0) (s2-2 0) ) - (dotimes (s1-0 (length *level-task-data*)) - (let ((v1-83 (-> *level-task-data* s1-0))) - (when (!= v1-83 #f) - (when - (or - (= *kernel-boot-message* 'play) - (= (-> v1-83 level-name-id) (game-text-id misty-level-name)) + (dotimes (s1-0 (length *level-task-data*)) + (let ((v1-83 (-> *level-task-data* s1-0))) + (when (!= v1-83 #f) + (when (or (= *kernel-boot-message* 'play) (= (-> v1-83 level-name-id) (game-text-id misty-level-name))) + (if (= s1-0 arg0) + (set! s2-2 (the-as int (-> *game-info* money-per-level s1-0))) + ) + (+! s3-2 (-> *game-info* money-per-level s1-0)) + (+! s4-4 (-> (get-game-count s1-0) money-count)) + ) + ) ) - (if (= s1-0 arg0) - (set! s2-2 (the-as int (-> *game-info* money-per-level s1-0))) - ) - (+! s3-2 (-> *game-info* money-per-level s1-0)) - (+! s4-4 (-> (get-game-count s1-0) money-count)) + ) + (cond + ((= s3-2 s4-4) + (set! (-> obj total-orbs) s4-4) + (set! (-> obj total-orbs) s4-4) + (set! (-> obj level-index) -1) ) + ((begin (set! (-> obj total-orbs) s2-2) (< arg0 (length *level-task-data*))) + (set! (-> obj level-index) arg0) + ) + (else + (set! (-> obj level-index) -1) + ) ) - ) ) - (cond - ((= s3-2 s4-4) - (set! (-> obj total-orbs) s4-4) - (set! (-> obj total-orbs) s4-4) - (set! (-> obj level-index) -1) - ) - ((begin - (set! (-> obj total-orbs) s2-2) - (< arg0 (length *level-task-data*)) - ) - (set! (-> obj level-index) arg0) - ) - (else - (set! (-> obj level-index) -1) - ) - ) - ) (set! (-> obj start-time) (the-as uint (-> *display* base-frame-counter))) - (sound-play-by-name - (static-sound-name "get-all-orbs") - (new-sound-id) - 1024 - 0 - 0 - 1 - #t - ) + (sound-play-by-name (static-sound-name "get-all-orbs") (new-sound-id) 1024 0 0 1 #t) 0 (none) ) -(defmethod - animate! - hud-money-all - ((obj hud-money-all) (arg0 symbol) (arg1 symbol)) +(defmethod animate! hud-money-all ((obj hud-money-all) (arg0 symbol) (arg1 symbol)) (cond - (arg0 - (set! (-> obj x-scale) 0.01845) - (set! (-> obj y-scale) -0.02175) - (set! (-> obj y-pos) (if arg1 - 374 - 373 - ) - ) + (arg0 + (set! (-> obj x-scale) 0.01845) + (set! (-> obj y-scale) -0.02175) + (set! (-> obj y-pos) (if arg1 + 374 + 373 + ) + ) + ) + (else + (set! (-> obj x-scale) 0.013499999) + (set! (-> obj y-scale) -0.01575) + (set! (-> obj y-pos) 361) + ) ) - (else - (set! (-> obj x-scale) 0.013499999) - (set! (-> obj y-scale) -0.01575) - (set! (-> obj y-pos) 361) - ) - ) (when arg1 - (set! (-> obj x-scale) (* 1.02 (-> obj x-scale))) - (set! (-> obj y-scale) (* 1.2 (-> obj y-scale))) - (set! (-> obj y-pos) (the int (* 1.21 (the float (-> obj y-pos))))) - ) + (set! (-> obj x-scale) (* 1.02 (-> obj x-scale))) + (set! (-> obj y-scale) (* 1.2 (-> obj y-scale))) + (set! (-> obj y-pos) (the int (* 1.21 (the float (-> obj y-pos))))) + ) 0 (none) ) -(set! - (-> *part-group-id-table* 79) - (new 'static 'sparticle-launch-group - :length 1 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag screen-space) - :name "group-part-hud-orb" - :launcher - (new 'static 'inline-array sparticle-group-item 1 - (sp-item 312 :flags (launch-asap)) - ) - :bounds (new 'static 'sphere :w 409600.0) - ) - ) +(set! (-> *part-group-id-table* 79) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-part-hud-orb" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 312 :flags (launch-asap))) + :bounds (new 'static 'sphere :w 409600.0) + ) + ) -(set! - (-> *part-id-table* 312) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 11 - (sp-tex spt-texture (new 'static 'texture-id :index #x2c :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 1.6)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 312) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 11 + (sp-tex spt-texture (new 'static 'texture-id :index #x2c :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 1.6)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-end) + ) + ) + ) (deftype hud-money (hud) ((x-scale float :offset-assert 280) @@ -952,155 +814,120 @@ (defmethod dummy-15 hud-money ((obj hud-money)) (let ((t9-0 (method-of-type hud dummy-15))) - (t9-0 obj) - ) + (t9-0 obj) + ) (let* ((s5-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) (gp-0 (-> s5-0 base)) ) - (let ((s4-0 draw-string-xy)) - (format (clear *temp-string*) "~D" (-> obj value)) - (s4-0 - *temp-string* - s5-0 - (+ (-> obj text-x) (* (-> obj x-sgn) (-> obj offset))) - (/ - (* - (+ (-> obj text-y) (* (-> obj y-sgn) (-> obj offset)) (-> obj y-offset)) - (the int (-> *video-parms* relative-y-scale)) - ) - 2 + (let ((s4-0 draw-string-xy)) + (format (clear *temp-string*) "~D" (-> obj value)) + (s4-0 + *temp-string* + s5-0 + (+ (-> obj text-x) (* (-> obj x-sgn) (-> obj offset))) + (/ (* (+ (-> obj text-y) (* (-> obj y-sgn) (-> obj offset)) (-> obj y-offset)) + (the int (-> *video-parms* relative-y-scale)) + ) + 2 + ) + (font-color dark-yellow) + (font-flags shadow kerning large) + ) + ) + (let ((a3-7 (-> s5-0 base))) + (let ((v1-8 (the-as dma-packet (-> s5-0 base)))) + (set! (-> v1-8 dma) (new 'static 'dma-tag :id (dma-tag-id next))) + (set! (-> v1-8 vif0) (new 'static 'vif-tag)) + (set! (-> v1-8 vif1) (new 'static 'vif-tag)) + (set! (-> s5-0 base) (&+ (the-as pointer v1-8) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-0 + (the-as (pointer dma-tag) a3-7) + ) ) - (font-color dark-yellow) - (font-flags shadow kerning large) - ) ) - (let ((a3-7 (-> s5-0 base))) - (let ((v1-8 (the-as dma-packet (-> s5-0 base)))) - (set! (-> v1-8 dma) (new 'static 'dma-tag :id (dma-tag-id next))) - (set! (-> v1-8 vif0) (new 'static 'vif-tag)) - (set! (-> v1-8 vif1) (new 'static 'vif-tag)) - (set! (-> s5-0 base) (&+ (the-as pointer v1-8) 16)) - ) - (dma-bucket-insert-tag - (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) - gp-0 - (the-as (pointer dma-tag) a3-7) - ) - ) - ) 0 (none) ) (defmethod TODO-RENAME-19 hud-money ((obj hud-money)) (when *target* - (when (!= *master-mode* 'pause) - (when (and (!= (-> obj icons 0) 0) (-> obj icons 0 icon)) - (set! (-> obj icons 0 scale-x) (-> obj x-scale)) - (set! (-> obj icons 0 scale-y) (-> obj y-scale)) - (set! - (-> obj icons 0 icon-y) - (* (-> obj y-pos) (the int (-> *video-parms* relative-y-scale))) + (when (!= *master-mode* 'pause) + (when (and (!= (-> obj icons 0) 0) (-> obj icons 0 icon)) + (set! (-> obj icons 0 scale-x) (-> obj x-scale)) + (set! (-> obj icons 0 scale-y) (-> obj y-scale)) + (set! (-> obj icons 0 icon-y) (* (-> obj y-pos) (the int (-> *video-parms* relative-y-scale)))) + (let ((a0-6 (-> obj icons 0 icon 0 root))) + (set-yaw-angle-clear-roll-pitch! + a0-6 + (- (y-angle a0-6) (* 182.04445 (* 4.0 (-> *display* time-adjust-ratio)))) + ) + ) + ) ) - (let ((a0-6 (-> obj icons 0 icon 0 root))) - (set-yaw-angle-clear-roll-pitch! - a0-6 - (- (y-angle a0-6) (* 182.04445 (* 4.0 (-> *display* time-adjust-ratio)))) - ) - ) - ) + (TODO-RENAME-16 obj (the int (+ 0.5 (-> *target* game money))) 0) ) - (TODO-RENAME-16 obj (the int (+ 0.5 (-> *target* game money))) 0) - ) 0 (none) ) (defmethod init-particles! hud-money ((obj hud-money) (arg0 int)) (when (< (-> obj nb-of-icons) 6) - (let ((s5-0 (-> obj nb-of-icons))) - (set! (-> obj icons s5-0) (new 'static 'hud-icon)) - (let* ((s3-0 (get-process *default-dead-pool* manipy #x4000)) - (s4-0 (when s3-0 - (let ((t9-1 (method-of-type manipy activate))) - (t9-1 - (the-as manipy s3-0) - obj - 'manipy - (the-as pointer #x70004000) - ) + (let ((s5-0 (-> obj nb-of-icons))) + (set! (-> obj icons s5-0) (new 'static 'hud-icon)) + (let* ((s3-0 (get-process *default-dead-pool* manipy #x4000)) + (s4-0 (when s3-0 + (let ((t9-1 (method-of-type manipy activate))) + (t9-1 (the-as manipy s3-0) obj 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process s3-0 manipy-init (new 'static 'vector :w 1.0) #f *money-sg* #f) + (-> s3-0 ppointer) + ) ) - (run-now-in-process - s3-0 - manipy-init - (new 'static 'vector :w 1.0) - #f - *money-sg* - #f - ) - (-> s3-0 ppointer) - ) - ) - ) - (when s4-0 - (set! - (-> (the-as process-drawable (-> s4-0 0)) draw dma-add-func) - dma-add-process-drawable-hud - ) - (set-vector! - (-> (the-as process-drawable (-> s4-0 0)) root trans) - 0.0 - 0.0 - 0.0 - 1.0 - ) - (set-vector! - (-> (the-as process-drawable (-> s4-0 0)) root scale) - 0.0095 - -0.011 - 0.0095 - 1.0 - ) - (if #f - (send-event (ppointer->process s4-0) 'trans-hook #f) - ) + ) + (when s4-0 + (set! (-> (the-as process-drawable (-> s4-0 0)) draw dma-add-func) dma-add-process-drawable-hud) + (set-vector! (-> (the-as process-drawable (-> s4-0 0)) root trans) 0.0 0.0 0.0 1.0) + (set-vector! (-> (the-as process-drawable (-> s4-0 0)) root scale) 0.0095 -0.011 0.0095 1.0) + (if #f + (send-event (ppointer->process s4-0) 'trans-hook #f) + ) + ) + (set! (-> obj icons s5-0 icon) (the-as (pointer manipy) s4-0)) + (when s4-0 + (logior! (-> s4-0 0 mask) (process-mask pause)) + (logclear! (-> s4-0 0 mask) (process-mask menu progress)) + (set! (-> (the-as process-drawable (-> s4-0 0)) root trans z) 1024.0) + (set! (-> obj icons s5-0 icon-x) 399) + (set! (-> obj icons s5-0 icon-y) 79) + (set! (-> obj icons s5-0 icon-z) 0) + (set! (-> obj icons s5-0 scale-x) 0.0095) + (set! (-> obj icons s5-0 scale-y) -0.011) + ) + ) ) - (set! (-> obj icons s5-0 icon) (the-as (pointer manipy) s4-0)) - (when s4-0 - (logior! (-> s4-0 0 mask) (process-mask pause)) - (logclear! (-> s4-0 0 mask) (process-mask menu progress)) - (set! (-> (the-as process-drawable (-> s4-0 0)) root trans z) 1024.0) - (set! (-> obj icons s5-0 icon-x) 399) - (set! (-> obj icons s5-0 icon-y) 79) - (set! (-> obj icons s5-0 icon-z) 0) - (set! (-> obj icons s5-0 scale-x) 0.0095) - (set! (-> obj icons s5-0 scale-y) -0.011) - ) - ) + (+! (-> obj nb-of-icons) 1) ) - (+! (-> obj nb-of-icons) 1) - ) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s5-1 (-> obj nb-of-particles))) - (set! (-> obj particles s5-1) (new 'static 'hud-particle)) - (set! - (-> obj particles s5-1 part) - (create-launch-control (-> *part-group-id-table* 79) obj) - ) - (set! (-> obj particles s5-1 init-pos x) 400.0) - (set! (-> obj particles s5-1 init-pos y) 58.0) - (set! (-> obj particles s5-1 init-pos z) 2.0) - (set! (-> obj particles s5-1 part matrix) -1) + (let ((s5-1 (-> obj nb-of-particles))) + (set! (-> obj particles s5-1) (new 'static 'hud-particle)) + (set! (-> obj particles s5-1 part) (create-launch-control (-> *part-group-id-table* 79) obj)) + (set! (-> obj particles s5-1 init-pos x) 400.0) + (set! (-> obj particles s5-1 init-pos y) 58.0) + (set! (-> obj particles s5-1 init-pos z) 2.0) + (set! (-> obj particles s5-1 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (animate! obj (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal)) (dotimes (s5-3 (-> obj nb-of-particles)) - (if (= (-> obj particles s5-3 part matrix) -1) - (set! (-> obj particles s5-3 part matrix) (sprite-allocate-user-hvdf)) + (if (= (-> obj particles s5-3 part matrix) -1) + (set! (-> obj particles s5-3 part matrix) (sprite-allocate-user-hvdf)) + ) ) - ) (set! (-> obj text-x) 420) (set! (-> obj text-y) 45) (set! (-> obj x-sgn) 1) @@ -1112,28 +939,28 @@ (defmethod animate! hud-money ((obj hud-money) (arg0 symbol) (arg1 symbol)) (cond - (arg0 - (set! (-> obj x-scale) 0.0123) - (set! (-> obj y-scale) -0.0145) - (set! (-> obj y-pos) 86) + (arg0 + (set! (-> obj x-scale) 0.0123) + (set! (-> obj y-scale) -0.0145) + (set! (-> obj y-pos) 86) + ) + (else + (set! (-> obj x-scale) 0.0095) + (set! (-> obj y-scale) -0.011) + (set! (-> obj y-pos) 79) + ) ) - (else - (set! (-> obj x-scale) 0.0095) - (set! (-> obj y-scale) -0.011) - (set! (-> obj y-pos) 79) - ) - ) (when arg1 - (set! (-> obj x-scale) (* 1.1 (-> obj x-scale))) - (set! (-> obj y-scale) (* 1.2 (-> obj y-scale))) - (set! (-> obj y-pos) (the int (* (the float (-> obj y-pos)) (if arg0 - 0.95 - 0.9 - ) - ) - ) + (set! (-> obj x-scale) (* 1.1 (-> obj x-scale))) + (set! (-> obj y-scale) (* 1.2 (-> obj y-scale))) + (set! (-> obj y-pos) (the int (* (the float (-> obj y-pos)) (if arg0 + 0.95 + 0.9 + ) + ) + ) + ) ) - ) 0 (none) ) @@ -1163,278 +990,252 @@ :texture-level 2 ) -(set! - (-> *part-id-table* 313) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 13 - (sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 0.4)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit9) - (sp-flt spt-userdata 4.0) - (sp-func spt-func 'fuel-cell-hud-orbit-callback) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 313) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.4)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit9) + (sp-flt spt-userdata 4.0) + (sp-func spt-func 'fuel-cell-hud-orbit-callback) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 314) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 13 - (sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 0.4)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit9) - (sp-flt spt-userdata 5.0) - (sp-func spt-func 'fuel-cell-hud-orbit-callback) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 314) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.4)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit9) + (sp-flt spt-userdata 5.0) + (sp-func spt-func 'fuel-cell-hud-orbit-callback) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 315) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 13 - (sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 0.4)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit9) - (sp-flt spt-userdata 6.0) - (sp-func spt-func 'fuel-cell-hud-orbit-callback) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 315) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.4)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit9) + (sp-flt spt-userdata 6.0) + (sp-func spt-func 'fuel-cell-hud-orbit-callback) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 316) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 13 - (sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 0.4)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit9) - (sp-flt spt-userdata 7.0) - (sp-func spt-func 'fuel-cell-hud-orbit-callback) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 316) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.4)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit9) + (sp-flt spt-userdata 7.0) + (sp-func spt-func 'fuel-cell-hud-orbit-callback) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 317) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 13 - (sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 0.2)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit9) - (sp-flt spt-userdata 9.0) - (sp-func spt-func 'fuel-cell-hud-orbit-callback) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 317) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x31 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit9) + (sp-flt spt-userdata 9.0) + (sp-func spt-func 'fuel-cell-hud-orbit-callback) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 318) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 1.8)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-func spt-func 'fuel-cell-hud-center-callback) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 318) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x30 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 1.8)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-func spt-func 'fuel-cell-hud-center-callback) + (sp-end) + ) + ) + ) -(set! - (-> *part-group-id-table* 80) - (new 'static 'sparticle-launch-group - :length 10 - :duration #xbb8 - :linger-duration #x5dc - :flags - (sp-group-flag use-local-clock screen-space) - :name "group-part-hud-power-cell-whole" - :launcher - (new 'static 'inline-array sparticle-group-item 10 - (sp-item 318 :flags (launch-asap)) - (sp-item 319 :fade-after (meters 35.0)) - (sp-item 320 :fade-after (meters 20.0)) - (sp-item 321 :flags (launch-asap) :period 3600 :length 5) - (sp-item 322 :flags (launch-asap) :period 3600 :length 5) - (sp-item 317 :flags (launch-asap)) - (sp-item 313 :flags (launch-asap)) - (sp-item 314 :flags (launch-asap)) - (sp-item 315 :flags (launch-asap)) - (sp-item 316 :flags (launch-asap)) - ) - :bounds (new 'static 'sphere :w 409600.0) - ) - ) +(set! (-> *part-group-id-table* 80) (new 'static 'sparticle-launch-group + :length 10 + :duration #xbb8 + :linger-duration #x5dc + :flags + (sp-group-flag use-local-clock screen-space) + :name "group-part-hud-power-cell-whole" + :launcher + (new 'static 'inline-array sparticle-group-item 10 + (sp-item 318 :flags (launch-asap)) + (sp-item 319 :fade-after (meters 35.0)) + (sp-item 320 :fade-after (meters 20.0)) + (sp-item 321 :flags (launch-asap) :period 3600 :length 5) + (sp-item 322 :flags (launch-asap) :period 3600 :length 5) + (sp-item 317 :flags (launch-asap)) + (sp-item 313 :flags (launch-asap)) + (sp-item 314 :flags (launch-asap)) + (sp-item 315 :flags (launch-asap)) + (sp-item 316 :flags (launch-asap)) + ) + :bounds (new 'static 'sphere :w 409600.0) + ) + ) -(set! - (-> *part-id-table* 323) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 2 - (sp-flt spt-fade-a -0.53333336) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 323) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -0.53333336) (sp-end)) + ) + ) -(set! - (-> *part-id-table* 319) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 20 - (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) - (sp-flt spt-num 0.5) - (sp-flt spt-z 92160.0) - (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.5) 1.0) - (sp-int spt-rot-x 4) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-rnd-flt spt-scale-y (meters 0.1) (meters 0.8) 1.0) - (sp-rnd-int spt-r 0 1 255.0) - (sp-rnd-int spt-g 0 1 255.0) - (sp-rnd-int spt-b 0 1 255.0) - (sp-flt spt-a 0.0) - (sp-flt spt-scalevel-x (meters 0.009765625)) - (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) - (sp-flt spt-scalevel-y (meters 0.009765625)) - (sp-flt spt-fade-a 0.35555556) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit3) - (sp-int spt-next-time 90) - (sp-launcher-by-id spt-next-launcher 232) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 319) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 0.5) + (sp-flt spt-z 92160.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 0.1) (meters 0.8) 1.0) + (sp-rnd-int spt-r 0 1 255.0) + (sp-rnd-int spt-g 0 1 255.0) + (sp-rnd-int spt-b 0 1 255.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-scalevel-y (meters 0.009765625)) + (sp-flt spt-fade-a 0.35555556) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 90) + (sp-launcher-by-id spt-next-launcher 232) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 320) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 19 - (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) - (sp-flt spt-num 0.06) - (sp-flt spt-z 92160.0) - (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.5) 1.0) - (sp-int spt-rot-x 4) - (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) - (sp-flt spt-scale-y (meters 0.2)) - (sp-rnd-int spt-r 0 1 255.0) - (sp-rnd-int spt-g 0 1 255.0) - (sp-rnd-int spt-b 0 1 255.0) - (sp-flt spt-a 0.0) - (sp-flt spt-scalevel-x (meters 0.009765625)) - (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) - (sp-flt spt-fade-a 0.32) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit3) - (sp-int spt-next-time 75) - (sp-launcher-by-id spt-next-launcher 232) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 320) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x2 :page #x2)) + (sp-flt spt-num 0.06) + (sp-flt spt-z 92160.0) + (sp-rnd-flt spt-scale-x (meters 1.5) (meters 0.5) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-scale-y (meters 0.2)) + (sp-rnd-int spt-r 0 1 255.0) + (sp-rnd-int spt-g 0 1 255.0) + (sp-rnd-int spt-b 0 1 255.0) + (sp-flt spt-a 0.0) + (sp-flt spt-scalevel-x (meters 0.009765625)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.32) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 75) + (sp-launcher-by-id spt-next-launcher 232) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 321) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 15 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-z 92160.0) - (sp-flt spt-scale-x (meters 3.3)) - (sp-flt spt-rot-z (degrees 0.0)) - (sp-flt spt-scale-y (meters 2.8)) - (sp-flt spt-r 192.0) - (sp-flt spt-g 192.0) - (sp-rnd-flt spt-b 0.0 128.0 1.0) - (sp-flt spt-a 64.0) - (sp-flt spt-rotvel-z (degrees -0.4)) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit3) - (sp-func spt-func 'fuel-cell-hud-starburst-3-callback) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 321) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-z 92160.0) + (sp-flt spt-scale-x (meters 3.3)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 2.8)) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 0.0 128.0 1.0) + (sp-flt spt-a 64.0) + (sp-flt spt-rotvel-z (degrees -0.4)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit3) + (sp-func spt-func 'fuel-cell-hud-starburst-3-callback) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 322) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 15 - (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-z 92160.0) - (sp-flt spt-scale-x (meters 3.8)) - (sp-flt spt-rot-z (degrees 0.0)) - (sp-flt spt-scale-y (meters 3.3)) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 64.0) - (sp-flt spt-rotvel-z (degrees 0.3)) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit3) - (sp-func spt-func 'fuel-cell-hud-starburst-4-callback) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 322) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-z 92160.0) + (sp-flt spt-scale-x (meters 3.8)) + (sp-flt spt-rot-z (degrees 0.0)) + (sp-flt spt-scale-y (meters 3.3)) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 64.0) + (sp-flt spt-rotvel-z (degrees 0.3)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit3) + (sp-func spt-func 'fuel-cell-hud-starburst-4-callback) + (sp-end) + ) + ) + ) (deftype hud-fuel-cell (hud) ((scale-starburst-3-x float :offset-assert 280) @@ -1454,217 +1255,165 @@ (defmethod dummy-15 hud-fuel-cell ((obj hud-fuel-cell)) (let ((t9-0 (method-of-type hud dummy-15))) - (t9-0 obj) - ) + (t9-0 obj) + ) (let* ((s5-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) (gp-0 (-> s5-0 base)) ) - (let ((s4-0 draw-string-xy)) - (format (clear *temp-string*) "~D" (-> obj value)) - (s4-0 - *temp-string* - s5-0 - (+ (-> obj text-x) (* (-> obj x-sgn) (-> obj offset))) - (/ - (* - (+ (-> obj text-y) (* (-> obj y-sgn) (-> obj offset)) (-> obj y-offset)) - (the int (-> *video-parms* relative-y-scale)) - ) - 2 + (let ((s4-0 draw-string-xy)) + (format (clear *temp-string*) "~D" (-> obj value)) + (s4-0 + *temp-string* + s5-0 + (+ (-> obj text-x) (* (-> obj x-sgn) (-> obj offset))) + (/ (* (+ (-> obj text-y) (* (-> obj y-sgn) (-> obj offset)) (-> obj y-offset)) + (the int (-> *video-parms* relative-y-scale)) + ) + 2 + ) + (font-color dark-yellow) + (font-flags shadow kerning large) + ) + ) + (let ((a3-7 (-> s5-0 base))) + (let ((v1-8 (the-as object (-> s5-0 base)))) + (set! (-> (the-as (pointer int64) v1-8)) #x20000000) + (set! (-> (the-as dma-packet v1-8) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-8) vif1) (new 'static 'vif-tag)) + (set! (-> s5-0 base) (&+ (the-as pointer v1-8) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-0 + (the-as (pointer dma-tag) a3-7) + ) ) - (font-color dark-yellow) - (font-flags shadow kerning large) - ) ) - (let ((a3-7 (-> s5-0 base))) - (let ((v1-8 (the-as object (-> s5-0 base)))) - (set! (-> (the-as (pointer int64) v1-8)) #x20000000) - (set! (-> (the-as dma-packet v1-8) vif0) (new 'static 'vif-tag)) - (set! (-> (the-as dma-packet v1-8) vif1) (new 'static 'vif-tag)) - (set! (-> s5-0 base) (&+ (the-as pointer v1-8) 16)) - ) - (dma-bucket-insert-tag - (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) - gp-0 - (the-as (pointer dma-tag) a3-7) - ) - ) - ) 0 (none) ) -(defun - fuel-cell-hud-orbit-callback - ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) +(defun fuel-cell-hud-orbit-callback ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) (let ((s3-0 (-> arg1 key proc)) (v1-1 (the int (-> arg1 user-float))) (s5-0 (new 'stack-no-clear 'vector)) ) - (let ((s4-0 (new 'stack-no-clear 'vector))) - (vector<-cspace! - s5-0 - (-> (the-as hud-fuel-cell s3-0) icons 0 icon 0 node-list data v1-1) - ) - (vector<-cspace! - s4-0 - (-> (the-as hud-fuel-cell s3-0) icons 0 icon 0 node-list data 3) - ) - (vector-! s5-0 s5-0 s4-0) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (vector<-cspace! s5-0 (-> (the-as hud-fuel-cell s3-0) icons 0 icon 0 node-list data v1-1)) + (vector<-cspace! s4-0 (-> (the-as hud-fuel-cell s3-0) icons 0 icon 0 node-list data 3)) + (vector-! s5-0 s5-0 s4-0) + ) + (set! (-> arg2 vector 0 x) (* 60.0 (-> s5-0 x))) + (set! (-> arg2 vector 0 y) (* 60.0 (-> s5-0 y))) + (set! (-> arg2 vector 0 z) (* 1024.0 (-> s5-0 z))) ) - (set! (-> arg2 vector 0 x) (* 60.0 (-> s5-0 x))) - (set! (-> arg2 vector 0 y) (* 60.0 (-> s5-0 y))) - (set! (-> arg2 vector 0 z) (* 1024.0 (-> s5-0 z))) - ) 0 (none) ) -(defun - fuel-cell-hud-starburst-3-callback - ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) +(defun fuel-cell-hud-starburst-3-callback ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) (set! (-> arg2 vector 0 w) (-> *hud-parts* fuel-cell 0 scale-starburst-3-x)) (set! (-> arg2 vector 1 w) (-> *hud-parts* fuel-cell 0 scale-starburst-3-y)) 0 (none) ) -(defun - fuel-cell-hud-starburst-4-callback - ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) +(defun fuel-cell-hud-starburst-4-callback ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) (set! (-> arg2 vector 0 w) (-> *hud-parts* fuel-cell 0 scale-starburst-4-x)) (set! (-> arg2 vector 1 w) (-> *hud-parts* fuel-cell 0 scale-starburst-4-y)) 0 (none) ) -(defun - fuel-cell-hud-center-callback - ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) +(defun fuel-cell-hud-center-callback ((arg0 sparticle-system) (arg1 sparticle-cpuinfo) (arg2 matrix)) (let ((f0-0 (-> *hud-parts* fuel-cell 0 scale-icon)) (f1-0 (-> *hud-parts* fuel-cell 0 scale-center)) ) - (set-vector! - (-> *hud-parts* fuel-cell 0 icons 0 icon 0 root scale) - f0-0 - f0-0 - f0-0 - 1.0 + (set-vector! (-> *hud-parts* fuel-cell 0 icons 0 icon 0 root scale) f0-0 f0-0 f0-0 1.0) + (set! (-> arg2 vector 0 w) f1-0) + (set! (-> arg2 vector 1 w) f1-0) ) - (set! (-> arg2 vector 0 w) f1-0) - (set! (-> arg2 vector 1 w) f1-0) - ) 0 (none) ) (defmethod TODO-RENAME-19 hud-fuel-cell ((obj hud-fuel-cell)) (when *target* - (when (!= *master-mode* 'pause) - (let ((a0-2 (-> obj icons 0 icon 0 root))) - (set-yaw-angle-clear-roll-pitch! - a0-2 - (+ (y-angle a0-2) (* 182.04445 (* 0.5 (-> *display* time-adjust-ratio)))) + (when (!= *master-mode* 'pause) + (let ((a0-2 (-> obj icons 0 icon 0 root))) + (set-yaw-angle-clear-roll-pitch! + a0-2 + (+ (y-angle a0-2) (* 182.04445 (* 0.5 (-> *display* time-adjust-ratio)))) + ) + ) + ) + (set! (-> obj icons 0 icon-y) (-> obj icon-pos-y)) + (TODO-RENAME-16 obj (the int (+ 0.5 (-> *target* game fuel))) 0) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (vector<-cspace! s5-1 (-> obj icons 0 icon 0 node-list data 3)) + (set! (-> obj particles 0 pos x) (-> s5-1 x)) + (set! (-> obj particles 0 pos y) (* 0.5 (-> s5-1 y))) + (set! (-> obj particles 0 pos z) (+ 2.0 (* 0.05 (+ -2048.0 (-> s5-1 z))))) ) - ) ) - (set! (-> obj icons 0 icon-y) (-> obj icon-pos-y)) - (TODO-RENAME-16 obj (the int (+ 0.5 (-> *target* game fuel))) 0) - (let ((s5-1 (new 'stack-no-clear 'vector))) - (vector<-cspace! s5-1 (-> obj icons 0 icon 0 node-list data 3)) - (set! (-> obj particles 0 pos x) (-> s5-1 x)) - (set! (-> obj particles 0 pos y) (* 0.5 (-> s5-1 y))) - (set! (-> obj particles 0 pos z) (+ 2.0 (* 0.05 (+ -2048.0 (-> s5-1 z))))) - ) - ) 0 (none) ) (defmethod init-particles! hud-fuel-cell ((obj hud-fuel-cell) (arg0 int)) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s5-0 (-> obj nb-of-particles))) - (set! (-> obj particles s5-0) (new 'static 'hud-particle)) - (set! - (-> obj particles s5-0 part) - (create-launch-control (-> *part-group-id-table* 80) obj) - ) - (set! (-> obj particles s5-0 init-pos x) 256.0) - (set! (-> obj particles s5-0 init-pos y) 224.0) - (set! (-> obj particles s5-0 init-pos z) 1.0) - (set! (-> obj particles s5-0 part matrix) -1) + (let ((s5-0 (-> obj nb-of-particles))) + (set! (-> obj particles s5-0) (new 'static 'hud-particle)) + (set! (-> obj particles s5-0 part) (create-launch-control (-> *part-group-id-table* 80) obj)) + (set! (-> obj particles s5-0 init-pos x) 256.0) + (set! (-> obj particles s5-0 init-pos y) 224.0) + (set! (-> obj particles s5-0 init-pos z) 1.0) + (set! (-> obj particles s5-0 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (dotimes (s5-1 (-> obj nb-of-particles)) - (if (= (-> obj particles s5-1 part matrix) -1) - (set! (-> obj particles s5-1 part matrix) (sprite-allocate-user-hvdf)) + (if (= (-> obj particles s5-1 part matrix) -1) + (set! (-> obj particles s5-1 part matrix) (sprite-allocate-user-hvdf)) + ) ) - ) (when (< (-> obj nb-of-icons) 6) - (let ((s5-2 (-> obj nb-of-icons))) - (set! (-> obj icons s5-2) (new 'static 'hud-icon)) - (let* ((s3-0 (get-process *default-dead-pool* manipy #x4000)) - (s4-0 (when s3-0 - (let ((t9-3 (method-of-type manipy activate))) - (t9-3 - (the-as manipy s3-0) - obj - 'manipy - (the-as pointer #x70004000) - ) + (let ((s5-2 (-> obj nb-of-icons))) + (set! (-> obj icons s5-2) (new 'static 'hud-icon)) + (let* ((s3-0 (get-process *default-dead-pool* manipy #x4000)) + (s4-0 (when s3-0 + (let ((t9-3 (method-of-type manipy activate))) + (t9-3 (the-as manipy s3-0) obj 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process s3-0 manipy-init (new 'static 'vector :w 1.0) #f *fuelcell-naked-sg* #f) + (-> s3-0 ppointer) + ) ) - (run-now-in-process - s3-0 - manipy-init - (new 'static 'vector :w 1.0) - #f - *fuelcell-naked-sg* - #f - ) - (-> s3-0 ppointer) - ) - ) - ) - (when s4-0 - (set! - (-> (the-as process-drawable (-> s4-0 0)) draw dma-add-func) - dma-add-process-drawable-hud - ) - (set-vector! - (-> (the-as process-drawable (-> s4-0 0)) root trans) - 0.0 - 0.0 - 0.0 - 1.0 - ) - (set-vector! - (-> (the-as process-drawable (-> s4-0 0)) root scale) - 0.009 - 0.009 - 0.009 - 1.0 - ) - (if #f - (send-event (ppointer->process s4-0) 'trans-hook #f) - ) + ) + (when s4-0 + (set! (-> (the-as process-drawable (-> s4-0 0)) draw dma-add-func) dma-add-process-drawable-hud) + (set-vector! (-> (the-as process-drawable (-> s4-0 0)) root trans) 0.0 0.0 0.0 1.0) + (set-vector! (-> (the-as process-drawable (-> s4-0 0)) root scale) 0.009 0.009 0.009 1.0) + (if #f + (send-event (ppointer->process s4-0) 'trans-hook #f) + ) + ) + (set! (-> obj icons s5-2 icon) (the-as (pointer manipy) s4-0)) + (when s4-0 + (logior! (-> s4-0 0 mask) (process-mask pause)) + (logclear! (-> s4-0 0 mask) (process-mask menu progress)) + (set! (-> (the-as process-drawable (-> s4-0 0)) root trans z) 2048.0) + (set! (-> obj icons s5-2 icon-x) 256) + (set! (-> obj icons s5-2 icon-y) 62) + (set! (-> obj icons s5-2 icon-z) 0) + (set! (-> obj icons s5-2 scale-x) 0.009) + (set! (-> obj icons s5-2 scale-y) 0.009) + ) + ) ) - (set! (-> obj icons s5-2 icon) (the-as (pointer manipy) s4-0)) - (when s4-0 - (logior! (-> s4-0 0 mask) (process-mask pause)) - (logclear! (-> s4-0 0 mask) (process-mask menu progress)) - (set! (-> (the-as process-drawable (-> s4-0 0)) root trans z) 2048.0) - (set! (-> obj icons s5-2 icon-x) 256) - (set! (-> obj icons s5-2 icon-y) 62) - (set! (-> obj icons s5-2 icon-z) 0) - (set! (-> obj icons s5-2 scale-x) 0.009) - (set! (-> obj icons s5-2 scale-y) 0.009) - ) - ) + (+! (-> obj nb-of-icons) 1) ) - (+! (-> obj nb-of-icons) 1) - ) (set! (-> obj text-x) 276) (set! (-> obj text-y) 45) (set! (-> obj x-sgn) 0) @@ -1673,117 +1422,104 @@ (set! (-> obj skip-particle) -2) (animate! obj (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal)) (let ((s5-4 (new 'stack-no-clear 'quaternion))) - (quaternion-axis-angle! s5-4 0.0 1.0 0.0 16384.0) - (quaternion*! - (-> obj icons 0 icon 0 root quat) - s5-4 - (-> obj icons 0 icon 0 root quat) + (quaternion-axis-angle! s5-4 0.0 1.0 0.0 16384.0) + (quaternion*! (-> obj icons 0 icon 0 root quat) s5-4 (-> obj icons 0 icon 0 root quat)) ) - ) 0 (none) ) -(defmethod - animate! - hud-fuel-cell - ((obj hud-fuel-cell) (arg0 symbol) (arg1 symbol)) +(defmethod animate! hud-fuel-cell ((obj hud-fuel-cell) (arg0 symbol) (arg1 symbol)) (cond - (arg0 - (set! (-> obj scale-starburst-3-x) 10240.0) - (set! (-> obj scale-starburst-3-y) 9420.8) - (set! (-> obj scale-starburst-4-x) 9420.8) - (set! (-> obj scale-starburst-4-y) 8192.0) - (set! (-> obj scale-icon) 0.007) - (set! (-> obj scale-center) 6144.0) - (set! (-> obj icon-pos-y) 62) + (arg0 + (set! (-> obj scale-starburst-3-x) 10240.0) + (set! (-> obj scale-starburst-3-y) 9420.8) + (set! (-> obj scale-starburst-4-x) 9420.8) + (set! (-> obj scale-starburst-4-y) 8192.0) + (set! (-> obj scale-icon) 0.007) + (set! (-> obj scale-center) 6144.0) + (set! (-> obj icon-pos-y) 62) + ) + (else + (set! (-> obj scale-starburst-3-x) 12288.0) + (set! (-> obj scale-starburst-3-y) 10240.0) + (set! (-> obj scale-starburst-4-x) 12288.0) + (set! (-> obj scale-starburst-4-y) 10240.0) + (set! (-> obj scale-icon) 0.009) + (set! (-> obj scale-center) 7372.8) + (set! (-> obj icon-pos-y) 62) + ) ) - (else - (set! (-> obj scale-starburst-3-x) 12288.0) - (set! (-> obj scale-starburst-3-y) 10240.0) - (set! (-> obj scale-starburst-4-x) 12288.0) - (set! (-> obj scale-starburst-4-y) 10240.0) - (set! (-> obj scale-icon) 0.009) - (set! (-> obj scale-center) 7372.8) - (set! (-> obj icon-pos-y) 62) - ) - ) (if arg1 - (set! (-> obj icon-pos-y) (the int (* (the float (-> obj icon-pos-y)) (if arg0 - 1.1 - 1.14 - ) - ) - ) - ) - ) + (set! (-> obj icon-pos-y) (the int (* (the float (-> obj icon-pos-y)) (if arg0 + 1.1 + 1.14 + ) + ) + ) + ) + ) 0 (none) ) -(set! - (-> *part-group-id-table* 81) - (new 'static 'sparticle-launch-group - :length 2 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag screen-space) - :name "group-part-hud-buzzer" - :launcher - (new 'static 'inline-array sparticle-group-item 2 - (sp-item 324 :flags (launch-asap) :binding 325) - (sp-item 325 :flags (start-dead launch-asap)) - ) - :bounds (new 'static 'sphere :w 409600.0) - ) - ) +(set! (-> *part-group-id-table* 81) (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-part-hud-buzzer" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 324 :flags (launch-asap) :binding 325) + (sp-item 325 :flags (start-dead launch-asap)) + ) + :bounds (new 'static 'sphere :w 409600.0) + ) + ) -(set! - (-> *part-id-table* 324) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 11 - (sp-tex spt-texture (new 'static 'texture-id :index #x2a :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 2.2)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 0.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit9) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 324) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 11 + (sp-tex spt-texture (new 'static 'texture-id :index #x2a :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 0.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit9) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 325) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 18 - (sp-tex spt-texture (new 'static 'texture-id :index #x2a :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-x (meters 0.0)) - (sp-flt spt-y (meters 1.3333334)) - (sp-flt spt-z 409.6) - (sp-flt spt-scale-x (meters 1.8)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-flt spt-omega 0.0) - (sp-flt spt-vel-x (meters 0.053333335)) - (sp-flt spt-vel-z (meters 0.0)) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit7 bit9) - (sp-func spt-func 'part-hud-buzzer-func) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 325) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x2a :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.0)) + (sp-flt spt-y (meters 1.3333334)) + (sp-flt spt-z 409.6) + (sp-flt spt-scale-x (meters 1.8)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-flt spt-omega 0.0) + (sp-flt spt-vel-x (meters 0.053333335)) + (sp-flt spt-vel-z (meters 0.0)) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit7 bit9) + (sp-func spt-func 'part-hud-buzzer-func) + (sp-end) + ) + ) + ) (deftype hud-buzzers (hud) ((scale float :offset-assert 280) @@ -1798,94 +1534,85 @@ (defun part-hud-buzzer-func ((arg0 basic) (arg1 basic) (arg2 hud-particle)) (let ((f0-0 (-> *hud-parts* buzzers 0 scale))) - (set! (-> arg2 init-pos x) f0-0) - (set! (-> arg2 pos x) f0-0) - ) + (set! (-> arg2 init-pos x) f0-0) + (set! (-> arg2 pos x) f0-0) + ) (none) ) (defmethod dummy-15 hud-buzzers ((obj hud-buzzers)) (let ((t9-0 (method-of-type hud dummy-15))) - (t9-0 obj) - ) + (t9-0 obj) + ) (set! (-> obj text-y) (+ (if (nonzero? (-> obj next-y-offset)) - (-> obj text-y-offset) - 0 - ) - 362 - ) - ) + (-> obj text-y-offset) + 0 + ) + 362 + ) + ) (let* ((s5-0 (-> *display* frames (-> *display* on-screen) frame global-buf)) (gp-0 (-> s5-0 base)) ) - (let ((s3-0 draw-string-xy)) - (format (clear *temp-string*) "~2,' D" (-> obj value)) - (s3-0 - *temp-string* - s5-0 - (+ (-> obj text-x) (* (-> obj x-sgn) (-> obj offset))) - (/ - (* - (+ (-> obj text-y) (* (-> obj y-sgn) (-> obj offset)) (-> obj y-offset)) - (the int (-> *video-parms* relative-y-scale)) - ) - 2 + (let ((s3-0 draw-string-xy)) + (format (clear *temp-string*) "~2,' D" (-> obj value)) + (s3-0 + *temp-string* + s5-0 + (+ (-> obj text-x) (* (-> obj x-sgn) (-> obj offset))) + (/ (* (+ (-> obj text-y) (* (-> obj y-sgn) (-> obj offset)) (-> obj y-offset)) + (the int (-> *video-parms* relative-y-scale)) + ) + 2 + ) + (font-color dark-yellow) + (font-flags shadow kerning large) + ) + ) + (let ((a3-7 (-> s5-0 base))) + (let ((v1-11 (the-as object (-> s5-0 base)))) + (set! (-> (the-as (pointer int64) v1-11)) #x20000000) + (set! (-> (the-as dma-packet v1-11) vif0) (new 'static 'vif-tag)) + (set! (-> (the-as dma-packet v1-11) vif1) (new 'static 'vif-tag)) + (set! (-> s5-0 base) (&+ (the-as pointer v1-11) 16)) + ) + (dma-bucket-insert-tag + (-> *display* frames (-> *display* on-screen) frame bucket-group) + (bucket-id debug-draw0) + gp-0 + (the-as (pointer dma-tag) a3-7) + ) ) - (font-color dark-yellow) - (font-flags shadow kerning large) - ) ) - (let ((a3-7 (-> s5-0 base))) - (let ((v1-11 (the-as object (-> s5-0 base)))) - (set! (-> (the-as (pointer int64) v1-11)) #x20000000) - (set! (-> (the-as dma-packet v1-11) vif0) (new 'static 'vif-tag)) - (set! (-> (the-as dma-packet v1-11) vif1) (new 'static 'vif-tag)) - (set! (-> s5-0 base) (&+ (the-as pointer v1-11) 16)) - ) - (dma-bucket-insert-tag - (-> *display* frames (-> *display* on-screen) frame bucket-group) - (bucket-id debug-draw0) - gp-0 - (the-as (pointer dma-tag) a3-7) - ) - ) - ) 0 (none) ) (defmethod TODO-RENAME-19 hud-buzzers ((obj hud-buzzers)) (if *target* - (TODO-RENAME-16 - obj - (the int (+ 0.5 (-> *target* fact-info-target buzzer))) - 0 - ) - ) + (TODO-RENAME-16 obj (the int (+ 0.5 (-> *target* fact-info-target buzzer))) 0) + ) 0 (none) ) (defmethod init-particles! hud-buzzers ((obj hud-buzzers) (arg0 int)) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s5-0 (-> obj nb-of-particles))) - (set! (-> obj particles s5-0) (new 'static 'hud-particle)) - (set! - (-> obj particles s5-0 part) - (create-launch-control (-> *part-group-id-table* 81) obj) - ) - (set! (-> obj particles s5-0 init-pos x) 60.0) - (set! (-> obj particles s5-0 init-pos y) 380.0) - (set! (-> obj particles s5-0 init-pos z) 1.0) - (set! (-> obj particles s5-0 part matrix) -1) + (let ((s5-0 (-> obj nb-of-particles))) + (set! (-> obj particles s5-0) (new 'static 'hud-particle)) + (set! (-> obj particles s5-0 part) (create-launch-control (-> *part-group-id-table* 81) obj)) + (set! (-> obj particles s5-0 init-pos x) 60.0) + (set! (-> obj particles s5-0 init-pos y) 380.0) + (set! (-> obj particles s5-0 init-pos z) 1.0) + (set! (-> obj particles s5-0 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (dotimes (s5-1 (-> obj nb-of-particles)) - (if (= (-> obj particles s5-1 part matrix) -1) - (set! (-> obj particles s5-1 part matrix) (sprite-allocate-user-hvdf)) + (if (= (-> obj particles s5-1 part matrix) -1) + (set! (-> obj particles s5-1 part matrix) (sprite-allocate-user-hvdf)) + ) ) - ) (animate! obj (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal)) (set! (-> obj text-x) 85) (set! (-> obj text-y) 362) @@ -1903,11 +1630,11 @@ (defmethod first-icon-y hud-buzzers ((obj hud-buzzers)) (+ (if (= (-> *setting-control* current video-mode) 'pal) - (+ (-> obj text-y) 120) - (+ (-> obj text-y) 50) - ) - (-> obj next-y-offset) - ) + (+ (-> obj text-y) 120) + (+ (-> obj text-y) 50) + ) + (-> obj next-y-offset) + ) ) (defmethod inc-value hud-buzzers ((obj hud-buzzers)) @@ -1920,175 +1647,157 @@ (defmethod animate! hud-buzzers ((obj hud-buzzers) (arg0 symbol) (arg1 symbol)) (cond - (arg0 - (set! (-> obj scale) 6553.6) - (set! (-> obj text-y-offset) -40) + (arg0 + (set! (-> obj scale) 6553.6) + (set! (-> obj text-y-offset) -40) + ) + (else + (set! (-> obj scale) 7372.8) + (set! (-> obj text-y-offset) 0) + 0 + ) ) - (else - (set! (-> obj scale) 7372.8) - (set! (-> obj text-y-offset) 0) - 0 - ) - ) 0 (none) ) -(set! - (-> *part-group-id-table* 82) - (new 'static 'sparticle-launch-group - :length 1 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag screen-space) - :name "group-part-hud-eco-timer" - :launcher - (new 'static 'inline-array sparticle-group-item 1 - (sp-item 327 :flags (launch-asap)) - ) - :bounds (new 'static 'sphere :w 409600.0) - ) - ) +(set! (-> *part-group-id-table* 82) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-part-hud-eco-timer" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 327 :flags (launch-asap))) + :bounds (new 'static 'sphere :w 409600.0) + ) + ) -(set! - (-> *part-group-id-table* 83) - (new 'static 'sparticle-launch-group - :length 1 - :duration #xbb8 - :linger-duration #x5dc - :flags (sp-group-flag screen-space) - :name "group-part-hud-eco-timer-backing" - :launcher - (new 'static 'inline-array sparticle-group-item 1 - (sp-item 328 :flags (launch-asap)) - ) - :bounds (new 'static 'sphere :w 409600.0) - ) - ) +(set! (-> *part-group-id-table* 83) + (new 'static 'sparticle-launch-group + :length 1 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag screen-space) + :name "group-part-hud-eco-timer-backing" + :launcher + (new 'static 'inline-array sparticle-group-item 1 (sp-item 328 :flags (launch-asap))) + :bounds (new 'static 'sphere :w 409600.0) + ) + ) -(set! - (-> *part-id-table* 327) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #x2b :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 3.2)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 128.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-func spt-func 'part-hud-eco-timer-func) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 327) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x2b :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 3.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-func spt-func 'part-hud-eco-timer-func) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 328) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #x3 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 2.5)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 128.0) - (sp-flt spt-g 100.0) - (sp-flt spt-b 63.0) - (sp-flt spt-a 64.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-func spt-func 'part-hud-eco-timer-backing-func) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 328) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x3 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.5)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 100.0) + (sp-flt spt-b 63.0) + (sp-flt spt-a 64.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-func spt-func 'part-hud-eco-timer-backing-func) + (sp-end) + ) + ) + ) -(set! - (-> *part-group-id-table* 84) - (new 'static 'sparticle-launch-group - :length 3 - :duration #xbb8 - :linger-duration #x5dc - :flags - (sp-group-flag use-local-clock screen-space) - :name "group-part-hud-timer-blue" - :launcher - (new 'static 'inline-array sparticle-group-item 3 - (sp-item 329 :flags (launch-asap)) - (sp-item 330 :flags (launch-asap)) - (sp-item 331 :flags (launch-asap)) - ) - :bounds (new 'static 'sphere :w 409600.0) - ) - ) +(set! (-> *part-group-id-table* 84) (new 'static 'sparticle-launch-group + :length 3 + :duration #xbb8 + :linger-duration #x5dc + :flags + (sp-group-flag use-local-clock screen-space) + :name "group-part-hud-timer-blue" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 329 :flags (launch-asap)) + (sp-item 330 :flags (launch-asap)) + (sp-item 331 :flags (launch-asap)) + ) + :bounds (new 'static 'sphere :w 409600.0) + ) + ) -(set! - (-> *part-id-table* 329) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 2.0)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 0.0) - (sp-flt spt-g 32.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-func spt-func 'part-hud-eco-timer-01-func) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 329) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-flt spt-g 32.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-func spt-func 'part-hud-eco-timer-01-func) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 330) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 2.0)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 0.0) - (sp-flt spt-g 32.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-func spt-func 'part-hud-eco-timer-02-func) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 330) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-flt spt-g 32.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-func spt-func 'part-hud-eco-timer-02-func) + (sp-end) + ) + ) + ) -(set! - (-> *part-id-table* 331) - (new 'static 'sparticle-launcher - :init-specs - (new 'static 'inline-array sp-field-init-spec 12 - (sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #x2)) - (sp-flt spt-num 1.0) - (sp-flt spt-scale-x (meters 2.0)) - (sp-copy-from-other spt-scale-y -4) - (sp-flt spt-r 0.0) - (sp-flt spt-g 32.0) - (sp-flt spt-b 128.0) - (sp-flt spt-a 128.0) - (sp-int spt-timer -1) - (sp-cpuinfo-flags bit2 bit9) - (sp-func spt-func 'part-hud-eco-timer-03-func) - (sp-end) - ) - ) - ) +(set! (-> *part-id-table* 331) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x32 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 0.0) + (sp-flt spt-g 32.0) + (sp-flt spt-b 128.0) + (sp-flt spt-a 128.0) + (sp-int spt-timer -1) + (sp-cpuinfo-flags bit2 bit9) + (sp-func spt-func 'part-hud-eco-timer-03-func) + (sp-end) + ) + ) + ) (deftype hud-power (hud) ((scale-timer float :offset-assert 280) @@ -2102,51 +1811,39 @@ ) -(defun - calculate-rotation-and-color-for-slice - ((arg0 int) (arg1 float) (arg2 int) (arg3 int) (arg4 int) (arg5 hud-particle)) +(defun calculate-rotation-and-color-for-slice ((arg0 int) (arg1 float) (arg2 int) (arg3 int) (arg4 int) (arg5 hud-particle)) (cond - ((>= 0.0 arg1) - (set! (-> arg5 init-pos w) -16566.045) - ) - (else - (let ((v1-1 arg0)) - (cond - ((zero? v1-1) - (if (< 1.0 arg1) - (set! (-> arg5 init-pos w) 910.2222) - (set! (-> arg5 init-pos w) (* 182.04445 (+ 5.0 (* 263.0 (- 1.0 arg1))))) - ) - ) - ((= v1-1 1) - (if (< 0.6666667 arg1) - (set! (-> arg5 init-pos w) 17294.223) - (set! - (-> arg5 init-pos w) - (* 182.04445 (+ 95.0 (* 173.0 (- 1.0 (* 1.5 arg1))))) - ) - ) - ) - ((= v1-1 2) - (if (< 0.33333334 arg1) - (set! (-> arg5 init-pos w) 33678.223) - (set! - (-> arg5 init-pos w) - (* 182.04445 (+ 185.0 (* 83.0 (- 1.0 (* 3.0 arg1))))) - ) - ) - ) - ) + ((>= 0.0 arg1) + (set! (-> arg5 init-pos w) -16566.045) ) + (else + (let ((v1-1 arg0)) + (cond + ((zero? v1-1) + (if (< 1.0 arg1) + (set! (-> arg5 init-pos w) 910.2222) + (set! (-> arg5 init-pos w) (* 182.04445 (+ 5.0 (* 263.0 (- 1.0 arg1))))) + ) + ) + ((= v1-1 1) + (if (< 0.6666667 arg1) + (set! (-> arg5 init-pos w) 17294.223) + (set! (-> arg5 init-pos w) (* 182.04445 (+ 95.0 (* 173.0 (- 1.0 (* 1.5 arg1)))))) + ) + ) + ((= v1-1 2) + (if (< 0.33333334 arg1) + (set! (-> arg5 init-pos w) 33678.223) + (set! (-> arg5 init-pos w) (* 182.04445 (+ 185.0 (* 83.0 (- 1.0 (* 3.0 arg1)))))) + ) + ) + ) + ) + ) ) - ) - (if - (and - (< 0.0 arg1) - (and (< arg1 0.2) (zero? (logand (-> *display* integral-frame-counter) 4))) - ) - (set! arg3 (* arg3 2)) - ) + (if (and (< 0.0 arg1) (and (< arg1 0.2) (zero? (logand (-> *display* integral-frame-counter) 4)))) + (set! arg3 (* arg3 2)) + ) (set! (-> arg5 pos y) (the float arg2)) (set! (-> arg5 pos z) (the float arg3)) (set! (-> arg5 pos w) (the float arg4)) @@ -2155,265 +1852,229 @@ ) (defun part-hud-eco-timer-01-func ((arg0 basic) (arg1 basic) (arg2 hud-particle)) - (let - ((f0-2 - (/ - (the - float - (the-as - uint - (- - (-> *target* fact-info-target eco-timeout) - (the-as - uint - (- - (-> *display* game-frame-counter) - (the-as int (-> *target* fact-info-target eco-pickup-time)) - ) + (let ((f0-2 + (/ (the float + (the-as + uint + (- (-> *target* fact-info-target eco-timeout) + (the-as + uint + (- (-> *display* game-frame-counter) (the-as int (-> *target* fact-info-target eco-pickup-time))) + ) + ) + ) + ) + (the float (the-as uint (-> *FACT-bank* eco-full-timeout))) + ) ) - ) + (a2-1 0) + (a3-0 64) + (t0-0 128) ) + (case (-> *target* fact-info-target eco-type) + ((1) + (set! a2-1 128) + (set! a3-0 96) + (set! t0-0 0) + ) + ((2) + (set! a2-1 128) + (set! a3-0 32) + (set! t0-0 0) + ) + ((4) + (set! a2-1 0) + (set! a3-0 128) + (set! t0-0 32) ) - (the float (the-as uint (-> *FACT-bank* eco-full-timeout))) ) - ) - (a2-1 0) - (a3-0 64) - (t0-0 128) + (calculate-rotation-and-color-for-slice 0 f0-2 a2-1 a3-0 t0-0 arg2) ) - (case (-> *target* fact-info-target eco-type) - ((1) - (set! a2-1 128) - (set! a3-0 96) - (set! t0-0 0) - ) - ((2) - (set! a2-1 128) - (set! a3-0 32) - (set! t0-0 0) - ) - ((4) - (set! a2-1 0) - (set! a3-0 128) - (set! t0-0 32) - ) - ) - (calculate-rotation-and-color-for-slice 0 f0-2 a2-1 a3-0 t0-0 arg2) - ) (let ((f0-3 (-> *hud-parts* power 0 scale-blue))) - (set! (-> arg2 init-pos x) f0-3) - (set! (-> arg2 pos x) f0-3) - ) + (set! (-> arg2 init-pos x) f0-3) + (set! (-> arg2 pos x) f0-3) + ) 0 (none) ) (defun part-hud-eco-timer-02-func ((arg0 basic) (arg1 basic) (arg2 hud-particle)) - (let - ((f0-2 - (/ - (the - float - (the-as - uint - (- - (-> *target* fact-info-target eco-timeout) - (the-as - uint - (- - (-> *display* game-frame-counter) - (the-as int (-> *target* fact-info-target eco-pickup-time)) - ) + (let ((f0-2 + (/ (the float + (the-as + uint + (- (-> *target* fact-info-target eco-timeout) + (the-as + uint + (- (-> *display* game-frame-counter) (the-as int (-> *target* fact-info-target eco-pickup-time))) + ) + ) + ) + ) + (the float (the-as uint (-> *FACT-bank* eco-full-timeout))) + ) ) - ) + (a2-1 0) + (a3-0 64) + (t0-0 128) ) + (case (-> *target* fact-info-target eco-type) + ((1) + (set! a2-1 128) + (set! a3-0 96) + (set! t0-0 0) + ) + ((2) + (set! a2-1 128) + (set! a3-0 32) + (set! t0-0 0) + ) + ((4) + (set! a2-1 0) + (set! a3-0 128) + (set! t0-0 32) ) - (the float (the-as uint (-> *FACT-bank* eco-full-timeout))) ) - ) - (a2-1 0) - (a3-0 64) - (t0-0 128) + (calculate-rotation-and-color-for-slice 1 f0-2 a2-1 a3-0 t0-0 arg2) ) - (case (-> *target* fact-info-target eco-type) - ((1) - (set! a2-1 128) - (set! a3-0 96) - (set! t0-0 0) - ) - ((2) - (set! a2-1 128) - (set! a3-0 32) - (set! t0-0 0) - ) - ((4) - (set! a2-1 0) - (set! a3-0 128) - (set! t0-0 32) - ) - ) - (calculate-rotation-and-color-for-slice 1 f0-2 a2-1 a3-0 t0-0 arg2) - ) (let ((f0-3 (-> *hud-parts* power 0 scale-blue))) - (set! (-> arg2 init-pos x) f0-3) - (set! (-> arg2 pos x) f0-3) - ) + (set! (-> arg2 init-pos x) f0-3) + (set! (-> arg2 pos x) f0-3) + ) 0 (none) ) (defun part-hud-eco-timer-03-func ((arg0 basic) (arg1 basic) (arg2 hud-particle)) - (let - ((f0-2 - (/ - (the - float - (the-as - uint - (- - (-> *target* fact-info-target eco-timeout) - (the-as - uint - (- - (-> *display* game-frame-counter) - (the-as int (-> *target* fact-info-target eco-pickup-time)) - ) + (let ((f0-2 + (/ (the float + (the-as + uint + (- (-> *target* fact-info-target eco-timeout) + (the-as + uint + (- (-> *display* game-frame-counter) (the-as int (-> *target* fact-info-target eco-pickup-time))) + ) + ) + ) + ) + (the float (the-as uint (-> *FACT-bank* eco-full-timeout))) + ) ) - ) + (a2-1 0) + (a3-0 64) + (t0-0 128) ) + (case (-> *target* fact-info-target eco-type) + ((1) + (set! a2-1 128) + (set! a3-0 96) + (set! t0-0 0) + ) + ((2) + (set! a2-1 128) + (set! a3-0 32) + (set! t0-0 0) + ) + ((4) + (set! a2-1 0) + (set! a3-0 128) + (set! t0-0 32) ) - (the float (the-as uint (-> *FACT-bank* eco-full-timeout))) ) - ) - (a2-1 0) - (a3-0 64) - (t0-0 128) + (calculate-rotation-and-color-for-slice 2 f0-2 a2-1 a3-0 t0-0 arg2) ) - (case (-> *target* fact-info-target eco-type) - ((1) - (set! a2-1 128) - (set! a3-0 96) - (set! t0-0 0) - ) - ((2) - (set! a2-1 128) - (set! a3-0 32) - (set! t0-0 0) - ) - ((4) - (set! a2-1 0) - (set! a3-0 128) - (set! t0-0 32) - ) - ) - (calculate-rotation-and-color-for-slice 2 f0-2 a2-1 a3-0 t0-0 arg2) - ) (let ((f0-3 (-> *hud-parts* power 0 scale-blue))) - (set! (-> arg2 init-pos x) f0-3) - (set! (-> arg2 pos x) f0-3) - ) + (set! (-> arg2 init-pos x) f0-3) + (set! (-> arg2 pos x) f0-3) + ) 0 (none) ) -(defun - part-hud-eco-timer-backing-func - ((arg0 basic) (arg1 basic) (arg2 hud-particle)) +(defun part-hud-eco-timer-backing-func ((arg0 basic) (arg1 basic) (arg2 hud-particle)) (let ((f0-0 (-> *hud-parts* power 0 scale-backing))) - (set! (-> arg2 init-pos x) f0-0) - (set! (-> arg2 pos x) f0-0) - ) + (set! (-> arg2 init-pos x) f0-0) + (set! (-> arg2 pos x) f0-0) + ) 0 (none) ) (defun part-hud-eco-timer-func ((arg0 basic) (arg1 basic) (arg2 hud-particle)) (let ((f0-0 (-> *hud-parts* power 0 scale-timer))) - (set! (-> arg2 init-pos x) f0-0) - (set! (-> arg2 pos x) f0-0) - ) + (set! (-> arg2 init-pos x) f0-0) + (set! (-> arg2 pos x) f0-0) + ) 0 (none) ) (defmethod TODO-RENAME-19 hud-power ((obj hud-power)) (if *target* - (TODO-RENAME-16 - obj - (max - 0 - (min - (the-as - int - (- - (-> *target* fact-info-target eco-timeout) - (the-as - uint - (- - (-> *display* game-frame-counter) - (the-as int (-> *target* fact-info-target eco-pickup-time)) + (TODO-RENAME-16 + obj + (max + 0 + (min + (the-as + int + (- (-> *target* fact-info-target eco-timeout) + (the-as + uint + (- (-> *display* game-frame-counter) (the-as int (-> *target* fact-info-target eco-pickup-time))) + ) + ) + ) + (the-as int (-> *target* fact-info-target eco-timeout)) + ) ) - ) + (the-as int (-> *target* fact-info-target eco-timeout)) ) - ) - (the-as int (-> *target* fact-info-target eco-timeout)) ) - ) - (the-as int (-> *target* fact-info-target eco-timeout)) - ) - ) 0 (none) ) (defmethod init-particles! hud-power ((obj hud-power) (arg0 int)) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s5-0 (-> obj nb-of-particles))) - (set! (-> obj particles s5-0) (new 'static 'hud-particle)) - (set! - (-> obj particles s5-0 part) - (create-launch-control (-> *part-group-id-table* 83) obj) - ) - (set! (-> obj particles s5-0 init-pos x) 435.0) - (set! (-> obj particles s5-0 init-pos y) 370.0) - (set! (-> obj particles s5-0 init-pos z) 10.0) - (set! (-> obj particles s5-0 part matrix) -1) + (let ((s5-0 (-> obj nb-of-particles))) + (set! (-> obj particles s5-0) (new 'static 'hud-particle)) + (set! (-> obj particles s5-0 part) (create-launch-control (-> *part-group-id-table* 83) obj)) + (set! (-> obj particles s5-0 init-pos x) 435.0) + (set! (-> obj particles s5-0 init-pos y) 370.0) + (set! (-> obj particles s5-0 init-pos z) 10.0) + (set! (-> obj particles s5-0 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s5-1 (-> obj nb-of-particles))) - (set! (-> obj particles s5-1) (new 'static 'hud-particle)) - (set! - (-> obj particles s5-1 part) - (create-launch-control (-> *part-group-id-table* 84) obj) - ) - (set! (-> obj particles s5-1 init-pos x) 432.0) - (set! (-> obj particles s5-1 init-pos y) 368.0) - (set! (-> obj particles s5-1 init-pos z) 3.0) - (set! (-> obj particles s5-1 part matrix) -1) + (let ((s5-1 (-> obj nb-of-particles))) + (set! (-> obj particles s5-1) (new 'static 'hud-particle)) + (set! (-> obj particles s5-1 part) (create-launch-control (-> *part-group-id-table* 84) obj)) + (set! (-> obj particles s5-1 init-pos x) 432.0) + (set! (-> obj particles s5-1 init-pos y) 368.0) + (set! (-> obj particles s5-1 init-pos z) 3.0) + (set! (-> obj particles s5-1 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (when (< (-> obj nb-of-particles) (-> obj max-nb-of-particles)) - (let ((s5-2 (-> obj nb-of-particles))) - (set! (-> obj particles s5-2) (new 'static 'hud-particle)) - (set! - (-> obj particles s5-2 part) - (create-launch-control (-> *part-group-id-table* 82) obj) - ) - (set! (-> obj particles s5-2 init-pos x) 435.0) - (set! (-> obj particles s5-2 init-pos y) 370.0) - (set! (-> obj particles s5-2 init-pos z) 2.0) - (set! (-> obj particles s5-2 part matrix) -1) + (let ((s5-2 (-> obj nb-of-particles))) + (set! (-> obj particles s5-2) (new 'static 'hud-particle)) + (set! (-> obj particles s5-2 part) (create-launch-control (-> *part-group-id-table* 82) obj)) + (set! (-> obj particles s5-2 init-pos x) 435.0) + (set! (-> obj particles s5-2 init-pos y) 370.0) + (set! (-> obj particles s5-2 init-pos z) 2.0) + (set! (-> obj particles s5-2 part matrix) -1) + ) + (+! (-> obj nb-of-particles) 1) ) - (+! (-> obj nb-of-particles) 1) - ) (dotimes (s5-3 (-> obj nb-of-particles)) - (if (= (-> obj particles s5-3 part matrix) -1) - (set! (-> obj particles s5-3 part matrix) (sprite-allocate-user-hvdf)) + (if (= (-> obj particles s5-3 part matrix) -1) + (set! (-> obj particles s5-3 part matrix) (sprite-allocate-user-hvdf)) + ) ) - ) (animate! obj (= (get-aspect-ratio) 'aspect16x9) (= (get-video-mode) 'pal)) (set! (-> obj x-sgn) 1) (set! (-> obj y-sgn) 1) @@ -2423,232 +2084,102 @@ (defmethod animate! hud-power ((obj hud-power) (arg0 symbol) (arg1 symbol)) (cond - (arg0 - (set! (-> obj scale-blue) 7168.0) - (set! (-> obj scale-timer) 11468.8) - (set! (-> obj scale-backing) 8960.0) + (arg0 + (set! (-> obj scale-blue) 7168.0) + (set! (-> obj scale-timer) 11468.8) + (set! (-> obj scale-backing) 8960.0) + ) + (else + (set! (-> obj scale-blue) 8192.0) + (set! (-> obj scale-timer) 13107.2) + (set! (-> obj scale-backing) 10240.0) + ) ) - (else - (set! (-> obj scale-blue) 8192.0) - (set! (-> obj scale-timer) 13107.2) - (set! (-> obj scale-backing) 10240.0) - ) - ) 0 (none) ) (defun activate-hud ((arg0 process)) (let ((s5-0 (get-process *default-dead-pool* hud-pickups #x4000))) - (set! (-> *hud-parts* pickups) (the-as (pointer hud-pickups) (when s5-0 - (let - ((t9-1 - (method-of-type - hud-pickups - activate - ) - ) - ) - (t9-1 - (the-as - hud-pickups - s5-0 - ) - arg0 - 'hud-pickups - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - s5-0 - hud-init-by-other - 0 - ) - (-> - s5-0 - ppointer - ) - ) - ) + (set! (-> *hud-parts* pickups) + (the-as + (pointer hud-pickups) + (when s5-0 + (let ((t9-1 (method-of-type hud-pickups activate))) + (t9-1 (the-as hud-pickups s5-0) arg0 'hud-pickups (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 hud-init-by-other 0) + (-> s5-0 ppointer) + ) + ) + ) ) - ) (let ((s5-1 (get-process *default-dead-pool* hud-money #x4000))) - (set! (-> *hud-parts* money) (the-as (pointer hud-money) (when s5-1 - (let - ((t9-4 - (method-of-type - hud-money - activate - ) - ) - ) - (t9-4 - (the-as - hud-money - s5-1 - ) - arg0 - 'hud-money - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - s5-1 - hud-init-by-other - 0 - ) - (-> s5-1 ppointer) - ) - ) + (set! (-> *hud-parts* money) + (the-as (pointer hud-money) (when s5-1 + (let ((t9-4 (method-of-type hud-money activate))) + (t9-4 (the-as hud-money s5-1) arg0 'hud-money (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 hud-init-by-other 0) + (-> s5-1 ppointer) + ) + ) + ) ) - ) (let ((s5-2 (get-process *default-dead-pool* hud-fuel-cell #x4000))) - (set! (-> *hud-parts* fuel-cell) (the-as (pointer hud-fuel-cell) (when s5-2 - (let - ((t9-7 - (method-of-type - hud-fuel-cell - activate - ) - ) - ) - (t9-7 - (the-as - hud-fuel-cell - s5-2 - ) - arg0 - 'hud-fuel-cell - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - s5-2 - hud-init-by-other - 0 - ) - (-> - s5-2 - ppointer - ) - ) - ) + (set! (-> *hud-parts* fuel-cell) + (the-as + (pointer hud-fuel-cell) + (when s5-2 + (let ((t9-7 (method-of-type hud-fuel-cell activate))) + (t9-7 (the-as hud-fuel-cell s5-2) arg0 'hud-fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process s5-2 hud-init-by-other 0) + (-> s5-2 ppointer) + ) + ) + ) ) - ) (let ((s5-3 (get-process *default-dead-pool* hud-health #x4000))) - (set! (-> *hud-parts* health) (the-as (pointer hud-health) (when s5-3 - (let - ((t9-10 - (method-of-type - hud-health - activate - ) - ) - ) - (t9-10 - (the-as - hud-health - s5-3 - ) - arg0 - 'hud-health - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - s5-3 - hud-init-by-other - 0 - ) - (-> - s5-3 - ppointer - ) - ) - ) + (set! (-> *hud-parts* health) + (the-as + (pointer hud-health) + (when s5-3 + (let ((t9-10 (method-of-type hud-health activate))) + (t9-10 (the-as hud-health s5-3) arg0 'hud-health (the-as pointer #x70004000)) + ) + (run-now-in-process s5-3 hud-init-by-other 0) + (-> s5-3 ppointer) + ) + ) + ) ) - ) (let ((s5-4 (get-process *default-dead-pool* hud-buzzers #x4000))) - (set! (-> *hud-parts* buzzers) (the-as (pointer hud-buzzers) (when s5-4 - (let - ((t9-13 - (method-of-type - hud-buzzers - activate - ) - ) - ) - (t9-13 - (the-as - hud-buzzers - s5-4 - ) - arg0 - 'hud-buzzers - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - s5-4 - hud-init-by-other - 0 - ) - (-> - s5-4 - ppointer - ) - ) - ) + (set! (-> *hud-parts* buzzers) + (the-as + (pointer hud-buzzers) + (when s5-4 + (let ((t9-13 (method-of-type hud-buzzers activate))) + (t9-13 (the-as hud-buzzers s5-4) arg0 'hud-buzzers (the-as pointer #x70004000)) + ) + (run-now-in-process s5-4 hud-init-by-other 0) + (-> s5-4 ppointer) + ) + ) + ) ) - ) (let ((s5-5 (get-process *default-dead-pool* hud-power #x4000))) - (set! (-> *hud-parts* power) (the-as (pointer hud-power) (when s5-5 - (let - ((t9-16 - (method-of-type - hud-power - activate - ) - ) - ) - (t9-16 - (the-as - hud-power - s5-5 - ) - arg0 - 'hud-power - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - s5-5 - hud-init-by-other - 0 - ) - (-> s5-5 ppointer) - ) - ) + (set! (-> *hud-parts* power) + (the-as (pointer hud-power) (when s5-5 + (let ((t9-16 (method-of-type hud-power activate))) + (t9-16 (the-as hud-power s5-5) arg0 'hud-power (the-as pointer #x70004000)) + ) + (run-now-in-process s5-5 hud-init-by-other 0) + (-> s5-5 ppointer) + ) + ) + ) ) - ) (set! (-> *hud-parts* bike-speed) (the-as (pointer hud-bike-speed) #f)) (set! (-> *hud-parts* bike-heat) (the-as (pointer hud-bike-heat) #f)) (set! (-> *hud-parts* money-all) (the-as (pointer hud-money-all) #f)) @@ -2658,85 +2189,80 @@ (defun hide-hud () (when *target* - (dotimes (gp-0 9) - (if (-> *hud-parts* parts gp-0) - (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'hide) - ) + (dotimes (gp-0 9) + (if (-> *hud-parts* parts gp-0) + (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'hide) + ) + ) ) - ) 0 (none) ) (defun hide-bottom-hud () (when *target* - (dotimes (gp-0 4) - (if (-> *hud-parts* parts (+ gp-0 4)) - (send-event (ppointer->process (-> *hud-parts* parts (+ gp-0 4))) 'hide) - ) + (dotimes (gp-0 4) + (if (-> *hud-parts* parts (+ gp-0 4)) + (send-event (ppointer->process (-> *hud-parts* parts (+ gp-0 4))) 'hide) + ) + ) ) - ) 0 (none) ) (defun disable-hud ((arg0 int)) (when *target* - (dotimes (s5-0 9) - (when (-> *hud-parts* parts s5-0) - (if - (or - (!= (-> *hud-parts* parts s5-0) arg0) - (zero? (-> (the-as (pointer hud) (-> *hud-parts* parts s5-0)) 0 value)) - ) - (send-event (ppointer->process (-> *hud-parts* parts s5-0)) 'hide) + (dotimes (s5-0 9) + (when (-> *hud-parts* parts s5-0) + (if (or + (!= (-> *hud-parts* parts s5-0) arg0) + (zero? (-> (the-as (pointer hud) (-> *hud-parts* parts s5-0)) 0 value)) + ) + (send-event (ppointer->process (-> *hud-parts* parts s5-0)) 'hide) + ) + (if (!= (-> *hud-parts* parts s5-0) arg0) + (send-event (ppointer->process (-> *hud-parts* parts s5-0)) 'disable) + ) + ) ) - (if (!= (-> *hud-parts* parts s5-0) arg0) - (send-event (ppointer->process (-> *hud-parts* parts s5-0)) 'disable) - ) - ) ) - ) 0 (none) ) (defun enable-hud () (when *target* - (dotimes (gp-0 9) - (if (-> *hud-parts* parts gp-0) - (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'enable) - ) + (dotimes (gp-0 9) + (if (-> *hud-parts* parts gp-0) + (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'enable) + ) + ) ) - ) 0 (none) ) (defun hide-hud-quick () (when *target* - (dotimes (gp-0 9) - (if (-> *hud-parts* parts gp-0) - (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'hide-quick) - ) + (dotimes (gp-0 9) + (if (-> *hud-parts* parts gp-0) + (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'hide-quick) + ) + ) ) - ) 0 (none) ) (defun show-hud () - (when - (and - *target* - (or (not *progress-process*) (hidden? (-> *progress-process* 0))) + (when (and *target* (or (not *progress-process*) (hidden? (-> *progress-process* 0)))) + (dotimes (gp-0 9) + (if (-> *hud-parts* parts gp-0) + (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'show) + ) + ) ) - (dotimes (gp-0 9) - (if (-> *hud-parts* parts gp-0) - (send-event (ppointer->process (-> *hud-parts* parts gp-0)) 'show) - ) - ) - ) 0 (none) ) @@ -2745,18 +2271,14 @@ (let ((gp-0 (= arg0 'aspect16x9)) (s5-0 (= arg1 'pal)) ) - (when *target* - (dotimes (s4-0 9) - (if (-> *hud-parts* parts s4-0) - (animate! - (-> (the-as (pointer hud) (-> *hud-parts* parts s4-0)) 0) - gp-0 - s5-0 - ) + (when *target* + (dotimes (s4-0 9) + (if (-> *hud-parts* parts s4-0) + (animate! (-> (the-as (pointer hud) (-> *hud-parts* parts s4-0)) 0) gp-0 s5-0) + ) + ) ) - ) ) - ) 0 (none) ) @@ -2764,113 +2286,77 @@ (defun hud-hidden? () (local-vars (gp-0 symbol)) (cond - (*target* - (set! gp-0 #t) - (dotimes (s5-0 9) - (when (-> *hud-parts* parts s5-0) - (if - (not - (dummy-14 (-> (the-as (pointer hud) (-> *hud-parts* parts s5-0)) 0)) + (*target* + (set! gp-0 #t) + (dotimes (s5-0 9) + (when (-> *hud-parts* parts s5-0) + (if (not (dummy-14 (-> (the-as (pointer hud) (-> *hud-parts* parts s5-0)) 0))) + (set! gp-0 #f) + ) + ) ) - (set! gp-0 #f) - ) ) - ) + (else + (set! gp-0 #t) + ) ) - (else - (set! gp-0 #t) - ) - ) gp-0 ) (defun bottom-hud-hidden? () (local-vars (gp-0 symbol)) (cond - (*target* - (set! gp-0 #t) - (dotimes (s5-0 4) - (when (-> *hud-parts* parts (+ s5-0 4)) - (if - (not - (dummy-14 - (-> (the-as (pointer hud) (-> *hud-parts* parts (+ s5-0 4))) 0) - ) + (*target* + (set! gp-0 #t) + (dotimes (s5-0 4) + (when (-> *hud-parts* parts (+ s5-0 4)) + (if (not (dummy-14 (-> (the-as (pointer hud) (-> *hud-parts* parts (+ s5-0 4))) 0))) + (set! gp-0 #f) + ) + ) ) - (set! gp-0 #f) - ) ) - ) + (else + (set! gp-0 #t) + ) ) - (else - (set! gp-0 #t) - ) - ) gp-0 ) (defun activate-orb-all ((arg0 int)) (when (not (-> *hud-parts* money-all)) - (let ((s5-0 (get-process *default-dead-pool* hud-money-all #x4000))) - (set! (-> *hud-parts* money-all) (the-as (pointer hud-money-all) (when s5-0 - (let - ((t9-1 - (method-of-type - hud-money-all - activate - ) - ) - ) - (t9-1 - (the-as - hud-money-all - s5-0 - ) - *target* - 'hud-money-all - (the-as - pointer - #x70004000 - ) - ) - ) - (run-now-in-process - s5-0 - hud-init-by-other - arg0 - ) - (-> - s5-0 - ppointer - ) - ) - ) - ) + (let ((s5-0 (get-process *default-dead-pool* hud-money-all #x4000))) + (set! (-> *hud-parts* money-all) + (the-as + (pointer hud-money-all) + (when s5-0 + (let ((t9-1 (method-of-type hud-money-all activate))) + (t9-1 (the-as hud-money-all s5-0) *target* 'hud-money-all (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 hud-init-by-other arg0) + (-> s5-0 ppointer) + ) + ) + ) + ) ) - ) 0 ) (defbehavior convert-to-hud-object hud ((arg0 process-drawable) (arg1 hud)) (when arg1 - (logclear! (-> arg0 mask) (process-mask actor-pause)) - (let ((s4-0 (new 'stack-no-clear 'vector))) - (transform-point-vector-scale! s4-0 (-> arg0 root trans)) - (set! (-> arg0 root trans x) (+ -2048.0 (-> s4-0 x))) - (set! (-> arg0 root trans y) (* 2.0 (+ -2048.0 (-> s4-0 y)))) + (logclear! (-> arg0 mask) (process-mask actor-pause)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (transform-point-vector-scale! s4-0 (-> arg0 root trans)) + (set! (-> arg0 root trans x) (+ -2048.0 (-> s4-0 x))) + (set! (-> arg0 root trans y) (* 2.0 (+ -2048.0 (-> s4-0 y)))) + ) + (set! (-> arg0 root trans z) 9999999.0) + (set! (-> arg0 root trans w) 1.0) + (set-vector! (-> arg0 root scale) (inc-value arg1) (dec-value arg1) (inc-value arg1) 1.0) + (set! (-> arg0 draw dma-add-func) dma-add-process-drawable-hud) + (go hud-collecting (process->handle arg1)) ) - (set! (-> arg0 root trans z) 9999999.0) - (set! (-> arg0 root trans w) 1.0) - (set-vector! - (-> arg0 root scale) - (inc-value arg1) - (dec-value arg1) - (inc-value arg1) - 1.0 - ) - (set! (-> arg0 draw dma-add-func) dma-add-process-drawable-hud) - (go hud-collecting (process->handle arg1)) - ) 0 (none) ) diff --git a/goal_src/engine/ui/hud.gc b/goal_src/engine/ui/hud.gc index 3ed04ff7f..68efaf0c6 100644 --- a/goal_src/engine/ui/hud.gc +++ b/goal_src/engine/ui/hud.gc @@ -8,6 +8,533 @@ ;; TODO - for hud-classes (define-extern hud-init-by-other (function int none :behavior hud)) -(define-extern hud-collecting (state handle hud)) +(define-extern hud-collecting (state handle collectable)) +(define-extern hud-leaving (state int hud)) +(define-extern hud-in (state hud)) +(define-extern hud-arriving (state hud)) + +;; DECOMP BEGINS + +(defmethod relocate hud ((obj hud) (arg0 int)) + (dotimes (v1-0 (-> obj nb-of-particles)) + (if (nonzero? (-> obj particles v1-0 part)) + (&+! (-> obj particles v1-0 part) arg0) + ) + ) + (the-as hud ((method-of-type process relocate) obj arg0)) + ) + +(defmethod deactivate hud ((obj hud)) + (dotimes (v1-0 9) + (if (and (-> *hud-parts* parts v1-0) (= (ppointer->process (-> *hud-parts* parts v1-0)) obj)) + (set! (-> *hud-parts* parts v1-0) (the-as (pointer process) #f)) + ) + ) + (dotimes (s5-0 (-> obj nb-of-particles)) + (kill-and-free-particles (-> obj particles s5-0 part)) + (set! (-> obj particles s5-0 part matrix) -1) + ) + ((method-of-type process deactivate) obj) + (none) + ) + +(defmethod dummy-15 hud ((obj hud)) + (when (and (not (dummy-14 obj)) (not (paused?))) + (dotimes (s5-0 (-> obj nb-of-particles)) + (when (!= s5-0 (-> obj skip-particle)) + (if (or (!= (-> obj particles 0 pos x) 0.0) (!= (-> obj particles 0 pos y) 0.0)) + (spawn (-> obj particles s5-0 part) *null-vector*) + ) + ) + ) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-16 hud ((obj hud) (arg0 int) (arg1 int)) + (if (= arg0 (-> obj target-value)) + (set! (-> obj last-target-equal-time) (the-as uint (-> *display* base-frame-counter))) + ) + (when (and (not *progress-process*) (and + (!= (-> obj last-hide-time) (-> *display* base-frame-counter)) + (not (movie?)) + (>= (- (-> *display* base-frame-counter) (-> *game-info* letterbox-time)) 30) + (>= (- (-> *display* base-frame-counter) (-> *game-info* blackout-time)) 30) + (not (and *target* (logtest? (-> *target* state-flags) 256))) + ) + ) + (when (or + (!= (-> obj value) arg0) + (!= (-> obj value2) arg1) + (-> obj force-on-screen) + (or + (and (cpad-hold? 0 l2) (not (-> obj disable))) + (and (not *cheat-mode*) (cpad-hold? 0 r2)) + (-> obj first-init) + ) + ) + (cond + ((and + (-> obj increment-on-event) + (< (-> obj value) arg0) + (not (-> obj first-init)) + (< (- (-> *display* base-frame-counter) (the-as int (-> obj last-target-equal-time))) 450) + ) + (when (and + (!= (-> obj value) (-> obj target-value)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> obj last-increment-time))) 30) + ) + (sound-play-by-name (static-sound-name "cursor-options") (new-sound-id) 1024 0 0 1 #t) + (+! (-> obj value) 1) + (set! (-> obj last-increment-time) (the-as uint (-> *display* base-frame-counter))) + ) + ) + (else + (if (not (and + (not (-> obj first-init)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> obj last-target-equal-time))) 450) + ) + ) + (set! (-> obj value) arg0) + ) + (set! (-> obj target-value) arg0) + (set! (-> obj last-target-equal-time) (the-as uint (-> *display* base-frame-counter))) + ) + ) + (set! (-> obj value2) arg1) + (when (and (not (movie?)) (= *master-mode* 'game) (not (-> obj first-init)) (not (-> obj disable))) + (if (>= (-> obj friend) 0) + (send-event (ppointer->process (-> *hud-parts* parts (-> obj friend))) 'show) + ) + (go hud-arriving) + ) + (set! (-> obj trigger-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> obj first-init) #f) + ) + ) + 0 + (none) + ) + +(defmethod dummy-17 hud ((obj hud)) + (dotimes (v1-0 (-> obj nb-of-icons)) + (set-vector! + (-> obj icons v1-0 icon 0 root scale) + (* (-> obj icons v1-0 scale-x) (-> *video-parms* relative-x-scale)) + (* (-> obj icons v1-0 scale-y) (-> *video-parms* relative-y-scale)) + (* (-> obj icons v1-0 scale-x) (-> *video-parms* relative-x-scale)) + 1.0 + ) + (set! (-> obj icons v1-0 icon 0 root trans x) + (the float (+ (-> obj icons v1-0 icon-x) -256 (* (-> obj x-sgn) (-> obj offset)))) + ) + (set! (-> obj icons v1-0 icon 0 root trans y) + (- (+ (the float (-> obj icons v1-0 icon-y)) + (* (the float (-> obj y-sgn)) + (the float (-> obj offset)) + (-> *video-parms* relative-y-scale) + (-> *video-parms* relative-y-scale) + ) + (* (the float (-> obj y-offset)) (-> *video-parms* relative-x-scale-reciprical)) + ) + (the float (-> *video-parms* screen-sy)) + ) + ) + ) + 0 + (none) + ) + +(defmethod dummy-18 hud ((obj hud)) + (dotimes (s5-0 (-> obj nb-of-particles)) + (when (!= (-> obj skip-particle) -2) + (set! (-> obj particles s5-0 pos x) + (+ -256.0 (the float (* (-> obj x-sgn) (-> obj offset))) (-> obj particles s5-0 init-pos x)) + ) + (set! (-> obj particles s5-0 pos y) + (* 0.5 (- (* (-> *video-parms* relative-y-scale) + (+ (-> obj particles s5-0 init-pos y) + (the float (* (-> obj y-sgn) (-> obj offset))) + (* (the float (-> obj y-offset)) (-> *video-parms* relative-x-scale-reciprical)) + ) + ) + (the float (-> *video-parms* screen-sy)) + ) + ) + ) + (set! (-> obj particles s5-0 pos z) (-> obj particles s5-0 init-pos z)) + ) + (if (> (-> obj particles s5-0 part matrix) 0) + (set-vector! + (sprite-get-user-hvdf (-> obj particles s5-0 part matrix)) + (the float (+ (the int (-> obj particles s5-0 pos x)) 2048)) + (the float (+ (the int (-> obj particles s5-0 pos y)) 2048)) + (- (-> *math-camera* hvdf-off z) (* 1024.0 (-> obj particles s5-0 pos z))) + (-> *math-camera* hvdf-off w) + ) + ) + ) + 0 + (none) + ) + +(defmethod TODO-RENAME-19 hud ((obj hud)) + 0 + (none) + ) + +(defmethod init-particles! hud ((obj hud) (arg0 int)) + 0 + (none) + ) + +(defmethod first-icon-x hud ((obj hud)) + 0 + ) + +(defmethod first-icon-y hud ((obj hud)) + 0 + ) + +(defmethod inc-value hud ((obj hud)) + 0.0 + ) + +(defmethod dec-value hud ((obj hud)) + 0.0 + ) + +(defmethod animate! hud ((obj hud) (arg0 symbol) (arg1 symbol)) + 0 + (none) + ) + +(defmethod dummy-14 hud ((obj hud)) + (= (-> obj next-state name) 'hud-hidden) + (none) + ) + +(defstate hud-hidden (hud) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('show) + (if (and (not *progress-process*) (!= (-> self last-hide-time) (-> *display* base-frame-counter))) + (go hud-arriving) + ) + ) + (('hide) + (set! v0-0 (-> *display* base-frame-counter)) + (set! (-> self last-hide-time) (the-as uint v0-0)) + v0-0 + ) + (('hide-quick) + (set! v0-0 (-> *display* base-frame-counter)) + (set! (-> self last-hide-time) (the-as uint v0-0)) + v0-0 + ) + (('increment) + (set! v0-0 (+ (-> self target-value) 1)) + (set! (-> self target-value) (the-as int v0-0)) + v0-0 + ) + (('sync) + (set! v0-0 #t) + (set! (-> self first-init) (the-as symbol v0-0)) + v0-0 + ) + (('disable) + (set! v0-0 #t) + (set! (-> self disable) (the-as symbol v0-0)) + v0-0 + ) + (('enable) + (set! (-> self disable) #f) + #f + ) + ) + ) + :enter + (behavior () + (set! (-> self offset) 128) + (dummy-17 self) + (dummy-18 self) + (let ((gp-0 (-> self child))) + (while gp-0 + (send-event (ppointer->process gp-0) 'draw #f) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (dotimes (gp-1 (-> self nb-of-particles)) + (kill-and-free-particles (-> self particles gp-1 part)) + (set! (-> self particles gp-1 part matrix) -1) + ) + (none) + ) + :exit + (behavior () (set! (-> self y-offset) (-> self next-y-offset)) (none)) + :code + (behavior () + (logior! (-> self mask) (process-mask sleep-code)) + (while #t + (suspend) + ) + (none) + ) + :post + (behavior () + (if (-> self deactivate-when-hidden) + (deactivate self) + ) + (TODO-RENAME-19 self) + (none) + ) + ) + +(defstate hud-arriving (hud) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-3 object)) + (case arg2 + (('hide-quick) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self force-on-screen) #f) + (set! (-> self offset) 128) + (dummy-18 self) + (dummy-17 self) + (TODO-RENAME-19 self) + (go hud-hidden) + ) + (('hide) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self force-on-screen) #f) + (go hud-leaving 10) + ) + (('show) + (if (and (not *progress-process*) (!= (-> self last-hide-time) (-> *display* base-frame-counter))) + (go hud-arriving) + ) + ) + (('increment) + (set! v0-3 (+ (-> self target-value) 1)) + (set! (-> self target-value) (the-as int v0-3)) + v0-3 + ) + (('sync) + (set! v0-3 #t) + (set! (-> self first-init) (the-as symbol v0-3)) + v0-3 + ) + (('disable) + (set! v0-3 #t) + (set! (-> self disable) (the-as symbol v0-3)) + v0-3 + ) + (('enable) + (set! (-> self disable) #f) + #f + ) + ) + ) + :enter + (behavior () + (let ((gp-0 (-> self child))) + (while gp-0 + (send-event (ppointer->process gp-0) 'draw #t) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (dotimes (gp-1 (-> self nb-of-particles)) + (if (= (-> self particles gp-1 part matrix) -1) + (set! (-> self particles gp-1 part matrix) (sprite-allocate-user-hvdf)) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (if (not (paused?)) + (set! (-> self offset) (seekl (-> self offset) 0 (the int (* 15.0 (-> *display* time-adjust-ratio))))) + ) + (dummy-17 self) + (if (<= (-> self offset) 0) + (go hud-in) + ) + (when (movie?) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self force-on-screen) #f) + (set! (-> self offset) 128) + (dummy-18 self) + (dummy-17 self) + (TODO-RENAME-19 self) + (go hud-hidden) + ) + (suspend) + ) + (none) + ) + :post + (behavior () (TODO-RENAME-19 self) (dummy-18 self) (dummy-15 self) (none)) + ) + +(defstate hud-in (hud) + :event + (-> hud-arriving event) + :code + (behavior () + (set! (-> self trigger-time) (the-as uint (-> *display* base-frame-counter))) + (while (and (< (- (-> *display* base-frame-counter) (the-as int (-> self trigger-time))) 600) (not (movie?))) + (set! (-> self offset) 0) + (dummy-17 self) + (suspend) + ) + (when (movie?) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self force-on-screen) #f) + (set! (-> self offset) 128) + (dummy-18 self) + (dummy-17 self) + (TODO-RENAME-19 self) + (go hud-hidden) + ) + (go hud-leaving 5) + (none) + ) + :post + (-> hud-arriving post) + ) + +(defstate hud-leaving (hud) + :event + (-> hud-arriving event) + :code + (behavior ((arg0 int)) + (while #t + (if (not (paused?)) + (set! (-> self offset) + (seekl (-> self offset) 128 (the int (* (the float arg0) (-> *display* time-adjust-ratio)))) + ) + ) + (dummy-17 self) + (when (movie?) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self force-on-screen) #f) + (set! (-> self offset) 128) + (dummy-18 self) + (dummy-17 self) + (TODO-RENAME-19 self) + (go hud-hidden) + ) + (if (>= (-> self offset) 128) + (go hud-hidden) + ) + (suspend) + ) + (none) + ) + :post + (-> hud-arriving post) + ) + +(defbehavior hud-init-by-other hud ((arg0 int)) + (set! (-> self nb-of-icons) 0) + (set! (-> self nb-of-particles) 0) + (set! (-> self max-nb-of-particles) 7) + (set! (-> self first-init) #t) + (set! (-> self friend) -1) + (set! (-> self last-increment-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self last-target-equal-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self increment-on-event) #f) + (set! (-> self skip-particle) -1) + (set! (-> self disable) #f) + (set! (-> self force-on-screen) #f) + (set! (-> self deactivate-when-hidden) #f) + (set! (-> self y-offset) 0) + (set! (-> self next-y-offset) 0) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (logior! (-> self mask) (process-mask menu)) + (logclear! (-> self mask) (process-mask pause progress)) + (init-particles! self arg0) + (dummy-17 self) + (dummy-18 self) + (go hud-hidden) + (none) + ) + +(defun send-hud-increment-event ((arg0 hud)) + (if (-> arg0 increment-on-event) + (send-event arg0 'increment) + ) + ) + +(defstate hud-collecting (collectable) + :trans + (behavior () + (case (-> self type) + ((fuel-cell) + (fuel-cell-animate) + ) + ) + (none) + ) + :code + (behavior ((arg0 handle)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let ((s4-0 (handle->process arg0))) + (set! (-> s5-0 x) (- (the float (+ (first-icon-x (the-as hud s4-0)) -256)) (-> self root-override trans x))) + (set! (-> s5-0 y) (- (the float (- (first-icon-y (the-as hud s4-0)) (-> *video-parms* screen-sy))) + (-> self root-override trans y) + ) + ) + ) + (let ((f30-0 4.0) + (f26-0 0.0) + (f28-0 (-> self root-override scale x)) + (f24-0 (-> self root-override scale y)) + (f22-0 (-> self root-override scale z)) + ) + (while #t + (let ((f0-7 (* f30-0 (-> *display* seconds-per-frame)))) + (+! f26-0 f0-7) + (when (< 1.0 f26-0) + (let ((f0-8 (- f26-0 f0-7))) + (set! f0-7 (- 1.0 f0-8)) + ) + (set! f26-0 1.0) + ) + (+! (-> self root-override trans x) (* f0-7 (-> s5-0 x))) + (+! (-> self root-override trans y) (* f0-7 (-> s5-0 y))) + ) + (set-vector! + (-> self root-override scale) + (* f28-0 (-> *video-parms* relative-x-scale)) + (* f24-0 (-> *video-parms* relative-y-scale) (-> *video-parms* relative-y-scale)) + (* f22-0 (-> *video-parms* relative-x-scale)) + 1.0 + ) + (let ((a0-12 (-> self root-override))) + (set-yaw-angle-clear-roll-pitch! + a0-12 + (- (y-angle a0-12) (* 182.04445 (* 8.0 (-> *display* time-adjust-ratio)))) + ) + ) + (suspend) + (when (>= f26-0 1.0) + (send-hud-increment-event (the-as hud (handle->process arg0))) + (deactivate self) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior collectable) ja-post) + ) + + + -;; decomp begins diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc index fb173932b..090f3c84d 100644 --- a/goal_src/engine/ui/text-h.gc +++ b/goal_src/engine/ui/text-h.gc @@ -308,7 +308,6 @@ (swamp-tethers-completion-sage-precursor-arm #x36b) - (village2-warp-gate-reminder #x36f) (village2-warp-gate-reminder-annoyed #x370) (village2-warp-gate-reminder-very-annoyed #x371) @@ -320,6 +319,7 @@ (rolling-race-record-string-prefix #x374) (rolling-race-new-record-string-prefix #x375) (rolling-race-try-again-string #x376) + (rolling-race-start-race-aborted #x377) ;; double check this (village3-miner-money #x400) (village3-oracle-money #x401) diff --git a/goal_src/levels/darkcave/darkcave-obs.gc b/goal_src/levels/darkcave/darkcave-obs.gc index ce82b6e04..6c7e498af 100644 --- a/goal_src/levels/darkcave/darkcave-obs.gc +++ b/goal_src/levels/darkcave/darkcave-obs.gc @@ -5,12 +5,7 @@ ;; name in dgo: darkcave-obs ;; dgos: DAR, L1 -(define-extern *cavecrystal-sg* skeleton-group) - -(declare-type cavecrystal process-drawable) - -(define-extern cavecrystal-idle (state cavecrystal)) -(define-extern cavecrystal-active (state cavecrystal)) +; (define-extern *cavecrystal-sg* skeleton-group) ;; DECOMP BEGINS @@ -40,6 +35,10 @@ (update-connected-crystals! (_type_) none 20) (compute-glow (_type_) float 21) ) + (:states + cavecrystal-active + cavecrystal-idle + ) ) @@ -53,220 +52,159 @@ (defmethod update-connected-crystals! cavecrystal ((obj cavecrystal)) (when (-> obj is-master?) - (let ((v1-2 (-> *display* base-frame-counter))) - (when (!= (-> obj last-updated-user-lighting) v1-2) - (set! (-> obj last-updated-user-lighting) (the-as uint v1-2)) - (execute-connections *cavecrystal-light-control*) - ) + (let ((v1-2 (-> *display* base-frame-counter))) + (when (!= (-> obj last-updated-user-lighting) v1-2) + (set! (-> obj last-updated-user-lighting) (the-as uint v1-2)) + (execute-connections *cavecrystal-light-control*) + ) + ) ) - ) (none) ) (defmethod compute-glow cavecrystal ((obj cavecrystal)) - (set! - (-> obj prev-compute-glow-time) - (the-as uint (-> *display* game-frame-counter)) - ) - (let* - ((gp-1 - (max - 1 - (the-as - int - (+ - (- 1 (the-as int (-> obj activated-time))) - (-> *display* game-frame-counter) - ) + (set! (-> obj prev-compute-glow-time) (the-as uint (-> *display* game-frame-counter))) + (let* ((gp-1 (max 1 (the-as int (+ (- 1 (the-as int (-> obj activated-time))) (-> *display* game-frame-counter))))) + (f0-2 + (/ (the float (mod (+ (-> *display* base-frame-counter) (-> obj glow-wf-offset)) (-> obj glow-wf-period))) + (the float (-> obj glow-wf-period)) + ) + ) + (f30-1 (* 0.1 (cos (* 65536.0 f0-2)))) + ) + (cond + ((>= 20 (the-as int gp-1)) + (let ((v1-11 (* 0.05 (the float gp-1)))) + (fmax 0.0 (fmin 2.0 (+ (* 2.0 v1-11) (* v1-11 f30-1)))) + ) ) - ) - ) - (f0-2 - (/ - (the - float - (mod - (+ (-> *display* base-frame-counter) (-> obj glow-wf-offset)) - (-> obj glow-wf-period) - ) + ((>= 180 (the-as int gp-1)) + (let ((a2-0 (* 0.00625 (the float (+ gp-1 -20))))) + (fmin 2.0 (+ (lerp 2.0 1.0 a2-0) f30-1)) + ) ) - (the float (-> obj glow-wf-period)) + ((>= (the-as int (-> obj start-fade-time)) (the-as int gp-1)) + (+ 1.0 f30-1) + ) + (else + (let ((v1-20 (fmin 1.0 (* 0.004761905 (the float (- gp-1 (-> obj start-fade-time))))))) + (fmax 0.0 (- (+ 1.0 (* (- 1.0 v1-20) f30-1)) v1-20)) + ) + ) ) - ) - (f30-1 (* 0.1 (cos (* 65536.0 f0-2)))) ) - (cond - ((>= 20 (the-as int gp-1)) - (let ((v1-11 (* 0.05 (the float gp-1)))) - (fmax 0.0 (fmin 2.0 (+ (* 2.0 v1-11) (* v1-11 f30-1)))) - ) - ) - ((>= 180 (the-as int gp-1)) - (let ((a2-0 (* 0.00625 (the float (+ gp-1 -20))))) - (fmin 2.0 (+ (lerp 2.0 1.0 a2-0) f30-1)) - ) - ) - ((>= (the-as int (-> obj start-fade-time)) (the-as int gp-1)) - (+ 1.0 f30-1) - ) - (else - (let - ((v1-20 - (fmin 1.0 (* 0.004761905 (the float (- gp-1 (-> obj start-fade-time))))) - ) - ) - (fmax 0.0 (- (+ 1.0 (* (- 1.0 v1-20) f30-1)) v1-20)) - ) - ) - ) - ) ) (defstate cavecrystal-idle (cavecrystal) :event - (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (case arg2 - (('attack) - (go cavecrystal-active) - ) - ) - ) + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('attack) + (go cavecrystal-active) + ) + ) + ) :trans (behavior () - (if - (and - *target* - (>= - 40960.0 - (vector-vector-distance - (-> self root-override trans) - (-> *target* control trans) - ) - ) - ) - (level-hint-spawn - (game-text-id darkcave-light-crystal-hint) - "sksp0333" - (the-as entity #f) - *entity-pool* - (game-task none) - ) + (if (and *target* (>= 40960.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (level-hint-spawn + (game-text-id darkcave-light-crystal-hint) + "sksp0333" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (update-connected-crystals! self) + (none) ) - (update-connected-crystals! self) - (none) - ) :code - (behavior () - (logior! (-> self mask) (process-mask sleep-code)) - (suspend) - 0 - (none) - ) + (behavior () (logior! (-> self mask) (process-mask sleep-code)) (suspend) 0 (none)) ) (defstate cavecrystal-active (cavecrystal) :event (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) - (let ((v1-0 arg2)) - (the-as object (when (= v1-0 'attack) - (let ((v1-1 (-> arg3 param 2))) - (cond - ((!= v1-1 (-> self player-attack-id)) - (set! (-> self player-attack-id) v1-1) - (set! - (-> self activated-time) - (the-as uint (-> *display* game-frame-counter)) - ) - #t + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'attack) + (let ((v1-1 (-> arg3 param 2))) + (cond + ((!= v1-1 (-> self player-attack-id)) + (set! (-> self player-attack-id) v1-1) + (set! (-> self activated-time) (the-as uint (-> *display* game-frame-counter))) + #t + ) + (else + #f + ) + ) + ) ) - (else - #f - ) - ) - ) - ) - ) + ) + ) ) - ) :enter (behavior () - (logclear! (-> self mask) (process-mask actor-pause)) - (set! - (-> self activated-time) - (the-as uint (-> *display* game-frame-counter)) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self activated-time) (the-as uint (-> *display* game-frame-counter))) + (set! (-> self prev-compute-glow-time) (the-as uint (-> *display* game-frame-counter))) + (none) ) - (set! - (-> self prev-compute-glow-time) - (the-as uint (-> *display* game-frame-counter)) - ) - (none) - ) :exit (behavior () - (stop! (-> self sound)) - (if (not (-> self is-master?)) - (logior! (-> self mask) (process-mask actor-pause)) + (stop! (-> self sound)) + (if (not (-> self is-master?)) + (logior! (-> self mask) (process-mask actor-pause)) + ) + (none) ) - (none) - ) :trans (behavior () - (let ((f30-0 (compute-glow self))) - (set! (-> self glow-u) f30-0) - (let ((gp-0 (new 'stack-no-clear 'vector)) - (f28-0 1.993) + (let ((f30-0 (compute-glow self))) + (set! (-> self glow-u) f30-0) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (f28-0 1.993) + ) + (let ((s5-0 (-> self draw color-mult))) + (vector-! gp-0 (-> self on-color-mult) (-> self off-color-mult)) + (vector+*! s5-0 (-> self off-color-mult) gp-0 f30-0) + (set! (-> s5-0 x) (fmax 0.0 (fmin (-> s5-0 x) f28-0))) + (set! (-> s5-0 y) (fmax 0.0 (fmin (-> s5-0 y) f28-0))) + (set! (-> s5-0 z) (fmax 0.0 (fmin (-> s5-0 z) f28-0))) + (set! (-> s5-0 w) 1.0) ) - (let ((s5-0 (-> self draw color-mult))) - (vector-! gp-0 (-> self on-color-mult) (-> self off-color-mult)) - (vector+*! s5-0 (-> self off-color-mult) gp-0 f30-0) - (set! (-> s5-0 x) (fmax 0.0 (fmin (-> s5-0 x) f28-0))) - (set! (-> s5-0 y) (fmax 0.0 (fmin (-> s5-0 y) f28-0))) - (set! (-> s5-0 z) (fmax 0.0 (fmin (-> s5-0 z) f28-0))) - (set! (-> s5-0 w) 1.0) + (let ((s5-1 (-> self draw color-emissive))) + (vector-! gp-0 (-> self on-color-emissive) (-> self off-color-emissive)) + (vector+*! s5-1 (-> self off-color-emissive) gp-0 f30-0) + (set! (-> s5-1 x) (fmax 0.0 (fmin (-> s5-1 x) f28-0))) + (set! (-> s5-1 y) (fmax 0.0 (fmin (-> s5-1 y) f28-0))) + (set! (-> s5-1 z) (fmax 0.0 (fmin (-> s5-1 z) f28-0))) + (set! (-> s5-1 w) 0.0) + ) + ) + (TODO-RENAME-9 *cavecrystal-light-control* (-> self crystal-id) (-> self glow-u) self) + (update-connected-crystals! self) + (when (>= 0.0 f30-0) + (level-hint-spawn + (game-text-id darkcave-light-crystal-low-light-hint) + "sksp0332" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (go cavecrystal-idle) + ) ) - (let ((s5-1 (-> self draw color-emissive))) - (vector-! gp-0 (-> self on-color-emissive) (-> self off-color-emissive)) - (vector+*! s5-1 (-> self off-color-emissive) gp-0 f30-0) - (set! (-> s5-1 x) (fmax 0.0 (fmin (-> s5-1 x) f28-0))) - (set! (-> s5-1 y) (fmax 0.0 (fmin (-> s5-1 y) f28-0))) - (set! (-> s5-1 z) (fmax 0.0 (fmin (-> s5-1 z) f28-0))) - (set! (-> s5-1 w) 0.0) - ) - ) - (TODO-RENAME-9 - *cavecrystal-light-control* - (-> self crystal-id) - (-> self glow-u) - self - ) - (update-connected-crystals! self) - (when (>= 0.0 f30-0) - (level-hint-spawn - (game-text-id darkcave-light-crystal-low-light-hint) - "sksp0332" - (the-as entity #f) - *entity-pool* - (game-task none) - ) - (go cavecrystal-idle) - ) + (update! (-> self sound)) + (none) ) - (update! (-> self sound)) - (none) - ) :code - (behavior () - (logior! (-> self mask) (process-mask sleep-code)) - (suspend) - 0 - (none) - ) + (behavior () (logior! (-> self mask) (process-mask sleep-code)) (suspend) 0 (none)) ) (defmethod deactivate cavecrystal ((obj cavecrystal)) (if (nonzero? (-> obj sound)) - (stop! (-> obj sound)) - ) + (stop! (-> obj sound)) + ) ((method-of-type process-drawable deactivate) obj) (none) ) @@ -279,46 +217,31 @@ (set-vector! (-> obj off-color-emissive) 0.0 0.0 0.0 0.0) (set-vector! (-> obj on-color-mult) 1.0 1.0 1.0 1.0) (set-vector! (-> obj on-color-emissive) 0.0 0.0 0.0 0.0) - (let - ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) - (let - ((s3-0 - (new - 'process - 'collide-shape-prim-mesh - s4-0 - (the-as uint 0) - (the-as uint 0) - ) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-others)))) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 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) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 19251.2 0.0 22118.4) + (set-root-prim! s4-0 s3-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) 0) - (set-vector! (-> s3-0 local-sphere) 0.0 19251.2 0.0 22118.4) - (set-root-prim! s4-0 s3-0) + (set! (-> s4-0 nav-radius) 4915.2) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) ) - (set! (-> s4-0 nav-radius) 4915.2) - (backup-collide-with-as s4-0) - (set! (-> obj root-override) s4-0) - ) (set! (-> obj link) (new 'process 'actor-link-info obj)) (set! (-> obj crystal-id) (actor-count-before (-> obj link))) (set! (-> obj is-master?) (= (-> obj crystal-id) 3)) (set! (-> obj glow-wf-period) (rand-vu-int-range 225 375)) (set! (-> obj glow-wf-offset) (rand-vu-int-range 0 300)) (if (-> obj is-master?) - (logclear! (-> obj mask) (process-mask actor-pause)) - ) - (set! - (-> obj start-fade-time) - (the-as - uint - (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 8.0))) - ) - ) + (logclear! (-> obj mask) (process-mask actor-pause)) + ) + (set! (-> obj start-fade-time) + (the-as uint (the int (* 300.0 (res-lump-float (-> obj entity) 'timeout :default 8.0)))) + ) (process-drawable-from-entity! obj arg0) (initialize-skeleton obj *cavecrystal-sg* '()) (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) @@ -326,32 +249,30 @@ (set! (-> obj draw color-emissive quad) (-> obj off-color-emissive quad)) (ja-channel-push! 1 0) (let ((s5-1 (-> obj skel root-channel 0))) - (joint-control-channel-group-eval! - s5-1 - (the-as art-joint-anim (-> obj draw art-group data 3)) - num-func-identity + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) ) - (set! (-> s5-1 frame-num) 0.0) - ) (ja-post) (dummy-47 (-> obj root-override)) (TODO-RENAME-9 *cavecrystal-light-control* (-> obj crystal-id) 0.0 obj) - (set! - (-> obj sound) - (new - 'process - 'ambient-sound - (new 'static 'sound-spec - :mask #x80 - :num 1.0 - :group #x1 - :sound-name (static-sound-name "crystal-on") - :volume #x400 - :fo-max 80 - ) - (-> obj root-override trans) - ) - ) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "crystal-on") + :volume #x400 + :fo-max 80 + ) + (-> obj root-override trans) + ) + ) (go cavecrystal-idle) (none) ) diff --git a/goal_src/levels/lavatube/lavatube-energy.gc b/goal_src/levels/lavatube/lavatube-energy.gc index 004f11c87..81eded1fe 100644 --- a/goal_src/levels/lavatube/lavatube-energy.gc +++ b/goal_src/levels/lavatube/lavatube-energy.gc @@ -5,3 +5,1922 @@ ;; name in dgo: lavatube-energy ;; dgos: L1, LAV +;; DECOMP BEGINS + +(set! (-> *part-group-id-table* 544) (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :name "group-energyarm" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1931 :fade-after (meters 120.0)) + (sp-item 2167 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + ) + :bounds (new 'static 'sphere :w 16384.0) + ) + ) + +(set! (-> *part-id-table* 1931) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (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 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.016666668)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -1.0666667) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit0 bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2167) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 1.0 8.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.3) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.08) 1.0) + (sp-flt spt-scalevel-x (meters -0.00055555557)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.2) + (sp-flt spt-fade-b -0.2) + (sp-flt spt-fade-a -0.6) + (sp-flt spt-accel-y -6.826667) + (sp-flt spt-friction 0.94) + (sp-int-plain-rnd spt-timer 30 149 1) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 545) (new 'static 'sparticle-launch-group + :length 8 + :duration #xbb8 + :linger-duration #x5dc + :name "group-energyball-always" + :launcher + (new 'static 'inline-array sparticle-group-item 8 + (sp-item 2168 :fade-after (meters 80.0) :falloff-to (meters 80.0)) + (sp-item 2169 :fade-after (meters 120.0)) + (sp-item 2170 :fade-after (meters 120.0)) + (sp-item 2171 :fade-after (meters 120.0) :flags (is-3d)) + (sp-item 2172 :fade-after (meters 80.0) :falloff-to (meters 80.0)) + (sp-item 2173 :fade-after (meters 120.0) :falloff-to (meters 120.0)) + (sp-item 2174 :fade-after (meters 120.0) :falloff-to (meters 120.0)) + (sp-item 2175 :fade-after (meters 120.0) :falloff-to (meters 120.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! (-> *part-id-table* 2168) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 8.0) + (sp-flt spt-y (meters -5.5)) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 8.0 24.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.35555556) + (sp-rnd-flt spt-accel-y -1.6384 -1.6384 1.0) + (sp-flt spt-friction 0.9) + (sp-int-plain-rnd spt-timer 120 59 1) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int-plain-rnd spt-next-time 30 119 1) + (sp-launcher-by-id spt-next-launcher 2176) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 90.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2176) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-scale-x (meters 1.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 48.0) + (sp-int spt-timer 5) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2177) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-friction 0.9) + (sp-int-plain-rnd spt-timer 10 41 1) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int-plain-rnd spt-next-time 10 41 1) + (sp-launcher-by-id spt-next-launcher 2176) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 5.5)) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2169) (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-y (meters -5.5)) + (sp-rnd-flt spt-scale-x (meters 8.0) (meters 4.0) 1.0) + (sp-flt spt-scale-y (meters 24.0)) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.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-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2170) (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 -5.5)) + (sp-rnd-flt spt-scale-x (meters 12.0) (meters 8.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2171) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -5.0)) + (sp-rnd-flt spt-scale-x (meters 12.0) (meters 8.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 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.040404037)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.12121211) + (sp-int spt-timer 198) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2172) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 2.0) + (sp-flt spt-y (meters -5.5)) + (sp-flt spt-scale-x (meters 0.5)) + (sp-rnd-flt spt-rot-z (degrees 70.0) (degrees 40.0) 1.0) + (sp-flt spt-scale-y (meters 12.0)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 0.85333335)) + (sp-flt spt-fade-g -3.2666667) + (sp-flt spt-fade-b -1.0666667) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2173) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 8.0) (meters 6.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 196.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -6.4) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 2178) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2178) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-g -4.266667) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2174) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x23 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 8.0) (meters 4.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 196.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -6.4) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 2178) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2175) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x24 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 8.0) (meters 4.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 196.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -6.4) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 2178) + (sp-end) + ) + ) + ) + +(set! (-> *part-group-id-table* 546) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-energyball-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 2179 :period 600 :length 5) + (sp-item 2180 :period 600 :length 40) + (sp-item 2181 :period 600 :length 20) + (sp-item 2182 :period 600 :length 20) + ) + :bounds (new 'static 'sphere :w 184320.0) + ) + ) + +(set! (-> *part-id-table* 2180) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 8.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.26666668) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 89 1) + (sp-launcher-by-id spt-next-launcher 2183) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2183) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.0666667) (sp-end)) + ) + ) + +(set! (-> *part-id-table* 2182) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 6.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 0.4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 24.0)) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.6666666)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2179) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 40.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 2181) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 12.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-rnd-flt spt-scale-x (meters 5.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y 0.68266666 0.13653333 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 6.0) 1.0) + (sp-end) + ) + ) + ) + +(deftype energydoor (process-drawable) + ((root-override collide-shape-moving :offset 112) + (alt-actor entity-actor :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + energydoor-closed-till-near + energydoor-closed-till-task + energydoor-closing + energydoor-opened + energydoor-opening + ) + ) + + +(defskelgroup *energydoor-sg* energydoor + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 14 0 35) + :longest-edge (meters 0) + ) + +(defbehavior energydoor-player-dist energydoor () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'matrix)) + ) + (vector-! gp-0 (target-pos 0) (-> self root-override trans)) + (quaternion->matrix s5-0 (-> self root-override quat)) + (vector-dot gp-0 (the-as vector (-> s5-0 vector))) + ) + ) + +(defbehavior energydoor-open-handler energydoor ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'open?) + #t + ) + ) + ) + ) + +(defbehavior energydoor-closed-handler energydoor ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('open) + (go energydoor-opening) + ) + (('open?) + #f + ) + ) + ) + +(defstate energydoor-closing (energydoor) + :event + energydoor-closed-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) 0.0) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) 0.0) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (if (or + (task-closed? (-> self entity extra perm task) (task-status need-resolution)) + (< (energydoor-player-dist) 0.0) + ) + (go energydoor-closed-till-near) + (go energydoor-closed-till-task) + ) + (none) + ) + :post + (the-as (function none :behavior energydoor) transform-post) + ) + +(defstate energydoor-opened (energydoor) + :event + energydoor-open-handler + :trans + (behavior () (none)) ;; TODO fix me + :code + (behavior () + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! (-> v1-2 frame-num) (the float (+ (-> v1-2 frame-group data 0 length) -1))) + ) + (transform-post) + (while #t + (suspend) + ) + (none) + ) + ) + +(defstate energydoor-opening (energydoor) + :event + energydoor-open-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go energydoor-opened) + (none) + ) + :post + (the-as (function none :behavior energydoor) transform-post) + ) + +(defstate energydoor-closed-till-task (energydoor) + :event + energydoor-closed-handler + :trans + (behavior () + (cond + ((task-closed? (-> self entity extra perm task) (task-status need-resolution)) + (go energydoor-opening) + ) + ((let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'open?) + (let ((t9-2 send-event-function) + (v1-5 (-> self alt-actor)) + ) + (t9-2 + (if v1-5 + (-> v1-5 extra process) + ) + a1-1 + ) + ) + ) + (go energydoor-opening) + ) + ) + (none) + ) + :code + (behavior () + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! (-> v1-2 frame-num) 0.0) + ) + (transform-post) + (while #t + (suspend) + ) + (none) + ) + ) + +(defstate energydoor-closed-till-near (energydoor) + :event + energydoor-closed-handler + :trans + (behavior () + (if (< -409600.0 (energydoor-player-dist)) + (go energydoor-opening) + ) + (none) + ) + :code + (behavior () + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! (-> v1-2 frame-num) 0.0) + ) + (transform-post) + (while #t + (suspend) + ) + (none) + ) + ) + +(defmethod init-from-entity! energydoor ((obj energydoor) (arg0 entity-actor)) + (with-pp + (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 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) 8) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 102400.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 *energydoor-sg* '()) + (set! (-> obj root-override pause-adjust-distance) 245760.0) + (set! (-> obj alt-actor) (entity-actor-lookup arg0 'alt-actor 0)) + (cond + ((< (energydoor-player-dist) -409600.0) + (go energydoor-closed-till-near) + ) + ((task-closed? (-> obj entity extra perm task) (task-status need-resolution)) + (go energydoor-opened) + ) + (else + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) pp) + (set! (-> a1-9 num-params) 0) + (set! (-> a1-9 message) 'open?) + (let ((t9-12 send-event-function) + (v1-25 (-> obj alt-actor)) + ) + (cond + ((t9-12 + (if v1-25 + (-> v1-25 extra process) + ) + a1-9 + ) + (go energydoor-opened) + ) + ((< 0.0 (energydoor-player-dist)) + (go energydoor-closed-till-task) + ) + (else + (go energydoor-opened) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +(deftype energybase (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + energybase-idle + energybase-stopped + energybase-stopping + ) + ) + + +(defskelgroup *energybase-sg* energybase + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 40 0 40) + :longest-edge (meters 0) + ) + +(defstate energybase-stopped (energybase) + :code + (behavior () + (ja-post) + (while #t + (suspend) + ) + (none) + ) + ) + +(defstate energybase-stopping (energybase) + :code + (behavior () + (let ((f30-0 1.0)) + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) f30-0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! f30-0 (- f30-0 (* 0.002 (-> *display* time-adjust-ratio)))) + (if (< f30-0 0.0) + (go energybase-stopped) + ) + (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) f30-0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energybase) ja-post) + ) + +(defstate energybase-idle (energybase) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('stop) + (go energybase-stopping) + ) + ) + ) + :code + (behavior () + (while #t + (if (and *target* (>= 307200.0 (vector-vector-distance (-> self root trans) (-> *target* control trans)))) + (level-hint-spawn + (game-text-id lavatube-shoot-the-spheres) + "sksp0375" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-2 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energybase) ja-post) + ) + +(defmethod init-from-entity! energybase ((obj energybase) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *energybase-sg* '()) + (if (task-closed? (game-task lavatube-balls) (task-status need-resolution)) + (go energybase-stopped) + (go energybase-idle) + ) + (none) + ) + +(deftype energyhub (process-drawable) + ((self-override energyhub :offset 28) + (alts entity-actor 3 :offset-assert 176) + (arm handle 5 :offset-assert 192) + (rot-mat matrix :inline :offset-assert 240) + (rot-mat-init matrix :inline :offset-assert 304) + (rotation-speed oscillating-float :inline :offset-assert 368) + (rotation-speed-offset delayed-rand-float :inline :offset-assert 392) + (y-rotation float :offset-assert 420) + (x-rotation float :offset-assert 424) + (palette-val float :offset-assert 428) + ) + :heap-base #x140 + :method-count-assert 20 + :size-assert #x1b0 + :flag-assert #x14014001b0 + (:states + energyhub-idle + energyhub-stop + energyhub-stopped + ) + ) + + +(deftype energyarm (process-drawable) + ((parent-overide (pointer energyhub) :offset 12) + (self-override energyarm :offset 28) + (root-override collide-shape-moving :offset 112) + (offset vector :inline :offset-assert 176) + (y-rotation float :offset-assert 192) + (y-chatter-rotation bouncing-float :inline :offset-assert 196) + (y-chatter-min delayed-rand-float :inline :offset-assert 240) + (x-rotation bouncing-float :inline :offset-assert 268) + (x-fall-rotation bouncing-float :inline :offset-assert 308) + (rot-mat matrix :inline :offset-assert 352) + (ball handle :offset-assert 416) + (x-correction float :offset-assert 424) + ) + :heap-base #x140 + :method-count-assert 20 + :size-assert #x1ac + :flag-assert #x14014001ac + (:states + energyarm-fall + energyarm-idle + energyarm-no-ball + energyarm-stop + ) + ) + + +(deftype energyball (process-drawable) + ((parent-overide (pointer energyarm) :offset 12) + (root-override collide-shape-moving :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + energyball-idle + ) + ) + + +(defskelgroup *energyball-sg* energyball + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 6) + :longest-edge (meters 0) + ) + +(defstate energyball-idle (energyball) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (when (= v1-0 'attack) + (when (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (increment-success-for-hint (game-text-id lavatube-shoot-the-spheres)) + (sound-play-by-name (static-sound-name "dcrate-break") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 546) + 600 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-1 ppointer) + ) + ) + (dummy-18 self) + (deactivate self) + ) + ) + ) + ) + ) + :trans + (behavior () + (rider-trans) + (spawn (-> self part) (-> self root-override trans)) + (let* ((v1-3 (-> self parent-overide)) + (s5-0 (if v1-3 + (-> v1-3 0 self-override) + ) + ) + (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) energyarm)) + s5-0 + ) + ) + (s4-0 (new 'stack-no-clear 'vector)) + (s5-1 (new 'stack-no-clear 'matrix)) + (f0-1 (the float (-> *display* base-frame-counter))) + (f30-0 (- f0-1 (* (the float (the int (/ f0-1 -150.0))) -150.0))) + ) + (when gp-0 + (set-vector! s4-0 0.0 -61440.0 -106496.0 1.0) + (vector-matrix*! s4-0 s4-0 (-> gp-0 rot-mat)) + (vector+! (-> self root-override trans) s4-0 (-> gp-0 root-override trans)) + (matrix-rotate-y! s5-1 (* -436.90668 f30-0)) + (matrix*! s5-1 s5-1 (-> gp-0 rot-mat)) + (matrix->quaternion (-> self root-override quat) s5-1) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyball) rider-post) + ) + +(defun energyball-init ((arg0 energyball)) + (set! (-> arg0 mask) (logior (process-mask attackable) (-> arg0 mask))) + (let ((s5-0 (new 'process 'collide-shape-moving arg0 (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 20480.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> arg0 root-override) s5-0) + s5-0 + ) + ) + +(defbehavior energyball-init-by-other energyball ((arg0 vector)) + (energyball-init self) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (initialize-skeleton self *energyball-sg* '()) + (set! (-> self part) (create-launch-control (-> *part-group-id-table* 545) self)) + (go energyball-idle) + (none) + ) + +(defskelgroup *energyarm-sg* energyarm + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 -20 17) + :longest-edge (meters 0) + ) + +(defbehavior energyarm-trans energyarm () + (rider-trans) + (let* ((v1-0 (-> self parent-overide)) + (gp-0 (if v1-0 + (-> v1-0 0 self-override) + ) + ) + (s5-0 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) energyhub)) + gp-0 + ) + ) + (gp-1 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'matrix)) + ) + 0.0 + (when s5-0 + (matrix-rotate-y! + (-> self rot-mat) + (+ (* -1820.4445 (-> self y-chatter-rotation osc value)) (-> self y-rotation)) + ) + (matrix*! (-> self rot-mat) (-> self rot-mat) (-> s5-0 rot-mat)) + (let ((f0-7 (* (-> self x-correction) (-> s5-0 x-rotation) (cos (-> self y-rotation))))) + (matrix-rotate-x! + s4-0 + (+ f0-7 (* 910.2222 (-> self x-rotation osc value)) (* -7281.778 (-> self x-fall-rotation osc value))) + ) + ) + (matrix*! (-> self rot-mat) s4-0 (-> self rot-mat)) + (set-vector! gp-1 0.0 0.0 -81920.0 1.0) + (vector-matrix*! (-> self draw bounds) gp-1 (-> self rot-mat)) + (set! (-> self draw bounds w) 69632.0) + (matrix->quaternion (-> self root-override quat) (-> self rot-mat)) + (vector-matrix*! gp-1 (-> self offset) (-> s5-0 rot-mat)) + (vector+! (-> self root-override trans) (-> s5-0 root trans) gp-1) + ) + ) + ) + +(defstate energyarm-stop (energyarm) + :enter + (behavior () '() (none)) + :trans + (behavior () + (update! (-> self x-rotation) 0.0) + (update! (-> self y-chatter-rotation) 0.0) + (energyarm-trans) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyarm) rider-post) + ) + +(defstate energyarm-no-ball (energyarm) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('stop) + (go energyarm-stop) + ) + ) + ) + :enter + (behavior () (set! (-> self y-chatter-rotation osc target) 1.0) (none)) + :trans + (behavior () + (set! (-> self x-correction) (fmax -1.0 (+ -0.1 (-> self x-correction)))) + (update! (-> self x-rotation) 0.0) + (when (at-min? (-> self x-rotation)) + (let* ((f30-0 0.15) + (v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + ) + (set! (-> self x-rotation osc vel) (fmax (* f30-0 (+ -1.0 (the-as float v1-7))) (-> self x-rotation osc vel))) + ) + ) + (update! (-> self y-chatter-rotation) 0.0) + (when (at-max? (-> self y-chatter-rotation)) + (let* ((f30-1 -0.1) + (v1-16 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-17 (the-as number (logior #x3f800000 v1-16))) + (f30-2 (* f30-1 (+ -1.0 (the-as float v1-17)))) + ) + (update! (-> self y-chatter-min)) + (set! (-> self y-chatter-rotation min-value) (fabs (-> self y-chatter-min value))) + (set! (-> self y-chatter-rotation osc vel) (fmin f30-2 (-> self y-chatter-rotation osc vel))) + ) + ) + (energyarm-trans) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyarm) rider-post) + ) + +(defstate energyarm-fall (energyarm) + :enter + (behavior () (set! (-> self x-fall-rotation osc target) 1.0) (none)) + :trans + (behavior () + (update! (-> self x-fall-rotation) 0.0) + (update! (-> self y-chatter-rotation) 0.0) + (when (at-max? (-> self x-fall-rotation)) + (set! (-> self y-chatter-rotation min-value) -1.0) + (set! (-> self y-chatter-rotation osc vel) 0.2) + (if (< -0.01 (-> self x-fall-rotation osc vel)) + (go energyarm-no-ball) + ) + ) + (energyarm-trans) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyarm) rider-post) + ) + +(defstate energyarm-idle (energyarm) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('stop) + (go energyarm-stop) + ) + ) + ) + :trans + (behavior () + (update! (-> self x-rotation) 0.0) + (when (at-min? (-> self x-rotation)) + (let* ((f30-0 0.15) + (v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + ) + (set! (-> self x-rotation osc vel) (fmax (* f30-0 (+ -1.0 (the-as float v1-7))) (-> self x-rotation osc vel))) + ) + ) + (energyarm-trans) + (cond + ((handle->process (-> self ball)) + (spawn (-> self part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 6))) + (spawn (-> self part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 5))) + (spawn (-> self part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 4))) + ) + ((!= (-> self ball) #f) + (set! (-> self ball) (the-as handle #f)) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 0) + (set! (-> a1-8 message) 'flash) + (let ((t9-10 send-event-function) + (v1-24 (-> self parent-overide)) + ) + (t9-10 + (if v1-24 + (-> v1-24 0 self-override) + ) + a1-8 + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 num-func) num-func-identity) + (let* ((v1-4 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-5 (the-as number (logior #x3f800000 v1-4))) + ) + (set! (-> gp-0 frame-num) (* (+ -1.0 (the-as float v1-5)) (the float (ja-num-frames 0)))) + ) + ) + (while #t + (suspend) + (let* ((f30-1 0.25) + (f28-0 0.25) + (v1-9 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-10 (the-as number (logior #x3f800000 v1-9))) + (f0-9 (+ f30-1 (* f28-0 (+ -1.0 (the-as float v1-10))))) + (a0-5 (-> self skel root-channel 0)) + ) + (set! (-> a0-5 param 0) f0-9) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyarm) rider-post) + ) + +(defun energyarm-init ((arg0 energyarm)) + (let ((s5-0 (new 'process 'collide-shape-moving arg0 (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 -12288.0 -81920.0 69632.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> arg0 root-override) s5-0) + ) + (let ((v0-5 (create-launch-control (-> *part-group-id-table* 544) arg0))) + (set! (-> arg0 part) v0-5) + v0-5 + ) + ) + +(defbehavior energyarm-init-by-other energyarm ((arg0 vector) (arg1 float)) + (energyarm-init self) + (let* ((v1-0 (-> self parent-overide)) + (s4-0 (if v1-0 + (-> v1-0 0 self-override) + ) + ) + (a0-3 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) energyhub)) + s4-0 + ) + ) + ) + (if a0-3 + (set! (-> self root-override trans quad) (-> a0-3 root trans quad)) + ) + ) + (initialize-skeleton self *energyarm-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self offset quad) (-> arg0 quad)) + (set! (-> self y-rotation) arg1) + (set-params! (-> self x-rotation) 0.0 1.0 0.0 0.7 0.08 0.1 0.97) + (set-params! (-> self x-fall-rotation) 0.0 1.0 0.0 0.7 0.005 0.08 0.97) + (set-params! (-> self y-chatter-rotation) 0.0 1.0 0.0 0.7 0.02 0.3 0.97) + (set-params! (-> self y-chatter-min) 300 600 1.0) + (set! (-> self x-correction) 0.0) + (cond + ((task-closed? (game-task lavatube-balls) (task-status need-resolution)) + (set! (-> self ball) (the-as handle #f)) + (go energyarm-stop) + ) + (else + (let ((gp-1 (get-process *default-dead-pool* energyball #x4000))) + (set! (-> self ball) + (ppointer->handle (when gp-1 + (let ((t9-10 (method-of-type energyball activate))) + (t9-10 (the-as energyball gp-1) self 'energyball (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 energyball-init-by-other (-> self root-override trans)) + (-> gp-1 ppointer) + ) + ) + ) + ) + (go energyarm-idle) + ) + ) + (none) + ) + +(defskelgroup *energyhub-sg* energyhub + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 2 0 10) + :longest-edge (meters 0) + ) + +(defbehavior energyhub-trans energyhub () + (+! + (-> self y-rotation) + (* 36.40889 + (-> self rotation-speed value) + (the float (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + ) + (cond + ((< 65536.0 (-> self y-rotation)) + (set! (-> self y-rotation) (+ -65536.0 (-> self y-rotation))) + ) + ((< (-> self y-rotation) 0.0) + (set! (-> self y-rotation) (+ 65536.0 (-> self y-rotation))) + ) + ) + (let ((gp-0 (new 'stack-no-clear 'matrix))) + (let* ((f0-9 (the float (-> *display* base-frame-counter))) + (f28-0 (- f0-9 (* (the float (the int (/ f0-9 1200.0))) 1200.0))) + ) + (matrix-rotate-y! gp-0 (-> self y-rotation)) + (matrix*! (-> self rot-mat) gp-0 (-> self rot-mat-init)) + (set! (-> self x-rotation) (* 728.1778 (sin (* 54.613335 f28-0)))) + ) + (matrix-rotate-x! gp-0 (-> self x-rotation)) + (matrix*! (-> self rot-mat) gp-0 (-> self rot-mat)) + ) + (matrix->quaternion (-> self root quat) (-> self rot-mat)) + ) + +(defbehavior energyhub-set-lava-height energyhub ((arg0 float)) + (let ((v1-0 (-> self alts 2))) + (when v1-0 + (let ((v1-2 (-> v1-0 extra process))) + (when v1-2 + (let* ((f0-1 (- 0.0 (-> self palette-val))) + (f0-2 (if (< 0.0 f0-1) + (fmin 0.1 f0-1) + (fmax -0.1 f0-1) + ) + ) + ) + (+! (-> self palette-val) f0-2) + ) + (set! (-> *palette-fade-controls* control 2 fade) (-> self palette-val)) + (set! (-> (the-as process-drawable v1-2) root scale x) 1.25) + (let ((f0-6 1.25)) + (set! (-> (the-as process-drawable v1-2) root scale z) f0-6) + f0-6 + ) + ) + ) + ) + ) + ) + +(defstate energyhub-stopped (energyhub) + :enter + (behavior () + (set! (-> self rotation-speed target) 0.0) + (set! (-> self rotation-speed accel) 0.0005) + (dotimes (gp-0 5) + (send-event (handle->process (-> self arm gp-0)) 'stop) + ) + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (none) + ) + :trans + (behavior () + (update! (-> self rotation-speed) 0.0) + (energyhub-trans) + (energyhub-set-lava-height -122880.0) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let* ((f30-0 1.0) + (f28-0 0.25) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (f0-4 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2))))) + (a0-2 (-> self skel root-channel 0)) + ) + (set! (-> a0-2 param 0) f0-4) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyhub) ja-post) + ) + +(defstate energyhub-stop (energyhub) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'flash) + (let ((f0-0 1.9921875)) + (set! (-> self palette-val) f0-0) + f0-0 + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self rotation-speed target) 0.0) + (set! (-> self rotation-speed accel) 0.0005) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'stop) + (let ((t9-0 send-event-function) + (v1-1 (-> self alts 0)) + ) + (t9-0 + (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'open) + (let ((t9-1 send-event-function) + (v1-5 (-> self alts 1)) + ) + (t9-1 + (if v1-5 + (-> v1-5 extra process) + ) + a1-1 + ) + ) + ) + (close-specific-task! (game-task lavatube-balls) (task-status need-resolution)) + (level-hint-spawn + (game-text-id lavatube-spheres-door-open) + "sksp0378" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (none) + ) + :trans + (behavior () + (update! (-> self rotation-speed) 0.0) + (energyhub-trans) + (energyhub-set-lava-height -122880.0) + (if (< (-> self rotation-speed value) 0.3) + (go energyhub-stopped) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let* ((f30-0 1.0) + (f28-0 0.25) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (f0-4 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2))))) + (a0-2 (-> self skel root-channel 0)) + ) + (set! (-> a0-2 param 0) f0-4) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyhub) ja-post) + ) + +(defstate energyhub-idle (energyhub) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'flash) + (let ((f0-0 1.9921875)) + (set! (-> self palette-val) f0-0) + f0-0 + ) + ) + ) + ) + ) + :trans + (behavior () + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (let ((gp-0 0)) + (dotimes (s5-0 5) + (let* ((s4-0 (handle->process (-> self arm s5-0))) + (v1-10 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) energyarm)) + (the-as energyarm s4-0) + ) + ) + ) + (if (and v1-10 (handle->process (-> v1-10 ball))) + (+! gp-0 1) + ) + ) + ) + (cond + ((zero? gp-0) + (energyhub-set-lava-height -122880.0) + (go energyhub-stop) + ) + ((= gp-0 1) + (set! (-> self rotation-speed target) 1.8) + (energyhub-set-lava-height -129024.0) + ) + ((= gp-0 2) + (set! (-> self rotation-speed target) 1.6) + (energyhub-set-lava-height -135168.0) + ) + ((= gp-0 3) + (set! (-> self rotation-speed target) 1.4) + (energyhub-set-lava-height -141312.0) + ) + ((= gp-0 4) + (set! (-> self rotation-speed target) 1.2) + (energyhub-set-lava-height -147456.0) + ) + (else + (set! (-> self rotation-speed target) 1.0) + (energyhub-set-lava-height -151552.0) + ) + ) + ) + (update! (-> self rotation-speed-offset)) + (update! (-> self rotation-speed) (-> self rotation-speed-offset value)) + (energyhub-trans) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let* ((f30-0 1.0) + (f28-0 0.25) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (f0-4 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2))))) + (a0-2 (-> self skel root-channel 0)) + ) + (set! (-> a0-2 param 0) f0-4) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyhub) ja-post) + ) + +(defmethod init-from-entity! energyhub ((obj energyhub) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *energyhub-sg* '()) + (set! (-> obj sound) (new 'process 'ambient-sound arg0 (-> obj root trans))) + (let ((s5-1 (entity-actor-count (-> obj entity) 'alt-actor))) + (dotimes (s4-0 (min 3 s5-1)) + (set! (-> obj alts s4-0) (entity-actor-lookup (-> obj entity) 'alt-actor s4-0)) + ) + ) + (quaternion->matrix (-> obj rot-mat-init) (-> obj root quat)) + (let ((f30-0 13107.2) + (s5-2 (new 'stack-no-clear 'vector)) + (s4-1 (new 'stack-no-clear 'matrix)) + ) + (set-vector! s5-2 0.0 2457.6 -24576.0 1.0) + (matrix-rotate-y! s4-1 f30-0) + (dotimes (s3-0 5) + (let ((s2-0 (get-process *default-dead-pool* energyarm #x4000))) + (set! (-> obj arm s3-0) + (ppointer->handle (when s2-0 + (let ((t9-9 (method-of-type energyarm activate))) + (t9-9 (the-as energyarm s2-0) obj 'energyarm (the-as pointer #x70004000)) + ) + (run-now-in-process s2-0 energyarm-init-by-other s5-2 (* (the float s3-0) f30-0)) + (-> s2-0 ppointer) + ) + ) + ) + ) + (vector-matrix*! s5-2 s5-2 s4-1) + ) + ) + (set! (-> obj root pause-adjust-distance) 245760.0) + (set! (-> obj y-rotation) 0.0) + (set! (-> obj x-rotation) 0.0) + (set-params! (-> obj rotation-speed-offset) 300 600 0.25) + (set! (-> obj palette-val) 0.0) + (cond + ((task-closed? (game-task lavatube-balls) (task-status need-resolution)) + (set-params! (-> obj rotation-speed) 0.0 0.01 0.1 0.9) + (go energyhub-stopped) + ) + (else + (set-params! (-> obj rotation-speed) 1.0 0.01 0.1 0.9) + (go energyhub-idle) + ) + ) + (none) + ) + +(deftype energylava (process-drawable) + ((root-override basic :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + energylava-idle + ) + ) + + +(defskelgroup *energylava-sg* energylava + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 120) + :longest-edge (meters 0) + ) + +(defstate energylava-idle (energylava) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energylava) ja-post) + ) + +(defmethod init-from-entity! energylava ((obj energylava) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *energylava-sg* '()) + (go energylava-idle) + (none) + ) + + + + diff --git a/goal_src/levels/maincave/cavecrystal-light.gc b/goal_src/levels/maincave/cavecrystal-light.gc index 0baa58f5d..dc35e2fa5 100644 --- a/goal_src/levels/maincave/cavecrystal-light.gc +++ b/goal_src/levels/maincave/cavecrystal-light.gc @@ -5,8 +5,6 @@ ;; name in dgo: cavecrystal-light ;; dgos: L1, MAI, MAINCAVE -(declare-type cavecrystal process-drawable) - ;; DECOMP BEGINS (define *cavecrystal-engine* (new 'loading-level 'engine 'cavecrystal 64)) diff --git a/goal_src/levels/maincave/maincave-obs.gc b/goal_src/levels/maincave/maincave-obs.gc index 9be6cb67c..31499b56b 100644 --- a/goal_src/levels/maincave/maincave-obs.gc +++ b/goal_src/levels/maincave/maincave-obs.gc @@ -5,13 +5,1493 @@ ;; name in dgo: maincave-obs ;; dgos: L1, MAI, MAINCAVE -;; TODO - for gnawer +;; DECOMP BEGINS + (deftype maincavecam (pov-camera) ((seq uint64 :offset-assert 224) ) + :heap-base #x80 :method-count-assert 30 :size-assert #xe8 - :heap-base #x80 :flag-assert #x1e008000e8 ) -(define-extern *maincavecam-sg* skeleton-group) + + +(defskelgroup *maincavecam-sg* maincavecam + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +(defmethod set-stack-size! maincavecam ((obj maincavecam)) + (stack-size-set! (-> obj main-thread) 512) + (none) + ) + +(defstate pov-camera-playing (maincavecam) + :virtual #t + :code + (behavior () + (cond + ((zero? (-> self seq)) + (let* ((gp-0 (get-process *default-dead-pool* fuel-cell #x4000)) + (gp-1 + (ppointer->handle + (when gp-0 + (let ((t9-1 (method-of-type fuel-cell activate))) + (t9-1 (the-as fuel-cell gp-0) (ppointer->process (-> self parent)) 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 fuel-cell-init-as-clone (process->handle self) (-> self entity extra perm task)) + (-> gp-0 ppointer) + ) + ) + ) + ) + (ja-play-spooled-anim + (new 'static 'spool-anim :name "maincavecam-gnawer-fuel-cell" :index 3 :parts 1 :command-list '()) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (let ((a0-7 (handle->process gp-1))) + (if a0-7 + (send-event a0-7 'stop-cloning) + ) + ) + ) + ) + (else + (suspend) + 0 + ) + ) + (go-virtual pov-camera-done-playing) + (none) + ) + ) + +(deftype cave-water (water-anim) + () + :heap-base #x70 + :method-count-assert 30 + :size-assert #xdc + :flag-assert #x1e007000dc + ) + + +(define ripple-for-cave-water (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +(defmethod TODO-RENAME-22 cave-water ((obj cave-water)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (let ((v1-2 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) v1-2) + (set! (-> v1-2 global-scale) 3072.0) + (set! (-> v1-2 close-fade-dist) 163840.0) + (set! (-> v1-2 far-fade-dist) 245760.0) + (set! (-> v1-2 waveform) ripple-for-cave-water) + ) + (case (-> obj look) + ((37 14) + (set-vector! (-> obj draw color-mult) 0.2 0.1 0.3 0.75) + ) + ) + (none) + ) + +(deftype cavecrusher (process-drawable) + ((root-override collide-shape :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + cavecrusher-idle + ) + ) + + +(defskelgroup *cavecrusher-sg* cavecrusher + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +(defstate cavecrusher-idle (cavecrusher) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack)) + (when (= (-> arg0 type) target) + (if ((method-of-type touching-shapes-entry prims-touching-action?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> *target* control) + (the-as uint 1) + (the-as uint 0) + ) + (target-attack-up *target* 'attack-or-shove 'deadlyup) + ) + ) + ) + ) + ) + ) + :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) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (update! (-> self sound)) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior cavecrusher) ja-post) + ) + +(defmethod init-from-entity! cavecrusher ((obj cavecrusher) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-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 0.0 0.0 11468.8) + (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 *cavecrusher-sg* '()) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "crush-click") + :volume #x400 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 4)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (go cavecrusher-idle) + (none) + ) + +(deftype cavetrapdoor (process-drawable) + ((root-override collide-shape-moving :offset 112) + (delay-before-wiggle int32 :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xb4 + :flag-assert #x16005000b4 + (:methods + (idle () _type_ :state 20) + (trigger () _type_ :state 21) + ) + ) + + +(defskelgroup *cavetrapdoor-sg* cavetrapdoor + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 5.7) + ) + +(defstate idle (cavetrapdoor) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (when (= (-> arg0 type) target) + (when (>= (- (-> (target-pos 0) y) (-> self root-override trans y)) 409.6) + (send-event arg0 'no-look-around 450) + (go-virtual trigger) + ) + ) + ) + ) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (transform-post) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (anim-loop) + (none) + ) + ) + +(defstate trigger (cavetrapdoor) + :virtual #t + :code + (behavior () + (when (nonzero? (-> self delay-before-wiggle)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self delay-before-wiggle)) + (suspend) + ) + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> gp-0 param 0) (ja-aframe 290.0 0)) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 290.0 0)) + (set! (-> gp-1 param 1) 1.0) + (joint-control-channel-group-eval! gp-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (restore-collide-with-as (-> self root-override)) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (until (or + (or + (not *target*) + (< 28672.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + (and + (not (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + (zero? (logand (-> *target* control root-prim prim-core action) 128)) + ) + ) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-14 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) (the float (+ (-> a0-15 frame-group data 0 length) -1))) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group-eval! a0-15 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (label cfg-14) + ) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-27 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-27 param 1) 1.0) + (set! (-> a0-27 frame-num) 0.0) + (joint-control-channel-group! a0-27 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and + (and *target* (>= 28672.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (or + (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + (logtest? (-> *target* control root-prim prim-core action) 128) + ) + ) + (while (not (ja-min? 0)) + (suspend) + (let ((a0-38 (-> self skel root-channel 0))) + (set! (-> a0-38 param 0) 0.0) + (set! (-> a0-38 param 1) 1.0) + (joint-control-channel-group-eval! a0-38 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (goto cfg-14) + ) + (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!) + ) + ) + (go-virtual idle) + (none) + ) + :post + (the-as (function none :behavior cavetrapdoor) pusher-post) + ) + +(defmethod init-from-entity! cavetrapdoor ((obj cavetrapdoor) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 9830.4 10240.0 0.0 17203.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 *cavetrapdoor-sg* '()) + (ja-channel-push! 1 0) + (let ((s4-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> obj draw art-group data 4)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (let ((f0-7 (quaternion-y-angle (-> obj root-override quat))) + (s4-2 (-> obj draw bounds)) + ) + (set-vector! s4-2 0.0 -8192.0 4096.0 1.0) + (vector-rotate-around-y! s4-2 s4-2 f0-7) + (set! (-> s4-2 w) 25600.0) + ) + (set! (-> obj delay-before-wiggle) (the int (* 300.0 (res-lump-float arg0 'delay)))) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 8192.0 + ) + (go (method-of-object obj idle)) + (none) + ) + +(deftype caveflamepots (process-drawable) + ((root-override collide-shape :offset 112) + (shove-up float :offset-assert 176) + (cycle-speed int32 :offset-assert 180) + (cycle-pause int32 :offset-assert 184) + (cycle-offset uint32 :offset-assert 188) + (was-deadly? symbol :offset-assert 192) + (should-play-sound? symbol :offset-assert 196) + (launch-pos vector 2 :inline :offset-assert 208) + ) + :heap-base #x80 + :method-count-assert 20 + :size-assert #xf0 + :flag-assert #x14008000f0 + (:states + caveflamepots-active + ) + ) + + +(set! (-> *part-id-table* 704) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.0)) + (sp-rnd-flt spt-rot-z (degrees -180.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.01) 1.0) + (sp-flt spt-scalevel-x (meters -0.0039999997)) + (sp-rnd-flt spt-rotvel-z (degrees -1.8) (degrees 1.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-accel-y -2.4576) + (sp-int spt-timer 5004) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 705) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.0)) + (sp-rnd-flt spt-rot-z (degrees -180.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.01) 1.0) + (sp-flt spt-scalevel-x (meters -0.0039999997)) + (sp-rnd-flt spt-rotvel-z (degrees -1.8) (degrees 1.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-accel-y -2.4576) + (sp-int spt-timer 5004) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(defstate caveflamepots-active (caveflamepots) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (when (= (-> arg0 type) target) + (when ((method-of-type touching-shapes-entry prims-touching-action?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> *target* control) + (the-as uint 1) + (the-as uint 0) + ) + (let ((s4-0 (new 'stack 'attack-info))) + (dummy-41 (-> self root-override) s4-0 (-> self shove-up)) + (cond + ((or + (= (-> *target* control unknown-surface00 mode) 'air) + (>= (+ (-> *display* base-frame-counter) -60) (-> *target* control unknown-dword11)) + (< 0.75 (-> *target* control poly-normal y)) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 2) + (set! (-> a1-5 message) 'attack-or-shove) + (set! (-> a1-5 param 0) (-> arg3 param 0)) + (let ((v1-22 (new 'static 'attack-info :mask #xa2))) + (set! (-> v1-22 mode) 'burn) + (set! (-> v1-22 vector quad) (-> s4-0 vector quad)) + (set! (-> v1-22 shove-up) (-> s4-0 shove-up)) + (set! (-> a1-5 param 1) (the-as uint v1-22)) + ) + (send-event-function arg0 a1-5) + ) + ) + (else + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack-or-shove) + (set! (-> a1-6 param 0) (-> arg3 param 0)) + (let ((v1-26 (new 'static 'attack-info :mask #x8e2))) + (set! (-> v1-26 mode) 'burn) + (set! (-> v1-26 shove-up) 0.0) + (set! (-> v1-26 shove-back) 8192.0) + (set! (-> v1-26 vector quad) (-> *target* control poly-normal quad)) + (set! (-> v1-26 angle) 'shove) + (set! (-> a1-6 param 1) (the-as uint v1-26)) + ) + (send-event-function arg0 a1-6) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :trans + (behavior () + (let* ((v1-0 (-> self cycle-speed)) + (a0-1 (- v1-0 (-> self cycle-pause))) + (gp-0 (mod (+ (-> *display* base-frame-counter) (-> self cycle-offset)) v1-0)) + ) + (cond + ((< gp-0 a0-1) + (when (sphere-in-view-frustum? (the-as sphere (-> self root-override root-prim prim-core))) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 704) + (the-as vector (-> self launch-pos)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 705) + (the-as vector (&-> self stack 112)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (when (-> self should-play-sound?) + (set! (-> self should-play-sound?) #f) + (sound-play-by-name (static-sound-name "hot-flame") (new-sound-id) 1024 0 0 1 #t) + ) + (cond + ((< gp-0 30) + (when (-> self was-deadly?) + (set! (-> self was-deadly?) #f) + (clear-collide-with-as (-> self root-override)) + ) + ) + (else + (when (not (-> self was-deadly?)) + (set! (-> self was-deadly?) #t) + (restore-collide-with-as (-> self root-override)) + ) + ) + ) + (when (and (not (-> self was-deadly?)) (< 60 gp-0)) + (set! (-> self was-deadly?) #t) + (restore-collide-with-as (-> self root-override)) + ) + ) + (else + (set! (-> self should-play-sound?) #t) + (when (-> self was-deadly?) + (set! (-> self was-deadly?) #f) + (clear-collide-with-as (-> self root-override)) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +(defmethod init-from-entity! caveflamepots ((obj caveflamepots) (arg0 entity-actor)) + (local-vars (sv-16 res-tag) (sv-32 res-tag) (sv-48 res-tag)) + (set! (-> obj was-deadly?) #f) + (set! (-> obj should-play-sound?) #f) + (set! (-> obj shove-up) (res-lump-float arg0 'shove :default 8192.0)) + (logclear! (-> obj mask) (process-mask enemy)) + (logclear! (-> obj mask) (process-mask attackable)) + (logior! (-> obj mask) (process-mask actor-pause)) + (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 4) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 12288.0 0.0 10240.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core offense) 0) + (set-vector! (-> s2-0 local-sphere) 4915.2 8192.0 0.0 3686.4) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core offense) 0) + (set-vector! (-> s2-1 local-sphere) 4915.2 14336.0 0.0 3276.8) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 0) + (set-vector! (-> s2-2 local-sphere) -4915.2 8192.0 0.0 3686.4) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core offense) 0) + (set-vector! (-> s2-3 local-sphere) -4915.2 14336.0 0.0 3276.8) + (append-prim s3-0 s2-3) + ) + ) + (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) + (let ((v1-42 (new 'process 'path-control obj 'path 0.0))) + (set! (-> obj path) v1-42) + (logior! (-> v1-42 flags) (path-control-flag display draw-line draw-point draw-text)) + (if (<= (-> v1-42 curve num-cverts) 0) + (go process-drawable-art-error "no path") + ) + ) + (let ((f0-23 (res-lump-float arg0 'rotoffset))) + (if (!= f0-23 0.0) + (quaternion-rotate-y! (-> obj root-override quat) (-> obj root-override quat) f0-23) + ) + ) + (let ((f30-0 (quaternion-y-angle (-> obj root-override quat)))) + (let ((s4-1 (-> obj launch-pos))) + (let ((v1-53 s4-1)) + (set! (-> v1-53 0 x) 6144.0) + (set! (-> v1-53 0 y) 0.0) + (set! (-> v1-53 0 z) 0.0) + (set! (-> v1-53 0 w) 1.0) + ) + (vector-rotate-around-y! (the-as vector s4-1) (the-as vector s4-1) f30-0) + (vector+! (the-as vector s4-1) (the-as vector s4-1) (-> obj root-override trans)) + ) + (let ((s4-2 (the-as object (&-> obj stack 112)))) + (set-vector! (the-as vector s4-2) -6144.0 0.0 0.0 1.0) + (vector-rotate-around-y! (the-as vector s4-2) (the-as vector s4-2) f30-0) + (vector+! (the-as vector s4-2) (the-as vector s4-2) (-> obj root-override trans)) + ) + (let ((s4-3 (-> obj root-override root-prim))) + (dotimes (s3-1 (-> (the-as collide-shape-prim-group s4-3) num-prims)) + (let ((a1-19 (-> (the-as collide-shape-prim-group s4-3) prims s3-1 local-sphere))) + (vector-rotate-around-y! a1-19 a1-19 f30-0) + ) + ) + ) + ) + (dummy-47 (-> obj root-override)) + (let ((f30-1 300.0)) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-70 (res-lump-data arg0 'cycle-speed (pointer float) :tag-ptr (& sv-16)))) + (set! (-> obj cycle-speed) (the int (* f30-1 (if (and v1-70 (> (the-as int (-> sv-16 elt-count)) 0)) + (-> v1-70 0) + 4.0 + ) + ) + ) + ) + ) + ) + (let ((f30-2 (the float (-> obj cycle-speed)))) + (set! sv-32 (new 'static 'res-tag)) + (let ((v1-74 (res-lump-data arg0 'cycle-speed (pointer float) :tag-ptr (& sv-32)))) + (set! (-> obj cycle-offset) + (the-as uint (the int (* f30-2 (if (and v1-74 (< 1 (the-as int (-> sv-32 elt-count)))) + (-> v1-74 1) + 0.0 + ) + ) + ) + ) + ) + ) + ) + (let ((f30-3 300.0)) + (set! sv-48 (new 'static 'res-tag)) + (let ((v1-77 (res-lump-data arg0 'cycle-speed (pointer float) :tag-ptr (& sv-48)))) + (set! (-> obj cycle-pause) (the int (* f30-3 (if (and v1-77 (< 2 (the-as int (-> sv-48 elt-count)))) + (-> v1-77 2) + 2.0 + ) + ) + ) + ) + ) + ) + (go caveflamepots-active) + (none) + ) + +(deftype cavespatula (process-drawable) + ((root-override collide-shape-moving :offset 112) + (sync sync-info :inline :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb8 + :flag-assert #x14005000b8 + (:states + cavespatula-idle + ) + ) + + +(defskelgroup *cavespatula-sg* cavespatula + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -1 0 18) + :longest-edge (meters 0) + ) + +(defskelgroup *cavespatula-darkcave-sg* cavespatula-darkcave + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -1 0 18) + :longest-edge (meters 0) + ) + +(defstate cavespatula-idle (cavespatula) + :trans + (behavior () + (rider-trans) + (update! (-> self sound)) + (let ((f0-0 (get-current-phase (-> self sync)))) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 (* -65536.0 f0-0)) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior cavespatula) rider-post) + ) + +(defmethod init-from-entity! cavespatula ((obj cavespatula) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 -8192.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) + (set! (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #xc0 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "spatula") + :volume #x400 + :fo-min 25 + :fo-max 50 + ) + (-> obj root-override trans) + ) + ) + (case (-> (if (-> obj entity) + (-> obj entity extra level) + (-> *level* level-default) + ) + name + ) + (('darkcave) + (initialize-skeleton obj *cavespatula-darkcave-sg* '()) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + ) + (else + (initialize-skeleton obj *cavespatula-sg* '()) + (ja-channel-push! 1 0) + (let ((s5-2 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-2 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> s5-2 frame-num) 0.0) + ) + ) + ) + (logior! (-> obj skel status) 1) + (load-params! (-> obj sync) obj (the-as uint 3000) 0.0 0.15 0.15) + (ja-post) + (dummy-47 (-> obj root-override)) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 32768.0 + ) + (go cavespatula-idle) + (none) + ) + +(deftype cavespatulatwo (process-drawable) + ((root-override collide-shape-moving :offset 112) + (sync sync-info :inline :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb8 + :flag-assert #x14005000b8 + (:states + cavespatulatwo-idle + ) + ) + + +(defskelgroup *cavespatulatwo-sg* cavespatulatwo + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 2.5 0 21) + :longest-edge (meters 8.7) + ) + +(defstate cavespatulatwo-idle (cavespatulatwo) + :trans + (behavior () + (rider-trans) + (update! (-> self sound)) + (let ((f0-0 (get-current-phase (-> self sync)))) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 (* -65536.0 f0-0)) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior cavespatulatwo) rider-post) + ) + +(defmethod init-from-entity! cavespatulatwo ((obj cavespatulatwo) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 75776.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 *cavespatulatwo-sg* '()) + (logclear! (-> obj mask) (process-mask actor-pause)) + (logior! (-> obj skel status) 1) + (load-params! (-> obj sync) obj (the-as uint 3000) 0.0 0.15 0.15) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (transform-post) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #xc0 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "spatula") + :volume #x400 + :fo-min 25 + :fo-max 50 + ) + (-> obj root-override trans) + ) + ) + (go cavespatulatwo-idle) + (none) + ) + +(deftype caveelevator (process-drawable) + ((root-override collide-shape-moving :offset 112) + (elev-mode uint64 :offset-assert 176) + (elev-type int32 :offset-assert 184) + (prev-frame-num float :offset-assert 188) + (last-update-bounce-time uint64 :offset-assert 192) + (orig-trans vector :inline :offset-assert 208) + (sync sync-info :inline :offset-assert 224) + (smush smush-control :inline :offset-assert 232) + (anim int32 2 :offset-assert 264) + (wheel-ry-mat matrix :inline :offset 272) + ) + :heap-base #xe0 + :method-count-assert 22 + :size-assert #x150 + :flag-assert #x1600e00150 + (:methods + (TODO-RENAME-20 (_type_) none 20) + (TODO-RENAME-21 (_type_) float 21) + ) + (:states + caveelevator-cycle-active + caveelevator-one-way-idle-end + caveelevator-one-way-idle-start + caveelevator-one-way-travel-to-end + caveelevator-one-way-travel-to-start + ) + ) + + +(defskelgroup *caveelevator-sg* caveelevator + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4.25) + :longest-edge (meters 0) + ) + +(defun cavecrystal-light-control-caveelevator-callback ((arg0 (pointer cavecrystal)) (arg1 int) (arg2 float)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let ((v1-1 (-> arg0 0 node-list))) + (if (and (>= arg1 0) (nonzero? v1-1)) + (vector<-cspace! s5-0 (-> v1-1 data arg1)) + (set! (-> s5-0 quad) (-> arg0 0 root-override trans quad)) + ) + ) + (set! (-> s5-0 w) arg2) + (let ((f0-1 (TODO-RENAME-10 *cavecrystal-light-control* s5-0)) + (a2-2 (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0)) + (a1-5 (new 'static 'vector :x 0.3 :y 0.3 :z 0.3 :w 1.0)) + ) + (vector-lerp! (-> arg0 0 draw color-mult) a1-5 a2-2 f0-1) + ) + ) + ) + +(defmethod TODO-RENAME-20 caveelevator ((obj caveelevator)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-update-bounce-time)) + (set! (-> obj last-update-bounce-time) (the-as uint v1-1)) + (when (!= (-> obj smush amp) 0.0) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> s5-0 quad) (-> obj orig-trans quad)) + (+! (-> s5-0 y) (* 819.2 (update! (-> obj smush)))) + (TODO-RENAME-30 (-> obj root-override) s5-0) + ) + ) + ) + ) + (none) + ) + +(defmethod TODO-RENAME-21 caveelevator ((obj caveelevator)) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (-> obj draw bounds)) + ) + (vector<-cspace! s5-0 (-> obj node-list data 3)) + (vector-! gp-0 s5-0 (-> obj root-override trans)) + (let ((f0-0 17408.0)) + (set! (-> gp-0 w) f0-0) + f0-0 + ) + ) + ) + +(defstate caveelevator-cycle-active (caveelevator) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'bonk) + (activate! (-> self smush) -1.0 60 150 1.0 1.0) + ) + ) + ) + ) + :enter + (behavior () (logclear! (-> self mask) (process-mask actor-pause)) (none)) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (none)) + :trans + (behavior () (rider-trans) (TODO-RENAME-20 self) (none)) + :code + (behavior () + (while #t + (let ((f30-1 (* (get-current-phase (-> self sync)) (the float (ja-num-frames 0))))) + (cond + ((< (-> self prev-frame-num) f30-1) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) f30-1) + (set! (-> a0-2 param 1) 10000.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((v1-7 (-> self skel root-channel 0))) + (set! (-> v1-7 num-func) num-func-identity) + (set! (-> v1-7 frame-num) f30-1) + ) + ) + ) + (set! (-> self prev-frame-num) f30-1) + ) + (suspend) + ) + (none) + ) + :post + (behavior () (rider-post) (TODO-RENAME-21 self) (none)) + ) + +(defstate caveelevator-one-way-idle-start (caveelevator) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('bonk) + (activate! (-> self smush) -1.0 60 150 1.0 1.0) + (go caveelevator-one-way-travel-to-end) + ) + (('attack 'touch) + (if (and + (= (-> arg0 type) target) + (>= 8192.0 (vector-vector-xz-distance (target-pos 0) (-> self root-override trans))) + ) + (go caveelevator-one-way-travel-to-end) + ) + ) + ) + ) + :trans + (behavior () (rider-trans) (TODO-RENAME-20 self) (none)) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as + art-joint-anim + (-> (the-as art-joint-anim (+ (* (-> self anim 0) 4) (the-as int (-> self draw art-group)))) + master-art-group-name + ) + ) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (suspend) + ) + (none) + ) + :post + (behavior () (rider-post) (TODO-RENAME-21 self) (none)) + ) + +(defstate caveelevator-one-way-travel-to-end (caveelevator) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'bonk) + (activate! (-> self smush) -1.0 60 150 1.0 1.0) + ) + ) + ) + ) + :enter + (behavior () (logclear! (-> self mask) (process-mask actor-pause)) (none)) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (none)) + :trans + (behavior () (rider-trans) (TODO-RENAME-20 self) (none)) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data (-> self anim 0))) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (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!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go caveelevator-one-way-idle-end) + (none) + ) + :post + (behavior () (rider-post) (TODO-RENAME-21 self) (none)) + ) + +(defstate caveelevator-one-way-idle-end (caveelevator) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'bonk) + (activate! (-> self smush) -1.0 60 150 1.0 1.0) + ) + ) + ) + ) + :enter + (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :trans + (behavior () + (cond + ((zero? (-> self root-override riders num-riders)) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (go caveelevator-one-way-travel-to-start) + ) + ) + (else + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + ) + (rider-trans) + (TODO-RENAME-20 self) + (none) + ) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data (-> self anim 0))) + num-func-identity + ) + (set! (-> gp-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self anim 0))) data 0 length) -1)) + ) + ) + (while #t + (suspend) + ) + (none) + ) + :post + (behavior () (rider-post) (TODO-RENAME-21 self) (none)) + ) + +(defstate caveelevator-one-way-travel-to-start (caveelevator) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'bonk) + (activate! (-> self smush) -1.0 60 150 1.0 1.0) + ) + ) + ) + ) + :enter + (behavior () (logclear! (-> self mask) (process-mask actor-pause)) (none)) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (none)) + :trans + (behavior () (rider-trans) (TODO-RENAME-20 self) (none)) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data (-> self anim 1))) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (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!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go caveelevator-one-way-idle-start) + (none) + ) + :post + (behavior () (rider-post) (TODO-RENAME-21 self) (none)) + ) + +(defun caveelevator-joint-callback ((arg0 caveelevator)) + (let* ((gp-0 arg0) + (f1-1 (- (-> arg0 node-list data 3 bone transform vector 3 y) (-> gp-0 orig-trans y))) + (f30-0 (* 5.0929585 (- f1-1 (* (the float (the int (/ f1-1 12867.963))) 12867.963)))) + (s3-0 (-> arg0 node-list data 5 bone transform)) + (s4-0 (-> arg0 node-list data 4 bone transform)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> s3-0 vector 3 quad)) + (matrix-rotate-x! s3-0 f30-0) + (matrix*! s3-0 s3-0 (-> gp-0 wheel-ry-mat)) + (set! (-> s3-0 vector 3 quad) (-> s5-0 quad)) + (set! (-> s5-0 quad) (-> s4-0 vector 3 quad)) + (matrix-rotate-x! s4-0 (- f30-0)) + (matrix*! s4-0 s4-0 (-> gp-0 wheel-ry-mat)) + (set! (-> s4-0 vector 3 quad) (-> s5-0 quad)) + ) + 0 + (none) + ) + +(defmethod init-from-entity! caveelevator ((obj caveelevator) (arg0 entity-actor)) + (local-vars (v1-43 int) (sv-16 res-tag)) + (set! (-> obj prev-frame-num) 10000.0) + (set! (-> obj last-update-bounce-time) (the-as uint 0)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 19)) + (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 17408.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 *caveelevator-sg* '()) + (logior! (-> obj skel status) 1) + (set! (-> obj skel postbind-function) caveelevator-joint-callback) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-28 (res-lump-data arg0 'trans-offset (pointer float) :tag-ptr (& sv-16)))) + (when v1-28 + (+! (-> obj root-override trans x) (-> v1-28 0)) + (+! (-> obj root-override trans y) (-> v1-28 1)) + (+! (-> obj root-override trans z) (-> v1-28 2)) + ) + ) + (set! (-> obj orig-trans quad) (-> obj root-override trans quad)) + (let ((f0-13 (res-lump-float (-> obj entity) 'rotoffset))) + (if (!= f0-13 0.0) + (quaternion-rotate-y! (-> obj root-override quat) (-> obj root-override quat) f0-13) + ) + ) + (let ((f0-14 (quaternion-y-angle (-> obj root-override quat)))) + (matrix-rotate-y! (-> obj wheel-ry-mat) f0-14) + ) + (set-zero! (-> obj smush)) + (let ((s5-1 (res-lump-value arg0 'mode uint128))) + 0 + (set! (-> obj elev-type) (the-as int s5-1)) + (let ((v1-42 s5-1)) + (cond + ((zero? v1-42) + (set! v1-43 0) + (set! (-> obj anim 0) 2) + ) + ((= (the-as uint v1-42) 1) + (set! v1-43 1) + (set! (-> obj anim 0) 3) + (set! (-> obj anim 1) 4) + ) + ((= (the-as uint v1-42) 2) + (set! v1-43 0) + (set! (-> obj anim 0) 5) + ) + (else + (set! v1-43 0) + (set! (-> obj anim 0) 2) + (set! (-> obj elev-type) (the-as int s5-1)) + ) + ) + ) + (set! (-> obj elev-mode) (the-as uint v1-43)) + (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 (-> obj anim 0))) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (if (= (the-as uint s5-1) 1) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-caveelevator-callback) + 3 + 8192.0 + ) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + 3 + 8192.0 + ) + ) + ) + (transform-post) + (let ((v1-55 (-> obj elev-mode))) + (cond + ((zero? v1-55) + (load-params! (-> obj sync) obj (the-as uint 3000) 0.0 0.15 0.15) + (go caveelevator-cycle-active) + ) + ((= v1-55 1) + (go caveelevator-one-way-idle-start) + ) + ) + ) + (none) + ) + + + + diff --git a/goal_src/levels/rolling/rolling-obs.gc b/goal_src/levels/rolling/rolling-obs.gc index 448f5eb9b..c7978b9d4 100644 --- a/goal_src/levels/rolling/rolling-obs.gc +++ b/goal_src/levels/rolling/rolling-obs.gc @@ -5,3 +5,1779 @@ ;; name in dgo: rolling-obs ;; dgos: L1, ROL +;; DECOMP BEGINS + +(deftype rolling-part (part-spawner) + ((root-override basic :offset 112) + ) + :heap-base #x60 + :method-count-assert 21 + :size-assert #xd0 + :flag-assert #x15006000d0 + ) + + +(deftype rollingcam (process-hidden) + () + :method-count-assert 15 + :size-assert #x70 + :flag-assert #xf00000070 + ) + + +(defskelgroup *rollingcam-sg* rollingcam + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 30) + :longest-edge (meters 0) + ) + +(deftype pusher-base (process-drawable) + ((root-override collide-shape-moving :offset 112) + (max-frame float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + ) + + +(deftype pusher (pusher-base) + ((sync sync-info-paused :inline :offset-assert 180) + (cyl cylinder :inline :offset-assert 208) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf8 + :flag-assert #x14009000f8 + (:states + pusher-idle + ) + ) + + +(deftype gorge-pusher (pusher-base) + ((min-frame float :offset-assert 180) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb8 + :flag-assert #x14005000b8 + (:states + gorge-pusher-idle + ) + ) + + +(defskelgroup *pusher-sg* pusher + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +(defbehavior pusher-base-init pusher-base () + (set! (-> self mask) (logior (process-mask enemy platform) (-> self mask))) + (let ((gp-0 (new 'process 'collide-shape-moving self (collide-list-enum hit-by-others)))) + (set! (-> gp-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> gp-0 reaction) default-collision-reaction) + (set! (-> gp-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s5-0 (new 'process 'collide-shape-prim-group gp-0 (the-as uint 1) 0))) + (set! (-> s5-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s5-0 collide-with) (the-as uint 16)) + (set! (-> s5-0 prim-core action) (the-as uint 3)) + (set! (-> s5-0 transform-index) 0) + (set-vector! (-> s5-0 local-sphere) -8192.0 0.0 0.0 40960.0) + (set-root-prim! gp-0 s5-0) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh gp-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 3)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 4) + (set-vector! (-> s4-0 local-sphere) 8192.0 0.0 0.0 28672.0) + (append-prim s5-0 s4-0) + ) + ) + (set! (-> gp-0 nav-radius) (* 0.75 (-> gp-0 root-prim local-sphere w))) + (backup-collide-with-as gp-0) + (set! (-> self root-override) gp-0) + gp-0 + ) + ) + +(defstate pusher-idle (pusher) + :trans + (the-as (function none :behavior pusher) rider-trans) + :code + (behavior () + (while #t + (let ((f0-0 -1.0)) + (when (and *target* *camera*) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector-! gp-0 (target-pos 0) (camera-pos)) + (set! f0-0 (ray-capsule-intersect (-> self cyl) (camera-pos) gp-0)) + ) + ) + (cond + ((< f0-0 0.0) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (get-current-value-with-mirror (-> self sync) (-> self max-frame))) + (set! (-> gp-1 param 1) 1.0) + (joint-control-channel-group-eval! gp-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) 0.0) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior pusher) rider-post) + ) + +(defmethod init-from-entity! pusher ((obj pusher) (arg0 entity-actor)) + (pusher-base-init) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *pusher-sg* '()) + (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15) + (set! (-> obj max-frame) (res-lump-float arg0 'max-frame :default (the float (ja-num-frames 0)))) + (set! (-> obj cyl origin quad) (-> obj root-override trans quad)) + (vector-x-quaternion! (-> obj cyl axis) (-> obj root-override quat)) + (vector-negate! (-> obj cyl axis) (-> obj cyl axis)) + (set! (-> obj cyl length) 36864.0) + (set! (-> obj cyl radius) 20480.0) + (go pusher-idle) + (none) + ) + +(defstate gorge-pusher-idle (gorge-pusher) + :trans + (the-as (function none :behavior gorge-pusher) rider-trans) + :code + (behavior () + (while #t + (cond + ((task-closed? (game-task rolling-race) (task-status need-introduction)) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (-> self min-frame)) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (-> self max-frame)) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior gorge-pusher) rider-post) + ) + +(defmethod init-from-entity! gorge-pusher ((obj gorge-pusher) (arg0 entity-actor)) + (pusher-base-init) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *pusher-sg* '()) + (set! (-> obj max-frame) (res-lump-float arg0 'max-frame :default 1.0)) + (set! (-> obj max-frame) (* (-> obj max-frame) (the float (ja-num-frames 0)))) + (set! (-> obj min-frame) (res-lump-float arg0 'min-frame)) + (set! (-> obj min-frame) (* (-> obj min-frame) (the float (ja-num-frames 0)))) + (cond + ((task-closed? (game-task rolling-race) (task-status need-introduction)) + (let ((v1-6 (-> obj skel root-channel 0))) + (set! (-> v1-6 num-func) num-func-identity) + (set! (-> v1-6 frame-num) (-> obj min-frame)) + ) + ) + (else + (let ((v1-10 (-> obj skel root-channel 0))) + (set! (-> v1-10 num-func) num-func-identity) + (set! (-> v1-10 frame-num) (-> obj max-frame)) + ) + ) + ) + (go gorge-pusher-idle) + (none) + ) + +(deftype dark-plant (process-drawable) + ((num-alts int32 :offset-assert 176) + (alts entity-actor 4 :offset-assert 180) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xc4 + :flag-assert #x14006000c4 + (:states + dark-plant-death + dark-plant-gone + dark-plant-idle + dark-plant-sprout + dark-plant-startup + ) + ) + + +(defskelgroup *dark-plant-sg* dark-plant + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 2.25 0 6) + :longest-edge (meters 0) + ) + +(defun dark-plant-check-target ((arg0 dark-plant)) + (the-as symbol (and *target* (and + (< (vector-vector-distance (-> arg0 root trans) (target-pos 0)) 16384.0) + (send-event *target* 'query 'powerup 4) + ) + ) + ) + ) + +(defun dark-plant-randomize ((arg0 dark-plant)) + (quaternion-axis-angle! (-> arg0 root quat) 0.0 1.0 0.0 (rand-vu-float-range 0.0 65536.0)) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (set-vector! s5-1 (rand-vu-float-range -1024.0 1024.0) 0.0 (rand-vu-float-range -1024.0 1024.0) 1.0) + (vector+! (-> arg0 root trans) (-> arg0 entity extra trans) s5-1) + ) + ) + +(defun dark-plants-all-done ((arg0 dark-plant)) + (while #t + (if (!= (-> (the-as process arg0) state) dark-plant-gone) + (return #f) + ) + (if (zero? (-> arg0 num-alts)) + (return #t) + ) + (let ((v1-9 (-> arg0 alts 0 extra process))) + (if (not v1-9) + (return #t) + ) + (if (= v1-9 (the-as process arg0)) + (return #t) + ) + (set! arg0 (the-as dark-plant v1-9)) + ) + ) + (the-as symbol #f) + ) + +(defun dark-plant-has-bad-neighbor ((arg0 dark-plant)) + (dotimes (v1-0 (-> arg0 num-alts)) + (let ((a1-4 (-> arg0 alts v1-0 extra process))) + (if (and a1-4 (!= (-> a1-4 state) dark-plant-gone)) + (return #t) + ) + ) + ) + #f + ) + +(defbehavior dark-plant-trans dark-plant () + (if (dark-plant-check-target self) + (go dark-plant-death) + ) + (none) + ) + +(defstate dark-plant-sprout (dark-plant) + :trans + dark-plant-trans + :code + (behavior () + (dark-plant-randomize self) + (logclear! (-> self draw status) (draw-status drwf01)) + (sound-play-by-name (static-sound-name "darkvine-grow") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go dark-plant-idle) + (none) + ) + :post + (the-as (function none :behavior dark-plant) ja-post) + ) + +(defstate dark-plant-gone (dark-plant) + :code + (behavior () + (logior! (-> self draw status) (draw-status drwf01)) + (let* ((f30-0 1500.0) + (v1-4 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-5 (the-as number (logior #x3f800000 v1-4))) + (gp-0 (+ (the int (* f30-0 (+ -1.0 (the-as float v1-5)))) 3000)) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (when (and + (!= (get-task-status (game-task rolling-plants)) (task-status invalid)) + (!= (get-task-status (game-task rolling-plants)) 7) + ) + (cond + ((>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0) + (go dark-plant-sprout) + ) + ((dark-plant-check-target self) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + ((not (dark-plant-has-bad-neighbor self)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (else + ) + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior dark-plant) ja-post) + ) + +(defstate dark-plant-death (dark-plant) + :code + (behavior () + (spawn (-> self part) (-> self root trans)) + (ja-channel-push! 1 60) + (sound-play-by-name (static-sound-name "darkvine-kill") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) 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 3)) 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!) + ) + ) + (go dark-plant-gone) + (none) + ) + :post + (the-as (function none :behavior dark-plant) ja-post) + ) + +(defstate dark-plant-idle (dark-plant) + :trans + dark-plant-trans + :code + (behavior () + (while #t + (when (and + (logtest? (-> self draw status) (draw-status drwf03)) + *target* + (>= 81920.0 (vector-vector-distance (-> self root trans) (-> *target* control trans))) + ) + (if (rand-vu-percent? 0.3) + (sound-play-by-name (static-sound-name "darkvine-move") (new-sound-id) 1024 0 0 1 #t) + ) + (when (task-closed? (game-task rolling-plants) (task-status need-hint)) + (level-hint-spawn + (game-text-id rolling-dark-plants-location-hint) + "sksp0113" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'query) + (set! (-> a1-4 param 0) (the-as uint 'powerup)) + (set! (-> a1-4 param 1) (the-as uint 4)) + (if (not (send-event-function *target* a1-4)) + (level-hint-spawn + (game-text-id rolling-dark-plants-hint) + "sksp0114" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + ) + ) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> gp-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (let* ((f30-1 0.9) + (f28-0 0.25) + (v1-32 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-33 (the-as number (logior #x3f800000 v1-32))) + ) + (set! (-> gp-1 param 1) (+ f30-1 (* f28-0 (+ -1.0 (the-as float v1-33))))) + ) + (set! (-> gp-1 frame-num) 0.0) + (joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (the float (+ (-> gp-2 frame-group data 0 length) -1))) + (let* ((f30-2 0.9) + (f28-1 0.25) + (v1-45 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-46 (the-as number (logior #x3f800000 v1-45))) + ) + (set! (-> gp-2 param 1) (+ f30-2 (* f28-1 (+ -1.0 (the-as float v1-46))))) + ) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior dark-plant) ja-post) + ) + +(defstate dark-plant-startup (dark-plant) + :trans + dark-plant-trans + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> gp-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (set! (-> gp-0 param 1) 1.0) + (let* ((v1-12 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-13 (the-as number (logior #x3f800000 v1-12))) + ) + (set! (-> gp-0 frame-num) (* (+ -1.0 (the-as float v1-13)) (the float (ja-num-frames 0)))) + ) + (joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 2)) 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!) + ) + ) + (go dark-plant-idle) + (none) + ) + :post + (the-as (function none :behavior dark-plant) ja-post) + ) + +(set! (-> *part-group-id-table* 455) + (new 'static 'sparticle-launch-group + :length 2 + :duration #x2a + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-dark-plant" + :launcher + (new 'static 'inline-array sparticle-group-item 2 (sp-item 1764) (sp-item 2356)) + :bounds (new 'static 'sphere :w 61440.0) + ) + ) + +(set! (-> *part-id-table* 2356) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 2.0)) + (sp-flt spt-scale-x (meters 12.0)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-flt spt-a 96.0) + (sp-flt spt-fade-g -3.0) + (sp-flt spt-fade-a -2.4) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +(set! (-> *part-id-table* 1764) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 128.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 128.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.02) 1.0) + (sp-flt spt-scalevel-x (meters -0.00066666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-rnd-flt spt-accel-y 0.0 5.4613333 1.0) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-flt spt-conerot-x (degrees 45.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 4.5) 1.0) + (sp-rnd-flt spt-rotate-y (degrees -15.0) (degrees 30.0) 1.0) + (sp-end) + ) + ) + ) + +(defmethod init-from-entity! dark-plant ((obj dark-plant) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *dark-plant-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 455) obj)) + (set! (-> obj num-alts) (min 4 (entity-actor-count (-> obj entity) 'alt-actor))) + (dotimes (s5-3 (-> obj num-alts)) + (set! (-> obj alts s5-3) (entity-actor-lookup (-> obj entity) 'alt-actor s5-3)) + ) + (if (zero? (-> obj num-alts)) + (format 0 "ERROR: ~S has no alternates~%" (-> obj name)) + ) + (dark-plant-randomize obj) + (case (get-task-status (game-task rolling-plants)) + (((task-status invalid) (task-status need-resolution)) + (go dark-plant-gone) + ) + (else + (go dark-plant-startup) + ) + ) + (none) + ) + +(deftype happy-plant (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 + happy-plant-init + happy-plant-opened + happy-plant-opening + ) + ) + + +(defskelgroup *happy-plant-sg* happy-plant + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 2.25 0 6) + :longest-edge (meters 0) + ) + +(defstate happy-plant-opened (happy-plant) + :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) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 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) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior happy-plant) ja-post) + ) + +(defstate happy-plant-opening (happy-plant) + :exit + (behavior () + (when *target* + (logclear! (-> *target* mask) (process-mask sleep)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self mask) (process-mask actor-pause)) + ) + (none) + ) + :code + (behavior () + (close-specific-task! (game-task rolling-plants) (task-status need-reminder)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (logclear! (-> self mask) (process-mask actor-pause)) + (while (and *target* (< (vector-vector-distance (-> self root-override trans) (target-pos 0)) 24576.0)) + (suspend) + ) + (let* ((gp-1 (get-process *default-dead-pool* manipy #x4000)) + (gp-2 + (ppointer->handle + (when gp-1 + (let ((t9-5 (method-of-type manipy activate))) + (t9-5 (the-as manipy gp-1) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 manipy-init (-> self entity extra trans) (-> self entity) *rollingcam-sg* #f) + (-> gp-1 ppointer) + ) + ) + ) + ) + (let ((s5-1 (get-process *default-dead-pool* othercam #x4000))) + (ppointer->handle (when s5-1 + (let ((t9-8 (method-of-type othercam activate))) + (t9-8 (the-as othercam s5-1) (-> gp-2 process 0) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 othercam-init-by-other (-> gp-2 process 0) 4 #f #t) + (-> s5-1 ppointer) + ) + ) + ) + (let* ((s5-2 (get-process *default-dead-pool* fuel-cell #x4000)) + (s5-3 (ppointer->handle (when s5-2 + (let ((t9-11 (method-of-type fuel-cell activate))) + (t9-11 (the-as fuel-cell s5-2) self 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process s5-2 fuel-cell-init-as-clone (process->handle self) 55) + (-> s5-2 ppointer) + ) + ) + ) + ) + (if *target* + (logior! (-> *target* mask) (process-mask sleep)) + ) + (send-event (-> gp-2 process 0) 'anim-mode 'clone-anim) + (ja-play-spooled-anim + (new 'static 'spool-anim + :name "happy-plant-open" + :index 5 + :parts 2 + :command-list + '((0 send-event target draw #f) (10000 send-event target draw #t)) + ) + (the-as art-joint-anim #f) + (the-as art-joint-anim (-> self draw art-group data 4)) + (the-as (function process-drawable symbol) false-func) + ) + (ja-channel-set! 1) + (let ((v1-39 (-> self skel root-channel 0))) + (set! (-> v1-39 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + ) + (if (handle->process (the-as int gp-2)) + (deactivate (-> gp-2 process 0)) + ) + (let ((gp-3 (handle->process s5-3))) + (when gp-3 + (send-event gp-3 'stop-cloning) + (let ((s5-4 (new-stack-vector0))) + (vector<-cspace! s5-4 (-> self node-list data 25)) + (send-event gp-3 'trans s5-4) + ) + ) + ) + ) + ) + (restore-collide-with-as (-> self root-override)) + (go happy-plant-opened) + (none) + ) + :post + (the-as (function none :behavior happy-plant) transform-post) + ) + +(defstate happy-plant-init (happy-plant) + :trans + (behavior () + (when (-> self alt-actor) + (spool-push *art-control* "happy-plant-open" 0 self -99.0) + (let* ((gp-0 (-> self alt-actor extra process)) + (a0-2 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) dark-plant)) + gp-0 + ) + ) + ) + (when a0-2 + (if (dark-plants-all-done (the-as dark-plant a0-2)) + (go happy-plant-opening) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (clear-collide-with-as (-> self root-override)) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-1 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior happy-plant) ja-post) + ) + +(defmethod init-from-entity! happy-plant ((obj happy-plant) (arg0 entity-actor)) + (stack-size-set! (-> obj main-thread) 512) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 8192.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *happy-plant-sg* '()) + (set! (-> obj alt-actor) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (case (get-task-status (game-task rolling-plants)) + (((task-status invalid)) + (let ((v1-19 (-> obj skel root-channel 0))) + (set! (-> v1-19 frame-group) (the-as art-joint-anim (-> obj draw art-group data 4))) + ) + (go happy-plant-opened) + ) + (((task-status need-resolution)) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (let ((v1-23 (-> obj skel root-channel 0))) + (set! (-> v1-23 frame-group) (the-as art-joint-anim (-> obj draw art-group data 4))) + ) + (logior! (-> obj skel status) 1) + (ja-post) + (set! (-> obj skel status) (logand -2 (-> obj skel status))) + (vector<-cspace! s5-1 (-> obj node-list data 25)) + (birth-pickup-at-point s5-1 (pickup-type fuel-cell) 55.0 #f obj (the-as fact-info #f)) + ) + (go happy-plant-opened) + ) + (else + (go happy-plant-init) + ) + ) + (none) + ) + +(deftype race-time (structure) + ((digit int8 5 :offset-assert 0) + ) + :pack-me + :method-count-assert 9 + :size-assert #x5 + :flag-assert #x900000005 + ) + + +(defun race-time-copy! ((arg0 race-time) (arg1 race-time)) + (dotimes (v1-0 5) + (set! (-> arg0 digit v1-0) (-> arg1 digit v1-0)) + ) + #f + ) + +(defun seconds->race-time ((arg0 race-time) (arg1 int)) + (let* ((v1-1 (max 0 (min #x2bf1d arg1))) + (f0-1 (* 0.0033333334 (the float v1-1))) + ) + (set! (-> arg0 digit 0) (the int (* 0.016666668 f0-1))) + (let ((f0-2 (- f0-1 (* 60.0 (the float (-> arg0 digit 0)))))) + (set! (-> arg0 digit 1) (the int (* 0.1 f0-2))) + (let ((f0-3 (- f0-2 (* 10.0 (the float (-> arg0 digit 1)))))) + (set! (-> arg0 digit 2) (the int f0-3)) + (let ((f0-4 (- f0-3 (the float (-> arg0 digit 2))))) + (set! (-> arg0 digit 3) (the int (* 10.0 f0-4))) + (let* ((f0-5 (- f0-4 (* 0.1 (the float (-> arg0 digit 3))))) + (v0-0 (the int (* 100.0 f0-5))) + ) + (set! (-> arg0 digit 4) v0-0) + v0-0 + ) + ) + ) + ) + ) + ) + +(defun race-time->seconds ((arg0 race-time)) + (let ((f0-5 (+ (the float (* 60 (-> arg0 digit 0))) + (the float (* 10 (-> arg0 digit 1))) + (the float (-> arg0 digit 2)) + (* 0.1 (the float (-> arg0 digit 3))) + (* 0.01 (the float (-> arg0 digit 4))) + ) + ) + ) + (the int (* 300.0 f0-5)) + ) + ) + +(defun race-time-less-than ((arg0 race-time) (arg1 race-time)) + (dotimes (v1-0 5) + (cond + ((< (-> arg0 digit v1-0) (-> arg1 digit v1-0)) + (return #t) + ) + ((< (-> arg1 digit v1-0) (-> arg0 digit v1-0)) + (return #f) + ) + ) + ) + #f + ) + +(defun race-time-save ((arg0 race-time) (arg1 int) (arg2 task-control)) + (dotimes (s3-0 5) + (save-reminder arg2 (-> arg0 digit s3-0) (+ arg1 s3-0)) + ) + #f + ) + +(defun race-time-read ((arg0 race-time) (arg1 int) (arg2 task-control) (arg3 int)) + (dotimes (s2-0 5) + (set! (-> arg0 digit s2-0) (get-reminder arg2 (+ arg1 s2-0))) + ) + (let ((a1-3 (new 'stack 'race-time))) + (set! (-> a1-3 digit 4) 1) + (the-as symbol (if (race-time-less-than arg0 a1-3) + (seconds->race-time arg0 arg3) + ) + ) + ) + ) + +(defskelgroup *rolling-start-whole-sg* rolling-start + 0 + 4 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 30) + :longest-edge (meters 0) + ) + +(defskelgroup *rolling-start-broken-sg* rolling-start + 2 + 4 + ((3 (meters 999999))) + :bounds (static-spherem 0 0 0 30) + :longest-edge (meters 0) + ) + +(deftype rolling-start (process-drawable) + ((whole-look lod-set :inline :offset-assert 176) + (broken-look lod-set :inline :offset-assert 212) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf5 + :flag-assert #x14009000f5 + (:states + (rolling-start-break symbol) + rolling-start-whole + ) + ) + + +(defstate rolling-start-break (rolling-start) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('unbreak) + (go rolling-start-whole) + ) + ) + ) + :code + (behavior ((arg0 symbol)) + (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!) + ) + ) + (lods-assign! (-> self draw) (-> self broken-look)) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) 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 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (while #t + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-8 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! a0-8 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (if arg0 + (deactivate self) + ) + ) + (none) + ) + :post + (the-as (function none :behavior rolling-start) ja-post) + ) + +(defstate rolling-start-whole (rolling-start) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('break) + (sound-play-by-name (static-sound-name "cool-rolling-st") (new-sound-id) 1024 0 0 1 #t) + (go rolling-start-break #f) + ) + (('break-and-die) + (go rolling-start-break #t) + ) + ) + ) + :code + (behavior () + (lods-assign! (-> self draw) (-> self whole-look)) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) 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 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior rolling-start) ja-post) + ) + +(defbehavior rolling-start-init-by-other rolling-start ((arg0 vector) (arg1 float)) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg0 quad)) + (initialize-skeleton self *rolling-start-whole-sg* '()) + (dummy-9 (-> self whole-look) *rolling-start-whole-sg* (-> self draw art-group) (-> self entity)) + (dummy-9 (-> self broken-look) *rolling-start-broken-sg* (-> self draw art-group) (-> self entity)) + (let ((s5-1 (new 'stack-no-clear 'matrix))) + (matrix-rotate-y! s5-1 arg1) + (matrix->quaternion (-> self root quat) s5-1) + ) + (go rolling-start-whole) + (none) + ) + +(deftype gorge (process-drawable) + ((root-override collide-shape-moving :offset 112) + (coord matrix :inline :offset-assert 176) + (radius float :offset-assert 240) + (thickness float :offset-assert 244) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf8 + :flag-assert #x14009000f8 + ) + + +(defbehavior gorge-init gorge ((arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) + (forward-down->inv-matrix (-> self coord) arg1 (new 'static 'vector :y -1.0)) + (matrix-transpose! (-> self coord) (-> self coord)) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (vector-matrix*! s3-0 arg0 (-> self coord)) + (vector-negate! (-> self coord vector 3) s3-0) + ) + (set! (-> self coord vector 3 w) 1.0) + (set! (-> self radius) arg2) + (let ((f0-2 arg3)) + (set! (-> self thickness) f0-2) + f0-2 + ) + ) + +(deftype gorge-start (gorge) + ((tasks task-control :offset-assert 248) + (record-time race-time :inline :offset-assert 252) + (this-time race-time :inline :offset-assert 257) + (start-banner handle :offset-assert 264) + (end-banner handle :offset-assert 272) + (timer-pos-offset int32 :offset-assert 280) + (ticker ticky :inline :offset-assert 288) + ) + :heap-base #xd0 + :method-count-assert 20 + :size-assert #x140 + :flag-assert #x1400d00140 + (:states + gorge-start-idle + gorge-start-race-aborted + gorge-start-race-finished + gorge-start-racing + gorge-start-ready + ) + ) + + +(deftype gorge-finish (gorge) + ((alt-actor entity-actor :offset-assert 248) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xfc + :flag-assert #x14009000fc + (:states + gorge-finish-idle + ) + ) + + +(deftype gorge-abort (gorge) + () + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf8 + :flag-assert #x14009000f8 + (:states + gorge-abort-idle + ) + ) + + +(defun gorge-behind ((arg0 gorge)) + (if (not *target*) + (return #f) + ) + (let ((gp-0 (new-stack-vector0))) + (vector-matrix*! gp-0 (target-pos 0) (-> arg0 coord)) + (and + (< (fabs (-> gp-0 x)) (-> arg0 radius)) + (< (-> gp-0 y) (-> arg0 radius)) + (< 0.0 (-> gp-0 y)) + (< (-> gp-0 z) 0.0) + ) + ) + ) + +(defun gorge-in-front ((arg0 gorge)) + (if (not *target*) + (return #f) + ) + (let ((s5-0 (new-stack-vector0))) + (vector-matrix*! s5-0 (target-pos 0) (-> arg0 coord)) + (and + (< (fabs (-> s5-0 x)) (-> arg0 radius)) + (< (-> s5-0 y) (-> arg0 radius)) + (< 0.0 (-> s5-0 y)) + (< 0.0 (-> s5-0 z)) + (< (-> s5-0 z) (-> arg0 thickness)) + ) + ) + ) + +(defun gorge-trans () + (none) + ) + +(defstate gorge-abort-idle (gorge-abort) + :trans + (the-as (function none :behavior gorge-abort) gorge-trans) + :code + (behavior () + (while #t + (suspend) + (if (gorge-behind self) + (send-event (ppointer->process (-> self parent)) 'aborted) + ) + ) + (none) + ) + ) + +(defbehavior gorge-abort-init-by-other gorge-abort ((arg0 vector) (arg1 vector) (arg2 float)) + (set! (-> self root-override) (the-as collide-shape-moving (new 'process 'trsqv))) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (gorge-init arg0 arg1 arg2 8192.0) + (go gorge-abort-idle) + (none) + ) + +(defstate gorge-finish-idle (gorge-finish) + :trans + (the-as (function none :behavior gorge-finish) gorge-trans) + :code + (behavior () + (while #t + (suspend) + (if (gorge-in-front self) + (send-event (ppointer->process (-> self parent)) 'finished) + ) + ) + (none) + ) + ) + +(defbehavior gorge-finish-init-by-other gorge-finish ((arg0 vector) (arg1 vector) (arg2 float)) + (set! (-> self root-override) (the-as collide-shape-moving (new 'process 'trsqv))) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (gorge-init arg0 arg1 arg2 20480.0) + (go gorge-finish-idle) + (none) + ) + +(defun race-time->string ((arg0 race-time)) + (cond + ((zero? (-> arg0 digit 0)) + (format + (clear *temp-string*) + "~D~D.~D~D" + (-> arg0 digit 1) + (-> arg0 digit 2) + (-> arg0 digit 3) + (-> arg0 digit 4) + ) + *temp-string* + ) + (else + (format + (clear *temp-string*) + "~D:~D~D.~D~D" + (-> arg0 digit 0) + (-> arg0 digit 1) + (-> arg0 digit 2) + (-> arg0 digit 3) + (-> arg0 digit 4) + ) + *temp-string* + ) + ) + ) + +(defbehavior gorge-start-draw-time gorge-start ((arg0 symbol) (arg1 symbol)) + (let ((gp-0 + (new + 'stack + 'font-context + *font-default-matrix* + 0 + 0 + 0.0 + (font-color yellow-orange) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-1 gp-0)) + (set! (-> v1-1 width) (the float 200)) + ) + (let ((v1-2 gp-0)) + (set! (-> v1-2 height) (the float 50)) + ) + (let ((v1-3 gp-0)) + (set! (-> v1-3 scale) 0.7) + ) + (set! (-> gp-0 origin x) (the float (+ (-> self timer-pos-offset) 392))) + (set! (-> gp-0 origin y) (the float (- 10 (-> self timer-pos-offset)))) + (set! (-> gp-0 flags) (font-flags shadow kerning right large)) + (print-game-text + (lookup-text! *common-text* (game-text-id rolling-race-time-string-prefix) #f) + gp-0 + #f + 128 + 22 + ) + (set! (-> gp-0 origin x) (+ 10.0 (-> gp-0 origin x))) + (set! (-> gp-0 flags) (font-flags shadow kerning large)) + (print-game-text (race-time->string (-> self this-time)) gp-0 #f 128 22) + (set! (-> gp-0 origin x) (+ -10.0 (-> gp-0 origin x))) + (set! (-> gp-0 origin y) (+ 15.0 (-> gp-0 origin y))) + (set! (-> gp-0 flags) (font-flags shadow kerning right large)) + (print-game-text + (lookup-text! *common-text* (game-text-id rolling-race-record-string-prefix) #f) + gp-0 + #f + 128 + 22 + ) + (set! (-> gp-0 origin x) (+ 10.0 (-> gp-0 origin x))) + (set! (-> gp-0 flags) (font-flags shadow kerning large)) + (print-game-text (race-time->string (-> self record-time)) gp-0 #f 128 22) + (cond + ((not arg0) + ) + ((race-time-less-than (-> self this-time) (-> self record-time)) + (when (< (mod (-> *display* real-frame-counter) 90) 60) + (let ((v1-18 gp-0)) + (set! (-> v1-18 scale) 1.0) + ) + (set! (-> gp-0 origin x) 156.0) + (set! (-> gp-0 origin y) 80.0) + (set! (-> gp-0 flags) (font-flags shadow kerning middle left large)) + (let ((a0-15 gp-0)) + (set! (-> a0-15 color) (font-color orange-red)) + ) + (print-game-text + (lookup-text! *common-text* (game-text-id rolling-race-new-record-string-prefix) #f) + gp-0 + #f + 128 + 22 + ) + ) + (when arg1 + (close-specific-task! (-> self entity extra perm task) (task-status need-reminder)) + (level-hint-spawn + (game-text-id rolling-race-beat-record) + "sksp0109" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (race-time-save (-> self this-time) 1 (-> self tasks)) + ) + ) + (else + (if arg1 + (ambient-hint-spawn "st-lose" (the-as vector #f) *entity-pool* 'stinger) + ) + (when (< (mod (-> *display* real-frame-counter) 90) 60) + (let ((v1-30 gp-0)) + (set! (-> v1-30 scale) 1.0) + ) + (set! (-> gp-0 origin x) 156.0) + (set! (-> gp-0 origin y) 80.0) + (set! (-> gp-0 flags) (font-flags shadow kerning middle left large)) + (let ((a0-23 gp-0)) + (set! (-> a0-23 color) (font-color orange-red)) + ) + (print-game-text (lookup-text! *common-text* (game-text-id rolling-race-try-again-string) #f) gp-0 #f 128 22) + ) + ) + ) + ) + (none) + ) + +(defbehavior gorge-start-launch-start-banner gorge-start () + (the-as + handle + (when (task-closed? (game-task rolling-race) (task-status need-introduction)) + (when (not (handle->process (-> self start-banner))) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (let* ((s5-0 (get-process *default-dead-pool* rolling-start #x4000)) + (v0-1 + (ppointer->handle (when s5-0 + (let ((t9-2 (method-of-type rolling-start activate))) + (t9-2 (the-as rolling-start s5-0) self 'rolling-start (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 rolling-start-init-by-other gp-0 0.0) + (-> s5-0 ppointer) + ) + ) + ) + ) + (set! (-> self start-banner) (the-as handle v0-1)) + v0-1 + ) + ) + ) + ) + ) + ) + +(defstate gorge-start-race-finished (gorge-start) + :trans + (behavior () (gorge-trans) (none)) + :code + (behavior () + (gorge-start-draw-time #t #t) + (suspend) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (set! (-> self timer-pos-offset) + (seekl (-> self timer-pos-offset) 100 (the int (* 3.0 (-> *display* time-adjust-ratio)))) + ) + (when (= (-> self timer-pos-offset) 100) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'enable) + (send-event (ppointer->process (-> *hud-parts* money)) 'enable) + ) + (gorge-start-draw-time #t #f) + (suspend) + (if (gorge-in-front self) + (go gorge-start-ready) + ) + ) + (go gorge-start-idle) + (none) + ) + ) + +(defstate gorge-start-race-aborted (gorge-start) + :trans + (behavior () (gorge-trans) (none)) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (set! (-> self timer-pos-offset) + (seekl (-> self timer-pos-offset) 100 (the int (* 5.0 (-> *display* time-adjust-ratio)))) + ) + (when (= (-> self timer-pos-offset) 100) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'enable) + (send-event (ppointer->process (-> *hud-parts* money)) 'enable) + ) + (when (< (mod (-> *display* real-frame-counter) 90) 60) + (let ((gp-0 + (new + 'stack + 'font-context + *font-default-matrix* + 156 + 80 + 0.0 + (font-color orange-red) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-20 gp-0)) + (set! (-> v1-20 width) (the float 200)) + ) + (let ((v1-21 gp-0)) + (set! (-> v1-21 height) (the float 50)) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning middle left large)) + (print-game-text + (lookup-text! *common-text* (game-text-id rolling-race-start-race-aborted) #f) + gp-0 + #f + 128 + 22 + ) + ) + ) + (suspend) + (if (gorge-in-front self) + (go gorge-start-ready) + ) + ) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'enable) + (send-event (ppointer->process (-> *hud-parts* money)) 'enable) + (go gorge-start-idle) + (none) + ) + ) + +(defstate gorge-start-racing (gorge-start) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('finished) + (go gorge-start-race-finished) + ) + (('aborted) + (go gorge-start-race-aborted) + ) + ) + ) + :enter + (behavior () + (send-event (handle->process (-> self start-banner)) 'break) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'disable) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'hide) + (send-event (ppointer->process (-> *hud-parts* money)) 'disable) + (send-event (ppointer->process (-> *hud-parts* money)) 'hide) + (race-time-read (-> self record-time) 1 (-> self tasks) #x34bc) + (let ((gp-0 (get-process *default-dead-pool* rolling-start #x4000))) + (set! (-> self end-banner) + (ppointer->handle (when gp-0 + (let ((t9-7 (method-of-type rolling-start activate))) + (t9-7 (the-as rolling-start gp-0) self 'rolling-start (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + rolling-start-init-by-other + (new 'static 'vector :x -86016.0 :y 112640.0 :z -6309888.0) + 16384.0 + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (let ((gp-1 (get-process *default-dead-pool* gorge-finish #x4000))) + (when gp-1 + (let ((t9-10 (method-of-type gorge-finish activate))) + (t9-10 (the-as gorge-finish gp-1) self 'gorge-finish (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + gorge-finish-init-by-other + (new 'static 'vector :x -86016.0 :y 114688.0 :z -6303744.0) + (new 'static 'vector :x -1.0) + 57344.0 + ) + (-> gp-1 ppointer) + ) + ) + (let ((gp-2 (get-process *default-dead-pool* gorge-abort #x4000))) + (when gp-2 + (let ((t9-13 (method-of-type gorge-abort activate))) + (t9-13 (the-as gorge-abort gp-2) self 'gorge-abort (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-2 + gorge-abort-init-by-other + (new 'static 'vector :x -696320.0 :y 122880.0 :z -6828032.0) + (new 'static 'vector :x -0.707 :y 0.707) + 163840.0 + ) + (-> gp-2 ppointer) + ) + ) + (let ((gp-3 (get-process *default-dead-pool* gorge-abort #x4000))) + (when gp-3 + (let ((t9-16 (method-of-type gorge-abort activate))) + (t9-16 (the-as gorge-abort gp-3) self 'gorge-abort (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-3 + gorge-abort-init-by-other + (new 'static 'vector :x -847872.0 :y 143360.0 :z -6828032.0) + (new 'static 'vector :x 0.707 :y 0.707) + 163840.0 + ) + (-> gp-3 ppointer) + ) + ) + (let ((gp-4 (get-process *default-dead-pool* gorge-abort #x4000))) + (when gp-4 + (let ((t9-19 (method-of-type gorge-abort activate))) + (t9-19 (the-as gorge-abort gp-4) self 'gorge-abort (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-4 + gorge-abort-init-by-other + (new 'static 'vector :x -417792.0 :y 143360.0 :z -6004736.0) + (new 'static 'vector :x -0.5 :y 0.707 :z 0.3) + 266240.0 + ) + (-> gp-4 ppointer) + ) + ) + (let ((gp-5 (get-process *default-dead-pool* gorge-abort #x4000))) + (when gp-5 + (let ((t9-22 (method-of-type gorge-abort activate))) + (t9-22 (the-as gorge-abort gp-5) self 'gorge-abort (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-5 + gorge-abort-init-by-other + (new 'static 'vector :x -647168.0 :y 143360.0 :z -6025216.0) + (new 'static 'vector :x 0.5 :y 0.707 :z -0.3) + 163840.0 + ) + (-> gp-5 ppointer) + ) + ) + (sleep (-> self ticker) (the-as uint #x1b7740)) + (set-setting! *setting-control* self 'sound-flava #f 40.0 42) + (none) + ) + :exit + (behavior () + (let* ((v1-0 (-> self child)) + (gp-0 (-> v1-0 0 brother)) + ) + (while v1-0 + (if (not (or (= v1-0 (-> self start-banner process)) (= v1-0 (-> self end-banner process)))) + (deactivate (-> v1-0 0)) + ) + (set! v1-0 gp-0) + (set! gp-0 (-> v1-0 0 brother)) + ) + ) + (send-event (handle->process (-> self end-banner)) 'break-and-die) + (send-event (handle->process (-> self start-banner)) 'unbreak) + (clear-pending-settings-from-process *setting-control* self 'sound-flava) + (none) + ) + :trans + (the-as (function none :behavior gorge-start) gorge-trans) + :code + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (while #t + (seconds->race-time (-> self this-time) (- (-> *display* game-frame-counter) (-> self state-time))) + (set! (-> self timer-pos-offset) + (seekl (-> self timer-pos-offset) 0 (the int (* 5.0 (-> *display* time-adjust-ratio)))) + ) + (completed? (-> self ticker)) + (gorge-start-draw-time #f #f) + (suspend) + (if (or (not *target*) (gorge-in-front self)) + (go gorge-start-ready) + ) + ) + (none) + ) + ) + +(defstate gorge-start-ready (gorge-start) + :trans + (the-as (function none :behavior gorge-start) gorge-trans) + :code + (behavior () + (while #t + (suspend) + (set! (-> self timer-pos-offset) + (seekl (-> self timer-pos-offset) 100 (the int (* 5.0 (-> *display* time-adjust-ratio)))) + ) + (when (= (-> self timer-pos-offset) 100) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'enable) + (send-event (ppointer->process (-> *hud-parts* money)) 'enable) + ) + (gorge-start-draw-time #f #f) + (cond + ((gorge-in-front self) + ) + ((gorge-behind self) + (go gorge-start-racing) + ) + (else + (go gorge-start-idle) + ) + ) + ) + (none) + ) + ) + +(defstate gorge-start-idle (gorge-start) + :enter + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (none) + ) + :exit + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (none) + ) + :trans + (behavior () (gorge-start-launch-start-banner) (gorge-trans) (none)) + :code + (behavior () + (while #t + (suspend) + (set! (-> self timer-pos-offset) + (seekl (-> self timer-pos-offset) 100 (the int (* 5.0 (-> *display* time-adjust-ratio)))) + ) + (when (= (-> self timer-pos-offset) 100) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'enable) + (send-event (ppointer->process (-> *hud-parts* money)) 'enable) + ) + (if (gorge-in-front self) + (go gorge-start-ready) + ) + ) + (none) + ) + ) + +(defmethod init-from-entity! gorge-start ((obj gorge-start) (arg0 entity-actor)) + (set! (-> obj root-override) (the-as collide-shape-moving (new 'process 'trsqv))) + (process-drawable-from-entity! obj arg0) + (let ((a0-3 (new 'stack-no-clear 'vector))) + (set! (-> a0-3 quad) (-> obj root-override trans quad)) + (set! (-> a0-3 y) (+ -8192.0 (-> a0-3 y))) + (gorge-init a0-3 (new 'static 'vector :z 1.0) 102400.0 40960.0) + ) + (set! (-> obj tasks) (get-task-control (-> obj entity extra perm task))) + (set! (-> obj start-banner) (the-as handle #f)) + (set! (-> obj end-banner) (the-as handle #f)) + (set! (-> obj timer-pos-offset) 100) + (go gorge-start-idle) + (none) + ) + +(deftype rolling-water (water-anim) + () + :heap-base #x70 + :method-count-assert 30 + :size-assert #xdc + :flag-assert #x1e007000dc + ) + + +(define + ripple-for-rolling-water + (the-as object (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + ) + +(defmethod TODO-RENAME-22 rolling-water ((obj rolling-water)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (let ((v1-2 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) v1-2) + (set-vector! (-> obj draw color-mult) 0.01 0.45 0.5 0.75) + (set! (-> v1-2 global-scale) 3072.0) + (set! (-> v1-2 close-fade-dist) 163840.0) + (set! (-> v1-2 far-fade-dist) 245760.0) + (set! (-> v1-2 waveform) (the-as ripple-wave-set ripple-for-rolling-water)) + ) + (set! (-> obj flags) (logand -8388609 (-> obj flags))) + (none) + ) + + + + diff --git a/goal_src/levels/title/title-obs.gc b/goal_src/levels/title/title-obs.gc index 7f84429bc..34599dd13 100644 --- a/goal_src/levels/title/title-obs.gc +++ b/goal_src/levels/title/title-obs.gc @@ -5,3 +5,1029 @@ ;; name in dgo: title-obs ;; dgos: TIT +;; DECOMP BEGINS + +(deftype logo (process-drawable) + ((camera handle :offset-assert 176) + (camera-anim handle :offset-assert 184) + (volumes handle :offset-assert 192) + (black handle :offset-assert 200) + (target handle :offset-assert 208) + (sidekick handle :offset-assert 216) + (main-joint joint-mod :offset-assert 224) + (anim spool-anim :offset-assert 228) + (next-anim spool-anim :offset-assert 232) + (done? symbol :offset-assert 236) + ) + :heap-base #x80 + :method-count-assert 24 + :size-assert #xf0 + :flag-assert #x18008000f0 + (:methods + (idle () _type_ :state 20) + (startup () _type_ :state 21) + (hidden () _type_ :state 22) + (ndi () _type_ :state 23) + ) + ) + + +(defmethod relocate logo ((obj logo) (arg0 int)) + (if (nonzero? (-> obj main-joint)) + (&+! (-> obj main-joint) arg0) + ) + (the-as logo ((method-of-type process-drawable relocate) obj arg0)) + ) + +(deftype logo-slave (process-drawable) + ((parent-process (pointer logo) :offset 12) + (main-joint joint-mod :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 21 + :size-assert #xb4 + :flag-assert #x15005000b4 + (:methods + (idle () _type_ :state 20) + ) + ) + + +(defmethod relocate logo-slave ((obj logo-slave) (arg0 int)) + (if (nonzero? (-> obj main-joint)) + (&+! (-> obj main-joint) arg0) + ) + (the-as logo-slave ((method-of-type process-drawable relocate) obj arg0)) + ) + +(defskelgroup *logo-sg* logo + 0 + 4 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +(defskelgroup *logo-japan-sg* logo + 2 + 4 + ((3 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +(defskelgroup *logo-volumes-sg* logo-volumes + 0 + 4 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +(defskelgroup *logo-volumes-japan-sg* logo-volumes + 2 + 4 + ((3 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +(defskelgroup *logo-black-sg* logo-black + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +(defskelgroup *logo-cam-sg* logo-cam + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +(defskelgroup *ndi-sg* ndi + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 10 0 30) + :longest-edge (meters 0) + ) + +(defskelgroup *ndi-volumes-sg* ndi-volumes + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +(defskelgroup *ndi-cam-sg* ndi-cam + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +(defstate idle (logo-slave) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 uint)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'blend-shape) + (cond + ((-> arg3 param 0) + (set! v0-0 (logior (-> self skel status) 264)) + (set! (-> self skel status) v0-0) + ) + (else + (set! v0-0 (logand (the-as uint -265) (-> self skel status))) + (set! (-> self skel status) v0-0) + ) + ) + v0-0 + ) + ((= v1-0 'origin-joint-index) + (set! v0-0 (-> arg3 param 0)) + (set! (-> self draw origin-joint-index) v0-0) + v0-0 + ) + ) + ) + ) + ) + :code + (behavior () + (ja-post) + (while #t + (clone-anim-once + (ppointer->handle (-> self parent-process)) + (the-as int (-> self draw origin-joint-index)) + #t + "" + ) + (if (nonzero? (-> self main-joint)) + (set-trs! + (-> self main-joint) + (-> self parent-process 0 main-joint trans) + (the-as quaternion #f) + (-> self parent-process 0 main-joint scale) + ) + ) + (suspend) + ) + (none) + ) + ) + +(defbehavior logo-slave-init-by-other logo-slave ((arg0 entity) (arg1 skeleton-group)) + (set! (-> self entity) arg0) + (set! (-> self root) (new 'process 'trsqv)) + (initialize-skeleton self arg1 '()) + (logior! (-> self skel status) 1) + (set! (-> self draw origin-joint-index) (the-as uint 3)) + (set! (-> self draw shadow-mask) (the-as uint 255)) + (set! (-> self draw global-effect) (draw-effect title)) + (when (or + (string= (-> self draw art-group name) "logo-volumes") + (string= (-> self draw art-group name) "logo-volumes-japan") + (string= (-> self draw art-group name) "logo-black") + ) + (set! (-> self main-joint) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) self 3)) + (set! (-> self main-joint max-dist) (the-as meters #t)) + ) + (set! (-> self event-hook) (-> (method-of-object self idle) event)) + (go-virtual idle) + (none) + ) + +(defstate startup (logo) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'update) + (clear-pending-settings-from-process *setting-control* self 'process-mask) + ) + ) + ) + ) + :exit + (behavior () + (let ((a0-0 (-> self anim))) + (when (nonzero? a0-0) + (ja-abort-spooled-anim a0-0 (the-as art-joint-anim #f) -1) + (ja-channel-set! 0) + (ja-post) + (let ((a0-3 (handle->process (-> self camera)))) + (if a0-3 + (deactivate a0-3) + ) + ) + ) + ) + (none) + ) + :trans + (behavior () + (if (not (none-reserved? *art-control*)) + (go-virtual hidden) + ) + (if (nonzero? (-> self next-anim)) + (spool-push *art-control* (-> self next-anim name) 0 self -1.0) + ) + (none) + ) + :code + (behavior () + (while (!= (file-status *art-control* (-> self next-anim name) 0) 'active) + (set-blackout-frames 15) + (suspend) + ) + (set! (-> *setting-control* current bg-a) 1.0) + (set-setting! *setting-control* self 'bg-a 'abs 0.0 0) + (let ((gp-1 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self camera-anim) + (ppointer->handle (when gp-1 + (let ((t9-4 (method-of-type logo-slave activate))) + (t9-4 (the-as logo-slave gp-1) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 logo-slave-init-by-other (-> self entity) *logo-cam-sg*) + (-> gp-1 ppointer) + ) + ) + ) + ) + (let ((gp-2 (get-process *default-dead-pool* othercam #x4000))) + (set! (-> self camera) + (ppointer->handle + (when gp-2 + (let ((t9-7 (method-of-type othercam activate))) + (t9-7 (the-as othercam gp-2) (handle->process (-> self camera-anim)) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-2 othercam-init-by-other (handle->process (-> self camera-anim)) 4 #t 'logo) + (-> gp-2 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self camera)) 'mask 0) + (case (scf-get-territory) + ((2) + (let ((gp-3 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self volumes) + (ppointer->handle + (when gp-3 + (let ((t9-12 (method-of-type logo-slave activate))) + (t9-12 (the-as logo-slave gp-3) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-3 logo-slave-init-by-other (-> self entity) *logo-volumes-japan-sg*) + (-> gp-3 ppointer) + ) + ) + ) + ) + ) + (else + (let ((gp-4 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self volumes) + (ppointer->handle (when gp-4 + (let ((t9-15 (method-of-type logo-slave activate))) + (t9-15 (the-as logo-slave gp-4) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-4 logo-slave-init-by-other (-> self entity) *logo-volumes-sg*) + (-> gp-4 ppointer) + ) + ) + ) + ) + ) + ) + (send-event (handle->process (-> self volumes)) 'origin-joint-index 3) + (let ((gp-5 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self black) + (ppointer->handle (when gp-5 + (let ((t9-19 (method-of-type logo-slave activate))) + (t9-19 (the-as logo-slave gp-5) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-5 logo-slave-init-by-other (-> self entity) *logo-black-sg*) + (-> gp-5 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self black)) 'origin-joint-index 3) + (set! (-> self anim) (-> self next-anim)) + (set! (-> self next-anim) + (new 'static 'spool-anim + :name "logo-intro-2" + :index 7 + :parts 15 + :command-list + '((260 want-force-inside village1 #t) + (261 kill "sage-23") + (261 kill "assistant-11") + (261 kill "explorer-4") + ((new 'static 'bfloat :data 261.5) kill "farmer-3") + ((new 'static 'bfloat :data 261.5) kill "oracle-1") + ((new 'static 'bfloat :data 261.5) kill "warp-gate-switch-3") + (262 kill "sharkey-12") + (262 kill "fishermans-boat-2") + (262 kill "evilplant-2") + ((new 'static 'bfloat :data 262.5) kill "revcycle-8") + ((new 'static 'bfloat :data 262.5) kill "revcycleprop-2") + ((new 'static 'bfloat :data 262.5) kill "water-vol-8") + (263 kill "water-vol-9") + (263 kill "water-vol-10") + (263 kill "reflector-middle-2") + (400 want-force-inside village1 #f) + (400 display-level village1 display) + (400 save) + (500 set! *spawn-actors* #t) + ) + ) + ) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (set! *spawn-actors* #f) + (push-setting! *setting-control* self 'process-mask 'set 0.0 16) + (copy-settings-from-target! *setting-control*) + (deactivate (handle->process (-> self black))) + (deactivate (handle->process (-> self volumes))) + (send-event (ppointer->process (-> self parent)) 'wait) + (send-event self 'update) + (ja-channel-set! 1) + (let ((a0-60 (-> self skel root-channel 0))) + (set! (-> a0-60 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-60 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-60 param 1) 1.0) + (set! (-> a0-60 frame-num) 0.0) + (joint-control-channel-group! a0-60 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (logior! (-> self skel status) 32) + (suspend) + (let ((a0-62 (-> self skel root-channel 0))) + (set! (-> a0-62 param 0) (the float (+ (-> a0-62 frame-group data 0 length) -1))) + (set! (-> a0-62 param 1) 1.0) + (joint-control-channel-group-eval! a0-62 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self anim) (-> self next-anim)) + (set! (-> self next-anim) + (new 'static 'spool-anim + :name "logo-loop" + :index 9 + :parts 17 + :command-list + '((61 kill "sage-23") + (61 kill "assistant-11") + (61 kill "explorer-4") + ((new 'static 'bfloat :data 61.5) kill "farmer-3") + ((new 'static 'bfloat :data 61.5) kill "oracle-1") + ((new 'static 'bfloat :data 61.5) kill "warp-gate-switch-3") + (62 kill "sharkey-12") + (62 kill "fishermans-boat-2") + (62 kill "evilplant-2") + ((new 'static 'bfloat :data 62.5) kill "revcycle-8") + ((new 'static 'bfloat :data 62.5) kill "revcycleprop-2") + ((new 'static 'bfloat :data 62.5) kill "water-vol-8") + (63 kill "water-vol-9") + (63 kill "water-vol-10") + (63 kill "reflector-middle-2") + ) + ) + ) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (remove-exit) + (go-virtual idle) + (none) + ) + :post + (behavior () + (if *progress-process* + (logior! (-> self draw status) (draw-status drwf05)) + (logclear! (-> self draw status) (draw-status drwf05)) + ) + (let ((a3-0 (new-stack-vector0)) + (a1-0 (new-stack-vector0)) + ) + (let ((f0-0 (if (= (-> *setting-control* current aspect-ratio) 'aspect16x9) + 0.87 + 1.0 + ) + ) + ) + (set-vector! a3-0 f0-0 f0-0 1.0 1.0) + ) + (set-vector! + a1-0 + (if (= (-> *setting-control* current aspect-ratio) 'aspect16x9) + 2048.0 + 0.0 + ) + (if (= (-> *setting-control* current aspect-ratio) 'aspect16x9) + -1228.8 + 0.0 + ) + 0.0 + 1.0 + ) + (set-trs! (-> self main-joint) a1-0 (the-as quaternion #f) a3-0) + ) + (ja-post) + (none) + ) + ) + +(defstate idle (logo) + :virtual #t + :exit + (-> (method-of-type logo startup) exit) + :trans + (-> (method-of-type logo startup) trans) + :code + (behavior () + (while #t + (set! (-> self anim) (-> self next-anim)) + (when (not (handle->process (-> self camera))) + (let ((gp-0 (get-process *default-dead-pool* othercam #x4000))) + (set! (-> self camera) + (ppointer->handle + (when gp-0 + (let ((t9-1 (method-of-type othercam activate))) + (t9-1 (the-as othercam gp-0) (handle->process (-> self camera-anim)) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 othercam-init-by-other (handle->process (-> self camera-anim)) 4 #t 'logo) + (-> gp-0 ppointer) + ) + ) + ) + ) + ) + (set! *spawn-actors* #f) + (ja-channel-set! 1) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-11 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-11 param 1) 1.0) + (set! (-> a0-11 frame-num) 0.0) + (joint-control-channel-group! a0-11 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (logior! (-> self skel status) 32) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) 1.0) + (joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! *spawn-actors* #t) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + ) + (none) + ) + :post + (-> (method-of-type logo startup) post) + ) + +(defstate hidden (logo) + :virtual #t + :trans + (behavior () + (if (nonzero? (-> self next-anim)) + (spool-push *art-control* (-> self next-anim name) 0 self -1.0) + ) + (none) + ) + :code + (behavior () + (ja-channel-set! 0) + (ja-post) + (let ((gp-0 *master-mode*)) + (set! *master-mode* 'game) + (clear-rec *art-control*) + (set! *master-mode* gp-0) + ) + (while #t + (when (and (none-reserved? *art-control*) (not (paused?))) + (let ((gp-1 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-1) 30) + (set! *camera-look-through-other* 2) + (suspend) + ) + ) + (go-virtual idle) + ) + (set! *camera-look-through-other* 2) + (suspend) + ) + (none) + ) + ) + +(defstate ndi (logo) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'blackout) + (set-setting! *setting-control* self 'bg-a 'abs 1.0 0) + ) + ) + ) + ) + :enter + (behavior () + (set-setting! *setting-control* self 'bg-a 'abs 0.0 0) + (copy-settings-from-target! *setting-control*) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if *time-of-day-proc* + (set! (-> *time-of-day-proc* 0 hour) 12) + ) + (set! (-> self done?) #f) + (none) + ) + :exit + (behavior () ((-> (method-of-type logo startup) exit)) (set-blackout-frames 10) (none)) + :trans + (behavior () + ((-> (method-of-type logo startup) trans)) + (if (and + *debug-segment* + (cpad-pressed? 0 start circle x) + (member (level-status *level* 'village1) '(loaded active)) + ) + (set-setting! *setting-control* self 'bg-a 'abs 1.0 0) + ) + (when (and + (= (-> *setting-control* current bg-a) 1.0) + (and + (member (level-status *level* 'village1) '(active loaded)) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (let ((gp-2 (level-get *level* 'village1))) + (when gp-2 + (load-state-want-levels 'title 'village1) + (load-state-want-display-level 'village1 'display-self) + (load-state-want-vis 'vi1) + (set-force-inside! *load-state* 'village1 #t) + (!= (-> gp-2 all-visible?) 'loading) + ) + ) + ) + ) + (load-state-want-display-level 'village1 'special) + (if (not (-> self done?)) + (ja-abort-spooled-anim (-> self anim) (the-as art-joint-anim #f) -1) + ) + (set! (-> self done?) #t) + (deactivate self) + ) + (if *time-of-day-proc* + (set! (-> *time-of-day-proc* 0 hour) 12) + ) + (none) + ) + :code + (behavior () + (while (!= (file-status *art-control* (-> self next-anim name) 0) 'active) + (set-blackout-frames 15) + (suspend) + ) + (set! (-> *setting-control* current bg-a) 1.0) + (let ((gp-1 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self camera-anim) + (ppointer->handle (when gp-1 + (let ((t9-3 (method-of-type logo-slave activate))) + (t9-3 (the-as logo-slave gp-1) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 logo-slave-init-by-other (-> self entity) *ndi-cam-sg*) + (-> gp-1 ppointer) + ) + ) + ) + ) + (let ((gp-2 (get-process *default-dead-pool* othercam #x4000))) + (set! (-> self camera) + (ppointer->handle + (when gp-2 + (let ((t9-6 (method-of-type othercam activate))) + (t9-6 (the-as othercam gp-2) (handle->process (-> self camera-anim)) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-2 othercam-init-by-other (handle->process (-> self camera-anim)) 3 #t 'logo) + (-> gp-2 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self camera)) 'mask 0) + (let ((gp-3 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self volumes) + (ppointer->handle (when gp-3 + (let ((t9-10 (method-of-type logo-slave activate))) + (t9-10 (the-as logo-slave gp-3) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-3 logo-slave-init-by-other (-> self entity) *ndi-volumes-sg*) + (-> gp-3 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self volumes)) 'origin-joint-index 3) + (let ((gp-4 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self target) + (ppointer->handle (when gp-4 + (let ((t9-14 (method-of-type logo-slave activate))) + (t9-14 (the-as logo-slave gp-4) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-4 logo-slave-init-by-other #f *jchar-sg*) + (-> gp-4 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self target)) 'blend-shape #t) + (send-event (handle->process (-> self target)) 'origin-joint-index 33) + (let ((gp-5 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self sidekick) + (ppointer->handle (when gp-5 + (let ((t9-19 (method-of-type logo-slave activate))) + (t9-19 (the-as logo-slave gp-5) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-5 logo-slave-init-by-other #f *sidekick-sg*) + (-> gp-5 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self sidekick)) 'blend-shape #t) + (send-event (handle->process (-> self sidekick)) 'origin-joint-index 6) + (set! (-> self anim) (-> self next-anim)) + (set! (-> self next-anim) (new 'static 'spool-anim :name "logo-intro" :index 5 :parts 3 :command-list '())) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (set! (-> self done?) #t) + (set-setting! *setting-control* self 'bg-a 'abs 1.0 0) + (anim-loop) + (none) + ) + :post + (behavior () (ja-post) (none)) + ) + +(defbehavior logo-init-by-other logo ((arg0 entity) (arg1 vector) (arg2 symbol)) + (stack-size-set! (-> self main-thread) 512) + (logclear! (-> self mask) (process-mask progress)) + (set! (-> self entity) arg0) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 quad)) + (case arg2 + (('logo) + (set! (-> *time-of-day-context* title-light-group dir1 levels x) 0.0) + (set! (-> *time-of-day-context* title-light-group ambi levels x) 0.444) + (case (scf-get-territory) + ((2) + (initialize-skeleton self *logo-japan-sg* '()) + ) + (else + (initialize-skeleton self *logo-sg* '()) + ) + ) + (set! (-> self main-joint) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) self 3)) + (set! (-> self main-joint max-dist) (the-as meters #t)) + (set! (-> self next-anim) (new 'static 'spool-anim + :name "logo-intro" + :index 5 + :parts 3 + :command-list + '((0 want-levels title village1) + (5 display-level village1 special) + (5 want-vis vi1) + (5 want-force-inside village1 #t) + (115 display-level village1 display-self) + (115 save) + (115 kill "sage-23") + (115 kill "assistant-11") + (115 kill "explorer-4") + (115 kill "farmer-3") + (115 kill "oracle-1") + (115 kill "warp-gate-switch-3") + (115 kill "sharkey-12") + (115 kill "fishermans-boat-2") + (115 kill "evilplant-2") + (115 kill "revcycle-8") + (115 kill "revcycleprop-2") + (115 kill "water-vol-8") + (115 kill "water-vol-9") + (115 kill "water-vol-10") + (115 kill "reflector-middle-2") + ) + ) + ) + (set! (-> self draw origin-joint-index) (the-as uint 3)) + ) + (('ndi) + (set! (-> *time-of-day-context* title-light-group dir1 levels x) 1.0) + (set! (-> *time-of-day-context* title-light-group ambi levels x) 1.0) + (initialize-skeleton self *ndi-sg* '()) + (set! (-> self draw origin-joint-index) (the-as uint 3)) + (set! (-> self next-anim) + (new 'static 'spool-anim :name "ndi-intro" :index 3 :parts 4 :command-list '((0 want-levels title village1) + (5 want-vis vi1) + (5 want-force-inside village1 #t) + (6 save) + (453 send-event self blackout) + ) + ) + ) + ) + ) + (logior! (-> self skel status) 1) + (set! (-> self draw global-effect) (draw-effect title)) + (set! (-> self draw shadow-mask) (the-as uint 255)) + (set! (-> self camera) (the-as handle #f)) + (set! (-> self volumes) (the-as handle #f)) + (set! (-> self black) (the-as handle #f)) + (cond + ((= arg2 'logo) + (go-virtual startup) + ) + ((= arg2 'ndi) + (go-virtual ndi) + ) + ) + (none) + ) + +(defstate target-title (target) + :event + target-generic-event-handler + :enter + (behavior () + (set-setting! *setting-control* self 'music-volume 'abs 0.0 0) + (set-setting! *setting-control* self 'sfx-volume 'abs 0.0 0) + (set-setting! *setting-control* self 'ambient-volume 'abs 0.0 0) + (set-setting! *setting-control* self 'allow-pause #f 0.0 0) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (set-setting! *setting-control* self 'border-mode #f 0.0 0) + (copy-settings-from-target! *setting-control*) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self manipy) (the-as (pointer manipy) #f)) + (ja-channel-set! 0) + (ja-post) + (send-event *camera* 'change-state cam-fixed 0) + (none) + ) + :exit + (behavior () + (when (not (or (= (-> self next-state name) 'target-title-play) (= (-> self next-state name) 'target-title-wait))) + (if (-> self manipy) + (deactivate (-> self manipy 0)) + ) + ) + (none) + ) + :trans + (behavior () + (hide-hud-quick) + (spool-push *art-control* "ndi-intro" 0 self -1.0) + (sound-group-pause (the-as uint 2)) + (none) + ) + :code + (behavior () + (let ((gp-0 (the-as handle #f))) + (case (scf-get-territory) + ((2) + (set! gp-0 (ppointer->handle (static-screen-spawn 5 #x64900000 #x64900100 #x64900200 900 #f self))) + ) + (else + (while (!= (file-status *art-control* "ndi-intro" 0) 'active) + (set-blackout-frames 15) + (suspend) + ) + (let ((s5-1 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s5-1) 75) + (set-blackout-frames 15) + (suspend) + ) + ) + ) + ) + (label cfg-8) + (let ((s5-2 (new 'stack-no-clear 'mc-slot-info))) + (mc-get-slot-info 0 s5-2) + (when (or (zero? (-> s5-2 known)) (handle->process (the-as int gp-0))) + (if (not (handle->process (the-as int gp-0))) + (set-blackout-frames 15) + ) + (suspend) + (goto cfg-8) + ) + (set! (-> *setting-control* default bg-a) 0.0) + (when (or + (zero? (-> s5-2 handle)) + (and (nonzero? (-> s5-2 formatted)) (zero? (-> s5-2 inited)) (< (-> s5-2 mem-actual) (-> s5-2 mem-required))) + ) + (mem-copy! (the-as pointer *auto-save-info*) (the-as pointer s5-2) 300) + (set-blackout-frames 0) + (let ((gp-1 7)) + (if (zero? (-> s5-2 handle)) + (set! gp-1 8) + ) + (set-setting! *setting-control* self 'allow-progress #t 0.0 0) + (set-blackout-frames 0) + (set! (-> *setting-control* default bg-a-force) 0.0) + (copy-settings-from-target! *setting-control*) + (set! (-> *setting-control* current bg-a) 0.0) + (set! (-> *setting-control* current bg-a-force) 0.0) + (activate-progress *dproc* (the-as progress-screen gp-1)) + ) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (copy-settings-from-target! *setting-control*) + (while *progress-process* + (suspend) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-2) 3) + (suspend) + ) + ) + (goto cfg-41) + ) + ) + ) + (label cfg-41) + (let ((gp-3 (entity-by-name "logo-1"))) + (let* ((s5-3 (get-process *default-dead-pool* logo #x4000)) + (v1-53 (when s5-3 + (let ((t9-17 (method-of-type logo activate))) + (t9-17 (the-as logo s5-3) self 'logo (the-as pointer #x70004000)) + ) + (run-now-in-process s5-3 logo-init-by-other gp-3 (-> gp-3 extra trans) 'ndi) + (-> s5-3 ppointer) + ) + ) + ) + (set! (-> self manipy) (the-as (pointer manipy) v1-53)) + (let ((s5-4 (ppointer->handle v1-53))) + (while (handle->process (the-as handle s5-4)) + (suspend) + ) + ) + ) + (let ((s5-5 (get-process *default-dead-pool* logo #x4000))) + (set! (-> self manipy) + (the-as (pointer manipy) (when s5-5 + (let ((t9-20 (method-of-type logo activate))) + (t9-20 (the-as logo s5-5) self 'logo (the-as pointer #x70004000)) + ) + (run-now-in-process s5-5 logo-init-by-other gp-3 (-> gp-3 extra trans) 'logo) + (-> s5-5 ppointer) + ) + ) + ) + ) + ) + (go target-title-play) + (none) + ) + :post + target-no-move-post + ) + +(defstate target-title-play (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'wait) + (go target-title-wait) + ) + ((= v1-0 'reset) + (deactivate (-> self manipy 0)) + ) + (else + (target-generic-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + ) + :enter + (behavior () + (set-setting! *setting-control* self 'allow-pause #f 0.0 0) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (none) + ) + :exit + (-> target-title exit) + :trans + (the-as (function none :behavior target) hide-hud-quick) + :code + (the-as (function none :behavior target) anim-loop) + :post + target-no-move-post + ) + +(defstate target-title-wait (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'play) + (go target-title-play) + ) + ((= v1-0 'reset) + (deactivate (-> self manipy 0)) + ) + (else + (target-generic-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + ) + :enter + (behavior () + (clear-pending-settings-from-process *setting-control* self 'ambient-volume) + (clear-pending-settings-from-process *setting-control* self 'sfx-volume) + (clear-pending-settings-from-process *setting-control* self 'music-volume) + (clear-pending-settings-from-process *setting-control* self 'allow-progress) + (sound-group-continue (the-as uint 2)) + (when *time-of-day-proc* + (set! (-> *time-of-day-proc* 0 time-ratio) 18000.0) + (set! *time-of-day-fast* #t) + ) + (none) + ) + :exit + (behavior () + (when *time-of-day-proc* + (set! (-> *time-of-day-proc* 0 time-ratio) 300.0) + (set! *time-of-day-fast* #f) + ) + (clear-pending-settings-from-process *setting-control* self 'allow-pause) + ((-> target-title exit)) + (none) + ) + :trans + (behavior () + (hide-hud-quick) + (if (cpad-pressed? 0 start) + (activate-progress *dproc* (progress-screen title)) + ) + (when (and (< (mod (-> *display* real-frame-counter) 300) 270) (not *progress-process*)) + (let ((gp-0 + (new 'stack 'font-context *font-default-matrix* 80 170 0.0 (font-color default) (font-flags shadow kerning)) + ) + ) + (let ((v1-12 gp-0)) + (set! (-> v1-12 width) (the float 352)) + ) + (let ((v1-13 gp-0)) + (set! (-> v1-13 height) (the float 40)) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning middle left large)) + (print-game-text (lookup-text! *common-text* (game-text-id press-start) #f) gp-0 #f 128 22) + ) + ) + (none) + ) + :code + (the-as (function none :behavior target) anim-loop) + :post + target-no-move-post + ) + + + + diff --git a/scripts/update-goal-src.py b/scripts/update-goal-src.py index e1614aa28..6bd58ad1f 100644 --- a/scripts/update-goal-src.py +++ b/scripts/update-goal-src.py @@ -33,7 +33,8 @@ files_with_modifications = [ "collide-shape", "cam-states", "plant-boss", - "helix-water" + "helix-water", + "lavatube-energy" ] for file in files: diff --git a/test/decompiler/reference/engine/target/target-h_REF.gc b/test/decompiler/reference/engine/target/target-h_REF.gc index 72a3802d5..34f20f072 100644 --- a/test/decompiler/reference/engine/target/target-h_REF.gc +++ b/test/decompiler/reference/engine/target/target-h_REF.gc @@ -54,6 +54,8 @@ (target-racing-hit handle attack-info) (target-racing-jump float float symbol) target-title + target-title-play + target-title-wait (target-warp-in vector vector) ) ) diff --git a/test/decompiler/reference/engine/ui/hud_REF.gc b/test/decompiler/reference/engine/ui/hud_REF.gc new file mode 100644 index 000000000..5f9aabad4 --- /dev/null +++ b/test/decompiler/reference/engine/ui/hud_REF.gc @@ -0,0 +1,557 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition for method 7 of type hud +;; INFO: Return type mismatch process vs hud. +(defmethod relocate hud ((obj hud) (arg0 int)) + (dotimes (v1-0 (-> obj nb-of-particles)) + (if (nonzero? (-> obj particles v1-0 part)) + (&+! (-> obj particles v1-0 part) arg0) + ) + ) + (the-as hud ((method-of-type process relocate) obj arg0)) + ) + +;; definition for method 10 of type hud +(defmethod deactivate hud ((obj hud)) + (dotimes (v1-0 9) + (if (and (-> *hud-parts* parts v1-0) (= (ppointer->process (-> *hud-parts* parts v1-0)) obj)) + (set! (-> *hud-parts* parts v1-0) (the-as (pointer process) #f)) + ) + ) + (dotimes (s5-0 (-> obj nb-of-particles)) + (kill-and-free-particles (-> obj particles s5-0 part)) + (set! (-> obj particles s5-0 part matrix) -1) + ) + ((method-of-type process deactivate) obj) + (none) + ) + +;; definition for method 15 of type hud +;; INFO: Return type mismatch int vs none. +(defmethod dummy-15 hud ((obj hud)) + (when (and (not (dummy-14 obj)) (not (paused?))) + (dotimes (s5-0 (-> obj nb-of-particles)) + (when (!= s5-0 (-> obj skip-particle)) + (if (or (!= (-> obj particles 0 pos x) 0.0) (!= (-> obj particles 0 pos y) 0.0)) + (spawn (-> obj particles s5-0 part) *null-vector*) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 16 of type hud +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-16 hud ((obj hud) (arg0 int) (arg1 int)) + (if (= arg0 (-> obj target-value)) + (set! (-> obj last-target-equal-time) (the-as uint (-> *display* base-frame-counter))) + ) + (when (and (not *progress-process*) (and + (!= (-> obj last-hide-time) (-> *display* base-frame-counter)) + (not (movie?)) + (>= (- (-> *display* base-frame-counter) (-> *game-info* letterbox-time)) 30) + (>= (- (-> *display* base-frame-counter) (-> *game-info* blackout-time)) 30) + (not (and *target* (logtest? (-> *target* state-flags) 256))) + ) + ) + (when (or + (!= (-> obj value) arg0) + (!= (-> obj value2) arg1) + (-> obj force-on-screen) + (or + (and (cpad-hold? 0 l2) (not (-> obj disable))) + (and (not *cheat-mode*) (cpad-hold? 0 r2)) + (-> obj first-init) + ) + ) + (cond + ((and + (-> obj increment-on-event) + (< (-> obj value) arg0) + (not (-> obj first-init)) + (< (- (-> *display* base-frame-counter) (the-as int (-> obj last-target-equal-time))) 450) + ) + (when (and + (!= (-> obj value) (-> obj target-value)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> obj last-increment-time))) 30) + ) + (sound-play-by-name (static-sound-name "cursor-options") (new-sound-id) 1024 0 0 1 #t) + (+! (-> obj value) 1) + (set! (-> obj last-increment-time) (the-as uint (-> *display* base-frame-counter))) + ) + ) + (else + (if (not (and + (not (-> obj first-init)) + (>= (- (-> *display* base-frame-counter) (the-as int (-> obj last-target-equal-time))) 450) + ) + ) + (set! (-> obj value) arg0) + ) + (set! (-> obj target-value) arg0) + (set! (-> obj last-target-equal-time) (the-as uint (-> *display* base-frame-counter))) + ) + ) + (set! (-> obj value2) arg1) + (when (and (not (movie?)) (= *master-mode* 'game) (not (-> obj first-init)) (not (-> obj disable))) + (if (>= (-> obj friend) 0) + (send-event (ppointer->process (-> *hud-parts* parts (-> obj friend))) 'show) + ) + (go hud-arriving) + ) + (set! (-> obj trigger-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> obj first-init) #f) + ) + ) + 0 + (none) + ) + +;; definition for method 17 of type hud +;; INFO: Return type mismatch int vs none. +(defmethod dummy-17 hud ((obj hud)) + (dotimes (v1-0 (-> obj nb-of-icons)) + (set-vector! + (-> obj icons v1-0 icon 0 root scale) + (* (-> obj icons v1-0 scale-x) (-> *video-parms* relative-x-scale)) + (* (-> obj icons v1-0 scale-y) (-> *video-parms* relative-y-scale)) + (* (-> obj icons v1-0 scale-x) (-> *video-parms* relative-x-scale)) + 1.0 + ) + (set! (-> obj icons v1-0 icon 0 root trans x) + (the float (+ (-> obj icons v1-0 icon-x) -256 (* (-> obj x-sgn) (-> obj offset)))) + ) + (set! (-> obj icons v1-0 icon 0 root trans y) + (- (+ (the float (-> obj icons v1-0 icon-y)) + (* (the float (-> obj y-sgn)) + (the float (-> obj offset)) + (-> *video-parms* relative-y-scale) + (-> *video-parms* relative-y-scale) + ) + (* (the float (-> obj y-offset)) (-> *video-parms* relative-x-scale-reciprical)) + ) + (the float (-> *video-parms* screen-sy)) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 18 of type hud +;; INFO: Return type mismatch int vs none. +(defmethod dummy-18 hud ((obj hud)) + (dotimes (s5-0 (-> obj nb-of-particles)) + (when (!= (-> obj skip-particle) -2) + (set! (-> obj particles s5-0 pos x) + (+ -256.0 (the float (* (-> obj x-sgn) (-> obj offset))) (-> obj particles s5-0 init-pos x)) + ) + (set! (-> obj particles s5-0 pos y) + (* 0.5 (- (* (-> *video-parms* relative-y-scale) + (+ (-> obj particles s5-0 init-pos y) + (the float (* (-> obj y-sgn) (-> obj offset))) + (* (the float (-> obj y-offset)) (-> *video-parms* relative-x-scale-reciprical)) + ) + ) + (the float (-> *video-parms* screen-sy)) + ) + ) + ) + (set! (-> obj particles s5-0 pos z) (-> obj particles s5-0 init-pos z)) + ) + (if (> (-> obj particles s5-0 part matrix) 0) + (set-vector! + (sprite-get-user-hvdf (-> obj particles s5-0 part matrix)) + (the float (+ (the int (-> obj particles s5-0 pos x)) 2048)) + (the float (+ (the int (-> obj particles s5-0 pos y)) 2048)) + (- (-> *math-camera* hvdf-off z) (* 1024.0 (-> obj particles s5-0 pos z))) + (-> *math-camera* hvdf-off w) + ) + ) + ) + 0 + (none) + ) + +;; definition for method 19 of type hud +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-19 hud ((obj hud)) + 0 + (none) + ) + +;; definition for method 20 of type hud +;; INFO: Return type mismatch int vs none. +(defmethod init-particles! hud ((obj hud) (arg0 int)) + 0 + (none) + ) + +;; definition for method 21 of type hud +(defmethod first-icon-x hud ((obj hud)) + 0 + ) + +;; definition for method 22 of type hud +(defmethod first-icon-y hud ((obj hud)) + 0 + ) + +;; definition for method 25 of type hud +(defmethod inc-value hud ((obj hud)) + 0.0 + ) + +;; definition for method 26 of type hud +(defmethod dec-value hud ((obj hud)) + 0.0 + ) + +;; definition for method 24 of type hud +;; INFO: Return type mismatch int vs none. +(defmethod animate! hud ((obj hud) (arg0 symbol) (arg1 symbol)) + 0 + (none) + ) + +;; definition for method 14 of type hud +;; INFO: Return type mismatch symbol vs none. +(defmethod dummy-14 hud ((obj hud)) + (= (-> obj next-state name) 'hud-hidden) + (none) + ) + +;; failed to figure out what this is: +(defstate hud-hidden (hud) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 object)) + (case arg2 + (('show) + (if (and (not *progress-process*) (!= (-> self last-hide-time) (-> *display* base-frame-counter))) + (go hud-arriving) + ) + ) + (('hide) + (set! v0-0 (-> *display* base-frame-counter)) + (set! (-> self last-hide-time) (the-as uint v0-0)) + v0-0 + ) + (('hide-quick) + (set! v0-0 (-> *display* base-frame-counter)) + (set! (-> self last-hide-time) (the-as uint v0-0)) + v0-0 + ) + (('increment) + (set! v0-0 (+ (-> self target-value) 1)) + (set! (-> self target-value) (the-as int v0-0)) + v0-0 + ) + (('sync) + (set! v0-0 #t) + (set! (-> self first-init) (the-as symbol v0-0)) + v0-0 + ) + (('disable) + (set! v0-0 #t) + (set! (-> self disable) (the-as symbol v0-0)) + v0-0 + ) + (('enable) + (set! (-> self disable) #f) + #f + ) + ) + ) + :enter + (behavior () + (set! (-> self offset) 128) + (dummy-17 self) + (dummy-18 self) + (let ((gp-0 (-> self child))) + (while gp-0 + (send-event (ppointer->process gp-0) 'draw #f) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (dotimes (gp-1 (-> self nb-of-particles)) + (kill-and-free-particles (-> self particles gp-1 part)) + (set! (-> self particles gp-1 part matrix) -1) + ) + (none) + ) + :exit + (behavior () (set! (-> self y-offset) (-> self next-y-offset)) (none)) + :code + (behavior () + (logior! (-> self mask) (process-mask sleep-code)) + (while #t + (suspend) + ) + (none) + ) + :post + (behavior () + (if (-> self deactivate-when-hidden) + (deactivate self) + ) + (TODO-RENAME-19 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate hud-arriving (hud) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-3 object)) + (case arg2 + (('hide-quick) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self force-on-screen) #f) + (set! (-> self offset) 128) + (dummy-18 self) + (dummy-17 self) + (TODO-RENAME-19 self) + (go hud-hidden) + ) + (('hide) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self force-on-screen) #f) + (go hud-leaving 10) + ) + (('show) + (if (and (not *progress-process*) (!= (-> self last-hide-time) (-> *display* base-frame-counter))) + (go hud-arriving) + ) + ) + (('increment) + (set! v0-3 (+ (-> self target-value) 1)) + (set! (-> self target-value) (the-as int v0-3)) + v0-3 + ) + (('sync) + (set! v0-3 #t) + (set! (-> self first-init) (the-as symbol v0-3)) + v0-3 + ) + (('disable) + (set! v0-3 #t) + (set! (-> self disable) (the-as symbol v0-3)) + v0-3 + ) + (('enable) + (set! (-> self disable) #f) + #f + ) + ) + ) + :enter + (behavior () + (let ((gp-0 (-> self child))) + (while gp-0 + (send-event (ppointer->process gp-0) 'draw #t) + (set! gp-0 (-> gp-0 0 brother)) + ) + ) + (dotimes (gp-1 (-> self nb-of-particles)) + (if (= (-> self particles gp-1 part matrix) -1) + (set! (-> self particles gp-1 part matrix) (sprite-allocate-user-hvdf)) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (if (not (paused?)) + (set! (-> self offset) (seekl (-> self offset) 0 (the int (* 15.0 (-> *display* time-adjust-ratio))))) + ) + (dummy-17 self) + (if (<= (-> self offset) 0) + (go hud-in) + ) + (when (movie?) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self force-on-screen) #f) + (set! (-> self offset) 128) + (dummy-18 self) + (dummy-17 self) + (TODO-RENAME-19 self) + (go hud-hidden) + ) + (suspend) + ) + (none) + ) + :post + (behavior () (TODO-RENAME-19 self) (dummy-18 self) (dummy-15 self) (none)) + ) + +;; failed to figure out what this is: +(defstate hud-in (hud) + :event + (-> hud-arriving event) + :code + (behavior () + (set! (-> self trigger-time) (the-as uint (-> *display* base-frame-counter))) + (while (and (< (- (-> *display* base-frame-counter) (the-as int (-> self trigger-time))) 600) (not (movie?))) + (set! (-> self offset) 0) + (dummy-17 self) + (suspend) + ) + (when (movie?) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self force-on-screen) #f) + (set! (-> self offset) 128) + (dummy-18 self) + (dummy-17 self) + (TODO-RENAME-19 self) + (go hud-hidden) + ) + (go hud-leaving 5) + (none) + ) + :post + (-> hud-arriving post) + ) + +;; failed to figure out what this is: +(defstate hud-leaving (hud) + :event + (-> hud-arriving event) + :code + (behavior ((arg0 int)) + (while #t + (if (not (paused?)) + (set! (-> self offset) + (seekl (-> self offset) 128 (the int (* (the float arg0) (-> *display* time-adjust-ratio)))) + ) + ) + (dummy-17 self) + (when (movie?) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self force-on-screen) #f) + (set! (-> self offset) 128) + (dummy-18 self) + (dummy-17 self) + (TODO-RENAME-19 self) + (go hud-hidden) + ) + (if (>= (-> self offset) 128) + (go hud-hidden) + ) + (suspend) + ) + (none) + ) + :post + (-> hud-arriving post) + ) + +;; definition for function hud-init-by-other +;; INFO: Return type mismatch object vs none. +(defbehavior hud-init-by-other hud ((arg0 int)) + (set! (-> self nb-of-icons) 0) + (set! (-> self nb-of-particles) 0) + (set! (-> self max-nb-of-particles) 7) + (set! (-> self first-init) #t) + (set! (-> self friend) -1) + (set! (-> self last-increment-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self last-target-equal-time) (the-as uint (-> *display* base-frame-counter))) + (set! (-> self increment-on-event) #f) + (set! (-> self skip-particle) -1) + (set! (-> self disable) #f) + (set! (-> self force-on-screen) #f) + (set! (-> self deactivate-when-hidden) #f) + (set! (-> self y-offset) 0) + (set! (-> self next-y-offset) 0) + (set! (-> self last-hide-time) (the-as uint (-> *display* base-frame-counter))) + (logior! (-> self mask) (process-mask menu)) + (logclear! (-> self mask) (process-mask pause progress)) + (init-particles! self arg0) + (dummy-17 self) + (dummy-18 self) + (go hud-hidden) + (none) + ) + +;; definition for function send-hud-increment-event +(defun send-hud-increment-event ((arg0 hud)) + (if (-> arg0 increment-on-event) + (send-event arg0 'increment) + ) + ) + +;; failed to figure out what this is: +(defstate hud-collecting (collectable) + :trans + (behavior () + (case (-> self type) + ((fuel-cell) + (fuel-cell-animate) + ) + ) + (none) + ) + :code + (behavior ((arg0 handle)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let ((s4-0 (handle->process arg0))) + (set! (-> s5-0 x) (- (the float (+ (first-icon-x (the-as hud s4-0)) -256)) (-> self root-override trans x))) + (set! (-> s5-0 y) (- (the float (- (first-icon-y (the-as hud s4-0)) (-> *video-parms* screen-sy))) + (-> self root-override trans y) + ) + ) + ) + (let ((f30-0 4.0) + (f26-0 0.0) + (f28-0 (-> self root-override scale x)) + (f24-0 (-> self root-override scale y)) + (f22-0 (-> self root-override scale z)) + ) + (while #t + (let ((f0-7 (* f30-0 (-> *display* seconds-per-frame)))) + (+! f26-0 f0-7) + (when (< 1.0 f26-0) + (let ((f0-8 (- f26-0 f0-7))) + (set! f0-7 (- 1.0 f0-8)) + ) + (set! f26-0 1.0) + ) + (+! (-> self root-override trans x) (* f0-7 (-> s5-0 x))) + (+! (-> self root-override trans y) (* f0-7 (-> s5-0 y))) + ) + (set-vector! + (-> self root-override scale) + (* f28-0 (-> *video-parms* relative-x-scale)) + (* f24-0 (-> *video-parms* relative-y-scale) (-> *video-parms* relative-y-scale)) + (* f22-0 (-> *video-parms* relative-x-scale)) + 1.0 + ) + (let ((a0-12 (-> self root-override))) + (set-yaw-angle-clear-roll-pitch! + a0-12 + (- (y-angle a0-12) (* 182.04445 (* 8.0 (-> *display* time-adjust-ratio)))) + ) + ) + (suspend) + (when (>= f26-0 1.0) + (send-hud-increment-event (the-as hud (handle->process arg0))) + (deactivate self) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior collectable) ja-post) + ) + + + + diff --git a/test/decompiler/reference/levels/darkcave/darkcave-obs_REF.gc b/test/decompiler/reference/levels/darkcave/darkcave-obs_REF.gc index 125cbefc7..f1933b56e 100644 --- a/test/decompiler/reference/levels/darkcave/darkcave-obs_REF.gc +++ b/test/decompiler/reference/levels/darkcave/darkcave-obs_REF.gc @@ -28,6 +28,10 @@ (update-connected-crystals! (_type_) none 20) (compute-glow (_type_) float 21) ) + (:states + cavecrystal-active + cavecrystal-idle + ) ) ;; definition for method 3 of type cavecrystal diff --git a/test/decompiler/reference/levels/lavatube/lavatube-energy_REF.gc b/test/decompiler/reference/levels/lavatube/lavatube-energy_REF.gc new file mode 100644 index 000000000..7693a6a1e --- /dev/null +++ b/test/decompiler/reference/levels/lavatube/lavatube-energy_REF.gc @@ -0,0 +1,2048 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 544) (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :name "group-energyarm" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1931 :fade-after (meters 120.0)) + (sp-item 2167 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + ) + :bounds (new 'static 'sphere :w 16384.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1931) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (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 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 64.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.016666668)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -1.0666667) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit0 bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2167) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-rnd-flt spt-num 1.0 8.0 1.0) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 0.3) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 128.0 128.0 1.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.08) 1.0) + (sp-flt spt-scalevel-x (meters -0.00055555557)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -0.2) + (sp-flt spt-fade-b -0.2) + (sp-flt spt-fade-a -0.6) + (sp-flt spt-accel-y -6.826667) + (sp-flt spt-friction 0.94) + (sp-int-plain-rnd spt-timer 30 149 1) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 545) (new 'static 'sparticle-launch-group + :length 8 + :duration #xbb8 + :linger-duration #x5dc + :name "group-energyball-always" + :launcher + (new 'static 'inline-array sparticle-group-item 8 + (sp-item 2168 :fade-after (meters 80.0) :falloff-to (meters 80.0)) + (sp-item 2169 :fade-after (meters 120.0)) + (sp-item 2170 :fade-after (meters 120.0)) + (sp-item 2171 :fade-after (meters 120.0) :flags (is-3d)) + (sp-item 2172 :fade-after (meters 80.0) :falloff-to (meters 80.0)) + (sp-item 2173 :fade-after (meters 120.0) :falloff-to (meters 120.0)) + (sp-item 2174 :fade-after (meters 120.0) :falloff-to (meters 120.0)) + (sp-item 2175 :fade-after (meters 120.0) :falloff-to (meters 120.0)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2168) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 8.0) + (sp-flt spt-y (meters -5.5)) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.1) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 8.0 24.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.35555556) + (sp-rnd-flt spt-accel-y -1.6384 -1.6384 1.0) + (sp-flt spt-friction 0.9) + (sp-int-plain-rnd spt-timer 120 59 1) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int-plain-rnd spt-next-time 30 119 1) + (sp-launcher-by-id spt-next-launcher 2176) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 90.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* 2176) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 5 + (sp-flt spt-scale-x (meters 1.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-a 48.0) + (sp-int spt-timer 5) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2177) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 8.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.2) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 192.0) + (sp-flt spt-g 192.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-flt spt-a 64.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-friction 0.9) + (sp-int-plain-rnd spt-timer 10 41 1) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int-plain-rnd spt-next-time 10 41 1) + (sp-launcher-by-id spt-next-launcher 2176) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 5.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2169) (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-y (meters -5.5)) + (sp-rnd-flt spt-scale-x (meters 8.0) (meters 4.0) 1.0) + (sp-flt spt-scale-y (meters 24.0)) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.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-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2170) (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 -5.5)) + (sp-rnd-flt spt-scale-x (meters 12.0) (meters 8.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-int spt-timer 5) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2171) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters -5.0)) + (sp-rnd-flt spt-scale-x (meters 12.0) (meters 8.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 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 128.0 1.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-flt spt-scalevel-x (meters -0.040404037)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.12121211) + (sp-int spt-timer 198) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2172) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 17 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 2.0) + (sp-flt spt-y (meters -5.5)) + (sp-flt spt-scale-x (meters 0.5)) + (sp-rnd-flt spt-rot-z (degrees 70.0) (degrees 40.0) 1.0) + (sp-flt spt-scale-y (meters 12.0)) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 64.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 0.85333335)) + (sp-flt spt-fade-g -3.2666667) + (sp-flt spt-fade-b -1.0666667) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2173) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x1f :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 8.0) (meters 6.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 196.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -6.4) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 2178) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2178) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 4 + (sp-flt spt-b 0.0) + (sp-flt spt-a 64.0) + (sp-flt spt-fade-g -4.266667) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2174) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x23 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 8.0) (meters 4.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 196.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -6.4) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 2178) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2175) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-tex spt-texture (new 'static 'texture-id :index #x24 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 8.0) (meters 4.0) 1.0) + (sp-int spt-rot-x 4) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-scale-y (meters 1.0) (meters 0.5) 1.0) + (sp-flt spt-r 255.0) + (sp-flt spt-g 196.0) + (sp-flt spt-b 196.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -6.4) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-int spt-next-time 10) + (sp-launcher-by-id spt-next-launcher 2178) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 546) (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-energyball-explode" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 2179 :period 600 :length 5) + (sp-item 2180 :period 600 :length 40) + (sp-item 2181 :period 600 :length 20) + (sp-item 2182 :period 600 :length 20) + ) + :bounds (new 'static 'sphere :w 184320.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2180) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 8.0) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.06666667) (meters 0.26666668) 1.0) + (sp-flt spt-scalevel-x (meters -0.0026666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-rnd-flt spt-accel-y -0.68266666 -0.68266666 1.0) + (sp-flt spt-friction 0.9) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit14) + (sp-int-plain-rnd spt-next-time 30 89 1) + (sp-launcher-by-id spt-next-launcher 2183) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 2.0) (meters 4.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2183) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 (sp-flt spt-fade-a -1.0666667) (sp-end)) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2182) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 6.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 0.4)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 180.0) 1.0) + (sp-flt spt-scale-y (meters 24.0)) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 64.0 1.0) + (sp-rnd-flt spt-a 32.0 64.0 1.0) + (sp-flt spt-scalevel-y (meters 1.6666666)) + (sp-flt spt-fade-a -1.6) + (sp-int spt-timer 60) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2179) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 13 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 0.0)) + (sp-flt spt-scale-x (meters 40.0)) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 64.0 1.0) + (sp-flt spt-a 128.0) + (sp-flt spt-fade-a -2.3272727) + (sp-int spt-timer 54) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2181) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 25 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 12.0) + (sp-rnd-flt spt-x (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-y (meters -2.0) (meters 4.0) 1.0) + (sp-rnd-flt spt-z -8192.0 16384.0 1.0) + (sp-rnd-flt spt-scale-x (meters 5.0) (meters 2.5) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 192.0 32.0 1.0) + (sp-rnd-flt spt-g 128.0 64.0 1.0) + (sp-rnd-flt spt-b 64.0 64.0 1.0) + (sp-rnd-flt spt-a 64.0 64.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.10666667) (meters 0.053333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.02)) + (sp-rnd-flt spt-rotvel-z (degrees -0.6) (degrees 1.2) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.28444445) + (sp-rnd-flt spt-accel-y 0.68266666 0.13653333 1.0) + (sp-flt spt-friction 0.8) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 180.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-rnd-flt spt-conerot-radius (meters 0.0) (meters 6.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition of type energydoor +(deftype energydoor (process-drawable) + ((root-override collide-shape-moving :offset 112) + (alt-actor entity-actor :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + energydoor-closed-till-near + energydoor-closed-till-task + energydoor-closing + energydoor-opened + energydoor-opening + ) + ) + +;; definition for method 3 of type energydoor +(defmethod inspect energydoor ((obj energydoor)) + (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 *energydoor-sg* energydoor + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 14 0 35) + :longest-edge (meters 0) + ) + +;; definition for function energydoor-player-dist +(defbehavior energydoor-player-dist energydoor () + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'matrix)) + ) + (vector-! gp-0 (target-pos 0) (-> self root-override trans)) + (quaternion->matrix s5-0 (-> self root-override quat)) + (vector-dot gp-0 (the-as vector (-> s5-0 vector))) + ) + ) + +;; definition for function energydoor-open-handler +;; INFO: Return type mismatch symbol vs object. +(defbehavior energydoor-open-handler energydoor ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'open?) + #t + ) + ) + ) + ) + +;; definition for function energydoor-closed-handler +(defbehavior energydoor-closed-handler energydoor ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('open) + (go energydoor-opening) + ) + (('open?) + #f + ) + ) + ) + +;; failed to figure out what this is: +(defstate energydoor-closing (energydoor) + :event + energydoor-closed-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) 0.0) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) 0.0) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (if (or + (task-closed? (-> self entity extra perm task) (task-status need-resolution)) + (< (energydoor-player-dist) 0.0) + ) + (go energydoor-closed-till-near) + (go energydoor-closed-till-task) + ) + (none) + ) + :post + (the-as (function none :behavior energydoor) transform-post) + ) + +;; failed to figure out what this is: +(defstate energydoor-opened (energydoor) + :event + energydoor-open-handler + :code + (behavior () + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! (-> v1-2 frame-num) (the float (+ (-> v1-2 frame-group data 0 length) -1))) + ) + (transform-post) + (while #t + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate energydoor-opening (energydoor) + :event + energydoor-open-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go energydoor-opened) + (none) + ) + :post + (the-as (function none :behavior energydoor) transform-post) + ) + +;; failed to figure out what this is: +(defstate energydoor-closed-till-task (energydoor) + :event + energydoor-closed-handler + :trans + (behavior () + (cond + ((task-closed? (-> self entity extra perm task) (task-status need-resolution)) + (go energydoor-opening) + ) + ((let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'open?) + (let ((t9-2 send-event-function) + (v1-5 (-> self alt-actor)) + ) + (t9-2 + (if v1-5 + (-> v1-5 extra process) + ) + a1-1 + ) + ) + ) + (go energydoor-opening) + ) + ) + (none) + ) + :code + (behavior () + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! (-> v1-2 frame-num) 0.0) + ) + (transform-post) + (while #t + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate energydoor-closed-till-near (energydoor) + :event + energydoor-closed-handler + :trans + (behavior () + (if (< -409600.0 (energydoor-player-dist)) + (go energydoor-opening) + ) + (none) + ) + :code + (behavior () + (let ((v1-2 (-> self skel root-channel 0))) + (set! (-> v1-2 num-func) num-func-identity) + (set! (-> v1-2 frame-num) 0.0) + ) + (transform-post) + (while #t + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type energydoor +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! energydoor ((obj energydoor) (arg0 entity-actor)) + (with-pp + (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 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) 8) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 102400.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 *energydoor-sg* '()) + (set! (-> obj root-override pause-adjust-distance) 245760.0) + (set! (-> obj alt-actor) (entity-actor-lookup arg0 'alt-actor 0)) + (cond + ((< (energydoor-player-dist) -409600.0) + (go energydoor-closed-till-near) + ) + ((task-closed? (-> obj entity extra perm task) (task-status need-resolution)) + (go energydoor-opened) + ) + (else + (let ((a1-9 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-9 from) pp) + (set! (-> a1-9 num-params) 0) + (set! (-> a1-9 message) 'open?) + (let ((t9-12 send-event-function) + (v1-25 (-> obj alt-actor)) + ) + (cond + ((t9-12 + (if v1-25 + (-> v1-25 extra process) + ) + a1-9 + ) + (go energydoor-opened) + ) + ((< 0.0 (energydoor-player-dist)) + (go energydoor-closed-till-task) + ) + (else + (go energydoor-opened) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; definition of type energybase +(deftype energybase (process-drawable) + () + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + energybase-idle + energybase-stopped + energybase-stopping + ) + ) + +;; definition for method 3 of type energybase +(defmethod inspect energybase ((obj energybase)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *energybase-sg* energybase + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 40 0 40) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate energybase-stopped (energybase) + :code + (behavior () + (ja-post) + (while #t + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate energybase-stopping (energybase) + :code + (behavior () + (let ((f30-0 1.0)) + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) f30-0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (set! f30-0 (- f30-0 (* 0.002 (-> *display* time-adjust-ratio)))) + (if (< f30-0 0.0) + (go energybase-stopped) + ) + (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) f30-0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energybase) ja-post) + ) + +;; failed to figure out what this is: +(defstate energybase-idle (energybase) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('stop) + (go energybase-stopping) + ) + ) + ) + :code + (behavior () + (while #t + (if (and *target* (>= 307200.0 (vector-vector-distance (-> self root trans) (-> *target* control trans)))) + (level-hint-spawn + (game-text-id lavatube-shoot-the-spheres) + "sksp0375" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-2 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! + a0-2 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energybase) ja-post) + ) + +;; definition for method 11 of type energybase +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! energybase ((obj energybase) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *energybase-sg* '()) + (if (task-closed? (game-task lavatube-balls) (task-status need-resolution)) + (go energybase-stopped) + (go energybase-idle) + ) + (none) + ) + +;; definition of type energyhub +(deftype energyhub (process-drawable) + ((self-override energyhub :offset 28) + (alts entity-actor 3 :offset-assert 176) + (arm handle 5 :offset-assert 192) + (rot-mat matrix :inline :offset-assert 240) + (rot-mat-init matrix :inline :offset-assert 304) + (rotation-speed oscillating-float :inline :offset-assert 368) + (rotation-speed-offset delayed-rand-float :inline :offset-assert 392) + (y-rotation float :offset-assert 420) + (x-rotation float :offset-assert 424) + (palette-val float :offset-assert 428) + ) + :heap-base #x140 + :method-count-assert 20 + :size-assert #x1b0 + :flag-assert #x14014001b0 + (:states + energyhub-idle + energyhub-stop + energyhub-stopped + ) + ) + +;; definition for method 3 of type energyhub +(defmethod inspect energyhub ((obj energyhub)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Talts[3] @ #x~X~%" (-> obj alts)) + (format #t "~T~Tarm[5] @ #x~X~%" (-> obj arm)) + (format #t "~T~Trot-mat: #~%" (-> obj rot-mat)) + (format #t "~T~Trot-mat-init: #~%" (-> obj rot-mat-init)) + (format #t "~T~Trotation-speed: #~%" (-> obj rotation-speed)) + (format #t "~T~Trotation-speed-offset: #~%" (-> obj rotation-speed-offset)) + (format #t "~T~Ty-rotation: ~f~%" (-> obj y-rotation)) + (format #t "~T~Tx-rotation: ~f~%" (-> obj x-rotation)) + (format #t "~T~Tpalette-val: ~f~%" (-> obj palette-val)) + obj + ) + +;; definition of type energyarm +(deftype energyarm (process-drawable) + ((parent-overide (pointer energyhub) :offset 12) + (self-override energyarm :offset 28) + (root-override collide-shape-moving :offset 112) + (offset vector :inline :offset-assert 176) + (y-rotation float :offset-assert 192) + (y-chatter-rotation bouncing-float :inline :offset-assert 196) + (y-chatter-min delayed-rand-float :inline :offset-assert 240) + (x-rotation bouncing-float :inline :offset-assert 268) + (x-fall-rotation bouncing-float :inline :offset-assert 308) + (rot-mat matrix :inline :offset-assert 352) + (ball handle :offset-assert 416) + (x-correction float :offset-assert 424) + ) + :heap-base #x140 + :method-count-assert 20 + :size-assert #x1ac + :flag-assert #x14014001ac + (:states + energyarm-fall + energyarm-idle + energyarm-no-ball + energyarm-stop + ) + ) + +;; definition for method 3 of type energyarm +(defmethod inspect energyarm ((obj energyarm)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Toffset: #~%" (-> obj offset)) + (format #t "~T~Ty-rotation: ~f~%" (-> obj y-rotation)) + (format #t "~T~Ty-chatter-rotation: #~%" (-> obj y-chatter-rotation)) + (format #t "~T~Ty-chatter-min: #~%" (-> obj y-chatter-min)) + (format #t "~T~Tx-rotation: #~%" (-> obj x-rotation)) + (format #t "~T~Tx-fall-rotation: #~%" (-> obj x-fall-rotation)) + (format #t "~T~Trot-mat: #~%" (-> obj rot-mat)) + (format #t "~T~Tball: ~D~%" (-> obj ball)) + (format #t "~T~Tx-correction: ~f~%" (-> obj x-correction)) + obj + ) + +;; definition of type energyball +(deftype energyball (process-drawable) + ((parent-overide (pointer energyarm) :offset 12) + (root-override collide-shape-moving :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + energyball-idle + ) + ) + +;; definition for method 3 of type energyball +(defmethod inspect energyball ((obj energyball)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *energyball-sg* energyball + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 6) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate energyball-idle (energyball) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as + object + (when (= v1-0 'attack) + (when (and (>= arg1 2) (= (-> arg3 param 1) 'eco-yellow)) + (increment-success-for-hint (game-text-id lavatube-shoot-the-spheres)) + (sound-play-by-name (static-sound-name "dcrate-break") (new-sound-id) 1024 0 0 1 #t) + (let ((gp-1 (get-process *default-dead-pool* part-tracker #x4000))) + (when gp-1 + (let ((t9-4 (method-of-type part-tracker activate))) + (t9-4 (the-as part-tracker gp-1) *entity-pool* 'part-tracker (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + part-tracker-init + (-> *part-group-id-table* 546) + 600 + #f + #f + #f + (-> self root-override trans) + ) + (-> gp-1 ppointer) + ) + ) + (dummy-18 self) + (deactivate self) + ) + ) + ) + ) + ) + :trans + (behavior () + (rider-trans) + (spawn (-> self part) (-> self root-override trans)) + (let* ((v1-3 (-> self parent-overide)) + (s5-0 (if v1-3 + (-> v1-3 0 self-override) + ) + ) + (gp-0 (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) energyarm)) + s5-0 + ) + ) + (s4-0 (new 'stack-no-clear 'vector)) + (s5-1 (new 'stack-no-clear 'matrix)) + (f0-1 (the float (-> *display* base-frame-counter))) + (f30-0 (- f0-1 (* (the float (the int (/ f0-1 -150.0))) -150.0))) + ) + (when gp-0 + (set-vector! s4-0 0.0 -61440.0 -106496.0 1.0) + (vector-matrix*! s4-0 s4-0 (-> gp-0 rot-mat)) + (vector+! (-> self root-override trans) s4-0 (-> gp-0 root-override trans)) + (matrix-rotate-y! s5-1 (* -436.90668 f30-0)) + (matrix*! s5-1 s5-1 (-> gp-0 rot-mat)) + (matrix->quaternion (-> self root-override quat) s5-1) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyball) rider-post) + ) + +;; definition for function energyball-init +(defun energyball-init ((arg0 energyball)) + (set! (-> arg0 mask) (logior (process-mask attackable) (-> arg0 mask))) + (let ((s5-0 (new 'process 'collide-shape-moving arg0 (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-sphere s5-0 (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set-vector! (-> s4-0 local-sphere) 0.0 0.0 0.0 20480.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> arg0 root-override) s5-0) + s5-0 + ) + ) + +;; definition for function energyball-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior energyball-init-by-other energyball ((arg0 vector)) + (energyball-init self) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (initialize-skeleton self *energyball-sg* '()) + (set! (-> self part) (create-launch-control (-> *part-group-id-table* 545) self)) + (go energyball-idle) + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *energyarm-sg* energyarm + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 -20 17) + :longest-edge (meters 0) + ) + +;; definition for function energyarm-trans +(defbehavior energyarm-trans energyarm () + (rider-trans) + (let* ((v1-0 (-> self parent-overide)) + (gp-0 (if v1-0 + (-> v1-0 0 self-override) + ) + ) + (s5-0 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) energyhub)) + gp-0 + ) + ) + (gp-1 (new 'stack-no-clear 'vector)) + (s4-0 (new 'stack-no-clear 'matrix)) + ) + 0.0 + (when s5-0 + (matrix-rotate-y! + (-> self rot-mat) + (+ (* -1820.4445 (-> self y-chatter-rotation osc value)) (-> self y-rotation)) + ) + (matrix*! (-> self rot-mat) (-> self rot-mat) (-> s5-0 rot-mat)) + (let ((f0-7 (* (-> self x-correction) (-> s5-0 x-rotation) (cos (-> self y-rotation))))) + (matrix-rotate-x! + s4-0 + (+ f0-7 (* 910.2222 (-> self x-rotation osc value)) (* -7281.778 (-> self x-fall-rotation osc value))) + ) + ) + (matrix*! (-> self rot-mat) s4-0 (-> self rot-mat)) + (set-vector! gp-1 0.0 0.0 -81920.0 1.0) + (vector-matrix*! (-> self draw bounds) gp-1 (-> self rot-mat)) + (set! (-> self draw bounds w) 69632.0) + (matrix->quaternion (-> self root-override quat) (-> self rot-mat)) + (vector-matrix*! gp-1 (-> self offset) (-> s5-0 rot-mat)) + (vector+! (-> self root-override trans) (-> s5-0 root trans) gp-1) + ) + ) + ) + +;; failed to figure out what this is: +(defstate energyarm-stop (energyarm) + :enter + (behavior () '() (none)) + :trans + (behavior () + (update! (-> self x-rotation) 0.0) + (update! (-> self y-chatter-rotation) 0.0) + (energyarm-trans) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyarm) rider-post) + ) + +;; failed to figure out what this is: +(defstate energyarm-no-ball (energyarm) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('stop) + (go energyarm-stop) + ) + ) + ) + :enter + (behavior () (set! (-> self y-chatter-rotation osc target) 1.0) (none)) + :trans + (behavior () + (set! (-> self x-correction) (fmax -1.0 (+ -0.1 (-> self x-correction)))) + (update! (-> self x-rotation) 0.0) + (when (at-min? (-> self x-rotation)) + (let* ((f30-0 0.15) + (v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + ) + (set! (-> self x-rotation osc vel) (fmax (* f30-0 (+ -1.0 (the-as float v1-7))) (-> self x-rotation osc vel))) + ) + ) + (update! (-> self y-chatter-rotation) 0.0) + (when (at-max? (-> self y-chatter-rotation)) + (let* ((f30-1 -0.1) + (v1-16 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-17 (the-as number (logior #x3f800000 v1-16))) + (f30-2 (* f30-1 (+ -1.0 (the-as float v1-17)))) + ) + (update! (-> self y-chatter-min)) + (set! (-> self y-chatter-rotation min-value) (fabs (-> self y-chatter-min value))) + (set! (-> self y-chatter-rotation osc vel) (fmin f30-2 (-> self y-chatter-rotation osc vel))) + ) + ) + (energyarm-trans) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyarm) rider-post) + ) + +;; failed to figure out what this is: +(defstate energyarm-fall (energyarm) + :enter + (behavior () (set! (-> self x-fall-rotation osc target) 1.0) (none)) + :trans + (behavior () + (update! (-> self x-fall-rotation) 0.0) + (update! (-> self y-chatter-rotation) 0.0) + (when (at-max? (-> self x-fall-rotation)) + (set! (-> self y-chatter-rotation min-value) -1.0) + (set! (-> self y-chatter-rotation osc vel) 0.2) + (if (< -0.01 (-> self x-fall-rotation osc vel)) + (go energyarm-no-ball) + ) + ) + (energyarm-trans) + (none) + ) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyarm) rider-post) + ) + +;; failed to figure out what this is: +(defstate energyarm-idle (energyarm) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('stop) + (go energyarm-stop) + ) + ) + ) + :trans + (behavior () + (update! (-> self x-rotation) 0.0) + (when (at-min? (-> self x-rotation)) + (let* ((f30-0 0.15) + (v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + ) + (set! (-> self x-rotation osc vel) (fmax (* f30-0 (+ -1.0 (the-as float v1-7))) (-> self x-rotation osc vel))) + ) + ) + (energyarm-trans) + (cond + ((handle->process (-> self ball)) + (spawn (-> self part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 6))) + (spawn (-> self part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 5))) + (spawn (-> self part) (vector<-cspace! (new 'stack-no-clear 'vector) (-> self node-list data 4))) + ) + ((!= (-> self ball) #f) + (set! (-> self ball) (the-as handle #f)) + (let ((a1-8 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-8 from) self) + (set! (-> a1-8 num-params) 0) + (set! (-> a1-8 message) 'flash) + (let ((t9-10 send-event-function) + (v1-24 (-> self parent-overide)) + ) + (t9-10 + (if v1-24 + (-> v1-24 0 self-override) + ) + a1-8 + ) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 num-func) num-func-identity) + (let* ((v1-4 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-5 (the-as number (logior #x3f800000 v1-4))) + ) + (set! (-> gp-0 frame-num) (* (+ -1.0 (the-as float v1-5)) (the float (ja-num-frames 0)))) + ) + ) + (while #t + (suspend) + (let* ((f30-1 0.25) + (f28-0 0.25) + (v1-9 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-10 (the-as number (logior #x3f800000 v1-9))) + (f0-9 (+ f30-1 (* f28-0 (+ -1.0 (the-as float v1-10))))) + (a0-5 (-> self skel root-channel 0)) + ) + (set! (-> a0-5 param 0) f0-9) + (joint-control-channel-group-eval! a0-5 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyarm) rider-post) + ) + +;; definition for function energyarm-init +(defun energyarm-init ((arg0 energyarm)) + (let ((s5-0 (new 'process 'collide-shape-moving arg0 (collide-list-enum usually-hit-by-player)))) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh s5-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 1)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 0) + (set-vector! (-> s4-0 local-sphere) 0.0 -12288.0 -81920.0 69632.0) + (set-root-prim! s5-0 s4-0) + ) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (backup-collide-with-as s5-0) + (set! (-> arg0 root-override) s5-0) + ) + (let ((v0-5 (create-launch-control (-> *part-group-id-table* 544) arg0))) + (set! (-> arg0 part) v0-5) + v0-5 + ) + ) + +;; definition for function energyarm-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior energyarm-init-by-other energyarm ((arg0 vector) (arg1 float)) + (energyarm-init self) + (let* ((v1-0 (-> self parent-overide)) + (s4-0 (if v1-0 + (-> v1-0 0 self-override) + ) + ) + (a0-3 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) energyhub)) + s4-0 + ) + ) + ) + (if a0-3 + (set! (-> self root-override trans quad) (-> a0-3 root trans quad)) + ) + ) + (initialize-skeleton self *energyarm-sg* '()) + (logclear! (-> self mask) (process-mask actor-pause)) + (set! (-> self offset quad) (-> arg0 quad)) + (set! (-> self y-rotation) arg1) + (set-params! (-> self x-rotation) 0.0 1.0 0.0 0.7 0.08 0.1 0.97) + (set-params! (-> self x-fall-rotation) 0.0 1.0 0.0 0.7 0.005 0.08 0.97) + (set-params! (-> self y-chatter-rotation) 0.0 1.0 0.0 0.7 0.02 0.3 0.97) + (set-params! (-> self y-chatter-min) 300 600 1.0) + (set! (-> self x-correction) 0.0) + (cond + ((task-closed? (game-task lavatube-balls) (task-status need-resolution)) + (set! (-> self ball) (the-as handle #f)) + (go energyarm-stop) + ) + (else + (let ((gp-1 (get-process *default-dead-pool* energyball #x4000))) + (set! (-> self ball) + (ppointer->handle (when gp-1 + (let ((t9-10 (method-of-type energyball activate))) + (t9-10 (the-as energyball gp-1) self 'energyball (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 energyball-init-by-other (-> self root-override trans)) + (-> gp-1 ppointer) + ) + ) + ) + ) + (go energyarm-idle) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *energyhub-sg* energyhub + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 2 0 10) + :longest-edge (meters 0) + ) + +;; definition for function energyhub-trans +(defbehavior energyhub-trans energyhub () + (+! + (-> self y-rotation) + (* 36.40889 + (-> self rotation-speed value) + (the float (- (-> *display* base-frame-counter) (-> *display* old-base-frame-counter))) + ) + ) + (cond + ((< 65536.0 (-> self y-rotation)) + (set! (-> self y-rotation) (+ -65536.0 (-> self y-rotation))) + ) + ((< (-> self y-rotation) 0.0) + (set! (-> self y-rotation) (+ 65536.0 (-> self y-rotation))) + ) + ) + (let ((gp-0 (new 'stack-no-clear 'matrix))) + (let* ((f0-9 (the float (-> *display* base-frame-counter))) + (f28-0 (- f0-9 (* (the float (the int (/ f0-9 1200.0))) 1200.0))) + ) + (matrix-rotate-y! gp-0 (-> self y-rotation)) + (matrix*! (-> self rot-mat) gp-0 (-> self rot-mat-init)) + (set! (-> self x-rotation) (* 728.1778 (sin (* 54.613335 f28-0)))) + ) + (matrix-rotate-x! gp-0 (-> self x-rotation)) + (matrix*! (-> self rot-mat) gp-0 (-> self rot-mat)) + ) + (matrix->quaternion (-> self root quat) (-> self rot-mat)) + ) + +;; definition for function energyhub-set-lava-height +(defbehavior energyhub-set-lava-height energyhub ((arg0 float)) + (let ((v1-0 (-> self alts 2))) + (when v1-0 + (let ((v1-2 (-> v1-0 extra process))) + (when v1-2 + (let* ((f0-1 (- 0.0 (-> self palette-val))) + (f0-2 (if (< 0.0 f0-1) + (fmin 0.1 f0-1) + (fmax -0.1 f0-1) + ) + ) + ) + (+! (-> self palette-val) f0-2) + ) + (set! (-> *palette-fade-controls* control 2 fade) (-> self palette-val)) + (set! (-> (the-as process-drawable v1-2) root scale x) 1.25) + (let ((f0-6 1.25)) + (set! (-> (the-as process-drawable v1-2) root scale z) f0-6) + f0-6 + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate energyhub-stopped (energyhub) + :enter + (behavior () + (set! (-> self rotation-speed target) 0.0) + (set! (-> self rotation-speed accel) 0.0005) + (dotimes (gp-0 5) + (send-event (handle->process (-> self arm gp-0)) 'stop) + ) + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (none) + ) + :trans + (behavior () + (update! (-> self rotation-speed) 0.0) + (energyhub-trans) + (energyhub-set-lava-height -122880.0) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let* ((f30-0 1.0) + (f28-0 0.25) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (f0-4 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2))))) + (a0-2 (-> self skel root-channel 0)) + ) + (set! (-> a0-2 param 0) f0-4) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyhub) ja-post) + ) + +;; failed to figure out what this is: +(defstate energyhub-stop (energyhub) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'flash) + (let ((f0-0 1.9921875)) + (set! (-> self palette-val) f0-0) + f0-0 + ) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self rotation-speed target) 0.0) + (set! (-> self rotation-speed accel) 0.0005) + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 0) + (set! (-> a1-0 message) 'stop) + (let ((t9-0 send-event-function) + (v1-1 (-> self alts 0)) + ) + (t9-0 + (if v1-1 + (-> v1-1 extra process) + ) + a1-0 + ) + ) + ) + (let ((a1-1 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-1 from) self) + (set! (-> a1-1 num-params) 0) + (set! (-> a1-1 message) 'open) + (let ((t9-1 send-event-function) + (v1-5 (-> self alts 1)) + ) + (t9-1 + (if v1-5 + (-> v1-5 extra process) + ) + a1-1 + ) + ) + ) + (close-specific-task! (game-task lavatube-balls) (task-status need-resolution)) + (level-hint-spawn + (game-text-id lavatube-spheres-door-open) + "sksp0378" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (if (nonzero? (-> self sound)) + (stop! (-> self sound)) + ) + (none) + ) + :trans + (behavior () + (update! (-> self rotation-speed) 0.0) + (energyhub-trans) + (energyhub-set-lava-height -122880.0) + (if (< (-> self rotation-speed value) 0.3) + (go energyhub-stopped) + ) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let* ((f30-0 1.0) + (f28-0 0.25) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (f0-4 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2))))) + (a0-2 (-> self skel root-channel 0)) + ) + (set! (-> a0-2 param 0) f0-4) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyhub) ja-post) + ) + +;; failed to figure out what this is: +(defstate energyhub-idle (energyhub) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'flash) + (let ((f0-0 1.9921875)) + (set! (-> self palette-val) f0-0) + f0-0 + ) + ) + ) + ) + ) + :trans + (behavior () + (if (nonzero? (-> self sound)) + (update! (-> self sound)) + ) + (let ((gp-0 0)) + (dotimes (s5-0 5) + (let* ((s4-0 (handle->process (-> self arm s5-0))) + (v1-10 (if (and (nonzero? s4-0) (type-type? (-> s4-0 type) energyarm)) + (the-as energyarm s4-0) + ) + ) + ) + (if (and v1-10 (handle->process (-> v1-10 ball))) + (+! gp-0 1) + ) + ) + ) + (cond + ((zero? gp-0) + (energyhub-set-lava-height -122880.0) + (go energyhub-stop) + ) + ((= gp-0 1) + (set! (-> self rotation-speed target) 1.8) + (energyhub-set-lava-height -129024.0) + ) + ((= gp-0 2) + (set! (-> self rotation-speed target) 1.6) + (energyhub-set-lava-height -135168.0) + ) + ((= gp-0 3) + (set! (-> self rotation-speed target) 1.4) + (energyhub-set-lava-height -141312.0) + ) + ((= gp-0 4) + (set! (-> self rotation-speed target) 1.2) + (energyhub-set-lava-height -147456.0) + ) + (else + (set! (-> self rotation-speed target) 1.0) + (energyhub-set-lava-height -151552.0) + ) + ) + ) + (update! (-> self rotation-speed-offset)) + (update! (-> self rotation-speed) (-> self rotation-speed-offset value)) + (energyhub-trans) + (none) + ) + :code + (behavior () + (while #t + (suspend) + (let* ((f30-0 1.0) + (f28-0 0.25) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (f0-4 (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2))))) + (a0-2 (-> self skel root-channel 0)) + ) + (set! (-> a0-2 param 0) f0-4) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-loop!) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energyhub) ja-post) + ) + +;; definition for method 11 of type energyhub +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! energyhub ((obj energyhub) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *energyhub-sg* '()) + (set! (-> obj sound) (new 'process 'ambient-sound arg0 (-> obj root trans))) + (let ((s5-1 (entity-actor-count (-> obj entity) 'alt-actor))) + (dotimes (s4-0 (min 3 s5-1)) + (set! (-> obj alts s4-0) (entity-actor-lookup (-> obj entity) 'alt-actor s4-0)) + ) + ) + (quaternion->matrix (-> obj rot-mat-init) (-> obj root quat)) + (let ((f30-0 13107.2) + (s5-2 (new 'stack-no-clear 'vector)) + (s4-1 (new 'stack-no-clear 'matrix)) + ) + (set-vector! s5-2 0.0 2457.6 -24576.0 1.0) + (matrix-rotate-y! s4-1 f30-0) + (dotimes (s3-0 5) + (let ((s2-0 (get-process *default-dead-pool* energyarm #x4000))) + (set! (-> obj arm s3-0) + (ppointer->handle (when s2-0 + (let ((t9-9 (method-of-type energyarm activate))) + (t9-9 (the-as energyarm s2-0) obj 'energyarm (the-as pointer #x70004000)) + ) + (run-now-in-process s2-0 energyarm-init-by-other s5-2 (* (the float s3-0) f30-0)) + (-> s2-0 ppointer) + ) + ) + ) + ) + (vector-matrix*! s5-2 s5-2 s4-1) + ) + ) + (set! (-> obj root pause-adjust-distance) 245760.0) + (set! (-> obj y-rotation) 0.0) + (set! (-> obj x-rotation) 0.0) + (set-params! (-> obj rotation-speed-offset) 300 600 0.25) + (set! (-> obj palette-val) 0.0) + (cond + ((task-closed? (game-task lavatube-balls) (task-status need-resolution)) + (set-params! (-> obj rotation-speed) 0.0 0.01 0.1 0.9) + (go energyhub-stopped) + ) + (else + (set-params! (-> obj rotation-speed) 1.0 0.01 0.1 0.9) + (go energyhub-idle) + ) + ) + (none) + ) + +;; definition of type energylava +(deftype energylava (process-drawable) + ((root-override basic :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + energylava-idle + ) + ) + +;; definition for method 3 of type energylava +(defmethod inspect energylava ((obj energylava)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *energylava-sg* energylava + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 120) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate energylava-idle (energylava) + :code + (behavior () + (while #t + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-0 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! + a0-0 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior energylava) ja-post) + ) + +;; definition for method 11 of type energylava +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! energylava ((obj energylava) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *energylava-sg* '()) + (go energylava-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/maincave/maincave-obs_REF.gc b/test/decompiler/reference/levels/maincave/maincave-obs_REF.gc new file mode 100644 index 000000000..4d732a345 --- /dev/null +++ b/test/decompiler/reference/levels/maincave/maincave-obs_REF.gc @@ -0,0 +1,1619 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type maincavecam +(deftype maincavecam (pov-camera) + ((seq uint64 :offset-assert 224) + ) + :heap-base #x80 + :method-count-assert 30 + :size-assert #xe8 + :flag-assert #x1e008000e8 + ) + +;; definition for method 3 of type maincavecam +(defmethod inspect maincavecam ((obj maincavecam)) + (let ((t9-0 (method-of-type pov-camera inspect))) + (t9-0 obj) + ) + (format #t "~T~Tseq: ~D~%" (-> obj seq)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *maincavecam-sg* maincavecam + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +;; definition for method 29 of type maincavecam +(defmethod set-stack-size! maincavecam ((obj maincavecam)) + (stack-size-set! (-> obj main-thread) 512) + (none) + ) + +;; failed to figure out what this is: +(defstate pov-camera-playing (maincavecam) + :virtual #t + :code + (behavior () + (cond + ((zero? (-> self seq)) + (let* ((gp-0 (get-process *default-dead-pool* fuel-cell #x4000)) + (gp-1 + (ppointer->handle + (when gp-0 + (let ((t9-1 (method-of-type fuel-cell activate))) + (t9-1 (the-as fuel-cell gp-0) (ppointer->process (-> self parent)) 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 fuel-cell-init-as-clone (process->handle self) (-> self entity extra perm task)) + (-> gp-0 ppointer) + ) + ) + ) + ) + (ja-play-spooled-anim + (new 'static 'spool-anim :name "maincavecam-gnawer-fuel-cell" :index 3 :parts 1 :command-list '()) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (let ((a0-7 (handle->process gp-1))) + (if a0-7 + (send-event a0-7 'stop-cloning) + ) + ) + ) + ) + (else + (suspend) + 0 + ) + ) + (go-virtual pov-camera-done-playing) + (none) + ) + ) + +;; definition of type cave-water +(deftype cave-water (water-anim) + () + :heap-base #x70 + :method-count-assert 30 + :size-assert #xdc + :flag-assert #x1e007000dc + ) + +;; definition for method 3 of type cave-water +(defmethod inspect cave-water ((obj cave-water)) + (let ((t9-0 (method-of-type water-anim inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for symbol ripple-for-cave-water, type ripple-wave-set +(define ripple-for-cave-water (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + +;; definition for method 22 of type cave-water +;; INFO: Return type mismatch rgbaf vs none. +(defmethod TODO-RENAME-22 cave-water ((obj cave-water)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (let ((v1-2 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) v1-2) + (set! (-> v1-2 global-scale) 3072.0) + (set! (-> v1-2 close-fade-dist) 163840.0) + (set! (-> v1-2 far-fade-dist) 245760.0) + (set! (-> v1-2 waveform) ripple-for-cave-water) + ) + (case (-> obj look) + ((37 14) + (set-vector! (-> obj draw color-mult) 0.2 0.1 0.3 0.75) + ) + ) + (none) + ) + +;; definition of type cavecrusher +(deftype cavecrusher (process-drawable) + ((root-override collide-shape :offset 112) + ) + :heap-base #x40 + :method-count-assert 20 + :size-assert #xb0 + :flag-assert #x14004000b0 + (:states + cavecrusher-idle + ) + ) + +;; definition for method 3 of type cavecrusher +(defmethod inspect cavecrusher ((obj cavecrusher)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *cavecrusher-sg* cavecrusher + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate cavecrusher-idle (cavecrusher) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (or (= v1-0 'touch) (= v1-0 'attack)) + (when (= (-> arg0 type) target) + (if ((method-of-type touching-shapes-entry prims-touching-action?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> *target* control) + (the-as uint 1) + (the-as uint 0) + ) + (target-attack-up *target* 'attack-or-shove 'deadlyup) + ) + ) + ) + ) + ) + ) + :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) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (update! (-> self sound)) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior cavecrusher) ja-post) + ) + +;; definition for method 11 of type cavecrusher +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! cavecrusher ((obj cavecrusher) (arg0 entity-actor)) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-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 0.0 0.0 11468.8) + (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 *cavecrusher-sg* '()) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "crush-click") + :volume #x400 + :fo-max 30 + ) + (-> obj root-override trans) + ) + ) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 4)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (go cavecrusher-idle) + (none) + ) + +;; definition of type cavetrapdoor +(deftype cavetrapdoor (process-drawable) + ((root-override collide-shape-moving :offset 112) + (delay-before-wiggle int32 :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 22 + :size-assert #xb4 + :flag-assert #x16005000b4 + (:methods + (idle () _type_ :state 20) + (trigger () _type_ :state 21) + ) + ) + +;; definition for method 3 of type cavetrapdoor +(defmethod inspect cavetrapdoor ((obj cavetrapdoor)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tdelay-before-wiggle: ~D~%" (-> obj delay-before-wiggle)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *cavetrapdoor-sg* cavetrapdoor + 0 + -1 + ((1 (meters 20)) (2 (meters 40)) (3 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 5.7) + ) + +;; failed to figure out what this is: +(defstate idle (cavetrapdoor) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch) + (when (= (-> arg0 type) target) + (when (>= (- (-> (target-pos 0) y) (-> self root-override trans y)) 409.6) + (send-event arg0 'no-look-around 450) + (go-virtual trigger) + ) + ) + ) + ) + ) + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-0 param 1) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (transform-post) + (suspend) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (the float (+ (-> a0-1 frame-group data 0 length) -1))) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (anim-loop) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate trigger (cavetrapdoor) + :virtual #t + :code + (behavior () + (when (nonzero? (-> self delay-before-wiggle)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) (-> self delay-before-wiggle)) + (suspend) + ) + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 frame-group) (the-as art-joint-anim (-> self draw art-group data 5))) + (set! (-> a0-2 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 5)) data 0 length) -1)) + ) + (set! (-> a0-2 param 1) 1.0) + (set! (-> a0-2 frame-num) 0.0) + (joint-control-channel-group! a0-2 (the-as art-joint-anim (-> self draw art-group data 5)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) (the float (+ (-> a0-3 frame-group data 0 length) -1))) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! a0-3 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (clear-collide-with-as (-> self root-override)) + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> gp-0 param 0) (ja-aframe 290.0 0)) + (set! (-> gp-0 param 1) 1.0) + (set! (-> gp-0 frame-num) 0.0) + (joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 290.0 0)) + (set! (-> gp-1 param 1) 1.0) + (joint-control-channel-group-eval! gp-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (restore-collide-with-as (-> self root-override)) + (let ((a0-12 (-> self skel root-channel 0))) + (set! (-> a0-12 param 0) (the float (+ (-> a0-12 frame-group data 0 length) -1))) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group! a0-12 (the-as art-joint-anim #f) num-func-seek!) + ) + (while (not (ja-done? 0)) + (suspend) + (ja-eval) + ) + (until (or + (or + (not *target*) + (< 28672.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans))) + ) + (and + (not (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + ) + (zero? (logand (-> *target* control root-prim prim-core action) 128)) + ) + ) + (let ((a0-14 (-> self skel root-channel 0))) + (set! (-> a0-14 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-14 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-14 param 1) 1.0) + (set! (-> a0-14 frame-num) 0.0) + (joint-control-channel-group! a0-14 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-15 (-> self skel root-channel 0))) + (set! (-> a0-15 param 0) (the float (+ (-> a0-15 frame-group data 0 length) -1))) + (set! (-> a0-15 param 1) 1.0) + (joint-control-channel-group-eval! a0-15 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (label cfg-14) + ) + (let ((a0-27 (-> self skel root-channel 0))) + (set! (-> a0-27 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-27 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-27 param 1) 1.0) + (set! (-> a0-27 frame-num) 0.0) + (joint-control-channel-group! a0-27 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (when (and + (and *target* (>= 28672.0 (vector-vector-distance (-> self root-override trans) (-> *target* control trans)))) + (or + (and + (logtest? (-> *target* control unknown-surface00 flags) 2048) + (zero? (logand (-> *target* control status) 1)) + ) + (logtest? (-> *target* control root-prim prim-core action) 128) + ) + ) + (while (not (ja-min? 0)) + (suspend) + (let ((a0-38 (-> self skel root-channel 0))) + (set! (-> a0-38 param 0) 0.0) + (set! (-> a0-38 param 1) 1.0) + (joint-control-channel-group-eval! a0-38 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (goto cfg-14) + ) + (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!) + ) + ) + (go-virtual idle) + (none) + ) + :post + (the-as (function none :behavior cavetrapdoor) pusher-post) + ) + +;; definition for method 11 of type cavetrapdoor +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! cavetrapdoor ((obj cavetrapdoor) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 3) + (set-vector! (-> s3-0 local-sphere) 9830.4 10240.0 0.0 17203.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 *cavetrapdoor-sg* '()) + (ja-channel-push! 1 0) + (let ((s4-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> obj draw art-group data 4)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (let ((f0-7 (quaternion-y-angle (-> obj root-override quat))) + (s4-2 (-> obj draw bounds)) + ) + (set-vector! s4-2 0.0 -8192.0 4096.0 1.0) + (vector-rotate-around-y! s4-2 s4-2 f0-7) + (set! (-> s4-2 w) 25600.0) + ) + (set! (-> obj delay-before-wiggle) (the int (* 300.0 (res-lump-float arg0 'delay)))) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 8192.0 + ) + (go (method-of-object obj idle)) + (none) + ) + +;; definition of type caveflamepots +(deftype caveflamepots (process-drawable) + ((root-override collide-shape :offset 112) + (shove-up float :offset-assert 176) + (cycle-speed int32 :offset-assert 180) + (cycle-pause int32 :offset-assert 184) + (cycle-offset uint32 :offset-assert 188) + (was-deadly? symbol :offset-assert 192) + (should-play-sound? symbol :offset-assert 196) + (launch-pos vector 2 :inline :offset-assert 208) + ) + :heap-base #x80 + :method-count-assert 20 + :size-assert #xf0 + :flag-assert #x14008000f0 + (:states + caveflamepots-active + ) + ) + +;; definition for method 3 of type caveflamepots +(defmethod inspect caveflamepots ((obj caveflamepots)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tshove-up: ~f~%" (-> obj shove-up)) + (format #t "~T~Tcycle-speed: ~D~%" (-> obj cycle-speed)) + (format #t "~T~Tcycle-pause: ~D~%" (-> obj cycle-pause)) + (format #t "~T~Tcycle-offset: ~D~%" (-> obj cycle-offset)) + (format #t "~T~Twas-deadly?: ~A~%" (-> obj was-deadly?)) + (format #t "~T~Tshould-play-sound?: ~A~%" (-> obj should-play-sound?)) + (format #t "~T~Tlaunch-pos[2] @ #x~X~%" (-> obj launch-pos)) + obj + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 704) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.0)) + (sp-rnd-flt spt-rot-z (degrees -180.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.01) 1.0) + (sp-flt spt-scalevel-x (meters -0.0039999997)) + (sp-rnd-flt spt-rotvel-z (degrees -1.8) (degrees 1.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-accel-y -2.4576) + (sp-int spt-timer 5004) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 705) + (new 'static 'sparticle-launcher :init-specs (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-scale-x (meters 2.0)) + (sp-rnd-flt spt-rot-z (degrees -180.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 0.0) + (sp-flt spt-a 128.0) + (sp-rnd-flt spt-vel-y (meters 0.04) (meters 0.01) 1.0) + (sp-flt spt-scalevel-x (meters -0.0039999997)) + (sp-rnd-flt spt-rotvel-z (degrees -1.8) (degrees 1.8) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-g -1.28) + (sp-flt spt-fade-a -0.85333335) + (sp-flt spt-accel-y -2.4576) + (sp-int spt-timer 5004) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(defstate caveflamepots-active (caveflamepots) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('touch 'attack) + (when (= (-> arg0 type) target) + (when ((method-of-type touching-shapes-entry prims-touching-action?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> *target* control) + (the-as uint 1) + (the-as uint 0) + ) + (let ((s4-0 (new 'stack 'attack-info))) + (dummy-41 (-> self root-override) s4-0 (-> self shove-up)) + (cond + ((or + (= (-> *target* control unknown-surface00 mode) 'air) + (>= (+ (-> *display* base-frame-counter) -60) (-> *target* control unknown-dword11)) + (< 0.75 (-> *target* control poly-normal y)) + ) + (let ((a1-5 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-5 from) self) + (set! (-> a1-5 num-params) 2) + (set! (-> a1-5 message) 'attack-or-shove) + (set! (-> a1-5 param 0) (-> arg3 param 0)) + (let ((v1-22 (new 'static 'attack-info :mask #xa2))) + (set! (-> v1-22 mode) 'burn) + (set! (-> v1-22 vector quad) (-> s4-0 vector quad)) + (set! (-> v1-22 shove-up) (-> s4-0 shove-up)) + (set! (-> a1-5 param 1) (the-as uint v1-22)) + ) + (send-event-function arg0 a1-5) + ) + ) + (else + (let ((a1-6 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-6 from) self) + (set! (-> a1-6 num-params) 2) + (set! (-> a1-6 message) 'attack-or-shove) + (set! (-> a1-6 param 0) (-> arg3 param 0)) + (let ((v1-26 (new 'static 'attack-info :mask #x8e2))) + (set! (-> v1-26 mode) 'burn) + (set! (-> v1-26 shove-up) 0.0) + (set! (-> v1-26 shove-back) 8192.0) + (set! (-> v1-26 vector quad) (-> *target* control poly-normal quad)) + (set! (-> v1-26 angle) 'shove) + (set! (-> a1-6 param 1) (the-as uint v1-26)) + ) + (send-event-function arg0 a1-6) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :trans + (behavior () + (let* ((v1-0 (-> self cycle-speed)) + (a0-1 (- v1-0 (-> self cycle-pause))) + (gp-0 (mod (+ (-> *display* base-frame-counter) (-> self cycle-offset)) v1-0)) + ) + (cond + ((< gp-0 a0-1) + (when (sphere-in-view-frustum? (the-as sphere (-> self root-override root-prim prim-core))) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 704) + (the-as vector (-> self launch-pos)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 705) + (the-as vector (&-> self stack 112)) + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (when (-> self should-play-sound?) + (set! (-> self should-play-sound?) #f) + (sound-play-by-name (static-sound-name "hot-flame") (new-sound-id) 1024 0 0 1 #t) + ) + (cond + ((< gp-0 30) + (when (-> self was-deadly?) + (set! (-> self was-deadly?) #f) + (clear-collide-with-as (-> self root-override)) + ) + ) + (else + (when (not (-> self was-deadly?)) + (set! (-> self was-deadly?) #t) + (restore-collide-with-as (-> self root-override)) + ) + ) + ) + (when (and (not (-> self was-deadly?)) (< 60 gp-0)) + (set! (-> self was-deadly?) #t) + (restore-collide-with-as (-> self root-override)) + ) + ) + (else + (set! (-> self should-play-sound?) #t) + (when (-> self was-deadly?) + (set! (-> self was-deadly?) #f) + (clear-collide-with-as (-> self root-override)) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + ) + +;; definition for method 11 of type caveflamepots +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! caveflamepots ((obj caveflamepots) (arg0 entity-actor)) + (local-vars (sv-16 res-tag) (sv-32 res-tag) (sv-48 res-tag)) + (set! (-> obj was-deadly?) #f) + (set! (-> obj should-play-sound?) #f) + (set! (-> obj shove-up) (res-lump-float arg0 'shove :default 8192.0)) + (logclear! (-> obj mask) (process-mask enemy)) + (logclear! (-> obj mask) (process-mask attackable)) + (logior! (-> obj mask) (process-mask actor-pause)) + (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 4) 0))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core offense) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 12288.0 0.0 10240.0) + (set-root-prim! s4-0 s3-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core offense) 0) + (set-vector! (-> s2-0 local-sphere) 4915.2 8192.0 0.0 3686.4) + (append-prim s3-0 s2-0) + ) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core offense) 0) + (set-vector! (-> s2-1 local-sphere) 4915.2 14336.0 0.0 3276.8) + (append-prim s3-0 s2-1) + ) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-2 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-2 collide-with) (the-as uint 16)) + (set! (-> s2-2 prim-core offense) 0) + (set-vector! (-> s2-2 local-sphere) -4915.2 8192.0 0.0 3686.4) + (append-prim s3-0 s2-2) + ) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-3 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-3 collide-with) (the-as uint 16)) + (set! (-> s2-3 prim-core offense) 0) + (set-vector! (-> s2-3 local-sphere) -4915.2 14336.0 0.0 3276.8) + (append-prim s3-0 s2-3) + ) + ) + (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) + (let ((v1-42 (new 'process 'path-control obj 'path 0.0))) + (set! (-> obj path) v1-42) + (logior! (-> v1-42 flags) (path-control-flag display draw-line draw-point draw-text)) + (if (<= (-> v1-42 curve num-cverts) 0) + (go process-drawable-art-error "no path") + ) + ) + (let ((f0-23 (res-lump-float arg0 'rotoffset))) + (if (!= f0-23 0.0) + (quaternion-rotate-y! (-> obj root-override quat) (-> obj root-override quat) f0-23) + ) + ) + (let ((f30-0 (quaternion-y-angle (-> obj root-override quat)))) + (let ((s4-1 (-> obj launch-pos))) + (let ((v1-53 s4-1)) + (set! (-> v1-53 0 x) 6144.0) + (set! (-> v1-53 0 y) 0.0) + (set! (-> v1-53 0 z) 0.0) + (set! (-> v1-53 0 w) 1.0) + ) + (vector-rotate-around-y! (the-as vector s4-1) (the-as vector s4-1) f30-0) + (vector+! (the-as vector s4-1) (the-as vector s4-1) (-> obj root-override trans)) + ) + (let ((s4-2 (the-as object (&-> obj stack 112)))) + (set-vector! (the-as vector s4-2) -6144.0 0.0 0.0 1.0) + (vector-rotate-around-y! (the-as vector s4-2) (the-as vector s4-2) f30-0) + (vector+! (the-as vector s4-2) (the-as vector s4-2) (-> obj root-override trans)) + ) + (let ((s4-3 (-> obj root-override root-prim))) + (dotimes (s3-1 (-> (the-as collide-shape-prim-group s4-3) num-prims)) + (let ((a1-19 (-> (the-as collide-shape-prim-group s4-3) prims s3-1 local-sphere))) + (vector-rotate-around-y! a1-19 a1-19 f30-0) + ) + ) + ) + ) + (dummy-47 (-> obj root-override)) + (let ((f30-1 300.0)) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-70 (res-lump-data arg0 'cycle-speed (pointer float) :tag-ptr (& sv-16)))) + (set! (-> obj cycle-speed) (the int (* f30-1 (if (and v1-70 (> (the-as int (-> sv-16 elt-count)) 0)) + (-> v1-70 0) + 4.0 + ) + ) + ) + ) + ) + ) + (let ((f30-2 (the float (-> obj cycle-speed)))) + (set! sv-32 (new 'static 'res-tag)) + (let ((v1-74 (res-lump-data arg0 'cycle-speed (pointer float) :tag-ptr (& sv-32)))) + (set! (-> obj cycle-offset) + (the-as uint (the int (* f30-2 (if (and v1-74 (< 1 (the-as int (-> sv-32 elt-count)))) + (-> v1-74 1) + 0.0 + ) + ) + ) + ) + ) + ) + ) + (let ((f30-3 300.0)) + (set! sv-48 (new 'static 'res-tag)) + (let ((v1-77 (res-lump-data arg0 'cycle-speed (pointer float) :tag-ptr (& sv-48)))) + (set! (-> obj cycle-pause) (the int (* f30-3 (if (and v1-77 (< 2 (the-as int (-> sv-48 elt-count)))) + (-> v1-77 2) + 2.0 + ) + ) + ) + ) + ) + ) + (go caveflamepots-active) + (none) + ) + +;; definition of type cavespatula +(deftype cavespatula (process-drawable) + ((root-override collide-shape-moving :offset 112) + (sync sync-info :inline :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb8 + :flag-assert #x14005000b8 + (:states + cavespatula-idle + ) + ) + +;; definition for method 3 of type cavespatula +(defmethod inspect cavespatula ((obj cavespatula)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tsync: #~%" (-> obj sync)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *cavespatula-sg* cavespatula + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -1 0 18) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *cavespatula-darkcave-sg* cavespatula-darkcave + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -1 0 18) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate cavespatula-idle (cavespatula) + :trans + (behavior () + (rider-trans) + (update! (-> self sound)) + (let ((f0-0 (get-current-phase (-> self sync)))) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 (* -65536.0 f0-0)) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior cavespatula) rider-post) + ) + +;; definition for method 11 of type cavespatula +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! cavespatula ((obj cavespatula) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 -8192.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) + (set! (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #xc0 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "spatula") + :volume #x400 + :fo-min 25 + :fo-max 50 + ) + (-> obj root-override trans) + ) + ) + (case (-> (if (-> obj entity) + (-> obj entity extra level) + (-> *level* level-default) + ) + name + ) + (('darkcave) + (initialize-skeleton obj *cavespatula-darkcave-sg* '()) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + ) + (else + (initialize-skeleton obj *cavespatula-sg* '()) + (ja-channel-push! 1 0) + (let ((s5-2 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-2 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> s5-2 frame-num) 0.0) + ) + ) + ) + (logior! (-> obj skel status) 1) + (load-params! (-> obj sync) obj (the-as uint 3000) 0.0 0.15 0.15) + (ja-post) + (dummy-47 (-> obj root-override)) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + -1 + 32768.0 + ) + (go cavespatula-idle) + (none) + ) + +;; definition of type cavespatulatwo +(deftype cavespatulatwo (process-drawable) + ((root-override collide-shape-moving :offset 112) + (sync sync-info :inline :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb8 + :flag-assert #x14005000b8 + (:states + cavespatulatwo-idle + ) + ) + +;; definition for method 3 of type cavespatulatwo +(defmethod inspect cavespatulatwo ((obj cavespatulatwo)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tsync: #~%" (-> obj sync)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *cavespatulatwo-sg* cavespatulatwo + 0 + -1 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 2.5 0 21) + :longest-edge (meters 8.7) + ) + +;; failed to figure out what this is: +(defstate cavespatulatwo-idle (cavespatulatwo) + :trans + (behavior () + (rider-trans) + (update! (-> self sound)) + (let ((f0-0 (get-current-phase (-> self sync)))) + (quaternion-axis-angle! (-> self root-override quat) 0.0 1.0 0.0 (* -65536.0 f0-0)) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior cavespatulatwo) rider-post) + ) + +;; definition for method 11 of type cavespatulatwo +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! cavespatulatwo ((obj cavespatulatwo) (arg0 entity-actor)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 3)) + (set! (-> s3-0 prim-core offense) 4) + (set! (-> s3-0 transform-index) 0) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 75776.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 *cavespatulatwo-sg* '()) + (logclear! (-> obj mask) (process-mask actor-pause)) + (logior! (-> obj skel status) 1) + (load-params! (-> obj sync) obj (the-as uint 3000) 0.0 0.15 0.15) + (ja-channel-push! 1 0) + (let ((s5-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> obj draw art-group data 3)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (transform-post) + (set! (-> obj sound) (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #xc0 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "spatula") + :volume #x400 + :fo-min 25 + :fo-max 50 + ) + (-> obj root-override trans) + ) + ) + (go cavespatulatwo-idle) + (none) + ) + +;; definition of type caveelevator +(deftype caveelevator (process-drawable) + ((root-override collide-shape-moving :offset 112) + (elev-mode uint64 :offset-assert 176) + (elev-type int32 :offset-assert 184) + (prev-frame-num float :offset-assert 188) + (last-update-bounce-time uint64 :offset-assert 192) + (orig-trans vector :inline :offset-assert 208) + (sync sync-info :inline :offset-assert 224) + (smush smush-control :inline :offset-assert 232) + (anim int32 2 :offset-assert 264) + (wheel-ry-mat matrix :inline :offset 272) + ) + :heap-base #xe0 + :method-count-assert 22 + :size-assert #x150 + :flag-assert #x1600e00150 + (:methods + (TODO-RENAME-20 (_type_) none 20) + (TODO-RENAME-21 (_type_) float 21) + ) + (:states + caveelevator-cycle-active + caveelevator-one-way-idle-end + caveelevator-one-way-idle-start + caveelevator-one-way-travel-to-end + caveelevator-one-way-travel-to-start + ) + ) + +;; definition for method 3 of type caveelevator +(defmethod inspect caveelevator ((obj caveelevator)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Telev-mode: ~D~%" (-> obj elev-mode)) + (format #t "~T~Telev-type: ~D~%" (-> obj elev-type)) + (format #t "~T~Tprev-frame-num: ~f~%" (-> obj prev-frame-num)) + (format #t "~T~Tlast-update-bounce-time: ~D~%" (-> obj last-update-bounce-time)) + (format #t "~T~Torig-trans: #~%" (-> obj orig-trans)) + (format #t "~T~Tsync: #~%" (-> obj sync)) + (format #t "~T~Tsmush: #~%" (-> obj smush)) + (format #t "~T~Tanim[2] @ #x~X~%" (-> obj anim)) + (format #t "~T~Twheel-ry-mat: #~%" (-> obj wheel-ry-mat)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *caveelevator-sg* caveelevator + 0 + -1 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4.25) + :longest-edge (meters 0) + ) + +;; definition for function cavecrystal-light-control-caveelevator-callback +;; Used lq/sq +(defun cavecrystal-light-control-caveelevator-callback ((arg0 (pointer cavecrystal)) (arg1 int) (arg2 float)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (let ((v1-1 (-> arg0 0 node-list))) + (if (and (>= arg1 0) (nonzero? v1-1)) + (vector<-cspace! s5-0 (-> v1-1 data arg1)) + (set! (-> s5-0 quad) (-> arg0 0 root-override trans quad)) + ) + ) + (set! (-> s5-0 w) arg2) + (let ((f0-1 (TODO-RENAME-10 *cavecrystal-light-control* s5-0)) + (a2-2 (new 'static 'vector :x 1.0 :y 1.0 :z 1.0 :w 1.0)) + (a1-5 (new 'static 'vector :x 0.3 :y 0.3 :z 0.3 :w 1.0)) + ) + (vector-lerp! (-> arg0 0 draw color-mult) a1-5 a2-2 f0-1) + ) + ) + ) + +;; definition for method 20 of type caveelevator +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod TODO-RENAME-20 caveelevator ((obj caveelevator)) + (let ((v1-1 (-> *display* base-frame-counter))) + (when (!= v1-1 (-> obj last-update-bounce-time)) + (set! (-> obj last-update-bounce-time) (the-as uint v1-1)) + (when (!= (-> obj smush amp) 0.0) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (set! (-> s5-0 quad) (-> obj orig-trans quad)) + (+! (-> s5-0 y) (* 819.2 (update! (-> obj smush)))) + (TODO-RENAME-30 (-> obj root-override) s5-0) + ) + ) + ) + ) + (none) + ) + +;; definition for method 21 of type caveelevator +(defmethod TODO-RENAME-21 caveelevator ((obj caveelevator)) + (let ((s5-0 (new 'stack-no-clear 'vector)) + (gp-0 (-> obj draw bounds)) + ) + (vector<-cspace! s5-0 (-> obj node-list data 3)) + (vector-! gp-0 s5-0 (-> obj root-override trans)) + (let ((f0-0 17408.0)) + (set! (-> gp-0 w) f0-0) + f0-0 + ) + ) + ) + +;; failed to figure out what this is: +(defstate caveelevator-cycle-active (caveelevator) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'bonk) + (activate! (-> self smush) -1.0 60 150 1.0 1.0) + ) + ) + ) + ) + :enter + (behavior () (logclear! (-> self mask) (process-mask actor-pause)) (none)) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (none)) + :trans + (behavior () (rider-trans) (TODO-RENAME-20 self) (none)) + :code + (behavior () + (while #t + (let ((f30-1 (* (get-current-phase (-> self sync)) (the float (ja-num-frames 0))))) + (cond + ((< (-> self prev-frame-num) f30-1) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) f30-1) + (set! (-> a0-2 param 1) 10000.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((v1-7 (-> self skel root-channel 0))) + (set! (-> v1-7 num-func) num-func-identity) + (set! (-> v1-7 frame-num) f30-1) + ) + ) + ) + (set! (-> self prev-frame-num) f30-1) + ) + (suspend) + ) + (none) + ) + :post + (behavior () (rider-post) (TODO-RENAME-21 self) (none)) + ) + +;; failed to figure out what this is: +(defstate caveelevator-one-way-idle-start (caveelevator) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('bonk) + (activate! (-> self smush) -1.0 60 150 1.0 1.0) + (go caveelevator-one-way-travel-to-end) + ) + (('attack 'touch) + (if (and + (= (-> arg0 type) target) + (>= 8192.0 (vector-vector-xz-distance (target-pos 0) (-> self root-override trans))) + ) + (go caveelevator-one-way-travel-to-end) + ) + ) + ) + ) + :trans + (behavior () (rider-trans) (TODO-RENAME-20 self) (none)) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as + art-joint-anim + (-> (the-as art-joint-anim (+ (* (-> self anim 0) 4) (the-as int (-> self draw art-group)))) + master-art-group-name + ) + ) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (while #t + (suspend) + ) + (none) + ) + :post + (behavior () (rider-post) (TODO-RENAME-21 self) (none)) + ) + +;; failed to figure out what this is: +(defstate caveelevator-one-way-travel-to-end (caveelevator) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'bonk) + (activate! (-> self smush) -1.0 60 150 1.0 1.0) + ) + ) + ) + ) + :enter + (behavior () (logclear! (-> self mask) (process-mask actor-pause)) (none)) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (none)) + :trans + (behavior () (rider-trans) (TODO-RENAME-20 self) (none)) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data (-> self anim 0))) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (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!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go caveelevator-one-way-idle-end) + (none) + ) + :post + (behavior () (rider-post) (TODO-RENAME-21 self) (none)) + ) + +;; failed to figure out what this is: +(defstate caveelevator-one-way-idle-end (caveelevator) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'bonk) + (activate! (-> self smush) -1.0 60 150 1.0 1.0) + ) + ) + ) + ) + :enter + (behavior () (set! (-> self state-time) (-> *display* base-frame-counter)) (none)) + :trans + (behavior () + (cond + ((zero? (-> self root-override riders num-riders)) + (if (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (go caveelevator-one-way-travel-to-start) + ) + ) + (else + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + ) + (rider-trans) + (TODO-RENAME-20 self) + (none) + ) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data (-> self anim 0))) + num-func-identity + ) + (set! (-> gp-0 frame-num) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data (-> self anim 0))) data 0 length) -1)) + ) + ) + (while #t + (suspend) + ) + (none) + ) + :post + (behavior () (rider-post) (TODO-RENAME-21 self) (none)) + ) + +;; failed to figure out what this is: +(defstate caveelevator-one-way-travel-to-start (caveelevator) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'bonk) + (activate! (-> self smush) -1.0 60 150 1.0 1.0) + ) + ) + ) + ) + :enter + (behavior () (logclear! (-> self mask) (process-mask actor-pause)) (none)) + :exit + (behavior () (logior! (-> self mask) (process-mask actor-pause)) (none)) + :trans + (behavior () (rider-trans) (TODO-RENAME-20 self) (none)) + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + gp-0 + (the-as art-joint-anim (-> self draw art-group data (-> self anim 1))) + num-func-identity + ) + (set! (-> gp-0 frame-num) 0.0) + ) + (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!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go caveelevator-one-way-idle-start) + (none) + ) + :post + (behavior () (rider-post) (TODO-RENAME-21 self) (none)) + ) + +;; definition for function caveelevator-joint-callback +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defun caveelevator-joint-callback ((arg0 caveelevator)) + (let* ((gp-0 arg0) + (f1-1 (- (-> arg0 node-list data 3 bone transform vector 3 y) (-> gp-0 orig-trans y))) + (f30-0 (* 5.0929585 (- f1-1 (* (the float (the int (/ f1-1 12867.963))) 12867.963)))) + (s3-0 (-> arg0 node-list data 5 bone transform)) + (s4-0 (-> arg0 node-list data 4 bone transform)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (set! (-> s5-0 quad) (-> s3-0 vector 3 quad)) + (matrix-rotate-x! s3-0 f30-0) + (matrix*! s3-0 s3-0 (-> gp-0 wheel-ry-mat)) + (set! (-> s3-0 vector 3 quad) (-> s5-0 quad)) + (set! (-> s5-0 quad) (-> s4-0 vector 3 quad)) + (matrix-rotate-x! s4-0 (- f30-0)) + (matrix*! s4-0 s4-0 (-> gp-0 wheel-ry-mat)) + (set! (-> s4-0 vector 3 quad) (-> s5-0 quad)) + ) + 0 + (none) + ) + +;; definition for method 11 of type caveelevator +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! caveelevator ((obj caveelevator) (arg0 entity-actor)) + (local-vars (v1-43 int) (sv-16 res-tag)) + (set! (-> obj prev-frame-num) 10000.0) + (set! (-> obj last-update-bounce-time) (the-as uint 0)) + (set! (-> obj mask) (logior (process-mask platform) (-> obj mask))) + (let ((s4-0 (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)))) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (dummy-29 s4-0 1) + (let ((s3-0 (new 'process 'collide-shape-prim-mesh s4-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 19)) + (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 17408.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 *caveelevator-sg* '()) + (logior! (-> obj skel status) 1) + (set! (-> obj skel postbind-function) caveelevator-joint-callback) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-28 (res-lump-data arg0 'trans-offset (pointer float) :tag-ptr (& sv-16)))) + (when v1-28 + (+! (-> obj root-override trans x) (-> v1-28 0)) + (+! (-> obj root-override trans y) (-> v1-28 1)) + (+! (-> obj root-override trans z) (-> v1-28 2)) + ) + ) + (set! (-> obj orig-trans quad) (-> obj root-override trans quad)) + (let ((f0-13 (res-lump-float (-> obj entity) 'rotoffset))) + (if (!= f0-13 0.0) + (quaternion-rotate-y! (-> obj root-override quat) (-> obj root-override quat) f0-13) + ) + ) + (let ((f0-14 (quaternion-y-angle (-> obj root-override quat)))) + (matrix-rotate-y! (-> obj wheel-ry-mat) f0-14) + ) + (set-zero! (-> obj smush)) + (let ((s5-1 (res-lump-value arg0 'mode uint128))) + 0 + (set! (-> obj elev-type) (the-as int s5-1)) + (let ((v1-42 s5-1)) + (cond + ((zero? v1-42) + (set! v1-43 0) + (set! (-> obj anim 0) 2) + ) + ((= (the-as uint v1-42) 1) + (set! v1-43 1) + (set! (-> obj anim 0) 3) + (set! (-> obj anim 1) 4) + ) + ((= (the-as uint v1-42) 2) + (set! v1-43 0) + (set! (-> obj anim 0) 5) + ) + (else + (set! v1-43 0) + (set! (-> obj anim 0) 2) + (set! (-> obj elev-type) (the-as int s5-1)) + ) + ) + ) + (set! (-> obj elev-mode) (the-as uint v1-43)) + (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 (-> obj anim 0))) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (if (= (the-as uint s5-1) 1) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-caveelevator-callback) + 3 + 8192.0 + ) + (create-connection! + *cavecrystal-light-control* + obj + (-> obj entity) + (the-as (function object object object object object) cavecrystal-light-control-default-callback) + 3 + 8192.0 + ) + ) + ) + (transform-post) + (let ((v1-55 (-> obj elev-mode))) + (cond + ((zero? v1-55) + (load-params! (-> obj sync) obj (the-as uint 3000) 0.0 0.15 0.15) + (go caveelevator-cycle-active) + ) + ((= v1-55 1) + (go caveelevator-one-way-idle-start) + ) + ) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/rolling/rolling-obs_REF.gc b/test/decompiler/reference/levels/rolling/rolling-obs_REF.gc new file mode 100644 index 000000000..4e2f6ec40 --- /dev/null +++ b/test/decompiler/reference/levels/rolling/rolling-obs_REF.gc @@ -0,0 +1,2008 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type rolling-part +(deftype rolling-part (part-spawner) + ((root-override basic :offset 112) + ) + :heap-base #x60 + :method-count-assert 21 + :size-assert #xd0 + :flag-assert #x15006000d0 + ) + +;; definition for method 3 of type rolling-part +(defmethod inspect rolling-part ((obj rolling-part)) + (let ((t9-0 (method-of-type part-spawner inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition of type rollingcam +(deftype rollingcam (process-hidden) + () + :method-count-assert 15 + :size-assert #x70 + :flag-assert #xf00000070 + ) + +;; definition for method 3 of type rollingcam +(defmethod inspect rollingcam ((obj rollingcam)) + (format #t "[~8x] ~A~%" obj (-> obj type)) + (format #t "~Tname: ~A~%" (-> obj name)) + (format #t "~Tmask: ~D~%" (-> obj mask)) + (format #t "~Tparent: #x~X~%" (-> obj parent)) + (format #t "~Tbrother: #x~X~%" (-> obj brother)) + (format #t "~Tchild: #x~X~%" (-> obj child)) + (format #t "~Tppointer: #x~X~%" (-> obj ppointer)) + (format #t "~Tself: ~A~%" (-> obj self)) + (format #t "~Tpool: ~A~%" (-> obj pool)) + (format #t "~Tstatus: ~A~%" (-> obj status)) + (format #t "~Tpid: ~D~%" (-> obj pid)) + (format #t "~Tmain-thread: ~A~%" (-> obj main-thread)) + (format #t "~Ttop-thread: ~A~%" (-> obj top-thread)) + (format #t "~Tentity: ~A~%" (-> obj entity)) + (format #t "~Tstate: ~A~%" (-> obj state)) + (format #t "~Ttrans-hook: ~A~%" (-> obj trans-hook)) + (format #t "~Tpost-hook: ~A~%" (-> obj post-hook)) + (format #t "~Tevent-hook: ~A~%" (-> obj event-hook)) + (format #t "~Tallocated-length: ~D~%" (-> obj allocated-length)) + (format #t "~Tnext-state: ~A~%" (-> obj next-state)) + (format #t "~Theap-base: #x~X~%" (-> obj heap-base)) + (format #t "~Theap-top: #x~X~%" (-> obj heap-top)) + (format #t "~Theap-cur: #x~X~%" (-> obj heap-cur)) + (format #t "~Tstack-frame-top: ~A~%" (-> obj stack-frame-top)) + (format #t "~Theap: #~%" (&-> obj heap-base)) + (format #t "~Tconnection-list: ~`'connectable`P~%" (-> obj connection-list)) + (format #t "~Tstack[0] @ #x~X~%" (-> obj stack)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *rollingcam-sg* rollingcam + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 30) + :longest-edge (meters 0) + ) + +;; definition of type pusher-base +(deftype pusher-base (process-drawable) + ((root-override collide-shape-moving :offset 112) + (max-frame float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + ) + +;; definition for method 3 of type pusher-base +(defmethod inspect pusher-base ((obj pusher-base)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tmax-frame: ~f~%" (-> obj max-frame)) + obj + ) + +;; definition of type pusher +(deftype pusher (pusher-base) + ((sync sync-info-paused :inline :offset-assert 180) + (cyl cylinder :inline :offset-assert 208) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf8 + :flag-assert #x14009000f8 + (:states + pusher-idle + ) + ) + +;; definition for method 3 of type pusher +(defmethod inspect pusher ((obj pusher)) + (let ((t9-0 (method-of-type pusher-base inspect))) + (t9-0 obj) + ) + (format #t "~T~Tsync: #~%" (-> obj sync)) + (format #t "~T~Tcyl: #~%" (-> obj cyl)) + obj + ) + +;; definition of type gorge-pusher +(deftype gorge-pusher (pusher-base) + ((min-frame float :offset-assert 180) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb8 + :flag-assert #x14005000b8 + (:states + gorge-pusher-idle + ) + ) + +;; definition for method 3 of type gorge-pusher +(defmethod inspect gorge-pusher ((obj gorge-pusher)) + (let ((t9-0 (method-of-type pusher-base inspect))) + (t9-0 obj) + ) + (format #t "~T~Tmin-frame: ~f~%" (-> obj min-frame)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *pusher-sg* pusher + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +;; definition for function pusher-base-init +(defbehavior pusher-base-init pusher-base () + (set! (-> self mask) (logior (process-mask enemy platform) (-> self mask))) + (let ((gp-0 (new 'process 'collide-shape-moving self (collide-list-enum hit-by-others)))) + (set! (-> gp-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> gp-0 reaction) default-collision-reaction) + (set! (-> gp-0 no-reaction) + (the-as (function collide-shape-moving collide-shape-intersect vector vector none) nothing) + ) + (let ((s5-0 (new 'process 'collide-shape-prim-group gp-0 (the-as uint 1) 0))) + (set! (-> s5-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s5-0 collide-with) (the-as uint 16)) + (set! (-> s5-0 prim-core action) (the-as uint 3)) + (set! (-> s5-0 transform-index) 0) + (set-vector! (-> s5-0 local-sphere) -8192.0 0.0 0.0 40960.0) + (set-root-prim! gp-0 s5-0) + (let ((s4-0 (new 'process 'collide-shape-prim-mesh gp-0 (the-as uint 0) (the-as uint 0)))) + (set! (-> s4-0 prim-core collide-as) (the-as uint 2048)) + (set! (-> s4-0 collide-with) (the-as uint 16)) + (set! (-> s4-0 prim-core action) (the-as uint 3)) + (set! (-> s4-0 prim-core offense) 4) + (set! (-> s4-0 transform-index) 4) + (set-vector! (-> s4-0 local-sphere) 8192.0 0.0 0.0 28672.0) + (append-prim s5-0 s4-0) + ) + ) + (set! (-> gp-0 nav-radius) (* 0.75 (-> gp-0 root-prim local-sphere w))) + (backup-collide-with-as gp-0) + (set! (-> self root-override) gp-0) + gp-0 + ) + ) + +;; failed to figure out what this is: +(defstate pusher-idle (pusher) + :trans + (the-as (function none :behavior pusher) rider-trans) + :code + (behavior () + (while #t + (let ((f0-0 -1.0)) + (when (and *target* *camera*) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (vector-! gp-0 (target-pos 0) (camera-pos)) + (set! f0-0 (ray-capsule-intersect (-> self cyl) (camera-pos) gp-0)) + ) + ) + (cond + ((< f0-0 0.0) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (get-current-value-with-mirror (-> self sync) (-> self max-frame))) + (set! (-> gp-1 param 1) 1.0) + (joint-control-channel-group-eval! gp-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 param 0) 0.0) + (set! (-> a0-4 param 1) 1.0) + (joint-control-channel-group-eval! a0-4 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior pusher) rider-post) + ) + +;; definition for method 11 of type pusher +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! pusher ((obj pusher) (arg0 entity-actor)) + (pusher-base-init) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *pusher-sg* '()) + (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15) + (set! (-> obj max-frame) (res-lump-float arg0 'max-frame :default (the float (ja-num-frames 0)))) + (set! (-> obj cyl origin quad) (-> obj root-override trans quad)) + (vector-x-quaternion! (-> obj cyl axis) (-> obj root-override quat)) + (vector-negate! (-> obj cyl axis) (-> obj cyl axis)) + (set! (-> obj cyl length) 36864.0) + (set! (-> obj cyl radius) 20480.0) + (go pusher-idle) + (none) + ) + +;; failed to figure out what this is: +(defstate gorge-pusher-idle (gorge-pusher) + :trans + (the-as (function none :behavior gorge-pusher) rider-trans) + :code + (behavior () + (while #t + (cond + ((task-closed? (game-task rolling-race) (task-status need-introduction)) + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 param 0) (-> self min-frame)) + (set! (-> a0-1 param 1) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (else + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (-> self max-frame)) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior gorge-pusher) rider-post) + ) + +;; definition for method 11 of type gorge-pusher +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! gorge-pusher ((obj gorge-pusher) (arg0 entity-actor)) + (pusher-base-init) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *pusher-sg* '()) + (set! (-> obj max-frame) (res-lump-float arg0 'max-frame :default 1.0)) + (set! (-> obj max-frame) (* (-> obj max-frame) (the float (ja-num-frames 0)))) + (set! (-> obj min-frame) (res-lump-float arg0 'min-frame)) + (set! (-> obj min-frame) (* (-> obj min-frame) (the float (ja-num-frames 0)))) + (cond + ((task-closed? (game-task rolling-race) (task-status need-introduction)) + (let ((v1-6 (-> obj skel root-channel 0))) + (set! (-> v1-6 num-func) num-func-identity) + (set! (-> v1-6 frame-num) (-> obj min-frame)) + ) + ) + (else + (let ((v1-10 (-> obj skel root-channel 0))) + (set! (-> v1-10 num-func) num-func-identity) + (set! (-> v1-10 frame-num) (-> obj max-frame)) + ) + ) + ) + (go gorge-pusher-idle) + (none) + ) + +;; definition of type dark-plant +(deftype dark-plant (process-drawable) + ((num-alts int32 :offset-assert 176) + (alts entity-actor 4 :offset-assert 180) + ) + :heap-base #x60 + :method-count-assert 20 + :size-assert #xc4 + :flag-assert #x14006000c4 + (:states + dark-plant-death + dark-plant-gone + dark-plant-idle + dark-plant-sprout + dark-plant-startup + ) + ) + +;; definition for method 3 of type dark-plant +(defmethod inspect dark-plant ((obj dark-plant)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tnum-alts: ~D~%" (-> obj num-alts)) + (format #t "~T~Talts[4] @ #x~X~%" (-> obj alts)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *dark-plant-sg* dark-plant + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 2.25 0 6) + :longest-edge (meters 0) + ) + +;; definition for function dark-plant-check-target +;; INFO: Return type mismatch object vs symbol. +(defun dark-plant-check-target ((arg0 dark-plant)) + (the-as symbol (and *target* (and + (< (vector-vector-distance (-> arg0 root trans) (target-pos 0)) 16384.0) + (send-event *target* 'query 'powerup 4) + ) + ) + ) + ) + +;; definition for function dark-plant-randomize +(defun dark-plant-randomize ((arg0 dark-plant)) + (quaternion-axis-angle! (-> arg0 root quat) 0.0 1.0 0.0 (rand-vu-float-range 0.0 65536.0)) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (set-vector! s5-1 (rand-vu-float-range -1024.0 1024.0) 0.0 (rand-vu-float-range -1024.0 1024.0) 1.0) + (vector+! (-> arg0 root trans) (-> arg0 entity extra trans) s5-1) + ) + ) + +;; definition for function dark-plants-all-done +(defun dark-plants-all-done ((arg0 dark-plant)) + (while #t + (if (!= (-> (the-as process arg0) state) dark-plant-gone) + (return #f) + ) + (if (zero? (-> arg0 num-alts)) + (return #t) + ) + (let ((v1-9 (-> arg0 alts 0 extra process))) + (if (not v1-9) + (return #t) + ) + (if (= v1-9 (the-as process arg0)) + (return #t) + ) + (set! arg0 (the-as dark-plant v1-9)) + ) + ) + (the-as symbol #f) + ) + +;; definition for function dark-plant-has-bad-neighbor +(defun dark-plant-has-bad-neighbor ((arg0 dark-plant)) + (dotimes (v1-0 (-> arg0 num-alts)) + (let ((a1-4 (-> arg0 alts v1-0 extra process))) + (if (and a1-4 (!= (-> a1-4 state) dark-plant-gone)) + (return #t) + ) + ) + ) + #f + ) + +;; definition for function dark-plant-trans +;; INFO: Return type mismatch object vs none. +(defbehavior dark-plant-trans dark-plant () + (if (dark-plant-check-target self) + (go dark-plant-death) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate dark-plant-sprout (dark-plant) + :trans + dark-plant-trans + :code + (behavior () + (dark-plant-randomize self) + (logclear! (-> self draw status) (draw-status drwf01)) + (sound-play-by-name (static-sound-name "darkvine-grow") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-6 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) data 0 length) -1)) + ) + (set! (-> a0-6 param 1) 1.0) + (set! (-> a0-6 frame-num) 0.0) + (joint-control-channel-group! a0-6 (the-as art-joint-anim (-> self draw art-group data 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-7 (-> self skel root-channel 0))) + (set! (-> a0-7 param 0) (the float (+ (-> a0-7 frame-group data 0 length) -1))) + (set! (-> a0-7 param 1) 1.0) + (joint-control-channel-group-eval! a0-7 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (go dark-plant-idle) + (none) + ) + :post + (the-as (function none :behavior dark-plant) ja-post) + ) + +;; failed to figure out what this is: +(defstate dark-plant-gone (dark-plant) + :code + (behavior () + (logior! (-> self draw status) (draw-status drwf01)) + (let* ((f30-0 1500.0) + (v1-4 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-5 (the-as number (logior #x3f800000 v1-4))) + (gp-0 (+ (the int (* f30-0 (+ -1.0 (the-as float v1-5)))) 3000)) + ) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (while #t + (when (and + (!= (get-task-status (game-task rolling-plants)) (task-status invalid)) + (!= (get-task-status (game-task rolling-plants)) 7) + ) + (cond + ((>= (- (-> *display* base-frame-counter) (-> self state-time)) gp-0) + (go dark-plant-sprout) + ) + ((dark-plant-check-target self) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + ((not (dark-plant-has-bad-neighbor self)) + (set! (-> self state-time) (-> *display* base-frame-counter)) + ) + (else + ) + ) + ) + (suspend) + ) + ) + (none) + ) + :post + (the-as (function none :behavior dark-plant) ja-post) + ) + +;; failed to figure out what this is: +(defstate dark-plant-death (dark-plant) + :code + (behavior () + (spawn (-> self part) (-> self root trans)) + (ja-channel-push! 1 60) + (sound-play-by-name (static-sound-name "darkvine-kill") (new-sound-id) 1024 0 0 1 #t) + (let ((a0-4 (-> self skel root-channel 0))) + (set! (-> a0-4 frame-group) (the-as art-joint-anim (-> self draw art-group data 3))) + (set! (-> a0-4 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 3)) 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 3)) 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!) + ) + ) + (go dark-plant-gone) + (none) + ) + :post + (the-as (function none :behavior dark-plant) ja-post) + ) + +;; failed to figure out what this is: +(defstate dark-plant-idle (dark-plant) + :trans + dark-plant-trans + :code + (behavior () + (while #t + (when (and + (logtest? (-> self draw status) (draw-status drwf03)) + *target* + (>= 81920.0 (vector-vector-distance (-> self root trans) (-> *target* control trans))) + ) + (if (rand-vu-percent? 0.3) + (sound-play-by-name (static-sound-name "darkvine-move") (new-sound-id) 1024 0 0 1 #t) + ) + (when (task-closed? (game-task rolling-plants) (task-status need-hint)) + (level-hint-spawn + (game-text-id rolling-dark-plants-location-hint) + "sksp0113" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 2) + (set! (-> a1-4 message) 'query) + (set! (-> a1-4 param 0) (the-as uint 'powerup)) + (set! (-> a1-4 param 1) (the-as uint 4)) + (if (not (send-event-function *target* a1-4)) + (level-hint-spawn + (game-text-id rolling-dark-plants-hint) + "sksp0114" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + ) + ) + ) + ) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> gp-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (let* ((f30-1 0.9) + (f28-0 0.25) + (v1-32 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-33 (the-as number (logior #x3f800000 v1-32))) + ) + (set! (-> gp-1 param 1) (+ f30-1 (* f28-0 (+ -1.0 (the-as float v1-33))))) + ) + (set! (-> gp-1 frame-num) 0.0) + (joint-control-channel-group! gp-1 (the-as art-joint-anim (-> self draw art-group data 2)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((gp-2 (-> self skel root-channel 0))) + (set! (-> gp-2 param 0) (the float (+ (-> gp-2 frame-group data 0 length) -1))) + (let* ((f30-2 0.9) + (f28-1 0.25) + (v1-45 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-46 (the-as number (logior #x3f800000 v1-45))) + ) + (set! (-> gp-2 param 1) (+ f30-2 (* f28-1 (+ -1.0 (the-as float v1-46))))) + ) + (joint-control-channel-group-eval! gp-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior dark-plant) ja-post) + ) + +;; failed to figure out what this is: +(defstate dark-plant-startup (dark-plant) + :trans + dark-plant-trans + :code + (behavior () + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (-> self draw art-group data 2))) + (set! (-> gp-0 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 2)) data 0 length) -1)) + ) + (set! (-> gp-0 param 1) 1.0) + (let* ((v1-12 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-13 (the-as number (logior #x3f800000 v1-12))) + ) + (set! (-> gp-0 frame-num) (* (+ -1.0 (the-as float v1-13)) (the float (ja-num-frames 0)))) + ) + (joint-control-channel-group! gp-0 (the-as art-joint-anim (-> self draw art-group data 2)) 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!) + ) + ) + (go dark-plant-idle) + (none) + ) + :post + (the-as (function none :behavior dark-plant) ja-post) + ) + +;; failed to figure out what this is: +(set! (-> *part-group-id-table* 455) + (new 'static 'sparticle-launch-group + :length 2 + :duration #x2a + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-dark-plant" + :launcher + (new 'static 'inline-array sparticle-group-item 2 (sp-item 1764) (sp-item 2356)) + :bounds (new 'static 'sphere :w 61440.0) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 2356) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 15 + (sp-tex spt-texture (new 'static 'texture-id :index #x12 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 2.0)) + (sp-flt spt-scale-x (meters 12.0)) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 64.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-rnd-flt spt-b 0.0 32.0 1.0) + (sp-flt spt-a 96.0) + (sp-flt spt-fade-g -3.0) + (sp-flt spt-fade-a -2.4) + (sp-int spt-timer 42) + (sp-cpuinfo-flags bit2 bit3 bit14) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! (-> *part-id-table* 1764) (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #xf :page #x2)) + (sp-flt spt-num 128.0) + (sp-rnd-flt spt-scale-x (meters 0.2) (meters 0.4) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 0.0 128.0 1.0) + (sp-rnd-flt spt-g 192.0 64.0 1.0) + (sp-flt spt-b 0.0) + (sp-rnd-flt spt-a 32.0 96.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.0) (meters 0.02) 1.0) + (sp-flt spt-scalevel-x (meters -0.00066666666)) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a -0.42666668) + (sp-rnd-flt spt-accel-y 0.0 5.4613333 1.0) + (sp-flt spt-friction 0.95) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-flt spt-conerot-x (degrees 45.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 4.5) 1.0) + (sp-rnd-flt spt-rotate-y (degrees -15.0) (degrees 30.0) 1.0) + (sp-end) + ) + ) + ) + +;; definition for method 11 of type dark-plant +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! dark-plant ((obj dark-plant) (arg0 entity-actor)) + (set! (-> obj root) (new 'process 'trsqv)) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *dark-plant-sg* '()) + (set! (-> obj part) (create-launch-control (-> *part-group-id-table* 455) obj)) + (set! (-> obj num-alts) (min 4 (entity-actor-count (-> obj entity) 'alt-actor))) + (dotimes (s5-3 (-> obj num-alts)) + (set! (-> obj alts s5-3) (entity-actor-lookup (-> obj entity) 'alt-actor s5-3)) + ) + (if (zero? (-> obj num-alts)) + (format 0 "ERROR: ~S has no alternates~%" (-> obj name)) + ) + (dark-plant-randomize obj) + (case (get-task-status (game-task rolling-plants)) + (((task-status invalid) (task-status need-resolution)) + (go dark-plant-gone) + ) + (else + (go dark-plant-startup) + ) + ) + (none) + ) + +;; definition of type happy-plant +(deftype happy-plant (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 + happy-plant-init + happy-plant-opened + happy-plant-opening + ) + ) + +;; definition for method 3 of type happy-plant +(defmethod inspect happy-plant ((obj happy-plant)) + (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 *happy-plant-sg* happy-plant + 0 + 3 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 2.25 0 6) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate happy-plant-opened (happy-plant) + :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) 1.0) + (set! (-> a0-0 frame-num) 0.0) + (joint-control-channel-group! a0-0 (the-as art-joint-anim (-> self draw art-group data 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) 1.0) + (joint-control-channel-group-eval! a0-1 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior happy-plant) ja-post) + ) + +;; failed to figure out what this is: +(defstate happy-plant-opening (happy-plant) + :exit + (behavior () + (when *target* + (logclear! (-> *target* mask) (process-mask sleep)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (logior! (-> self mask) (process-mask actor-pause)) + ) + (none) + ) + :code + (behavior () + (close-specific-task! (game-task rolling-plants) (task-status need-reminder)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (logclear! (-> self mask) (process-mask actor-pause)) + (while (and *target* (< (vector-vector-distance (-> self root-override trans) (target-pos 0)) 24576.0)) + (suspend) + ) + (let* ((gp-1 (get-process *default-dead-pool* manipy #x4000)) + (gp-2 + (ppointer->handle + (when gp-1 + (let ((t9-5 (method-of-type manipy activate))) + (t9-5 (the-as manipy gp-1) self 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 manipy-init (-> self entity extra trans) (-> self entity) *rollingcam-sg* #f) + (-> gp-1 ppointer) + ) + ) + ) + ) + (let ((s5-1 (get-process *default-dead-pool* othercam #x4000))) + (ppointer->handle (when s5-1 + (let ((t9-8 (method-of-type othercam activate))) + (t9-8 (the-as othercam s5-1) (-> gp-2 process 0) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process s5-1 othercam-init-by-other (-> gp-2 process 0) 4 #f #t) + (-> s5-1 ppointer) + ) + ) + ) + (let* ((s5-2 (get-process *default-dead-pool* fuel-cell #x4000)) + (s5-3 (ppointer->handle (when s5-2 + (let ((t9-11 (method-of-type fuel-cell activate))) + (t9-11 (the-as fuel-cell s5-2) self 'fuel-cell (the-as pointer #x70004000)) + ) + (run-now-in-process s5-2 fuel-cell-init-as-clone (process->handle self) 55) + (-> s5-2 ppointer) + ) + ) + ) + ) + (if *target* + (logior! (-> *target* mask) (process-mask sleep)) + ) + (send-event (-> gp-2 process 0) 'anim-mode 'clone-anim) + (ja-play-spooled-anim + (new 'static 'spool-anim + :name "happy-plant-open" + :index 5 + :parts 2 + :command-list + '((0 send-event target draw #f) (10000 send-event target draw #t)) + ) + (the-as art-joint-anim #f) + (the-as art-joint-anim (-> self draw art-group data 4)) + (the-as (function process-drawable symbol) false-func) + ) + (ja-channel-set! 1) + (let ((v1-39 (-> self skel root-channel 0))) + (set! (-> v1-39 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + ) + (if (handle->process (the-as int gp-2)) + (deactivate (-> gp-2 process 0)) + ) + (let ((gp-3 (handle->process s5-3))) + (when gp-3 + (send-event gp-3 'stop-cloning) + (let ((s5-4 (new-stack-vector0))) + (vector<-cspace! s5-4 (-> self node-list data 25)) + (send-event gp-3 'trans s5-4) + ) + ) + ) + ) + ) + (restore-collide-with-as (-> self root-override)) + (go happy-plant-opened) + (none) + ) + :post + (the-as (function none :behavior happy-plant) transform-post) + ) + +;; failed to figure out what this is: +(defstate happy-plant-init (happy-plant) + :trans + (behavior () + (when (-> self alt-actor) + (spool-push *art-control* "happy-plant-open" 0 self -99.0) + (let* ((gp-0 (-> self alt-actor extra process)) + (a0-2 (if (and (nonzero? gp-0) (type-type? (-> gp-0 type) dark-plant)) + gp-0 + ) + ) + ) + (when a0-2 + (if (dark-plants-all-done (the-as dark-plant a0-2)) + (go happy-plant-opening) + ) + ) + ) + ) + (none) + ) + :code + (behavior () + (clear-collide-with-as (-> self root-override)) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! (-> a0-1 param 0) (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-1 param 1) 1.0) + (set! (-> a0-1 frame-num) 0.0) + (joint-control-channel-group! + a0-1 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior happy-plant) ja-post) + ) + +;; definition for method 11 of type happy-plant +;; INFO: Return type mismatch object vs none. +(defmethod init-from-entity! happy-plant ((obj happy-plant) (arg0 entity-actor)) + (stack-size-set! (-> obj main-thread) 512) + (let ((s4-0 (new 'process 'collide-shape obj (collide-list-enum hit-by-player)))) + (let ((s3-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s3-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s3-0 collide-with) (the-as uint 16)) + (set! (-> s3-0 prim-core action) (the-as uint 1)) + (set! (-> s3-0 prim-core offense) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 8192.0) + (set-root-prim! s4-0 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (backup-collide-with-as s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *happy-plant-sg* '()) + (set! (-> obj alt-actor) (entity-actor-lookup (-> obj entity) 'alt-actor 0)) + (case (get-task-status (game-task rolling-plants)) + (((task-status invalid)) + (let ((v1-19 (-> obj skel root-channel 0))) + (set! (-> v1-19 frame-group) (the-as art-joint-anim (-> obj draw art-group data 4))) + ) + (go happy-plant-opened) + ) + (((task-status need-resolution)) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (let ((v1-23 (-> obj skel root-channel 0))) + (set! (-> v1-23 frame-group) (the-as art-joint-anim (-> obj draw art-group data 4))) + ) + (logior! (-> obj skel status) 1) + (ja-post) + (set! (-> obj skel status) (logand -2 (-> obj skel status))) + (vector<-cspace! s5-1 (-> obj node-list data 25)) + (birth-pickup-at-point s5-1 (pickup-type fuel-cell) 55.0 #f obj (the-as fact-info #f)) + ) + (go happy-plant-opened) + ) + (else + (go happy-plant-init) + ) + ) + (none) + ) + +;; definition of type race-time +(deftype race-time (structure) + ((digit int8 5 :offset-assert 0) + ) + :pack-me + :method-count-assert 9 + :size-assert #x5 + :flag-assert #x900000005 + ) + +;; definition for method 3 of type race-time +(defmethod inspect race-time ((obj race-time)) + (format #t "[~8x] ~A~%" obj 'race-time) + (format #t "~Tdigit[5] @ #x~X~%" (-> obj digit)) + obj + ) + +;; definition for function race-time-copy! +(defun race-time-copy! ((arg0 race-time) (arg1 race-time)) + (dotimes (v1-0 5) + (set! (-> arg0 digit v1-0) (-> arg1 digit v1-0)) + ) + #f + ) + +;; definition for function seconds->race-time +(defun seconds->race-time ((arg0 race-time) (arg1 int)) + (let* ((v1-1 (max 0 (min #x2bf1d arg1))) + (f0-1 (* 0.0033333334 (the float v1-1))) + ) + (set! (-> arg0 digit 0) (the int (* 0.016666668 f0-1))) + (let ((f0-2 (- f0-1 (* 60.0 (the float (-> arg0 digit 0)))))) + (set! (-> arg0 digit 1) (the int (* 0.1 f0-2))) + (let ((f0-3 (- f0-2 (* 10.0 (the float (-> arg0 digit 1)))))) + (set! (-> arg0 digit 2) (the int f0-3)) + (let ((f0-4 (- f0-3 (the float (-> arg0 digit 2))))) + (set! (-> arg0 digit 3) (the int (* 10.0 f0-4))) + (let* ((f0-5 (- f0-4 (* 0.1 (the float (-> arg0 digit 3))))) + (v0-0 (the int (* 100.0 f0-5))) + ) + (set! (-> arg0 digit 4) v0-0) + v0-0 + ) + ) + ) + ) + ) + ) + +;; definition for function race-time->seconds +(defun race-time->seconds ((arg0 race-time)) + (let ((f0-5 (+ (the float (* 60 (-> arg0 digit 0))) + (the float (* 10 (-> arg0 digit 1))) + (the float (-> arg0 digit 2)) + (* 0.1 (the float (-> arg0 digit 3))) + (* 0.01 (the float (-> arg0 digit 4))) + ) + ) + ) + (the int (* 300.0 f0-5)) + ) + ) + +;; definition for function race-time-less-than +(defun race-time-less-than ((arg0 race-time) (arg1 race-time)) + (dotimes (v1-0 5) + (cond + ((< (-> arg0 digit v1-0) (-> arg1 digit v1-0)) + (return #t) + ) + ((< (-> arg1 digit v1-0) (-> arg0 digit v1-0)) + (return #f) + ) + ) + ) + #f + ) + +;; definition for function race-time-save +(defun race-time-save ((arg0 race-time) (arg1 int) (arg2 task-control)) + (dotimes (s3-0 5) + (save-reminder arg2 (-> arg0 digit s3-0) (+ arg1 s3-0)) + ) + #f + ) + +;; definition for function race-time-read +;; INFO: Return type mismatch int vs symbol. +(defun race-time-read ((arg0 race-time) (arg1 int) (arg2 task-control) (arg3 int)) + (dotimes (s2-0 5) + (set! (-> arg0 digit s2-0) (get-reminder arg2 (+ arg1 s2-0))) + ) + (let ((a1-3 (new 'stack 'race-time))) + (set! (-> a1-3 digit 4) 1) + (the-as symbol (if (race-time-less-than arg0 a1-3) + (seconds->race-time arg0 arg3) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defskelgroup *rolling-start-whole-sg* rolling-start + 0 + 4 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 30) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *rolling-start-broken-sg* rolling-start + 2 + 4 + ((3 (meters 999999))) + :bounds (static-spherem 0 0 0 30) + :longest-edge (meters 0) + ) + +;; definition of type rolling-start +(deftype rolling-start (process-drawable) + ((whole-look lod-set :inline :offset-assert 176) + (broken-look lod-set :inline :offset-assert 212) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf5 + :flag-assert #x14009000f5 + (:states + (rolling-start-break symbol) + rolling-start-whole + ) + ) + +;; definition for method 3 of type rolling-start +(defmethod inspect rolling-start ((obj rolling-start)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Twhole-look: #~%" (-> obj whole-look)) + (format #t "~T~Tbroken-look: #~%" (-> obj broken-look)) + obj + ) + +;; failed to figure out what this is: +(defstate rolling-start-break (rolling-start) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) (case arg2 + (('unbreak) + (go rolling-start-whole) + ) + ) + ) + :code + (behavior ((arg0 symbol)) + (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!) + ) + ) + (lods-assign! (-> self draw) (-> self broken-look)) + (let ((a0-5 (-> self skel root-channel 0))) + (set! (-> a0-5 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-5 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) 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 6)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-6 (-> self skel root-channel 0))) + (set! (-> a0-6 param 0) (the float (+ (-> a0-6 frame-group data 0 length) -1))) + (set! (-> a0-6 param 1) 1.0) + (joint-control-channel-group-eval! a0-6 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (while #t + (let ((a0-8 (-> self skel root-channel 0))) + (set! (-> a0-8 frame-group) (the-as art-joint-anim (-> self draw art-group data 7))) + (set! (-> a0-8 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 7)) data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (set! (-> a0-8 frame-num) 0.0) + (joint-control-channel-group! a0-8 (the-as art-joint-anim (-> self draw art-group data 7)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 param 0) (the float (+ (-> a0-9 frame-group data 0 length) -1))) + (set! (-> a0-9 param 1) 1.0) + (joint-control-channel-group-eval! a0-9 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (if arg0 + (deactivate self) + ) + ) + (none) + ) + :post + (the-as (function none :behavior rolling-start) ja-post) + ) + +;; failed to figure out what this is: +(defstate rolling-start-whole (rolling-start) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('break) + (sound-play-by-name (static-sound-name "cool-rolling-st") (new-sound-id) 1024 0 0 1 #t) + (go rolling-start-break #f) + ) + (('break-and-die) + (go rolling-start-break #t) + ) + ) + ) + :code + (behavior () + (lods-assign! (-> self draw) (-> self whole-look)) + (while #t + (let ((a0-1 (-> self skel root-channel 0))) + (set! (-> a0-1 frame-group) (the-as art-joint-anim (-> self draw art-group data 4))) + (set! (-> a0-1 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 4)) 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 4)) num-func-seek!) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) (the float (+ (-> a0-2 frame-group data 0 length) -1))) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group-eval! a0-2 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + ) + (none) + ) + :post + (the-as (function none :behavior rolling-start) ja-post) + ) + +;; definition for function rolling-start-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior rolling-start-init-by-other rolling-start ((arg0 vector) (arg1 float)) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg0 quad)) + (initialize-skeleton self *rolling-start-whole-sg* '()) + (dummy-9 (-> self whole-look) *rolling-start-whole-sg* (-> self draw art-group) (-> self entity)) + (dummy-9 (-> self broken-look) *rolling-start-broken-sg* (-> self draw art-group) (-> self entity)) + (let ((s5-1 (new 'stack-no-clear 'matrix))) + (matrix-rotate-y! s5-1 arg1) + (matrix->quaternion (-> self root quat) s5-1) + ) + (go rolling-start-whole) + (none) + ) + +;; definition of type gorge +(deftype gorge (process-drawable) + ((root-override collide-shape-moving :offset 112) + (coord matrix :inline :offset-assert 176) + (radius float :offset-assert 240) + (thickness float :offset-assert 244) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf8 + :flag-assert #x14009000f8 + ) + +;; definition for method 3 of type gorge +(defmethod inspect gorge ((obj gorge)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tcoord: #~%" (-> obj coord)) + (format #t "~T~Tradius: ~f~%" (-> obj radius)) + (format #t "~T~Tthickness: ~f~%" (-> obj thickness)) + obj + ) + +;; definition for function gorge-init +(defbehavior gorge-init gorge ((arg0 vector) (arg1 vector) (arg2 float) (arg3 float)) + (forward-down->inv-matrix (-> self coord) arg1 (new 'static 'vector :y -1.0)) + (matrix-transpose! (-> self coord) (-> self coord)) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (vector-matrix*! s3-0 arg0 (-> self coord)) + (vector-negate! (-> self coord vector 3) s3-0) + ) + (set! (-> self coord vector 3 w) 1.0) + (set! (-> self radius) arg2) + (let ((f0-2 arg3)) + (set! (-> self thickness) f0-2) + f0-2 + ) + ) + +;; definition of type gorge-start +(deftype gorge-start (gorge) + ((tasks task-control :offset-assert 248) + (record-time race-time :inline :offset-assert 252) + (this-time race-time :inline :offset-assert 257) + (start-banner handle :offset-assert 264) + (end-banner handle :offset-assert 272) + (timer-pos-offset int32 :offset-assert 280) + (ticker ticky :inline :offset-assert 288) + ) + :heap-base #xd0 + :method-count-assert 20 + :size-assert #x140 + :flag-assert #x1400d00140 + (:states + gorge-start-idle + gorge-start-race-aborted + gorge-start-race-finished + gorge-start-racing + gorge-start-ready + ) + ) + +;; definition for method 3 of type gorge-start +(defmethod inspect gorge-start ((obj gorge-start)) + (let ((t9-0 (method-of-type gorge inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttasks: ~A~%" (-> obj tasks)) + (format #t "~T~Trecord-time: #~%" (-> obj record-time)) + (format #t "~T~Tthis-time: #~%" (-> obj this-time)) + (format #t "~T~Tstart-banner: ~D~%" (-> obj start-banner)) + (format #t "~T~Tend-banner: ~D~%" (-> obj end-banner)) + (format #t "~T~Ttimer-pos-offset: ~D~%" (-> obj timer-pos-offset)) + (format #t "~T~Tticker: #~%" (-> obj ticker)) + obj + ) + +;; definition of type gorge-finish +(deftype gorge-finish (gorge) + ((alt-actor entity-actor :offset-assert 248) + ) + :heap-base #x90 + :method-count-assert 20 + :size-assert #xfc + :flag-assert #x14009000fc + (:states + gorge-finish-idle + ) + ) + +;; definition for method 3 of type gorge-finish +(defmethod inspect gorge-finish ((obj gorge-finish)) + (let ((t9-0 (method-of-type gorge inspect))) + (t9-0 obj) + ) + (format #t "~T~Talt-actor: ~A~%" (-> obj alt-actor)) + obj + ) + +;; definition of type gorge-abort +(deftype gorge-abort (gorge) + () + :heap-base #x90 + :method-count-assert 20 + :size-assert #xf8 + :flag-assert #x14009000f8 + (:states + gorge-abort-idle + ) + ) + +;; definition for method 3 of type gorge-abort +(defmethod inspect gorge-abort ((obj gorge-abort)) + (let ((t9-0 (method-of-type gorge inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for function gorge-behind +;; Used lq/sq +(defun gorge-behind ((arg0 gorge)) + (if (not *target*) + (return #f) + ) + (let ((gp-0 (new-stack-vector0))) + (vector-matrix*! gp-0 (target-pos 0) (-> arg0 coord)) + (and + (< (fabs (-> gp-0 x)) (-> arg0 radius)) + (< (-> gp-0 y) (-> arg0 radius)) + (< 0.0 (-> gp-0 y)) + (< (-> gp-0 z) 0.0) + ) + ) + ) + +;; definition for function gorge-in-front +;; Used lq/sq +(defun gorge-in-front ((arg0 gorge)) + (if (not *target*) + (return #f) + ) + (let ((s5-0 (new-stack-vector0))) + (vector-matrix*! s5-0 (target-pos 0) (-> arg0 coord)) + (and + (< (fabs (-> s5-0 x)) (-> arg0 radius)) + (< (-> s5-0 y) (-> arg0 radius)) + (< 0.0 (-> s5-0 y)) + (< 0.0 (-> s5-0 z)) + (< (-> s5-0 z) (-> arg0 thickness)) + ) + ) + ) + +;; definition for function gorge-trans +;; INFO: Return type mismatch symbol vs none. +(defun gorge-trans () + (none) + ) + +;; failed to figure out what this is: +(defstate gorge-abort-idle (gorge-abort) + :trans + (the-as (function none :behavior gorge-abort) gorge-trans) + :code + (behavior () + (while #t + (suspend) + (if (gorge-behind self) + (send-event (ppointer->process (-> self parent)) 'aborted) + ) + ) + (none) + ) + ) + +;; definition for function gorge-abort-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior gorge-abort-init-by-other gorge-abort ((arg0 vector) (arg1 vector) (arg2 float)) + (set! (-> self root-override) (the-as collide-shape-moving (new 'process 'trsqv))) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (gorge-init arg0 arg1 arg2 8192.0) + (go gorge-abort-idle) + (none) + ) + +;; failed to figure out what this is: +(defstate gorge-finish-idle (gorge-finish) + :trans + (the-as (function none :behavior gorge-finish) gorge-trans) + :code + (behavior () + (while #t + (suspend) + (if (gorge-in-front self) + (send-event (ppointer->process (-> self parent)) 'finished) + ) + ) + (none) + ) + ) + +;; definition for function gorge-finish-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior gorge-finish-init-by-other gorge-finish ((arg0 vector) (arg1 vector) (arg2 float)) + (set! (-> self root-override) (the-as collide-shape-moving (new 'process 'trsqv))) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (gorge-init arg0 arg1 arg2 20480.0) + (go gorge-finish-idle) + (none) + ) + +;; definition for function race-time->string +(defun race-time->string ((arg0 race-time)) + (cond + ((zero? (-> arg0 digit 0)) + (format + (clear *temp-string*) + "~D~D.~D~D" + (-> arg0 digit 1) + (-> arg0 digit 2) + (-> arg0 digit 3) + (-> arg0 digit 4) + ) + *temp-string* + ) + (else + (format + (clear *temp-string*) + "~D:~D~D.~D~D" + (-> arg0 digit 0) + (-> arg0 digit 1) + (-> arg0 digit 2) + (-> arg0 digit 3) + (-> arg0 digit 4) + ) + *temp-string* + ) + ) + ) + +;; definition for function gorge-start-draw-time +;; INFO: Return type mismatch object vs none. +(defbehavior gorge-start-draw-time gorge-start ((arg0 symbol) (arg1 symbol)) + (let ((gp-0 + (new + 'stack + 'font-context + *font-default-matrix* + 0 + 0 + 0.0 + (font-color yellow-orange) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-1 gp-0)) + (set! (-> v1-1 width) (the float 200)) + ) + (let ((v1-2 gp-0)) + (set! (-> v1-2 height) (the float 50)) + ) + (let ((v1-3 gp-0)) + (set! (-> v1-3 scale) 0.7) + ) + (set! (-> gp-0 origin x) (the float (+ (-> self timer-pos-offset) 392))) + (set! (-> gp-0 origin y) (the float (- 10 (-> self timer-pos-offset)))) + (set! (-> gp-0 flags) (font-flags shadow kerning right large)) + (print-game-text + (lookup-text! *common-text* (game-text-id rolling-race-time-string-prefix) #f) + gp-0 + #f + 128 + 22 + ) + (set! (-> gp-0 origin x) (+ 10.0 (-> gp-0 origin x))) + (set! (-> gp-0 flags) (font-flags shadow kerning large)) + (print-game-text (race-time->string (-> self this-time)) gp-0 #f 128 22) + (set! (-> gp-0 origin x) (+ -10.0 (-> gp-0 origin x))) + (set! (-> gp-0 origin y) (+ 15.0 (-> gp-0 origin y))) + (set! (-> gp-0 flags) (font-flags shadow kerning right large)) + (print-game-text + (lookup-text! *common-text* (game-text-id rolling-race-record-string-prefix) #f) + gp-0 + #f + 128 + 22 + ) + (set! (-> gp-0 origin x) (+ 10.0 (-> gp-0 origin x))) + (set! (-> gp-0 flags) (font-flags shadow kerning large)) + (print-game-text (race-time->string (-> self record-time)) gp-0 #f 128 22) + (cond + ((not arg0) + ) + ((race-time-less-than (-> self this-time) (-> self record-time)) + (when (< (mod (-> *display* real-frame-counter) 90) 60) + (let ((v1-18 gp-0)) + (set! (-> v1-18 scale) 1.0) + ) + (set! (-> gp-0 origin x) 156.0) + (set! (-> gp-0 origin y) 80.0) + (set! (-> gp-0 flags) (font-flags shadow kerning middle left large)) + (let ((a0-15 gp-0)) + (set! (-> a0-15 color) (font-color orange-red)) + ) + (print-game-text + (lookup-text! *common-text* (game-text-id rolling-race-new-record-string-prefix) #f) + gp-0 + #f + 128 + 22 + ) + ) + (when arg1 + (close-specific-task! (-> self entity extra perm task) (task-status need-reminder)) + (level-hint-spawn + (game-text-id rolling-race-beat-record) + "sksp0109" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (race-time-save (-> self this-time) 1 (-> self tasks)) + ) + ) + (else + (if arg1 + (ambient-hint-spawn "st-lose" (the-as vector #f) *entity-pool* 'stinger) + ) + (when (< (mod (-> *display* real-frame-counter) 90) 60) + (let ((v1-30 gp-0)) + (set! (-> v1-30 scale) 1.0) + ) + (set! (-> gp-0 origin x) 156.0) + (set! (-> gp-0 origin y) 80.0) + (set! (-> gp-0 flags) (font-flags shadow kerning middle left large)) + (let ((a0-23 gp-0)) + (set! (-> a0-23 color) (font-color orange-red)) + ) + (print-game-text (lookup-text! *common-text* (game-text-id rolling-race-try-again-string) #f) gp-0 #f 128 22) + ) + ) + ) + ) + (none) + ) + +;; definition for function gorge-start-launch-start-banner +;; INFO: Return type mismatch int vs handle. +;; Used lq/sq +(defbehavior gorge-start-launch-start-banner gorge-start () + (the-as + handle + (when (task-closed? (game-task rolling-race) (task-status need-introduction)) + (when (not (handle->process (-> self start-banner))) + (let ((gp-0 (new 'stack-no-clear 'vector))) + (set! (-> gp-0 quad) (-> self root-override trans quad)) + (let* ((s5-0 (get-process *default-dead-pool* rolling-start #x4000)) + (v0-1 + (ppointer->handle (when s5-0 + (let ((t9-2 (method-of-type rolling-start activate))) + (t9-2 (the-as rolling-start s5-0) self 'rolling-start (the-as pointer #x70004000)) + ) + (run-now-in-process s5-0 rolling-start-init-by-other gp-0 0.0) + (-> s5-0 ppointer) + ) + ) + ) + ) + (set! (-> self start-banner) (the-as handle v0-1)) + v0-1 + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate gorge-start-race-finished (gorge-start) + :trans + (behavior () (gorge-trans) (none)) + :code + (behavior () + (gorge-start-draw-time #t #t) + (suspend) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (set! (-> self timer-pos-offset) + (seekl (-> self timer-pos-offset) 100 (the int (* 3.0 (-> *display* time-adjust-ratio)))) + ) + (when (= (-> self timer-pos-offset) 100) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'enable) + (send-event (ppointer->process (-> *hud-parts* money)) 'enable) + ) + (gorge-start-draw-time #t #f) + (suspend) + (if (gorge-in-front self) + (go gorge-start-ready) + ) + ) + (go gorge-start-idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate gorge-start-race-aborted (gorge-start) + :trans + (behavior () (gorge-trans) (none)) + :code + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (until (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (set! (-> self timer-pos-offset) + (seekl (-> self timer-pos-offset) 100 (the int (* 5.0 (-> *display* time-adjust-ratio)))) + ) + (when (= (-> self timer-pos-offset) 100) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'enable) + (send-event (ppointer->process (-> *hud-parts* money)) 'enable) + ) + (when (< (mod (-> *display* real-frame-counter) 90) 60) + (let ((gp-0 + (new + 'stack + 'font-context + *font-default-matrix* + 156 + 80 + 0.0 + (font-color orange-red) + (font-flags shadow kerning) + ) + ) + ) + (let ((v1-20 gp-0)) + (set! (-> v1-20 width) (the float 200)) + ) + (let ((v1-21 gp-0)) + (set! (-> v1-21 height) (the float 50)) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning middle left large)) + (print-game-text + (lookup-text! *common-text* (game-text-id rolling-race-start-race-aborted) #f) + gp-0 + #f + 128 + 22 + ) + ) + ) + (suspend) + (if (gorge-in-front self) + (go gorge-start-ready) + ) + ) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'enable) + (send-event (ppointer->process (-> *hud-parts* money)) 'enable) + (go gorge-start-idle) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate gorge-start-racing (gorge-start) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('finished) + (go gorge-start-race-finished) + ) + (('aborted) + (go gorge-start-race-aborted) + ) + ) + ) + :enter + (behavior () + (send-event (handle->process (-> self start-banner)) 'break) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'disable) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'hide) + (send-event (ppointer->process (-> *hud-parts* money)) 'disable) + (send-event (ppointer->process (-> *hud-parts* money)) 'hide) + (race-time-read (-> self record-time) 1 (-> self tasks) #x34bc) + (let ((gp-0 (get-process *default-dead-pool* rolling-start #x4000))) + (set! (-> self end-banner) + (ppointer->handle (when gp-0 + (let ((t9-7 (method-of-type rolling-start activate))) + (t9-7 (the-as rolling-start gp-0) self 'rolling-start (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-0 + rolling-start-init-by-other + (new 'static 'vector :x -86016.0 :y 112640.0 :z -6309888.0) + 16384.0 + ) + (-> gp-0 ppointer) + ) + ) + ) + ) + (let ((gp-1 (get-process *default-dead-pool* gorge-finish #x4000))) + (when gp-1 + (let ((t9-10 (method-of-type gorge-finish activate))) + (t9-10 (the-as gorge-finish gp-1) self 'gorge-finish (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-1 + gorge-finish-init-by-other + (new 'static 'vector :x -86016.0 :y 114688.0 :z -6303744.0) + (new 'static 'vector :x -1.0) + 57344.0 + ) + (-> gp-1 ppointer) + ) + ) + (let ((gp-2 (get-process *default-dead-pool* gorge-abort #x4000))) + (when gp-2 + (let ((t9-13 (method-of-type gorge-abort activate))) + (t9-13 (the-as gorge-abort gp-2) self 'gorge-abort (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-2 + gorge-abort-init-by-other + (new 'static 'vector :x -696320.0 :y 122880.0 :z -6828032.0) + (new 'static 'vector :x -0.707 :y 0.707) + 163840.0 + ) + (-> gp-2 ppointer) + ) + ) + (let ((gp-3 (get-process *default-dead-pool* gorge-abort #x4000))) + (when gp-3 + (let ((t9-16 (method-of-type gorge-abort activate))) + (t9-16 (the-as gorge-abort gp-3) self 'gorge-abort (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-3 + gorge-abort-init-by-other + (new 'static 'vector :x -847872.0 :y 143360.0 :z -6828032.0) + (new 'static 'vector :x 0.707 :y 0.707) + 163840.0 + ) + (-> gp-3 ppointer) + ) + ) + (let ((gp-4 (get-process *default-dead-pool* gorge-abort #x4000))) + (when gp-4 + (let ((t9-19 (method-of-type gorge-abort activate))) + (t9-19 (the-as gorge-abort gp-4) self 'gorge-abort (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-4 + gorge-abort-init-by-other + (new 'static 'vector :x -417792.0 :y 143360.0 :z -6004736.0) + (new 'static 'vector :x -0.5 :y 0.707 :z 0.3) + 266240.0 + ) + (-> gp-4 ppointer) + ) + ) + (let ((gp-5 (get-process *default-dead-pool* gorge-abort #x4000))) + (when gp-5 + (let ((t9-22 (method-of-type gorge-abort activate))) + (t9-22 (the-as gorge-abort gp-5) self 'gorge-abort (the-as pointer #x70004000)) + ) + (run-now-in-process + gp-5 + gorge-abort-init-by-other + (new 'static 'vector :x -647168.0 :y 143360.0 :z -6025216.0) + (new 'static 'vector :x 0.5 :y 0.707 :z -0.3) + 163840.0 + ) + (-> gp-5 ppointer) + ) + ) + (sleep (-> self ticker) (the-as uint #x1b7740)) + (set-setting! *setting-control* self 'sound-flava #f 40.0 42) + (none) + ) + :exit + (behavior () + (let* ((v1-0 (-> self child)) + (gp-0 (-> v1-0 0 brother)) + ) + (while v1-0 + (if (not (or (= v1-0 (-> self start-banner process)) (= v1-0 (-> self end-banner process)))) + (deactivate (-> v1-0 0)) + ) + (set! v1-0 gp-0) + (set! gp-0 (-> v1-0 0 brother)) + ) + ) + (send-event (handle->process (-> self end-banner)) 'break-and-die) + (send-event (handle->process (-> self start-banner)) 'unbreak) + (clear-pending-settings-from-process *setting-control* self 'sound-flava) + (none) + ) + :trans + (the-as (function none :behavior gorge-start) gorge-trans) + :code + (behavior () + (set! (-> self state-time) (-> *display* game-frame-counter)) + (while #t + (seconds->race-time (-> self this-time) (- (-> *display* game-frame-counter) (-> self state-time))) + (set! (-> self timer-pos-offset) + (seekl (-> self timer-pos-offset) 0 (the int (* 5.0 (-> *display* time-adjust-ratio)))) + ) + (completed? (-> self ticker)) + (gorge-start-draw-time #f #f) + (suspend) + (if (or (not *target*) (gorge-in-front self)) + (go gorge-start-ready) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate gorge-start-ready (gorge-start) + :trans + (the-as (function none :behavior gorge-start) gorge-trans) + :code + (behavior () + (while #t + (suspend) + (set! (-> self timer-pos-offset) + (seekl (-> self timer-pos-offset) 100 (the int (* 5.0 (-> *display* time-adjust-ratio)))) + ) + (when (= (-> self timer-pos-offset) 100) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'enable) + (send-event (ppointer->process (-> *hud-parts* money)) 'enable) + ) + (gorge-start-draw-time #f #f) + (cond + ((gorge-in-front self) + ) + ((gorge-behind self) + (go gorge-start-racing) + ) + (else + (go gorge-start-idle) + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate gorge-start-idle (gorge-start) + :enter + (behavior () + (logior! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #f) + (none) + ) + :exit + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (process-entity-status! self (entity-perm-status bit-3) #t) + (none) + ) + :trans + (behavior () (gorge-start-launch-start-banner) (gorge-trans) (none)) + :code + (behavior () + (while #t + (suspend) + (set! (-> self timer-pos-offset) + (seekl (-> self timer-pos-offset) 100 (the int (* 5.0 (-> *display* time-adjust-ratio)))) + ) + (when (= (-> self timer-pos-offset) 100) + (send-event (ppointer->process (-> *hud-parts* fuel-cell)) 'enable) + (send-event (ppointer->process (-> *hud-parts* money)) 'enable) + ) + (if (gorge-in-front self) + (go gorge-start-ready) + ) + ) + (none) + ) + ) + +;; definition for method 11 of type gorge-start +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod init-from-entity! gorge-start ((obj gorge-start) (arg0 entity-actor)) + (set! (-> obj root-override) (the-as collide-shape-moving (new 'process 'trsqv))) + (process-drawable-from-entity! obj arg0) + (let ((a0-3 (new 'stack-no-clear 'vector))) + (set! (-> a0-3 quad) (-> obj root-override trans quad)) + (set! (-> a0-3 y) (+ -8192.0 (-> a0-3 y))) + (gorge-init a0-3 (new 'static 'vector :z 1.0) 102400.0 40960.0) + ) + (set! (-> obj tasks) (get-task-control (-> obj entity extra perm task))) + (set! (-> obj start-banner) (the-as handle #f)) + (set! (-> obj end-banner) (the-as handle #f)) + (set! (-> obj timer-pos-offset) 100) + (go gorge-start-idle) + (none) + ) + +;; definition of type rolling-water +(deftype rolling-water (water-anim) + () + :heap-base #x70 + :method-count-assert 30 + :size-assert #xdc + :flag-assert #x1e007000dc + ) + +;; definition for method 3 of type rolling-water +(defmethod inspect rolling-water ((obj rolling-water)) + (let ((t9-0 (method-of-type water-anim inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for symbol ripple-for-rolling-water, type object +(define + ripple-for-rolling-water + (the-as object (new 'static 'ripple-wave-set + :count 3 + :converted #f + :normal-scale 1.0 + :wave + (new 'static 'inline-array ripple-wave 4 + (new 'static 'ripple-wave :scale 40.0 :xdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 40.0 :xdiv -1 :zdiv 1 :speed 1.5) + (new 'static 'ripple-wave :scale 20.0 :xdiv 5 :zdiv 3 :speed 0.75) + (new 'static 'ripple-wave) + ) + ) + ) + ) + +;; definition for method 22 of type rolling-water +;; INFO: Return type mismatch uint vs none. +(defmethod TODO-RENAME-22 rolling-water ((obj rolling-water)) + (let ((t9-0 (method-of-type water-anim TODO-RENAME-22))) + (t9-0 obj) + ) + (let ((v1-2 (new 'process 'ripple-control))) + (set! (-> obj draw ripple) v1-2) + (set-vector! (-> obj draw color-mult) 0.01 0.45 0.5 0.75) + (set! (-> v1-2 global-scale) 3072.0) + (set! (-> v1-2 close-fade-dist) 163840.0) + (set! (-> v1-2 far-fade-dist) 245760.0) + (set! (-> v1-2 waveform) (the-as ripple-wave-set ripple-for-rolling-water)) + ) + (set! (-> obj flags) (logand -8388609 (-> obj flags))) + (none) + ) diff --git a/test/decompiler/reference/levels/title/title-obs_REF.gc b/test/decompiler/reference/levels/title/title-obs_REF.gc new file mode 100644 index 000000000..7309f4441 --- /dev/null +++ b/test/decompiler/reference/levels/title/title-obs_REF.gc @@ -0,0 +1,1080 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type logo +(deftype logo (process-drawable) + ((camera handle :offset-assert 176) + (camera-anim handle :offset-assert 184) + (volumes handle :offset-assert 192) + (black handle :offset-assert 200) + (target handle :offset-assert 208) + (sidekick handle :offset-assert 216) + (main-joint joint-mod :offset-assert 224) + (anim spool-anim :offset-assert 228) + (next-anim spool-anim :offset-assert 232) + (done? symbol :offset-assert 236) + ) + :heap-base #x80 + :method-count-assert 24 + :size-assert #xf0 + :flag-assert #x18008000f0 + (:methods + (idle () _type_ :state 20) + (startup () _type_ :state 21) + (hidden () _type_ :state 22) + (ndi () _type_ :state 23) + ) + ) + +;; definition for method 3 of type logo +(defmethod inspect logo ((obj logo)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tcamera: ~D~%" (-> obj camera)) + (format #t "~T~Tcamera-anim: ~D~%" (-> obj camera-anim)) + (format #t "~T~Tvolumes: ~D~%" (-> obj volumes)) + (format #t "~T~Tblack: ~D~%" (-> obj black)) + (format #t "~T~Ttarget: ~D~%" (-> obj target)) + (format #t "~T~Tsidekick: ~D~%" (-> obj sidekick)) + (format #t "~T~Tmain-joint: ~A~%" (-> obj main-joint)) + (format #t "~T~Tanim: ~A~%" (-> obj anim)) + (format #t "~T~Tnext-anim: ~A~%" (-> obj next-anim)) + (format #t "~T~Tdone?: ~A~%" (-> obj done?)) + obj + ) + +;; definition for method 7 of type logo +;; INFO: Return type mismatch process-drawable vs logo. +(defmethod relocate logo ((obj logo) (arg0 int)) + (if (nonzero? (-> obj main-joint)) + (&+! (-> obj main-joint) arg0) + ) + (the-as logo ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; definition of type logo-slave +(deftype logo-slave (process-drawable) + ((parent-process (pointer logo) :offset 12) + (main-joint joint-mod :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 21 + :size-assert #xb4 + :flag-assert #x15005000b4 + (:methods + (idle () _type_ :state 20) + ) + ) + +;; definition for method 3 of type logo-slave +(defmethod inspect logo-slave ((obj logo-slave)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tmain-joint: ~A~%" (-> obj main-joint)) + obj + ) + +;; definition for method 7 of type logo-slave +;; INFO: Return type mismatch process-drawable vs logo-slave. +(defmethod relocate logo-slave ((obj logo-slave) (arg0 int)) + (if (nonzero? (-> obj main-joint)) + (&+! (-> obj main-joint) arg0) + ) + (the-as logo-slave ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; failed to figure out what this is: +(defskelgroup *logo-sg* logo + 0 + 4 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 10) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *logo-japan-sg* logo + 2 + 4 + ((3 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *logo-volumes-sg* logo-volumes + 0 + 4 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *logo-volumes-japan-sg* logo-volumes + 2 + 4 + ((3 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *logo-black-sg* logo-black + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *logo-cam-sg* logo-cam + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *ndi-sg* ndi + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 10 0 30) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *ndi-volumes-sg* ndi-volumes + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defskelgroup *ndi-cam-sg* ndi-cam + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5.5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate idle (logo-slave) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-0 uint)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'blend-shape) + (cond + ((-> arg3 param 0) + (set! v0-0 (logior (-> self skel status) 264)) + (set! (-> self skel status) v0-0) + ) + (else + (set! v0-0 (logand (the-as uint -265) (-> self skel status))) + (set! (-> self skel status) v0-0) + ) + ) + v0-0 + ) + ((= v1-0 'origin-joint-index) + (set! v0-0 (-> arg3 param 0)) + (set! (-> self draw origin-joint-index) v0-0) + v0-0 + ) + ) + ) + ) + ) + :code + (behavior () + (ja-post) + (while #t + (clone-anim-once + (ppointer->handle (-> self parent-process)) + (the-as int (-> self draw origin-joint-index)) + #t + "" + ) + (if (nonzero? (-> self main-joint)) + (set-trs! + (-> self main-joint) + (-> self parent-process 0 main-joint trans) + (the-as quaternion #f) + (-> self parent-process 0 main-joint scale) + ) + ) + (suspend) + ) + (none) + ) + ) + +;; definition for function logo-slave-init-by-other +;; INFO: Return type mismatch object vs none. +(defbehavior logo-slave-init-by-other logo-slave ((arg0 entity) (arg1 skeleton-group)) + (set! (-> self entity) arg0) + (set! (-> self root) (new 'process 'trsqv)) + (initialize-skeleton self arg1 '()) + (logior! (-> self skel status) 1) + (set! (-> self draw origin-joint-index) (the-as uint 3)) + (set! (-> self draw shadow-mask) (the-as uint 255)) + (set! (-> self draw global-effect) (draw-effect title)) + (when (or + (string= (-> self draw art-group name) "logo-volumes") + (string= (-> self draw art-group name) "logo-volumes-japan") + (string= (-> self draw art-group name) "logo-black") + ) + (set! (-> self main-joint) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) self 3)) + (set! (-> self main-joint max-dist) (the-as meters #t)) + ) + (set! (-> self event-hook) (-> (method-of-object self idle) event)) + (go-virtual idle) + (none) + ) + +;; failed to figure out what this is: +(defstate startup (logo) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'update) + (clear-pending-settings-from-process *setting-control* self 'process-mask) + ) + ) + ) + ) + :exit + (behavior () + (let ((a0-0 (-> self anim))) + (when (nonzero? a0-0) + (ja-abort-spooled-anim a0-0 (the-as art-joint-anim #f) -1) + (ja-channel-set! 0) + (ja-post) + (let ((a0-3 (handle->process (-> self camera)))) + (if a0-3 + (deactivate a0-3) + ) + ) + ) + ) + (none) + ) + :trans + (behavior () + (if (not (none-reserved? *art-control*)) + (go-virtual hidden) + ) + (if (nonzero? (-> self next-anim)) + (spool-push *art-control* (-> self next-anim name) 0 self -1.0) + ) + (none) + ) + :code + (behavior () + (while (!= (file-status *art-control* (-> self next-anim name) 0) 'active) + (set-blackout-frames 15) + (suspend) + ) + (set! (-> *setting-control* current bg-a) 1.0) + (set-setting! *setting-control* self 'bg-a 'abs 0.0 0) + (let ((gp-1 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self camera-anim) + (ppointer->handle (when gp-1 + (let ((t9-4 (method-of-type logo-slave activate))) + (t9-4 (the-as logo-slave gp-1) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 logo-slave-init-by-other (-> self entity) *logo-cam-sg*) + (-> gp-1 ppointer) + ) + ) + ) + ) + (let ((gp-2 (get-process *default-dead-pool* othercam #x4000))) + (set! (-> self camera) + (ppointer->handle + (when gp-2 + (let ((t9-7 (method-of-type othercam activate))) + (t9-7 (the-as othercam gp-2) (handle->process (-> self camera-anim)) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-2 othercam-init-by-other (handle->process (-> self camera-anim)) 4 #t 'logo) + (-> gp-2 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self camera)) 'mask 0) + (case (scf-get-territory) + ((2) + (let ((gp-3 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self volumes) + (ppointer->handle + (when gp-3 + (let ((t9-12 (method-of-type logo-slave activate))) + (t9-12 (the-as logo-slave gp-3) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-3 logo-slave-init-by-other (-> self entity) *logo-volumes-japan-sg*) + (-> gp-3 ppointer) + ) + ) + ) + ) + ) + (else + (let ((gp-4 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self volumes) + (ppointer->handle (when gp-4 + (let ((t9-15 (method-of-type logo-slave activate))) + (t9-15 (the-as logo-slave gp-4) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-4 logo-slave-init-by-other (-> self entity) *logo-volumes-sg*) + (-> gp-4 ppointer) + ) + ) + ) + ) + ) + ) + (send-event (handle->process (-> self volumes)) 'origin-joint-index 3) + (let ((gp-5 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self black) + (ppointer->handle (when gp-5 + (let ((t9-19 (method-of-type logo-slave activate))) + (t9-19 (the-as logo-slave gp-5) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-5 logo-slave-init-by-other (-> self entity) *logo-black-sg*) + (-> gp-5 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self black)) 'origin-joint-index 3) + (set! (-> self anim) (-> self next-anim)) + (set! (-> self next-anim) + (new 'static 'spool-anim + :name "logo-intro-2" + :index 7 + :parts 15 + :command-list + '((260 want-force-inside village1 #t) + (261 kill "sage-23") + (261 kill "assistant-11") + (261 kill "explorer-4") + ((new 'static 'bfloat :data 261.5) kill "farmer-3") + ((new 'static 'bfloat :data 261.5) kill "oracle-1") + ((new 'static 'bfloat :data 261.5) kill "warp-gate-switch-3") + (262 kill "sharkey-12") + (262 kill "fishermans-boat-2") + (262 kill "evilplant-2") + ((new 'static 'bfloat :data 262.5) kill "revcycle-8") + ((new 'static 'bfloat :data 262.5) kill "revcycleprop-2") + ((new 'static 'bfloat :data 262.5) kill "water-vol-8") + (263 kill "water-vol-9") + (263 kill "water-vol-10") + (263 kill "reflector-middle-2") + (400 want-force-inside village1 #f) + (400 display-level village1 display) + (400 save) + (500 set! *spawn-actors* #t) + ) + ) + ) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (set! *spawn-actors* #f) + (push-setting! *setting-control* self 'process-mask 'set 0.0 16) + (copy-settings-from-target! *setting-control*) + (deactivate (handle->process (-> self black))) + (deactivate (handle->process (-> self volumes))) + (send-event (ppointer->process (-> self parent)) 'wait) + (send-event self 'update) + (ja-channel-set! 1) + (let ((a0-60 (-> self skel root-channel 0))) + (set! (-> a0-60 frame-group) (the-as art-joint-anim (-> self draw art-group data 6))) + (set! (-> a0-60 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 6)) data 0 length) -1)) + ) + (set! (-> a0-60 param 1) 1.0) + (set! (-> a0-60 frame-num) 0.0) + (joint-control-channel-group! a0-60 (the-as art-joint-anim (-> self draw art-group data 6)) num-func-seek!) + ) + (until (ja-done? 0) + (logior! (-> self skel status) 32) + (suspend) + (let ((a0-62 (-> self skel root-channel 0))) + (set! (-> a0-62 param 0) (the float (+ (-> a0-62 frame-group data 0 length) -1))) + (set! (-> a0-62 param 1) 1.0) + (joint-control-channel-group-eval! a0-62 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! (-> self anim) (-> self next-anim)) + (set! (-> self next-anim) + (new 'static 'spool-anim + :name "logo-loop" + :index 9 + :parts 17 + :command-list + '((61 kill "sage-23") + (61 kill "assistant-11") + (61 kill "explorer-4") + ((new 'static 'bfloat :data 61.5) kill "farmer-3") + ((new 'static 'bfloat :data 61.5) kill "oracle-1") + ((new 'static 'bfloat :data 61.5) kill "warp-gate-switch-3") + (62 kill "sharkey-12") + (62 kill "fishermans-boat-2") + (62 kill "evilplant-2") + ((new 'static 'bfloat :data 62.5) kill "revcycle-8") + ((new 'static 'bfloat :data 62.5) kill "revcycleprop-2") + ((new 'static 'bfloat :data 62.5) kill "water-vol-8") + (63 kill "water-vol-9") + (63 kill "water-vol-10") + (63 kill "reflector-middle-2") + ) + ) + ) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (remove-exit) + (go-virtual idle) + (none) + ) + :post + (behavior () + (if *progress-process* + (logior! (-> self draw status) (draw-status drwf05)) + (logclear! (-> self draw status) (draw-status drwf05)) + ) + (let ((a3-0 (new-stack-vector0)) + (a1-0 (new-stack-vector0)) + ) + (let ((f0-0 (if (= (-> *setting-control* current aspect-ratio) 'aspect16x9) + 0.87 + 1.0 + ) + ) + ) + (set-vector! a3-0 f0-0 f0-0 1.0 1.0) + ) + (set-vector! + a1-0 + (if (= (-> *setting-control* current aspect-ratio) 'aspect16x9) + 2048.0 + 0.0 + ) + (if (= (-> *setting-control* current aspect-ratio) 'aspect16x9) + -1228.8 + 0.0 + ) + 0.0 + 1.0 + ) + (set-trs! (-> self main-joint) a1-0 (the-as quaternion #f) a3-0) + ) + (ja-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (logo) + :virtual #t + :exit + (-> (method-of-type logo startup) exit) + :trans + (-> (method-of-type logo startup) trans) + :code + (behavior () + (while #t + (set! (-> self anim) (-> self next-anim)) + (when (not (handle->process (-> self camera))) + (let ((gp-0 (get-process *default-dead-pool* othercam #x4000))) + (set! (-> self camera) + (ppointer->handle + (when gp-0 + (let ((t9-1 (method-of-type othercam activate))) + (t9-1 (the-as othercam gp-0) (handle->process (-> self camera-anim)) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-0 othercam-init-by-other (handle->process (-> self camera-anim)) 4 #t 'logo) + (-> gp-0 ppointer) + ) + ) + ) + ) + ) + (set! *spawn-actors* #f) + (ja-channel-set! 1) + (let ((a0-11 (-> self skel root-channel 0))) + (set! (-> a0-11 frame-group) (the-as art-joint-anim (-> self draw art-group data 8))) + (set! (-> a0-11 param 0) + (the float (+ (-> (the-as art-joint-anim (-> self draw art-group data 8)) data 0 length) -1)) + ) + (set! (-> a0-11 param 1) 1.0) + (set! (-> a0-11 frame-num) 0.0) + (joint-control-channel-group! a0-11 (the-as art-joint-anim (-> self draw art-group data 8)) num-func-seek!) + ) + (until (ja-done? 0) + (logior! (-> self skel status) 32) + (suspend) + (let ((a0-13 (-> self skel root-channel 0))) + (set! (-> a0-13 param 0) (the float (+ (-> a0-13 frame-group data 0 length) -1))) + (set! (-> a0-13 param 1) 1.0) + (joint-control-channel-group-eval! a0-13 (the-as art-joint-anim #f) num-func-seek!) + ) + ) + (set! *spawn-actors* #t) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + ) + (none) + ) + :post + (-> (method-of-type logo startup) post) + ) + +;; failed to figure out what this is: +(defstate hidden (logo) + :virtual #t + :trans + (behavior () + (if (nonzero? (-> self next-anim)) + (spool-push *art-control* (-> self next-anim name) 0 self -1.0) + ) + (none) + ) + :code + (behavior () + (ja-channel-set! 0) + (ja-post) + (let ((gp-0 *master-mode*)) + (set! *master-mode* 'game) + (clear-rec *art-control*) + (set! *master-mode* gp-0) + ) + (while #t + (when (and (none-reserved? *art-control*) (not (paused?))) + (let ((gp-1 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-1) 30) + (set! *camera-look-through-other* 2) + (suspend) + ) + ) + (go-virtual idle) + ) + (set! *camera-look-through-other* 2) + (suspend) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate ndi (logo) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (if (= v1-0 'blackout) + (set-setting! *setting-control* self 'bg-a 'abs 1.0 0) + ) + ) + ) + ) + :enter + (behavior () + (set-setting! *setting-control* self 'bg-a 'abs 0.0 0) + (copy-settings-from-target! *setting-control*) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (if *time-of-day-proc* + (set! (-> *time-of-day-proc* 0 hour) 12) + ) + (set! (-> self done?) #f) + (none) + ) + :exit + (behavior () ((-> (method-of-type logo startup) exit)) (set-blackout-frames 10) (none)) + :trans + (behavior () + ((-> (method-of-type logo startup) trans)) + (if (and + *debug-segment* + (cpad-pressed? 0 start circle x) + (member (level-status *level* 'village1) '(loaded active)) + ) + (set-setting! *setting-control* self 'bg-a 'abs 1.0 0) + ) + (when (and + (= (-> *setting-control* current bg-a) 1.0) + (and + (member (level-status *level* 'village1) '(active loaded)) + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 900) + (let ((gp-2 (level-get *level* 'village1))) + (when gp-2 + (load-state-want-levels 'title 'village1) + (load-state-want-display-level 'village1 'display-self) + (load-state-want-vis 'vi1) + (set-force-inside! *load-state* 'village1 #t) + (!= (-> gp-2 all-visible?) 'loading) + ) + ) + ) + ) + (load-state-want-display-level 'village1 'special) + (if (not (-> self done?)) + (ja-abort-spooled-anim (-> self anim) (the-as art-joint-anim #f) -1) + ) + (set! (-> self done?) #t) + (deactivate self) + ) + (if *time-of-day-proc* + (set! (-> *time-of-day-proc* 0 hour) 12) + ) + (none) + ) + :code + (behavior () + (while (!= (file-status *art-control* (-> self next-anim name) 0) 'active) + (set-blackout-frames 15) + (suspend) + ) + (set! (-> *setting-control* current bg-a) 1.0) + (let ((gp-1 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self camera-anim) + (ppointer->handle (when gp-1 + (let ((t9-3 (method-of-type logo-slave activate))) + (t9-3 (the-as logo-slave gp-1) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-1 logo-slave-init-by-other (-> self entity) *ndi-cam-sg*) + (-> gp-1 ppointer) + ) + ) + ) + ) + (let ((gp-2 (get-process *default-dead-pool* othercam #x4000))) + (set! (-> self camera) + (ppointer->handle + (when gp-2 + (let ((t9-6 (method-of-type othercam activate))) + (t9-6 (the-as othercam gp-2) (handle->process (-> self camera-anim)) 'othercam (the-as pointer #x70004000)) + ) + (run-now-in-process gp-2 othercam-init-by-other (handle->process (-> self camera-anim)) 3 #t 'logo) + (-> gp-2 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self camera)) 'mask 0) + (let ((gp-3 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self volumes) + (ppointer->handle (when gp-3 + (let ((t9-10 (method-of-type logo-slave activate))) + (t9-10 (the-as logo-slave gp-3) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-3 logo-slave-init-by-other (-> self entity) *ndi-volumes-sg*) + (-> gp-3 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self volumes)) 'origin-joint-index 3) + (let ((gp-4 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self target) + (ppointer->handle (when gp-4 + (let ((t9-14 (method-of-type logo-slave activate))) + (t9-14 (the-as logo-slave gp-4) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-4 logo-slave-init-by-other #f *jchar-sg*) + (-> gp-4 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self target)) 'blend-shape #t) + (send-event (handle->process (-> self target)) 'origin-joint-index 33) + (let ((gp-5 (get-process *default-dead-pool* logo-slave #x4000))) + (set! (-> self sidekick) + (ppointer->handle (when gp-5 + (let ((t9-19 (method-of-type logo-slave activate))) + (t9-19 (the-as logo-slave gp-5) self 'logo-slave (the-as pointer #x70004000)) + ) + (run-now-in-process gp-5 logo-slave-init-by-other #f *sidekick-sg*) + (-> gp-5 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> self sidekick)) 'blend-shape #t) + (send-event (handle->process (-> self sidekick)) 'origin-joint-index 6) + (set! (-> self anim) (-> self next-anim)) + (set! (-> self next-anim) (new 'static 'spool-anim :name "logo-intro" :index 5 :parts 3 :command-list '())) + (ja-play-spooled-anim + (-> self anim) + (the-as art-joint-anim #f) + (the-as art-joint-anim #f) + (the-as (function process-drawable symbol) false-func) + ) + (set! (-> self done?) #t) + (set-setting! *setting-control* self 'bg-a 'abs 1.0 0) + (anim-loop) + (none) + ) + :post + (behavior () (ja-post) (none)) + ) + +;; definition for function logo-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior logo-init-by-other logo ((arg0 entity) (arg1 vector) (arg2 symbol)) + (stack-size-set! (-> self main-thread) 512) + (logclear! (-> self mask) (process-mask progress)) + (set! (-> self entity) arg0) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg1 quad)) + (case arg2 + (('logo) + (set! (-> *time-of-day-context* title-light-group dir1 levels x) 0.0) + (set! (-> *time-of-day-context* title-light-group ambi levels x) 0.444) + (case (scf-get-territory) + ((2) + (initialize-skeleton self *logo-japan-sg* '()) + ) + (else + (initialize-skeleton self *logo-sg* '()) + ) + ) + (set! (-> self main-joint) (new 'process 'joint-mod (joint-mod-handler-mode joint-set*) self 3)) + (set! (-> self main-joint max-dist) (the-as meters #t)) + (set! (-> self next-anim) (new 'static 'spool-anim + :name "logo-intro" + :index 5 + :parts 3 + :command-list + '((0 want-levels title village1) + (5 display-level village1 special) + (5 want-vis vi1) + (5 want-force-inside village1 #t) + (115 display-level village1 display-self) + (115 save) + (115 kill "sage-23") + (115 kill "assistant-11") + (115 kill "explorer-4") + (115 kill "farmer-3") + (115 kill "oracle-1") + (115 kill "warp-gate-switch-3") + (115 kill "sharkey-12") + (115 kill "fishermans-boat-2") + (115 kill "evilplant-2") + (115 kill "revcycle-8") + (115 kill "revcycleprop-2") + (115 kill "water-vol-8") + (115 kill "water-vol-9") + (115 kill "water-vol-10") + (115 kill "reflector-middle-2") + ) + ) + ) + (set! (-> self draw origin-joint-index) (the-as uint 3)) + ) + (('ndi) + (set! (-> *time-of-day-context* title-light-group dir1 levels x) 1.0) + (set! (-> *time-of-day-context* title-light-group ambi levels x) 1.0) + (initialize-skeleton self *ndi-sg* '()) + (set! (-> self draw origin-joint-index) (the-as uint 3)) + (set! (-> self next-anim) + (new 'static 'spool-anim :name "ndi-intro" :index 3 :parts 4 :command-list '((0 want-levels title village1) + (5 want-vis vi1) + (5 want-force-inside village1 #t) + (6 save) + (453 send-event self blackout) + ) + ) + ) + ) + ) + (logior! (-> self skel status) 1) + (set! (-> self draw global-effect) (draw-effect title)) + (set! (-> self draw shadow-mask) (the-as uint 255)) + (set! (-> self camera) (the-as handle #f)) + (set! (-> self volumes) (the-as handle #f)) + (set! (-> self black) (the-as handle #f)) + (cond + ((= arg2 'logo) + (go-virtual startup) + ) + ((= arg2 'ndi) + (go-virtual ndi) + ) + ) + (none) + ) + +;; failed to figure out what this is: +(defstate target-title (target) + :event + target-generic-event-handler + :enter + (behavior () + (set-setting! *setting-control* self 'music-volume 'abs 0.0 0) + (set-setting! *setting-control* self 'sfx-volume 'abs 0.0 0) + (set-setting! *setting-control* self 'ambient-volume 'abs 0.0 0) + (set-setting! *setting-control* self 'allow-pause #f 0.0 0) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (set-setting! *setting-control* self 'border-mode #f 0.0 0) + (copy-settings-from-target! *setting-control*) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self manipy) (the-as (pointer manipy) #f)) + (ja-channel-set! 0) + (ja-post) + (send-event *camera* 'change-state cam-fixed 0) + (none) + ) + :exit + (behavior () + (when (not (or (= (-> self next-state name) 'target-title-play) (= (-> self next-state name) 'target-title-wait))) + (if (-> self manipy) + (deactivate (-> self manipy 0)) + ) + ) + (none) + ) + :trans + (behavior () + (hide-hud-quick) + (spool-push *art-control* "ndi-intro" 0 self -1.0) + (sound-group-pause (the-as uint 2)) + (none) + ) + :code + (behavior () + (let ((gp-0 (the-as handle #f))) + (case (scf-get-territory) + ((2) + (set! gp-0 (ppointer->handle (static-screen-spawn 5 #x64900000 #x64900100 #x64900200 900 #f self))) + ) + (else + (while (!= (file-status *art-control* "ndi-intro" 0) 'active) + (set-blackout-frames 15) + (suspend) + ) + (let ((s5-1 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) s5-1) 75) + (set-blackout-frames 15) + (suspend) + ) + ) + ) + ) + (label cfg-8) + (let ((s5-2 (new 'stack-no-clear 'mc-slot-info))) + (mc-get-slot-info 0 s5-2) + (when (or (zero? (-> s5-2 known)) (handle->process (the-as int gp-0))) + (if (not (handle->process (the-as int gp-0))) + (set-blackout-frames 15) + ) + (suspend) + (goto cfg-8) + ) + (set! (-> *setting-control* default bg-a) 0.0) + (when (or + (zero? (-> s5-2 handle)) + (and (nonzero? (-> s5-2 formatted)) (zero? (-> s5-2 inited)) (< (-> s5-2 mem-actual) (-> s5-2 mem-required))) + ) + (mem-copy! (the-as pointer *auto-save-info*) (the-as pointer s5-2) 300) + (set-blackout-frames 0) + (let ((gp-1 7)) + (if (zero? (-> s5-2 handle)) + (set! gp-1 8) + ) + (set-setting! *setting-control* self 'allow-progress #t 0.0 0) + (set-blackout-frames 0) + (set! (-> *setting-control* default bg-a-force) 0.0) + (copy-settings-from-target! *setting-control*) + (set! (-> *setting-control* current bg-a) 0.0) + (set! (-> *setting-control* current bg-a-force) 0.0) + (activate-progress *dproc* (the-as progress-screen gp-1)) + ) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (copy-settings-from-target! *setting-control*) + (while *progress-process* + (suspend) + ) + (let ((gp-2 (-> *display* base-frame-counter))) + (until (>= (- (-> *display* base-frame-counter) gp-2) 3) + (suspend) + ) + ) + (goto cfg-41) + ) + ) + ) + (label cfg-41) + (let ((gp-3 (entity-by-name "logo-1"))) + (let* ((s5-3 (get-process *default-dead-pool* logo #x4000)) + (v1-53 (when s5-3 + (let ((t9-17 (method-of-type logo activate))) + (t9-17 (the-as logo s5-3) self 'logo (the-as pointer #x70004000)) + ) + (run-now-in-process s5-3 logo-init-by-other gp-3 (-> gp-3 extra trans) 'ndi) + (-> s5-3 ppointer) + ) + ) + ) + (set! (-> self manipy) (the-as (pointer manipy) v1-53)) + (let ((s5-4 (ppointer->handle v1-53))) + (while (handle->process (the-as handle s5-4)) + (suspend) + ) + ) + ) + (let ((s5-5 (get-process *default-dead-pool* logo #x4000))) + (set! (-> self manipy) + (the-as (pointer manipy) (when s5-5 + (let ((t9-20 (method-of-type logo activate))) + (t9-20 (the-as logo s5-5) self 'logo (the-as pointer #x70004000)) + ) + (run-now-in-process s5-5 logo-init-by-other gp-3 (-> gp-3 extra trans) 'logo) + (-> s5-5 ppointer) + ) + ) + ) + ) + ) + (go target-title-play) + (none) + ) + :post + target-no-move-post + ) + +;; failed to figure out what this is: +(defstate target-title-play (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'wait) + (go target-title-wait) + ) + ((= v1-0 'reset) + (deactivate (-> self manipy 0)) + ) + (else + (target-generic-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + ) + :enter + (behavior () + (set-setting! *setting-control* self 'allow-pause #f 0.0 0) + (set-setting! *setting-control* self 'allow-progress #f 0.0 0) + (none) + ) + :exit + (-> target-title exit) + :trans + (the-as (function none :behavior target) hide-hud-quick) + :code + (the-as (function none :behavior target) anim-loop) + :post + target-no-move-post + ) + +;; failed to figure out what this is: +(defstate target-title-wait (target) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'play) + (go target-title-play) + ) + ((= v1-0 'reset) + (deactivate (-> self manipy 0)) + ) + (else + (target-generic-event-handler arg0 arg1 arg2 arg3) + ) + ) + ) + ) + ) + :enter + (behavior () + (clear-pending-settings-from-process *setting-control* self 'ambient-volume) + (clear-pending-settings-from-process *setting-control* self 'sfx-volume) + (clear-pending-settings-from-process *setting-control* self 'music-volume) + (clear-pending-settings-from-process *setting-control* self 'allow-progress) + (sound-group-continue (the-as uint 2)) + (when *time-of-day-proc* + (set! (-> *time-of-day-proc* 0 time-ratio) 18000.0) + (set! *time-of-day-fast* #t) + ) + (none) + ) + :exit + (behavior () + (when *time-of-day-proc* + (set! (-> *time-of-day-proc* 0 time-ratio) 300.0) + (set! *time-of-day-fast* #f) + ) + (clear-pending-settings-from-process *setting-control* self 'allow-pause) + ((-> target-title exit)) + (none) + ) + :trans + (behavior () + (hide-hud-quick) + (if (cpad-pressed? 0 start) + (activate-progress *dproc* (progress-screen title)) + ) + (when (and (< (mod (-> *display* real-frame-counter) 300) 270) (not *progress-process*)) + (let ((gp-0 + (new 'stack 'font-context *font-default-matrix* 80 170 0.0 (font-color default) (font-flags shadow kerning)) + ) + ) + (let ((v1-12 gp-0)) + (set! (-> v1-12 width) (the float 352)) + ) + (let ((v1-13 gp-0)) + (set! (-> v1-13 height) (the float 40)) + ) + (set! (-> gp-0 flags) (font-flags shadow kerning middle left large)) + (print-game-text (lookup-text! *common-text* (game-text-id press-start) #f) gp-0 #f 128 22) + ) + ) + (none) + ) + :code + (the-as (function none :behavior target) anim-loop) + :post + target-no-move-post + ) + + + + diff --git a/test/offline/config.jsonc b/test/offline/config.jsonc index 88c52a72f..ce32f4fad 100644 --- a/test/offline/config.jsonc +++ b/test/offline/config.jsonc @@ -24,7 +24,8 @@ "DGO/OGR.DGO", "DGO/TRA.DGO", "DGO/ROL.DGO", - "DGO/DAR.DGO" + "DGO/DAR.DGO", + "DGO/TIT.DGO" ], "skip_compile_files": [