From c8a31d4d1b62976e375720ed8b60945182eb3af1 Mon Sep 17 00:00:00 2001 From: Tyler Wilding Date: Sun, 14 Nov 2021 11:14:43 -0500 Subject: [PATCH] decomp: Pass of the final remaining gameplay related files (#921) * blocked: `plant-boss` has `go` returning none issues * blocked: `ice-cube` return value getting forced to none * blocked: `ropebridge` has static data isue * blocked: `double-lurker` handle cast issues * decomp: finish `billy` * decomp: finish `lurkerworm` * blocked: `pelican` handle casts * decomp: finish `citb-bunny` * blocked: inherited states in `snow-bunny` * blocked: CFG resolution in `lavatube-energy` * decomp: finish `citadel-sages` * progress: working through `collectables` * blocked: finished as much as currently possible in `collectables` - process-tree's 10 method pparently has a 3rd arg -- im doubtful - set-to-run function - branch delay unimplemented case - weird method 21 eco-collectable * pre-merge * decomp: update source files / ref tests * decomp: finish `floating-launcher`, `shover`, `steam-cap`, `sun-iris-door`, `whirlpool` * decomp: address feedback * update ref tests and gsrc --- decompiler/config/all-types.gc | 1692 +++++-------- .../anonymous_function_types.jsonc | 28 + .../config/jak1_ntsc_black_label/hacks.jsonc | 13 +- .../jak1_ntsc_black_label/label_types.jsonc | 239 +- .../stack_structures.jsonc | 508 ++++ .../jak1_ntsc_black_label/type_casts.jsonc | 487 +++- decompiler/util/data_decompile.cpp | 5 +- goal_src/engine/collide/collide-shape-h.gc | 12 +- goal_src/engine/collide/collide-touch-h.gc | 138 +- goal_src/engine/game/collectables.gc | 13 +- goal_src/engine/game/generic-obs-h.gc | 26 +- goal_src/engine/game/generic-obs.gc | 17 +- goal_src/engine/nav/navigate-h.gc | 4 +- goal_src/engine/ui/text-h.gc | 35 +- goal_src/engine/util/sync-info-h.gc | 2 + goal_src/levels/beach/lurkerworm.gc | 980 ++++++++ goal_src/levels/beach/twister.gc | 28 +- goal_src/levels/citadel/citadel-sages.gc | 1785 ++++++++++++++ goal_src/levels/citadel/citb-bunny.gc | 153 ++ goal_src/levels/common/joint-exploder.gc | 4 +- goal_src/levels/common/nav-enemy-h.gc | 10 +- goal_src/levels/common/nav-enemy.gc | 6 +- goal_src/levels/common/snow-bunny.gc | 30 + goal_src/levels/finalboss/green-eco-lurker.gc | 2 +- goal_src/levels/maincave/baby-spider.gc | 4 +- goal_src/levels/snow/yeti.gc | 4 +- goal_src/levels/sunken/floating-launcher.gc | 217 ++ goal_src/levels/sunken/shover.gc | 186 ++ goal_src/levels/sunken/steam-cap.gc | 993 ++++++++ goal_src/levels/sunken/sun-iris-door.gc | 597 +++++ goal_src/levels/sunken/whirlpool.gc | 494 ++++ goal_src/levels/swamp/billy.gc | 2039 ++++++++++++++++ goal_src/levels/swamp/swamp-rat.gc | 8 +- goal_src/levels/village1/yakow.gc | 12 +- .../engine/collide/collide-shape-h_REF.gc | 8 +- .../engine/collide/collide-touch-h_REF.gc | 2 +- .../engine/game/collectables-part_REF.gc | 5 +- .../engine/game/generic-obs-h_REF.gc | 26 +- .../reference/engine/game/generic-obs_REF.gc | 17 +- .../reference/engine/nav/navigate-h_REF.gc | 4 +- .../reference/engine/util/sync-info-h_REF.gc | 2 + .../reference/levels/beach/lurkerworm_REF.gc | 1024 ++++++++ .../reference/levels/beach/twister_REF.gc | 12 +- .../levels/citadel/citadel-sages_REF.gc | 1916 +++++++++++++++ .../levels/citadel/citb-bunny_REF.gc | 163 ++ .../levels/common/nav-enemy-h_REF.gc | 10 +- .../reference/levels/common/nav-enemy_REF.gc | 6 +- .../levels/finalboss/robotboss-misc_REF.gc | 2 +- .../levels/sunken/floating-launcher_REF.gc | 230 ++ .../reference/levels/sunken/shover_REF.gc | 194 ++ .../reference/levels/sunken/steam-cap_REF.gc | 1039 ++++++++ .../levels/sunken/sun-iris-door_REF.gc | 625 +++++ .../reference/levels/sunken/whirlpool_REF.gc | 515 ++++ .../reference/levels/swamp/billy_REF.gc | 2113 +++++++++++++++++ .../reference/levels/swamp/swamp-rat_REF.gc | 7 +- .../reference/levels/village1/yakow_REF.gc | 12 +- .../levels/village2/village2-obs_REF.gc | 7 +- 57 files changed, 17419 insertions(+), 1291 deletions(-) create mode 100644 test/decompiler/reference/levels/beach/lurkerworm_REF.gc create mode 100644 test/decompiler/reference/levels/citadel/citadel-sages_REF.gc create mode 100644 test/decompiler/reference/levels/citadel/citb-bunny_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/floating-launcher_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/shover_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/steam-cap_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/sun-iris-door_REF.gc create mode 100644 test/decompiler/reference/levels/sunken/whirlpool_REF.gc create mode 100644 test/decompiler/reference/levels/swamp/billy_REF.gc diff --git a/decompiler/config/all-types.gc b/decompiler/config/all-types.gc index 6278afc484..6f28a0ed44 100644 --- a/decompiler/config/all-types.gc +++ b/decompiler/config/all-types.gc @@ -967,11 +967,17 @@ (beach-seagulls-avalanche #x273) + (beach-pelican-quick-get-cell #x274) + (beach-flutflutegg-hint #x275) (sidekick-hint-fish-powerup #x278) (sidekick-speech-hint-crate-darkeco1 #x281) + (beach-collectors-unblocked #x288) + + (misty-stopped-lurkers-at-silo #x28a) + (misty-stopped-balloon-lurkers #x28b) (sidekick-speech-crate-steel-break1 #x283) (sidekick-speech-hint-crate-iron #x284) @@ -982,6 +988,9 @@ (sidekick-speech-crate-steel-break2 #x28e) (sidekick-speech-hint-crate-darkeco2 #x28f) + (collectables-scout-flies-red-boxes #x295) + + (found-all-scout-flies #x296) (yakow-owed-powercell #x297) (misty-teetertotter-bonk-dax-tutorial #x2a4) @@ -1038,6 +1047,10 @@ (rolling-ring-chase-1 #x324) (rolling-ring-chase-2 #x325) + (rolling-beat-lurkers #x327) + + (swamp-finished-with-flutflut #x328) + (rolling-race-beat-record #x335) (sidekick-speech-hint-rolling-crate-darkeco #x336) @@ -1049,7 +1062,8 @@ (rolling-ring-hint-be-quick-all #x341) (sunken-blue-eco-charger-hint #x345) - + (sunken-take-it-easy-hot-pipes #x34e) + (sunken-double-lurker-hint #x347) (sunken-qbert-plat-hint #x34a) (sunken-blue-eco-charger-all-hint #x34d) @@ -1059,6 +1073,8 @@ (swamp-bats-hint #x364) ;; maybe we can ???? the bats. lol (flutflut-reminder #x368) + (sage-golfclap-i-have-low-expectations #x36a) ;; where was this said? + (village2-warp-gate-reminder #x36f) (village2-warp-gate-reminder-annoyed #x370) (village2-warp-gate-reminder-very-annoyed #x371) @@ -1131,17 +1147,27 @@ (fire-canyon-level-name #x50c) + (fire-canyon-we-made-it #x515) + + (collectables-theres-scout-flys-here-too #x516) + (ogre-end #x600) (ogre-buzzer #x601) (ogre-boss #x603) + (ogre-boss-killed #x604) (assistant-voicebox-intro-ogre-race #x605) (sidekick-speech-hint-ogre-race #x61c) + (assistant-finished-mountain-pass-race #x61d) (lavatube-end #x700) (lavatube-buzzer #x701) + (lavatube-shoot-the-spheres #x70d) + + (lavatube-spheres-door-open #x710) + (citadel-buzzer #x800) (citadel-level-name #x801) (citadel-sage-blue #x802) @@ -1157,17 +1183,20 @@ (training-precursor-orbs #x901) (training-power-cells #x902) + (training-assistant-found-scout-fly #x903) + (training-assistant-found-scout-fly-cell #x904) (training-blue-eco-vent #x907) (training-eco-green #x908) (training-eco-blue #x909) + (training-more-eco-more-time #x90a) (training-precursor-door #x90b) + (training-eco-opened-door #x90c) (training-double-jump #x90e) (sage-voicebox-hint-crate-iron #x917) - (training-warp-gate-blocked #x919) (training-warp-gate-reminder #x91a) - + (training-gimmie-task-name #x91b) (training-buzzer-task-name #x91c) (training-door-task-name #x91d) @@ -9537,6 +9566,7 @@ ) ) +(declare-type process-drawable basic) (declare-type effect-control basic) (deftype joint-control (basic) ((status uint16 :offset-assert 4) @@ -10352,14 +10382,14 @@ ) (deftype part-tracker (process) - ((root trsqv :offset-assert 112) - (part sparticle-launch-control :offset-assert 116) + ((root trsqv :offset-assert 112) + (part sparticle-launch-control :offset-assert 116) (target handle :offset-assert 120) - (callback (function part-tracker none) :offset-assert 128) - (linger-callback (function part-tracker none) :offset-assert 132) - (duration int64 :offset-assert 136) - (linger-duration int64 :offset-assert 144) - (start-time int64 :offset-assert 152) + (callback (function part-tracker vector) :offset-assert 128) + (linger-callback (function part-tracker vector) :offset-assert 132) + (duration uint64 :offset-assert 136) + (linger-duration uint64 :offset-assert 144) + (start-time uint64 :offset-assert 152) (offset vector :inline :offset-assert 160) (userdata uint64 :offset-assert 176) (user-time int64 2 :offset-assert 184) @@ -10597,6 +10627,7 @@ (damping float :offset-assert 16) (accel float :offset-assert 20) ) + :pack-me :method-count-assert 11 :size-assert #x18 :flag-assert #xb00000018 @@ -10613,6 +10644,7 @@ (elasticity float :offset-assert 32) (state int32 :offset-assert 36) ) + :pack-me :method-count-assert 13 :size-assert #x28 :flag-assert #xd00000028 @@ -11171,7 +11203,7 @@ :flag-assert #x1d0000005c (:methods (new (symbol type basic uint uint) _type_ 0) - (dummy-28 () none 28) + (dummy-28 (_type_ int) none 28) ) ) @@ -11214,16 +11246,16 @@ (dummy-29 (_type_ int) none 29) (TODO-RENAME-30 (_type_ vector) none 30) (dummy-31 () none 31) - (dummy-32 () none 32) + (dummy-32 (_type_ float uint) none 32) (dummy-33 (_type_ vector uint) none 33) (dummy-34 (_type_ uint) collide-shape-prim 34) (dummy-35 (_type_) none 35) (dummy-36 () none 36) - (dummy-37 () none 37) + (dummy-37 (_type_ vector) none 37) (dummy-38 () none 38) (dummy-39 () none 39) (dummy-40 (_type_ structure) none 40) ;; ?? - I've seen overlaps-others-params | collide-edge-hold-list - (dummy-41 () none 41) + (dummy-41 (_type_ attack-info float) none 41) (dummy-42 () none 42) (dummy-43 () none 43) (dummy-44 (_type_) none 44) @@ -11516,7 +11548,7 @@ (touched-shape (_type_ collide-shape-moving) collide-shape 10) (dummy-11 () none 11) (prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry 12) ; this one! - (dummy-13 () none 13) + (dummy-13 (_type_ control-info int int) none 13) (dummy-14 () none 14) (dummy-15 () none 15) (get-head (_type_) touching-prims-entry 16) @@ -15151,8 +15183,8 @@ (dummy-20 () none 20) (dummy-21 () none 21) (dummy-22 () none 22) - (dummy-23 () none 23) - (dummy-24 (_type_ float symbol) none 24) + (dummy-23 (_type_ vector check-vector-collision-with-nav-spheres-info) float 23) ;; TODO - unconfirmed + (dummy-24 (_type_ float clip-travel-vector-to-mesh-return-info) none 24) (dummy-25 (_type_ vector float) symbol 25) ; see - nav-enemy-test-point-near-nav-mesh? (dummy-26 (_type_) none 26) (dummy-27 () none 27) @@ -20673,7 +20705,7 @@ (bob-offset uint64 :offset-assert 288) (bob-amount float :offset-assert 296) (pickup-handle handle :offset-assert 304) ;; not sure it's a handle - (actor-pause symbol :offset-assert 312) + (actor-pause symbol :offset-assert 312) ) (:methods (TODO-RENAME-20 (_type_) _type_ 20) @@ -20693,7 +20725,7 @@ (collect-effect-time uint64 :offset-assert 328) (respawn-delay uint64 :offset-assert 336) (sound-name sound-spec :offset-assert 344) - (target uint64 :offset-assert 352) + (target handle :offset-assert 352) (suck-time uint64 :offset-assert 360) (suck-y-offset float :offset-assert 368) (speed vector :inline :offset-assert 384) @@ -20701,16 +20733,15 @@ ) (:methods (wait () _type_ :state 22) ;; state - (pickup () _type_ :state 23) ;; state + (pickup (object handle) _type_ :state 23) ;; state (die () _type_ :state 24) ;; state (jump () _type_ :state 25) - (notice-blue () _type_ :state 26) ;; state + (notice-blue (handle) _type_ :state 26) ;; state (get-pickup-sound (_type_ pickup-type) ambient-sound 27) - (dummy-28 (_type_ basic pickup-type float) none 28) + (dummy-28 (_type_ res-lump pickup-type float) object 28) (update-sound! (_type_) none 29) ;; something to do with particles too (blocked () _type_ :state 30) ) - :heap-base #x130 :method-count-assert 31 :size-assert #x194 @@ -20792,9 +20823,10 @@ ) (deftype ecovalve (process-drawable) - ((offset vector :inline :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (offset vector :inline :offset-assert 176) (offset-target vector :inline :offset-assert 192) - (block-func function :offset-assert 208)) + (block-func (function ecovalve symbol) :offset-assert 208)) :heap-base #x70 :method-count-assert 20 :size-assert #xd4 @@ -20802,16 +20834,17 @@ ) (deftype vent (process-drawable) - ((show-particles symbol :offset-assert 176) + ((root-override collide-shape :score 100 :offset 112) + (show-particles symbol :offset-assert 176) (collect-effect sparticle-launch-group :offset-assert 180) (collect-effect2 sparticle-launch-group :offset-assert 184) (collect-effect-time uint64 :offset-assert 192) (blocker entity-actor :offset-assert 200) - (block-func function :offset-assert 204) + (block-func (function vent symbol) :offset-assert 204) (pickup-handle handle :offset-assert 208)) ;; not sure handle (:methods - (dummy-20 () none 20) + (dummy-20 (_type_ res-lump pickup-type) none 20) ) :heap-base #x70 @@ -20854,32 +20887,32 @@ ;; - Functions -(define-extern vent-standard-event-handler function) -(define-extern ecovalve-init-by-other function) +(define-extern vent-standard-event-handler (function process int symbol event-message-block object :behavior vent)) +(define-extern ecovalve-init-by-other (function (function vent symbol) none :behavior ecovalve)) (define-extern birth-pickup-at-point (function vector int float symbol process-drawable fact-info (pointer process))) (define-extern fuel-cell-pick-anim (function process-drawable spool-anim)) (define-extern othercam-init-by-other (function process-taskable symbol symbol symbol none :behavior othercam)) -(define-extern fuel-cell-animate (function none)) -(define-extern add-blue-motion (function symbol symbol symbol symbol none :behavior eco-blue)) +(define-extern fuel-cell-animate (function none :behavior fuel-cell)) +(define-extern add-blue-motion (function symbol symbol symbol symbol symbol :behavior eco-blue)) (define-extern check-blue-suck (function eco-blue uint :behavior eco-blue)) -(define-extern initialize-eco-by-other (function eco vector none :behavior eco)) +(define-extern initialize-eco-by-other (function vector vector fact-info none :behavior eco)) (define-extern add-blue-shake (function vector vector vector vector)) -(define-extern money-init-by-other function) -(define-extern money-init-by-other-no-bob (function vector vector int float entity none)) -(define-extern fuel-cell-init-by-other function) -(define-extern fuel-cell-init-as-clone (function handle object none)) ;; TODO - unconfirmed - see beach-rocks -(define-extern buzzer-init-by-other function) +(define-extern money-init-by-other (function vector vector fact-info entity none :behavior money)) +(define-extern money-init-by-other-no-bob (function vector vector fact-info float entity none :behavior money)) +(define-extern fuel-cell-init-by-other (function vector vector fact-info entity none :behavior fuel-cell)) +(define-extern fuel-cell-init-as-clone (function handle int none :behavior fuel-cell)) +(define-extern buzzer-init-by-other (function vector vector fact-info entity none :behavior buzzer)) ;; - Symbols -(define-extern vent-wait-for-touch state) ;; unknown type -(define-extern vent-pickup state) ;; unknown type -(define-extern vent-blocked state) ;; unknown type +(define-extern vent-wait-for-touch (state vent)) ;; unknown type +(define-extern vent-pickup (state handle vent)) ;; unknown type +(define-extern vent-blocked (state vent)) ;; unknown type (define-extern *ecovalve-sg* skeleton-group) ;; unknown type -(define-extern ecovalve-idle state) ;; unknown type +(define-extern ecovalve-idle (state ecovalve)) ;; unknown type (define-extern *eco-pill-count* int) ;; unknown type (define-extern *buzzer-sg* skeleton-group) ;; unknown type -(define-extern fuel-cell-clone-anim state) ;; unknown type +(define-extern fuel-cell-clone-anim (state handle fuel-cell)) ;; unknown type (define-extern *fuel-cell-tune-pos* vector) ;; unknown type (define-extern *fuel-cell-sg* skeleton-group) ;; unknown type (define-extern *money-sg* skeleton-group) ;; unknown type @@ -22689,7 +22722,7 @@ (TODO-RENAME-45 (_type_ nav-enemy-info) none 45) (TODO-RENAME-46 (_type_ float) basic 46) (initialize-collision (_type_) none 47) - (TODO-RENAME-48 (_type_) none 48) ;; - Stubbed + (TODO-RENAME-48 (_type_) none 48) ;; object past to method 60 -- see citb-bunny (TODO-RENAME-49 (_type_ nav-enemy-info) float 49) (TODO-RENAME-50 (_type_ vector) symbol 50) (dummy-51 (_type_ vector) object 51) @@ -22697,11 +22730,11 @@ (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) (dummy-55 (_type_) none 55) - (dummy-56 (_type_) none 56) - (dummy-57 (_type_) none 57) - (dummy-58 (_type_) none 58) + (set-jump-height-factor! (_type_ int) float 56) + (dummy-57 (_type_) vector 57) + (dummy-58 (_type_) vector 58) (TODO-RENAME-59 (_type_) none 59) - (dummy-60 (_type_) none 60) + (dummy-60 (_type_ object) symbol 60) (dummy-61 (_type_) none 61) (dummy-62 (_type_) none 62) (dummy-63 (_type_) none 63) @@ -22712,7 +22745,7 @@ (dummy-68 (_type_) none 68) (dummy-69 (_type_) none 69) (dummy-70 (_type_) none 70) - (dummy-71 (_type_) none 71) + (dummy-71 () _type_ :state 71) (nav-enemy-touch-handler (_type_ process event-message-block) object 72) (nav-enemy-attack-handler (_type_ process event-message-block) object 73) (nav-enemy-jump-blocked () _type_ :state 74) @@ -23058,8 +23091,8 @@ (dummy-24 (_type_) none 24) (dummy-25 () none 25) (dummy-26 (_type_) none 26) - (dummy-27 (_type_) none 27) - (dummy-28 () none 28) + (dummy-27 (_type_ joint-exploder-list) none 27) + (dummy-28 (_type_) none 28) ) ) @@ -23306,85 +23339,77 @@ ;; - Types -; (deftype ropebridge-tuning (structure) -; ((num-springs int32 :offset-assert 0) -; (num-spring-points int32 :offset-assert 4) -; (col-mesh-indexes uint32 :offset-assert 8) -; (view-frustum-radius float :offset-assert 12) -; (root-prim-radius float :offset-assert 16) -; (desired-spring-len float :offset-assert 20) -; (gravity float :offset-assert 24) -; (spring-coefficient float :offset-assert 28) -; (spring-mass float :offset-assert 32) -; (friction float :offset-assert 36) -; (max-influence-dist float :offset-assert 40) -; (rider-max-gravity float :offset-assert 44) -; (max-bonk-influence-dist float :offset-assert 48) -; (rider-bonk-force float :offset-assert 52) -; (rider-bonk-min float :offset-assert 56) -; (rider-bonk-max float :offset-assert 60) -; (normal-board-len float :offset-assert 64) -; (bridge-end-to-end-len float :offset-assert 68) -; (rest-state basic :offset-assert 72) -; ) -; :method-count-assert 9 -; :size-assert #x4c -; :flag-assert #x90000004c -; ) +(deftype ropebridge-tuning (structure) + ((num-springs int32 :offset-assert 0) + (num-spring-points int32 :offset-assert 4) + (col-mesh-indexes pointer :offset-assert 8) ;; pointer to a variable sized thing + (view-frustum-radius float :offset-assert 12) + (root-prim-radius float :offset-assert 16) + (desired-spring-len float :offset-assert 20) + (gravity float :offset-assert 24) + (spring-coefficient float :offset-assert 28) + (spring-mass float :offset-assert 32) + (friction float :offset-assert 36) + (max-influence-dist float :offset-assert 40) + (rider-max-gravity float :offset-assert 44) + (max-bonk-influence-dist float :offset-assert 48) + (rider-bonk-force float :offset-assert 52) + (rider-bonk-min float :offset-assert 56) + (rider-bonk-max float :offset-assert 60) + (normal-board-len float :offset-assert 64) + (bridge-end-to-end-len float :offset-assert 68) + (rest-state symbol :offset-assert 72) + ) + :method-count-assert 9 + :size-assert #x4c + :flag-assert #x90000004c + ) -; (deftype ropebridge-spring-point (structure) -; ((local-pos vector :inline :offset-assert 0) -; (vel vector :inline :offset-assert 16) -; (extra-force vector :inline :offset-assert 32) -; ) -; :method-count-assert 9 -; :size-assert #x30 -; :flag-assert #x900000030 -; ) +(deftype ropebridge-spring-point (structure) + ((local-pos vector :inline :offset-assert 0) + (vel vector :inline :offset-assert 16) + (extra-force vector :inline :offset-assert 32) + ) + :pack-me + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) -; (deftype ropebridge (process-drawable) -; ((subtype uint64 :offset-assert 176) -; (subtype-name basic :offset-assert 184) -; (agitated-time-stamp uint64 :offset-assert 192) -; (bonk-time-stamp uint64 :offset-assert 200) -; (attack-flop-time-stamp uint64 :offset-assert 208) -; (player-attack-id uint64 :offset-assert 216) -; (sleep-dist float :offset-assert 224) -; (do-physics? basic :offset-assert 228) -; (tuning ropebridge-tuning :offset-assert 232) -; (world-matrix matrix :inline :offset-assert 240) -; (inv-world-matrix matrix :inline :offset-assert 304) -; (extra-trans vector :inline :offset-assert 368) -; (spring-point UNKNOWN 36 :offset-assert 384) -; ) -; :method-count-assert 29 -; :size-assert #x840 -; :heap-base #x7d0 -; :flag-assert #x1d07d00840 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; ) -; ) +(deftype ropebridge (process-drawable) + ((root-override basic :offset 112) + (subtype uint64 :offset-assert 176) + (subtype-name basic :offset-assert 184) + (agitated-time-stamp uint64 :offset-assert 192) + (bonk-time-stamp uint64 :offset-assert 200) + (attack-flop-time-stamp uint64 :offset-assert 208) + (player-attack-id uint64 :offset-assert 216) + (sleep-dist float :offset-assert 224) + (do-physics? basic :offset-assert 228) + (tuning ropebridge-tuning :offset-assert 232) + (world-matrix matrix :inline :offset-assert 240) + (inv-world-matrix matrix :inline :offset-assert 304) + (extra-trans vector :inline :offset-assert 368) + (spring-point ropebridge-spring-point 36 :inline :offset-assert 384) + ) + :method-count-assert 29 + :size-assert #x840 + :heap-base #x7d0 + :flag-assert #x1d07d00840 + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) none 21) + (dummy-22 (_type_) none 22) + (dummy-23 (_type_) none 23) + (dummy-24 (_type_) none 24) + (dummy-25 (_type_) none 25) + (dummy-26 (_type_) none 26) + (dummy-27 (_type_) none 27) + (dummy-28 (_type_) none 28) + ) + (:states + ropebridge-idle) + ) ;; - Functions @@ -23392,12 +23417,11 @@ ;; - Unknowns -;;(define-extern *ropebridge-tunings* object) ;; unknown type -;;(define-extern ropebridge-idle object) ;; unknown type -;;(define-extern *ropebridge-70-rest-state* object) ;; unknown type -;;(define-extern *ropebridge-52-rest-state* object) ;; unknown type -;;(define-extern *ropebridge-32-rest-state* object) ;; unknown type -;;(define-extern *ropebridge-36-rest-state* object) ;; unknown type +(define-extern *ropebridge-tunings* (inline-array ropebridge-tuning)) ;; unknown type +(define-extern *ropebridge-70-rest-state* (inline-array ropebridge-spring-point)) ;; can't find ropebridges with these ids in the game?? +(define-extern *ropebridge-52-rest-state* (inline-array ropebridge-spring-point)) +(define-extern *ropebridge-32-rest-state* (inline-array ropebridge-spring-point)) +(define-extern *ropebridge-36-rest-state* (inline-array ropebridge-spring-point)) (define-extern *ropebridge-32-sg* skeleton-group) (define-extern *snow-bridge-36-sg* skeleton-group) (define-extern *ropebridge-52-sg* skeleton-group) @@ -23710,7 +23734,7 @@ :size-assert #x28 :flag-assert #xd00000028 (:methods - (new (symbol _type_ int int float float float float) _type_ 0) + (new (symbol type int int float float float float) _type_ 0) (TODO-RENAME-9 (_type_ int int float) none 9) (set-target! (_type_ float) none 10) (TODO-RENAME-11 (_type_) none 11) @@ -23978,9 +24002,10 @@ ) (deftype pelican (process-drawable) - ((query gui-query :inline :offset-assert 176) - (fuel-cell uint64 :offset-assert 208) - (cam-tracker uint64 :offset-assert 216) + ((root-override collide-shape-moving :score 100 :offset 112) + (query gui-query :inline :offset-assert 176) + (fuel-cell handle :offset-assert 208) + (cam-tracker handle :offset-assert 216) (path-data curve-control 8 :offset-assert 224) (path-circle curve-control :offset 224) (path-dive0 curve-control :offset 228) @@ -23990,7 +24015,7 @@ (path-dive1 curve-control :offset 244) (path-to-nest1 curve-control :offset 248) (path-to-nest2 curve-control :offset 252) - (path-cache basic :offset-assert 256) + (path-cache curve-control :offset-assert 256) (time-cache uint64 :offset-assert 264) (path-pos float :offset-assert 272) (path-speed float :offset-assert 276) @@ -23999,7 +24024,7 @@ (state-vector vector :inline :offset-assert 304) (state-vector1 vector :inline :offset-assert 320) (state-float float 2 :offset-assert 336) - (state-object basic :offset-assert 344) + (state-object symbol :offset-assert 344) (neck joint-mod :offset-assert 348) ) :method-count-assert 20 @@ -24010,24 +24035,24 @@ ;; - Functions -(define-extern pelican-fly function) -(define-extern pelican-path-update function) -(define-extern pelican-post function) +(define-extern pelican-fly (function (function int) (function int) none :behavior pelican)) +(define-extern pelican-path-update (function float int float float symbol quaternion :behavior pelican)) +(define-extern pelican-post (function none :behavior pelican)) ;; - Unknowns (define-extern *pelican-sg* skeleton-group) (define-extern pelican-wait-at-end (state pelican)) -(define-extern pelican-wait-at-nest (state pelican)) +(define-extern pelican-wait-at-nest (state symbol pelican)) (define-extern pelican-circle (state pelican)) (define-extern zero-func (function int)) (define-extern *PELICAN-bank* pelican-bank) -(define-extern pelican-dive (state pelican)) +(define-extern pelican-dive (state path-control curve-control uint pelican)) (define-extern pelican-from-nest (state pelican)) -(define-extern pelican-explode (state pelican)) +(define-extern pelican-explode (state symbol pelican)) (define-extern pelican-spit (state pelican)) -(define-extern pelican-fly-to-end (state pelican)) -(define-extern pelican-to-nest (state pelican)) +(define-extern pelican-fly-to-end (state path-control int pelican)) +(define-extern pelican-to-nest (state path-control int pelican)) ;; ---------------------- @@ -24039,12 +24064,13 @@ ;; - Types (deftype lurkerworm (process-drawable) - ((twister basic :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (twister twister :offset-assert 176) (head-tilt float :offset-assert 180) (strike-count int32 :offset-assert 184) (angle float :offset-assert 188) - (vulnerable basic :offset-assert 192) - (part2 basic :offset-assert 196) + (vulnerable symbol :offset-assert 192) + (part2 sparticle-launch-control :offset-assert 196) ) :method-count-assert 22 :heap-base #x60 @@ -24052,28 +24078,29 @@ :flag-assert #x16006000c8 ;; inherited inspect of process-drawable (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) + (TODO-RENAME-20 (_type_) none 20) + (particle-effect (_type_) none 21) ) + (:states + lurkerworm-idle + lurkerworm-rest + lurkerworm-strike + lurkerworm-sink + lurkerworm-rise + lurkerworm-spot + lurkerworm-die) ) ;; - Functions -(define-extern lurkerworm-prebind-function function) -(define-extern lurkerworm-joint-callback function) -(define-extern lurkerworm-default-event-handler function) -(define-extern lurkerworm-default-post-behavior function) +(define-extern lurkerworm-prebind-function (function process int lurkerworm none :behavior lurkerworm)) +(define-extern lurkerworm-joint-callback (function lurkerworm none)) +(define-extern lurkerworm-default-event-handler (function process int symbol event-message-block object :behavior lurkerworm)) +(define-extern lurkerworm-default-post-behavior (function none :behavior lurkerworm)) ;; - Unknowns (define-extern *lurkerworm-sg* skeleton-group) -;;(define-extern lurkerworm-idle object) ;; unknown type -;;(define-extern lurkerworm-rest object) ;; unknown type -;;(define-extern lurkerworm-strike object) ;; unknown type -;;(define-extern lurkerworm-sink object) ;; unknown type -;;(define-extern lurkerworm-rise object) ;; unknown type -;;(define-extern lurkerworm-spot object) ;; unknown type -;;(define-extern lurkerworm-die object) ;; unknown type ;; ---------------------- @@ -25300,9 +25327,11 @@ ;; - Types +(declare-type citb-sage process-taskable) (deftype citb-sagecage (process-drawable) - ((root-override collide-shape-moving :score 100 :offset 112) - (bar-array vector 12 :inline :offset-assert 176) + ((parent-override (pointer citb-sage) :score 100 :offset 12) + (root-override collide-shape-moving :score 100 :offset 112) + (bar-array vector 12 :inline :score 100 :offset-assert 176) (angle-offset float :offset-assert 368) (bars-on symbol :offset-assert 372) (cloning symbol :offset-assert 376) @@ -25312,9 +25341,11 @@ :heap-base #x110 :flag-assert #x160110017c (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) none 21) ) + (:states + citb-sagecage-idle) ) (deftype citb-sage (process-taskable) @@ -25327,7 +25358,7 @@ (attack-start-anim int32 :offset-assert 444) (attack-anim int32 :offset-assert 448) (beam-joint int32 :offset-assert 452) - (cage uint64 :offset-assert 456) + (cage handle :offset-assert 456) (part-impact sparticle-launch-control :offset-assert 464) (beam-on symbol :offset-assert 468) (resolution-anim spool-anim :offset-assert 472) @@ -25380,8 +25411,8 @@ ;; - Functions -(define-extern citb-sage-draw-beam function) -(define-extern citb-sagecage-init-by-other function) +(define-extern citb-sage-draw-beam (function object :behavior citb-sage)) +(define-extern citb-sagecage-init-by-other (function citb-sage none :behavior citb-sagecage)) (define-extern citb-sagecage-update-collision (function none :behavior citb-sagecage)) (define-extern citb-sagecage-draw-bars (function none :behavior citb-sagecage)) @@ -25394,7 +25425,6 @@ (define-extern *yellowsage-sg* skeleton-group) (define-extern *bluesage-sg* skeleton-group) (define-extern *redsage-sg* skeleton-group) -(define-extern citb-sagecage-idle (state citb-sagecage)) (define-extern *citb-sagecage-sg* skeleton-group) @@ -25406,116 +25436,47 @@ ;; - Types -; (deftype snow-bunny (nav-enemy) -; ((patrol-rand-distraction int32 :offset-assert 400) -; (base-hop-dist float :offset-assert 404) -; (halfway-dist float :offset-assert 408) -; (retreat-timeout float :offset-assert 412) -; (gnd-popup float :offset-assert 416) -; (jump-height-min float :offset-assert 420) -; (jump-height-factor float :offset-assert 424) -; (jump-anim-start-frame float :offset-assert 428) -; (defense uint64 :offset-assert 432) -; (retreat-timeout-time uint64 :offset-assert 440) -; (last-nondangerous-time uint64 :offset-assert 448) -; (patrol-hop-failed? basic :offset-assert 456) -; (should-retreat? basic :offset-assert 460) -; (got-jump-event? basic :offset-assert 464) -; (using-jump-event? basic :offset-assert 468) -; (jump-anim int8 :offset-assert 472) -; (notice-land-anim int8 :offset-assert 473) -; (attack-anim int8 :offset-assert 474) -; (final-dest vector :inline :offset-assert 480) -; (jump-event-dest vector :inline :offset-assert 496) -; ) -; :method-count-assert 77 -; :size-assert #x200 -; :heap-base #x190 -; :flag-assert #x4d01900200 -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; (dummy-76 () none 76) -; ) -; ) +(deftype snow-bunny (nav-enemy) + ((patrol-rand-distraction int32 :offset-assert 400) + (base-hop-dist float :offset-assert 404) + (halfway-dist float :offset-assert 408) + (retreat-timeout float :offset-assert 412) + (gnd-popup float :offset-assert 416) + (jump-height-min float :offset-assert 420) + (jump-height-factor float :offset-assert 424) + (jump-anim-start-frame float :offset-assert 428) + (defense uint64 :offset-assert 432) + (retreat-timeout-time uint64 :offset-assert 440) + (last-nondangerous-time uint64 :offset-assert 448) + (patrol-hop-failed? basic :offset-assert 456) + (should-retreat? basic :offset-assert 460) + (got-jump-event? basic :offset-assert 464) + (using-jump-event? basic :offset-assert 468) + (jump-anim int8 :offset-assert 472) + (notice-land-anim int8 :offset-assert 473) + (attack-anim int8 :offset-assert 474) + (final-dest vector :inline :offset-assert 480) + (jump-event-dest vector :inline :offset-assert 496) + ) + :method-count-assert 77 + :size-assert #x200 + :heap-base #x190 + :flag-assert #x4d01900200 + (:methods + (dummy-76 () none 76)) + ) -; (deftype snow-bunny-retreat-work (structure) -; ((found-best basic :offset-assert 0) -; (using-jump-event? basic :offset-assert 4) -; (best-travel-dist float :offset-assert 8) -; (best-dest vector :inline :offset-assert 16) -; (away-vec vector :inline :offset-assert 32) -; ) -; :method-count-assert 9 -; :size-assert #x30 -; :flag-assert #x900000030 -; ) +(deftype snow-bunny-retreat-work (structure) + ((found-best basic :offset-assert 0) + (using-jump-event? basic :offset-assert 4) + (best-travel-dist float :offset-assert 8) + (best-dest vector :inline :offset-assert 16) + (away-vec vector :inline :offset-assert 32) + ) + :method-count-assert 9 + :size-assert #x30 + :flag-assert #x900000030 + ) ;; - Functions @@ -25525,7 +25486,7 @@ ;; - Unknowns -;;(define-extern *snow-bunny* object) ;; unknown type +(define-extern *snow-bunny* snow-bunny) ;; unknown type (define-extern *snow-bunny-nav-enemy-info* nav-enemy-info) (define-extern *snow-bunny-sg* skeleton-group) @@ -25538,84 +25499,15 @@ ;; - Types -; (deftype citb-bunny (snow-bunny) -; () -; :method-count-assert 77 -; :size-assert #x200 -; :heap-base #x190 -; :flag-assert #x4d01900200 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; (dummy-76 () none 76) -; ) -; ) +(deftype citb-bunny (snow-bunny) + () + :method-count-assert 77 + :size-assert #x200 + :heap-base #x190 + :flag-assert #x4d01900200 + (:methods + (TODO-RENAME-48 (_type_ object) none :replace 48)) ;; object past to method 60 + ) ;; - Unknowns @@ -27557,79 +27449,112 @@ ;; - Types -; (deftype plant-boss-arm (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; unrecognized get op: (set! v1 process-drawable) parent was UNKNOWN -; ) +(declare-type plant-boss process-drawable) +(deftype plant-boss-arm (process-drawable) + ((parent-override (pointer plant-boss) :score 100 :offset 12) + (root-override collide-shape :score 100 :offset 112) + (side int32 :offset-assert 176) + ) + :method-count-assert 20 + :heap-base #x50 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + (plant-boss-back-arms-hit symbol) + (plant-boss-back-arms-die symbol) + (plant-boss-arm-die symbol) + plant-boss-arm-hit + plant-boss-back-arms-idle + plant-boss-arm-idle + ) + ) -; (deftype plant-boss-leaf (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; unrecognized get op: (set! v1 process-drawable) parent was UNKNOWN -; ) +(deftype plant-boss-leaf (process-drawable) + ((root-override collide-shape-moving :score 100 :offset 112) + (side int32 :offset-assert 176) + (state-object symbol :offset-assert 180) + (state-time-frame int64 :offset-assert 184) + ) + :method-count-assert 20 + :heap-base #x50 + :size-assert #xc0 + :flag-assert #x14005000c0 + (:states + plant-boss-leaf-idle + plant-boss-leaf-die + (plant-boss-leaf-open-idle symbol) + plant-boss-leaf-close + plant-boss-leaf-bounce + plant-boss-leaf-open + ) + ) -; (deftype plant-boss (UNKNOWN) -; () -; :method-count-assert 0 -; :size-assert #x0 -; :flag-assert #x0 -; ;; unrecognized get op: (set! v1 process-drawable) parent was UNKNOWN -; ) +(deftype plant-boss (process-drawable) + ((root-override collide-shape :score 100 :offset 112) + (neck joint-mod :offset-assert 176) + (body joint-mod :offset-assert 180) + (leaf (pointer plant-boss-leaf) 2 :offset-assert 184) + (energy float :offset-assert 192) + (health float :offset-assert 196) + (ate symbol :offset-assert 200) + (cycle-count int32 :offset-assert 204) + (snap-count int32 :offset-assert 208) + (attack-prim collide-shape-prim-sphere 3 :offset-assert 212) + (death-prim collide-shape-prim-mesh 3 :offset-assert 224) + (cam-tracker handle :offset-assert 240) + (want-aphid-count int32 :offset-assert 248) + (aphid-count int32 :offset-assert 252) + (aphid-spawn-time int64 :offset-assert 256) + (interp float :offset-assert 264) + (try int32 :offset-assert 268) + (camera handle :offset-assert 272) + (money handle :offset-assert 280) + (try-inc symbol :offset-assert 288) + ) + :method-count-assert 20 + :heap-base #xc0 + :size-assert #x124 + :flag-assert #x1400c00124 + (:states + plant-boss-root-die + (plant-boss-vine-die symbol) + plant-boss-vine-hit + plant-boss-eat + plant-boss-vine-idle + plant-boss-root-idle + (plant-boss-dead symbol) + plant-boss-far-idle + plant-boss-dead-idle + (plant-boss-dead-bounce float) + plant-boss-spawn + (plant-boss-attack int) + plant-boss-idle + (plant-boss-reset int) + (plant-boss-hit symbol) + plant-boss-vulnerable + plant-boss-intro) + ) ;; - Functions -(define-extern plant-boss-arm-init function) -(define-extern plant-boss-back-arms-init function) -(define-extern plant-boss-vine-init function) -(define-extern plant-boss-root-init function) -(define-extern plant-boss-leaf-init function) -(define-extern plant-boss-generic-event-handler function) -(define-extern plant-boss-post function) -(define-extern plant-boss-default-event-handler function) +(define-extern plant-boss-arm-init (function vector float int none :behavior plant-boss-arm)) +(define-extern plant-boss-back-arms-init (function vector float int none :behavior plant-boss-arm)) +(define-extern plant-boss-vine-init (function vector vector float int none :behavior plant-boss-arm)) +(define-extern plant-boss-root-init (function vector vector vector int none :behavior plant-boss-arm)) +(define-extern plant-boss-leaf-init (function vector float int none :behavior plant-boss-leaf)) +(define-extern plant-boss-generic-event-handler (function process int symbol event-message-block object :behavior plant-boss)) +(define-extern plant-boss-post (function none :behavior plant-boss)) +(define-extern plant-boss-default-event-handler (function process int symbol event-message-block object :behavior plant-boss)) ;; - Unknowns (define-extern *plant-boss-sg* skeleton-group) -;;(define-extern *plant-boss-shadow-control* object) ;; unknown type -;;(define-extern plant-boss-dead object) ;; unknown type -;;(define-extern plant-boss-far-idle object) ;; unknown type -;;(define-extern plant-boss-dead-idle object) ;; unknown type -;;(define-extern plant-boss-dead-bounce object) ;; unknown type -;;(define-extern plant-boss-spawn object) ;; unknown type -;;(define-extern plant-boss-attack object) ;; unknown type -;;(define-extern plant-boss-idle object) ;; unknown type -;;(define-extern plant-boss-reset object) ;; unknown type -;;(define-extern plant-boss-hit object) ;; unknown type -;;(define-extern plant-boss-vulnerable object) ;; unknown type -;;(define-extern plant-boss-intro object) ;; unknown type +(define-extern *plant-boss-shadow-control* shadow-control) ;; unknown type (define-extern *plant-boss-leaf-sg* skeleton-group) -;;(define-extern plant-boss-leaf-idle object) ;; unknown type -;;(define-extern plant-boss-leaf-die object) ;; unknown type -;;(define-extern plant-boss-leaf-open-idle object) ;; unknown type -;;(define-extern plant-boss-leaf-close object) ;; unknown type -;;(define-extern plant-boss-leaf-bounce object) ;; unknown type -;;(define-extern plant-boss-leaf-open object) ;; unknown type (define-extern *plant-boss-root-sg* skeleton-group) -;;(define-extern plant-boss-root-idle object) ;; unknown type (define-extern *plant-boss-vine-sg* skeleton-group) -;;(define-extern plant-boss-vine-idle object) ;; unknown type (define-extern *plant-boss-back-arms-sg* skeleton-group) -;;(define-extern plant-boss-back-arms-idle object) ;; unknown type (define-extern *plant-boss-arm-sg* skeleton-group) -;;(define-extern plant-boss-arm-idle object) ;; unknown type -;;(define-extern plant-boss-root-die object) ;; unknown type -;;(define-extern plant-boss-vine-die object) ;; unknown type -;;(define-extern plant-boss-vine-hit object) ;; unknown type -;;(define-extern plant-boss-back-arms-hit object) ;; unknown type -;;(define-extern plant-boss-back-arms-die object) ;; unknown type -;;(define-extern plant-boss-arm-die object) ;; unknown type -;;(define-extern plant-boss-arm-hit object) ;; unknown type -;;(define-extern plant-boss-eat object) ;; unknown type ;; ---------------------- @@ -31523,7 +31448,8 @@ (define-extern swamp-rat-update-wiggle-target (function vector vector :behavior swamp-rat)) (define-extern swamp-rat-update-wiggle-params (function float :behavior swamp-rat)) (define-extern swamp-rat-default-event-handler (function process int symbol event-message-block object :behavior swamp-rat)) -(define-extern swamp-rat-init-by-other (function swamp-rat-nest vector vector pickup-type symbol none :behavior swamp-rat)) +(declare-type billy process-drawable) +(define-extern swamp-rat-init-by-other (function billy vector vector pickup-type symbol none :behavior swamp-rat)) ;; - Unknowns @@ -31748,200 +31674,73 @@ ;; - Types -; (deftype billy (process-taskable) -; ((farthy uint64 :offset-assert 384) -; (path-data UNKNOWN 3 :offset-assert 392) -; (path-snacks basic :offset-assert 392) -; (path-starts basic :offset-assert 396) -; (path-waypts basic :offset-assert 400) -; (passed-last-stage basic :offset-assert 404) -; (spawn-rats basic :offset-assert 408) -; (current-wave int32 :offset-assert 412) -; (wave-start-time uint64 :offset-assert 416) -; (num-snacks int32 :offset-assert 424) -; (num-rats int32 :offset-assert 428) -; (max-rats int32 :offset-assert 432) -; (rat-speed float :offset-assert 436) -; (offending-rat uint64 :offset-assert 440) -; ) -; :method-count-assert 53 -; :size-assert #x1c0 -; :heap-base #x150 -; :flag-assert #x35015001c0 -; ;; inherited inspect of process-taskable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; ) -; ) +(declare-type billy-snack process-drawable) +(deftype billy (process-taskable) + ((child-override (pointer billy-snack) :score 100 :offset 20) + (farthy handle :offset-assert 384) + (path-data path-control 3 :offset-assert 392) + (path-snacks path-control :offset 392) + (path-starts path-control :offset 396) + (path-waypts path-control :offset 400) + (passed-last-stage symbol :offset-assert 404) + (spawn-rats symbol :offset-assert 408) + (current-wave int32 :offset-assert 412) + (wave-start-time uint64 :offset-assert 416) + (num-snacks int32 :offset-assert 424) + (num-rats int32 :offset-assert 428) + (max-rats int32 :offset-assert 432) + (rat-speed float :offset-assert 436) + (offending-rat handle :offset-assert 440) + ) + :method-count-assert 53 + :size-assert #x1c0 + :heap-base #x150 + :flag-assert #x35015001c0 + (:states + billy-playing + billy-done) + ) -; (deftype billy-snack (process-drawable) -; ((num-rats int32 :offset-assert 176) -; ) -; :method-count-assert 20 -; :size-assert #xb4 -; :heap-base #x50 -; :flag-assert #x14005000b4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) - -; (deftype billy-rat (swamp-rat) -; ((dest-type uint64 :offset-assert 496) -; (snack uint64 :offset-assert 504) -; (destination vector :inline :offset-assert 512) -; (billy uint32 :offset-assert 528) -; ) -; :method-count-assert 76 -; :size-assert #x214 -; :heap-base #x1b0 -; :flag-assert #x4c01b00214 -; ;; inherited inspect of swamp-rat -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype billy-snack (process-drawable) + ((num-rats int32 :offset-assert 176) + ) + :method-count-assert 20 + :size-assert #xb4 + :heap-base #x50 + :flag-assert #x14005000b4 + (:states + billy-snack-idle + billy-snack-eat) + ) +(deftype billy-rat (swamp-rat) + ((dest-type uint64 :offset-assert 496) + (snack handle :offset-assert 504) + (destination vector :inline :offset-assert 512) + (billy (pointer billy) :offset-assert 528) + ) + :method-count-assert 76 + :size-assert #x214 + :heap-base #x1b0 + :flag-assert #x4c01b00214 + (:states + billy-rat-salivate + billy-rat-eat) + ) ;; - Functions -(define-extern billy-kill-all-but-farthy function) -(define-extern billy-game-update function) -(define-extern billy-snack-init-by-other function) -(define-extern rat-about-to-eat? function) -(define-extern billy-game-update-wave function) -(define-extern billy-rat-init-by-other function) +(define-extern billy-kill-all-but-farthy (function symbol :behavior billy)) +(define-extern billy-game-update (function none :behavior billy)) +(define-extern billy-snack-init-by-other (function vector none :behavior billy-snack)) +(define-extern rat-about-to-eat? (function billy-rat billy symbol)) +(define-extern billy-game-update-wave (function none :behavior billy)) +(define-extern billy-rat-init-by-other (function billy vector vector none :behavior billy-rat)) ;; - Unknowns (define-extern *billy-sg* skeleton-group) (define-extern *billy-sidekick-sg* skeleton-group) -;;(define-extern billy-playing object) ;; unknown type -;;(define-extern billy-done object) ;; unknown type (define-extern *farthy-snack-sg* skeleton-group) -;;(define-extern billy-rat-salivate object) ;; unknown type -;;(define-extern billy-rat-eat object) ;; unknown type -;;(define-extern billy-snack-idle object) ;; unknown type -;;(define-extern billy-snack-eat object) ;; unknown type ;; ---------------------- @@ -32909,34 +32708,22 @@ ;; - Types -; (deftype shover (process-drawable) -; ((shove-up float :offset-assert 176) -; ) -; :method-count-assert 20 -; :size-assert #xb4 -; :heap-base #x50 -; :flag-assert #x14005000b4 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype shover (process-drawable) + ((root-override collide-shape :score 100 :offset 112) + (shove-up float :offset-assert 176) + ) + :method-count-assert 20 + :size-assert #xb4 + :heap-base #x50 + :flag-assert #x14005000b4 + (:states + (shover-idle)) + ) ;; - Unknowns (define-extern *shover-sg* skeleton-group) -;;(define-extern *shover* object) ;; unknown type -;;(define-extern shover-idle object) ;; unknown type +(define-extern *shover* shover) ;; unknown type ;; ---------------------- @@ -33013,11 +32800,12 @@ ;; - Types (deftype sun-iris-door (process-drawable) - ((timeout float :offset-assert 176) - (proximity? basic :offset-assert 180) - (directional-proximity? basic :offset-assert 184) - (move-to? basic :offset-assert 188) - (locked-by-task? basic :offset-assert 192) + ((root-override collide-shape :score 100 :offset 112) + (timeout float :offset-assert 176) + (proximity? symbol :offset-assert 180) + (directional-proximity? symbol :offset-assert 184) + (move-to? symbol :offset-assert 188) + (locked-by-task? symbol :offset-assert 192) (close-dist float :offset-assert 196) (open-dist float :offset-assert 200) (move-to-pos vector :inline :offset-assert 208) @@ -33028,24 +32816,24 @@ :size-assert #x100 :heap-base #x90 :flag-assert #x1600900100 - ;; inherited inspect of process-drawable (:methods - (dummy-20 () none 20) - (dummy-21 () none 21) + (should-close? (_type_) symbol 20) + (should-open? (_type_) symbol 21) ) + (:states + (sun-iris-door-open) + (sun-iris-door-closed) + (sun-iris-door-opening) + (sun-iris-door-closing)) ) ;; - Functions -(define-extern sun-iris-door-init-by-other function) +(define-extern sun-iris-door-init-by-other (function vector quaternion symbol none :behavior sun-iris-door)) ;; - Unknowns (define-extern *sun-iris-door-sg* skeleton-group) -(define-extern sun-iris-door-open state) -(define-extern sun-iris-door-closed state) -(define-extern sun-iris-door-opening state) -(define-extern sun-iris-door-closing state) ;; ---------------------- @@ -33268,54 +33056,44 @@ ;; - Types -; (deftype steam-cap-control-pt (structure) -; ((trans vector :inline :offset-assert 0) -; (transv vector :inline :offset-assert 16) -; ) -; :method-count-assert 9 -; :size-assert #x20 -; :flag-assert #x900000020 -; ) +(deftype steam-cap-control-pt (structure) + ((trans vector :inline :offset-assert 0) + (transv vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) -; (deftype steam-cap (process-drawable) -; ((do-burst? basic :offset-assert 176) -; (do-falling-sound? basic :offset-assert 180) -; (do-landing-sound? basic :offset-assert 184) -; (begin-travel-up float :offset-assert 188) -; (begin-travel-down float :offset-assert 192) -; (sync sync-info :inline :offset-assert 196) -; (part2 basic :offset-assert 204) -; (part3 basic :offset-assert 208) -; (down vector :inline :offset-assert 224) -; (up vector :inline :offset-assert 240) -; (control-pt UNKNOWN 3 :offset-assert 256) -; ) -; :method-count-assert 22 -; :size-assert #x160 -; :heap-base #xf0 -; :flag-assert #x1600f00160 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; ) -; ) +(deftype steam-cap (process-drawable) + ((root-override collide-shape-moving :score 100 :offset 112) + (do-burst? symbol :offset-assert 176) + (do-falling-sound? symbol :offset-assert 180) + (do-landing-sound? symbol :offset-assert 184) + (begin-travel-up float :offset-assert 188) + (begin-travel-down float :offset-assert 192) + (sync sync-info :inline :offset-assert 196) + (part2 sparticle-launch-control :offset-assert 204) + (part3 sparticle-launch-control :offset-assert 208) + (down vector :inline :offset-assert 224) + (up vector :inline :offset-assert 240) + (control-pt steam-cap-control-pt 3 :inline :offset-assert 256) + ) + :method-count-assert 22 + :size-assert #x160 + :heap-base #xf0 + :flag-assert #x1600f00160 + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) quaternion 21) + ) + (:states + (steam-cap-idle)) + ) ;; - Unknowns (define-extern *steam-cap-sg* skeleton-group) -;;(define-extern steam-cap-idle object) ;; unknown type ;; ---------------------- @@ -33438,43 +33216,23 @@ ;; - Types -; (deftype floating-launcher (baseplat) -; ((trigger-height float :offset-assert 228) -; (launcher uint32 :offset-assert 232) -; ) -; :method-count-assert 27 -; :size-assert #xec -; :heap-base #x80 -; :flag-assert #x1b008000ec -; ;; inherited inspect of baseplat -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; ) -; ) +(deftype floating-launcher (baseplat) + ((trigger-height float :offset-assert 228) + (launcher (pointer launcher) :offset-assert 232) + ) + :method-count-assert 27 + :size-assert #xec + :heap-base #x80 + :flag-assert #x1b008000ec + (:states + (floating-launcher-idle) + (floating-launcher-ready) + (floating-launcher-lowering)) + ) ;; - Unknowns (define-extern *floating-launcher-sg* skeleton-group) -;;(define-extern floating-launcher-idle object) ;; unknown type -;;(define-extern floating-launcher-ready object) ;; unknown type -;;(define-extern floating-launcher-lowering object) ;; unknown type ;; ---------------------- @@ -33518,37 +33276,27 @@ ;; - Types -; (deftype whirlpool (process-drawable) -; ((spin-ry float :offset-assert 176) -; (spin-speed-idle float :offset-assert 180) -; (spin-speed-delta float :offset-assert 184) -; (sync sync-info-paused :inline :offset-assert 188) -; ) -; :method-count-assert 21 -; :size-assert #xcc -; :heap-base #x60 -; :flag-assert #x15006000cc -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; ) -; ) +(deftype whirlpool (process-drawable) + ((root-override collide-shape :score 100 :offset 112) + (spin-ry float :offset-assert 176) + (spin-speed-idle float :offset-assert 180) + (spin-speed-delta float :offset-assert 184) + (sync sync-info-paused :inline :offset-assert 188) + ) + :method-count-assert 21 + :size-assert #xcc + :heap-base #x60 + :flag-assert #x15006000cc + (:methods + (dummy-20 (_type_ float) uint 20) + ) + (:states + (whirlpool-idle)) + ) ;; - Unknowns (define-extern *whirlpool-sg* skeleton-group) -;;(define-extern whirlpool-idle object) ;; unknown type ;; ---------------------- @@ -33711,191 +33459,53 @@ ;; - Types -; (deftype double-lurker-top (nav-enemy) -; ((fall-dest vector :inline :offset-assert 400) -; ) -; :method-count-assert 76 -; :size-assert #x1a0 -; :heap-base #x130 -; :flag-assert #x4c013001a0 -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(declare-type double-lurker nav-enemy) +(deftype double-lurker-top (nav-enemy) + ((parent-process (pointer double-lurker) :score 100 :offset 12) + (fall-dest vector :inline :offset-assert 400) + ) + :method-count-assert 76 + :size-assert #x1a0 + :heap-base #x130 + :flag-assert #x4c013001a0 + ) -; (deftype double-lurker (nav-enemy) -; ((knocked-back-speed float :offset-assert 400) -; (buddy-on-shoulders? basic :offset-assert 404) -; (dead? basic :offset-assert 408) -; (buddy-dead? basic :offset-assert 412) -; (buddy-handle uint64 :offset-assert 416) -; ) -; :method-count-assert 76 -; :size-assert #x1a8 -; :heap-base #x140 -; :flag-assert #x4c014001a8 -; ;; inherited inspect of nav-enemy -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; (dummy-20 () none 20) -; (dummy-21 () none 21) -; (dummy-22 () none 22) -; (dummy-23 () none 23) -; (dummy-24 () none 24) -; (dummy-25 () none 25) -; (dummy-26 () none 26) -; (dummy-27 () none 27) -; (dummy-28 () none 28) -; (dummy-29 () none 29) -; (dummy-30 () none 30) -; (dummy-31 () none 31) -; (dummy-32 () none 32) -; (dummy-33 () none 33) -; (dummy-34 () none 34) -; (dummy-35 () none 35) -; (dummy-36 () none 36) -; (dummy-37 () none 37) -; (dummy-38 () none 38) -; (dummy-39 () none 39) -; (dummy-40 () none 40) -; (dummy-41 () none 41) -; (dummy-42 () none 42) -; (dummy-43 () none 43) -; (dummy-44 () none 44) -; (dummy-45 () none 45) -; (dummy-46 () none 46) -; (dummy-47 () none 47) -; (dummy-48 () none 48) -; (dummy-49 () none 49) -; (dummy-50 () none 50) -; (dummy-51 () none 51) -; (dummy-52 () none 52) -; (dummy-53 () none 53) -; (dummy-54 () none 54) -; (dummy-55 () none 55) -; (dummy-56 () none 56) -; (dummy-57 () none 57) -; (dummy-58 () none 58) -; (dummy-59 () none 59) -; (dummy-60 () none 60) -; (dummy-61 () none 61) -; (dummy-62 () none 62) -; (dummy-63 () none 63) -; (dummy-64 () none 64) -; (dummy-65 () none 65) -; (dummy-66 () none 66) -; (dummy-67 () none 67) -; (dummy-68 () none 68) -; (dummy-69 () none 69) -; (dummy-70 () none 70) -; (dummy-71 () none 71) -; (dummy-72 () none 72) -; (dummy-73 () none 73) -; (dummy-74 () none 74) -; (dummy-75 () none 75) -; ) -; ) +(deftype double-lurker (nav-enemy) + ((knocked-back-speed float :offset-assert 400) + (buddy-on-shoulders? symbol :offset-assert 404) + (dead? symbol :offset-assert 408) + (buddy-dead? symbol :offset-assert 412) + (buddy-handle handle :offset-assert 416) ; double-lurker-top + ) + :method-count-assert 76 + :size-assert #x1a8 + :heap-base #x140 + :flag-assert #x4c014001a8 + ) ;; - Functions -(define-extern double-lurker-top-init-by-other function) -(define-extern double-lurker-default-event-handler function) +(define-extern double-lurker-top-init-by-other (function entity double-lurker symbol vector none :behavior double-lurker-top)) +(define-extern double-lurker-default-event-handler (function process int symbol event-message-block object :behavior double-lurker)) ;; - Unknowns -;;(define-extern double-lurker-waiting-to-die object) ;; unknown type +(define-extern double-lurker-waiting-to-die (state double-lurker)) ;; unknown type (define-extern *double-lurker-sg* skeleton-group) (define-extern *double-lurker-when-both-nav-enemy-info* nav-enemy-info) (define-extern *double-lurker-nav-enemy-info* nav-enemy-info) -;;(define-extern double-lurker-resume object) ;; unknown type -;;(define-extern double-lurker-break-apart object) ;; unknown type -;;(define-extern double-lurker-buddy-was-hit object) ;; unknown type -;;(define-extern double-lurker-both-knocked-back object) ;; unknown type -;;(define-extern double-lurker-top-on-shoulders object) ;; unknown type -;;(define-extern double-lurker-top-resume object) ;; unknown type +(define-extern double-lurker-resume (state double-lurker)) ;; unknown type +(define-extern double-lurker-break-apart (state double-lurker)) ;; unknown type +(define-extern double-lurker-buddy-was-hit (state object object double-lurker-top double-lurker)) ;; unknown type +(define-extern double-lurker-both-knocked-back (state double-lurker)) ;; unknown type +(define-extern double-lurker-top-on-shoulders (state double-lurker-top)) ;; unknown type +(define-extern double-lurker-top-resume (state double-lurker-top)) ;; unknown type (define-extern *double-lurker-top-sg* skeleton-group) (define-extern *double-lurker-top-nav-enemy-info* nav-enemy-info) -;;(define-extern double-lurker-top-knocked-down object) ;; unknown type -;;(define-extern double-lurker-top-on-shoulders-die object) ;; unknown type -;;(define-extern double-lurker-show-anims object) ;; unknown type -;;(define-extern double-lurker-knocked-back object) ;; unknown type +(define-extern double-lurker-top-knocked-down (state object vector vector double-lurker-top)) ;; unknown type +(define-extern double-lurker-top-on-shoulders-die (state double-lurker-top)) ;; unknown type +(define-extern double-lurker-show-anims (state double-lurker)) ;; unknown type +(define-extern double-lurker-knocked-back (state double-lurker)) ;; unknown type ;; ---------------------- @@ -35428,6 +35038,10 @@ :size-assert #x1f0 :heap-base #x180 :flag-assert #x4c018001f0 + (:methods + (dummy-51 (_type_ vector vector) object :replace 51) + (dummy-53 (_type_ vector vector) symbol :replace 53) + ) ) ;; - Functions @@ -36226,180 +35840,122 @@ ;; - Types (deftype energydoor (process-drawable) - ((alt-actor entity-actor :offset-assert 176) + ((root-override collide-shape-moving :score 100 :offset 112) + (alt-actor entity-actor :offset-assert 176) ) :method-count-assert 20 :size-assert #xb4 :heap-base #x50 :flag-assert #x14005000b4 + (:states + energydoor-closed-till-near + energydoor-opened + energydoor-closed-till-task + energydoor-opening + energydoor-closing) ) -; (deftype energybase (process-drawable) -; () -; :method-count-assert 20 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x14004000b0 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype energybase (process-drawable) + () + :method-count-assert 20 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x14004000b0 + (:states + energybase-stopped + energybase-idle + energybase-stopping) + ) -; (deftype energyhub (process-drawable) -; ((alts UNKNOWN 3 :offset-assert 176) -; (arm UNKNOWN 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) -; ) -; :method-count-assert 20 -; :size-assert #x1b0 -; :heap-base #x140 -; :flag-assert #x14014001b0 -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype energyhub (process-drawable) + ((self-override energyhub :score 100 :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) + ) + :method-count-assert 20 + :size-assert #x1b0 + :heap-base #x140 + :flag-assert #x14014001b0 + (:states + energyhub-stopped + energyhub-idle + energyhub-stop) + ) -; (deftype energyarm (process-drawable) -; ((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 uint64 :offset-assert 416) -; (x-correction float :offset-assert 424) -; ) -; :method-count-assert 20 -; :size-assert #x1ac -; :heap-base #x140 -; :flag-assert #x14014001ac -; ;; inherited inspect of process-drawable -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype energyarm (process-drawable) + ((parent-overide (pointer energyhub) :score 100 :offset 12) + (self-override energyarm :score 100 :offset 28) + (root-override collide-shape-moving :score 100 :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) + ) + :method-count-assert 20 + :size-assert #x1ac + :heap-base #x140 + :flag-assert #x14014001ac + (:states + energyarm-stop + energyarm-idle + energyarm-no-ball + energyarm-fall) + ) -; (deftype energyball (process-drawable) -; () -; :method-count-assert 20 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x14004000b0 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype energyball (process-drawable) + ((parent-overide (pointer energyarm) :score 100 :offset 12) + (root-override collide-shape-moving :score 100 :offset 112)) + :method-count-assert 20 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x14004000b0 + (:states + energyball-idle) + ) -; (deftype energylava (process-drawable) -; () -; :method-count-assert 20 -; :size-assert #xb0 -; :heap-base #x40 -; :flag-assert #x14004000b0 -; ;; not enough basic ops -; (:methods -; (dummy-9 () none 9) -; (dummy-10 () none 10) -; (dummy-11 () none 11) -; (dummy-12 () none 12) -; (dummy-13 () none 13) -; (dummy-14 () none 14) -; (dummy-15 () none 15) -; (dummy-16 () none 16) -; (dummy-17 () none 17) -; (dummy-18 () none 18) -; (dummy-19 () none 19) -; ) -; ) +(deftype energylava (process-drawable) + ((root-override basic :offset 112)) + :method-count-assert 20 + :size-assert #xb0 + :heap-base #x40 + :flag-assert #x14004000b0 + (:states + energylava-idle) + ) ;; - Functions -(define-extern energyarm-init-by-other function) -(define-extern energyhub-set-lava-height function) -(define-extern energyhub-trans function) -(define-extern energyarm-init function) -(define-extern energyball-init-by-other function) -(define-extern energyarm-trans function) -(define-extern energyball-init function) -(define-extern energydoor-player-dist function) -(define-extern energydoor-open-handler function) -(define-extern energydoor-closed-handler function) +(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-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)) +(define-extern energyarm-trans (function vector :behavior energyarm)) +(define-extern energyball-init (function energyball collide-shape-moving)) +(define-extern energydoor-player-dist (function float :behavior energydoor)) +(define-extern energydoor-open-handler (function process int symbol event-message-block object :behavior energydoor)) +(define-extern energydoor-closed-handler (function process int symbol event-message-block object :behavior energydoor)) ;; - Unknowns (define-extern *energylava-sg* skeleton-group) -;;(define-extern energylava-idle object) ;; unknown type (define-extern *energyhub-sg* skeleton-group) -;;(define-extern energyhub-stopped object) ;; unknown type -;;(define-extern energyhub-idle object) ;; unknown type -;;(define-extern energyhub-stop object) ;; unknown type (define-extern *energyarm-sg* skeleton-group) -;;(define-extern energyarm-stop object) ;; unknown type -;;(define-extern energyarm-idle object) ;; unknown type -;;(define-extern energyarm-no-ball object) ;; unknown type (define-extern *energyball-sg* skeleton-group) -;;(define-extern energyball-idle object) ;; unknown type (define-extern *energybase-sg* skeleton-group) -;;(define-extern energybase-stopped object) ;; unknown type -;;(define-extern energybase-idle object) ;; unknown type -;;(define-extern energybase-stopping object) ;; unknown type (define-extern *energydoor-sg* skeleton-group) -;;(define-extern energydoor-closed-till-near object) ;; unknown type -;;(define-extern energydoor-opened object) ;; unknown type -;;(define-extern energydoor-closed-till-task object) ;; unknown type -;;(define-extern energydoor-opening object) ;; unknown type -;;(define-extern energydoor-closing object) ;; unknown type -;;(define-extern energyarm-fall object) ;; unknown type ;; ---------------------- diff --git a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc index 48fb168ef1..23d2fff9f5 100644 --- a/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/anonymous_function_types.jsonc @@ -821,5 +821,33 @@ [5, "(function symbol :behavior touch-tracker)"] ], + "plant-boss": [ + [22, "(function none :behavior camera-tracker)"] + ], + + "pelican": [ + [1, "(function sparticle-launch-control :behavior pelican)"], + [5, "(function pelican int)"], + [6, "(function int)"], + [10, "(function int)"], + [15, "(function process int symbol event-message-block object :behavior pelican)"], + [16, "(function none :behavior pelican)"], + [24, "(function pelican int)"], + [25, "(function int)"], + [34, "(function int)"], + [35, "(function int)"], + [37, "(function none :behavior camera-tracker)"], + [39, "(function sparticle-launch-control :behavior pelican)"] + ], + + "collectables": [ + [11, "(function symbol)"], + [12, "(function symbol)"], + [13, "(function symbol)"], + [14, "(function vent symbol)"], + [38, "(function int none :behavior collectable)"], + [69, "(function part-tracker vector)"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc index 5cade8b4f1..92410b7190 100644 --- a/decompiler/config/jak1_ntsc_black_label/hacks.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/hacks.jsonc @@ -323,9 +323,6 @@ // navigate BUG "(method 32 nav-control)", - // collectables BUG - "add-blue-motion", - // ocean "draw-large-polygon-ocean", // CFG @@ -337,10 +334,9 @@ "(method 27 ropebridge)", // all unchecked and in level DGO code - "(anon-function 21 plant-boss)", - "(anon-function 10 ice-cube)", - "(anon-function 15 ice-cube)", - "(anon-function 45 lavatube-energy)", + "(anon-function 21 plant-boss)", // CFG + // "(anon-function 10 ice-cube)", + // "(anon-function 15 ice-cube)", "mistycannon-find-best-solution", "target-flut-falling-anim-trans", "kermit-check-to-hit-player?", @@ -401,7 +397,8 @@ "command-get-quoted-param", "command-get-trans", "command-get-camera", - "(method 14 camera-tracker)" + "(method 14 camera-tracker)", + "(enter billy-playing)" ], // If format is used with the wrong number of arguments, diff --git a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc index ec34c4ce35..6c805b792b 100644 --- a/decompiler/config/jak1_ntsc_black_label/label_types.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/label_types.jsonc @@ -854,6 +854,7 @@ "target-snowball": [["L23", "vector"]], "ice-cube": [ + ["L210", "vector"], ["L212", "attack-info"], ["L213", "attack-info"], ["L215", "attack-info"] @@ -911,26 +912,6 @@ ["L318", "vector"] ], - "collectables": [ - ["L611", "(pointer float)", true, 1], - ["L649", "(pointer float)", true, 1], - ["L656", "(pointer float)", true, 1], - ["L657", "(pointer float)", true, 1], - ["L658", "(pointer float)", true, 1], - ["L660", "(pointer float)", true, 1], - ["L663", "(pointer float)", true, 1], - ["L585", "vector"], - ["L725", "float", true], - ["L726", "float", true], - ["L727", "float", true], - ["L728", "uint64", true], - ["L729", "uint64", true], - ["L730", "uint64", true], - ["L731", "uint64", true], - ["L732", "uint64", true], - ["L733", "uint64", true] - ], - "sky": [["L13", "vu-function"]], "sky-tng": [ @@ -1137,6 +1118,7 @@ ["L272", "vector"], ["L527", "quaternion"] ], + "sage-finalboss-L1": [ ["L528", "vector"], ["L272", "vector"], @@ -1248,6 +1230,223 @@ ["L457", "attack-info"] ], + "collectables": [ + ["L533", "vector"], + ["L606", "float", true], + ["L607", "float", true], + ["L608", "float", true], + ["L609", "float", true], + ["L610", "float", true], + ["L611", "float", true], + ["L612", "float", true], + ["L613", "float", true], + ["L614", "float", true], + ["L615", "float", true], + ["L616", "float", true], + ["L617", "float", true], + ["L618", "float", true], + ["L619", "float", true], + ["L620", "float", true], + ["L621", "float", true], + ["L622", "float", true], + ["L623", "float", true], + ["L624", "float", true], + ["L625", "float", true], + ["L626", "float", true], + ["L627", "float", true], + ["L628", "float", true], + ["L629", "float", true], + ["L630", "float", true], + ["L631", "float", true], + ["L632", "float", true], + ["L633", "float", true], + ["L634", "float", true], + ["L635", "float", true], + ["L636", "float", true], + ["L637", "float", true], + ["L638", "float", true], + ["L639", "float", true], + ["L640", "float", true], + ["L641", "float", true], + ["L642", "float", true], + ["L643", "float", true], + ["L644", "float", true], + ["L645", "float", true], + ["L646", "float", true], + ["L647", "float", true], + ["L648", "float", true], + ["L649", "float", true], + ["L650", "float", true], + ["L651", "float", true], + ["L652", "float", true], + ["L653", "float", true], + ["L654", "float", true], + ["L655", "float", true], + ["L656", "float", true], + ["L657", "float", true], + ["L658", "float", true], + ["L659", "float", true], + ["L660", "float", true], + ["L661", "float", true], + ["L662", "float", true], + ["L663", "(pointer float)", 1], + ["L664", "uint64", true], + ["L666", "uint64", true], + ["L665", "uint64", true], + ["L667", "uint64", true], + ["L668", "uint64", true], + ["L669", "uint64", true], + ["L670", "uint64", true], + ["L671", "uint64", true], + ["L672", "uint64", true], + ["L585", "vector"], + ["L725", "float", true], + ["L726", "float", true], + ["L727", "float", true], + ["L728", "uint64", true], + ["L729", "uint64", true], + ["L730", "uint64", true], + ["L731", "uint64", true], + ["L732", "uint64", true], + ["L733", "uint64", true] + ], + + "plant-boss": [ + ["L343", "vector"], + ["L344", "vector"], + ["L345", "vector"], + ["L346", "vector"], + ["L347", "vector"], + ["L348", "vector"], + ["L349", "vector"], + ["L350", "vector"], + ["L351", "vector"], + ["L352", "vector"], + ["L353", "vector"], + ["L354", "vector"], + ["L355", "vector"], + ["L356", "vector"], + ["L357", "vector"], + ["L358", "vector"], + ["L359", "vector"], + ["L360", "vector"], + ["L361", "vector"], + ["L362", "vector"], + ["L363", "vector"], + ["L364", "vector"], + ["L375", "attack-info"], + ["L377", "attack-info"], + ["L399", "attack-info"], + ["L403", "attack-info"], + ["L412", "float", true], + ["L413", "float", true], + ["L414", "float", true], + ["L415", "(pointer float)", 1], + ["L416", "float", true], + ["L417", "float", true], + ["L418", "float", true], + ["L419", "float", true], + ["L420", "float", true], + ["L421", "float", true], + ["L422", "float", true], + ["L423", "float", true], + ["L424", "float", true], + ["L425", "float", true], + ["L426", "float", true], + ["L427", "float", true], + ["L428", "float", true], + ["L429", "float", true], + ["L430", "float", true], + ["L431", "(pointer float)", 1], + ["L432", "float", true], + ["L433", "float", true], + ["L434", "float", true], + ["L435", "float", true], + ["L436", "float", true], + ["L437", "float", true], + ["L438", "(pointer float)", 1], + ["L439", "float", true], + ["L440", "float", true], + ["L441", "float", true], + ["L442", "(pointer float)", 1], + ["L443", "float", true], + ["L444", "float", true], + ["L445", "float", true], + ["L446", "float", true], + ["L447", "float", true], + ["L448", "float", true], + ["L449", "float", true], + ["L450", "float", true], + ["L451", "float", true], + ["L452", "float", true], + ["L453", "float", true], + ["L454", "float", true], + ["L455", "float", true], + ["L456", "float", true], + ["L457", "float", true], + ["L458", "float", true], + ["L459", "float", true], + ["L460", "float", true], + ["L461", "float", true], + ["L462", "float", true], + ["L463", "float", true], + ["L464", "float", true], + ["L465", "float", true], + ["L466", "(pointer float)", 1], + ["L467", "float", true], + ["L468", "float", true], + ["L469", "(pointer float)", 1], + ["L470", "uint64", true], + ["L498", "float", true], + ["L499", "uint64", true], + ["L500", "uint64", true], + ["L501", "uint64", true] + ], + + "ropebridge": [ + ["L97", "(inline-array ropebridge-tuning)", 6], + ["L104", "(inline-array ropebridge-spring-point)", 8], + ["L105", "(inline-array ropebridge-spring-point)", 7], + ["L106", "(inline-array ropebridge-spring-point)", 11], + ["L107", "(inline-array ropebridge-spring-point)", 15] + ], + + "double-lurker": [ + ["L109", "vector"], + ["L122", "attack-info"], + ["L123", "attack-info"], + ["L128", "attack-info"] + ], + + "billy": [ + ["L234", "vector"] + ], + + "lurkerworm": [ + ["L56", "attack-info"] + ], + + "pelican": [ + ["L199", "vector"], + ["L225", "vector"] + ], + + "citadel-sages": [ + ["L179", "vector"], + ["L623", "vector"], + ["L651", "vector"], + ["L701", "vector"] + ], + + "shover": [ + ["L13", "attack-info"], + ["L14", "attack-info"] + ], + + "steam-cap": [ + ["L51", "attack-info"] + ], + // please do not add things after this entry! git is dumb. "object-file-that-doesnt-actually-exist-and-i-just-put-this-here-to-prevent-merge-conflicts-with-this-file": [] } diff --git a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc index f1be018ff9..ead8ed0d18 100644 --- a/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/stack_structures.jsonc @@ -3625,5 +3625,513 @@ [48, "event-message-block"] ], + "plant-boss-default-event-handler": [ + [16, "event-message-block"] + ], + + "(event plant-boss-vulnerable)": [ + [16, "event-message-block"] + ], + + "(code plant-boss-hit)": [ + [16, "event-message-block"] + ], + + "(code plant-boss-dead)": [ + [16, "event-message-block"] + ], + + "(event plant-boss-attack)": [ + [16, "event-message-block"] + ], + + "(code plant-boss-eat)": [ + [16, "event-message-block"] + ], + + "(anon-function 22 plant-boss)": [ + [16, "event-message-block"] + ], + + "(code plant-boss-vulnerable)": [ + [16, "event-message-block"] + ], + + "(exit plant-boss-vulnerable)": [ + [16, "event-message-block"] + ], + + "(event plant-boss-back-arms-idle)": [ + [16, "event-message-block"] + ], + + "(method 11 plant-boss)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"], + [112, "vector"], + [128, "vector"], + [144, "vector"], + [160, "vector"], + [176, "vector"], + [192, "vector"] + ], + + "(method 60 ice-cube)": [ + [16, "vector"] + ], + + "(method 52 ice-cube)": [ + [16, "vector"] + ], + + "(trans ice-cube-appear)": [ + [16, "vector"] + ], + + "(code ice-cube-appear-land)": [ + [16, "vector"] + ], + + "(code ice-cube-face-player)": [ + [16, "vector"] + ], + + "(code ice-cube-mean-turn-to-charge)": [ + [16, "vector"] + ], + + "(method 54 ice-cube)": [ + [16, "vector"] + ], + + "(code ice-cube-shatter)": [ + [16, "vector"], + [32, "joint-exploder-tuning"] + ], + + "(trans ice-cube-trying-to-appear)": [ + [16, "vector"], + [32, "vector"] + ], + + "(trans ice-cube-mean-charge)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(method 51 ice-cube)": [ + [16, "vector"], + [32, "collide-tri-result"] + ], + + "(method 53 ice-cube)": [ + [16, "vector"], + [32, "collide-mesh-cache-tri"] + ], + + "(event double-lurker-top-knocked-down)": [ + [16, "event-message-block"] + ], + + "(code double-lurker-top-knocked-down)": [ + [16, "vector"] + ], + + "(method 48 double-lurker)": [ + [16, "vector"] + ], + + "(method 52 double-lurker)": [ + [16, "vector"], + [32, "vector"], + [48, "collide-mesh-cache-tri"] + ], + + "double-lurker-default-event-handler": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "(code double-lurker-buddy-was-hit)": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "(trans double-lurker-both-knocked-back)": [ + [16, "check-vector-collision-with-nav-spheres-info"], + [64, "clip-travel-vector-to-mesh-return-info"] + ], + + "(trans double-lurker-knocked-back)": [ + [16, "check-vector-collision-with-nav-spheres-info"], + [64, "clip-travel-vector-to-mesh-return-info"] + ], + + "(code nav-enemy-die billy-rat)": [ + [16, "event-message-block"] + ], + + "(code billy-rat-eat)": [ + [16, "event-message-block"] + ], + + "(code billy-rat-salivate)": [ + [16, "event-message-block"] + ], + + "(enter nav-enemy-victory billy-rat)": [ + [16, "event-message-block"] + ], + + "(enter billy-done)": [ + [16, "event-message-block"] + ], + + "(exit billy-done)": [ + [16, "event-message-block"] + ], + + "(trans enter-playing billy)": [ + [16, "event-message-block"] + ], + + "(method 11 billy)": [ + [16, "event-message-block"] + ], + + "(method 32 billy)": [ + [16, "vector"] + ], + + "billy-rat-init-by-other": [ + [16, "vector"] + ], + + "(method 43 billy)": [ + [16, "vector"] + ], + + "(enter billy-playing)": [ + [16, "vector"] + ], + + "billy-game-update": [ + [16, "vector"], + [32, "vector"] + ], + + "(method 20 lurkerworm)": [ + [16, "vector"] + ], + + "lurkerworm-prebind-function": [ + [16, "quaternion"] + ], + + "(method 21 lurkerworm)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"] + ], + + "lurkerworm-default-event-handler": [ + [16, "event-message-block"] + ], + + "(method 11 pelican)": [ + [16, "event-message-block"] + ], + + "(code pelican-explode)": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "(event pelican-circle)": [ + [16, "vector"] + ], + + "pelican-path-update": [ + [16, "vector"] + ], + + "(trans pelican-wait-at-nest)": [ + [16, "vector"] + ], + + "(enter pelican-fly-to-end)": [ + [16, "vector"] + ], + + "(code pelican-spit)": [ + [16, "quaternion"], + [32, "event-message-block"], + [112, "vector"] + ], + + "(enter pelican-circle)": [ + [16, "event-message-block"] + ], + + "(code pelican-wait-at-nest)": [ + [16, "event-message-block"] + ], + + "(event pelican-wait-at-nest)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(code pelican-dive)": [ + [16, "event-message-block"] + ], + + "(enter pelican-wait-at-nest)": [ + [16, "event-message-block"] + ], + + "(code pelican-circle)": [ + [16, "event-message-block"] + ], + + "(enter pelican-dive)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(anon-function 37 pelican)": [ + [16, "event-message-block"] + ], + + "(trans energydoor-closed-till-task)": [ + [16, "event-message-block"] + ], + + "(method 11 energydoor)": [ + [16, "event-message-block"] + ], + + "(enter energyhub-stopped)": [ + [16, "event-message-block"] + ], + + "(enter energyhub-stop)": [ + [16, "event-message-block"] + ], + + "energydoor-player-dist": [ + [16, "vector"], + [32, "matrix"] + ], + + "(trans energyarm-idle)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "event-message-block"] + ], + + "energyarm-trans": [ + [16, "vector"], + [32, "matrix"] + ], + + "(trans energyball-idle)": [ + [16, "vector"], + [32, "matrix"] + ], + + "(method 11 energyhub)": [ + [16, "vector"], + [32, "matrix"] + ], + + "energyhub-trans": [ + [16, "matrix"] + ], + + "(method 43 red-sagecage)": [ + [16, "vector"] + ], + + "(method 43 blue-sagecage)": [ + [16, "vector"] + ], + + "(method 43 yellow-sagecage)": [ + [16, "vector"] + ], + + "(method 44 citb-sage)": [ + [16, "vector"], + [32, "vector"] + ], + + "(enter hidden citb-sage)": [ + [16, "event-message-block"] + ], + + "(trans idle green-sagecage)": [ + [16, "event-message-block"] + ], + + "(exit play-anim green-sagecage)": [ + [16, "event-message-block"] + ], + + "(trans play-anim green-sagecage)": [ + [16, "event-message-block"] + ], + + "(event play-anim green-sagecage)": [ + [16, "event-message-block"] + ], + + "(method 32 green-sagecage)": [ + [16, "event-message-block"] + ], + + "(event play-anim citb-sage)": [ + [16, "event-message-block"] + ], + + "(event idle citb-sage)": [ + [16, "event-message-block"] + ], + + "(event wait eco-collectable)": [ + [16, "event-message-block"] + ], + + "(enter wait eco-collectable)": [ + [16, "event-message-block"] + ], + + "(event notice-blue eco-collectable)": [ + [16, "event-message-block"] + ], + + "(trans notice-blue eco-collectable)": [ + [16, "event-message-block"] + ], + + "(code pickup eco-collectable)": [ + [16, "event-message-block"] + ], + + "(enter pickup eco-collectable)": [ + [16, "event-message-block"] + ], + + "(code die eco)": [ + [16, "event-message-block"] + ], + + "(code pickup fuel-cell)": [ + [16, "event-message-block"] + ], + + "(code pickup buzzer)": [ + [16, "event-message-block"], + [96, "vector"] + ], + + "(trans pickup fuel-cell)": [ + [16, "event-message-block"] + ], + + "(event vent-wait-for-touch)": [ + [16, "event-message-block"] + ], + + "add-blue-motion": [ + [16, "vector"] + ], + + "ecovalve-init-by-other": [ + [16, "vector"] + ], + + "(anon-function 69 collectables)": [ + [16, "vector"] + ], + + "(code ecovalve-idle)": [ + [16, "vector"] + ], + + "(method 9 fact-info)": [ + [16, "vector"], + [32, "collide-tri-result"] + ], + + "(method 29 buzzer)": [ + [16, "vector"] + ], + + "(trans wait eco-collectable)": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "(code jump eco-collectable)": [ + [16, "trajectory"] + ], + + "(event shover-idle)": [ + [16, "attack-info"], + [128, "event-message-block"] + ], + + "(method 21 sun-iris-door)": [ + [16, "vector"] + ], + + "(method 20 sun-iris-door)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"] + ], + + "(method 20 steam-cap)": [ + [16, "vector"], + [32, "event-message-block"] + ], + + "(method 21 steam-cap)": [ + [16, "vector"], + [32, "vector"], + [48, "vector"], + [64, "vector"], + [80, "vector"], + [96, "vector"], + [112, "vector"], + [128, "vector"], + [144, "vector"] + ], + + "(method 11 steam-cap)": [ + [32, "vector"] + ], + + "(trans floating-launcher-idle)": [ + [16, "vector"] + ], + + "(trans whirlpool-idle)": [ + [16, "vector"] + ], + + "(method 20 whirlpool)": [ + [16, "vector"], + [32, "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 d3f0dcf23c..ccdf8dab4d 100644 --- a/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc +++ b/decompiler/config/jak1_ntsc_black_label/type_casts.jsonc @@ -3194,7 +3194,15 @@ [14, "t9", "(function process-drawable int process-drawable)"] ], - "(method 57 ice-cube)": [[16, "v1", "collide-shape-prim-sphere"]], + "(method 57 ice-cube)": [ + [16, "v1", "collide-shape-prim-group"], + [26, "v1", "collide-shape-prim-group"] + ], + + "(method 58 ice-cube)": [ + [16, "v1", "collide-shape-prim-group"], + [26, "v1", "collide-shape-prim-group"] + ], "(code yeti-slave-appear-jump-up)": [[14, "v1", "art-joint-anim"]], @@ -3477,7 +3485,10 @@ "(method 73 green-eco-lurker)": [[6, "a1", "touching-shapes-entry"]], - "citb-sagecage-update-collision": [[2, "a0", "collide-shape-prim-group"]], + "citb-sagecage-update-collision": [ + [2, "a0", "collide-shape-prim-mesh"], + [9, "a0", "collide-shape-prim-mesh"] + ], "race-ring-set-particle-rotation-callback": [ [1, "v1", "(pointer race-ring)"] @@ -5125,5 +5136,477 @@ [27, "gp", "symbol"] ], + "(method 7 plant-boss)": [ + [47, "t9", "(function process-drawable int process-drawable)"] + ], + + "(code plant-boss-arm-hit)": [ + [88, "v1", "art-joint-anim"] + ], + + "(code plant-boss-arm-die)": [ + [3, "v1", "collide-shape-prim-group"], + [18, "a0", "collide-shape-prim-group"], + [58, "v1", "art-joint-anim"], + [109, "v1", "art-joint-anim"], + [165, "v1", "art-joint-anim"], + [186, "v1", "art-joint-anim"] + ], + + "(code plant-boss-back-arms-idle)": [ + [10, "v1", "art-joint-anim"] + ], + + "(code plant-boss-vine-hit)": [ + [88, "v1", "art-joint-anim"] + ], + + "(code plant-boss-dead-bounce)": [ + [79, "v1", "art-joint-anim"] + ], + + "(code plant-boss-vine-die)": [ + [46, "v1", "art-joint-anim"] + ], + + "(code plant-boss-dead-idle)": [ + [16, "v1", "art-joint-anim"] + ], + + "(code plant-boss-dead)": [ + [45, "v1", "art-joint-anim"], + [113, "v1", "art-joint-anim"] + ], + + "(code plant-boss-root-idle)": [ + [17, "v1", "art-joint-anim"] + ], + + "(code plant-boss-eat)": [ + [274, "v1", "art-joint-anim"] + ], + + "(code plant-boss-vulnerable)": [ + [149, "v1", "art-joint-anim"], + [221, "v1", "art-joint-anim"] + ], + + "(code plant-boss-far-idle)": [ + [62, "v1", "art-joint-anim"] + ], + + "(code plant-boss-idle)": [ + [25, "v1", "art-joint-anim"], + [177, "v1", "art-joint-anim"], + [271, "v1", "art-joint-anim"], + [304, "v1", "art-joint-anim"], + [366, "v1", "art-joint-anim"], + [404, "v1", "art-joint-anim"] + ], + + "(code plant-boss-leaf-close)": [ + [34, "v1", "art-joint-anim"], + [98, "v1", "art-joint-anim"] + ], + + "(code plant-boss-leaf-bounce)": [ + [17, "v1", "art-joint-anim"], + [72, "v1", "art-joint-anim"] + ], + + "(code plant-boss-leaf-open)": [ + [98, "v1", "art-joint-anim"], + [227, "v1", "art-joint-anim"] + ], + + "(code plant-boss-leaf-idle)": [ + [15, "v1", "art-joint-anim"], + [74, "v1", "art-joint-anim"] + ], + + "(code plant-boss-vine-idle)": [ + [17, "v1", "art-joint-anim"] + ], + + "(code plant-boss-back-arms-die)": [ + [20, "v1", "art-joint-anim"], + [82, "v1", "art-joint-anim"] + ], + + "(code plant-boss-back-arms-hit)": [ + [149, "v1", "art-joint-anim"] + ], + + "(method 7 ice-cube)": [ + [24, "t9", "(function nav-enemy int nav-enemy)"] + ], + + "(code ice-cube-appear)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code ice-cube-tired)": [ + [14, "v1", "art-joint-anim"], + [68, "v1", "art-joint-anim"] + ], + + "(code ice-cube-become-mean)": [ + [15, "v1", "art-joint-anim"] + ], + + "(code ice-cube-retract-spikes)": [ + [22, "v1", "art-joint-anim"] + ], + + "(code ice-cube-mean-turn-to-charge)": [ + [15, "v1", "art-joint-anim"], + [187, "v1", "art-joint-anim"] + ], + + "(code ice-cube-face-player)": [ + [15, "v1", "art-joint-anim"], + [187, "v1", "art-joint-anim"] + ], + + "(code ice-cube-appear-land)": [ + [37, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-patrol ice-cube)": [ + [8, "t9", "(function none)"] + ], + + "(event double-lurker-top-on-shoulders)": [ + [5, "a0", "vector"], + [22, "v1", "vector"], + [24, "v1", "vector"] + ], + + "(code double-lurker-top-on-shoulders-die)": [ + [18, "v1", "art-joint-anim"] + ], + + "(code double-lurker-top-knocked-down)": [ + [51, "v1", "art-joint-anim"] + ], + + "(code double-lurker-both-knocked-back)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code double-lurker-knocked-back)": [ + [14, "v1", "art-joint-anim"] + ], + + "(code double-lurker-break-apart)": [ + [10, "v1", "art-joint-anim"] + ], + + "(code nav-enemy-patrol double-lurker-top)": [ + [27, "t9", "(function none)"] + ], + + "(code nav-enemy-patrol double-lurker)": [ + [27, "t9", "(function none)"] + ], + + "double-lurker-default-event-handler": [ + [95, "gp", "target"] + ], + + "(method 51 double-lurker)": [ + [18, "v1", "collide-shape-prim-group"], + [22, "v1", "collide-shape-prim-group"] + ], + + "(method 7 billy)": [ + [26, "t9", "(function process-drawable int process-drawable)"] + ], + + "(method 38 billy)": [ + [33, "t9", "(function nav-enemy none)"] + ], + + "(enter nav-enemy-victory billy-rat)": [ + [4, "v0", "(state nav-enemy)"] + ], + + "(code billy-rat-salivate)": [ + [43, "v1", "art-joint-anim"] + ], + + "(code idle billy)": [ + [35, "v1", "float"], + [132, "v1", "art-joint-anim"] + ], + + "(enter billy-done)": [ + [191, "v1", "float"] + ], + + "(method 43 billy)": [ + [19, "v1", "float"] + ], + + "(event billy-done)": [ + [15, "v1", "billy-rat"], + [19, "v1", "billy-rat"] + ], + + "(event billy-playing)": [ + [14, "v1", "float"], + [93, "s5", "billy-rat"], + [103, "v1", "float"], + [169, "v1", "billy-snack"], + [216, "v1", "billy-snack"], + [219, "v1", "billy-snack"], + [223, "v1", "billy-snack"], + [240, "s5", "billy-snack"], + [248, "v1", "handle"], + [249, "s5", "billy-snack"], + [251, "s5", "billy-snack"], + [255, "s5", "billy-snack"] + ], + + "(code lurkerworm-rise)": [ + [13, "v1", "art-joint-anim"] + ], + + "(code lurkerworm-sink)": [ + [10, "v1", "art-joint-anim"] + ], + + "(code lurkerworm-die)": [ + [19, "v1", "art-joint-anim"] + ], + + "(code lurkerworm-rest)": [ + [10, "v1", "float"], + [35, "v1", "art-joint-anim"], + [89, "v1", "float"] + ], + + "(method 7 pelican)": [ + [36, "t9", "(function process-drawable int process-drawable)"] + ], + + "pelican-fly": [ + [61, "v1", "art-joint-anim"], + [186, "v1", "art-joint-anim"] + ], + + "(code pelican-dive)": [ + [161, "v1", "art-joint-anim"] + ], + + "(code pelican-wait-at-nest)": [ + [30, "v1", "art-joint-anim"], + [118, "v1", "art-joint-anim"], + [197, "v1", "art-joint-anim"] + ], + + "(event pelican-wait-at-nest)": [ + [49, "v1", "process-drawable"] + ], + + "(code pelican-explode)": [ + [71, "a0", "process-drawable"] + ], + + "(event pelican-circle)": [ + [23, "v1", "float"] + ], + + "(code pelican-spit)": [ + [42, "gp", "handle"], + [50, "gp", "handle"], + [121, "gp", "handle"], + [143, "gp", "handle"], + [155, "gp", "handle"], + [161, "s4", "handle"], + [173, "s4", "handle"] + ], + + "(trans energyarm-no-ball)": [ + [27, "v1", "float"], + [57, "v1", "float"] + ], + + "(trans energyarm-idle)": [ + [21, "v1", "float"] + ], + + "(code energyhub-stopped)": [ + [11, "v1", "float"] + ], + + "(code energyhub-stop)": [ + [11, "v1", "float"] + ], + + "(code energyhub-idle)": [ + [11, "v1", "float"] + ], + + "(code energyarm-idle)": [ + [13, "v1", "float"], + [36, "v1", "float"] + ], + + "energyhub-set-lava-height": [ + [25, "v1", "process-drawable"], + [28, "v1", "process-drawable"] + ], + + "(trans energyhub-idle)": [ + [34, "v1", "energyarm"] + ], + + "(post idle citb-sage)": [ + [3, "t9", "(function none :behavior citb-sage)"] + ], + + "(method 44 red-sagecage)": [ + [35, "t9", "(function citb-sage none)"] + ], + + "(method 44 blue-sagecage)": [ + [35, "t9", "(function citb-sage none)"] + ], + + "(method 44 yellow-sagecage)": [ + [35, "t9", "(function citb-sage none)"] + ], + + "(method 44 green-sagecage)": [ + [35, "t9", "(function citb-sage none)"] + ], + + "(method 43 red-sagecage)": [ + [24, "v1", "float"] + ], + + "(method 43 blue-sagecage)": [ + [24, "v1", "float"] + ], + + "(method 43 yellow-sagecage)": [ + [24, "v1", "float"] + ], + + "(event play-anim green-sagecage)": [ + [128, "s5", "robotboss"] + ], + + "(method 21 citb-sagecage)": [ + [[27, 97], "v1", "vector"] + ], + + "(code citb-sagecage-idle)": [ + [9, "gp", "citb-sage"], + [15, "gp", "citb-sage"] + ], + + "add-blue-motion": [ + [25, "v1", "process-drawable"], + [34, "gp", "collide-shape"] + ], + + "(event wait eco-collectable)": [ + [118, "a0", "vector"], + [136, "a0", "vector"] + ], + + "(event pickup eco-collectable)": [ + [18, "a0", "vector"] + ], + + "(event fuel-cell-clone-anim)": [ + [35, "a0", "vector"] + ], + + "fuel-cell-animate": [ + [9, "gp", "fuel-cell"] + ], + + "(event wait fuel-cell)": [ + [95, "a0", "vector"] + ], + + "(enter pickup fuel-cell)": [ + [9, "v0", "(state eco-collectable)"] + ], + + "(code ecovalve-idle)": [ + [41, "v1", "process-drawable"] + ], + + "(code vent-pickup)": [ + [25, "gp", "process-drawable"], + [59, "s5", "collide-shape"] + ], + + "(anon-function 69 collectables)": [ + [2, "v1", "handle"], + [5, "v1", "handle"], + [13, "s5", "eco-collectable"], + [33, "v1", "target"], + [38, "v1", "target"], + [50, "s5", "eco-collectable"] + ], + + "fuel-cell-init-by-other": [ + [118, "gp", "vector"] + ], + + "ecovalve-init-by-other": [ + [95, "a0", "process-drawable"], + [144, "v1", "process-drawable"] + ], + + "(method 11 shover)": [ + ["_stack_", 16, "res-tag"], + [120, "v0", "(pointer float)"] + ], + + "(method 11 sun-iris-door)": [ + ["_stack_", 16, "res-tag"], + [153, "v0", "(pointer float)"] + ], + + "(event sun-iris-door-closed)": [ + [14, "a0", "vector"] + ], + + "(event sun-iris-door-opening)": [ + [14, "a0", "vector"] + ], + + "(event sun-iris-door-closing)": [ + [14, "a0", "vector"] + ], + + "(event sun-iris-door-open)": [ + [20, "a0", "vector"] + ], + + "sun-iris-door-init-by-other": [ + [97, "v1", "art-joint-anim"] + ], + + "(method 7 steam-cap)": [ + [19, "t9", "(function process-drawable int process-drawable)"] + ], + + "(method 11 steam-cap)": [ + ["_stack_", 16, "res-tag"], + [139, "v0", "(pointer float)"] + ], + + "(method 11 whirlpool)": [ + ["_stack_", 16, "res-tag"], + [92, "v0", "(pointer float)"] + ], + "placeholder-do-not-add-below": [] } diff --git a/decompiler/util/data_decompile.cpp b/decompiler/util/data_decompile.cpp index 8a25bc612d..90a85f089f 100644 --- a/decompiler/util/data_decompile.cpp +++ b/decompiler/util/data_decompile.cpp @@ -536,8 +536,9 @@ goos::Object decompile_structure(const TypeSpec& type, // check enough room if (int(words.at(label.target_segment).size()) < word_count + offset_location / 4) { - throw std::runtime_error(fmt::format("Structure type {} takes up {} bytes and doesn't fit.", - type_info->get_name(), type_info->get_size_in_memory())); + throw std::runtime_error(fmt::format( + "Structure type {} takes up {} bytes and doesn't fit. {}:{}", type_info->get_name(), + type_info->get_size_in_memory(), label.name, offset_location)); } // get words for real diff --git a/goal_src/engine/collide/collide-shape-h.gc b/goal_src/engine/collide/collide-shape-h.gc index 040fee34d2..040983669a 100644 --- a/goal_src/engine/collide/collide-shape-h.gc +++ b/goal_src/engine/collide/collide-shape-h.gc @@ -203,7 +203,7 @@ :flag-assert #x1d0000005c (:methods (new (symbol type basic uint uint) _type_ 0) - (dummy-28 () none 28) + (dummy-28 (_type_ int) none 28) ) ) @@ -249,21 +249,21 @@ :size-assert #xb8 :flag-assert #x38000000b8 (:methods - (new (symbol type process collide-list-enum) _type_ 0) + (new (symbol type process collide-list-enum) _type_) (TODO-RENAME-28 (_type_) none 28) (dummy-29 (_type_ int) none 29) (TODO-RENAME-30 (_type_ vector) none 30) (dummy-31 () none 31) - (dummy-32 () none 32) + (dummy-32 (_type_ float uint) none 32) (dummy-33 (_type_ vector uint) none 33) - (dummy-34 (_type_ uint) collide-shape-prim 34) + (dummy-34 (_type_ uint) collide-shape-prim 34) (dummy-35 (_type_) none 35) (dummy-36 () none 36) - (dummy-37 () none 37) + (dummy-37 (_type_ vector) none 37) (dummy-38 () none 38) (dummy-39 () none 39) (dummy-40 (_type_ structure) none 40) ;; ?? - I've seen overlaps-others-params | collide-edge-hold-list - (dummy-41 () none 41) + (dummy-41 (_type_ attack-info float) none 41) (dummy-42 () none 42) (dummy-43 () none 43) (dummy-44 (_type_) none 44) diff --git a/goal_src/engine/collide/collide-touch-h.gc b/goal_src/engine/collide/collide-touch-h.gc index 8f099cb919..b0b589e1c9 100644 --- a/goal_src/engine/collide/collide-touch-h.gc +++ b/goal_src/engine/collide/collide-touch-h.gc @@ -7,24 +7,25 @@ (declare-type touching-shapes-entry structure) -;; decomp begins +;; DECOMP BEGINS (deftype touching-prim (structure) - ((cprim collide-shape-prim :offset-assert 0) ;; a big guess, there's a few that meet this name - (has-tri? symbol :offset-assert 4) - (tri collide-tri-result :inline :offset-assert 16) + ((cprim collide-shape-prim :offset-assert 0) + (has-tri? symbol :offset-assert 4) + (tri collide-tri-result :inline :offset-assert 16) ) :method-count-assert 9 :size-assert #x64 :flag-assert #x900000064 ) + (deftype touching-prims-entry (structure) - ((next touching-prims-entry :offset-assert 0) - (prev touching-prims-entry :offset-assert 4) - (allocated? symbol :offset-assert 8) - (u float :offset-assert 12) - (prim1 touching-prim :inline :offset-assert 16) + ((next touching-prims-entry :offset-assert 0) + (prev touching-prims-entry :offset-assert 4) + (allocated? symbol :offset-assert 8) + (u float :offset-assert 12) + (prim1 touching-prim :inline :offset-assert 16) (prim2 touching-prim :inline :offset-assert 128) ) :method-count-assert 13 @@ -38,75 +39,75 @@ ) ) + (deftype touching-prims-entry-pool (structure) - ((head touching-prims-entry :offset-assert 0) - (nodes touching-prims-entry 64 :inline :offset-assert 16) + ((head touching-prims-entry :offset-assert 0) + (nodes touching-prims-entry 64 :inline :offset-assert 16) ) :method-count-assert 13 :size-assert #x3c10 :flag-assert #xd00003c10 (:methods - (new (symbol type) _type_ 0) - (dummy-9 () none 9) - (dummy-10 () none 10) - (init-list! (_type_) none 11) - (dummy-12 () none 12) - ) + (new (symbol type) _type_ 0) + (dummy-9 () none 9) + (dummy-10 () none 10) + (init-list! (_type_) none 11) + (dummy-12 () none 12) + ) ) + (defmethod init-list! touching-prims-entry-pool ((obj touching-prims-entry-pool)) - "Initialize all entries to be not allocated and in a linked list." (let ((prev (the-as touching-prims-entry #f))) - (let ((current (the-as touching-prims-entry (-> obj nodes)))) - (set! (-> obj head) current) - (countdown (a0-1 64) - (set! (-> current prev) prev) - (let ((next (&+ current 240))) - (set! (-> current next) (the-as touching-prims-entry next)) - (set! (-> current allocated?) #f) - (set! prev current) - (set! current (the-as touching-prims-entry next)) - ) - ) + (let ((current (the-as touching-prims-entry (-> obj nodes)))) + (set! (-> obj head) current) + (countdown (a0-1 64) + (set! (-> current prev) prev) + (let ((next (&+ current 240))) + (set! (-> current next) (the-as touching-prims-entry next)) + (set! (-> current allocated?) #f) + (set! prev current) + (set! current (the-as touching-prims-entry next)) ) - (set! (-> prev next) #f) + ) ) + (set! (-> prev next) #f) + ) (none) ) -(defmethod new touching-prims-entry-pool ((allocation symbol) (type-to-make type)) - "Allocate a new touching-prims-entry-pool" - - ;; Note - the original code passed (-> type-to-make size) as an argument. - ;; however, the new method of structure doesn't have this argument. - ;; it uses the same value for the size so it doesn't really matter. - (let ((obj (the touching-prims-entry-pool ((method-of-type structure new) - allocation - type-to-make - ;; (-> type-to-make size) see note - ) - ))) - (init-list! obj) - obj +(defmethod + new + touching-prims-entry-pool + ((allocation symbol) (type-to-make type)) + (let ((t9-0 (method-of-type structure new)) + (v1-1 type-to-make) + ) + (-> type-to-make size) + (let ((gp-0 (t9-0 allocation v1-1))) + ((method-of-type touching-prims-entry-pool init-list!) + (the-as touching-prims-entry-pool gp-0) + ) + (the-as touching-prims-entry-pool gp-0) ) + ) ) (deftype touching-shapes-entry (structure) - ((cshape1 collide-shape :offset-assert 0) - (cshape2 collide-shape :offset-assert 4) - (resolve-u int8 :offset-assert 8) - (head touching-prims-entry :offset-assert 12) + ((cshape1 collide-shape :offset-assert 0) + (cshape2 collide-shape :offset-assert 4) + (resolve-u int8 :offset-assert 8) + (head touching-prims-entry :offset-assert 12) ) - :allow-misaligned - :method-count-assert 18 + :allow-misaligned :method-count-assert 18 :size-assert #x10 :flag-assert #x1200000010 (:methods (dummy-9 () none 9) (touched-shape (_type_ collide-shape-moving) collide-shape 10) (dummy-11 () none 11) - (prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry 12) ; this one! - (dummy-13 () none 13) + (prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry 12) + (dummy-13 (_type_ control-info int int) none 13) (dummy-14 () none 14) (dummy-15 () none 15) (get-head (_type_) touching-prims-entry 16) @@ -114,10 +115,11 @@ ) ) + (deftype touching-list (structure) - ((num-touching-shapes int32 :offset-assert 0) - (resolve-u int8 :offset-assert 4) - (touching-shapes touching-shapes-entry 32 :inline :offset-assert 8) + ((num-touching-shapes int32 :offset-assert 0) + (resolve-u int8 :offset-assert 4) + (touching-shapes touching-shapes-entry 32 :inline :offset-assert 8) ) :method-count-assert 15 :size-assert #x208 @@ -133,29 +135,37 @@ ) ) + (defmethod new touching-list ((allocation symbol) (type-to-make type)) - "See note in touching-prims-entry-pool" - (let ((obj (the touching-list ((method-of-type structure new) - allocation - type-to-make - ;; (-> type-to-make size) see note - ) - ))) + (let ((t9-0 (method-of-type structure new)) + (v1-1 type-to-make) + ) + (-> type-to-make size) + (let ((obj (the-as touching-list (t9-0 allocation v1-1)))) (set! (-> obj num-touching-shapes) 0) (set! (-> obj resolve-u) 0) obj ) + ) ) (defmethod get-head touching-shapes-entry ((obj touching-shapes-entry)) (-> obj head) ) -(defmethod unknown1 touching-shapes-entry ((obj touching-shapes-entry) (arg0 (pointer uint32))) +(defmethod + unknown1 + touching-shapes-entry + ((obj touching-shapes-entry) (arg0 (pointer uint32))) (-> arg0 0) ) +(define-perm *touching-prims-entry-pool* touching-prims-entry-pool + (new 'global 'touching-prims-entry-pool) + ) -(define-perm *touching-prims-entry-pool* touching-prims-entry-pool (new 'global 'touching-prims-entry-pool)) (define-perm *touching-list* touching-list (new 'global 'touching-list)) + + + diff --git a/goal_src/engine/game/collectables.gc b/goal_src/engine/game/collectables.gc index bf1aad0773..d9b1d06b74 100644 --- a/goal_src/engine/game/collectables.gc +++ b/goal_src/engine/game/collectables.gc @@ -44,7 +44,7 @@ (collect-effect-time uint64 :offset-assert 328) (respawn-delay uint64 :offset-assert 336) (sound-name sound-spec :offset-assert 344) - (target uint64 :offset-assert 352) + (target handle :offset-assert 352) (suck-time uint64 :offset-assert 360) (suck-y-offset float :offset-assert 368) (speed vector :inline :offset-assert 384) @@ -52,12 +52,12 @@ ) (:methods (wait () _type_ :state 22) ;; state - (pickup () _type_ :state 23) ;; state + (pickup (object handle) _type_ :state 23) ;; state (die () _type_ :state 24) ;; state (jump () _type_ :state 25) - (notice-blue () _type_ :state 26) ;; state + (notice-blue (handle) _type_ :state 26) ;; state (get-pickup-sound (_type_ pickup-type) ambient-sound 27) - (dummy-28 (_type_ basic pickup-type float) none 28) + (dummy-28 (_type_ res-lump pickup-type float) object 28) (update-sound! (_type_) none 29) ;; something to do with particles too (blocked () _type_ :state 30) ) @@ -74,7 +74,7 @@ :size-assert #x19c :flag-assert #x1f0130019c ) -(define-extern fuel-cell-init-as-clone (function handle object none)) +(define-extern fuel-cell-init-as-clone (function handle int none :behavior fuel-cell)) (define-extern fuel-cell-pick-anim (function process-drawable spool-anim)) (defskelgroup *money-sg* money @@ -105,4 +105,5 @@ :flag-assert #x1f01300194 ) -(define-extern money-init-by-other-no-bob (function vector vector int float entity none)) +;; TODO - for orb-cache +(define-extern money-init-by-other-no-bob (function vector vector fact-info float entity none :behavior money)) diff --git a/goal_src/engine/game/generic-obs-h.gc b/goal_src/engine/game/generic-obs-h.gc index cb646f6d32..a73f5bc47c 100644 --- a/goal_src/engine/game/generic-obs-h.gc +++ b/goal_src/engine/game/generic-obs-h.gc @@ -71,19 +71,19 @@ (deftype part-tracker (process) - ((root trsqv :offset-assert 112) - (part sparticle-launch-control :offset-assert 116) - (target handle :offset-assert 120) - (callback (function part-tracker none) :offset-assert 128) - (linger-callback (function part-tracker none) :offset-assert 132) - (duration int64 :offset-assert 136) - (linger-duration int64 :offset-assert 144) - (start-time int64 :offset-assert 152) - (offset vector :inline :offset-assert 160) - (userdata uint64 :offset-assert 176) - (user-time int64 2 :offset-assert 184) - (user-vector vector 2 :inline :offset-assert 208) - (user-handle uint32 2 :offset-assert 240) + ((root trsqv :offset-assert 112) + (part sparticle-launch-control :offset-assert 116) + (target handle :offset-assert 120) + (callback (function part-tracker vector) :offset-assert 128) + (linger-callback (function part-tracker vector) :offset-assert 132) + (duration uint64 :offset-assert 136) + (linger-duration uint64 :offset-assert 144) + (start-time uint64 :offset-assert 152) + (offset vector :inline :offset-assert 160) + (userdata uint64 :offset-assert 176) + (user-time int64 2 :offset-assert 184) + (user-vector vector 2 :inline :offset-assert 208) + (user-handle uint32 2 :offset-assert 240) ) :heap-base #x90 :method-count-assert 14 diff --git a/goal_src/engine/game/generic-obs.gc b/goal_src/engine/game/generic-obs.gc index 52000fd799..591059d317 100644 --- a/goal_src/engine/game/generic-obs.gc +++ b/goal_src/engine/game/generic-obs.gc @@ -835,11 +835,11 @@ (defstate part-tracker-process (part-tracker) :code (behavior () - (set! (-> self start-time) (-> *display* base-frame-counter)) + (set! (-> self start-time) (the-as uint (-> *display* base-frame-counter))) (while (< - (- (-> *display* base-frame-counter) (-> self start-time)) - (-> self duration) + (- (-> *display* base-frame-counter) (the-as int (-> self start-time))) + (the-as int (-> self duration)) ) (let ((gp-0 (handle->process (-> self target)))) (when gp-0 @@ -867,7 +867,10 @@ ) (let ((gp-2 (-> *display* base-frame-counter))) (until - (>= (- (-> *display* base-frame-counter) gp-2) (-> self linger-duration)) + (>= + (- (-> *display* base-frame-counter) gp-2) + (the-as int (-> self linger-duration)) + ) (if (-> self linger-callback) ((-> self linger-callback) self) ) @@ -897,7 +900,7 @@ (set! (-> self root) (new 'process 'trsqv)) (set! (-> self root trans quad) (-> arg5 world-sphere quad)) (set! (-> self offset quad) (-> arg5 world-sphere quad)) - (set! (-> self callback) arg2) + (set! (-> self callback) (the-as (function part-tracker vector) arg2)) (set! (-> self linger-callback) #f) (set! (-> self userdata) (the-as uint arg3)) (set! (-> self target) (process->handle arg4)) @@ -911,8 +914,8 @@ ) ) ) - (set! (-> self duration) arg1) - (set! (-> self linger-duration) (the-as int (-> arg0 linger-duration))) + (set! (-> self duration) (the-as uint arg1)) + (set! (-> self linger-duration) (-> arg0 linger-duration)) (set! (-> self part) (create-launch-control arg0 self)) (go part-tracker-process) (none) diff --git a/goal_src/engine/nav/navigate-h.gc b/goal_src/engine/nav/navigate-h.gc index d2d80b6703..43df60b462 100644 --- a/goal_src/engine/nav/navigate-h.gc +++ b/goal_src/engine/nav/navigate-h.gc @@ -251,8 +251,8 @@ (dummy-20 () none 20) (dummy-21 () none 21) (dummy-22 () none 22) - (dummy-23 () none 23) - (dummy-24 (_type_ float symbol) none 24) + (dummy-23 (_type_ vector check-vector-collision-with-nav-spheres-info) float 23) ;; TODO - unconfirmed + (dummy-24 (_type_ float clip-travel-vector-to-mesh-return-info) none 24) (dummy-25 (_type_ vector float) symbol 25) ; see - nav-enemy-test-point-near-nav-mesh? (dummy-26 (_type_) none 26) (dummy-27 () none 27) diff --git a/goal_src/engine/ui/text-h.gc b/goal_src/engine/ui/text-h.gc index 8be0e0f429..49c2e4bed5 100644 --- a/goal_src/engine/ui/text-h.gc +++ b/goal_src/engine/ui/text-h.gc @@ -165,11 +165,17 @@ (beach-seagulls-avalanche #x273) + (beach-pelican-quick-get-cell #x274) + (beach-flutflutegg-hint #x275) (sidekick-hint-fish-powerup #x278) (sidekick-speech-hint-crate-darkeco1 #x281) + (beach-collectors-unblocked #x288) + + (misty-stopped-lurkers-at-silo #x28a) + (misty-stopped-balloon-lurkers #x28b) (sidekick-speech-crate-steel-break1 #x283) (sidekick-speech-hint-crate-iron #x284) @@ -180,6 +186,9 @@ (sidekick-speech-crate-steel-break2 #x28e) (sidekick-speech-hint-crate-darkeco2 #x28f) + (collectables-scout-flies-red-boxes #x295) + + (found-all-scout-flies #x296) (yakow-owed-powercell #x297) (misty-teetertotter-bonk-dax-tutorial #x2a4) @@ -236,6 +245,10 @@ (rolling-ring-chase-1 #x324) (rolling-ring-chase-2 #x325) + (rolling-beat-lurkers #x327) + + (swamp-finished-with-flutflut #x328) + (rolling-race-beat-record #x335) (sidekick-speech-hint-rolling-crate-darkeco #x336) @@ -247,7 +260,8 @@ (rolling-ring-hint-be-quick-all #x341) (sunken-blue-eco-charger-hint #x345) - + (sunken-take-it-easy-hot-pipes #x34e) + (sunken-double-lurker-hint #x347) (sunken-qbert-plat-hint #x34a) (sunken-blue-eco-charger-all-hint #x34d) @@ -257,6 +271,8 @@ (swamp-bats-hint #x364) ;; maybe we can ???? the bats. lol (flutflut-reminder #x368) + (sage-golfclap-i-have-low-expectations #x36a) ;; where was this said? + (village2-warp-gate-reminder #x36f) (village2-warp-gate-reminder-annoyed #x370) (village2-warp-gate-reminder-very-annoyed #x371) @@ -329,17 +345,27 @@ (fire-canyon-level-name #x50c) + (fire-canyon-we-made-it #x515) + + (collectables-theres-scout-flys-here-too #x516) + (ogre-end #x600) (ogre-buzzer #x601) (ogre-boss #x603) + (ogre-boss-killed #x604) (assistant-voicebox-intro-ogre-race #x605) (sidekick-speech-hint-ogre-race #x61c) + (assistant-finished-mountain-pass-race #x61d) (lavatube-end #x700) (lavatube-buzzer #x701) + (lavatube-shoot-the-spheres #x70d) + + (lavatube-spheres-door-open #x710) + (citadel-buzzer #x800) (citadel-level-name #x801) (citadel-sage-blue #x802) @@ -355,17 +381,20 @@ (training-precursor-orbs #x901) (training-power-cells #x902) + (training-assistant-found-scout-fly #x903) + (training-assistant-found-scout-fly-cell #x904) (training-blue-eco-vent #x907) (training-eco-green #x908) (training-eco-blue #x909) + (training-more-eco-more-time #x90a) (training-precursor-door #x90b) + (training-eco-opened-door #x90c) (training-double-jump #x90e) (sage-voicebox-hint-crate-iron #x917) - (training-warp-gate-blocked #x919) (training-warp-gate-reminder #x91a) - + (training-gimmie-task-name #x91b) (training-buzzer-task-name #x91c) (training-door-task-name #x91d) diff --git a/goal_src/engine/util/sync-info-h.gc b/goal_src/engine/util/sync-info-h.gc index e796005e3a..d8108ea481 100644 --- a/goal_src/engine/util/sync-info-h.gc +++ b/goal_src/engine/util/sync-info-h.gc @@ -87,6 +87,7 @@ (damping float :offset-assert 16) (accel float :offset-assert 20) ) + :pack-me :method-count-assert 11 :size-assert #x18 :flag-assert #xb00000018 @@ -103,6 +104,7 @@ (elasticity float :offset-assert 32) (state int32 :offset-assert 36) ) + :pack-me :method-count-assert 13 :size-assert #x28 :flag-assert #xd00000028 diff --git a/goal_src/levels/beach/lurkerworm.gc b/goal_src/levels/beach/lurkerworm.gc index 5f02abfd81..adbd4046ec 100644 --- a/goal_src/levels/beach/lurkerworm.gc +++ b/goal_src/levels/beach/lurkerworm.gc @@ -5,3 +5,983 @@ ;; name in dgo: lurkerworm ;; dgos: BEA, L1 +(define-extern *lurkerworm-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype lurkerworm (process-drawable) + ((root-override collide-shape-moving :offset 112) + (twister twister :offset-assert 176) + (head-tilt float :offset-assert 180) + (strike-count int32 :offset-assert 184) + (angle float :offset-assert 188) + (vulnerable symbol :offset-assert 192) + (part2 sparticle-launch-control :offset-assert 196) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xc8 + :flag-assert #x16006000c8 + (:methods + (TODO-RENAME-20 (_type_) none 20) + (particle-effect (_type_) none 21) + ) + (:states + lurkerworm-die + lurkerworm-idle + lurkerworm-rest + lurkerworm-rise + lurkerworm-sink + lurkerworm-spot + lurkerworm-strike + ) + ) + + +(defmethod relocate lurkerworm ((obj lurkerworm) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (if (nonzero? (-> obj twister)) + (&+! (-> obj twister) arg0) + ) + (the-as lurkerworm ((method-of-type process-drawable relocate) obj arg0)) + ) + +(defmethod deactivate lurkerworm ((obj lurkerworm)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defskelgroup *lurkerworm-sg* lurkerworm + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 2 0 6.5) + :longest-edge (meters 1.5) + ) + +(set! + (-> *part-group-id-table* 157) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-beach-sandworm" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 656 :fade-after (meters 90.0) :period 900 :length 300) + (sp-item 657 :fade-after (meters 100.0) :period 900 :length 390) + (sp-item 658 :fade-after (meters 150.0) :period 900 :length 420 :offset 120) + (sp-item 659 :fade-after (meters 60.0) :period 900 :length 420 :offset 120) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +(set! + (-> *part-group-id-table* 158) + (new 'static 'sparticle-launch-group + :length 3 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-beach-sandworm-norocks" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 656 :fade-after (meters 90.0) :period 900 :length 300) + (sp-item 658 :fade-after (meters 150.0) :period 900 :length 420 :offset 120) + (sp-item 659 :fade-after (meters 60.0) :period 900 :length 420 :offset 120) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +(set! + (-> *part-id-table* 656) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2)) + (sp-flt spt-num 4.0) + (sp-rnd-flt spt-x (meters 3.0) (meters 5.0) 1.0) + (sp-flt spt-y (meters 1.0)) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 130.0 20.0 1.0) + (sp-rnd-flt spt-g 90.0 20.0 1.0) + (sp-rnd-flt spt-b 50.0 8.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-vel-x (meters -0.02)) + (sp-flt spt-vel-y (meters -0.0033333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.21333334) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit12) + (sp-int-plain-rnd spt-next-time 90 59 1) + (sp-launcher-by-id spt-next-launcher 660) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 660) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.21333334) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 658) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2)) + (sp-flt spt-num 0.4) + (sp-rnd-flt spt-x (meters 0.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 90.0 60.0 1.0) + (sp-rnd-flt spt-g 90.0 10.0 1.0) + (sp-rnd-flt spt-b 50.0 8.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-vel-y (meters 0.026666667)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a 0.32) + (sp-flt spt-accel-y -4.096) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 659) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2)) + (sp-flt spt-num 0.6) + (sp-rnd-flt spt-x (meters 0.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 45.0 30.0 1.0) + (sp-rnd-flt spt-g 45.0 5.0 1.0) + (sp-rnd-flt spt-b 25.0 4.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-vel-y (meters 0.026666667)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a 0.42666668) + (sp-flt spt-accel-y -4.096) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 657) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters 0.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.05) (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 75.0 45.0 1.0) + (sp-rnd-flt spt-g 75.0 10.0 1.0) + (sp-rnd-flt spt-b 40.0 6.0 1.0) + (sp-flt spt-a 96.0) + (sp-rnd-flt spt-vel-x (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.026666667) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-accel-y -4.096) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 661) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2)) + (sp-flt spt-num 0.1) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 90.0 60.0 1.0) + (sp-rnd-flt spt-g 90.0 10.0 1.0) + (sp-rnd-flt spt-b 50.0 8.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters 0.0033333334) (meters 0.00083333335) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a 0.21333334) + (sp-flt spt-accel-y -0.54613334) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 662) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 662) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.10666667) + (sp-end) + ) + ) + ) + +(defmethod TODO-RENAME-20 lurkerworm ((obj lurkerworm)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-! s5-0 (target-pos 0) (-> obj root-override trans)) + (set-target! (-> obj twister) (atan (-> s5-0 x) (-> s5-0 z))) + (TODO-RENAME-11 (-> obj twister)) + (let* + ((f0-5 (sqrtf (+ (* (-> s5-0 x) (-> s5-0 x)) (* (-> s5-0 z) (-> s5-0 z))))) + (f0-6 (atan (-> s5-0 y) f0-5)) + ) + (set! + (-> obj head-tilt) + (seek + (-> obj head-tilt) + f0-6 + (* 5461.3335 (-> *display* seconds-per-frame)) + ) + ) + ) + ) + (set! (-> obj head-tilt) (fmin 8192.0 (fmax -5461.3335 (-> obj head-tilt)))) + 0 + (none) + ) + +(defbehavior + lurkerworm-prebind-function lurkerworm + ((arg0 process) (arg1 int) (arg2 lurkerworm)) + (let ((v1-0 arg2) + (s5-0 (new 'stack-no-clear 'quaternion)) + (gp-0 (&-> arg0 stack 324)) + ) + (quaternion-axis-angle! s5-0 -1.0 0.0 0.0 (-> v1-0 head-tilt)) + (quaternion*! (the-as quaternion gp-0) (the-as quaternion gp-0) s5-0) + ) + 0 + (none) + ) + +(defun lurkerworm-joint-callback ((arg0 lurkerworm)) + (let ((a1-0 arg0)) + (TODO-RENAME-12 (-> a1-0 twister) a1-0) + ) + 0 + (none) + ) + +(defmethod particle-effect lurkerworm ((obj lurkerworm)) + (let + ((a2-0 + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 5)) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 661) + a2-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (let + ((a2-1 + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 6)) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 661) + a2-1 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (let + ((a2-2 + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 7)) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 661) + a2-2 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (let + ((a2-3 + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 8)) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 661) + a2-3 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + 0 + (none) + ) + +(defbehavior + lurkerworm-default-event-handler lurkerworm + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (-> arg3 param 1) + (go lurkerworm-die) + ) + (('touch) + (if + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> self root-override) + (the-as uint 1) + ) + (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + ) + ) + ) + ) + +(defbehavior lurkerworm-default-post-behavior lurkerworm () + (TODO-RENAME-20 self) + (transform-post) + 0 + (none) + ) + +lurkerworm-default-event-handler + +lurkerworm-default-post-behavior + +(defstate lurkerworm-idle (lurkerworm) + :event + lurkerworm-default-event-handler + :enter + (behavior () + (ja-channel-set! 0) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :code + (behavior () + (while #t + (if + (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + *target* + (>= + 81920.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go lurkerworm-spot) + ) + (suspend) + ) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +(defstate lurkerworm-spot (lurkerworm) + :event + lurkerworm-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (sound-play-by-name + (static-sound-name "worm-rise1") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (none) + ) + :code + (behavior () + (set! (-> self part local-clock) 0) + (while #t + (spawn (-> self part) (-> self root-override trans)) + (particle-effect self) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (if + (and + *target* + (>= + 81920.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go lurkerworm-rise) + (go lurkerworm-idle) + ) + ) + (suspend) + ) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +(defstate lurkerworm-rise (lurkerworm) + :event + lurkerworm-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :code + (behavior () + (ja-channel-set! 1) + (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) + (spawn (-> self part) (-> self root-override trans)) + (particle-effect self) + (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! + ) + ) + ) + (set! (-> self strike-count) 3) + (go lurkerworm-rest) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +(defstate lurkerworm-rest (lurkerworm) + :event + lurkerworm-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self vulnerable) #t) + (none) + ) + :exit + (behavior () + (set! (-> self vulnerable) #f) + (none) + ) + :code + (behavior () + (let* ((f30-0 10.0) + (f28-0 100.0) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (s5-0 (the int (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2)))))) + (gp-1 (nonzero? (-> self strike-count))) + ) + (if gp-1 + (+! (-> self strike-count) -1) + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + 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 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (particle-effect self) + (when gp-1 + (let* ((f0-13 (- 1.0 (* 0.00009765625 (+ -16384.0 (if *target* + (vector-vector-distance + (-> + self + root-override + trans + ) + (-> + *target* + control + trans + ) + ) + 4096000.0 + ) + ) + ) + ) + ) + (f30-2 (* 0.2 f0-13)) + (v1-31 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-32 (the-as number (logior #x3f800000 v1-31))) + ) + (if (< (+ -1.0 (the-as float v1-32)) f30-2) + (go lurkerworm-strike) + ) + ) + ) + (+! s5-0 -1) + (when (zero? s5-0) + (if gp-1 + (go lurkerworm-strike) + (go lurkerworm-sink) + ) + ) + (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! + ) + ) + ) + (if gp-1 + (go lurkerworm-strike) + (go lurkerworm-sink) + ) + ) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +(defstate lurkerworm-strike (lurkerworm) + :event + lurkerworm-default-event-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 40) + (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 13.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) + (ja-blend-eval) + (particle-effect self) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 13.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! + ) + ) + ) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 param 0) + (the float (+ (-> a0-8 frame-group data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 40) + (go lurkerworm-rest) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +(defstate lurkerworm-sink (lurkerworm) + :event + lurkerworm-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :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 5)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + 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 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (spawn (-> self part2) (-> self root-override trans)) + (particle-effect self) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go lurkerworm-idle) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +(defstate lurkerworm-die (lurkerworm) + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerworm) + process-drawable-death-event-handler + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((v1-3 (-> self root-override root-prim))) + (set! (-> v1-3 collide-with) (the-as uint 0)) + (set! (-> v1-3 prim-core collide-as) (the-as uint 0)) + ) + 0 + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + 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 7)) + 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! + ) + ) + ) + (dummy-18 self) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +(defmethod copy-defaults! lurkerworm ((obj lurkerworm) (arg0 res-lump)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let + ((s4-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 6) 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-vector! (-> s3-0 local-sphere) 0.0 10240.0 0.0 24576.0) + (dummy-46 s4-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 3) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 5) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (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 action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 6) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (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 action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 7) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 1)) + (set! (-> s2-4 prim-core offense) 4) + (set! (-> s2-4 transform-index) 8) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core offense) 2) + (set! (-> s2-5 transform-index) 11) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 6144.0) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lurkerworm-sg* '()) + (set! + (-> obj fact) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! (-> obj angle) 0.0) + (set! (-> obj vulnerable) #f) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 157) obj) + ) + (set! + (-> obj part2) + (create-launch-control (-> *part-group-id-table* 158) obj) + ) + (set! + (-> obj twister) + (new 'process 'twister 3 15 1092.2667 72.81778 0.25 0.001) + ) + (TODO-RENAME-9 (-> obj twister) 3 9 910.2222) + (set! (-> obj head-tilt) 0.0) + (set! + (-> obj skel prebind-function) + (the-as + (function pointer int process-drawable none) + lurkerworm-prebind-function + ) + ) + (set! + (-> obj skel postbind-function) + (the-as + (function pointer int process-drawable none) + lurkerworm-joint-callback + ) + ) + (set! (-> obj root-override nav-radius) 12288.0) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (go lurkerworm-idle) + (none) + ) + + + + diff --git a/goal_src/levels/beach/twister.gc b/goal_src/levels/beach/twister.gc index 6e34a02d46..117450fcea 100644 --- a/goal_src/levels/beach/twister.gc +++ b/goal_src/levels/beach/twister.gc @@ -5,7 +5,8 @@ ;; name in dgo: twister ;; dgos: BEA, L1 -;; definition of type twist-joint +;; DECOMP BEGINS + (deftype twist-joint (structure) ((ry float :offset-assert 0) (max-dry float :offset-assert 4) @@ -15,7 +16,7 @@ :flag-assert #x900000008 ) -;; definition of type twister + (deftype twister (basic) ((num-joints int32 :offset-assert 4) (first-joint int32 :offset-assert 8) @@ -33,7 +34,7 @@ :size-assert #x28 :flag-assert #xd00000028 (:methods - (new (symbol _type_ int int float float float float) _type_ 0) + (new (symbol type int int float float float float) _type_ 0) (TODO-RENAME-9 (_type_ int int float) none 9) (set-target! (_type_ float) none 10) (TODO-RENAME-11 (_type_) none 11) @@ -41,12 +42,12 @@ ) ) -;; definition for method 0 of type twister + (defmethod new twister ((allocation symbol) - (type-to-make twister) + (type-to-make type) (arg0 int) (arg1 int) (arg2 float) @@ -58,8 +59,8 @@ (v0-0 (object-new allocation - (the-as type type-to-make) - (the-as int (+ (-> type-to-make something) (* gp-0 16))) + type-to-make + (the-as int (+ (-> type-to-make size) (* gp-0 16))) ) ) ) @@ -80,13 +81,10 @@ ) ) -;; definition for method 5 of type twister (defmethod asize-of twister ((obj twister)) (+ (* (-> obj num-joints) 16) 40) ) -;; definition for method 9 of type twister -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-9 twister @@ -103,16 +101,12 @@ (none) ) -;; definition for method 10 of type twister -;; INFO: Return type mismatch int vs none. (defmethod set-target! twister ((obj twister) (arg0 float)) (set! (-> obj target) arg0) 0 (none) ) -;; definition for method 11 of type twister -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-11 twister ((obj twister)) (let* ((s5-0 (+ (-> obj num-joints) -1)) (s4-0 (-> obj data s5-0)) @@ -176,8 +170,6 @@ (none) ) -;; definition for method 12 of type twister -;; INFO: Return type mismatch int vs none. (defmethod TODO-RENAME-12 twister ((obj twister) (arg0 process-drawable)) (let ((s4-0 (new 'stack-no-clear 'matrix))) (dotimes (s3-0 (-> obj num-joints)) @@ -196,3 +188,7 @@ 0 (none) ) + + + + diff --git a/goal_src/levels/citadel/citadel-sages.gc b/goal_src/levels/citadel/citadel-sages.gc index f1438e0c13..7882899e61 100644 --- a/goal_src/levels/citadel/citadel-sages.gc +++ b/goal_src/levels/citadel/citadel-sages.gc @@ -5,3 +5,1788 @@ ;; name in dgo: citadel-sages ;; dgos: CIT, L1 +(define-extern *citb-sagecage-sg* skeleton-group) + +(define-extern *green-sagecage-sg* skeleton-group) +(define-extern *robotboss-sg* skeleton-group) +(define-extern *evilbro-citadel-sg* skeleton-group) +(define-extern *evilsis-citadel-sg* skeleton-group) +(define-extern *yellowsage-sg* skeleton-group) +(define-extern *bluesage-sg* skeleton-group) +(define-extern *redsage-sg* skeleton-group) + +(declare-type citb-sage process-taskable) +(declare-type robotboss process-drawable) + +;; DECOMP BEGINS + +(defskelgroup *citb-sagecage-sg* citb-sagecage + 0 + 4 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -6 0 7) + :longest-edge (meters 0) + ) + +(deftype citb-sagecage (process-drawable) + ((parent-override (pointer citb-sage) :offset 12) + (root-override collide-shape-moving :offset 112) + (bar-array vector 12 :inline :offset-assert 176) + (angle-offset float :offset-assert 368) + (bars-on symbol :offset-assert 372) + (cloning symbol :offset-assert 376) + ) + :heap-base #x110 + :method-count-assert 22 + :size-assert #x17c + :flag-assert #x160110017c + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) none 21) + ) + (:states + citb-sagecage-idle + ) + ) + + +(defbehavior citb-sagecage-draw-bars citb-sagecage () + (when (logtest? (-> self draw status) 8) + (let ((gp-0 (-> self node-list data 3 bone transform)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (matrix->quaternion (the-as quaternion s4-0) gp-0) + (vector-! s3-0 (camera-pos) (-> self root-override trans)) + (let ((v1-7 (-> gp-0 vector 2))) + (set! (-> self angle-offset) (- (atan (-> v1-7 x) (-> v1-7 z)))) + ) + (quaternion-rotate-local-x! + (the-as quaternion s4-0) + (the-as quaternion s4-0) + 16384.0 + ) + (let ((f0-7 (+ (-> self angle-offset) (atan (-> s3-0 x) (-> s3-0 z))))) + (quaternion-rotate-local-z! + (the-as quaternion s4-0) + (the-as quaternion s4-0) + f0-7 + ) + ) + ) + (quaternion-copy! *particle-quat* (the-as quaternion s4-0)) + ) + (let ((s4-1 (-> *part-id-table* 2473)) + (s3-1 *sp-particle-system-3d*) + ) + (dotimes (s2-2 12) + (vector-matrix*! s5-0 (-> self bar-array s2-2) gp-0) + (sp-launch-particles-var + s3-1 + s4-1 + s5-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + ) + ) + 0 + (none) + ) + +(defbehavior citb-sagecage-update-collision citb-sagecage () + (dummy-28 + (the-as collide-shape-prim-mesh (-> self root-override root-prim)) + (if (-> self bars-on) + 0 + 1 + ) + ) + 0 + (none) + ) + +(defstate citb-sagecage-idle (citb-sagecage) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-3 none)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'disable-bars) + (stop! (-> self sound)) + (sound-play-by-name + (static-sound-name "sagecage-off") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (set! (-> self bars-on) #f) + (citb-sagecage-update-collision) + ) + ((= v1-0 'enable-bars) + (set! (-> self bars-on) #t) + (citb-sagecage-update-collision) + ) + ((= v1-0 'start-cloning) + (set! v0-3 (the-as none #t)) + (set! (-> self cloning) (the-as symbol v0-3)) + v0-3 + ) + ((= v1-0 'stop-cloning) + (set! (-> self cloning) #f) + (let ((v1-7 (-> self skel root-channel 0))) + (set! v0-3 (the-as none (-> self draw art-group data 3))) + (set! (-> v1-7 frame-group) (the-as art-joint-anim v0-3)) + ) + v0-3 + ) + ) + ) + ) + ) + :trans + (the-as (function none :behavior citb-sagecage) rider-trans) + :code + (behavior () + (while #t + (cond + ((-> self cloning) + (let ((gp-0 (ppointer->process (-> self parent-override)))) + (when gp-0 + (joint-control-copy! (-> self skel) (-> (the-as citb-sage gp-0) skel)) + (joint-control-remap! + (-> self skel) + (-> self draw art-group) + (-> (the-as citb-sage gp-0) draw art-group) + '() + 0 + "" + ) + ) + ) + ) + (else + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (behavior () + (rider-post) + (when (-> self bars-on) + (update! (-> self sound)) + (citb-sagecage-draw-bars) + ) + (none) + ) + ) + +(defmethod dummy-20 citb-sagecage ((obj citb-sagecage)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (dummy-29 s5-0 1) + (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 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) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 20480.0 0.0 28672.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +(defmethod dummy-21 citb-sagecage ((obj citb-sagecage)) + (initialize-skeleton obj *citb-sagecage-sg* '()) + (logior! (-> obj skel status) 1) + (set! (-> obj root-override pause-adjust-distance) 409600.0) + (let ((f0-1 20766.72) + (f4-0 14745.6) + (f1-0 -14745.6) + (f2-0 7372.8) + ) + (let ((f3-0 -7372.8)) + (set-vector! (-> obj bar-array 0) f4-0 f0-1 f3-0 1.0) + (set-vector! (-> obj bar-array 1) f4-0 f0-1 0.0 1.0) + (set-vector! (-> obj bar-array 2) f4-0 f0-1 f2-0 1.0) + (set-vector! (-> obj bar-array 3) f1-0 f0-1 f3-0 1.0) + (set-vector! (-> obj bar-array 4) f1-0 f0-1 0.0 1.0) + (set-vector! (-> obj bar-array 5) f1-0 f0-1 f2-0 1.0) + (set-vector! (-> obj bar-array 6) f3-0 f0-1 f4-0 1.0) + (set-vector! (-> obj bar-array 7) 0.0 f0-1 f4-0 1.0) + (set-vector! (-> obj bar-array 8) f2-0 f0-1 f4-0 1.0) + (set-vector! (-> obj bar-array 9) f3-0 f0-1 f1-0 1.0) + ) + (set-vector! (-> obj bar-array 10) 0.0 f0-1 f1-0 1.0) + (set-vector! (-> obj bar-array 11) f2-0 f0-1 f1-0 1.0) + ) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "sagecage-gen") + :volume #x400 + :fo-max 20 + ) + (-> obj root-override trans) + ) + ) + (set! + (-> obj bars-on) + (not (task-complete? *game-info* (-> obj entity extra perm task))) + ) + (citb-sagecage-update-collision) + (set! (-> obj cloning) #t) + (set! (-> obj event-hook) (-> citb-sagecage-idle event)) + 0 + (none) + ) + +(defbehavior citb-sagecage-init-by-other citb-sagecage ((arg0 citb-sage)) + (dummy-20 self) + (mem-copy! + (the-as pointer (-> self root-override trans)) + (the-as pointer (-> arg0 root-override trans)) + 16 + ) + (mem-copy! + (the-as pointer (-> self root-override quat)) + (the-as pointer (-> arg0 root-override quat)) + 16 + ) + (mem-copy! + (the-as pointer (-> self root-override scale)) + (the-as pointer (-> arg0 root-override scale)) + 16 + ) + (dummy-21 self) + (go citb-sagecage-idle) + (none) + ) + +(defskelgroup *redsage-sg* redsage + 0 + 4 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + :shadow 3 + ) + +(defskelgroup *bluesage-sg* bluesage + 0 + 4 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + :shadow 3 + ) + +(defskelgroup *yellowsage-sg* yellowsage + 0 + 4 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + :shadow 3 + ) + +(defskelgroup *green-sagecage-sg* green-sagecage + 0 + 4 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 2.5) + :longest-edge (meters 0) + :shadow 3 + ) + +(defskelgroup *evilbro-citadel-sg* evilbro-citadel + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 1) + :longest-edge (meters 0) + :shadow 2 + ) + +(defskelgroup *evilsis-citadel-sg* evilsis-citadel + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 1) + :longest-edge (meters 0) + :shadow 2 + ) + +(deftype citb-sage (process-taskable) + ((spawn-pos vector :inline :offset-assert 384) + (target-pos vector :inline :offset-assert 400) + (dir vector :inline :offset-assert 416) + (rot-y float :offset-assert 432) + (rot-x float :offset-assert 436) + (idle-anim int32 :offset-assert 440) + (attack-start-anim int32 :offset-assert 444) + (attack-anim int32 :offset-assert 448) + (beam-joint int32 :offset-assert 452) + (cage handle :offset-assert 456) + (part-impact sparticle-launch-control :offset-assert 464) + (beam-on symbol :offset-assert 468) + (resolution-anim spool-anim :offset-assert 472) + (sound-name string :offset-assert 476) + (sound-id sound-id :offset-assert 480) + (alt-actor entity-actor :offset-assert 484) + ) + :heap-base #x180 + :method-count-assert 53 + :size-assert #x1e8 + :flag-assert #x35018001e8 + ) + + +(defmethod relocate citb-sage ((obj citb-sage) (arg0 int)) + (if (nonzero? (-> obj part-impact)) + (&+! (-> obj part-impact) arg0) + ) + (the-as citb-sage ((method-of-type process-taskable relocate) obj arg0)) + ) + +(defmethod deactivate citb-sage ((obj citb-sage)) + (if (nonzero? (-> obj part-impact)) + (kill-and-free-particles (-> obj part-impact)) + ) + (sound-stop (-> obj sound-id)) + ((method-of-type process-taskable deactivate) obj) + (none) + ) + +(defmethod play-reminder citb-sage ((obj citb-sage)) + (set! (-> obj root-override pause-adjust-distance) 409600.0) + (let ((s5-0 (get-process *default-dead-pool* citb-sagecage #x4000))) + (set! (-> obj cage) (ppointer->handle (when s5-0 + (let + ((t9-1 + (method-of-type + citb-sagecage + activate + ) + ) + ) + (t9-1 + (the-as citb-sagecage s5-0) + obj + 'citb-sagecage + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + citb-sagecage-init-by-other + obj + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + (set! (-> obj beam-on) #f) + (set! (-> obj sound-id) (new-sound-id)) + (if (zero? (-> obj sound-name)) + (set! (-> obj sound-name) "") + ) + (let + ((v1-9 (the-as entity (entity-actor-lookup (-> obj entity) 'alt-actor 0))) + (s5-1 (new 'stack-no-clear 'vector)) + ) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (if (not (the-as entity-actor v1-9)) + (set! v1-9 (entity-by-name "citb-robotboss-1")) + ) + (set! (-> obj alt-actor) (the-as entity-actor v1-9)) + (set! (-> obj spawn-pos quad) (-> obj root-override trans quad)) + (set! (-> s5-1 quad) (-> v1-9 extra trans quad)) + (set! (-> s5-1 y) (+ 81920.0 (-> s5-1 y))) + (vector-! s4-0 (-> obj spawn-pos) s5-1) + (set! (-> s4-0 y) 0.0) + (vector-normalize! s4-0 1.0) + (vector+*! (-> obj target-pos) s5-1 s4-0 116940.8) + ) + (when (nonzero? (-> obj part)) + (vector-! s5-1 (-> obj target-pos) (-> obj spawn-pos)) + (vector-float*! (the-as vector (-> obj part group bounds)) s5-1 0.5) + (set! + (-> obj part group bounds w) + (* 0.6 (vector-vector-distance (-> obj spawn-pos) (-> obj target-pos))) + ) + ) + ) + (the-as symbol 0) + ) + +(defmethod dummy-45 citb-sage ((obj citb-sage)) + (set! (-> obj spawn-pos quad) (-> obj root-override trans quad)) + 0 + (none) + ) + +(defmethod dummy-42 citb-sage ((obj citb-sage)) + (if (not (should-display? obj)) + (go (method-of-object obj hidden)) + (go (method-of-object obj idle)) + ) + (none) + ) + +(defmethod play-anim! citb-sage ((obj citb-sage) (arg0 symbol)) + (the-as basic (-> obj resolution-anim)) + ) + +(defmethod get-art-elem citb-sage ((obj citb-sage)) + (cond + ((= (current-status (-> obj tasks)) (task-status invalid)) + (set! (-> obj beam-on) #t) + (-> obj draw art-group data (-> obj attack-anim)) + ) + (else + (-> obj draw art-group data (-> obj idle-anim)) + ) + ) + ) + +(defmethod should-display? citb-sage ((obj citb-sage)) + (!= (get-task-status (game-task citadel-sage-green)) (task-status invalid)) + ) + +(defstate hidden (citb-sage) + :virtual #t + :enter + (behavior () + (send-event (handle->process (-> self cage)) 'disable-bars) + (send-event (handle->process (-> self cage)) 'stop-cloning) + ((-> (method-of-type process-taskable hidden) enter)) + (none) + ) + ) + +(defbehavior citb-sage-draw-beam citb-sage () + (if (< (vector-vector-distance (ear-trans) (-> self spawn-pos)) 409600.0) + (sound-play-by-name + (string->sound-name (-> self sound-name)) + (-> self sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self spawn-pos)) + ) + ) + (set! + (-> self spawn-pos quad) + (-> self node-list data (-> self beam-joint) bone transform vector 3 quad) + ) + (vector-! (-> self dir) (-> self target-pos) (-> self spawn-pos)) + (set! (-> self rot-y) (vector-y-angle (-> self dir))) + (set! (-> self rot-x) (- 16384.0 (vector-x-angle (-> self dir)))) + (dummy-45 self) + (spawn (-> self part) (-> self spawn-pos)) + (spawn (-> self part-impact) (-> self target-pos)) + ) + +(defstate play-anim (citb-sage) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('disable-bars) + (send-event (handle->process (-> self cage)) 'disable-bars) + ) + (else + ((-> (method-of-type process-taskable play-anim) event) + arg0 + arg1 + arg2 + arg3 + ) + ) + ) + ) + ) + +(defstate idle (citb-sage) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('open) + (send-event (handle->process (-> self cage)) 'disable-bars) + ) + (else + ((-> (method-of-type process-taskable idle) event) arg0 arg1 arg2 arg3) + ) + ) + ) + :trans + (behavior () + (if (not (should-display? self)) + (go-virtual hidden) + ) + ((-> (method-of-type process-taskable idle) trans)) + (none) + ) + :post + (behavior () + ((the-as + (function none :behavior citb-sage) + (-> (method-of-type process-taskable idle) post) + ) + ) + (if (-> self beam-on) + (citb-sage-draw-beam) + ) + (none) + ) + ) + +(deftype red-sagecage (citb-sage) + () + :heap-base #x180 + :method-count-assert 53 + :size-assert #x1e8 + :flag-assert #x35018001e8 + ) + + +(defmethod dummy-52 red-sagecage ((obj red-sagecage)) + (let ((v1-1 (-> obj draw shadow-ctrl))) + (when v1-1 + (let ((a0-1 v1-1)) + (set! (-> a0-1 settings bot-plane w) (- -8192.0)) + ) + 0 + (let ((a0-3 v1-1)) + (set! (-> a0-3 settings top-plane w) (- 4096.0)) + ) + 0 + (set! (-> v1-1 settings flags) (logand -13 (-> v1-1 settings flags))) + ) + ) + (none) + ) + +(defmethod draw-npc-shadow red-sagecage ((obj red-sagecage)) + (-> obj draw shadow-ctrl) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +(defmethod dummy-45 red-sagecage ((obj red-sagecage)) + (set! (-> *part-id-table* 2455 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2455 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2457 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2457 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2454 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2454 init-specs 13 initial-valuef) (-> obj rot-x)) + 0 + (none) + ) + +(defmethod play-reminder red-sagecage ((obj red-sagecage)) + (set! (-> obj idle-anim) 4) + (set! (-> obj attack-start-anim) 5) + (set! (-> obj attack-anim) 6) + (set! (-> obj beam-joint) 20) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 604) obj) + ) + (set! + (-> obj part-impact) + (create-launch-control (-> *part-group-id-table* 608) obj) + ) + (set! + (-> obj resolution-anim) + (new 'static 'spool-anim + :name "redsage-resolution" + :index 7 + :parts 9 + :command-list + '( + ((the binteger 15) + send-event + self + disable-bars + ) + ((the binteger 45) + joint + "cameraB" + ) + ((the binteger 216) + joint + "camera" + ) + ((the binteger 435) joint "cameraB") ((the binteger 685) joint "camera") + ) + ) + ) + (set! (-> obj sound-name) "redsage-fires") + ((the-as (function citb-sage none) (find-parent-method red-sagecage 44)) obj) + (the-as symbol 0) + ) + +(defmethod TODO-RENAME-43 red-sagecage ((obj red-sagecage)) + (if (-> obj beam-on) + (return #f) + ) + (when + (TODO-RENAME-10 + (-> obj ambient) + (new 'stack-no-clear 'vector) + 9000 + 122880.0 + obj + ) + (let* ((v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + (f0-2 (+ -1.0 (the-as float v1-7))) + ) + (cond + ((< 0.6666667 f0-2) + (play-ambient (-> obj ambient) "RED-AM01" #f (-> obj root-override trans)) + ) + ((< 0.33333334 f0-2) + (play-ambient (-> obj ambient) "RED-AM02" #f (-> obj root-override trans)) + ) + (else + (play-ambient (-> obj ambient) "RED-AM03" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +(defmethod copy-defaults! red-sagecage ((obj red-sagecage) (arg0 res-lump)) + (dummy-40 obj arg0 *redsage-sg* 3 33 (new 'static 'vector :w 8192.0) 5) + (set! (-> obj tasks) (get-task-control (-> obj entity extra perm task))) + (play-reminder obj) + (set! (-> obj sound-flava) (the-as uint 12)) + (dummy-42 obj) + (none) + ) + +(deftype blue-sagecage (citb-sage) + () + :heap-base #x180 + :method-count-assert 53 + :size-assert #x1e8 + :flag-assert #x35018001e8 + ) + + +(defmethod dummy-52 blue-sagecage ((obj blue-sagecage)) + (let ((v1-1 (-> obj draw shadow-ctrl))) + (when v1-1 + (let ((a0-1 v1-1)) + (set! (-> a0-1 settings bot-plane w) (- -10035.2)) + ) + 0 + (let ((a0-3 v1-1)) + (set! (-> a0-3 settings top-plane w) (- 4096.0)) + ) + 0 + (set! (-> v1-1 settings flags) (logand -13 (-> v1-1 settings flags))) + ) + ) + (none) + ) + +(defmethod draw-npc-shadow blue-sagecage ((obj blue-sagecage)) + (-> obj draw shadow-ctrl) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +(defmethod dummy-45 blue-sagecage ((obj blue-sagecage)) + (set! (-> *part-id-table* 2448 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2448 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2450 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2450 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2447 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2447 init-specs 13 initial-valuef) (-> obj rot-x)) + 0 + (none) + ) + +(defmethod play-reminder blue-sagecage ((obj blue-sagecage)) + (set! (-> obj idle-anim) 4) + (set! (-> obj attack-start-anim) 5) + (set! (-> obj attack-anim) 6) + (set! (-> obj beam-joint) 53) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 603) obj) + ) + (set! + (-> obj part-impact) + (create-launch-control (-> *part-group-id-table* 607) obj) + ) + (set! + (-> obj resolution-anim) + (new 'static 'spool-anim + :name "bluesage-resolution" + :index 7 + :parts 9 + :command-list + '( + ((the binteger 15) + send-event + self + disable-bars + ) + ((the binteger 45) + joint + "cameraB" + ) + ((the binteger 74) + shadow + self + #f + ) + ((the binteger 185) + joint + "camera" + ) + ((the binteger 256) + joint + "cameraB" + ) + ((the binteger 505) + joint + "camera" + ) + ((the binteger 590) + joint + "cameraB" + ) + ((the binteger 670) + joint + "camera" + ) + ((the binteger 875) shadow self #t) ((the binteger 876) joint "cameraB") + ) + ) + ) + (set! (-> obj sound-name) "bluesage-fires") + ((the-as (function citb-sage none) (find-parent-method blue-sagecage 44)) obj) + (the-as symbol 0) + ) + +(defmethod TODO-RENAME-43 blue-sagecage ((obj blue-sagecage)) + (if (-> obj beam-on) + (return #f) + ) + (when + (TODO-RENAME-10 + (-> obj ambient) + (new 'stack-no-clear 'vector) + 9000 + 122880.0 + obj + ) + (let* ((v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + (f0-2 (+ -1.0 (the-as float v1-7))) + ) + (cond + ((< 0.6666667 f0-2) + (play-ambient (-> obj ambient) "BLU-AM01" #f (-> obj root-override trans)) + ) + ((< 0.33333334 f0-2) + (play-ambient (-> obj ambient) "BLU-AM02" #f (-> obj root-override trans)) + ) + (else + (play-ambient (-> obj ambient) "BLU-AM03" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +(defmethod copy-defaults! blue-sagecage ((obj blue-sagecage) (arg0 res-lump)) + (dummy-40 obj arg0 *bluesage-sg* 3 54 (new 'static 'vector :w 8192.0) 5) + (set! (-> obj tasks) (get-task-control (-> obj entity extra perm task))) + (play-reminder obj) + (set! (-> obj sound-flava) (the-as uint 13)) + (dummy-42 obj) + (none) + ) + +(deftype yellow-sagecage (citb-sage) + () + :heap-base #x180 + :method-count-assert 53 + :size-assert #x1e8 + :flag-assert #x35018001e8 + ) + + +(defmethod dummy-52 yellow-sagecage ((obj yellow-sagecage)) + (let ((v1-1 (-> obj draw shadow-ctrl))) + (when v1-1 + (let ((a0-1 v1-1)) + (set! (-> a0-1 settings bot-plane w) (- -6144.0)) + ) + 0 + (let ((a0-3 v1-1)) + (set! (-> a0-3 settings top-plane w) (- 4096.0)) + ) + 0 + (set! (-> v1-1 settings flags) (logand -13 (-> v1-1 settings flags))) + ) + ) + (none) + ) + +(defmethod draw-npc-shadow yellow-sagecage ((obj yellow-sagecage)) + (-> obj draw shadow-ctrl) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +(defmethod dummy-45 yellow-sagecage ((obj yellow-sagecage)) + (set! (-> *part-id-table* 2462 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2462 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2464 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2464 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2461 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2461 init-specs 13 initial-valuef) (-> obj rot-x)) + 0 + (none) + ) + +(defmethod play-reminder yellow-sagecage ((obj yellow-sagecage)) + (set! (-> obj idle-anim) 4) + (set! (-> obj attack-start-anim) 5) + (set! (-> obj attack-anim) 6) + (set! (-> obj beam-joint) 74) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 605) obj) + ) + (set! + (-> obj part-impact) + (create-launch-control (-> *part-group-id-table* 609) obj) + ) + (set! + (-> obj resolution-anim) + (new 'static 'spool-anim + :name "yellowsage-resolution" + :index 7 + :parts 6 + :command-list + '( + ((the binteger 15) + send-event + self + disable-bars + ) + ((the binteger 45) + joint + "cameraB" + ) + ((the binteger 256) + joint + "camera" + ) + ((the binteger 314) joint "cameraB") ((the binteger 600) joint "camera") + ) + ) + ) + (set! (-> obj sound-name) "yellsage-fire") + ((the-as (function citb-sage none) (find-parent-method yellow-sagecage 44)) + obj + ) + (the-as symbol 0) + ) + +(defmethod TODO-RENAME-43 yellow-sagecage ((obj yellow-sagecage)) + (if (-> obj beam-on) + (return #f) + ) + (when + (TODO-RENAME-10 + (-> obj ambient) + (new 'stack-no-clear 'vector) + 9000 + 122880.0 + obj + ) + (let* ((v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + (f0-2 (+ -1.0 (the-as float v1-7))) + ) + (cond + ((< 0.6666667 f0-2) + (play-ambient (-> obj ambient) "YEL-AM01" #f (-> obj root-override trans)) + ) + ((< 0.33333334 f0-2) + (play-ambient (-> obj ambient) "YEL-AM02" #f (-> obj root-override trans)) + ) + (else + (play-ambient (-> obj ambient) "YEL-AM03" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +(defmethod copy-defaults! yellow-sagecage ((obj yellow-sagecage) (arg0 res-lump)) + (dummy-40 obj arg0 *yellowsage-sg* 3 50 (new 'static 'vector :w 8192.0) 5) + (set! (-> obj tasks) (get-task-control (-> obj entity extra perm task))) + (play-reminder obj) + (set! (-> obj sound-flava) (the-as uint 11)) + (dummy-42 obj) + (none) + ) + +(deftype green-sagecage (citb-sage) + ((which-movie int32 :offset-assert 488) + (evilbro handle :offset-assert 496) + (evilsis handle :offset-assert 504) + (robotboss handle :offset-assert 512) + (exitplat handle :offset-assert 520) + ) + :heap-base #x1a0 + :method-count-assert 53 + :size-assert #x210 + :flag-assert #x3501a00210 + ) + + +(defmethod dummy-45 green-sagecage ((obj green-sagecage)) + (set! (-> *part-id-table* 2469 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2469 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2471 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2471 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2468 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2468 init-specs 13 initial-valuef) (-> obj rot-x)) + 0 + (none) + ) + +(defmethod play-reminder green-sagecage ((obj green-sagecage)) + (set! (-> obj idle-anim) 4) + (set! (-> obj attack-start-anim) 4) + (set! (-> obj attack-anim) 4) + (set! (-> obj beam-joint) 22) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 606) obj) + ) + (set! + (-> obj part-impact) + (create-launch-control (-> *part-group-id-table* 610) obj) + ) + (set! + (-> obj resolution-anim) + (new 'static 'spool-anim + :name "green-sagecage-resolution" + :index 6 + :parts 12 + :command-list + '( + ((the binteger 33) + joint + "cameraB" + ) + ((the binteger 156) + joint + "camera" + ) + ((the binteger 405) + joint + "cameraB" + ) + ((the binteger 576) + joint + "camera" + ) + ((the binteger 823) + joint + "cameraB" + ) + ((the binteger 1156) joint "camera") ((the binteger 1199) joint "cameraB") + ) + ) + ) + (set! (-> obj sound-name) "greensage-fires") + ((the-as (function citb-sage none) (find-parent-method green-sagecage 44)) + obj + ) + (the-as symbol 0) + ) + +(defmethod play-anim! green-sagecage ((obj green-sagecage) (arg0 symbol)) + (local-vars (v1-7 int)) + (let ((v1-1 (current-status (-> obj tasks)))) + (cond + ((= v1-1 (task-status need-hint)) + (when arg0 + (close-current! (-> obj tasks)) + (close-specific-task! + (game-task citadel-sage-blue) + (task-status need-hint) + ) + (close-specific-task! + (game-task citadel-sage-red) + (task-status need-hint) + ) + (close-specific-task! + (game-task citadel-sage-yellow) + (task-status need-hint) + ) + (set-continue! *game-info* "citadel-elevator") + ) + (new 'static 'spool-anim + :name "green-sagecage-introduction" + :index 5 + :parts 12 + :command-list + '( + ((the binteger 71) + joint + "cameraB" + ) + ((the binteger 207) + joint + "camera" + ) + ((the binteger 343) + joint + "cameraB" + ) + ((the binteger 574) + joint + "camera" + ) + ((the binteger 1060) + joint + "cameraB" + ) + ((the binteger 1061) send-event camera teleport) + ) + ) + ) + ((begin + (set! v1-7 (-> obj which-movie)) + (zero? v1-7) + ) + (when arg0 + (send-event (handle->process (-> obj cage)) 'disable-bars) + (+! (-> obj which-movie) 1) + (set! (-> obj draw bounds w) 40960.0) + ) + (-> obj resolution-anim) + ) + ((= v1-7 1) + (when arg0 + (+! (-> obj which-movie) 1) + (set! (-> obj draw bounds w) 40960.0) + (let ((s5-1 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj evilbro) (ppointer->handle (when s5-1 + (let + ((t9-8 + (method-of-type + manipy + activate + ) + ) + ) + (t9-8 + (the-as manipy s5-1) + obj + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + manipy-init + (-> obj root-override trans) + (-> obj entity) + *evilbro-citadel-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> obj evilbro)) 'anim-mode 'clone-anim) + (send-event (handle->process (-> obj evilbro)) 'blend-shape #t) + (send-event (handle->process (-> obj evilbro)) 'center-joint 3) + (let ((s5-2 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj evilsis) (ppointer->handle (when s5-2 + (let + ((t9-14 + (method-of-type + manipy + activate + ) + ) + ) + (t9-14 + (the-as manipy s5-2) + obj + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-2 + manipy-init + (-> obj root-override trans) + (-> obj entity) + *evilsis-citadel-sg* + #f + ) + (-> s5-2 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> obj evilsis)) 'anim-mode 'clone-anim) + (send-event (handle->process (-> obj evilsis)) 'blend-shape #t) + (send-event (handle->process (-> obj evilsis)) 'center-joint 3) + (if (handle->process (-> obj exitplat)) + (format 0 "exitplat activated~%") + ) + ) + (new 'static 'spool-anim + :name "green-sagecage-outro-preboss" + :index 7 + :parts 22 + :command-list + '( + (0 + blackout + 0 + ) + (0 + want-levels + citadel + finalboss + ) + (0 + display-level + finalboss + special + ) + (0 + send-event + "citb-robotboss-1" + 'die + ) + ((the binteger 335) + joint + "cameraB" + ) + ((the binteger 581) + joint + "camera" + ) + ((the binteger 696) + joint + "cameraB" + ) + ((the binteger 828) + joint + "camera" + ) + ((the binteger 1180) + joint + "cameraB" + ) + ((the binteger 1380) + send-event + self + 'spawn-robot + ) + ((the binteger 1382) + joint + "camera" + ) + ((the binteger 1382) + kill + "citb-disc-d-2" + ) + ((the binteger 1382) + kill + "citb-disc-c-4" + ) + ((the binteger 1382) + kill + "citb-disc-c-5" + ) + ((the binteger 1382) + kill + "citb-disc-c-6" + ) + ((the binteger 1382) + kill + "citb-disc-b-12" + ) + ((the binteger 1382) + kill + "citb-disc-b-13" + ) + ((the binteger 1382) + kill + "citb-disc-b-14" + ) + ((the binteger 1382) + kill + "citb-disc-a-11" + ) + ((the binteger 1382) + kill + "citb-disc-a-12" + ) + ((the binteger 1382) + kill + "citb-disc-a-13" + ) + ((the binteger 1382) + kill + "citb-disc-a-14" + ) + ((the binteger 1382) + kill + "citb-disc-a-15" + ) + ((the binteger 1382) + kill + "citb-disc-a-16" + ) + ((the binteger 1382) + kill + "citb-disc-b-21" + ) + ((the binteger 1382) + kill + "citb-button-28" + ) + ((the binteger 1382) + kill + "citb-button-32" + ) + ((the binteger 1382) + kill + "citb-generator-1" + ) + ((the binteger 1382) + kill + "citb-generator-2" + ) + ((the binteger 1382) + kill + "citb-generator-3" + ) + ((the binteger 1382) + kill + "citb-generator-4" + ) + ((the binteger 1382) + kill + "citb-iris-door-15" + ) + ((the binteger 1382) + kill + "citb-iris-door-16" + ) + ((the binteger 1382) + kill + "crate-2996" + ) + ((the binteger 1382) + kill + "crate-2997" + ) + ((the binteger 1382) + kill + "crate-2998" + ) + ((the binteger 1382) + kill + "crate-3000" + ) + ((the binteger 1382) + kill + "citb-plat-eco-1" + ) + ((the binteger 1382) + kill + "citb-plat-eco-2" + ) + ((the binteger 1382) + kill + "citb-plat-eco-3" + ) + ((the binteger 1382) + kill + "citb-stair-plat-1" + ) + ((the binteger 1382) + kill + "citb-stair-plat-2" + ) + ((the binteger 1382) + kill + "citb-stair-plat-3" + ) + ((the binteger 1382) + kill + "citb-stair-plat-4" + ) + ((the binteger 1382) + kill + "citb-stair-plat-5" + ) + ((the binteger 1382) + kill + "citb-stair-plat-6" + ) + ((the binteger 1382) + kill + "red-sagecage-1" + ) + ((the binteger 1382) + kill + "blue-sagecage-1" + ) + ((the binteger 1382) + kill + "yellow-sagecage-1" + ) + ((the binteger 1382) + kill + "babak-391" + ) + ((the binteger 1382) + kill + "citb-disc-c-10" + ) + ((the binteger 1382) + kill + "citb-iris-door-32" + ) + ((the binteger 1382) + kill + "citb-disc-b-18" + ) + ((the binteger 1382) + kill + "citb-disc-b-19" + ) + ((the binteger 1382) + kill + "citb-disc-b-20" + ) + ((the binteger 1382) + kill + "citb-iris-door-14" + ) + ((the binteger 1382) + kill + "orb-cache-top-32" + ) + ((the binteger 1382) + kill + "citb-disc-b-17" + ) + ((the binteger 1382) + kill + "citb-iris-door-13" + ) + ((the binteger 1382) + kill + "citb-button-39" + ) + ((the binteger 1382) + kill + "citb-button-40" + ) + ((the binteger 1382) + kill + "babak-392" + ) + ((the binteger 1382) + kill + "babak-393" + ) + ((the binteger 1382) + kill + "citb-button-33" + ) + ((the binteger 1382) + kill + "citb-button-34" + ) + ((the binteger 1382) + kill + "citb-drop-plat-365" + ) + ((the binteger 1382) + kill + "citb-drop-plat-366" + ) + ((the binteger 1382) + kill + "citb-drop-plat-367" + ) + ((the binteger 1382) + kill + "citb-iris-door-21" + ) + ((the binteger 1382) + kill + "assistant-lavatube-end-3" + ) + ((the binteger 1382) + kill + "babak-394" + ) + ((the binteger 1382) + kill + "babak-396" + ) + ((the binteger 1382) + kill + "citb-drop-plat-376" + ) + ((the binteger 1605) + joint + "cameraB" + ) + ((the binteger 1733) + kill + "citb-iris-door-2" + ) + ((the binteger 1736) joint "camera") + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string (current-status (-> obj tasks))) + ) + ) + (-> obj draw art-group data 4) + ) + ) + ) + ) + +(defstate play-anim (green-sagecage) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('spawn-robot) + (let ((gp-0 (entity-by-name "robotboss-3"))) + (format 0 "robotboss ent ~A~%" gp-0) + (when gp-0 + (let ((s5-0 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> self robotboss) (ppointer->handle (when s5-0 + (let + ((t9-3 + (method-of-type + manipy + activate + ) + ) + ) + (t9-3 + (the-as manipy s5-0) + self + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-0 + manipy-init + (-> + self + root-override + trans + ) + gp-0 + *robotboss-sg* + #f + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + (send-event + (handle->process (-> self robotboss)) + 'anim-mode + 'clone-anim + ) + (send-event (handle->process (-> self robotboss)) 'center-joint 3) + (send-event (handle->process (-> self robotboss)) 'origin-joint-index 3) + (let ((s5-1 (handle->process (-> self robotboss)))) + (when s5-1 + (format 0 "robotboss activated ent ~A~%" gp-0) + (let ((f0-0 327680.0)) + (set! (-> (the-as robotboss s5-1) draw bounds w) f0-0) + f0-0 + ) + ) + ) + ) + ) + ) + (else + ((-> (method-of-type citb-sage play-anim) event) arg0 arg1 arg2 arg3) + ) + ) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self evilbro)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((a0-5 (handle->process (-> self evilsis)))) + (if a0-5 + (deactivate a0-5) + ) + ) + (let ((a0-9 (handle->process (-> self robotboss)))) + (if a0-9 + (deactivate a0-9) + ) + ) + (let ((a0-13 (handle->process (-> self exitplat)))) + (if a0-13 + (deactivate a0-13) + ) + ) + (when (= (current-status (-> self tasks)) (task-status invalid)) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'shield-off) + (let ((t9-5 send-event-function) + (v1-28 (-> self alt-actor)) + ) + (t9-5 (if v1-28 + (-> v1-28 extra process) + ) + a1-4 + ) + ) + ) + ) + (cond + ((= (-> self which-movie) 1) + (set-blackout-frames #x7530) + ) + ((= (-> self which-movie) 2) + (start 'play (get-continue-by-name *game-info* "citadel-elevator")) + ) + ) + (set! (-> self draw bounds w) 10240.0) + ((-> (method-of-type process-taskable play-anim) exit)) + (none) + ) + :trans + (behavior () + (case (-> self which-movie) + ((1) + (spool-push *art-control* "green-sagecage-outro-preboss" 0 self -1.0) + (if (< 1200.0 (ja-aframe-num 0)) + (citb-sage-draw-beam) + ) + (when (< 1310.0 (ja-aframe-num 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) 'shield-off) + (let ((t9-4 send-event-function) + (v1-8 (-> self alt-actor)) + ) + (t9-4 (if v1-8 + (-> v1-8 extra process) + ) + a1-1 + ) + ) + ) + ) + ) + ) + ((-> (method-of-type process-taskable play-anim) trans)) + (none) + ) + ) + +(defmethod should-display? green-sagecage ((obj green-sagecage)) + (< (-> obj which-movie) 2) + ) + +(defstate idle (green-sagecage) + :virtual #t + :trans + (behavior () + (cond + ((and + *target* + (and + (< (-> (target-pos 0) z) -18821530.0) + (= (current-status (-> self tasks)) (task-status need-hint)) + ) + ) + (send-event self 'play-anim) + ) + ((= (-> self which-movie) 1) + (send-event self 'play-anim) + ) + ) + ((-> (method-of-type citb-sage idle) trans)) + (none) + ) + ) + +(defmethod copy-defaults! green-sagecage ((obj green-sagecage) (arg0 res-lump)) + (dummy-40 obj arg0 *green-sagecage-sg* 3 40 (new 'static 'vector :w 4096.0) 5) + (set! (-> obj tasks) (get-task-control (-> obj entity extra perm task))) + (play-reminder obj) + (set! (-> obj evilbro) (the-as handle #f)) + (set! (-> obj evilsis) (the-as handle #f)) + (set! (-> obj robotboss) (the-as handle #f)) + (set! (-> obj exitplat) (the-as handle #f)) + (cond + ((= (current-status (-> obj tasks)) (task-status invalid)) + (set! (-> obj which-movie) 2) + ) + (else + (set! (-> obj which-movie) 0) + 0 + ) + ) + (set! (-> obj sound-flava) (the-as uint 5)) + (dummy-42 obj) + (none) + ) + + + + diff --git a/goal_src/levels/citadel/citb-bunny.gc b/goal_src/levels/citadel/citb-bunny.gc index 18e8086747..947207ac16 100644 --- a/goal_src/levels/citadel/citb-bunny.gc +++ b/goal_src/levels/citadel/citb-bunny.gc @@ -5,3 +5,156 @@ ;; name in dgo: citb-bunny ;; dgos: CIT, L1 +(define-extern *citb-bunny-sg* skeleton-group) + +;; DECOMP BEGINS + +(deftype citb-bunny (snow-bunny) + () + :heap-base #x190 + :method-count-assert 77 + :size-assert #x200 + :flag-assert #x4d01900200 + (:methods + (TODO-RENAME-48 (_type_ object) none :replace 48) + ) + ) + + +(defskelgroup *citb-bunny-sg* citb-bunny + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0.25 0 2) + :longest-edge (meters 0) + ) + +(define + *citb-bunny-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 3 + :walk-anim 3 + :turn-anim 3 + :notice-anim 7 + :run-anim 3 + :jump-anim 5 + :jump-land-anim 8 + :victory-anim 7 + :taunt-anim 7 + :die-anim 9 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 2880.0) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.1) + :walk-travel-speed (meters 4.0) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.5) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 1.2) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 130.0) + :stop-chase-distance (meters 150.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 31.0 + :jump-anim-start-frame 11.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.6 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.25) + :shadow-min-y (meters -3.5) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +(defmethod dummy-60 citb-bunny ((obj citb-bunny) (arg0 object)) + (initialize-skeleton obj *citb-bunny-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (the-as symbol 0) + ) + +(defmethod TODO-RENAME-48 citb-bunny ((obj citb-bunny) (arg0 object)) + (dummy-60 obj arg0) + (TODO-RENAME-45 obj *citb-bunny-nav-enemy-info*) + (set! + (-> obj draw shadow-ctrl settings flags) + (logand -9 (-> obj draw shadow-ctrl settings flags)) + ) + (cond + ((zero? (res-lump-value (-> obj entity) 'mode uint128)) + (set! (-> obj defense) (the-as uint 1)) + (set! (-> obj retreat-timeout) 5.0) + ) + (else + (set! (-> obj defense) (the-as uint 0)) + (set! (-> obj retreat-timeout) 0.1) + ) + ) + (set! + (-> obj last-nondangerous-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (set! (-> obj gnd-popup) 16384.0) + (set! (-> obj got-jump-event?) #f) + (set! (-> obj notice-land-anim) 8) + (set! (-> obj attack-anim) 4) + (set! (-> obj neck up) (the-as uint 1)) + (set! (-> obj neck nose) (the-as uint 2)) + (set! (-> obj neck ear) (the-as uint 0)) + (set! (-> obj patrol-rand-distraction) (+ (nav-enemy-rnd-int-count 5) 1)) + (set! (-> obj patrol-hop-failed?) #f) + (logclear! (-> obj mask) (process-mask actor-pause)) + 0 + (none) + ) + +(defmethod set-jump-height-factor! citb-bunny ((obj citb-bunny) (arg0 int)) + (let ((v1-0 arg0)) + (cond + ((zero? v1-0) + (set! (-> obj jump-anim) 6) + (set! (-> obj jump-height-min) 4096.0) + (let ((f0-1 0.6)) + (set! (-> obj jump-height-factor) f0-1) + f0-1 + ) + ) + ((= v1-0 1) + (set! (-> obj jump-anim) 5) + (set! (-> obj jump-height-min) 4096.0) + (let ((f0-3 0.6)) + (set! (-> obj jump-height-factor) f0-3) + f0-3 + ) + ) + ((= v1-0 2) + (set! (-> obj jump-anim) 5) + (set! (-> obj jump-height-min) 4096.0) + (let ((f0-5 0.4)) + (set! (-> obj jump-height-factor) f0-5) + f0-5 + ) + ) + ) + ) + ) + + + + diff --git a/goal_src/levels/common/joint-exploder.gc b/goal_src/levels/common/joint-exploder.gc index 0404dc8f10..5db76fc7d5 100644 --- a/goal_src/levels/common/joint-exploder.gc +++ b/goal_src/levels/common/joint-exploder.gc @@ -103,8 +103,8 @@ (dummy-24 (_type_) none 24) (dummy-25 () none 25) (dummy-26 (_type_) none 26) - (dummy-27 (_type_) none 27) - (dummy-28 () none 28) + (dummy-27 (_type_ joint-exploder-list) none 27) + (dummy-28 (_type_) none 28) ) ) diff --git a/goal_src/levels/common/nav-enemy-h.gc b/goal_src/levels/common/nav-enemy-h.gc index 04a1bdfc38..db2f7e45c5 100644 --- a/goal_src/levels/common/nav-enemy-h.gc +++ b/goal_src/levels/common/nav-enemy-h.gc @@ -141,11 +141,11 @@ (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) (dummy-55 (_type_) none 55) - (dummy-56 (_type_) none 56) - (dummy-57 (_type_) none 57) - (dummy-58 (_type_) none 58) + (set-jump-height-factor! (_type_ int) float 56) + (dummy-57 (_type_) vector 57) + (dummy-58 (_type_) vector 58) (TODO-RENAME-59 (_type_) none 59) - (dummy-60 (_type_) none 60) + (dummy-60 (_type_ object) symbol 60) (dummy-61 (_type_) none 61) (dummy-62 (_type_) none 62) (dummy-63 (_type_) none 63) @@ -156,7 +156,7 @@ (dummy-68 (_type_) none 68) (dummy-69 (_type_) none 69) (dummy-70 (_type_) none 70) - (dummy-71 (_type_) none 71) + (dummy-71 () _type_ :state 71) (nav-enemy-touch-handler (_type_ process event-message-block) object 72) (nav-enemy-attack-handler (_type_ process event-message-block) object 73) (nav-enemy-jump-blocked () _type_ :state 74) diff --git a/goal_src/levels/common/nav-enemy.gc b/goal_src/levels/common/nav-enemy.gc index ab6f3f8cc2..919dbed1e5 100644 --- a/goal_src/levels/common/nav-enemy.gc +++ b/goal_src/levels/common/nav-enemy.gc @@ -526,7 +526,11 @@ nav-enemy-default-event-handler (set! (-> self nav travel quad) (-> gp-1 quad)) ) (vector-normalize! (-> self nav travel) 409600.0) - (dummy-24 (-> self nav) 204.8 #f) + (dummy-24 + (-> self nav) + 204.8 + (the-as clip-travel-vector-to-mesh-return-info #f) + ) (vector+! (-> self nav target-pos) (-> self collide-info trans) diff --git a/goal_src/levels/common/snow-bunny.gc b/goal_src/levels/common/snow-bunny.gc index 697b69caa6..e3ef99ee2a 100644 --- a/goal_src/levels/common/snow-bunny.gc +++ b/goal_src/levels/common/snow-bunny.gc @@ -5,3 +5,33 @@ ;; name in dgo: snow-bunny ;; dgos: CIT, L1, SNO +(deftype snow-bunny (nav-enemy) + ((patrol-rand-distraction int32 :offset-assert 400) + (base-hop-dist float :offset-assert 404) + (halfway-dist float :offset-assert 408) + (retreat-timeout float :offset-assert 412) + (gnd-popup float :offset-assert 416) + (jump-height-min float :offset-assert 420) + (jump-height-factor float :offset-assert 424) + (jump-anim-start-frame float :offset-assert 428) + (defense uint64 :offset-assert 432) + (retreat-timeout-time uint64 :offset-assert 440) + (last-nondangerous-time uint64 :offset-assert 448) + (patrol-hop-failed? basic :offset-assert 456) + (should-retreat? basic :offset-assert 460) + (got-jump-event? basic :offset-assert 464) + (using-jump-event? basic :offset-assert 468) + (jump-anim int8 :offset-assert 472) + (notice-land-anim int8 :offset-assert 473) + (attack-anim int8 :offset-assert 474) + (final-dest vector :inline :offset-assert 480) + (jump-event-dest vector :inline :offset-assert 496) + ) + :method-count-assert 77 + :size-assert #x200 + :heap-base #x190 + :flag-assert #x4d01900200 + (:methods + (dummy-76 () none 76)) + ) + diff --git a/goal_src/levels/finalboss/green-eco-lurker.gc b/goal_src/levels/finalboss/green-eco-lurker.gc index a87465ea55..083c27180c 100644 --- a/goal_src/levels/finalboss/green-eco-lurker.gc +++ b/goal_src/levels/finalboss/green-eco-lurker.gc @@ -40,7 +40,7 @@ 0 -1 ((1 (meters 999999))) - :bounds (static-spherem 0 0 0 5.95) + :bounds (static-spherem 0 0 0 5.949999809265137) :longest-edge (meters 0) :shadow 2 ) diff --git a/goal_src/levels/maincave/baby-spider.gc b/goal_src/levels/maincave/baby-spider.gc index cf09c53744..0210b59207 100644 --- a/goal_src/levels/maincave/baby-spider.gc +++ b/goal_src/levels/maincave/baby-spider.gc @@ -1144,7 +1144,7 @@ baby-spider-default-event-handler (set! (-> self enemy-info pickup-amount) (the float (-> arg3 pickup-amount))) (create-connection! *cavecrystal-light-control* - (the-as cavecrystal self) + self (-> self entity) (the-as (function object object object object object) @@ -1191,7 +1191,7 @@ baby-spider-default-event-handler ) (create-connection! *cavecrystal-light-control* - (the-as cavecrystal obj) + obj (-> obj entity) (the-as (function object object object object object) diff --git a/goal_src/levels/snow/yeti.gc b/goal_src/levels/snow/yeti.gc index 20219b908a..05275210f7 100644 --- a/goal_src/levels/snow/yeti.gc +++ b/goal_src/levels/snow/yeti.gc @@ -51,8 +51,8 @@ 0 -1 ((1 (meters 999999))) - :bounds (static-spherem 0 0.75 0 3.9) - :longest-edge (meters 1.3) + :bounds (static-spherem 0 0.75 0 3.9000000953674316) + :longest-edge (meters 1.2999999523162842) ) (define diff --git a/goal_src/levels/sunken/floating-launcher.gc b/goal_src/levels/sunken/floating-launcher.gc index fd5935b816..8a2c1e1cf6 100644 --- a/goal_src/levels/sunken/floating-launcher.gc +++ b/goal_src/levels/sunken/floating-launcher.gc @@ -5,3 +5,220 @@ ;; name in dgo: floating-launcher ;; dgos: L1, SUN, SUNKEN +;; DECOMP BEGINS + +(deftype floating-launcher (baseplat) + ((trigger-height float :offset-assert 228) + (launcher (pointer launcher) :offset-assert 232) + ) + :heap-base #x80 + :method-count-assert 27 + :size-assert #xec + :flag-assert #x1b008000ec + (:states + floating-launcher-idle + floating-launcher-lowering + floating-launcher-ready + ) + ) + + +(defskelgroup *floating-launcher-sg* floating-launcher + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +(defstate floating-launcher-idle (floating-launcher) + :event + (the-as + (function process int symbol event-message-block object :behavior floating-launcher) + plat-event + ) + :trans + (behavior () + (plat-trans) + (when + (< + (vector-xz-length + (vector-! + (new 'stack-no-clear 'vector) + (target-pos 0) + (-> self root-override trans) + ) + ) + 81920.0 + ) + (if + (and + (>= (-> (target-pos 0) y) (-> self trigger-height)) + (logtest? (-> *target* control status) 2) + ) + (go floating-launcher-lowering) + ) + ) + (none) + ) + :code + (behavior () + (transform-post) + (suspend) + (transform-post) + (suspend) + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior floating-launcher) plat-post) + ) + +(defstate floating-launcher-lowering (floating-launcher) + :event + (the-as + (function process int symbol event-message-block object :behavior floating-launcher) + plat-event + ) + :trans + (the-as (function none :behavior floating-launcher) plat-trans) + :code + (behavior () + (let ((a0-1 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (if a0-1 + (entity-birth-no-kill a0-1) + ) + ) + (let ((f30-0 1.0)) + (while (!= f30-0 0.0) + (set! f30-0 (seek f30-0 0.0 (-> *display* seconds-per-frame))) + (eval-path-curve-div! (-> self path) (-> self basetrans) f30-0 'interp) + (set! + (-> self launcher 0 root-override trans quad) + (-> self basetrans quad) + ) + (dummy-47 (-> self launcher 0 root-override)) + (suspend) + ) + ) + (eval-path-curve-div! (-> self path) (-> self basetrans) 0.0 'interp) + (set! (-> self launcher 0 root-override trans quad) (-> self basetrans quad)) + (dummy-47 (-> self launcher 0 root-override)) + (go floating-launcher-ready) + (none) + ) + :post + (the-as (function none :behavior floating-launcher) plat-post) + ) + +(defstate floating-launcher-ready (floating-launcher) + :event + (the-as + (function process int symbol event-message-block object :behavior floating-launcher) + plat-event + ) + :trans + (the-as (function none :behavior floating-launcher) plat-trans) + :code + (the-as (function none :behavior floating-launcher) plat-code) + :post + (the-as (function none :behavior floating-launcher) plat-post) + ) + +(defmethod + copy-defaults! + floating-launcher + ((obj floating-launcher) (arg0 res-lump)) + (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) 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 11468.8) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! + (-> obj path flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (eval-path-curve-div! (-> obj path) (-> obj root-override trans) 1.0 'interp) + (let ((f30-0 (res-lump-float arg0 'spring-height :default 163840.0)) + (s4-1 (get-process *default-dead-pool* launcher #x4000)) + ) + (set! (-> obj launcher) (the-as (pointer launcher) (when s4-1 + (let + ((t9-11 + (method-of-type + launcher + activate + ) + ) + ) + (t9-11 + (the-as launcher s4-1) + obj + 'launcher + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s4-1 + launcher-init-by-other + (-> + obj + root-override + trans + ) + f30-0 + 0 + 81920.0 + ) + (-> s4-1 ppointer) + ) + ) + ) + ) + (initialize-skeleton obj *floating-launcher-sg* '()) + (logior! (-> obj skel status) 1) + (dummy-47 (-> obj root-override)) + (dummy-21 obj) + (set! (-> obj trigger-height) (res-lump-float arg0 'trigger-height)) + (go floating-launcher-idle) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/shover.gc b/goal_src/levels/sunken/shover.gc index 6c648f417a..5815fd0540 100644 --- a/goal_src/levels/sunken/shover.gc +++ b/goal_src/levels/sunken/shover.gc @@ -5,3 +5,189 @@ ;; name in dgo: shover ;; dgos: L1, SUN, SUNKEN +(declare-type shover process-drawable) +(define-extern *shover* shover) ;; unknown type + +;; DECOMP BEGINS + +(deftype shover (process-drawable) + ((root-override collide-shape :offset 112) + (shove-up float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + shover-idle + ) + ) + + +(defskelgroup *shover-sg* shover + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + :longest-edge (meters 0) + ) + +(defstate shover-idle (shover) + :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 dummy-13) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> *target* control) + 1 + 0 + ) + (let ((s4-0 (new 'stack 'attack-info))) + (dummy-41 (-> self root-override) s4-0 (-> self shove-up)) + (level-hint-spawn + (game-text-id sunken-take-it-easy-hot-pipes) + "sksp0134" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (cond + ((or + (= (-> *target* control unknown-surface00 mode) 'air) + (>= + (+ (-> *display* base-frame-counter) -60) + (-> *target* control unknown-dword10) + ) + (< 0.75 (-> *target* control poly-normal y)) + ) + (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-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-6 param 1) (the-as uint v1-22)) + ) + (send-event-function arg0 a1-6) + ) + ) + (else + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 2) + (set! (-> a1-7 message) 'attack-or-shove) + (set! (-> a1-7 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-7 param 1) (the-as uint v1-26)) + ) + (send-event-function arg0 a1-7) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :code + (the-as (function none :behavior shover) anim-loop) + ) + +(defmethod copy-defaults! shover ((obj shover) (arg0 res-lump)) + (local-vars (sv-16 res-tag)) + (set! (-> obj shove-up) (res-lump-float arg0 'shove :default 12288.0)) + (let ((s3-0 (res-lump-value arg0 'collision-mesh-id uint128)) + (s4-0 + (new 'process 'collide-shape obj (collide-list-enum hit-by-player)) + ) + ) + (let + ((s3-1 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint s3-0) + (the-as uint 0) + ) + ) + ) + (set! (-> s3-1 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 4) + (set! (-> s3-1 transform-index) 0) + (set-vector! (-> s3-1 local-sphere) 0.0 0.0 0.0 53248.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *shover-sg* '()) + (let ((v1-17 (new 'process 'path-control obj 'path 0.0))) + (set! (-> obj path) v1-17) + (logior! + (-> v1-17 flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (if (<= (-> v1-17 curve num-cverts) 0) + (go process-drawable-art-error "no path") + ) + ) + (set! sv-16 (new 'static 'res-tag)) + (let + ((v1-23 + (res-lump-data arg0 'trans-offset (pointer float) :tag-ptr (& sv-16)) + ) + ) + (when v1-23 + (+! (-> obj root-override trans x) (-> v1-23 0)) + (+! (-> obj root-override trans y) (-> v1-23 1)) + (+! (-> obj root-override trans z) (-> v1-23 2)) + ) + ) + (let ((f0-13 (res-lump-float arg0 'rotoffset))) + (if (!= f0-13 0.0) + (quaternion-rotate-y! + (-> obj root-override quat) + (-> obj root-override quat) + f0-13 + ) + ) + ) + (ja-channel-set! 1) + (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 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (set! *shover* obj) + (go shover-idle) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/steam-cap.gc b/goal_src/levels/sunken/steam-cap.gc index eed5e3057a..ee80228721 100644 --- a/goal_src/levels/sunken/steam-cap.gc +++ b/goal_src/levels/sunken/steam-cap.gc @@ -5,3 +5,996 @@ ;; name in dgo: steam-cap ;; dgos: L1, SUN, SUNKEN +;; DECOMP BEGINS + +(deftype steam-cap-control-pt (structure) + ((trans vector :inline :offset-assert 0) + (transv vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + + +(deftype steam-cap (process-drawable) + ((root-override collide-shape-moving :offset 112) + (do-burst? symbol :offset-assert 176) + (do-falling-sound? symbol :offset-assert 180) + (do-landing-sound? symbol :offset-assert 184) + (begin-travel-up float :offset-assert 188) + (begin-travel-down float :offset-assert 192) + (sync sync-info :inline :offset-assert 196) + (part2 sparticle-launch-control :offset-assert 204) + (part3 sparticle-launch-control :offset-assert 208) + (down vector :inline :offset-assert 224) + (up vector :inline :offset-assert 240) + (control-pt steam-cap-control-pt 3 :inline :offset-assert 256) + ) + :heap-base #xf0 + :method-count-assert 22 + :size-assert #x160 + :flag-assert #x1600f00160 + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) quaternion 21) + ) + (:states + steam-cap-idle + ) + ) + + +(set! + (-> *part-group-id-table* 441) + (new 'static 'sparticle-launch-group + :length 7 + :duration #xbb8 + :linger-duration #x5dc + :name "group-steam-cap-sides" + :launcher + (new 'static 'inline-array sparticle-group-item 7 + (sp-item 1718 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75) + (sp-item 1719 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75 :offset 60) + (sp-item 1720 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75 :offset 120) + (sp-item 1721 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75) + (sp-item 1722 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75 :offset 60) + (sp-item 1723 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75 :offset 120) + (sp-item 1724 :fade-after (meters 60.0) :falloff-to (meters 60.0) :period 180 :length 75 :offset 120) + ) + :bounds (new 'static 'sphere :w 40960.0) + ) + ) + +(set! + (-> *part-id-table* 1724) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-flt spt-num 1.0) + (sp-int spt-rot-x 5) + (sp-flt spt-r 4096.0) + (sp-flt spt-g 2867.2) + (sp-flt spt-b 3276.8) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags aux-list) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1725) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1725) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-b -2.7306666) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1718) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1721) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1719) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 120.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1722) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 120.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1720) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 240.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1723) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 240.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1726) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.21333334) + (sp-end) + ) + ) + ) + +(set! + (-> *part-group-id-table* 442) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :name "group-steam-cap-plume" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1727 :fade-after (meters 120.0) :falloff-to (meters 160.0)) + (sp-item 1728 :fade-after (meters 120.0) :falloff-to (meters 160.0)) + (sp-item 1729 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + (sp-item 1730 :fade-after (meters 60.0) :falloff-to (meters 60.0) :flags (start-dead)) + ) + :bounds (new 'static 'sphere :w 131072.0) + ) + ) + +(set! + (-> *part-group-id-table* 443) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :name "group-steam-cap-plume-spread" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1731 :fade-after (meters 120.0) :falloff-to (meters 160.0)) + (sp-item 1732 :fade-after (meters 120.0) :falloff-to (meters 160.0)) + ) + :bounds (new 'static 'sphere :w 131072.0) + ) + ) + +(set! + (-> *part-id-table* 1730) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-flt spt-num 0.4) + (sp-int spt-rot-x 5) + (sp-flt spt-r 6144.0) + (sp-flt spt-g 2867.2) + (sp-flt spt-b 3276.8) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.94 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags aux-list) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1725) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1732) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 0.5) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1735) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.5)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1731) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 0.5) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1735) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.5)) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1735) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.32) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1727) + (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-rnd-flt spt-num 0.5 0.5 1.0) + (sp-rnd-flt spt-x (meters 0.0) (meters 1.0) 1.0) + (sp-flt spt-y (meters -1.0)) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 16.0 16.0 1.0) + (sp-flt spt-vel-y (meters 0.053333335)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-accel-y 2.7306666) + (sp-int spt-timer 153) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1728) + (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-rnd-flt spt-num 0.5 0.5 1.0) + (sp-rnd-flt spt-x (meters 0.0) (meters 0.5) 1.0) + (sp-flt spt-y (meters -1.0)) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-vel-y (meters 0.053333335)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-accel-y 2.7306666) + (sp-int spt-timer 153) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1729) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 11 + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters 0.5) (meters 0.5) 1.0) + (sp-int spt-rot-x 5) + (sp-flt spt-r 6144.0) + (sp-flt spt-g 2457.6) + (sp-flt spt-b 3276.8) + (sp-flt spt-vel-y (meters 0.053333335)) + (sp-int spt-timer 153) + (sp-cpuinfo-flags aux-list) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +(defskelgroup *steam-cap-sg* steam-cap + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +(defmethod dummy-20 steam-cap ((obj steam-cap)) + (with-pp + (when *target* + (let* ((a1-0 (target-pos 0)) + (f0-0 (-> a1-0 y)) + ) + (when + (and + (>= f0-0 (+ -8192.0 (-> obj down y))) + (and + (>= (+ -4096.0 (-> obj root-override trans y)) f0-0) + (zero? (-> obj root-override riders num-riders)) + ) + ) + (let ((f0-1 (vector-vector-xz-distance-squared (-> obj down) a1-0))) + (when (>= 104857600.0 f0-1) + (let ((s5-0 (>= 37748736.0 f0-1))) + (when (not s5-0) + (when (>= (- (-> obj root-override trans y) (-> obj down y)) 3072.0) + (let ((a1-1 (new 'stack-no-clear 'vector))) + (set! (-> a1-1 x) (the-as float 1)) + (set! (-> a1-1 y) (the-as float #f)) + (if (dummy-40 (-> obj root-override) a1-1) + (set! s5-0 #t) + ) + ) + ) + ) + (when s5-0 + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) pp) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'shove) + (set! (-> a1-2 param 0) (the-as uint #f)) + (let ((v1-16 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-16 shove-up) 2048.0) + (set! (-> v1-16 shove-back) 6144.0) + (set! (-> a1-2 param 1) (the-as uint v1-16)) + ) + (send-event-function *target* a1-2) + ) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +(defmethod dummy-21 steam-cap ((obj steam-cap)) + (local-vars (at-0 int) (at-1 int) (s5-0 symbol)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let ((f0-0 (get-current-phase (-> obj sync)))) + #t + (cond + ((< f0-0 (-> obj begin-travel-up)) + (let ((f30-0 (/ f0-0 (-> obj begin-travel-up)))) + (set! s5-0 #t) + (dotimes (s4-0 3) + (let ((s3-0 (-> obj control-pt s4-0))) + (when (= (-> s3-0 trans y) (-> obj down y)) + (set! (-> obj do-burst?) #t) + (let ((a0-2 (+ (the int (* 60.0 (- 1.0 f30-0))) 3))) + (if (zero? (rand-vu-int-count a0-2)) + (+! + (-> s3-0 transv y) + (* (rand-vu-float-range 40960.0 57344.0) f30-0) + ) + ) + ) + ) + ) + ) + (let ((a0-4 (+ (the int (* 60.0 (- 1.0 f30-0))) 1))) + (if (zero? (rand-vu-int-count a0-4)) + (spawn (-> obj part) (-> obj down)) + ) + ) + ) + ) + ((< f0-0 (-> obj begin-travel-down)) + (let + ((f30-1 + (/ + (- f0-0 (-> obj begin-travel-up)) + (- (-> obj begin-travel-down) (-> obj begin-travel-up)) + ) + ) + ) + (set! s5-0 #f) + (set! (-> obj do-falling-sound?) #t) + (when (-> obj do-burst?) + (sound-play-by-name + (static-sound-name "sunk-top-rises") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (set! (-> obj do-burst?) #f) + (spawn (-> obj part) (-> obj down)) + (spawn (-> obj part) (-> obj down)) + (spawn (-> obj part) (-> obj down)) + (spawn (-> obj part) (-> obj down)) + ) + (when (< f30-1 0.94) + (spawn (-> obj part2) (-> obj down)) + (let ((a1-8 (new 'stack-no-clear 'vector))) + (set! (-> a1-8 quad) (-> obj root-override trans quad)) + (set! (-> a1-8 y) (+ -3072.0 (-> a1-8 y))) + (spawn (-> obj part3) a1-8) + ) + ) + ) + ) + (else + (set! s5-0 #t) + (when (-> obj do-falling-sound?) + (set! (-> obj do-falling-sound?) #f) + (sound-play-by-name + (static-sound-name "sunk-top-falls") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + ) + ) + ) + ) + (dotimes (s4-3 3) + (let ((s2-0 (-> obj control-pt s4-3)) + (s3-3 (new 'stack-no-clear 'vector)) + ) + (set! (-> s3-3 quad) (-> s2-0 trans quad)) + (cond + (s5-0 + (+! (-> s2-0 transv y) (* -819200.0 (-> *display* seconds-per-frame))) + (let ((a1-10 s3-3) + (v1-42 s3-3) + (a0-21 (new 'stack-no-clear 'vector)) + ) + (.lvf vf1 (&-> (-> s2-0 transv) quad)) + (let ((f0-17 (-> *display* seconds-per-frame))) + (.mov at-0 f0-17) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> a0-21 quad) vf1) + (vector+! a1-10 v1-42 a0-21) + ) + (when (< (-> s3-3 y) (-> obj down y)) + (when (-> obj do-landing-sound?) + (set! (-> obj do-landing-sound?) #f) + (sound-play-by-name + (static-sound-name "sunk-top-lands") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + ) + (set! (-> s3-3 y) (-> obj down y)) + (let ((f0-20 (-> s2-0 transv y))) + (when (< f0-20 0.0) + (let ((f0-22 (* 0.3 (- f0-20)))) + (set! (-> s2-0 transv y) f0-22) + (if (< 7782.4 f0-22) + (sound-play-by-name + (static-sound-name "sunk-top-lands") + (new-sound-id) + 614 + 0 + 0 + 1 + #t + ) + ) + ) + ) + ) + ) + ) + (else + (set! (-> obj do-landing-sound?) #t) + (let ((f0-24 (* 0.000048828126 (- (-> obj up y) (-> s2-0 trans y))))) + (cond + ((< 1.0 f0-24) + (set! f0-24 1.0) + ) + ((< f0-24 -1.0) + (set! f0-24 -1.0) + ) + ) + (+! + (-> s2-0 transv y) + (* 819200.0 (-> *display* seconds-per-frame) f0-24) + ) + (let ((f1-24 (-> s2-0 transv y))) + (when (< 122880.0 (fabs f1-24)) + (if (>= f1-24 0.0) + (set! (-> s2-0 transv y) 122880.0) + (set! (-> s2-0 transv y) -122880.0) + ) + ) + ) + (let ((a1-14 s3-3) + (v1-61 s3-3) + (a0-26 (new 'stack-no-clear 'vector)) + ) + (.lvf vf1 (&-> (-> s2-0 transv) quad)) + (let ((f1-27 (-> *display* seconds-per-frame))) + (.mov at-1 f1-27) + ) + (.mov vf2 at-1) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> a0-26 quad) vf1) + (vector+! a1-14 v1-61 a0-26) + ) + (let ((f1-29 (- (-> obj up y) (-> s3-3 y))) + (v1-62 (>= f0-24 0.0)) + ) + (when (!= v1-62 (>= f1-29 0.0)) + (let ((f0-26 (-> s2-0 transv y))) + (when (< 40960.0 (fabs f0-26)) + (if (>= f0-26 0.0) + (set! (-> s2-0 transv y) 40960.0) + (set! (-> s2-0 transv y) -40960.0) + ) + ) + ) + (set! (-> s2-0 transv y) (* 0.8 (-> s2-0 transv y))) + ) + ) + ) + ) + ) + (set! (-> s2-0 trans quad) (-> s3-3 quad)) + ) + ) + (let ((f0-31 0.0)) + (dotimes (v1-71 3) + (+! f0-31 (-> obj control-pt v1-71 trans y)) + ) + (let ((f0-32 (* 0.33333334 f0-31)) + (a1-16 (new 'stack-no-clear 'vector)) + ) + (set! (-> a1-16 quad) (-> obj root-override trans quad)) + (set! (-> a1-16 y) f0-32) + (TODO-RENAME-30 (-> obj root-override) a1-16) + ) + ) + (let ((v1-77 (new 'stack-no-clear 'vector)) + (a0-35 (new 'stack-no-clear 'vector)) + (s5-1 (new 'stack-no-clear 'vector)) + ) + (vector-! + v1-77 + (the-as vector (&-> obj stack 176)) + (the-as vector (-> obj control-pt)) + ) + (vector-! + a0-35 + (the-as vector (&-> obj stack 208)) + (the-as vector (-> obj control-pt)) + ) + (vector-cross! s5-1 v1-77 a0-35) + (vector-normalize! s5-1 1.0) + (forward-up-nopitch->quaternion + (-> obj root-override quat) + (vector-z-quaternion! (new-stack-vector0) (-> obj root-override quat)) + s5-1 + ) + ) + ) + ) + +(defstate steam-cap-idle (steam-cap) + :trans + (the-as (function none :behavior steam-cap) rider-trans) + :code + (behavior () + (while #t + (dummy-20 self) + (dummy-21 self) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior steam-cap) rider-post) + ) + +(defmethod relocate steam-cap ((obj steam-cap) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (if (nonzero? (-> obj part3)) + (&+! (-> obj part3) arg0) + ) + (the-as + steam-cap + ((the-as + (function process-drawable int process-drawable) + (find-parent-method steam-cap 7) + ) + obj + arg0 + ) + ) + ) + +(defmethod deactivate steam-cap ((obj steam-cap)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + (if (nonzero? (-> obj part3)) + (kill-and-free-particles (-> obj part3)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defmethod copy-defaults! steam-cap ((obj steam-cap) (arg0 res-lump)) + (local-vars (sv-16 int)) + (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) 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) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 12288.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (set! (-> obj do-burst?) #f) + (set! (-> obj do-falling-sound?) #f) + (set! (-> obj do-landing-sound?) #f) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *steam-cap-sg* '()) + (logior! (-> obj skel status) 1) + (ja-channel-set! 1) + (let ((s4-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (dummy-47 (-> obj root-override)) + (load-params! (-> obj sync) obj (the-as uint 1800) 0.0 0.15 0.15) + (let ((f30-0 0.4) + (f28-0 0.9) + ) + (set! sv-16 0) + (let + ((v1-36 + (res-lump-data + arg0 + 'percent + (pointer float) + :tag-ptr + (the-as (pointer res-tag) (& sv-16)) + ) + ) + ) + (when v1-36 + (set! f30-0 (-> v1-36 0)) + (set! f28-0 (-> v1-36 1)) + (if (>= 0.01 f30-0) + (set! f30-0 0.01) + ) + (if (>= 0.01 f28-0) + (set! f28-0 0.01) + ) + (if (>= f30-0 f28-0) + (set! f28-0 (+ 0.01 f30-0)) + ) + (when (>= f30-0 1.0) + (set! f28-0 (* 0.9 (/ f28-0 f30-0))) + (set! f30-0 0.9) + ) + ) + ) + (set! (-> obj begin-travel-up) f30-0) + (set! (-> obj begin-travel-down) f28-0) + ) + (set! (-> obj down quad) (-> obj root-override trans quad)) + (set! (-> obj up quad) (-> obj root-override trans quad)) + (set! (-> obj up y) (+ 40960.0 (-> obj up y))) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 441) obj) + ) + (set! + (-> obj part2) + (create-launch-control (-> *part-group-id-table* 442) obj) + ) + (set! + (-> obj part3) + (create-launch-control (-> *part-group-id-table* 443) obj) + ) + (vector-reset! (-> obj root-override transv)) + (let ((s5-1 (new 'stack-no-clear 'vector)) + (f30-1 0.0) + ) + (dotimes (s4-2 3) + (let ((s3-1 (-> obj control-pt s4-2))) + (set-vector! s5-1 0.0 0.0 10240.0 1.0) + (vector-rotate-around-y! s5-1 s5-1 f30-1) + (set! f30-1 (+ 21845.334 f30-1)) + (vector+! (-> s3-1 trans) s5-1 (-> obj root-override trans)) + (vector-reset! (-> s3-1 transv)) + ) + ) + ) + (go steam-cap-idle) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/sun-iris-door.gc b/goal_src/levels/sunken/sun-iris-door.gc index f129b16e23..9f0af62701 100644 --- a/goal_src/levels/sunken/sun-iris-door.gc +++ b/goal_src/levels/sunken/sun-iris-door.gc @@ -5,3 +5,600 @@ ;; name in dgo: sun-iris-door ;; dgos: L1, SUN, SUNKEN +;; DECOMP BEGINS + +(deftype sun-iris-door (process-drawable) + ((root-override collide-shape :offset 112) + (timeout float :offset-assert 176) + (proximity? symbol :offset-assert 180) + (directional-proximity? symbol :offset-assert 184) + (move-to? symbol :offset-assert 188) + (locked-by-task? symbol :offset-assert 192) + (close-dist float :offset-assert 196) + (open-dist float :offset-assert 200) + (move-to-pos vector :inline :offset-assert 208) + (outward-vec vector :inline :offset-assert 224) + (move-to-quat quaternion :inline :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 22 + :size-assert #x100 + :flag-assert #x1600900100 + (:methods + (should-close? (_type_) symbol 20) + (should-open? (_type_) symbol 21) + ) + (:states + sun-iris-door-closed + sun-iris-door-closing + sun-iris-door-open + sun-iris-door-opening + ) + ) + + +(defskelgroup *sun-iris-door-sg* sun-iris-door + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4.5) + :longest-edge (meters 0) + ) + +(defmethod should-open? sun-iris-door ((obj sun-iris-door)) + (let ((f30-0 1228800.0)) + 0.0 + (let ((f0-7 (cond + ((-> obj directional-proximity?) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (when *target* + (vector-! s5-0 (target-pos 0) (-> obj root-override trans)) + (set! (-> s5-0 y) 0.0) + (set! f30-0 (fabs (vector-dot s5-0 (-> obj outward-vec)))) + ) + (vector-! s5-0 (camera-pos) (-> obj root-override trans)) + (set! (-> s5-0 y) 0.0) + (fabs (vector-dot s5-0 (-> obj outward-vec))) + ) + ) + (else + (if *target* + (set! + f30-0 + (vector-vector-xz-distance + (-> obj root-override trans) + (target-pos 0) + ) + ) + ) + (vector-vector-xz-distance + (-> obj root-override trans) + (camera-pos) + ) + ) + ) + ) + ) + (when (or (>= (-> obj open-dist) f30-0) (>= (-> obj open-dist) f0-7)) + (if + (or + (not (-> obj locked-by-task?)) + (task-complete? *game-info* (-> obj entity extra perm task)) + ) + (return #t) + ) + ) + ) + ) + #f + ) + +(defstate sun-iris-door-closed (sun-iris-door) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (go sun-iris-door-opening) + ) + (('move-to) + (set! (-> self move-to?) #t) + (set! + (-> self move-to-pos quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (quaternion-copy! + (-> self move-to-quat) + (the-as quaternion (-> arg3 param 1)) + ) + ) + ) + ) + :trans + (behavior () + (when (-> self proximity?) + (if (should-open? self) + (go sun-iris-door-opening) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (behavior () + (when (-> self move-to?) + (set! (-> self move-to?) #f) + (TODO-RENAME-30 (-> self root-override) (-> self move-to-pos)) + (quaternion-copy! (-> self root-override quat) (-> self move-to-quat)) + (ja-post) + ) + (none) + ) + ) + +(defstate sun-iris-door-opening (sun-iris-door) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('untrigger) + (go sun-iris-door-closing) + ) + (('move-to) + (set! (-> self move-to?) #t) + (set! + (-> self move-to-pos quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (quaternion-copy! + (-> self move-to-quat) + (the-as quaternion (-> arg3 param 1)) + ) + ) + ) + ) + :code + (behavior () + (sound-play-by-name + (static-sound-name "irisdoor2") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (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! + a0-2 + (the-as art-joint-anim #f) + 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! + ) + ) + ) + (ja-post) + (go sun-iris-door-open) + (none) + ) + :post + (behavior () + (cond + ((-> self move-to?) + (set! (-> self move-to?) #f) + (TODO-RENAME-30 (-> self root-override) (-> self move-to-pos)) + (quaternion-copy! (-> self root-override quat) (-> self move-to-quat)) + (ja-post) + ) + (else + (transform-post) + ) + ) + (none) + ) + ) + +(defmethod should-close? sun-iris-door ((obj sun-iris-door)) + (let ((f30-0 1228800.0)) + 0.0 + (let ((f0-7 (cond + ((-> obj directional-proximity?) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (when *target* + (vector-! s5-0 (target-pos 0) (-> obj root-override trans)) + (set! (-> s5-0 y) 0.0) + (set! f30-0 (fabs (vector-dot s5-0 (-> obj outward-vec)))) + ) + (vector-! s5-0 (camera-pos) (-> obj root-override trans)) + (set! (-> s5-0 y) 0.0) + (fabs (vector-dot s5-0 (-> obj outward-vec))) + ) + ) + (else + (if *target* + (set! + f30-0 + (vector-vector-xz-distance + (-> obj root-override trans) + (target-pos 0) + ) + ) + ) + (vector-vector-xz-distance + (-> obj root-override trans) + (camera-pos) + ) + ) + ) + ) + ) + (when (and (>= f30-0 (-> obj close-dist)) (>= f0-7 (-> obj close-dist))) + (cond + ((and *target* (-> obj directional-proximity?)) + (let ((s4-6 (new 'stack-no-clear 'vector)) + (s5-3 (new 'stack-no-clear 'vector)) + ) + (vector-! s4-6 (target-pos 0) (-> obj root-override trans)) + (set! (-> s4-6 y) 0.0) + (vector-! s5-3 (camera-pos) (-> obj root-override trans)) + (set! (-> s5-3 y) 0.0) + (case (>= (vector-dot (-> obj outward-vec) s4-6) 0.0) + (((>= (vector-dot (-> obj outward-vec) s5-3) 0.0)) + (return #t) + ) + ) + ) + ) + (else + (return #t) + ) + ) + ) + ) + ) + #f + ) + +(defstate sun-iris-door-open (sun-iris-door) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (let ((v0-0 (the-as object (-> *display* base-frame-counter)))) + (set! (-> self state-time) (the-as int v0-0)) + v0-0 + ) + ) + (('untrigger) + (go sun-iris-door-closing) + ) + (('move-to) + (set! (-> self move-to?) #t) + (set! + (-> self move-to-pos quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (quaternion-copy! + (-> self move-to-quat) + (the-as quaternion (-> arg3 param 1)) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (dummy-48 (-> self root-override)) + (logior! (-> self draw status) 2) + (none) + ) + :exit + (behavior () + (dummy-49 (-> self root-override)) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + (behavior () + (when (-> self proximity?) + (if (should-close? self) + (go sun-iris-door-closing) + ) + ) + (if + (and + (!= (-> self timeout) 0.0) + (>= + (- (-> *display* base-frame-counter) (-> self state-time)) + (the int (* 300.0 (-> self timeout))) + ) + ) + (go sun-iris-door-closing) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (behavior () + (when (-> self move-to?) + (set! (-> self move-to?) #f) + (TODO-RENAME-30 (-> self root-override) (-> self move-to-pos)) + (quaternion-copy! (-> self root-override quat) (-> self move-to-quat)) + (ja-post) + ) + (none) + ) + ) + +(defstate sun-iris-door-closing (sun-iris-door) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (go sun-iris-door-opening) + ) + (('move-to) + (set! (-> self move-to?) #t) + (set! + (-> self move-to-pos quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (quaternion-copy! + (-> self move-to-quat) + (the-as quaternion (-> arg3 param 1)) + ) + ) + ) + ) + :code + (behavior () + (sound-play-by-name + (static-sound-name "irisdoor2") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) 0.0) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) 0.0) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-post) + (go sun-iris-door-closed) + (none) + ) + :post + (behavior () + (cond + ((-> self move-to?) + (set! (-> self move-to?) #f) + (TODO-RENAME-30 (-> self root-override) (-> self move-to-pos)) + (quaternion-copy! (-> self root-override quat) (-> self move-to-quat)) + (ja-post) + ) + (else + (transform-post) + ) + ) + (none) + ) + ) + +(defmethod copy-defaults! sun-iris-door ((obj sun-iris-door) (arg0 res-lump)) + (local-vars (sv-16 int)) + (set! (-> obj move-to?) #f) + (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 0.0 0.0 24576.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *sun-iris-door-sg* '()) + (set! (-> obj close-dist) 49152.0) + (set! (-> obj open-dist) 40960.0) + (set! (-> obj timeout) (res-lump-float arg0 'timeout)) + (set! (-> obj proximity?) (nonzero? (res-lump-value arg0 'proximity uint128))) + (set! (-> obj directional-proximity?) #f) + (when (name= (-> obj name) "sun-iris-door-6") + (set! (-> obj close-dist) 16384.0) + (set! (-> obj open-dist) 8192.0) + (set! (-> obj directional-proximity?) #t) + ) + (set! (-> obj locked-by-task?) (nonzero? (-> obj entity extra perm task))) + (let ((f0-11 (res-lump-float arg0 'scale-factor :default 1.0))) + (set-vector! (-> obj root-override scale) f0-11 f0-11 f0-11 1.0) + (set! (-> obj draw bounds w) (* 18432.0 f0-11)) + (let ((v1-25 (-> obj root-override root-prim))) + (set! (-> v1-25 local-sphere w) (* 24576.0 f0-11 f0-11)) + ) + ) + (set! sv-16 0) + (let + ((v1-28 + (res-lump-data + (-> obj entity) + 'trans-offset + (pointer float) + :tag-ptr + (the-as (pointer res-tag) (& 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)) + ) + ) + (let ((f30-0 (quaternion-y-angle (-> obj root-override quat)))) + (set-vector! (-> obj outward-vec) (sin f30-0) 0.0 (cos f30-0) 1.0) + ) + (ja-channel-set! 1) + (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) + ) + (dummy-47 (-> obj root-override)) + (ja-post) + (go sun-iris-door-closed) + (none) + ) + +(defbehavior + sun-iris-door-init-by-other sun-iris-door + ((arg0 vector) (arg1 quaternion) (arg2 symbol)) + (set! (-> self move-to?) #f) + (let + ((s3-0 (new 'process 'collide-shape self (collide-list-enum hit-by-others)))) + (let + ((s2-0 + (new + 'process + 'collide-shape-prim-mesh + s3-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 0) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 24576.0) + ) + (dummy-46 s3-0) + (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) + (dummy-50 s3-0) + (set! (-> self root-override) s3-0) + ) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (quaternion-copy! (-> self root-override quat) arg1) + (initialize-skeleton self *sun-iris-door-sg* '()) + (set! (-> self close-dist) 49152.0) + (set! (-> self open-dist) 40960.0) + (set! (-> self timeout) 0.0) + (set! (-> self proximity?) #f) + (set! (-> self directional-proximity?) #f) + (ja-channel-set! 1) + (cond + (arg2 + (let ((s5-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-identity + ) + (set! + (-> s5-1 frame-num) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + (else + (let ((s5-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s5-2 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-identity + ) + (set! (-> s5-2 frame-num) 0.0) + ) + ) + ) + (transform-post) + (if arg2 + (go sun-iris-door-open) + (go sun-iris-door-closed) + ) + (none) + ) + + + + diff --git a/goal_src/levels/sunken/whirlpool.gc b/goal_src/levels/sunken/whirlpool.gc index 7560f531ef..88b0901a13 100644 --- a/goal_src/levels/sunken/whirlpool.gc +++ b/goal_src/levels/sunken/whirlpool.gc @@ -5,3 +5,497 @@ ;; name in dgo: whirlpool ;; dgos: L1, SUN, SUNKEN +;; DECOMP BEGINS + +(deftype whirlpool (process-drawable) + ((root-override collide-shape :offset 112) + (spin-ry float :offset-assert 176) + (spin-speed-idle float :offset-assert 180) + (spin-speed-delta float :offset-assert 184) + (sync sync-info-paused :inline :offset-assert 188) + ) + :heap-base #x60 + :method-count-assert 21 + :size-assert #xcc + :flag-assert #x15006000cc + (:methods + (dummy-20 (_type_ float) uint 20) + ) + (:states + whirlpool-idle + ) + ) + + +(defskelgroup *whirlpool-sg* whirlpool + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0.6000000238418579 0 3) + :longest-edge (meters 0) + ) + +(set! + (-> *part-group-id-table* 447) + (new 'static 'sparticle-launch-group + :length #xbb + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-whirlpool-swirl" + :launcher + (new 'static 'inline-array sparticle-group-item 187 + (sp-item 1739 :fade-after (meters 60.0) :falloff-to (meters 60.0) :binding 1737) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +(set! + (-> *part-id-table* 1739) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 11 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 6.6)) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-g 0.0) + (sp-flt spt-a 128.0) + (sp-flt spt-accel-y -0.68266666) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1737) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.0)) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-z 16384.0 4096.0 1.0) + (sp-flt spt-scale-x (meters 3.2)) + (sp-flt spt-scale-y (meters 1.0)) + (sp-flt spt-r 150.0) + (sp-flt spt-g 150.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-flt spt-vel-x (meters 0.053333335)) + (sp-flt spt-vel-y (meters 0.0)) + (sp-flt spt-vel-z (meters -0.01)) + (sp-flt spt-scalevel-x (meters -0.004888889)) + (sp-flt spt-fade-a 0.42666668) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit3 bit7) + (sp-int-plain-rnd spt-next-time 37 36 1) + (sp-launcher-by-id spt-next-launcher 1740) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1740) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a 0.0) + (sp-end) + ) + ) + ) + +(set! + (-> *part-id-table* 1738) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-fade-a -1.8285716) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +(defmethod dummy-20 whirlpool ((obj whirlpool) (arg0 float)) + (let* ((gp-0 (target-pos 0)) + (f28-0 (vector-vector-xz-distance (-> obj root-override trans) gp-0)) + ) + (when (< f28-0 40960.0) + (let* ((f0-2 (* 0.000024414063 (- 40960.0 f28-0))) + (f26-0 (* f0-2 f0-2)) + (f0-7 + (atan + (- (-> gp-0 x) (-> obj root-override trans x)) + (- (-> gp-0 z) (-> obj root-override trans z)) + ) + ) + (f30-0 (* 0.5 f26-0 arg0 (-> *display* seconds-per-frame))) + (f24-0 (+ f0-7 f30-0)) + (f28-1 + (- + f28-0 + (fmin + f28-0 + (* 0.16874999 f26-0 (fabs arg0) (-> *display* seconds-per-frame)) + ) + ) + ) + (s4-1 (new 'stack-no-clear 'vector)) + ) + (set-vector! s4-1 (* (sin f24-0) f28-1) 0.0 (* (cos f24-0) f28-1) 1.0) + (vector+! s4-1 s4-1 (-> obj root-override trans)) + (set! + (-> s4-1 x) + (* (- (-> s4-1 x) (-> gp-0 x)) (-> *display* frames-per-second)) + ) + (set! (-> s4-1 y) 0.0) + (set! + (-> s4-1 z) + (* (- (-> s4-1 z) (-> gp-0 z)) (-> *display* frames-per-second)) + ) + (let ((gp-1 (-> *target* control))) + (send-event (-> gp-1 process) 'rotate-y-angle f30-0) + (dummy-32 gp-1 8192.0 (-> gp-1 root-prim collide-with)) + (let ((s3-0 (-> gp-1 status))) + (dummy-37 gp-1 s4-1) + (set! (-> gp-1 status) s3-0) + s3-0 + ) + ) + ) + ) + ) + ) + +(defstate whirlpool-idle (whirlpool) + :trans + (behavior () + (let + ((f30-0 + (+ + (* + (get-current-phase-with-mirror (-> self sync)) + (-> self spin-speed-delta) + ) + (-> self spin-speed-idle) + ) + ) + ) + (when (>= (fabs f30-0) 45511.11) + (let ((a1-0 (new 'stack-no-clear 'vector))) + (set! (-> a1-0 quad) (-> self root-override trans quad)) + (set! (-> a1-0 y) (+ -8192.0 (-> a1-0 y))) + (spawn (-> self part) a1-0) + ) + ) + (+! (-> self spin-ry) (* f30-0 (-> *display* seconds-per-frame))) + (quaternion-axis-angle! + (-> self root-override quat) + 0.0 + 1.0 + 0.0 + (-> self spin-ry) + ) + (if (and *target* (logtest? (-> *target* water flags) 512)) + (dummy-20 self f30-0) + ) + (update! (-> self sound)) + (let + ((f0-9 + (fmin 1.0 (* 0.000007608261 (fmax 0.0 (+ -28580.979 (fabs f30-0))))) + ) + ) + (update-vol! (-> self sound) (the int (* 100.0 f0-9))) + ) + ) + (none) + ) + :code + (the-as (function none :behavior whirlpool) anim-loop) + :post + (the-as (function none :behavior whirlpool) ja-post) + ) + +(defmethod deactivate whirlpool ((obj whirlpool)) + (if (nonzero? (-> obj sound)) + (stop! (-> obj sound)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +(defmethod copy-defaults! whirlpool ((obj whirlpool) (arg0 res-lump)) + (local-vars (sv-16 res-tag)) + (set! (-> obj spin-ry) (rand-vu-float-range 0.0 65536.0)) + (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 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-vector! (-> s3-0 local-sphere) 0.0 -819.2 0.0 11468.8) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *whirlpool-sg* '()) + (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15) + (let ((f30-0 32768.0) + (f28-0 145635.56) + ) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-17 (res-lump-data arg0 'speed (pointer float) :tag-ptr (& sv-16)))) + (when v1-17 + (set! f30-0 (-> v1-17 0)) + (set! f28-0 (-> v1-17 1)) + ) + ) + (set! (-> obj spin-speed-idle) f30-0) + (set! (-> obj spin-speed-delta) (- f28-0 f30-0)) + ) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 447) obj) + ) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "whirlpool") + :volume #x400 + :fo-max 55 + ) + (-> obj root-override trans) + ) + ) + (ja-channel-set! 1) + (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 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (go whirlpool-idle) + (none) + ) + + + + diff --git a/goal_src/levels/swamp/billy.gc b/goal_src/levels/swamp/billy.gc index 7156661efa..f45e6ba7d0 100644 --- a/goal_src/levels/swamp/billy.gc +++ b/goal_src/levels/swamp/billy.gc @@ -5,3 +5,2042 @@ ;; name in dgo: billy ;; dgos: L1, SWA +(define-extern *billy-sg* skeleton-group) +(define-extern *billy-sidekick-sg* skeleton-group) +(define-extern *farthy-snack-sg* skeleton-group) + +(declare-type billy-snack process-drawable) + +;; DECOMP BEGINS + +(deftype billy (process-taskable) + ((child-override (pointer billy-snack) :offset 20) + (farthy handle :offset-assert 384) + (path-data path-control 3 :offset-assert 392) + (path-snacks path-control :offset 392) + (path-starts path-control :offset 396) + (path-waypts path-control :offset 400) + (passed-last-stage symbol :offset-assert 404) + (spawn-rats symbol :offset-assert 408) + (current-wave int32 :offset-assert 412) + (wave-start-time uint64 :offset-assert 416) + (num-snacks int32 :offset-assert 424) + (num-rats int32 :offset-assert 428) + (max-rats int32 :offset-assert 432) + (rat-speed float :offset-assert 436) + (offending-rat handle :offset-assert 440) + ) + :heap-base #x150 + :method-count-assert 53 + :size-assert #x1c0 + :flag-assert #x35015001c0 + (:states + billy-done + billy-playing + ) + ) + + +(defmethod relocate billy ((obj billy) (arg0 int)) + (countdown (v1-0 3) + (if (nonzero? (-> obj path-data v1-0)) + (&+! (-> obj path-data v1-0) arg0) + ) + ) + (the-as + billy + ((the-as + (function process-drawable int process-drawable) + (find-parent-method billy 7) + ) + obj + arg0 + ) + ) + ) + +(deftype billy-snack (process-drawable) + ((num-rats int32 :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + billy-snack-eat + billy-snack-idle + ) + ) + + +(defskelgroup *farthy-snack-sg* farthy-snack + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +(defstate billy-snack-eat (billy-snack) + :code + (behavior () + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-3 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + 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! + ) + ) + ) + (deactivate self) + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior billy-snack) ja-post) + ) + +(defstate billy-snack-idle (billy-snack) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('eat) + (go billy-snack-eat) + ) + ) + ) + :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 billy-snack) ja-post) + ) + +(defbehavior billy-snack-init-by-other billy-snack ((arg0 vector)) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg0 quad)) + (initialize-skeleton self *farthy-snack-sg* '()) + (set! (-> self num-rats) 0) + (go billy-snack-idle) + (none) + ) + +(deftype billy-rat (swamp-rat) + ((dest-type uint64 :offset-assert 496) + (snack handle :offset-assert 504) + (destination vector :inline :offset-assert 512) + (billy (pointer billy) :offset-assert 528) + ) + :heap-base #x1b0 + :method-count-assert 76 + :size-assert #x214 + :flag-assert #x4c01b00214 + (:states + billy-rat-eat + billy-rat-salivate + ) + ) + + +(defun rat-about-to-eat? ((arg0 billy-rat) (arg1 billy)) + (the-as + symbol + (and + (= (-> arg0 dest-type) 2) + (> (-> arg1 num-snacks) 0) + (handle->process (-> arg0 snack)) + ) + ) + ) + +(defstate nav-enemy-idle (billy-rat) + :virtual #t + :enter + (behavior () + (go-virtual nav-enemy-chase) + (none) + ) + :post + (the-as (function none :behavior billy-rat) nav-enemy-common-post) + ) + +(defstate nav-enemy-die (billy-rat) + :virtual #t + :code + (behavior () + (nav-enemy-fall-and-play-death-anim + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info die-anim)) + ) + 1.0 + 1.0 + 1000000000000000.0 + 600 + ) + (send-event (ppointer->process (-> self billy)) 'billy-rat-die) + (dummy-18 self) + (none) + ) + ) + +(defstate billy-rat-eat (billy-rat) + :trans + (behavior () + (seek-to-point-toward-point! + (-> self collide-info) + (-> self destination) + 131072.0 + 3 + ) + (none) + ) + :code + (behavior () + (send-event (handle->process (-> self snack)) 'eat) + (sound-play-by-name + (static-sound-name "rat-gulp") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (ja-channel-push! 1 15) + (let ((v1-8 (-> self skel root-channel 0))) + (set! + (-> v1-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 12)) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-9 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 param 0) + (the float (+ (-> a0-10 frame-group data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (send-event (ppointer->process (-> self billy)) 'billy-rat-needs-destination) + (logclear! (-> self nav flags) (nav-control-flags bit19)) + (go-virtual nav-enemy-chase) + (none) + ) + :post + (the-as (function none :behavior billy-rat) nav-enemy-simple-post) + ) + +(defstate billy-rat-salivate (billy-rat) + :event + (the-as + (function process int symbol event-message-block object :behavior billy-rat) + nav-enemy-default-event-handler + ) + :code + (behavior () + (ja-channel-push! 1 22) + (dotimes (gp-0 1) + (sound-play-by-name + (static-sound-name "rat-eat") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) f30-0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + 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) f30-0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (send-event (ppointer->process (-> self billy)) 'billy-rat-needs-destination) + (if (= (-> self dest-type) 3) + (go billy-rat-eat) + (go-virtual nav-enemy-chase) + ) + (none) + ) + :post + (the-as (function none :behavior billy-rat) nav-enemy-simple-post) + ) + +(defstate nav-enemy-victory (billy-rat) + :virtual #t + :enter + (behavior () + (let + ((t9-1 + (-> (the-as (state nav-enemy) (find-parent-method billy-rat 33)) enter) + ) + ) + (if t9-1 + (t9-1) + ) + ) + (when (logtest? (nav-control-flags bit19) (-> self nav flags)) + (logclear! (-> self nav flags) (nav-control-flags bit19)) + (if (rat-about-to-eat? self (-> self billy 0)) + (go billy-rat-salivate) + (send-event + (ppointer->process (-> self billy)) + 'billy-rat-needs-destination + ) + ) + ) + (none) + ) + ) + +(defstate nav-enemy-stare (billy-rat) + :virtual #t + :enter + (behavior () + (go-virtual nav-enemy-chase) + (none) + ) + ) + +(defstate nav-enemy-chase (billy-rat) + :virtual #t + :trans + (behavior () + (set! (-> self speed-scale) (-> self billy 0 rat-speed)) + (if + (or + (logtest? (nav-control-flags bit19) (-> self nav flags)) + (>= + (- (-> *display* base-frame-counter) (-> self state-time)) + (the-as int (-> self chase-rest-time)) + ) + ) + (go-virtual nav-enemy-victory) + ) + (none) + ) + :post + (behavior () + (swamp-rat-update-wiggle-target (-> self destination)) + (nav-enemy-travel-post) + (none) + ) + ) + +(defbehavior + billy-rat-init-by-other billy-rat + ((arg0 billy) (arg1 vector) (arg2 vector)) + (set! (-> self billy) (the-as (pointer billy) (process->ppointer arg0))) + (set! (-> self destination quad) (-> arg2 quad)) + (set! (-> self dest-type) (the-as uint 1)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (vector-! s4-0 arg2 arg1) + (set! (-> s4-0 y) 0.0) + (vector-normalize! s4-0 1.0) + (swamp-rat-init-by-other arg0 arg1 s4-0 (pickup-type none) #t) + ) + (none) + ) + +(defskelgroup *billy-sg* billy + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + :longest-edge (meters 1) + :shadow 2 + ) + +(defskelgroup *billy-sidekick-sg* billy-sidekick + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +(defbehavior billy-kill-all-but-farthy billy () + (let* ((gp-0 (the-as (pointer process-tree) (-> self child-override))) + (s5-0 (-> (the-as (pointer billy-snack) gp-0) 0 brother)) + ) + (while gp-0 + (if + (not + (or + (= gp-0 (-> self farthy process)) + (type-type? (-> (ppointer->process gp-0) type) fuel-cell) + ) + ) + (deactivate (-> gp-0 0)) + ) + (set! gp-0 s5-0) + (set! s5-0 (-> gp-0 0 brother)) + ) + ) + #f + ) + +(defmethod play-anim! billy ((obj billy) (arg0 symbol)) + (case (current-status (-> obj tasks)) + (((task-status need-hint) (task-status need-introduction)) + (when arg0 + (set! (-> obj blend-on-exit) #t) + (close-status! (-> obj tasks) (task-status need-introduction)) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (dotimes + (s4-0 + (+ + (the int (the float (+ (-> obj path-snacks curve num-cverts) -1))) + 1 + ) + ) + (eval-path-curve-div! (-> obj path-snacks) s5-1 (the float s4-0) 'exact) + (set! (-> s5-1 x) (+ -40960.0 (-> s5-1 x))) + (set! (-> s5-1 z) (+ 20480.0 (-> s5-1 z))) + (let ((s3-0 (get-process *default-dead-pool* manipy #x4000))) + (when s3-0 + (let ((t9-4 (method-of-type manipy activate))) + (t9-4 (the-as manipy s3-0) obj 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process + s3-0 + manipy-init + s5-1 + (-> obj entity) + *farthy-snack-sg* + #f + ) + (-> s3-0 ppointer) + ) + ) + ) + ) + ) + (new 'static 'spool-anim + :name "billy-introduction" + :index 5 + :parts 14 + :command-list + '( + (0 + kill + "swamp-blimp-3" + ) + (0 + kill + "swamp-tetherrock-14" + ) + (0 + kill + "swamp-tetherrock-15" + ) + (0 + kill + "flutflut-3" + ) + (0 + kill + "tar-plat-26" + ) + (0 + kill + "tar-plat-25" + ) + (0 + kill + "babak-380" + ) + (0 + kill + "eco-164" + ) + (0 + kill + "eco-165" + ) + (0 + kill + "eco-140" + ) + (0 + kill + "launcher-97" + ) + (0 + kill + "swamp-rat-nest-5" + ) + (0 + kill + "swamp-rat-nest-4" + ) + (0 + kill + "swamp-rat-nest-3" + ) + (0 + kill + "swamp-rat-nest-2" + ) + (0 + kill + "sharkey-9" + ) + (0 + kill + "launcher-46" + ) + (0 + kill + "launcher-44" + ) + (0 + kill + "launcher-42" + ) + (0 + kill + "swamp-spike-43" + ) + (0 + kill + "swamp-spike-44" + ) + (0 + kill + "swamp-spike-45" + ) + ((the binteger 346) + blackout + (the binteger 10) + ) + ((the binteger 349) + blackout + 0 + ) + ((the binteger 494) + blackout + (the binteger 10) + ) + ((the binteger 497) + blackout + 0 + ) + ((the binteger 1145) + blackout + (the binteger 10) + ) + ((the binteger 1148) + blackout + 0 + ) + ((the binteger 1518) + blackout + (the binteger 10) + ) + ((the binteger 1521) blackout 0) + ) + ) + ) + (((task-status need-reminder-a) (task-status need-reminder)) + (set! (-> obj skippable) #t) + (set! (-> obj blend-on-exit) #t) + (set! (-> obj will-talk) #t) + (new 'static 'spool-anim + :name "billy-reminder-1" + :index 8 + :parts 2 + :command-list + '( + (0 + kill + "swamp-blimp-3" + ) + (0 + kill + "swamp-tetherrock-14" + ) + (0 + kill + "swamp-tetherrock-15" + ) + (0 + kill + "flutflut-3" + ) + (0 + kill + "tar-plat-26" + ) + (0 + kill + "tar-plat-25" + ) + (0 + kill + "babak-380" + ) + (0 + kill + "eco-164" + ) + (0 + kill + "eco-165" + ) + (0 + kill + "eco-140" + ) + (0 + kill + "launcher-97" + ) + (0 + kill + "swamp-rat-nest-5" + ) + (0 + kill + "swamp-rat-nest-4" + ) + (0 + kill + "swamp-rat-nest-3" + ) + (0 + kill + "swamp-rat-nest-2" + ) + (0 + kill + "sharkey-9" + ) + (0 + kill + "launcher-46" + ) + (0 + kill + "launcher-44" + ) + (0 + kill + "launcher-42" + ) + (0 + kill + "swamp-spike-43" + ) + (0 kill "swamp-spike-44") (0 kill "swamp-spike-45") + ) + ) + ) + (((task-status need-reward-speech)) + (when arg0 + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) + (close-current! (-> obj tasks)) + ) + (new 'static 'spool-anim + :name "billy-resolution" + :index 9 + :parts 2 + :command-list + '( + (0 + kill + "swamp-blimp-3" + ) + (0 + kill + "swamp-tetherrock-14" + ) + (0 + kill + "swamp-tetherrock-15" + ) + (0 + kill + "flutflut-3" + ) + (0 + kill + "tar-plat-26" + ) + (0 + kill + "tar-plat-25" + ) + (0 + kill + "babak-380" + ) + (0 + kill + "eco-164" + ) + (0 + kill + "eco-165" + ) + (0 + kill + "eco-140" + ) + (0 + kill + "launcher-97" + ) + (0 + kill + "swamp-rat-nest-5" + ) + (0 + kill + "swamp-rat-nest-4" + ) + (0 + kill + "swamp-rat-nest-3" + ) + (0 + kill + "swamp-rat-nest-2" + ) + (0 + kill + "sharkey-9" + ) + (0 + kill + "launcher-46" + ) + (0 + kill + "launcher-44" + ) + (0 + kill + "launcher-42" + ) + (0 + kill + "swamp-spike-43" + ) + (0 kill "swamp-spike-44") (0 kill "swamp-spike-45") + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string (current-status (-> obj tasks))) + ) + ) + (-> obj draw art-group data 3) + ) + ) + ) + +(defmethod get-art-elem billy ((obj billy)) + (case (current-status (-> obj tasks)) + (((task-status invalid) (task-status need-resolution)) + (-> obj draw art-group data 10) + ) + (else + (-> obj draw art-group data 3) + ) + ) + ) + +(defmethod dummy-38 billy ((obj billy)) + (case (current-status (-> obj tasks)) + (((task-status need-reminder-a) (task-status need-reminder)) + (go (method-of-object obj query)) + ) + (((task-status need-reward-speech)) + (go (method-of-object obj play-anim)) + ) + (else + ((the-as (function nav-enemy none) (find-parent-method billy 38)) + (the-as nav-enemy obj) + ) + ) + ) + (none) + ) + +(defmethod get-accept-anim billy ((obj billy) (arg0 symbol)) + (if arg0 + (close-current! (-> obj tasks)) + ) + (new 'static 'spool-anim + :name "billy-accept" + :index 6 + :parts 3 + :command-list '() + ) + ) + +(defmethod get-reject-anim billy ((obj billy) (arg0 symbol)) + (new 'static 'spool-anim + :name "billy-reject" + :index 7 + :parts 3 + :command-list '() + ) + ) + +(defstate billy-done (billy) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'billy-rat-needs-destination) + (let* ((gp-0 arg0) + (v1-2 + (if + (and + (nonzero? gp-0) + (type-type? (-> gp-0 type) billy-rat) + ) + gp-0 + ) + ) + ) + (when v1-2 + (set! + (-> (the-as billy-rat v1-2) dest-type) + (the-as uint 1) + ) + (get-random-point + (-> self path-waypts) + (-> (the-as billy-rat v1-2) destination) + ) + ) + ) + ) + ) + ) + ) + :enter + (behavior () + (init! + (-> self query) + (lookup-text! *common-text* (game-text-id play-again?) #f) + 40 + 150 + 30 + #f + (lookup-text! *common-text* (game-text-id quit) #f) + ) + (ja-channel-set! 1) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (get-art-elem self))) + ) + (send-event *target* 'end-mode) + (when + (and (handle->process (-> self offending-rat)) (zero? (-> self num-snacks))) + (send-event + *camera* + 'change-target + (handle->process (-> self offending-rat)) + ) + (send-event *camera* 'change-state cam-standoff 0) + (send-event *camera* 'set-standoff-height 0.0) + (send-event *camera* 'set-standoff-dist 20480.0) + (send-event *camera* 'set-standoff-height 16384.0) + (send-event *camera-combiner* 'stop-tracking) + (send-event + *camera-combiner* + 'start-tracking + (ppointer->process (-> *camera* slave 0)) + ) + (let ((a0-24 (get-reminder (-> self tasks) 0))) + (save-reminder (-> self tasks) (seekl a0-24 255 1) 0) + ) + (let* ((v1-49 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-50 (the-as number (logior #x3f800000 v1-49))) + (f0-2 (+ -1.0 (the-as float v1-50))) + ) + (cond + ((< 0.75 f0-2) + (play-ambient (-> self ambient) "BIL-TA04" #t (the-as vector #f)) + ) + ((< 0.5 f0-2) + (play-ambient (-> self ambient) "BIL-TA05" #t (the-as vector #f)) + ) + ((< 0.25 f0-2) + (play-ambient (-> self ambient) "BIL-TA4A" #t (the-as vector #f)) + ) + (else + (play-ambient (-> self ambient) "BIL-TA5A" #t (the-as vector #f)) + ) + ) + ) + ) + (none) + ) + :exit + (behavior () + (billy-kill-all-but-farthy) + (send-event *camera* 'change-target *target*) + (send-event *camera* 'change-state *camera-base-mode* 0) + (none) + ) + :trans + (behavior () + (cond + ((> (-> self num-snacks) 0) + (when (process-grab? *target*) + (close-current! (-> self tasks)) + (go-virtual play-anim) + ) + ) + ((< (-> self num-snacks) 0) + (go-virtual idle) + ) + (else + (process-grab? *target*) + (when (and *target* (logtest? (-> *target* state-flags) 256)) + (let ((gp-0 (get-response (-> self query)))) + (cond + ((and (= gp-0 'yes) (process-release? *target*)) + (go-virtual enter-playing) + ) + ((= gp-0 'no) + (go-virtual play-reject) + ) + ) + ) + ) + ) + ) + (spool-push *art-control* "billy-reject" 0 self -99.0) + (none) + ) + :code + (the-as (function none :behavior billy) process-taskable-anim-loop) + :post + (behavior () + (ja-post) + (none) + ) + ) + +(defbehavior billy-game-update-wave billy () + (let* + ((a0-2 + (/ (the-as uint (+ (get-reminder (-> self tasks) 0) 1)) (the-as uint 5)) + ) + (v1-4 (min 3 (the-as int a0-2))) + ) + (cond + ((zero? v1-4) + (let ((v1-5 (-> self current-wave))) + (cond + ((zero? v1-5) + (set! (-> self max-rats) 6) + (set! (-> self rat-speed) 1.0) + (set! (-> self spawn-rats) #t) + (set! (-> self passed-last-stage) #f) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 4500 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-5 2) + (set! (-> self max-rats) 8) + (set! (-> self rat-speed) 1.2) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 6000 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-5 4) + (set! (-> self max-rats) 10) + (set! (-> self rat-speed) 1.35) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 7500 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + ) + ) + ((= v1-4 1) + (let ((v1-30 (-> self current-wave))) + (cond + ((zero? v1-30) + (set! (-> self max-rats) 6) + (set! (-> self rat-speed) 1.0) + (set! (-> self spawn-rats) #t) + (set! (-> self passed-last-stage) #f) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 4500 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-30 2) + (set! (-> self max-rats) 7) + (set! (-> self rat-speed) 1.2) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 6000 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-30 4) + (set! (-> self max-rats) 10) + (set! (-> self rat-speed) 1.3) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 6600 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + ) + ) + ((= v1-4 2) + (let ((v1-55 (-> self current-wave))) + (cond + ((zero? v1-55) + (set! (-> self max-rats) 6) + (set! (-> self rat-speed) 1.0) + (set! (-> self spawn-rats) #t) + (set! (-> self passed-last-stage) #f) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 4500 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-55 2) + (set! (-> self max-rats) 7) + (set! (-> self rat-speed) 1.1) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 5400 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-55 4) + (set! (-> self max-rats) 9) + (set! (-> self rat-speed) 1.25) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 6000 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + ) + ) + (else + (let ((v1-80 (-> self current-wave))) + (cond + ((zero? v1-80) + (set! (-> self max-rats) 5) + (set! (-> self rat-speed) 0.9) + (set! (-> self spawn-rats) #t) + (set! (-> self passed-last-stage) #f) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 4500 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-80 2) + (set! (-> self max-rats) 6) + (set! (-> self rat-speed) 1.0) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 5400 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-80 4) + (set! (-> self max-rats) 8) + (set! (-> self rat-speed) 1.1) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 6000 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + +(defbehavior billy-game-update billy () + (let ((v1-0 (-> self current-wave))) + (cond + ((or (zero? v1-0) (= v1-0 2) (= v1-0 4)) + (billy-game-update-wave) + ) + ((= v1-0 5) + (set! (-> self spawn-rats) #f) + (set! (-> self passed-last-stage) #t) + ) + ((begin + (set! (-> self spawn-rats) #f) + (zero? (-> self num-rats)) + ) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 900 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + (else + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + (when (and (< (-> self num-rats) (-> self max-rats)) (-> self spawn-rats)) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (get-random-point (-> self path-starts) gp-0) + (get-random-point (-> self path-waypts) s5-0) + (let ((s4-0 (get-process *default-dead-pool* billy-rat #x4000))) + (if (when s4-0 + (let ((t9-4 (method-of-type billy-rat activate))) + (t9-4 + (the-as billy-rat s4-0) + self + 'billy-rat + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s4-0 billy-rat-init-by-other self gp-0 s5-0) + (-> s4-0 ppointer) + ) + (+! (-> self num-rats) 1) + ) + ) + ) + ) + 0 + (none) + ) + +(defstate billy-playing (billy) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('billy-rat-die) + (+! (-> self num-rats) -1) + (let* ((v1-4 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-5 (the-as number (logior #x3f800000 v1-4))) + (f0-2 (+ -1.0 (the-as float v1-5))) + (f0-3 (* 3.0 f0-2)) + ) + (cond + ((< 1.0 f0-3) + #f + ) + ((< 0.8333333 f0-3) + (play-ambient (-> self ambient) "SKSP009F" #t (the-as vector #f)) + ) + ((< 0.6666667 f0-3) + (play-ambient (-> self ambient) "BIL-TA02" #t (the-as vector #f)) + ) + ((< 0.5 f0-3) + (play-ambient (-> self ambient) "BIL-TA08" #t (the-as vector #f)) + ) + ((< 0.33333334 f0-3) + (play-ambient (-> self ambient) "BIL-TA09" #t (the-as vector #f)) + ) + ((< 0.16666667 f0-3) + (play-ambient (-> self ambient) "BIL-TA2A" #t (the-as vector #f)) + ) + (else + (play-ambient (-> self ambient) "BIL-TA4B" #t (the-as vector #f)) + ) + ) + ) + ) + (('billy-rat-needs-destination) + (let* ((s5-0 arg0) + (gp-0 + (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) billy-rat)) + (the-as billy-rat s5-0) + ) + ) + ) + (when gp-0 + (let* ((v1-15 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-16 (the-as number (logior #x3f800000 v1-15))) + (f0-6 (+ -1.0 (the-as float v1-16))) + ) + (cond + ((< 0.75 f0-6) + (play-ambient (-> self ambient) "BIL-TA01" #t (the-as vector #f)) + ) + ((< 0.5 f0-6) + (play-ambient (-> self ambient) "BIL-TA03" #t (the-as vector #f)) + ) + ((< 0.25 f0-6) + (play-ambient (-> self ambient) "BIL-TA1A" #t (the-as vector #f)) + ) + (else + (play-ambient (-> self ambient) "BIL-TA3A" #t (the-as vector #f)) + ) + ) + ) + (cond + ((rat-about-to-eat? gp-0 self) + (set! (-> self num-snacks) 0) + (set! (-> self offending-rat) (process->handle gp-0)) + (set! (-> gp-0 dest-type) (the-as uint 3)) + (let ((v0-1 (the-as object (-> gp-0 destination)))) + (set! + (-> (the-as vector v0-1) quad) + (-> (the-as billy-snack (-> gp-0 snack process 0)) root trans quad) + ) + v0-1 + ) + ) + ((or + (= (-> gp-0 dest-type) 2) + (= (-> gp-0 dest-type) 3) + (<= (-> self num-snacks) 0) + ) + (set! (-> gp-0 dest-type) (the-as uint 1)) + (get-random-point (-> self path-starts) (-> gp-0 destination)) + ) + (else + (let ((s3-0 100) + (s4-0 0) + (s2-0 (the-as (pointer process-tree) (-> self child-override))) + (s5-1 (the-as process-tree #f)) + ) + (while s2-0 + (let* ((s1-0 (ppointer->process s2-0)) + (v1-47 + (if + (and + (nonzero? s1-0) + (type-type? (-> s1-0 type) billy-snack) + ) + s1-0 + ) + ) + ) + (cond + ((not v1-47) + ) + ((< (-> (the-as billy-snack v1-47) num-rats) s3-0) + (set! s5-1 v1-47) + (set! s3-0 (-> (the-as billy-snack v1-47) num-rats)) + (set! s4-0 1) + ) + ((= (-> (the-as billy-snack v1-47) num-rats) s3-0) + (+! s4-0 1) + ) + ) + ) + (set! s2-0 (-> s2-0 0 brother)) + ) + (cond + ((zero? s4-0) + (set! (-> gp-0 dest-type) (the-as uint 1)) + (get-random-point (-> self path-waypts) (-> gp-0 destination)) + ) + (else + (set! (-> gp-0 snack) (process->handle (the-as billy-snack s5-1))) + (+! (-> (the-as billy-snack s5-1) num-rats) 1) + (set! (-> gp-0 dest-type) (the-as uint 2)) + (set! + (-> gp-0 destination quad) + (-> (the-as billy-snack s5-1) root trans quad) + ) + (let ((f0-8 (+ 6799.36 (-> gp-0 destination x)))) + (set! (-> gp-0 destination x) f0-8) + f0-8 + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :enter + (behavior () + (push-setting! *setting-control* self 'music 'danger 0.0 0) + (ja-channel-set! 0) + (dummy-48 (-> self root-override)) + (init! + (-> self query) + (the-as string #f) + 40 + 150 + 25 + #t + (lookup-text! *common-text* (game-text-id quit) #f) + ) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (set! (-> self num-snacks) 0) + (set! (-> self num-rats) 0) + (set! (-> self current-wave) 0) + (set! (-> self offending-rat) (the-as handle #f)) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (dotimes + (s5-1 + (+ (the int (the float (+ (-> self path-snacks curve num-cverts) -1))) 1) + ) + (eval-path-curve-div! (-> self path-snacks) gp-1 (the float s5-1) 'exact) + (let ((s4-1 (get-process *default-dead-pool* billy-snack #x4000))) + (if (when s4-1 + (let ((t9-7 (method-of-type billy-snack activate))) + (t9-7 + (the-as billy-snack s4-1) + self + 'billy-snack + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s4-1 billy-snack-init-by-other gp-1) + (-> s4-1 ppointer) + ) + (+! (-> self num-snacks) 1) + ) + ) + ) + ) + (backup-load-state-and-set-cmds *load-state* '()) + (let* + ((gp-2 + '( + (kill + "swamp-blimp-3" + ) + (kill + "swamp-tetherrock-14" + ) + (kill + "swamp-tetherrock-15" + ) + (kill + "flutflut-3" + ) + (kill + "tar-plat-26" + ) + (kill + "tar-plat-25" + ) + (kill + "babak-380" + ) + (kill + "eco-164" + ) + (kill + "eco-165" + ) + (kill + "eco-140" + ) + (kill + "launcher-97" + ) + (kill + "swamp-rat-nest-5" + ) + (kill + "swamp-rat-nest-4" + ) + (kill + "swamp-rat-nest-3" + ) + (kill + "swamp-rat-nest-2" + ) + (kill + "sharkey-9" + ) + (kill + "launcher-46" + ) + (kill + "launcher-44" + ) + (kill + "launcher-42" + ) + (kill "swamp-spike-43") (kill "swamp-spike-44") (kill "swamp-spike-45") + ) + ) + (a1-8 (car gp-2)) + ) + (while (not (null? gp-2)) + (execute-command *load-state* (the-as pair a1-8)) + (set! gp-2 (cdr gp-2)) + (set! a1-8 (car gp-2)) + ) + ) + (none) + ) + :exit + (behavior () + (dummy-49 (-> self root-override)) + (restore-load-state-and-cleanup *load-state*) + (set! (-> *ACTOR-bank* birth-max) 1000) + (clear-pending-settings-from-process *setting-control* self 'music) + (none) + ) + :trans + (behavior () + (spool-push *art-control* "billy-resolution" 0 self -99.0) + (spool-push *art-control* "billy-reject" 0 self -99.0) + (none) + ) + :code + (behavior () + (while #t + (billy-game-update) + (if + (or + (zero? (-> self num-snacks)) + (and (zero? (-> self num-rats)) (-> self passed-last-stage)) + (and + *cheat-mode* + (logtest? (-> *cpad-list* cpads 1 button0-rel 0) (pad-buttons x)) + ) + ) + (go billy-done) + ) + (suspend) + ) + (none) + ) + :post + (behavior () + (ja-post) + (none) + ) + ) + +(defstate enter-playing (billy) + :virtual #t + :trans + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'change-mode) + (set! (-> a1-0 param 0) (the-as uint 'billy)) + (when (send-event-function *target* a1-0) + (send-event *target* 'trans 'reset) + (let ((v1-8 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (cond + (v1-8 + (TODO-RENAME-30 (-> *target* control) (-> v1-8 extra trans)) + (go billy-playing) + ) + (else + ) + ) + ) + ) + ) + (none) + ) + ) + +(defmethod TODO-RENAME-43 billy ((obj billy)) + (when + (TODO-RENAME-10 + (-> obj ambient) + (new 'stack-no-clear 'vector) + 9000 + 122880.0 + obj + ) + (let* ((v1-3 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-4 (the-as number (logior #x3f800000 v1-3))) + (f30-0 (+ -1.0 (the-as float v1-4))) + ) + (cond + ((< 0.9411765 f30-0) + (play-ambient (-> obj ambient) "BIL-AM01" #f (-> obj root-override trans)) + ) + ((< 0.88235295 f30-0) + (play-ambient (-> obj ambient) "BIL-AM02" #f (-> obj root-override trans)) + ) + ((< 0.8235294 f30-0) + (play-ambient (-> obj ambient) "BIL-AM03" #f (-> obj root-override trans)) + ) + ((< 0.7647059 f30-0) + (play-ambient (-> obj ambient) "BIL-AM04" #f (-> obj root-override trans)) + ) + ((< 0.7058824 f30-0) + (play-ambient (-> obj ambient) "BIL-AM05" #f (-> obj root-override trans)) + ) + ((< 0.64705884 f30-0) + (play-ambient (-> obj ambient) "BIL-AM06" #f (-> obj root-override trans)) + ) + ((< 0.5882353 f30-0) + (play-ambient (-> obj ambient) "BIL-AM07" #f (-> obj root-override trans)) + ) + ((< 0.5294118 f30-0) + (play-ambient (-> obj ambient) "BIL-AM08" #f (-> obj root-override trans)) + ) + ((< 0.47058824 f30-0) + (play-ambient (-> obj ambient) "BIL-AM1A" #f (-> obj root-override trans)) + ) + ((< 0.4117647 f30-0) + (play-ambient (-> obj ambient) "BIL-AM2A" #f (-> obj root-override trans)) + ) + ((< 0.3529412 f30-0) + (play-ambient (-> obj ambient) "BIL-AM2B" #f (-> obj root-override trans)) + ) + ((= (current-status (-> obj tasks)) (task-status invalid)) + #f + ) + ((< 0.29411766 f30-0) + (play-ambient (-> obj ambient) "BIL-LO01" #f (-> obj root-override trans)) + ) + ((< 0.23529412 f30-0) + (play-ambient (-> obj ambient) "BIL-LO02" #f (-> obj root-override trans)) + ) + ((< 0.1764706 f30-0) + (play-ambient (-> obj ambient) "BIL-LO03" #f (-> obj root-override trans)) + ) + ((< 0.11764706 f30-0) + (play-ambient (-> obj ambient) "BIL-LO1A" #f (-> obj root-override trans)) + ) + ((< 0.05882353 f30-0) + (play-ambient (-> obj ambient) "BIL-LO2A" #f (-> obj root-override trans)) + ) + (else + (play-ambient (-> obj ambient) "BIL-LO2B" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +(defstate play-anim (billy) + :virtual #t + :exit + (behavior () + (billy-kill-all-but-farthy) + ((-> (method-of-type process-taskable play-anim) exit)) + (none) + ) + ) + +(defstate idle (billy) + :virtual #t + :code + (behavior () + (if (!= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (get-art-elem self) + ) + (ja-channel-push! 1 60) + ) + (while #t + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (get-art-elem self))) + ) + (let* ((f30-0 5.0) + (v1-9 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-10 (the-as number (logior #x3f800000 v1-9))) + ) + (countdown (gp-1 (+ (the int (* f30-0 (+ -1.0 (the-as float v1-10)))) 5)) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-10 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-10 param 1) 1.0) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! + a0-10 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (TODO-RENAME-43 self) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 param 0) + (the float (+ (-> a0-12 frame-group data 0 length) -1)) + ) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 3) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! + (-> a0-19 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-19 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-19 param 1) 1.0) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! + a0-19 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-20 (-> self skel root-channel 0))) + (set! + (-> a0-20 param 0) + (the float (+ (-> a0-20 frame-group data 0 length) -1)) + ) + (set! (-> a0-20 param 1) 1.0) + (joint-control-channel-group-eval! + a0-20 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +(defmethod target-above-threshold? billy ((obj billy)) + (the-as + symbol + (and + *target* + (zero? (logand (-> *target* control root-prim prim-core action) #x4000)) + ) + ) + ) + +(defmethod copy-defaults! billy ((obj billy) (arg0 res-lump)) + (dummy-40 obj arg0 *billy-sg* 3 40 (new 'static 'vector :w 4096.0) 5) + (set! (-> obj tasks) (get-task-control (game-task swamp-billy))) + (dotimes (s5-0 3) + (let ((v1-3 (new 'process 'curve-control obj 'path (the float s5-0)))) + (set! (-> obj path-data s5-0) v1-3) + (logior! + (-> v1-3 flags) + (path-control-flag display draw-line draw-point draw-text) + ) + ) + ) + (set! (-> obj path) (-> obj path-snacks)) + (let ((s5-1 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj farthy) (ppointer->handle (when s5-1 + (let + ((t9-4 + (method-of-type manipy activate) + ) + ) + (t9-4 + (the-as manipy s5-1) + obj + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + manipy-init + (-> obj root-override trans) + (-> obj entity) + *billy-sidekick-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> obj farthy)) 'center-joint 3) + (send-event (handle->process (-> obj farthy)) 'anim-mode 'clone-anim) + (dummy-42 obj) + (none) + ) + + + + diff --git a/goal_src/levels/swamp/swamp-rat.gc b/goal_src/levels/swamp/swamp-rat.gc index 441d44d52a..da12392145 100644 --- a/goal_src/levels/swamp/swamp-rat.gc +++ b/goal_src/levels/swamp/swamp-rat.gc @@ -6,6 +6,7 @@ ;; dgos: L1, SWA (declare-type swamp-rat-nest process-drawable) +(declare-type billy process-taskable) ;; DECOMP BEGINS @@ -858,12 +859,7 @@ swamp-rat-default-event-handler (defbehavior swamp-rat-init-by-other swamp-rat - ((arg0 swamp-rat-nest) - (arg1 vector) - (arg2 vector) - (arg3 pickup-type) - (arg4 symbol) - ) + ((arg0 billy) (arg1 vector) (arg2 vector) (arg3 pickup-type) (arg4 symbol)) (initialize-collision self) (if arg4 (logclear! (-> self mask) (process-mask actor-pause)) diff --git a/goal_src/levels/village1/yakow.gc b/goal_src/levels/village1/yakow.gc index c3b9b0f5c4..97609f8e8a 100644 --- a/goal_src/levels/village1/yakow.gc +++ b/goal_src/levels/village1/yakow.gc @@ -432,7 +432,11 @@ yakow-default-event-handler (set! (-> gp-1 y) 0.0) (set! (-> self nav travel quad) (-> gp-1 quad)) (vector-normalize! (-> self nav travel) 409600.0) - (dummy-24 (-> self nav) 204.8 #f) + (dummy-24 + (-> self nav) + 204.8 + (the-as clip-travel-vector-to-mesh-return-info #f) + ) (when (not (-> self enable-turn-around)) (set! (-> gp-1 quad) (-> self nav travel quad)) (let ((f30-0 (vector-length gp-1))) @@ -443,7 +447,11 @@ yakow-default-event-handler ) (set! (-> self nav travel quad) (-> s5-1 quad)) (vector-normalize! (-> self nav travel) 409600.0) - (dummy-24 (-> self nav) 204.8 #f) + (dummy-24 + (-> self nav) + 204.8 + (the-as clip-travel-vector-to-mesh-return-info #f) + ) (vector-length (-> self nav travel)) ) ) diff --git a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc index bba6e446f6..79353890cb 100644 --- a/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-shape-h_REF.gc @@ -324,7 +324,7 @@ :flag-assert #x1d0000005c (:methods (new (symbol type basic uint uint) _type_ 0) - (dummy-28 () none 28) + (dummy-28 (_type_ int) none 28) ) ) @@ -411,16 +411,16 @@ (dummy-29 (_type_ int) none 29) (TODO-RENAME-30 (_type_ vector) none 30) (dummy-31 () none 31) - (dummy-32 () none 32) + (dummy-32 (_type_ float uint) none 32) (dummy-33 (_type_ vector uint) none 33) (dummy-34 (_type_ uint) collide-shape-prim 34) (dummy-35 (_type_) none 35) (dummy-36 () none 36) - (dummy-37 () none 37) + (dummy-37 (_type_ vector) none 37) (dummy-38 () none 38) (dummy-39 () none 39) (dummy-40 (_type_ structure) none 40) - (dummy-41 () none 41) + (dummy-41 (_type_ attack-info float) none 41) (dummy-42 () none 42) (dummy-43 () none 43) (dummy-44 (_type_) none 44) diff --git a/test/decompiler/reference/engine/collide/collide-touch-h_REF.gc b/test/decompiler/reference/engine/collide/collide-touch-h_REF.gc index a074e245ac..f4793bc83c 100644 --- a/test/decompiler/reference/engine/collide/collide-touch-h_REF.gc +++ b/test/decompiler/reference/engine/collide/collide-touch-h_REF.gc @@ -133,7 +133,7 @@ (touched-shape (_type_ collide-shape-moving) collide-shape 10) (dummy-11 () none 11) (prims-touching? (_type_ collide-shape-moving uint) touching-prims-entry 12) - (dummy-13 () none 13) + (dummy-13 (_type_ control-info int int) none 13) (dummy-14 () none 14) (dummy-15 () none 15) (get-head (_type_) touching-prims-entry 16) diff --git a/test/decompiler/reference/engine/game/collectables-part_REF.gc b/test/decompiler/reference/engine/game/collectables-part_REF.gc index 102c3613a0..d0a11fc775 100644 --- a/test/decompiler/reference/engine/game/collectables-part_REF.gc +++ b/test/decompiler/reference/engine/game/collectables-part_REF.gc @@ -69,7 +69,10 @@ a2-0 (* 0.006666667 - (the float (- (-> *display* base-frame-counter) (-> arg0 start-time))) + (the + float + (- (-> *display* base-frame-counter) (the-as int (-> arg0 start-time))) + ) ) ) ) diff --git a/test/decompiler/reference/engine/game/generic-obs-h_REF.gc b/test/decompiler/reference/engine/game/generic-obs-h_REF.gc index 74c0c83f20..69eb0998e3 100644 --- a/test/decompiler/reference/engine/game/generic-obs-h_REF.gc +++ b/test/decompiler/reference/engine/game/generic-obs-h_REF.gc @@ -78,19 +78,19 @@ ;; definition of type part-tracker (deftype part-tracker (process) - ((root trsqv :offset-assert 112) - (part sparticle-launch-control :offset-assert 116) - (target handle :offset-assert 120) - (callback (function part-tracker none) :offset-assert 128) - (linger-callback (function part-tracker none) :offset-assert 132) - (duration int64 :offset-assert 136) - (linger-duration int64 :offset-assert 144) - (start-time int64 :offset-assert 152) - (offset vector :inline :offset-assert 160) - (userdata uint64 :offset-assert 176) - (user-time int64 2 :offset-assert 184) - (user-vector vector 2 :inline :offset-assert 208) - (user-handle uint32 2 :offset-assert 240) + ((root trsqv :offset-assert 112) + (part sparticle-launch-control :offset-assert 116) + (target handle :offset-assert 120) + (callback (function part-tracker vector) :offset-assert 128) + (linger-callback (function part-tracker vector) :offset-assert 132) + (duration uint64 :offset-assert 136) + (linger-duration uint64 :offset-assert 144) + (start-time uint64 :offset-assert 152) + (offset vector :inline :offset-assert 160) + (userdata uint64 :offset-assert 176) + (user-time int64 2 :offset-assert 184) + (user-vector vector 2 :inline :offset-assert 208) + (user-handle uint32 2 :offset-assert 240) ) :heap-base #x90 :method-count-assert 14 diff --git a/test/decompiler/reference/engine/game/generic-obs_REF.gc b/test/decompiler/reference/engine/game/generic-obs_REF.gc index c733a12744..a10dae9c00 100644 --- a/test/decompiler/reference/engine/game/generic-obs_REF.gc +++ b/test/decompiler/reference/engine/game/generic-obs_REF.gc @@ -767,11 +767,11 @@ (defstate part-tracker-process (part-tracker) :code (behavior () - (set! (-> self start-time) (-> *display* base-frame-counter)) + (set! (-> self start-time) (the-as uint (-> *display* base-frame-counter))) (while (< - (- (-> *display* base-frame-counter) (-> self start-time)) - (-> self duration) + (- (-> *display* base-frame-counter) (the-as int (-> self start-time))) + (the-as int (-> self duration)) ) (let ((gp-0 (handle->process (-> self target)))) (when gp-0 @@ -799,7 +799,10 @@ ) (let ((gp-2 (-> *display* base-frame-counter))) (until - (>= (- (-> *display* base-frame-counter) gp-2) (-> self linger-duration)) + (>= + (- (-> *display* base-frame-counter) gp-2) + (the-as int (-> self linger-duration)) + ) (if (-> self linger-callback) ((-> self linger-callback) self) ) @@ -832,7 +835,7 @@ (set! (-> self root) (new 'process 'trsqv)) (set! (-> self root trans quad) (-> arg5 world-sphere quad)) (set! (-> self offset quad) (-> arg5 world-sphere quad)) - (set! (-> self callback) arg2) + (set! (-> self callback) (the-as (function part-tracker vector) arg2)) (set! (-> self linger-callback) #f) (set! (-> self userdata) (the-as uint arg3)) (set! (-> self target) (process->handle arg4)) @@ -846,8 +849,8 @@ ) ) ) - (set! (-> self duration) arg1) - (set! (-> self linger-duration) (the-as int (-> arg0 linger-duration))) + (set! (-> self duration) (the-as uint arg1)) + (set! (-> self linger-duration) (-> arg0 linger-duration)) (set! (-> self part) (create-launch-control arg0 self)) (go part-tracker-process) (none) diff --git a/test/decompiler/reference/engine/nav/navigate-h_REF.gc b/test/decompiler/reference/engine/nav/navigate-h_REF.gc index 3a50c7c2c7..ac412f89d9 100644 --- a/test/decompiler/reference/engine/nav/navigate-h_REF.gc +++ b/test/decompiler/reference/engine/nav/navigate-h_REF.gc @@ -393,8 +393,8 @@ (dummy-20 () none 20) (dummy-21 () none 21) (dummy-22 () none 22) - (dummy-23 () none 23) - (dummy-24 (_type_ float symbol) none 24) + (dummy-23 (_type_ vector check-vector-collision-with-nav-spheres-info) float 23) + (dummy-24 (_type_ float clip-travel-vector-to-mesh-return-info) none 24) (dummy-25 (_type_ vector float) symbol 25) (dummy-26 (_type_) none 26) (dummy-27 () none 27) diff --git a/test/decompiler/reference/engine/util/sync-info-h_REF.gc b/test/decompiler/reference/engine/util/sync-info-h_REF.gc index b6eae58f90..b2d560656a 100644 --- a/test/decompiler/reference/engine/util/sync-info-h_REF.gc +++ b/test/decompiler/reference/engine/util/sync-info-h_REF.gc @@ -118,6 +118,7 @@ (damping float :offset-assert 16) (accel float :offset-assert 20) ) + :pack-me :method-count-assert 11 :size-assert #x18 :flag-assert #xb00000018 @@ -147,6 +148,7 @@ (elasticity float :offset-assert 32) (state int32 :offset-assert 36) ) + :pack-me :method-count-assert 13 :size-assert #x28 :flag-assert #xd00000028 diff --git a/test/decompiler/reference/levels/beach/lurkerworm_REF.gc b/test/decompiler/reference/levels/beach/lurkerworm_REF.gc new file mode 100644 index 0000000000..7ce0e82676 --- /dev/null +++ b/test/decompiler/reference/levels/beach/lurkerworm_REF.gc @@ -0,0 +1,1024 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type lurkerworm +(deftype lurkerworm (process-drawable) + ((root-override collide-shape-moving :offset 112) + (twister twister :offset-assert 176) + (head-tilt float :offset-assert 180) + (strike-count int32 :offset-assert 184) + (angle float :offset-assert 188) + (vulnerable symbol :offset-assert 192) + (part2 sparticle-launch-control :offset-assert 196) + ) + :heap-base #x60 + :method-count-assert 22 + :size-assert #xc8 + :flag-assert #x16006000c8 + (:methods + (TODO-RENAME-20 (_type_) none 20) + (particle-effect (_type_) none 21) + ) + (:states + lurkerworm-die + lurkerworm-idle + lurkerworm-rest + lurkerworm-rise + lurkerworm-sink + lurkerworm-spot + lurkerworm-strike + ) + ) + +;; definition for method 3 of type lurkerworm +(defmethod inspect lurkerworm ((obj lurkerworm)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttwister: ~A~%" (-> obj twister)) + (format #t "~T~Thead-tilt: ~f~%" (-> obj head-tilt)) + (format #t "~T~Tstrike-count: ~D~%" (-> obj strike-count)) + (format #t "~T~Tangle: ~f~%" (-> obj angle)) + (format #t "~T~Tvulnerable: ~A~%" (-> obj vulnerable)) + (format #t "~T~Tpart2: ~A~%" (-> obj part2)) + obj + ) + +;; definition for method 7 of type lurkerworm +;; INFO: Return type mismatch process-drawable vs lurkerworm. +(defmethod relocate lurkerworm ((obj lurkerworm) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (if (nonzero? (-> obj twister)) + (&+! (-> obj twister) arg0) + ) + (the-as lurkerworm ((method-of-type process-drawable relocate) obj arg0)) + ) + +;; definition for method 10 of type lurkerworm +(defmethod deactivate lurkerworm ((obj lurkerworm)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *lurkerworm-sg* lurkerworm + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 2 0 6.5) + :longest-edge (meters 1.5) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 157) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-beach-sandworm" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 656 :fade-after (meters 90.0) :period 900 :length 300) + (sp-item 657 :fade-after (meters 100.0) :period 900 :length 390) + (sp-item 658 :fade-after (meters 150.0) :period 900 :length 420 :offset 120) + (sp-item 659 :fade-after (meters 60.0) :period 900 :length 420 :offset 120) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 158) + (new 'static 'sparticle-launch-group + :length 3 + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-beach-sandworm-norocks" + :launcher + (new 'static 'inline-array sparticle-group-item 3 + (sp-item 656 :fade-after (meters 90.0) :period 900 :length 300) + (sp-item 658 :fade-after (meters 150.0) :period 900 :length 420 :offset 120) + (sp-item 659 :fade-after (meters 60.0) :period 900 :length 420 :offset 120) + ) + :bounds (new 'static 'sphere :w 24576.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 656) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 21 + (sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2)) + (sp-flt spt-num 4.0) + (sp-rnd-flt spt-x (meters 3.0) (meters 5.0) 1.0) + (sp-flt spt-y (meters 1.0)) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 2.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 130.0 20.0 1.0) + (sp-rnd-flt spt-g 90.0 20.0 1.0) + (sp-rnd-flt spt-b 50.0 8.0 1.0) + (sp-flt spt-a 0.0) + (sp-flt spt-vel-x (meters -0.02)) + (sp-flt spt-vel-y (meters -0.0033333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.15) (degrees 0.3) 1.0) + (sp-flt spt-fade-a 0.21333334) + (sp-int spt-timer 900) + (sp-cpuinfo-flags bit2 bit12) + (sp-int-plain-rnd spt-next-time 90 59 1) + (sp-launcher-by-id spt-next-launcher 660) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 660) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.21333334) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 658) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2)) + (sp-flt spt-num 0.4) + (sp-rnd-flt spt-x (meters 0.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 90.0 60.0 1.0) + (sp-rnd-flt spt-g 90.0 10.0 1.0) + (sp-rnd-flt spt-b 50.0 8.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-vel-y (meters 0.026666667)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a 0.32) + (sp-flt spt-accel-y -4.096) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 659) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 19 + (sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2)) + (sp-flt spt-num 0.6) + (sp-rnd-flt spt-x (meters 0.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 45.0 30.0 1.0) + (sp-rnd-flt spt-g 45.0 5.0 1.0) + (sp-rnd-flt spt-b 25.0 4.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-flt spt-vel-y (meters 0.026666667)) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a 0.42666668) + (sp-flt spt-accel-y -4.096) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 657) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 18 + (sp-tex spt-texture (new 'static 'texture-id :index #x1d :page #x2)) + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters 0.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-scale-x (meters 0.05) (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 75.0 45.0 1.0) + (sp-rnd-flt spt-g 75.0 10.0 1.0) + (sp-rnd-flt spt-b 40.0 6.0 1.0) + (sp-flt spt-a 96.0) + (sp-rnd-flt spt-vel-x (meters 0.0033333334) (meters 0.0033333334) 1.0) + (sp-rnd-flt spt-vel-y (meters 0.013333334) (meters 0.026666667) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-accel-y -4.096) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit12) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 661) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 20 + (sp-tex spt-texture (new 'static 'texture-id :index #x19 :page #x2)) + (sp-flt spt-num 0.1) + (sp-rnd-flt spt-x (meters -0.5) (meters 1.0) 1.0) + (sp-rnd-flt spt-z -2048.0 4096.0 1.0) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-rnd-flt spt-r 90.0 60.0 1.0) + (sp-rnd-flt spt-g 90.0 10.0 1.0) + (sp-rnd-flt spt-b 50.0 8.0 1.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-vel-x (meters 0.0033333334) (meters 0.00083333335) 1.0) + (sp-rnd-int-flt spt-rotvel-z (degrees -0.3) 1 109.22667) + (sp-flt spt-fade-a 0.21333334) + (sp-flt spt-accel-y -0.54613334) + (sp-int spt-timer 600) + (sp-cpuinfo-flags bit2 bit12) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 662) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 662) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.10666667) + (sp-end) + ) + ) + ) + +;; definition for method 20 of type lurkerworm +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-20 lurkerworm ((obj lurkerworm)) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (vector-! s5-0 (target-pos 0) (-> obj root-override trans)) + (set-target! (-> obj twister) (atan (-> s5-0 x) (-> s5-0 z))) + (TODO-RENAME-11 (-> obj twister)) + (let* + ((f0-5 (sqrtf (+ (* (-> s5-0 x) (-> s5-0 x)) (* (-> s5-0 z) (-> s5-0 z))))) + (f0-6 (atan (-> s5-0 y) f0-5)) + ) + (set! + (-> obj head-tilt) + (seek + (-> obj head-tilt) + f0-6 + (* 5461.3335 (-> *display* seconds-per-frame)) + ) + ) + ) + ) + (set! (-> obj head-tilt) (fmin 8192.0 (fmax -5461.3335 (-> obj head-tilt)))) + 0 + (none) + ) + +;; definition for function lurkerworm-prebind-function +;; INFO: Return type mismatch int vs none. +(defbehavior + lurkerworm-prebind-function lurkerworm + ((arg0 process) (arg1 int) (arg2 lurkerworm)) + (let ((v1-0 arg2) + (s5-0 (new 'stack-no-clear 'quaternion)) + (gp-0 (&-> arg0 stack 324)) + ) + (quaternion-axis-angle! s5-0 -1.0 0.0 0.0 (-> v1-0 head-tilt)) + (quaternion*! (the-as quaternion gp-0) (the-as quaternion gp-0) s5-0) + ) + 0 + (none) + ) + +;; definition for function lurkerworm-joint-callback +;; INFO: Return type mismatch int vs none. +(defun lurkerworm-joint-callback ((arg0 lurkerworm)) + (let ((a1-0 arg0)) + (TODO-RENAME-12 (-> a1-0 twister) a1-0) + ) + 0 + (none) + ) + +;; definition for method 21 of type lurkerworm +;; INFO: Return type mismatch int vs none. +(defmethod particle-effect lurkerworm ((obj lurkerworm)) + (let + ((a2-0 + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 5)) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 661) + a2-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (let + ((a2-1 + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 6)) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 661) + a2-1 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (let + ((a2-2 + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 7)) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 661) + a2-2 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + (let + ((a2-3 + (vector<-cspace! (new 'stack-no-clear 'vector) (-> obj node-list data 8)) + ) + ) + (sp-launch-particles-var + *sp-particle-system-2d* + (-> *part-id-table* 661) + a2-3 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + 0 + (none) + ) + +;; definition for function lurkerworm-default-event-handler +(defbehavior + lurkerworm-default-event-handler lurkerworm + ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('attack) + (-> arg3 param 1) + (go lurkerworm-die) + ) + (('touch) + (if + ((method-of-type touching-shapes-entry prims-touching?) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> self root-override) + (the-as uint 1) + ) + (send-event arg0 'attack (-> arg3 param 0) (new 'static 'attack-info)) + ) + ) + ) + ) + +;; definition for function lurkerworm-default-post-behavior +;; INFO: Return type mismatch int vs none. +(defbehavior lurkerworm-default-post-behavior lurkerworm () + (TODO-RENAME-20 self) + (transform-post) + 0 + (none) + ) + +;; failed to figure out what this is: +lurkerworm-default-event-handler + +;; failed to figure out what this is: +lurkerworm-default-post-behavior + +;; failed to figure out what this is: +(defstate lurkerworm-idle (lurkerworm) + :event + lurkerworm-default-event-handler + :enter + (behavior () + (ja-channel-set! 0) + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :code + (behavior () + (while #t + (if + (and + (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + *target* + (>= + 81920.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go lurkerworm-spot) + ) + (suspend) + ) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +;; failed to figure out what this is: +(defstate lurkerworm-spot (lurkerworm) + :event + lurkerworm-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (sound-play-by-name + (static-sound-name "worm-rise1") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (none) + ) + :code + (behavior () + (set! (-> self part local-clock) 0) + (while #t + (spawn (-> self part) (-> self root-override trans)) + (particle-effect self) + (when (>= (- (-> *display* base-frame-counter) (-> self state-time)) 300) + (if + (and + *target* + (>= + 81920.0 + (vector-vector-distance + (-> self root-override trans) + (-> *target* control trans) + ) + ) + ) + (go lurkerworm-rise) + (go lurkerworm-idle) + ) + ) + (suspend) + ) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +;; failed to figure out what this is: +(defstate lurkerworm-rise (lurkerworm) + :event + lurkerworm-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :code + (behavior () + (ja-channel-set! 1) + (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) + (spawn (-> self part) (-> self root-override trans)) + (particle-effect self) + (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! + ) + ) + ) + (set! (-> self strike-count) 3) + (go lurkerworm-rest) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +;; failed to figure out what this is: +(defstate lurkerworm-rest (lurkerworm) + :event + lurkerworm-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (set! (-> self vulnerable) #t) + (none) + ) + :exit + (behavior () + (set! (-> self vulnerable) #f) + (none) + ) + :code + (behavior () + (let* ((f30-0 10.0) + (f28-0 100.0) + (v1-1 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-2 (the-as number (logior #x3f800000 v1-1))) + (s5-0 (the int (+ f30-0 (* f28-0 (+ -1.0 (the-as float v1-2)))))) + (gp-1 (nonzero? (-> self strike-count))) + ) + (if gp-1 + (+! (-> self strike-count) -1) + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! + (-> a0-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + (set! + (-> a0-2 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + 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 3)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (ja-blend-eval) + (particle-effect self) + (when gp-1 + (let* ((f0-13 (- 1.0 (* 0.00009765625 (+ -16384.0 (if *target* + (vector-vector-distance + (-> + self + root-override + trans + ) + (-> + *target* + control + trans + ) + ) + 4096000.0 + ) + ) + ) + ) + ) + (f30-2 (* 0.2 f0-13)) + (v1-31 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-32 (the-as number (logior #x3f800000 v1-31))) + ) + (if (< (+ -1.0 (the-as float v1-32)) f30-2) + (go lurkerworm-strike) + ) + ) + ) + (+! s5-0 -1) + (when (zero? s5-0) + (if gp-1 + (go lurkerworm-strike) + (go lurkerworm-sink) + ) + ) + (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! + ) + ) + ) + (if gp-1 + (go lurkerworm-strike) + (go lurkerworm-sink) + ) + ) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +;; failed to figure out what this is: +(defstate lurkerworm-strike (lurkerworm) + :event + lurkerworm-default-event-handler + :code + (behavior () + (let ((a0-0 (-> self skel root-channel 0))) + (set! (-> a0-0 param 0) 1.0) + (joint-control-channel-group! + a0-0 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + (ja-channel-push! 1 40) + (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 13.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) + (ja-blend-eval) + (particle-effect self) + (suspend) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 param 0) (ja-aframe 13.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! + ) + ) + ) + (let ((a0-8 (-> self skel root-channel 0))) + (set! + (-> a0-8 param 0) + (the float (+ (-> a0-8 frame-group data 0 length) -1)) + ) + (set! (-> a0-8 param 1) 1.0) + (joint-control-channel-group! + a0-8 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (ja-channel-push! 1 40) + (go lurkerworm-rest) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +;; failed to figure out what this is: +(defstate lurkerworm-sink (lurkerworm) + :event + lurkerworm-default-event-handler + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (none) + ) + :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 5)) + ) + (set! + (-> a0-0 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 5)) + 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 5)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (spawn (-> self part2) (-> self root-override trans)) + (particle-effect self) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 param 0) + (the float (+ (-> a0-3 frame-group data 0 length) -1)) + ) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (go lurkerworm-idle) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +;; failed to figure out what this is: +(defstate lurkerworm-die (lurkerworm) + :event + (the-as + (function process int symbol event-message-block object :behavior lurkerworm) + process-drawable-death-event-handler + ) + :code + (behavior () + (logclear! (-> self mask) (process-mask actor-pause)) + (let ((v1-3 (-> self root-override root-prim))) + (set! (-> v1-3 collide-with) (the-as uint 0)) + (set! (-> v1-3 prim-core collide-as) (the-as uint 0)) + ) + 0 + (let ((a0-1 (-> self skel root-channel 0))) + (set! + (-> a0-1 frame-group) + (the-as art-joint-anim (-> self draw art-group data 7)) + ) + (set! + (-> a0-1 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 7)) + 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 7)) + 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! + ) + ) + ) + (dummy-18 self) + (none) + ) + :post + lurkerworm-default-post-behavior + ) + +;; definition for method 11 of type lurkerworm +;; INFO: Return type mismatch object vs none. +(defmethod copy-defaults! lurkerworm ((obj lurkerworm) (arg0 res-lump)) + (set! (-> obj mask) (logior (process-mask enemy) (-> obj mask))) + (let + ((s4-0 + (new + 'process + 'collide-shape-moving + obj + (collide-list-enum usually-hit-by-player) + ) + ) + ) + (set! (-> s4-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s4-0 reaction) default-collision-reaction) + (set! (-> s4-0 no-reaction) nothing) + (let ((s3-0 (new 'process 'collide-shape-prim-group s4-0 (the-as uint 6) 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-vector! (-> s3-0 local-sphere) 0.0 10240.0 0.0 24576.0) + (dummy-46 s4-0) + (let ((s2-0 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-0 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 3) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-1 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-1 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-1 collide-with) (the-as uint 16)) + (set! (-> s2-1 prim-core action) (the-as uint 1)) + (set! (-> s2-1 prim-core offense) 4) + (set! (-> s2-1 transform-index) 5) + (set-vector! (-> s2-1 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-2 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (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 action) (the-as uint 1)) + (set! (-> s2-2 prim-core offense) 4) + (set! (-> s2-2 transform-index) 6) + (set-vector! (-> s2-2 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-3 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (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 action) (the-as uint 1)) + (set! (-> s2-3 prim-core offense) 4) + (set! (-> s2-3 transform-index) 7) + (set-vector! (-> s2-3 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-4 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 0)))) + (set! (-> s2-4 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-4 collide-with) (the-as uint 16)) + (set! (-> s2-4 prim-core action) (the-as uint 1)) + (set! (-> s2-4 prim-core offense) 4) + (set! (-> s2-4 transform-index) 8) + (set-vector! (-> s2-4 local-sphere) 0.0 0.0 0.0 4096.0) + ) + (dummy-28 s3-0) + (let ((s2-5 (new 'process 'collide-shape-prim-sphere s4-0 (the-as uint 1)))) + (set! (-> s2-5 prim-core collide-as) (the-as uint 256)) + (set! (-> s2-5 collide-with) (the-as uint 16)) + (set! (-> s2-5 prim-core offense) 2) + (set! (-> s2-5 transform-index) 11) + (set-vector! (-> s2-5 local-sphere) 0.0 0.0 0.0 6144.0) + ) + (dummy-28 s3-0) + ) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *lurkerworm-sg* '()) + (set! + (-> obj fact) + (new + 'process + 'fact-info-enemy + obj + (pickup-type eco-pill-random) + (-> *FACT-bank* default-pill-inc) + ) + ) + (set! (-> obj angle) 0.0) + (set! (-> obj vulnerable) #f) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 157) obj) + ) + (set! + (-> obj part2) + (create-launch-control (-> *part-group-id-table* 158) obj) + ) + (set! + (-> obj twister) + (new 'process 'twister 3 15 1092.2667 72.81778 0.25 0.001) + ) + (TODO-RENAME-9 (-> obj twister) 3 9 910.2222) + (set! (-> obj head-tilt) 0.0) + (set! + (-> obj skel prebind-function) + (the-as + (function pointer int process-drawable none) + lurkerworm-prebind-function + ) + ) + (set! + (-> obj skel postbind-function) + (the-as + (function pointer int process-drawable none) + lurkerworm-joint-callback + ) + ) + (set! (-> obj root-override nav-radius) 12288.0) + (nav-mesh-connect obj (-> obj root-override) (the-as nav-control #f)) + (go lurkerworm-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/beach/twister_REF.gc b/test/decompiler/reference/levels/beach/twister_REF.gc index da30f6a2b3..59dfef2f60 100644 --- a/test/decompiler/reference/levels/beach/twister_REF.gc +++ b/test/decompiler/reference/levels/beach/twister_REF.gc @@ -37,7 +37,7 @@ :size-assert #x28 :flag-assert #xd00000028 (:methods - (new (symbol _type_ int int float float float float) _type_ 0) + (new (symbol type int int float float float float) _type_ 0) (TODO-RENAME-9 (_type_ int int float) none 9) (set-target! (_type_ float) none 10) (TODO-RENAME-11 (_type_) none 11) @@ -66,7 +66,7 @@ new twister ((allocation symbol) - (type-to-make twister) + (type-to-make type) (arg0 int) (arg1 int) (arg2 float) @@ -78,8 +78,8 @@ (v0-0 (object-new allocation - (the-as type type-to-make) - (the-as int (+ (-> type-to-make something) (* gp-0 16))) + type-to-make + (the-as int (+ (-> type-to-make size) (* gp-0 16))) ) ) ) @@ -216,7 +216,3 @@ 0 (none) ) - - - - diff --git a/test/decompiler/reference/levels/citadel/citadel-sages_REF.gc b/test/decompiler/reference/levels/citadel/citadel-sages_REF.gc new file mode 100644 index 0000000000..33ba826c51 --- /dev/null +++ b/test/decompiler/reference/levels/citadel/citadel-sages_REF.gc @@ -0,0 +1,1916 @@ +;;-*-Lisp-*- +(in-package goal) + +;; failed to figure out what this is: +(defskelgroup *citb-sagecage-sg* citb-sagecage + 0 + 4 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 -6 0 7) + :longest-edge (meters 0) + ) + +;; definition of type citb-sagecage +(deftype citb-sagecage (process-drawable) + ((parent-override (pointer citb-sage) :offset 12) + (root-override collide-shape-moving :offset 112) + (bar-array vector 12 :inline :offset-assert 176) + (angle-offset float :offset-assert 368) + (bars-on symbol :offset-assert 372) + (cloning symbol :offset-assert 376) + ) + :heap-base #x110 + :method-count-assert 22 + :size-assert #x17c + :flag-assert #x160110017c + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) none 21) + ) + (:states + citb-sagecage-idle + ) + ) + +;; definition for method 3 of type citb-sagecage +(defmethod inspect citb-sagecage ((obj citb-sagecage)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tbar-array[12] @ #x~X~%" (-> obj bar-array)) + (format #t "~T~Tangle-offset: ~f~%" (-> obj angle-offset)) + (format #t "~T~Tbars-on: ~A~%" (-> obj bars-on)) + (format #t "~T~Tcloning: ~A~%" (-> obj cloning)) + obj + ) + +;; definition for function citb-sagecage-draw-bars +;; INFO: Return type mismatch int vs none. +(defbehavior citb-sagecage-draw-bars citb-sagecage () + (when (logtest? (-> self draw status) 8) + (let ((gp-0 (-> self node-list data 3 bone transform)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (let ((s3-0 (new 'stack-no-clear 'vector))) + (matrix->quaternion (the-as quaternion s4-0) gp-0) + (vector-! s3-0 (camera-pos) (-> self root-override trans)) + (let ((v1-7 (-> gp-0 vector 2))) + (set! (-> self angle-offset) (- (atan (-> v1-7 x) (-> v1-7 z)))) + ) + (quaternion-rotate-local-x! + (the-as quaternion s4-0) + (the-as quaternion s4-0) + 16384.0 + ) + (let ((f0-7 (+ (-> self angle-offset) (atan (-> s3-0 x) (-> s3-0 z))))) + (quaternion-rotate-local-z! + (the-as quaternion s4-0) + (the-as quaternion s4-0) + f0-7 + ) + ) + ) + (quaternion-copy! *particle-quat* (the-as quaternion s4-0)) + ) + (let ((s4-1 (-> *part-id-table* 2473)) + (s3-1 *sp-particle-system-3d*) + ) + (dotimes (s2-2 12) + (vector-matrix*! s5-0 (-> self bar-array s2-2) gp-0) + (sp-launch-particles-var + s3-1 + s4-1 + s5-0 + (the-as sparticle-launch-state #f) + (the-as sparticle-launch-control #f) + 1.0 + ) + ) + ) + ) + ) + 0 + (none) + ) + +;; definition for function citb-sagecage-update-collision +;; INFO: Return type mismatch int vs none. +(defbehavior citb-sagecage-update-collision citb-sagecage () + (dummy-28 + (the-as collide-shape-prim-mesh (-> self root-override root-prim)) + (if (-> self bars-on) + 0 + 1 + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate citb-sagecage-idle (citb-sagecage) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (local-vars (v0-3 none)) + (let ((v1-0 arg2)) + (the-as object (cond + ((= v1-0 'disable-bars) + (stop! (-> self sound)) + (sound-play-by-name + (static-sound-name "sagecage-off") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (set! (-> self bars-on) #f) + (citb-sagecage-update-collision) + ) + ((= v1-0 'enable-bars) + (set! (-> self bars-on) #t) + (citb-sagecage-update-collision) + ) + ((= v1-0 'start-cloning) + (set! v0-3 (the-as none #t)) + (set! (-> self cloning) (the-as symbol v0-3)) + v0-3 + ) + ((= v1-0 'stop-cloning) + (set! (-> self cloning) #f) + (let ((v1-7 (-> self skel root-channel 0))) + (set! v0-3 (the-as none (-> self draw art-group data 3))) + (set! (-> v1-7 frame-group) (the-as art-joint-anim v0-3)) + ) + v0-3 + ) + ) + ) + ) + ) + :trans + (the-as (function none :behavior citb-sagecage) rider-trans) + :code + (behavior () + (while #t + (cond + ((-> self cloning) + (let ((gp-0 (ppointer->process (-> self parent-override)))) + (when gp-0 + (joint-control-copy! (-> self skel) (-> (the-as citb-sage gp-0) skel)) + (joint-control-remap! + (-> self skel) + (-> self draw art-group) + (-> (the-as citb-sage gp-0) draw art-group) + '() + 0 + "" + ) + ) + ) + ) + (else + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) 1.0) + (joint-control-channel-group-eval! + a0-2 + (the-as art-joint-anim #f) + num-func-loop! + ) + ) + ) + ) + (suspend) + ) + (none) + ) + :post + (behavior () + (rider-post) + (when (-> self bars-on) + (update! (-> self sound)) + (citb-sagecage-draw-bars) + ) + (none) + ) + ) + +;; definition for method 20 of type citb-sagecage +;; INFO: Return type mismatch int vs none. +(defmethod dummy-20 citb-sagecage ((obj citb-sagecage)) + (let + ((s5-0 + (new 'process 'collide-shape-moving obj (collide-list-enum hit-by-player)) + ) + ) + (set! (-> s5-0 dynam) (copy *standard-dynamics* 'process)) + (set! (-> s5-0 reaction) default-collision-reaction) + (set! (-> s5-0 no-reaction) nothing) + (dummy-29 s5-0 1) + (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 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) 3) + (set-vector! (-> s4-0 local-sphere) 0.0 20480.0 0.0 28672.0) + ) + (dummy-46 s5-0) + (set! (-> s5-0 nav-radius) (* 0.75 (-> s5-0 root-prim local-sphere w))) + (dummy-50 s5-0) + (set! (-> obj root-override) s5-0) + ) + 0 + (none) + ) + +;; definition for method 21 of type citb-sagecage +;; INFO: Return type mismatch int vs none. +(defmethod dummy-21 citb-sagecage ((obj citb-sagecage)) + (initialize-skeleton obj *citb-sagecage-sg* '()) + (logior! (-> obj skel status) 1) + (set! (-> obj root-override pause-adjust-distance) 409600.0) + (let ((f0-1 20766.72) + (f4-0 14745.6) + (f1-0 -14745.6) + (f2-0 7372.8) + ) + (let ((f3-0 -7372.8)) + (set-vector! (-> obj bar-array 0) f4-0 f0-1 f3-0 1.0) + (set-vector! (-> obj bar-array 1) f4-0 f0-1 0.0 1.0) + (set-vector! (-> obj bar-array 2) f4-0 f0-1 f2-0 1.0) + (set-vector! (-> obj bar-array 3) f1-0 f0-1 f3-0 1.0) + (set-vector! (-> obj bar-array 4) f1-0 f0-1 0.0 1.0) + (set-vector! (-> obj bar-array 5) f1-0 f0-1 f2-0 1.0) + (set-vector! (-> obj bar-array 6) f3-0 f0-1 f4-0 1.0) + (set-vector! (-> obj bar-array 7) 0.0 f0-1 f4-0 1.0) + (set-vector! (-> obj bar-array 8) f2-0 f0-1 f4-0 1.0) + (set-vector! (-> obj bar-array 9) f3-0 f0-1 f1-0 1.0) + ) + (set-vector! (-> obj bar-array 10) 0.0 f0-1 f1-0 1.0) + (set-vector! (-> obj bar-array 11) f2-0 f0-1 f1-0 1.0) + ) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "sagecage-gen") + :volume #x400 + :fo-max 20 + ) + (-> obj root-override trans) + ) + ) + (set! + (-> obj bars-on) + (not (task-complete? *game-info* (-> obj entity extra perm task))) + ) + (citb-sagecage-update-collision) + (set! (-> obj cloning) #t) + (set! (-> obj event-hook) (-> citb-sagecage-idle event)) + 0 + (none) + ) + +;; definition for function citb-sagecage-init-by-other +;; INFO: Return type mismatch object vs none. +(defbehavior citb-sagecage-init-by-other citb-sagecage ((arg0 citb-sage)) + (dummy-20 self) + (mem-copy! + (the-as pointer (-> self root-override trans)) + (the-as pointer (-> arg0 root-override trans)) + 16 + ) + (mem-copy! + (the-as pointer (-> self root-override quat)) + (the-as pointer (-> arg0 root-override quat)) + 16 + ) + (mem-copy! + (the-as pointer (-> self root-override scale)) + (the-as pointer (-> arg0 root-override scale)) + 16 + ) + (dummy-21 self) + (go citb-sagecage-idle) + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *redsage-sg* redsage + 0 + 4 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + :shadow 3 + ) + +;; failed to figure out what this is: +(defskelgroup *bluesage-sg* bluesage + 0 + 4 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + :shadow 3 + ) + +;; failed to figure out what this is: +(defskelgroup *yellowsage-sg* yellowsage + 0 + 4 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + :shadow 3 + ) + +;; failed to figure out what this is: +(defskelgroup *green-sagecage-sg* green-sagecage + 0 + 4 + ((1 (meters 20)) (2 (meters 999999))) + :bounds (static-spherem 0 0 0 2.5) + :longest-edge (meters 0) + :shadow 3 + ) + +;; failed to figure out what this is: +(defskelgroup *evilbro-citadel-sg* evilbro-citadel + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 1) + :longest-edge (meters 0) + :shadow 2 + ) + +;; failed to figure out what this is: +(defskelgroup *evilsis-citadel-sg* evilsis-citadel + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 1) + :longest-edge (meters 0) + :shadow 2 + ) + +;; definition of type citb-sage +(deftype citb-sage (process-taskable) + ((spawn-pos vector :inline :offset-assert 384) + (target-pos vector :inline :offset-assert 400) + (dir vector :inline :offset-assert 416) + (rot-y float :offset-assert 432) + (rot-x float :offset-assert 436) + (idle-anim int32 :offset-assert 440) + (attack-start-anim int32 :offset-assert 444) + (attack-anim int32 :offset-assert 448) + (beam-joint int32 :offset-assert 452) + (cage handle :offset-assert 456) + (part-impact sparticle-launch-control :offset-assert 464) + (beam-on symbol :offset-assert 468) + (resolution-anim spool-anim :offset-assert 472) + (sound-name string :offset-assert 476) + (sound-id sound-id :offset-assert 480) + (alt-actor entity-actor :offset-assert 484) + ) + :heap-base #x180 + :method-count-assert 53 + :size-assert #x1e8 + :flag-assert #x35018001e8 + ) + +;; definition for method 3 of type citb-sage +(defmethod inspect citb-sage ((obj citb-sage)) + (let ((t9-0 (method-of-type process-taskable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tspawn-pos: #~%" (-> obj spawn-pos)) + (format #t "~T~Ttarget-pos: #~%" (-> obj target-pos)) + (format #t "~T~Tdir: #~%" (-> obj dir)) + (format #t "~T~Trot-y: ~f~%" (-> obj rot-y)) + (format #t "~T~Trot-x: ~f~%" (-> obj rot-x)) + (format #t "~T~Tidle-anim: ~D~%" (-> obj idle-anim)) + (format #t "~T~Tattack-start-anim: ~D~%" (-> obj attack-start-anim)) + (format #t "~T~Tattack-anim: ~D~%" (-> obj attack-anim)) + (format #t "~T~Tbeam-joint: ~D~%" (-> obj beam-joint)) + (format #t "~T~Tcage: ~D~%" (-> obj cage)) + (format #t "~T~Tpart-impact: ~A~%" (-> obj part-impact)) + (format #t "~T~Tbeam-on: ~A~%" (-> obj beam-on)) + (format #t "~T~Tresolution-anim: ~A~%" (-> obj resolution-anim)) + (format #t "~T~Tsound-name: ~A~%" (-> obj sound-name)) + (format #t "~T~Tsound-id: ~D~%" (-> obj sound-id)) + (format #t "~T~Talt-actor: ~A~%" (-> obj alt-actor)) + obj + ) + +;; definition for method 7 of type citb-sage +;; INFO: Return type mismatch process-taskable vs citb-sage. +(defmethod relocate citb-sage ((obj citb-sage) (arg0 int)) + (if (nonzero? (-> obj part-impact)) + (&+! (-> obj part-impact) arg0) + ) + (the-as citb-sage ((method-of-type process-taskable relocate) obj arg0)) + ) + +;; definition for method 10 of type citb-sage +(defmethod deactivate citb-sage ((obj citb-sage)) + (if (nonzero? (-> obj part-impact)) + (kill-and-free-particles (-> obj part-impact)) + ) + (sound-stop (-> obj sound-id)) + ((method-of-type process-taskable deactivate) obj) + (none) + ) + +;; definition for method 44 of type citb-sage +;; INFO: Return type mismatch int vs symbol. +;; Used lq/sq +(defmethod play-reminder citb-sage ((obj citb-sage)) + (set! (-> obj root-override pause-adjust-distance) 409600.0) + (let ((s5-0 (get-process *default-dead-pool* citb-sagecage #x4000))) + (set! (-> obj cage) (ppointer->handle (when s5-0 + (let + ((t9-1 + (method-of-type + citb-sagecage + activate + ) + ) + ) + (t9-1 + (the-as citb-sagecage s5-0) + obj + 'citb-sagecage + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-0 + citb-sagecage-init-by-other + obj + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + (set! (-> obj beam-on) #f) + (set! (-> obj sound-id) (new-sound-id)) + (if (zero? (-> obj sound-name)) + (set! (-> obj sound-name) "") + ) + (let + ((v1-9 (the-as entity (entity-actor-lookup (-> obj entity) 'alt-actor 0))) + (s5-1 (new 'stack-no-clear 'vector)) + ) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (if (not (the-as entity-actor v1-9)) + (set! v1-9 (entity-by-name "citb-robotboss-1")) + ) + (set! (-> obj alt-actor) (the-as entity-actor v1-9)) + (set! (-> obj spawn-pos quad) (-> obj root-override trans quad)) + (set! (-> s5-1 quad) (-> v1-9 extra trans quad)) + (set! (-> s5-1 y) (+ 81920.0 (-> s5-1 y))) + (vector-! s4-0 (-> obj spawn-pos) s5-1) + (set! (-> s4-0 y) 0.0) + (vector-normalize! s4-0 1.0) + (vector+*! (-> obj target-pos) s5-1 s4-0 116940.8) + ) + (when (nonzero? (-> obj part)) + (vector-! s5-1 (-> obj target-pos) (-> obj spawn-pos)) + (vector-float*! (the-as vector (-> obj part group bounds)) s5-1 0.5) + (set! + (-> obj part group bounds w) + (* 0.6 (vector-vector-distance (-> obj spawn-pos) (-> obj target-pos))) + ) + ) + ) + (the-as symbol 0) + ) + +;; definition for method 45 of type citb-sage +;; INFO: Return type mismatch int vs none. +;; Used lq/sq +(defmethod dummy-45 citb-sage ((obj citb-sage)) + (set! (-> obj spawn-pos quad) (-> obj root-override trans quad)) + 0 + (none) + ) + +;; definition for method 42 of type citb-sage +;; INFO: Return type mismatch object vs none. +(defmethod dummy-42 citb-sage ((obj citb-sage)) + (if (not (should-display? obj)) + (go (method-of-object obj hidden)) + (go (method-of-object obj idle)) + ) + (none) + ) + +;; definition for method 32 of type citb-sage +;; INFO: Return type mismatch spool-anim vs basic. +(defmethod play-anim! citb-sage ((obj citb-sage) (arg0 symbol)) + (the-as basic (-> obj resolution-anim)) + ) + +;; definition for method 31 of type citb-sage +(defmethod get-art-elem citb-sage ((obj citb-sage)) + (cond + ((= (current-status (-> obj tasks)) (task-status invalid)) + (set! (-> obj beam-on) #t) + (-> obj draw art-group data (-> obj attack-anim)) + ) + (else + (-> obj draw art-group data (-> obj idle-anim)) + ) + ) + ) + +;; definition for method 39 of type citb-sage +(defmethod should-display? citb-sage ((obj citb-sage)) + (!= (get-task-status (game-task citadel-sage-green)) (task-status invalid)) + ) + +;; failed to figure out what this is: +(defstate hidden (citb-sage) + :virtual #t + :enter + (behavior () + (send-event (handle->process (-> self cage)) 'disable-bars) + (send-event (handle->process (-> self cage)) 'stop-cloning) + ((-> (method-of-type process-taskable hidden) enter)) + (none) + ) + ) + +;; definition for function citb-sage-draw-beam +;; Used lq/sq +(defbehavior citb-sage-draw-beam citb-sage () + (if (< (vector-vector-distance (ear-trans) (-> self spawn-pos)) 409600.0) + (sound-play-by-name + (string->sound-name (-> self sound-name)) + (-> self sound-id) + 1024 + 0 + 0 + 1 + (the-as symbol (-> self spawn-pos)) + ) + ) + (set! + (-> self spawn-pos quad) + (-> self node-list data (-> self beam-joint) bone transform vector 3 quad) + ) + (vector-! (-> self dir) (-> self target-pos) (-> self spawn-pos)) + (set! (-> self rot-y) (vector-y-angle (-> self dir))) + (set! (-> self rot-x) (- 16384.0 (vector-x-angle (-> self dir)))) + (dummy-45 self) + (spawn (-> self part) (-> self spawn-pos)) + (spawn (-> self part-impact) (-> self target-pos)) + ) + +;; failed to figure out what this is: +(defstate play-anim (citb-sage) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('disable-bars) + (send-event (handle->process (-> self cage)) 'disable-bars) + ) + (else + ((-> (method-of-type process-taskable play-anim) event) + arg0 + arg1 + arg2 + arg3 + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate idle (citb-sage) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('open) + (send-event (handle->process (-> self cage)) 'disable-bars) + ) + (else + ((-> (method-of-type process-taskable idle) event) arg0 arg1 arg2 arg3) + ) + ) + ) + :trans + (behavior () + (if (not (should-display? self)) + (go-virtual hidden) + ) + ((-> (method-of-type process-taskable idle) trans)) + (none) + ) + :post + (behavior () + ((the-as + (function none :behavior citb-sage) + (-> (method-of-type process-taskable idle) post) + ) + ) + (if (-> self beam-on) + (citb-sage-draw-beam) + ) + (none) + ) + ) + +;; definition of type red-sagecage +(deftype red-sagecage (citb-sage) + () + :heap-base #x180 + :method-count-assert 53 + :size-assert #x1e8 + :flag-assert #x35018001e8 + ) + +;; definition for method 3 of type red-sagecage +(defmethod inspect red-sagecage ((obj red-sagecage)) + (let ((t9-0 (method-of-type citb-sage inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for method 52 of type red-sagecage +;; INFO: Return type mismatch int vs none. +(defmethod dummy-52 red-sagecage ((obj red-sagecage)) + (let ((v1-1 (-> obj draw shadow-ctrl))) + (when v1-1 + (let ((a0-1 v1-1)) + (set! (-> a0-1 settings bot-plane w) (- -8192.0)) + ) + 0 + (let ((a0-3 v1-1)) + (set! (-> a0-3 settings top-plane w) (- 4096.0)) + ) + 0 + (set! (-> v1-1 settings flags) (logand -13 (-> v1-1 settings flags))) + ) + ) + (none) + ) + +;; definition for method 48 of type red-sagecage +(defmethod draw-npc-shadow red-sagecage ((obj red-sagecage)) + (-> obj draw shadow-ctrl) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +;; definition for method 45 of type red-sagecage +;; INFO: Return type mismatch int vs none. +(defmethod dummy-45 red-sagecage ((obj red-sagecage)) + (set! (-> *part-id-table* 2455 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2455 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2457 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2457 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2454 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2454 init-specs 13 initial-valuef) (-> obj rot-x)) + 0 + (none) + ) + +;; definition for method 44 of type red-sagecage +;; INFO: Return type mismatch int vs symbol. +(defmethod play-reminder red-sagecage ((obj red-sagecage)) + (set! (-> obj idle-anim) 4) + (set! (-> obj attack-start-anim) 5) + (set! (-> obj attack-anim) 6) + (set! (-> obj beam-joint) 20) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 604) obj) + ) + (set! + (-> obj part-impact) + (create-launch-control (-> *part-group-id-table* 608) obj) + ) + (set! + (-> obj resolution-anim) + (new 'static 'spool-anim + :name "redsage-resolution" + :index 7 + :parts 9 + :command-list + '( + ((the binteger 15) + send-event + self + disable-bars + ) + ((the binteger 45) + joint + "cameraB" + ) + ((the binteger 216) + joint + "camera" + ) + ((the binteger 435) joint "cameraB") ((the binteger 685) joint "camera") + ) + ) + ) + (set! (-> obj sound-name) "redsage-fires") + ((the-as (function citb-sage none) (find-parent-method red-sagecage 44)) obj) + (the-as symbol 0) + ) + +;; definition for method 43 of type red-sagecage +(defmethod TODO-RENAME-43 red-sagecage ((obj red-sagecage)) + (if (-> obj beam-on) + (return #f) + ) + (when + (TODO-RENAME-10 + (-> obj ambient) + (new 'stack-no-clear 'vector) + 9000 + 122880.0 + obj + ) + (let* ((v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + (f0-2 (+ -1.0 (the-as float v1-7))) + ) + (cond + ((< 0.6666667 f0-2) + (play-ambient (-> obj ambient) "RED-AM01" #f (-> obj root-override trans)) + ) + ((< 0.33333334 f0-2) + (play-ambient (-> obj ambient) "RED-AM02" #f (-> obj root-override trans)) + ) + (else + (play-ambient (-> obj ambient) "RED-AM03" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +;; definition for method 11 of type red-sagecage +(defmethod copy-defaults! red-sagecage ((obj red-sagecage) (arg0 res-lump)) + (dummy-40 obj arg0 *redsage-sg* 3 33 (new 'static 'vector :w 8192.0) 5) + (set! (-> obj tasks) (get-task-control (-> obj entity extra perm task))) + (play-reminder obj) + (set! (-> obj sound-flava) (the-as uint 12)) + (dummy-42 obj) + (none) + ) + +;; definition of type blue-sagecage +(deftype blue-sagecage (citb-sage) + () + :heap-base #x180 + :method-count-assert 53 + :size-assert #x1e8 + :flag-assert #x35018001e8 + ) + +;; definition for method 3 of type blue-sagecage +(defmethod inspect blue-sagecage ((obj blue-sagecage)) + (let ((t9-0 (method-of-type citb-sage inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for method 52 of type blue-sagecage +;; INFO: Return type mismatch int vs none. +(defmethod dummy-52 blue-sagecage ((obj blue-sagecage)) + (let ((v1-1 (-> obj draw shadow-ctrl))) + (when v1-1 + (let ((a0-1 v1-1)) + (set! (-> a0-1 settings bot-plane w) (- -10035.2)) + ) + 0 + (let ((a0-3 v1-1)) + (set! (-> a0-3 settings top-plane w) (- 4096.0)) + ) + 0 + (set! (-> v1-1 settings flags) (logand -13 (-> v1-1 settings flags))) + ) + ) + (none) + ) + +;; definition for method 48 of type blue-sagecage +(defmethod draw-npc-shadow blue-sagecage ((obj blue-sagecage)) + (-> obj draw shadow-ctrl) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +;; definition for method 45 of type blue-sagecage +;; INFO: Return type mismatch int vs none. +(defmethod dummy-45 blue-sagecage ((obj blue-sagecage)) + (set! (-> *part-id-table* 2448 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2448 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2450 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2450 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2447 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2447 init-specs 13 initial-valuef) (-> obj rot-x)) + 0 + (none) + ) + +;; definition for method 44 of type blue-sagecage +;; INFO: Return type mismatch int vs symbol. +(defmethod play-reminder blue-sagecage ((obj blue-sagecage)) + (set! (-> obj idle-anim) 4) + (set! (-> obj attack-start-anim) 5) + (set! (-> obj attack-anim) 6) + (set! (-> obj beam-joint) 53) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 603) obj) + ) + (set! + (-> obj part-impact) + (create-launch-control (-> *part-group-id-table* 607) obj) + ) + (set! + (-> obj resolution-anim) + (new 'static 'spool-anim + :name "bluesage-resolution" + :index 7 + :parts 9 + :command-list + '( + ((the binteger 15) + send-event + self + disable-bars + ) + ((the binteger 45) + joint + "cameraB" + ) + ((the binteger 74) + shadow + self + #f + ) + ((the binteger 185) + joint + "camera" + ) + ((the binteger 256) + joint + "cameraB" + ) + ((the binteger 505) + joint + "camera" + ) + ((the binteger 590) + joint + "cameraB" + ) + ((the binteger 670) + joint + "camera" + ) + ((the binteger 875) shadow self #t) ((the binteger 876) joint "cameraB") + ) + ) + ) + (set! (-> obj sound-name) "bluesage-fires") + ((the-as (function citb-sage none) (find-parent-method blue-sagecage 44)) obj) + (the-as symbol 0) + ) + +;; definition for method 43 of type blue-sagecage +(defmethod TODO-RENAME-43 blue-sagecage ((obj blue-sagecage)) + (if (-> obj beam-on) + (return #f) + ) + (when + (TODO-RENAME-10 + (-> obj ambient) + (new 'stack-no-clear 'vector) + 9000 + 122880.0 + obj + ) + (let* ((v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + (f0-2 (+ -1.0 (the-as float v1-7))) + ) + (cond + ((< 0.6666667 f0-2) + (play-ambient (-> obj ambient) "BLU-AM01" #f (-> obj root-override trans)) + ) + ((< 0.33333334 f0-2) + (play-ambient (-> obj ambient) "BLU-AM02" #f (-> obj root-override trans)) + ) + (else + (play-ambient (-> obj ambient) "BLU-AM03" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +;; definition for method 11 of type blue-sagecage +(defmethod copy-defaults! blue-sagecage ((obj blue-sagecage) (arg0 res-lump)) + (dummy-40 obj arg0 *bluesage-sg* 3 54 (new 'static 'vector :w 8192.0) 5) + (set! (-> obj tasks) (get-task-control (-> obj entity extra perm task))) + (play-reminder obj) + (set! (-> obj sound-flava) (the-as uint 13)) + (dummy-42 obj) + (none) + ) + +;; definition of type yellow-sagecage +(deftype yellow-sagecage (citb-sage) + () + :heap-base #x180 + :method-count-assert 53 + :size-assert #x1e8 + :flag-assert #x35018001e8 + ) + +;; definition for method 3 of type yellow-sagecage +(defmethod inspect yellow-sagecage ((obj yellow-sagecage)) + (let ((t9-0 (method-of-type citb-sage inspect))) + (t9-0 obj) + ) + obj + ) + +;; definition for method 52 of type yellow-sagecage +;; INFO: Return type mismatch int vs none. +(defmethod dummy-52 yellow-sagecage ((obj yellow-sagecage)) + (let ((v1-1 (-> obj draw shadow-ctrl))) + (when v1-1 + (let ((a0-1 v1-1)) + (set! (-> a0-1 settings bot-plane w) (- -6144.0)) + ) + 0 + (let ((a0-3 v1-1)) + (set! (-> a0-3 settings top-plane w) (- 4096.0)) + ) + 0 + (set! (-> v1-1 settings flags) (logand -13 (-> v1-1 settings flags))) + ) + ) + (none) + ) + +;; definition for method 48 of type yellow-sagecage +(defmethod draw-npc-shadow yellow-sagecage ((obj yellow-sagecage)) + (-> obj draw shadow-ctrl) + (cond + ((and + (-> obj draw shadow) + (zero? (-> obj draw cur-lod)) + (logtest? (-> obj draw status) 8) + ) + (let ((v1-9 (-> obj draw shadow-ctrl))) + (set! (-> v1-9 settings flags) (logand -33 (-> v1-9 settings flags))) + ) + 0 + (dummy-14 (-> obj draw shadow-ctrl)) + ) + (else + (let ((v1-14 (-> obj draw shadow-ctrl))) + (logior! (-> v1-14 settings flags) 32) + ) + 0 + ) + ) + (none) + ) + +;; definition for method 45 of type yellow-sagecage +;; INFO: Return type mismatch int vs none. +(defmethod dummy-45 yellow-sagecage ((obj yellow-sagecage)) + (set! (-> *part-id-table* 2462 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2462 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2464 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2464 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2461 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2461 init-specs 13 initial-valuef) (-> obj rot-x)) + 0 + (none) + ) + +;; definition for method 44 of type yellow-sagecage +;; INFO: Return type mismatch int vs symbol. +(defmethod play-reminder yellow-sagecage ((obj yellow-sagecage)) + (set! (-> obj idle-anim) 4) + (set! (-> obj attack-start-anim) 5) + (set! (-> obj attack-anim) 6) + (set! (-> obj beam-joint) 74) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 605) obj) + ) + (set! + (-> obj part-impact) + (create-launch-control (-> *part-group-id-table* 609) obj) + ) + (set! + (-> obj resolution-anim) + (new 'static 'spool-anim + :name "yellowsage-resolution" + :index 7 + :parts 6 + :command-list + '( + ((the binteger 15) + send-event + self + disable-bars + ) + ((the binteger 45) + joint + "cameraB" + ) + ((the binteger 256) + joint + "camera" + ) + ((the binteger 314) joint "cameraB") ((the binteger 600) joint "camera") + ) + ) + ) + (set! (-> obj sound-name) "yellsage-fire") + ((the-as (function citb-sage none) (find-parent-method yellow-sagecage 44)) + obj + ) + (the-as symbol 0) + ) + +;; definition for method 43 of type yellow-sagecage +(defmethod TODO-RENAME-43 yellow-sagecage ((obj yellow-sagecage)) + (if (-> obj beam-on) + (return #f) + ) + (when + (TODO-RENAME-10 + (-> obj ambient) + (new 'stack-no-clear 'vector) + 9000 + 122880.0 + obj + ) + (let* ((v1-6 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-7 (the-as number (logior #x3f800000 v1-6))) + (f0-2 (+ -1.0 (the-as float v1-7))) + ) + (cond + ((< 0.6666667 f0-2) + (play-ambient (-> obj ambient) "YEL-AM01" #f (-> obj root-override trans)) + ) + ((< 0.33333334 f0-2) + (play-ambient (-> obj ambient) "YEL-AM02" #f (-> obj root-override trans)) + ) + (else + (play-ambient (-> obj ambient) "YEL-AM03" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +;; definition for method 11 of type yellow-sagecage +(defmethod copy-defaults! yellow-sagecage ((obj yellow-sagecage) (arg0 res-lump)) + (dummy-40 obj arg0 *yellowsage-sg* 3 50 (new 'static 'vector :w 8192.0) 5) + (set! (-> obj tasks) (get-task-control (-> obj entity extra perm task))) + (play-reminder obj) + (set! (-> obj sound-flava) (the-as uint 11)) + (dummy-42 obj) + (none) + ) + +;; definition of type green-sagecage +(deftype green-sagecage (citb-sage) + ((which-movie int32 :offset-assert 488) + (evilbro handle :offset-assert 496) + (evilsis handle :offset-assert 504) + (robotboss handle :offset-assert 512) + (exitplat handle :offset-assert 520) + ) + :heap-base #x1a0 + :method-count-assert 53 + :size-assert #x210 + :flag-assert #x3501a00210 + ) + +;; definition for method 3 of type green-sagecage +(defmethod inspect green-sagecage ((obj green-sagecage)) + (let ((t9-0 (method-of-type citb-sage inspect))) + (t9-0 obj) + ) + (format #t "~T~Twhich-movie: ~D~%" (-> obj which-movie)) + (format #t "~T~Tevilbro: ~D~%" (-> obj evilbro)) + (format #t "~T~Tevilsis: ~D~%" (-> obj evilsis)) + (format #t "~T~Trobotboss: ~D~%" (-> obj robotboss)) + (format #t "~T~Texitplat: ~D~%" (-> obj exitplat)) + obj + ) + +;; definition for method 45 of type green-sagecage +;; INFO: Return type mismatch int vs none. +(defmethod dummy-45 green-sagecage ((obj green-sagecage)) + (set! (-> *part-id-table* 2469 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2469 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2471 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2471 init-specs 13 initial-valuef) (-> obj rot-x)) + (set! (-> *part-id-table* 2468 init-specs 14 initial-valuef) (-> obj rot-y)) + (set! (-> *part-id-table* 2468 init-specs 13 initial-valuef) (-> obj rot-x)) + 0 + (none) + ) + +;; definition for method 44 of type green-sagecage +;; INFO: Return type mismatch int vs symbol. +(defmethod play-reminder green-sagecage ((obj green-sagecage)) + (set! (-> obj idle-anim) 4) + (set! (-> obj attack-start-anim) 4) + (set! (-> obj attack-anim) 4) + (set! (-> obj beam-joint) 22) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 606) obj) + ) + (set! + (-> obj part-impact) + (create-launch-control (-> *part-group-id-table* 610) obj) + ) + (set! + (-> obj resolution-anim) + (new 'static 'spool-anim + :name "green-sagecage-resolution" + :index 6 + :parts 12 + :command-list + '( + ((the binteger 33) + joint + "cameraB" + ) + ((the binteger 156) + joint + "camera" + ) + ((the binteger 405) + joint + "cameraB" + ) + ((the binteger 576) + joint + "camera" + ) + ((the binteger 823) + joint + "cameraB" + ) + ((the binteger 1156) joint "camera") ((the binteger 1199) joint "cameraB") + ) + ) + ) + (set! (-> obj sound-name) "greensage-fires") + ((the-as (function citb-sage none) (find-parent-method green-sagecage 44)) + obj + ) + (the-as symbol 0) + ) + +;; definition for method 32 of type green-sagecage +(defmethod play-anim! green-sagecage ((obj green-sagecage) (arg0 symbol)) + (local-vars (v1-7 int)) + (let ((v1-1 (current-status (-> obj tasks)))) + (cond + ((= v1-1 (task-status need-hint)) + (when arg0 + (close-current! (-> obj tasks)) + (close-specific-task! + (game-task citadel-sage-blue) + (task-status need-hint) + ) + (close-specific-task! + (game-task citadel-sage-red) + (task-status need-hint) + ) + (close-specific-task! + (game-task citadel-sage-yellow) + (task-status need-hint) + ) + (set-continue! *game-info* "citadel-elevator") + ) + (new 'static 'spool-anim + :name "green-sagecage-introduction" + :index 5 + :parts 12 + :command-list + '( + ((the binteger 71) + joint + "cameraB" + ) + ((the binteger 207) + joint + "camera" + ) + ((the binteger 343) + joint + "cameraB" + ) + ((the binteger 574) + joint + "camera" + ) + ((the binteger 1060) + joint + "cameraB" + ) + ((the binteger 1061) send-event camera teleport) + ) + ) + ) + ((begin + (set! v1-7 (-> obj which-movie)) + (zero? v1-7) + ) + (when arg0 + (send-event (handle->process (-> obj cage)) 'disable-bars) + (+! (-> obj which-movie) 1) + (set! (-> obj draw bounds w) 40960.0) + ) + (-> obj resolution-anim) + ) + ((= v1-7 1) + (when arg0 + (+! (-> obj which-movie) 1) + (set! (-> obj draw bounds w) 40960.0) + (let ((s5-1 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj evilbro) (ppointer->handle (when s5-1 + (let + ((t9-8 + (method-of-type + manipy + activate + ) + ) + ) + (t9-8 + (the-as manipy s5-1) + obj + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + manipy-init + (-> obj root-override trans) + (-> obj entity) + *evilbro-citadel-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> obj evilbro)) 'anim-mode 'clone-anim) + (send-event (handle->process (-> obj evilbro)) 'blend-shape #t) + (send-event (handle->process (-> obj evilbro)) 'center-joint 3) + (let ((s5-2 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj evilsis) (ppointer->handle (when s5-2 + (let + ((t9-14 + (method-of-type + manipy + activate + ) + ) + ) + (t9-14 + (the-as manipy s5-2) + obj + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-2 + manipy-init + (-> obj root-override trans) + (-> obj entity) + *evilsis-citadel-sg* + #f + ) + (-> s5-2 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> obj evilsis)) 'anim-mode 'clone-anim) + (send-event (handle->process (-> obj evilsis)) 'blend-shape #t) + (send-event (handle->process (-> obj evilsis)) 'center-joint 3) + (if (handle->process (-> obj exitplat)) + (format 0 "exitplat activated~%") + ) + ) + (new 'static 'spool-anim + :name "green-sagecage-outro-preboss" + :index 7 + :parts 22 + :command-list + '( + (0 + blackout + 0 + ) + (0 + want-levels + citadel + finalboss + ) + (0 + display-level + finalboss + special + ) + (0 + send-event + "citb-robotboss-1" + 'die + ) + ((the binteger 335) + joint + "cameraB" + ) + ((the binteger 581) + joint + "camera" + ) + ((the binteger 696) + joint + "cameraB" + ) + ((the binteger 828) + joint + "camera" + ) + ((the binteger 1180) + joint + "cameraB" + ) + ((the binteger 1380) + send-event + self + 'spawn-robot + ) + ((the binteger 1382) + joint + "camera" + ) + ((the binteger 1382) + kill + "citb-disc-d-2" + ) + ((the binteger 1382) + kill + "citb-disc-c-4" + ) + ((the binteger 1382) + kill + "citb-disc-c-5" + ) + ((the binteger 1382) + kill + "citb-disc-c-6" + ) + ((the binteger 1382) + kill + "citb-disc-b-12" + ) + ((the binteger 1382) + kill + "citb-disc-b-13" + ) + ((the binteger 1382) + kill + "citb-disc-b-14" + ) + ((the binteger 1382) + kill + "citb-disc-a-11" + ) + ((the binteger 1382) + kill + "citb-disc-a-12" + ) + ((the binteger 1382) + kill + "citb-disc-a-13" + ) + ((the binteger 1382) + kill + "citb-disc-a-14" + ) + ((the binteger 1382) + kill + "citb-disc-a-15" + ) + ((the binteger 1382) + kill + "citb-disc-a-16" + ) + ((the binteger 1382) + kill + "citb-disc-b-21" + ) + ((the binteger 1382) + kill + "citb-button-28" + ) + ((the binteger 1382) + kill + "citb-button-32" + ) + ((the binteger 1382) + kill + "citb-generator-1" + ) + ((the binteger 1382) + kill + "citb-generator-2" + ) + ((the binteger 1382) + kill + "citb-generator-3" + ) + ((the binteger 1382) + kill + "citb-generator-4" + ) + ((the binteger 1382) + kill + "citb-iris-door-15" + ) + ((the binteger 1382) + kill + "citb-iris-door-16" + ) + ((the binteger 1382) + kill + "crate-2996" + ) + ((the binteger 1382) + kill + "crate-2997" + ) + ((the binteger 1382) + kill + "crate-2998" + ) + ((the binteger 1382) + kill + "crate-3000" + ) + ((the binteger 1382) + kill + "citb-plat-eco-1" + ) + ((the binteger 1382) + kill + "citb-plat-eco-2" + ) + ((the binteger 1382) + kill + "citb-plat-eco-3" + ) + ((the binteger 1382) + kill + "citb-stair-plat-1" + ) + ((the binteger 1382) + kill + "citb-stair-plat-2" + ) + ((the binteger 1382) + kill + "citb-stair-plat-3" + ) + ((the binteger 1382) + kill + "citb-stair-plat-4" + ) + ((the binteger 1382) + kill + "citb-stair-plat-5" + ) + ((the binteger 1382) + kill + "citb-stair-plat-6" + ) + ((the binteger 1382) + kill + "red-sagecage-1" + ) + ((the binteger 1382) + kill + "blue-sagecage-1" + ) + ((the binteger 1382) + kill + "yellow-sagecage-1" + ) + ((the binteger 1382) + kill + "babak-391" + ) + ((the binteger 1382) + kill + "citb-disc-c-10" + ) + ((the binteger 1382) + kill + "citb-iris-door-32" + ) + ((the binteger 1382) + kill + "citb-disc-b-18" + ) + ((the binteger 1382) + kill + "citb-disc-b-19" + ) + ((the binteger 1382) + kill + "citb-disc-b-20" + ) + ((the binteger 1382) + kill + "citb-iris-door-14" + ) + ((the binteger 1382) + kill + "orb-cache-top-32" + ) + ((the binteger 1382) + kill + "citb-disc-b-17" + ) + ((the binteger 1382) + kill + "citb-iris-door-13" + ) + ((the binteger 1382) + kill + "citb-button-39" + ) + ((the binteger 1382) + kill + "citb-button-40" + ) + ((the binteger 1382) + kill + "babak-392" + ) + ((the binteger 1382) + kill + "babak-393" + ) + ((the binteger 1382) + kill + "citb-button-33" + ) + ((the binteger 1382) + kill + "citb-button-34" + ) + ((the binteger 1382) + kill + "citb-drop-plat-365" + ) + ((the binteger 1382) + kill + "citb-drop-plat-366" + ) + ((the binteger 1382) + kill + "citb-drop-plat-367" + ) + ((the binteger 1382) + kill + "citb-iris-door-21" + ) + ((the binteger 1382) + kill + "assistant-lavatube-end-3" + ) + ((the binteger 1382) + kill + "babak-394" + ) + ((the binteger 1382) + kill + "babak-396" + ) + ((the binteger 1382) + kill + "citb-drop-plat-376" + ) + ((the binteger 1605) + joint + "cameraB" + ) + ((the binteger 1733) + kill + "citb-iris-door-2" + ) + ((the binteger 1736) joint "camera") + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string (current-status (-> obj tasks))) + ) + ) + (-> obj draw art-group data 4) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate play-anim (green-sagecage) + :virtual #t + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('spawn-robot) + (let ((gp-0 (entity-by-name "robotboss-3"))) + (format 0 "robotboss ent ~A~%" gp-0) + (when gp-0 + (let ((s5-0 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> self robotboss) (ppointer->handle (when s5-0 + (let + ((t9-3 + (method-of-type + manipy + activate + ) + ) + ) + (t9-3 + (the-as manipy s5-0) + self + 'manipy + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s5-0 + manipy-init + (-> + self + root-override + trans + ) + gp-0 + *robotboss-sg* + #f + ) + (-> s5-0 ppointer) + ) + ) + ) + ) + (send-event + (handle->process (-> self robotboss)) + 'anim-mode + 'clone-anim + ) + (send-event (handle->process (-> self robotboss)) 'center-joint 3) + (send-event (handle->process (-> self robotboss)) 'origin-joint-index 3) + (let ((s5-1 (handle->process (-> self robotboss)))) + (when s5-1 + (format 0 "robotboss activated ent ~A~%" gp-0) + (let ((f0-0 327680.0)) + (set! (-> (the-as robotboss s5-1) draw bounds w) f0-0) + f0-0 + ) + ) + ) + ) + ) + ) + (else + ((-> (method-of-type citb-sage play-anim) event) arg0 arg1 arg2 arg3) + ) + ) + ) + :exit + (behavior () + (let ((a0-1 (handle->process (-> self evilbro)))) + (if a0-1 + (deactivate a0-1) + ) + ) + (let ((a0-5 (handle->process (-> self evilsis)))) + (if a0-5 + (deactivate a0-5) + ) + ) + (let ((a0-9 (handle->process (-> self robotboss)))) + (if a0-9 + (deactivate a0-9) + ) + ) + (let ((a0-13 (handle->process (-> self exitplat)))) + (if a0-13 + (deactivate a0-13) + ) + ) + (when (= (current-status (-> self tasks)) (task-status invalid)) + (let ((a1-4 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-4 from) self) + (set! (-> a1-4 num-params) 0) + (set! (-> a1-4 message) 'shield-off) + (let ((t9-5 send-event-function) + (v1-28 (-> self alt-actor)) + ) + (t9-5 (if v1-28 + (-> v1-28 extra process) + ) + a1-4 + ) + ) + ) + ) + (cond + ((= (-> self which-movie) 1) + (set-blackout-frames #x7530) + ) + ((= (-> self which-movie) 2) + (start 'play (get-continue-by-name *game-info* "citadel-elevator")) + ) + ) + (set! (-> self draw bounds w) 10240.0) + ((-> (method-of-type process-taskable play-anim) exit)) + (none) + ) + :trans + (behavior () + (case (-> self which-movie) + ((1) + (spool-push *art-control* "green-sagecage-outro-preboss" 0 self -1.0) + (if (< 1200.0 (ja-aframe-num 0)) + (citb-sage-draw-beam) + ) + (when (< 1310.0 (ja-aframe-num 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) 'shield-off) + (let ((t9-4 send-event-function) + (v1-8 (-> self alt-actor)) + ) + (t9-4 (if v1-8 + (-> v1-8 extra process) + ) + a1-1 + ) + ) + ) + ) + ) + ) + ((-> (method-of-type process-taskable play-anim) trans)) + (none) + ) + ) + +;; definition for method 39 of type green-sagecage +(defmethod should-display? green-sagecage ((obj green-sagecage)) + (< (-> obj which-movie) 2) + ) + +;; failed to figure out what this is: +(defstate idle (green-sagecage) + :virtual #t + :trans + (behavior () + (cond + ((and + *target* + (and + (< (-> (target-pos 0) z) -18821530.0) + (= (current-status (-> self tasks)) (task-status need-hint)) + ) + ) + (send-event self 'play-anim) + ) + ((= (-> self which-movie) 1) + (send-event self 'play-anim) + ) + ) + ((-> (method-of-type citb-sage idle) trans)) + (none) + ) + ) + +;; definition for method 11 of type green-sagecage +(defmethod copy-defaults! green-sagecage ((obj green-sagecage) (arg0 res-lump)) + (dummy-40 obj arg0 *green-sagecage-sg* 3 40 (new 'static 'vector :w 4096.0) 5) + (set! (-> obj tasks) (get-task-control (-> obj entity extra perm task))) + (play-reminder obj) + (set! (-> obj evilbro) (the-as handle #f)) + (set! (-> obj evilsis) (the-as handle #f)) + (set! (-> obj robotboss) (the-as handle #f)) + (set! (-> obj exitplat) (the-as handle #f)) + (cond + ((= (current-status (-> obj tasks)) (task-status invalid)) + (set! (-> obj which-movie) 2) + ) + (else + (set! (-> obj which-movie) 0) + 0 + ) + ) + (set! (-> obj sound-flava) (the-as uint 5)) + (dummy-42 obj) + (none) + ) diff --git a/test/decompiler/reference/levels/citadel/citb-bunny_REF.gc b/test/decompiler/reference/levels/citadel/citb-bunny_REF.gc new file mode 100644 index 0000000000..465d58b249 --- /dev/null +++ b/test/decompiler/reference/levels/citadel/citb-bunny_REF.gc @@ -0,0 +1,163 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type citb-bunny +(deftype citb-bunny (snow-bunny) + () + :heap-base #x190 + :method-count-assert 77 + :size-assert #x200 + :flag-assert #x4d01900200 + (:methods + (TODO-RENAME-48 (_type_ object) none :replace 48) + ) + ) + +;; definition for method 3 of type citb-bunny +(defmethod inspect citb-bunny ((obj citb-bunny)) + (let ((t9-0 (method-of-type snow-bunny inspect))) + (t9-0 obj) + ) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *citb-bunny-sg* citb-bunny + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0.25 0 2) + :longest-edge (meters 0) + ) + +;; definition for symbol *citb-bunny-nav-enemy-info*, type nav-enemy-info +(define + *citb-bunny-nav-enemy-info* + (new 'static 'nav-enemy-info + :idle-anim 3 + :walk-anim 3 + :turn-anim 3 + :notice-anim 7 + :run-anim 3 + :jump-anim 5 + :jump-land-anim 8 + :victory-anim 7 + :taunt-anim 7 + :die-anim 9 + :neck-joint 5 + :player-look-at-joint 5 + :run-travel-speed (meters 6.0) + :run-rotate-speed (degrees 2880.0) + :run-acceleration (meters 1.0) + :run-turn-time (seconds 0.1) + :walk-travel-speed (meters 4.0) + :walk-rotate-speed (degrees 720.0) + :walk-acceleration (meters 1.0) + :walk-turn-time (seconds 0.5) + :shadow-size (meters 2.0) + :notice-nav-radius (meters 1.2) + :nav-nearest-y-threshold (meters 10.0) + :notice-distance (meters 130.0) + :stop-chase-distance (meters 150.0) + :frustration-distance (meters 8.0) + :frustration-time #x4b0 + :die-anim-hold-frame 31.0 + :jump-anim-start-frame 11.0 + :jump-land-anim-end-frame 10000000000.0 + :jump-height-min (meters 1.0) + :jump-height-factor 0.6 + :jump-start-anim-speed 1.0 + :shadow-max-y (meters 0.25) + :shadow-min-y (meters -3.5) + :shadow-locus-dist (meters 150.0) + :use-align #f + :draw-shadow #t + :move-to-ground #t + :hover-if-no-ground #f + :use-momentum #f + :use-flee #f + :use-proximity-notice #f + :use-jump-blocked #f + :use-jump-patrol #f + :gnd-collide-with #x1 + :debug-draw-neck #f + :debug-draw-jump #f + ) + ) + +;; definition for method 60 of type citb-bunny +;; INFO: Return type mismatch int vs symbol. +(defmethod dummy-60 citb-bunny ((obj citb-bunny) (arg0 object)) + (initialize-skeleton obj *citb-bunny-sg* '()) + (set! (-> obj draw origin-joint-index) (the-as uint 3)) + (the-as symbol 0) + ) + +;; definition for method 48 of type citb-bunny +;; INFO: Return type mismatch int vs none. +(defmethod TODO-RENAME-48 citb-bunny ((obj citb-bunny) (arg0 object)) + (dummy-60 obj arg0) + (TODO-RENAME-45 obj *citb-bunny-nav-enemy-info*) + (set! + (-> obj draw shadow-ctrl settings flags) + (logand -9 (-> obj draw shadow-ctrl settings flags)) + ) + (cond + ((zero? (res-lump-value (-> obj entity) 'mode uint128)) + (set! (-> obj defense) (the-as uint 1)) + (set! (-> obj retreat-timeout) 5.0) + ) + (else + (set! (-> obj defense) (the-as uint 0)) + (set! (-> obj retreat-timeout) 0.1) + ) + ) + (set! + (-> obj last-nondangerous-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (set! (-> obj gnd-popup) 16384.0) + (set! (-> obj got-jump-event?) #f) + (set! (-> obj notice-land-anim) 8) + (set! (-> obj attack-anim) 4) + (set! (-> obj neck up) (the-as uint 1)) + (set! (-> obj neck nose) (the-as uint 2)) + (set! (-> obj neck ear) (the-as uint 0)) + (set! (-> obj patrol-rand-distraction) (+ (nav-enemy-rnd-int-count 5) 1)) + (set! (-> obj patrol-hop-failed?) #f) + (logclear! (-> obj mask) (process-mask actor-pause)) + 0 + (none) + ) + +;; definition for method 56 of type citb-bunny +(defmethod set-jump-height-factor! citb-bunny ((obj citb-bunny) (arg0 int)) + (let ((v1-0 arg0)) + (cond + ((zero? v1-0) + (set! (-> obj jump-anim) 6) + (set! (-> obj jump-height-min) 4096.0) + (let ((f0-1 0.6)) + (set! (-> obj jump-height-factor) f0-1) + f0-1 + ) + ) + ((= v1-0 1) + (set! (-> obj jump-anim) 5) + (set! (-> obj jump-height-min) 4096.0) + (let ((f0-3 0.6)) + (set! (-> obj jump-height-factor) f0-3) + f0-3 + ) + ) + ((= v1-0 2) + (set! (-> obj jump-anim) 5) + (set! (-> obj jump-height-min) 4096.0) + (let ((f0-5 0.4)) + (set! (-> obj jump-height-factor) f0-5) + f0-5 + ) + ) + ) + ) + ) diff --git a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc index 50d476a5b7..640a2622e3 100644 --- a/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy-h_REF.gc @@ -207,11 +207,11 @@ (dummy-53 (_type_) symbol 53) (dummy-54 (_type_) none 54) (dummy-55 (_type_) none 55) - (dummy-56 (_type_) none 56) - (dummy-57 (_type_) none 57) - (dummy-58 (_type_) none 58) + (set-jump-height-factor! (_type_ int) float 56) + (dummy-57 (_type_) vector 57) + (dummy-58 (_type_) vector 58) (TODO-RENAME-59 (_type_) none 59) - (dummy-60 (_type_) none 60) + (dummy-60 (_type_ object) symbol 60) (dummy-61 (_type_) none 61) (dummy-62 (_type_) none 62) (dummy-63 (_type_) none 63) @@ -222,7 +222,7 @@ (dummy-68 (_type_) none 68) (dummy-69 (_type_) none 69) (dummy-70 (_type_) none 70) - (dummy-71 (_type_) none 71) + (dummy-71 () _type_ :state 71) (nav-enemy-touch-handler (_type_ process event-message-block) object 72) (nav-enemy-attack-handler (_type_ process event-message-block) object 73) (nav-enemy-jump-blocked () _type_ :state 74) diff --git a/test/decompiler/reference/levels/common/nav-enemy_REF.gc b/test/decompiler/reference/levels/common/nav-enemy_REF.gc index da85404d08..ca5e5414aa 100644 --- a/test/decompiler/reference/levels/common/nav-enemy_REF.gc +++ b/test/decompiler/reference/levels/common/nav-enemy_REF.gc @@ -566,7 +566,11 @@ nav-enemy-default-event-handler (set! (-> self nav travel quad) (-> gp-1 quad)) ) (vector-normalize! (-> self nav travel) 409600.0) - (dummy-24 (-> self nav) 204.8 #f) + (dummy-24 + (-> self nav) + 204.8 + (the-as clip-travel-vector-to-mesh-return-info #f) + ) (vector+! (-> self nav target-pos) (-> self collide-info trans) diff --git a/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc b/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc index 5e237e785a..7cc87bf547 100644 --- a/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc +++ b/test/decompiler/reference/levels/finalboss/robotboss-misc_REF.gc @@ -308,7 +308,7 @@ (the-as part-tracker (-> self particles gp-0 tracker process 0)) start-time ) - (-> *display* base-frame-counter) + (the-as uint (-> *display* base-frame-counter)) ) ) ((-> self particles gp-0 kind) diff --git a/test/decompiler/reference/levels/sunken/floating-launcher_REF.gc b/test/decompiler/reference/levels/sunken/floating-launcher_REF.gc new file mode 100644 index 0000000000..aa7ffb6ea5 --- /dev/null +++ b/test/decompiler/reference/levels/sunken/floating-launcher_REF.gc @@ -0,0 +1,230 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type floating-launcher +(deftype floating-launcher (baseplat) + ((trigger-height float :offset-assert 228) + (launcher (pointer launcher) :offset-assert 232) + ) + :heap-base #x80 + :method-count-assert 27 + :size-assert #xec + :flag-assert #x1b008000ec + (:states + floating-launcher-idle + floating-launcher-lowering + floating-launcher-ready + ) + ) + +;; definition for method 3 of type floating-launcher +(defmethod inspect floating-launcher ((obj floating-launcher)) + (let ((t9-0 (method-of-type baseplat inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttrigger-height: ~f~%" (-> obj trigger-height)) + (format #t "~T~Tlauncher: #x~X~%" (-> obj launcher)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *floating-launcher-sg* floating-launcher + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 5) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate floating-launcher-idle (floating-launcher) + :event + (the-as + (function process int symbol event-message-block object :behavior floating-launcher) + plat-event + ) + :trans + (behavior () + (plat-trans) + (when + (< + (vector-xz-length + (vector-! + (new 'stack-no-clear 'vector) + (target-pos 0) + (-> self root-override trans) + ) + ) + 81920.0 + ) + (if + (and + (>= (-> (target-pos 0) y) (-> self trigger-height)) + (logtest? (-> *target* control status) 2) + ) + (go floating-launcher-lowering) + ) + ) + (none) + ) + :code + (behavior () + (transform-post) + (suspend) + (transform-post) + (suspend) + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior floating-launcher) plat-post) + ) + +;; failed to figure out what this is: +(defstate floating-launcher-lowering (floating-launcher) + :event + (the-as + (function process int symbol event-message-block object :behavior floating-launcher) + plat-event + ) + :trans + (the-as (function none :behavior floating-launcher) plat-trans) + :code + (behavior () + (let ((a0-1 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (if a0-1 + (entity-birth-no-kill a0-1) + ) + ) + (let ((f30-0 1.0)) + (while (!= f30-0 0.0) + (set! f30-0 (seek f30-0 0.0 (-> *display* seconds-per-frame))) + (eval-path-curve-div! (-> self path) (-> self basetrans) f30-0 'interp) + (set! + (-> self launcher 0 root-override trans quad) + (-> self basetrans quad) + ) + (dummy-47 (-> self launcher 0 root-override)) + (suspend) + ) + ) + (eval-path-curve-div! (-> self path) (-> self basetrans) 0.0 'interp) + (set! (-> self launcher 0 root-override trans quad) (-> self basetrans quad)) + (dummy-47 (-> self launcher 0 root-override)) + (go floating-launcher-ready) + (none) + ) + :post + (the-as (function none :behavior floating-launcher) plat-post) + ) + +;; failed to figure out what this is: +(defstate floating-launcher-ready (floating-launcher) + :event + (the-as + (function process int symbol event-message-block object :behavior floating-launcher) + plat-event + ) + :trans + (the-as (function none :behavior floating-launcher) plat-trans) + :code + (the-as (function none :behavior floating-launcher) plat-code) + :post + (the-as (function none :behavior floating-launcher) plat-post) + ) + +;; definition for method 11 of type floating-launcher +;; INFO: Return type mismatch object vs none. +(defmethod + copy-defaults! + floating-launcher + ((obj floating-launcher) (arg0 res-lump)) + (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) 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 11468.8) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (set! (-> obj path) (new 'process 'path-control obj 'path 0.0)) + (logior! + (-> obj path flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (eval-path-curve-div! (-> obj path) (-> obj root-override trans) 1.0 'interp) + (let ((f30-0 (res-lump-float arg0 'spring-height :default 163840.0)) + (s4-1 (get-process *default-dead-pool* launcher #x4000)) + ) + (set! (-> obj launcher) (the-as (pointer launcher) (when s4-1 + (let + ((t9-11 + (method-of-type + launcher + activate + ) + ) + ) + (t9-11 + (the-as launcher s4-1) + obj + 'launcher + (the-as + pointer + #x70004000 + ) + ) + ) + (run-now-in-process + s4-1 + launcher-init-by-other + (-> + obj + root-override + trans + ) + f30-0 + 0 + 81920.0 + ) + (-> s4-1 ppointer) + ) + ) + ) + ) + (initialize-skeleton obj *floating-launcher-sg* '()) + (logior! (-> obj skel status) 1) + (dummy-47 (-> obj root-override)) + (dummy-21 obj) + (set! (-> obj trigger-height) (res-lump-float arg0 'trigger-height)) + (go floating-launcher-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/shover_REF.gc b/test/decompiler/reference/levels/sunken/shover_REF.gc new file mode 100644 index 0000000000..db0de558f2 --- /dev/null +++ b/test/decompiler/reference/levels/sunken/shover_REF.gc @@ -0,0 +1,194 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type shover +(deftype shover (process-drawable) + ((root-override collide-shape :offset 112) + (shove-up float :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + shover-idle + ) + ) + +;; definition for method 3 of type shover +(defmethod inspect shover ((obj shover)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tshove-up: ~f~%" (-> obj shove-up)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *shover-sg* shover + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate shover-idle (shover) + :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 dummy-13) + (the-as touching-shapes-entry (-> arg3 param 0)) + (-> *target* control) + 1 + 0 + ) + (let ((s4-0 (new 'stack 'attack-info))) + (dummy-41 (-> self root-override) s4-0 (-> self shove-up)) + (level-hint-spawn + (game-text-id sunken-take-it-easy-hot-pipes) + "sksp0134" + (the-as entity #f) + *entity-pool* + (game-task none) + ) + (cond + ((or + (= (-> *target* control unknown-surface00 mode) 'air) + (>= + (+ (-> *display* base-frame-counter) -60) + (-> *target* control unknown-dword10) + ) + (< 0.75 (-> *target* control poly-normal y)) + ) + (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-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-6 param 1) (the-as uint v1-22)) + ) + (send-event-function arg0 a1-6) + ) + ) + (else + (let ((a1-7 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-7 from) self) + (set! (-> a1-7 num-params) 2) + (set! (-> a1-7 message) 'attack-or-shove) + (set! (-> a1-7 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-7 param 1) (the-as uint v1-26)) + ) + (send-event-function arg0 a1-7) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :code + (the-as (function none :behavior shover) anim-loop) + ) + +;; definition for method 11 of type shover +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod copy-defaults! shover ((obj shover) (arg0 res-lump)) + (local-vars (sv-16 res-tag)) + (set! (-> obj shove-up) (res-lump-float arg0 'shove :default 12288.0)) + (let ((s3-0 (res-lump-value arg0 'collision-mesh-id uint128)) + (s4-0 + (new 'process 'collide-shape obj (collide-list-enum hit-by-player)) + ) + ) + (let + ((s3-1 + (new + 'process + 'collide-shape-prim-mesh + s4-0 + (the-as uint s3-0) + (the-as uint 0) + ) + ) + ) + (set! (-> s3-1 prim-core collide-as) (the-as uint 512)) + (set! (-> s3-1 collide-with) (the-as uint 16)) + (set! (-> s3-1 prim-core action) (the-as uint 1)) + (set! (-> s3-1 prim-core offense) 4) + (set! (-> s3-1 transform-index) 0) + (set-vector! (-> s3-1 local-sphere) 0.0 0.0 0.0 53248.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *shover-sg* '()) + (let ((v1-17 (new 'process 'path-control obj 'path 0.0))) + (set! (-> obj path) v1-17) + (logior! + (-> v1-17 flags) + (path-control-flag display draw-line draw-point draw-text) + ) + (if (<= (-> v1-17 curve num-cverts) 0) + (go process-drawable-art-error "no path") + ) + ) + (set! sv-16 (new 'static 'res-tag)) + (let + ((v1-23 + (res-lump-data arg0 'trans-offset (pointer float) :tag-ptr (& sv-16)) + ) + ) + (when v1-23 + (+! (-> obj root-override trans x) (-> v1-23 0)) + (+! (-> obj root-override trans y) (-> v1-23 1)) + (+! (-> obj root-override trans z) (-> v1-23 2)) + ) + ) + (let ((f0-13 (res-lump-float arg0 'rotoffset))) + (if (!= f0-13 0.0) + (quaternion-rotate-y! + (-> obj root-override quat) + (-> obj root-override quat) + f0-13 + ) + ) + ) + (ja-channel-set! 1) + (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 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (set! *shover* obj) + (go shover-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/steam-cap_REF.gc b/test/decompiler/reference/levels/sunken/steam-cap_REF.gc new file mode 100644 index 0000000000..0a5e83f24b --- /dev/null +++ b/test/decompiler/reference/levels/sunken/steam-cap_REF.gc @@ -0,0 +1,1039 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type steam-cap-control-pt +(deftype steam-cap-control-pt (structure) + ((trans vector :inline :offset-assert 0) + (transv vector :inline :offset-assert 16) + ) + :method-count-assert 9 + :size-assert #x20 + :flag-assert #x900000020 + ) + +;; definition for method 3 of type steam-cap-control-pt +(defmethod inspect steam-cap-control-pt ((obj steam-cap-control-pt)) + (format #t "[~8x] ~A~%" obj 'steam-cap-control-pt) + (format #t "~Ttrans: #~%" (-> obj trans)) + (format #t "~Ttransv: #~%" (-> obj transv)) + obj + ) + +;; definition of type steam-cap +(deftype steam-cap (process-drawable) + ((root-override collide-shape-moving :offset 112) + (do-burst? symbol :offset-assert 176) + (do-falling-sound? symbol :offset-assert 180) + (do-landing-sound? symbol :offset-assert 184) + (begin-travel-up float :offset-assert 188) + (begin-travel-down float :offset-assert 192) + (sync sync-info :inline :offset-assert 196) + (part2 sparticle-launch-control :offset-assert 204) + (part3 sparticle-launch-control :offset-assert 208) + (down vector :inline :offset-assert 224) + (up vector :inline :offset-assert 240) + (control-pt steam-cap-control-pt 3 :inline :offset-assert 256) + ) + :heap-base #xf0 + :method-count-assert 22 + :size-assert #x160 + :flag-assert #x1600f00160 + (:methods + (dummy-20 (_type_) none 20) + (dummy-21 (_type_) quaternion 21) + ) + (:states + steam-cap-idle + ) + ) + +;; definition for method 3 of type steam-cap +(defmethod inspect steam-cap ((obj steam-cap)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tdo-burst?: ~A~%" (-> obj do-burst?)) + (format #t "~T~Tdo-falling-sound?: ~A~%" (-> obj do-falling-sound?)) + (format #t "~T~Tdo-landing-sound?: ~A~%" (-> obj do-landing-sound?)) + (format #t "~T~Tbegin-travel-up: ~f~%" (-> obj begin-travel-up)) + (format #t "~T~Tbegin-travel-down: ~f~%" (-> obj begin-travel-down)) + (format #t "~T~Tsync: #~%" (-> obj sync)) + (format #t "~T~Tpart2: ~A~%" (-> obj part2)) + (format #t "~T~Tpart3: ~A~%" (-> obj part3)) + (format #t "~T~Tdown: #~%" (-> obj down)) + (format #t "~T~Tup: #~%" (-> obj up)) + (format #t "~T~Tcontrol-pt[3] @ #x~X~%" (-> obj control-pt)) + obj + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 441) + (new 'static 'sparticle-launch-group + :length 7 + :duration #xbb8 + :linger-duration #x5dc + :name "group-steam-cap-sides" + :launcher + (new 'static 'inline-array sparticle-group-item 7 + (sp-item 1718 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75) + (sp-item 1719 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75 :offset 60) + (sp-item 1720 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75 :offset 120) + (sp-item 1721 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75) + (sp-item 1722 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75 :offset 60) + (sp-item 1723 :fade-after (meters 100.0) :falloff-to (meters 160.0) :period 180 :length 75 :offset 120) + (sp-item 1724 :fade-after (meters 60.0) :falloff-to (meters 60.0) :period 180 :length 75 :offset 120) + ) + :bounds (new 'static 'sphere :w 40960.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1724) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-flt spt-num 1.0) + (sp-int spt-rot-x 5) + (sp-flt spt-r 4096.0) + (sp-flt spt-g 2867.2) + (sp-flt spt-b 3276.8) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags aux-list) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1725) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1725) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-b -2.7306666) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1718) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1721) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1719) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 120.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1722) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 120.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1720) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 240.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1723) + (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-rnd-flt spt-num 0.0 2.0 1.0) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 0.5) (meters 1.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-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 0.0 16.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-scalevel-x (meters 0.01)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-fade-a 0.10666667) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1726) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 240.0) (degrees 120.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1726) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.21333334) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 442) + (new 'static 'sparticle-launch-group + :length 4 + :duration #xbb8 + :linger-duration #x5dc + :name "group-steam-cap-plume" + :launcher + (new 'static 'inline-array sparticle-group-item 4 + (sp-item 1727 :fade-after (meters 120.0) :falloff-to (meters 160.0)) + (sp-item 1728 :fade-after (meters 120.0) :falloff-to (meters 160.0)) + (sp-item 1729 :fade-after (meters 60.0) :falloff-to (meters 60.0)) + (sp-item 1730 :fade-after (meters 60.0) :falloff-to (meters 60.0) :flags (start-dead)) + ) + :bounds (new 'static 'sphere :w 131072.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 443) + (new 'static 'sparticle-launch-group + :length 2 + :duration #xbb8 + :linger-duration #x5dc + :name "group-steam-cap-plume-spread" + :launcher + (new 'static 'inline-array sparticle-group-item 2 + (sp-item 1731 :fade-after (meters 120.0) :falloff-to (meters 160.0)) + (sp-item 1732 :fade-after (meters 120.0) :falloff-to (meters 160.0)) + ) + :bounds (new 'static 'sphere :w 131072.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1730) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 16 + (sp-flt spt-num 0.4) + (sp-int spt-rot-x 5) + (sp-flt spt-r 6144.0) + (sp-flt spt-g 2867.2) + (sp-flt spt-b 3276.8) + (sp-rnd-flt spt-vel-y (meters 0.016666668) (meters 0.033333335) 1.0) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.94 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags aux-list) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1725) + (sp-flt spt-conerot-x (degrees 90.0)) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 2.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1732) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 0.5) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2 bit3) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1735) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1731) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 24 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 0.5) + (sp-flt spt-y (meters -0.5)) + (sp-rnd-flt spt-scale-x (meters 1.0) (meters 1.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 16.0 32.0 1.0) + (sp-rnd-flt spt-vel-y (meters 0.026666667) (meters 0.026666667) 1.0) + (sp-flt spt-scalevel-x (meters 0.013333334)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-copy-from-other spt-scalevel-y -4) + (sp-flt spt-accel-y 0.13653333) + (sp-rnd-flt spt-friction 0.92 0.02 1.0) + (sp-int spt-timer 300) + (sp-cpuinfo-flags bit2) + (sp-int spt-next-time 150) + (sp-launcher-by-id spt-next-launcher 1735) + (sp-rnd-flt spt-conerot-x (degrees 90.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-conerot-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-flt spt-conerot-radius (meters 0.5)) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1735) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a -0.32) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1727) + (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-rnd-flt spt-num 0.5 0.5 1.0) + (sp-rnd-flt spt-x (meters 0.0) (meters 1.0) 1.0) + (sp-flt spt-y (meters -1.0)) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 16.0 16.0 1.0) + (sp-flt spt-vel-y (meters 0.053333335)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-accel-y 2.7306666) + (sp-int spt-timer 153) + (sp-cpuinfo-flags bit2) + (sp-rnd-flt spt-conerot-x (degrees 0.0) (degrees 15.0) 1.0) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1728) + (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-rnd-flt spt-num 0.5 0.5 1.0) + (sp-rnd-flt spt-x (meters 0.0) (meters 0.5) 1.0) + (sp-flt spt-y (meters -1.0)) + (sp-rnd-flt spt-scale-x (meters 2.0) (meters 2.0) 1.0) + (sp-rnd-flt spt-rot-z (degrees 0.0) (degrees 360.0) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 128.0) + (sp-flt spt-g 128.0) + (sp-flt spt-b 128.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-vel-y (meters 0.053333335)) + (sp-rnd-flt spt-rotvel-z (degrees -0.2) (degrees 0.4) 1.0) + (sp-flt spt-accel-y 2.7306666) + (sp-int spt-timer 153) + (sp-cpuinfo-flags bit2 bit3) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1729) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 11 + (sp-flt spt-num 0.5) + (sp-rnd-flt spt-x (meters 0.5) (meters 0.5) 1.0) + (sp-int spt-rot-x 5) + (sp-flt spt-r 6144.0) + (sp-flt spt-g 2457.6) + (sp-flt spt-b 3276.8) + (sp-flt spt-vel-y (meters 0.053333335)) + (sp-int spt-timer 153) + (sp-cpuinfo-flags aux-list) + (sp-rnd-flt spt-rotate-y (degrees 0.0) (degrees 360.0) 1.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(defskelgroup *steam-cap-sg* steam-cap + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 3) + :longest-edge (meters 0) + ) + +;; definition for method 20 of type steam-cap +;; INFO: Return type mismatch object vs none. +(defmethod dummy-20 steam-cap ((obj steam-cap)) + (with-pp + (when *target* + (let* ((a1-0 (target-pos 0)) + (f0-0 (-> a1-0 y)) + ) + (when + (and + (>= f0-0 (+ -8192.0 (-> obj down y))) + (and + (>= (+ -4096.0 (-> obj root-override trans y)) f0-0) + (zero? (-> obj root-override riders num-riders)) + ) + ) + (let ((f0-1 (vector-vector-xz-distance-squared (-> obj down) a1-0))) + (when (>= 104857600.0 f0-1) + (let ((s5-0 (>= 37748736.0 f0-1))) + (when (not s5-0) + (when (>= (- (-> obj root-override trans y) (-> obj down y)) 3072.0) + (let ((a1-1 (new 'stack-no-clear 'vector))) + (set! (-> a1-1 x) (the-as float 1)) + (set! (-> a1-1 y) (the-as float #f)) + (if (dummy-40 (-> obj root-override) a1-1) + (set! s5-0 #t) + ) + ) + ) + ) + (when s5-0 + (let ((a1-2 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-2 from) pp) + (set! (-> a1-2 num-params) 2) + (set! (-> a1-2 message) 'shove) + (set! (-> a1-2 param 0) (the-as uint #f)) + (let ((v1-16 (new 'static 'attack-info :mask #xc0))) + (set! (-> v1-16 shove-up) 2048.0) + (set! (-> v1-16 shove-back) 6144.0) + (set! (-> a1-2 param 1) (the-as uint v1-16)) + ) + (send-event-function *target* a1-2) + ) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + ) + +;; definition for method 21 of type steam-cap +;; Used lq/sq +(defmethod dummy-21 steam-cap ((obj steam-cap)) + (local-vars (at-0 int) (at-1 int) (s5-0 symbol)) + (rlet ((vf0 :class vf) + (vf1 :class vf) + (vf2 :class vf) + ) + (init-vf0-vector) + (let ((f0-0 (get-current-phase (-> obj sync)))) + #t + (cond + ((< f0-0 (-> obj begin-travel-up)) + (let ((f30-0 (/ f0-0 (-> obj begin-travel-up)))) + (set! s5-0 #t) + (dotimes (s4-0 3) + (let ((s3-0 (-> obj control-pt s4-0))) + (when (= (-> s3-0 trans y) (-> obj down y)) + (set! (-> obj do-burst?) #t) + (let ((a0-2 (+ (the int (* 60.0 (- 1.0 f30-0))) 3))) + (if (zero? (rand-vu-int-count a0-2)) + (+! + (-> s3-0 transv y) + (* (rand-vu-float-range 40960.0 57344.0) f30-0) + ) + ) + ) + ) + ) + ) + (let ((a0-4 (+ (the int (* 60.0 (- 1.0 f30-0))) 1))) + (if (zero? (rand-vu-int-count a0-4)) + (spawn (-> obj part) (-> obj down)) + ) + ) + ) + ) + ((< f0-0 (-> obj begin-travel-down)) + (let + ((f30-1 + (/ + (- f0-0 (-> obj begin-travel-up)) + (- (-> obj begin-travel-down) (-> obj begin-travel-up)) + ) + ) + ) + (set! s5-0 #f) + (set! (-> obj do-falling-sound?) #t) + (when (-> obj do-burst?) + (sound-play-by-name + (static-sound-name "sunk-top-rises") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (set! (-> obj do-burst?) #f) + (spawn (-> obj part) (-> obj down)) + (spawn (-> obj part) (-> obj down)) + (spawn (-> obj part) (-> obj down)) + (spawn (-> obj part) (-> obj down)) + ) + (when (< f30-1 0.94) + (spawn (-> obj part2) (-> obj down)) + (let ((a1-8 (new 'stack-no-clear 'vector))) + (set! (-> a1-8 quad) (-> obj root-override trans quad)) + (set! (-> a1-8 y) (+ -3072.0 (-> a1-8 y))) + (spawn (-> obj part3) a1-8) + ) + ) + ) + ) + (else + (set! s5-0 #t) + (when (-> obj do-falling-sound?) + (set! (-> obj do-falling-sound?) #f) + (sound-play-by-name + (static-sound-name "sunk-top-falls") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + ) + ) + ) + ) + (dotimes (s4-3 3) + (let ((s2-0 (-> obj control-pt s4-3)) + (s3-3 (new 'stack-no-clear 'vector)) + ) + (set! (-> s3-3 quad) (-> s2-0 trans quad)) + (cond + (s5-0 + (+! (-> s2-0 transv y) (* -819200.0 (-> *display* seconds-per-frame))) + (let ((a1-10 s3-3) + (v1-42 s3-3) + (a0-21 (new 'stack-no-clear 'vector)) + ) + (.lvf vf1 (&-> (-> s2-0 transv) quad)) + (let ((f0-17 (-> *display* seconds-per-frame))) + (.mov at-0 f0-17) + ) + (.mov vf2 at-0) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> a0-21 quad) vf1) + (vector+! a1-10 v1-42 a0-21) + ) + (when (< (-> s3-3 y) (-> obj down y)) + (when (-> obj do-landing-sound?) + (set! (-> obj do-landing-sound?) #f) + (sound-play-by-name + (static-sound-name "sunk-top-lands") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + ) + (set! (-> s3-3 y) (-> obj down y)) + (let ((f0-20 (-> s2-0 transv y))) + (when (< f0-20 0.0) + (let ((f0-22 (* 0.3 (- f0-20)))) + (set! (-> s2-0 transv y) f0-22) + (if (< 7782.4 f0-22) + (sound-play-by-name + (static-sound-name "sunk-top-lands") + (new-sound-id) + 614 + 0 + 0 + 1 + #t + ) + ) + ) + ) + ) + ) + ) + (else + (set! (-> obj do-landing-sound?) #t) + (let ((f0-24 (* 0.000048828126 (- (-> obj up y) (-> s2-0 trans y))))) + (cond + ((< 1.0 f0-24) + (set! f0-24 1.0) + ) + ((< f0-24 -1.0) + (set! f0-24 -1.0) + ) + ) + (+! + (-> s2-0 transv y) + (* 819200.0 (-> *display* seconds-per-frame) f0-24) + ) + (let ((f1-24 (-> s2-0 transv y))) + (when (< 122880.0 (fabs f1-24)) + (if (>= f1-24 0.0) + (set! (-> s2-0 transv y) 122880.0) + (set! (-> s2-0 transv y) -122880.0) + ) + ) + ) + (let ((a1-14 s3-3) + (v1-61 s3-3) + (a0-26 (new 'stack-no-clear 'vector)) + ) + (.lvf vf1 (&-> (-> s2-0 transv) quad)) + (let ((f1-27 (-> *display* seconds-per-frame))) + (.mov at-1 f1-27) + ) + (.mov vf2 at-1) + (.mov.vf vf1 vf0 :mask #b1000) + (.mul.x.vf vf1 vf1 vf2 :mask #b111) + (.svf (&-> a0-26 quad) vf1) + (vector+! a1-14 v1-61 a0-26) + ) + (let ((f1-29 (- (-> obj up y) (-> s3-3 y))) + (v1-62 (>= f0-24 0.0)) + ) + (when (!= v1-62 (>= f1-29 0.0)) + (let ((f0-26 (-> s2-0 transv y))) + (when (< 40960.0 (fabs f0-26)) + (if (>= f0-26 0.0) + (set! (-> s2-0 transv y) 40960.0) + (set! (-> s2-0 transv y) -40960.0) + ) + ) + ) + (set! (-> s2-0 transv y) (* 0.8 (-> s2-0 transv y))) + ) + ) + ) + ) + ) + (set! (-> s2-0 trans quad) (-> s3-3 quad)) + ) + ) + (let ((f0-31 0.0)) + (dotimes (v1-71 3) + (+! f0-31 (-> obj control-pt v1-71 trans y)) + ) + (let ((f0-32 (* 0.33333334 f0-31)) + (a1-16 (new 'stack-no-clear 'vector)) + ) + (set! (-> a1-16 quad) (-> obj root-override trans quad)) + (set! (-> a1-16 y) f0-32) + (TODO-RENAME-30 (-> obj root-override) a1-16) + ) + ) + (let ((v1-77 (new 'stack-no-clear 'vector)) + (a0-35 (new 'stack-no-clear 'vector)) + (s5-1 (new 'stack-no-clear 'vector)) + ) + (vector-! + v1-77 + (the-as vector (&-> obj stack 176)) + (the-as vector (-> obj control-pt)) + ) + (vector-! + a0-35 + (the-as vector (&-> obj stack 208)) + (the-as vector (-> obj control-pt)) + ) + (vector-cross! s5-1 v1-77 a0-35) + (vector-normalize! s5-1 1.0) + (forward-up-nopitch->quaternion + (-> obj root-override quat) + (vector-z-quaternion! (new-stack-vector0) (-> obj root-override quat)) + s5-1 + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate steam-cap-idle (steam-cap) + :trans + (the-as (function none :behavior steam-cap) rider-trans) + :code + (behavior () + (while #t + (dummy-20 self) + (dummy-21 self) + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior steam-cap) rider-post) + ) + +;; definition for method 7 of type steam-cap +;; INFO: Return type mismatch process-drawable vs steam-cap. +(defmethod relocate steam-cap ((obj steam-cap) (arg0 int)) + (if (nonzero? (-> obj part2)) + (&+! (-> obj part2) arg0) + ) + (if (nonzero? (-> obj part3)) + (&+! (-> obj part3) arg0) + ) + (the-as + steam-cap + ((the-as + (function process-drawable int process-drawable) + (find-parent-method steam-cap 7) + ) + obj + arg0 + ) + ) + ) + +;; definition for method 10 of type steam-cap +(defmethod deactivate steam-cap ((obj steam-cap)) + (if (nonzero? (-> obj part2)) + (kill-and-free-particles (-> obj part2)) + ) + (if (nonzero? (-> obj part3)) + (kill-and-free-particles (-> obj part3)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 11 of type steam-cap +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod copy-defaults! steam-cap ((obj steam-cap) (arg0 res-lump)) + (local-vars (sv-16 res-tag)) + (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) 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) 4) + (set-vector! (-> s3-0 local-sphere) 0.0 0.0 0.0 12288.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (set! (-> obj do-burst?) #f) + (set! (-> obj do-falling-sound?) #f) + (set! (-> obj do-landing-sound?) #f) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *steam-cap-sg* '()) + (logior! (-> obj skel status) 1) + (ja-channel-set! 1) + (let ((s4-1 (-> obj skel root-channel 0))) + (joint-control-channel-group-eval! + s4-1 + (the-as art-joint-anim (-> obj draw art-group data 2)) + num-func-identity + ) + (set! (-> s4-1 frame-num) 0.0) + ) + (dummy-47 (-> obj root-override)) + (load-params! (-> obj sync) obj (the-as uint 1800) 0.0 0.15 0.15) + (let ((f30-0 0.4) + (f28-0 0.9) + ) + (set! sv-16 (new 'static 'res-tag)) + (let + ((v1-36 (res-lump-data arg0 'percent (pointer float) :tag-ptr (& sv-16)))) + (when v1-36 + (set! f30-0 (-> v1-36 0)) + (set! f28-0 (-> v1-36 1)) + (if (>= 0.01 f30-0) + (set! f30-0 0.01) + ) + (if (>= 0.01 f28-0) + (set! f28-0 0.01) + ) + (if (>= f30-0 f28-0) + (set! f28-0 (+ 0.01 f30-0)) + ) + (when (>= f30-0 1.0) + (set! f28-0 (* 0.9 (/ f28-0 f30-0))) + (set! f30-0 0.9) + ) + ) + ) + (set! (-> obj begin-travel-up) f30-0) + (set! (-> obj begin-travel-down) f28-0) + ) + (set! (-> obj down quad) (-> obj root-override trans quad)) + (set! (-> obj up quad) (-> obj root-override trans quad)) + (set! (-> obj up y) (+ 40960.0 (-> obj up y))) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 441) obj) + ) + (set! + (-> obj part2) + (create-launch-control (-> *part-group-id-table* 442) obj) + ) + (set! + (-> obj part3) + (create-launch-control (-> *part-group-id-table* 443) obj) + ) + (vector-reset! (-> obj root-override transv)) + (let ((s5-1 (new 'stack-no-clear 'vector)) + (f30-1 0.0) + ) + (dotimes (s4-2 3) + (let ((s3-1 (-> obj control-pt s4-2))) + (set-vector! s5-1 0.0 0.0 10240.0 1.0) + (vector-rotate-around-y! s5-1 s5-1 f30-1) + (set! f30-1 (+ 21845.334 f30-1)) + (vector+! (-> s3-1 trans) s5-1 (-> obj root-override trans)) + (vector-reset! (-> s3-1 transv)) + ) + ) + ) + (go steam-cap-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/sun-iris-door_REF.gc b/test/decompiler/reference/levels/sunken/sun-iris-door_REF.gc new file mode 100644 index 0000000000..4637a3753e --- /dev/null +++ b/test/decompiler/reference/levels/sunken/sun-iris-door_REF.gc @@ -0,0 +1,625 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type sun-iris-door +(deftype sun-iris-door (process-drawable) + ((root-override collide-shape :offset 112) + (timeout float :offset-assert 176) + (proximity? symbol :offset-assert 180) + (directional-proximity? symbol :offset-assert 184) + (move-to? symbol :offset-assert 188) + (locked-by-task? symbol :offset-assert 192) + (close-dist float :offset-assert 196) + (open-dist float :offset-assert 200) + (move-to-pos vector :inline :offset-assert 208) + (outward-vec vector :inline :offset-assert 224) + (move-to-quat quaternion :inline :offset-assert 240) + ) + :heap-base #x90 + :method-count-assert 22 + :size-assert #x100 + :flag-assert #x1600900100 + (:methods + (should-close? (_type_) symbol 20) + (should-open? (_type_) symbol 21) + ) + (:states + sun-iris-door-closed + sun-iris-door-closing + sun-iris-door-open + sun-iris-door-opening + ) + ) + +;; definition for method 3 of type sun-iris-door +(defmethod inspect sun-iris-door ((obj sun-iris-door)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Ttimeout: ~f~%" (-> obj timeout)) + (format #t "~T~Tproximity?: ~A~%" (-> obj proximity?)) + (format #t "~T~Tdirectional-proximity?: ~A~%" (-> obj directional-proximity?)) + (format #t "~T~Tmove-to?: ~A~%" (-> obj move-to?)) + (format #t "~T~Tlocked-by-task?: ~A~%" (-> obj locked-by-task?)) + (format #t "~T~Tclose-dist: ~f~%" (-> obj close-dist)) + (format #t "~T~Topen-dist: ~f~%" (-> obj open-dist)) + (format #t "~T~Tmove-to-pos: #~%" (-> obj move-to-pos)) + (format #t "~T~Toutward-vec: #~%" (-> obj outward-vec)) + (format #t "~T~Tmove-to-quat: #~%" (-> obj move-to-quat)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *sun-iris-door-sg* sun-iris-door + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4.5) + :longest-edge (meters 0) + ) + +;; definition for method 21 of type sun-iris-door +(defmethod should-open? sun-iris-door ((obj sun-iris-door)) + (let ((f30-0 1228800.0)) + 0.0 + (let ((f0-7 (cond + ((-> obj directional-proximity?) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (when *target* + (vector-! s5-0 (target-pos 0) (-> obj root-override trans)) + (set! (-> s5-0 y) 0.0) + (set! f30-0 (fabs (vector-dot s5-0 (-> obj outward-vec)))) + ) + (vector-! s5-0 (camera-pos) (-> obj root-override trans)) + (set! (-> s5-0 y) 0.0) + (fabs (vector-dot s5-0 (-> obj outward-vec))) + ) + ) + (else + (if *target* + (set! + f30-0 + (vector-vector-xz-distance + (-> obj root-override trans) + (target-pos 0) + ) + ) + ) + (vector-vector-xz-distance + (-> obj root-override trans) + (camera-pos) + ) + ) + ) + ) + ) + (when (or (>= (-> obj open-dist) f30-0) (>= (-> obj open-dist) f0-7)) + (if + (or + (not (-> obj locked-by-task?)) + (task-complete? *game-info* (-> obj entity extra perm task)) + ) + (return #t) + ) + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate sun-iris-door-closed (sun-iris-door) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (go sun-iris-door-opening) + ) + (('move-to) + (set! (-> self move-to?) #t) + (set! + (-> self move-to-pos quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (quaternion-copy! + (-> self move-to-quat) + (the-as quaternion (-> arg3 param 1)) + ) + ) + ) + ) + :trans + (behavior () + (when (-> self proximity?) + (if (should-open? self) + (go sun-iris-door-opening) + ) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (behavior () + (when (-> self move-to?) + (set! (-> self move-to?) #f) + (TODO-RENAME-30 (-> self root-override) (-> self move-to-pos)) + (quaternion-copy! (-> self root-override quat) (-> self move-to-quat)) + (ja-post) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate sun-iris-door-opening (sun-iris-door) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('untrigger) + (go sun-iris-door-closing) + ) + (('move-to) + (set! (-> self move-to?) #t) + (set! + (-> self move-to-pos quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (quaternion-copy! + (-> self move-to-quat) + (the-as quaternion (-> arg3 param 1)) + ) + ) + ) + ) + :code + (behavior () + (sound-play-by-name + (static-sound-name "irisdoor2") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (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! + a0-2 + (the-as art-joint-anim #f) + 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! + ) + ) + ) + (ja-post) + (go sun-iris-door-open) + (none) + ) + :post + (behavior () + (cond + ((-> self move-to?) + (set! (-> self move-to?) #f) + (TODO-RENAME-30 (-> self root-override) (-> self move-to-pos)) + (quaternion-copy! (-> self root-override quat) (-> self move-to-quat)) + (ja-post) + ) + (else + (transform-post) + ) + ) + (none) + ) + ) + +;; definition for method 20 of type sun-iris-door +(defmethod should-close? sun-iris-door ((obj sun-iris-door)) + (let ((f30-0 1228800.0)) + 0.0 + (let ((f0-7 (cond + ((-> obj directional-proximity?) + (let ((s5-0 (new 'stack-no-clear 'vector))) + (when *target* + (vector-! s5-0 (target-pos 0) (-> obj root-override trans)) + (set! (-> s5-0 y) 0.0) + (set! f30-0 (fabs (vector-dot s5-0 (-> obj outward-vec)))) + ) + (vector-! s5-0 (camera-pos) (-> obj root-override trans)) + (set! (-> s5-0 y) 0.0) + (fabs (vector-dot s5-0 (-> obj outward-vec))) + ) + ) + (else + (if *target* + (set! + f30-0 + (vector-vector-xz-distance + (-> obj root-override trans) + (target-pos 0) + ) + ) + ) + (vector-vector-xz-distance + (-> obj root-override trans) + (camera-pos) + ) + ) + ) + ) + ) + (when (and (>= f30-0 (-> obj close-dist)) (>= f0-7 (-> obj close-dist))) + (cond + ((and *target* (-> obj directional-proximity?)) + (let ((s4-6 (new 'stack-no-clear 'vector)) + (s5-3 (new 'stack-no-clear 'vector)) + ) + (vector-! s4-6 (target-pos 0) (-> obj root-override trans)) + (set! (-> s4-6 y) 0.0) + (vector-! s5-3 (camera-pos) (-> obj root-override trans)) + (set! (-> s5-3 y) 0.0) + (case (>= (vector-dot (-> obj outward-vec) s4-6) 0.0) + (((>= (vector-dot (-> obj outward-vec) s5-3) 0.0)) + (return #t) + ) + ) + ) + ) + (else + (return #t) + ) + ) + ) + ) + ) + #f + ) + +;; failed to figure out what this is: +(defstate sun-iris-door-open (sun-iris-door) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (let ((v0-0 (the-as object (-> *display* base-frame-counter)))) + (set! (-> self state-time) (the-as int v0-0)) + v0-0 + ) + ) + (('untrigger) + (go sun-iris-door-closing) + ) + (('move-to) + (set! (-> self move-to?) #t) + (set! + (-> self move-to-pos quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (quaternion-copy! + (-> self move-to-quat) + (the-as quaternion (-> arg3 param 1)) + ) + ) + ) + ) + :enter + (behavior () + (set! (-> self state-time) (-> *display* base-frame-counter)) + (dummy-48 (-> self root-override)) + (logior! (-> self draw status) 2) + (none) + ) + :exit + (behavior () + (dummy-49 (-> self root-override)) + (set! (-> self draw status) (logand -3 (-> self draw status))) + (none) + ) + :trans + (behavior () + (when (-> self proximity?) + (if (should-close? self) + (go sun-iris-door-closing) + ) + ) + (if + (and + (!= (-> self timeout) 0.0) + (>= + (- (-> *display* base-frame-counter) (-> self state-time)) + (the int (* 300.0 (-> self timeout))) + ) + ) + (go sun-iris-door-closing) + ) + (none) + ) + :code + (behavior () + (while #t + (logior! (-> self mask) (process-mask sleep-code)) + (suspend) + ) + (none) + ) + :post + (behavior () + (when (-> self move-to?) + (set! (-> self move-to?) #f) + (TODO-RENAME-30 (-> self root-override) (-> self move-to-pos)) + (quaternion-copy! (-> self root-override quat) (-> self move-to-quat)) + (ja-post) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate sun-iris-door-closing (sun-iris-door) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('trigger) + (go sun-iris-door-opening) + ) + (('move-to) + (set! (-> self move-to?) #t) + (set! + (-> self move-to-pos quad) + (-> (the-as vector (-> arg3 param 0)) quad) + ) + (quaternion-copy! + (-> self move-to-quat) + (the-as quaternion (-> arg3 param 1)) + ) + ) + ) + ) + :code + (behavior () + (sound-play-by-name + (static-sound-name "irisdoor2") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (let ((a0-2 (-> self skel root-channel 0))) + (set! (-> a0-2 param 0) 0.0) + (set! (-> a0-2 param 1) 1.0) + (joint-control-channel-group! + a0-2 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 param 0) 0.0) + (set! (-> a0-3 param 1) 1.0) + (joint-control-channel-group-eval! + a0-3 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (ja-post) + (go sun-iris-door-closed) + (none) + ) + :post + (behavior () + (cond + ((-> self move-to?) + (set! (-> self move-to?) #f) + (TODO-RENAME-30 (-> self root-override) (-> self move-to-pos)) + (quaternion-copy! (-> self root-override quat) (-> self move-to-quat)) + (ja-post) + ) + (else + (transform-post) + ) + ) + (none) + ) + ) + +;; definition for method 11 of type sun-iris-door +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod copy-defaults! sun-iris-door ((obj sun-iris-door) (arg0 res-lump)) + (local-vars (sv-16 res-tag)) + (set! (-> obj move-to?) #f) + (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 0.0 0.0 24576.0) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *sun-iris-door-sg* '()) + (set! (-> obj close-dist) 49152.0) + (set! (-> obj open-dist) 40960.0) + (set! (-> obj timeout) (res-lump-float arg0 'timeout)) + (set! (-> obj proximity?) (nonzero? (res-lump-value arg0 'proximity uint128))) + (set! (-> obj directional-proximity?) #f) + (when (name= (-> obj name) "sun-iris-door-6") + (set! (-> obj close-dist) 16384.0) + (set! (-> obj open-dist) 8192.0) + (set! (-> obj directional-proximity?) #t) + ) + (set! (-> obj locked-by-task?) (nonzero? (-> obj entity extra perm task))) + (let ((f0-11 (res-lump-float arg0 'scale-factor :default 1.0))) + (set-vector! (-> obj root-override scale) f0-11 f0-11 f0-11 1.0) + (set! (-> obj draw bounds w) (* 18432.0 f0-11)) + (let ((v1-25 (-> obj root-override root-prim))) + (set! (-> v1-25 local-sphere w) (* 24576.0 f0-11 f0-11)) + ) + ) + (set! sv-16 (new 'static 'res-tag)) + (let + ((v1-28 + (res-lump-data + (-> obj entity) + '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)) + ) + ) + (let ((f30-0 (quaternion-y-angle (-> obj root-override quat)))) + (set-vector! (-> obj outward-vec) (sin f30-0) 0.0 (cos f30-0) 1.0) + ) + (ja-channel-set! 1) + (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) + ) + (dummy-47 (-> obj root-override)) + (ja-post) + (go sun-iris-door-closed) + (none) + ) + +;; definition for function sun-iris-door-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior + sun-iris-door-init-by-other sun-iris-door + ((arg0 vector) (arg1 quaternion) (arg2 symbol)) + (set! (-> self move-to?) #f) + (let + ((s3-0 (new 'process 'collide-shape self (collide-list-enum hit-by-others)))) + (let + ((s2-0 + (new + 'process + 'collide-shape-prim-mesh + s3-0 + (the-as uint 0) + (the-as uint 0) + ) + ) + ) + (set! (-> s2-0 prim-core collide-as) (the-as uint 512)) + (set! (-> s2-0 collide-with) (the-as uint 16)) + (set! (-> s2-0 prim-core action) (the-as uint 1)) + (set! (-> s2-0 prim-core offense) 4) + (set! (-> s2-0 transform-index) 0) + (set-vector! (-> s2-0 local-sphere) 0.0 0.0 0.0 24576.0) + ) + (dummy-46 s3-0) + (set! (-> s3-0 nav-radius) (* 0.75 (-> s3-0 root-prim local-sphere w))) + (dummy-50 s3-0) + (set! (-> self root-override) s3-0) + ) + (set! (-> self root-override trans quad) (-> arg0 quad)) + (quaternion-copy! (-> self root-override quat) arg1) + (initialize-skeleton self *sun-iris-door-sg* '()) + (set! (-> self close-dist) 49152.0) + (set! (-> self open-dist) 40960.0) + (set! (-> self timeout) 0.0) + (set! (-> self proximity?) #f) + (set! (-> self directional-proximity?) #f) + (ja-channel-set! 1) + (cond + (arg2 + (let ((s5-1 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s5-1 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-identity + ) + (set! + (-> s5-1 frame-num) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 3)) + data + 0 + length + ) + -1 + ) + ) + ) + ) + ) + (else + (let ((s5-2 (-> self skel root-channel 0))) + (joint-control-channel-group-eval! + s5-2 + (the-as art-joint-anim (-> self draw art-group data 3)) + num-func-identity + ) + (set! (-> s5-2 frame-num) 0.0) + ) + ) + ) + (transform-post) + (if arg2 + (go sun-iris-door-open) + (go sun-iris-door-closed) + ) + (none) + ) diff --git a/test/decompiler/reference/levels/sunken/whirlpool_REF.gc b/test/decompiler/reference/levels/sunken/whirlpool_REF.gc new file mode 100644 index 0000000000..5e21c9ade8 --- /dev/null +++ b/test/decompiler/reference/levels/sunken/whirlpool_REF.gc @@ -0,0 +1,515 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type whirlpool +(deftype whirlpool (process-drawable) + ((root-override collide-shape :offset 112) + (spin-ry float :offset-assert 176) + (spin-speed-idle float :offset-assert 180) + (spin-speed-delta float :offset-assert 184) + (sync sync-info-paused :inline :offset-assert 188) + ) + :heap-base #x60 + :method-count-assert 21 + :size-assert #xcc + :flag-assert #x15006000cc + (:methods + (dummy-20 (_type_ float) uint 20) + ) + (:states + whirlpool-idle + ) + ) + +;; definition for method 3 of type whirlpool +(defmethod inspect whirlpool ((obj whirlpool)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tspin-ry: ~f~%" (-> obj spin-ry)) + (format #t "~T~Tspin-speed-idle: ~f~%" (-> obj spin-speed-idle)) + (format #t "~T~Tspin-speed-delta: ~f~%" (-> obj spin-speed-delta)) + (format #t "~T~Tsync: #~%" (-> obj sync)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *whirlpool-sg* whirlpool + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0.6000000238418579 0 3) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(set! + (-> *part-group-id-table* 447) + (new 'static 'sparticle-launch-group + :length #xbb + :duration #xbb8 + :linger-duration #x5dc + :flags (sp-group-flag use-local-clock) + :name "group-whirlpool-swirl" + :launcher + (new 'static 'inline-array sparticle-group-item 187 + (sp-item 1739 :fade-after (meters 60.0) :falloff-to (meters 60.0) :binding 1737) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1737 :flags (bit1 start-dead launch-asap) :binding 1738) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + (sp-item 1738 :flags (bit1 start-dead)) + ) + :bounds (new 'static 'sphere :w 32768.0) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1739) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 11 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-y (meters 6.6)) + (sp-flt spt-scale-x (meters 0.2)) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-g 0.0) + (sp-flt spt-a 128.0) + (sp-flt spt-accel-y -0.68266666) + (sp-int spt-timer 510) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1737) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 22 + (sp-tex spt-texture (new 'static 'texture-id :page #x2)) + (sp-flt spt-num 1.0) + (sp-flt spt-x (meters 0.0)) + (sp-flt spt-y (meters 0.0)) + (sp-rnd-flt spt-z 16384.0 4096.0 1.0) + (sp-flt spt-scale-x (meters 3.2)) + (sp-flt spt-scale-y (meters 1.0)) + (sp-flt spt-r 150.0) + (sp-flt spt-g 150.0) + (sp-flt spt-b 255.0) + (sp-flt spt-a 0.0) + (sp-rnd-flt spt-omega 0.0 65536.0 1.0) + (sp-flt spt-vel-x (meters 0.053333335)) + (sp-flt spt-vel-y (meters 0.0)) + (sp-flt spt-vel-z (meters -0.01)) + (sp-flt spt-scalevel-x (meters -0.004888889)) + (sp-flt spt-fade-a 0.42666668) + (sp-int spt-timer 450) + (sp-cpuinfo-flags bit2 bit3 bit7) + (sp-int-plain-rnd spt-next-time 37 36 1) + (sp-launcher-by-id spt-next-launcher 1740) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1740) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 2 + (sp-flt spt-fade-a 0.0) + (sp-end) + ) + ) + ) + +;; failed to figure out what this is: +(set! + (-> *part-id-table* 1738) + (new 'static 'sparticle-launcher + :init-specs + (new 'static 'inline-array sp-field-init-spec 12 + (sp-tex spt-texture (new 'static 'texture-id :index #x9 :page #x2)) + (sp-flt spt-num 1.0) + (sp-rnd-flt spt-scale-x (meters 0.3) (meters 0.1) 1.0) + (sp-copy-from-other spt-scale-y -4) + (sp-flt spt-r 255.0) + (sp-flt spt-g 255.0) + (sp-flt spt-b 255.0) + (sp-rnd-flt spt-a 32.0 32.0 1.0) + (sp-flt spt-fade-a -1.8285716) + (sp-int spt-timer 30) + (sp-cpuinfo-flags bit2 bit3) + (sp-end) + ) + ) + ) + +;; definition for method 20 of type whirlpool +(defmethod dummy-20 whirlpool ((obj whirlpool) (arg0 float)) + (let* ((gp-0 (target-pos 0)) + (f28-0 (vector-vector-xz-distance (-> obj root-override trans) gp-0)) + ) + (when (< f28-0 40960.0) + (let* ((f0-2 (* 0.000024414063 (- 40960.0 f28-0))) + (f26-0 (* f0-2 f0-2)) + (f0-7 + (atan + (- (-> gp-0 x) (-> obj root-override trans x)) + (- (-> gp-0 z) (-> obj root-override trans z)) + ) + ) + (f30-0 (* 0.5 f26-0 arg0 (-> *display* seconds-per-frame))) + (f24-0 (+ f0-7 f30-0)) + (f28-1 + (- + f28-0 + (fmin + f28-0 + (* 0.16874999 f26-0 (fabs arg0) (-> *display* seconds-per-frame)) + ) + ) + ) + (s4-1 (new 'stack-no-clear 'vector)) + ) + (set-vector! s4-1 (* (sin f24-0) f28-1) 0.0 (* (cos f24-0) f28-1) 1.0) + (vector+! s4-1 s4-1 (-> obj root-override trans)) + (set! + (-> s4-1 x) + (* (- (-> s4-1 x) (-> gp-0 x)) (-> *display* frames-per-second)) + ) + (set! (-> s4-1 y) 0.0) + (set! + (-> s4-1 z) + (* (- (-> s4-1 z) (-> gp-0 z)) (-> *display* frames-per-second)) + ) + (let ((gp-1 (-> *target* control))) + (send-event (-> gp-1 process) 'rotate-y-angle f30-0) + (dummy-32 gp-1 8192.0 (-> gp-1 root-prim collide-with)) + (let ((s3-0 (-> gp-1 status))) + (dummy-37 gp-1 s4-1) + (set! (-> gp-1 status) s3-0) + s3-0 + ) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate whirlpool-idle (whirlpool) + :trans + (behavior () + (let + ((f30-0 + (+ + (* + (get-current-phase-with-mirror (-> self sync)) + (-> self spin-speed-delta) + ) + (-> self spin-speed-idle) + ) + ) + ) + (when (>= (fabs f30-0) 45511.11) + (let ((a1-0 (new 'stack-no-clear 'vector))) + (set! (-> a1-0 quad) (-> self root-override trans quad)) + (set! (-> a1-0 y) (+ -8192.0 (-> a1-0 y))) + (spawn (-> self part) a1-0) + ) + ) + (+! (-> self spin-ry) (* f30-0 (-> *display* seconds-per-frame))) + (quaternion-axis-angle! + (-> self root-override quat) + 0.0 + 1.0 + 0.0 + (-> self spin-ry) + ) + (if (and *target* (logtest? (-> *target* water flags) 512)) + (dummy-20 self f30-0) + ) + (update! (-> self sound)) + (let + ((f0-9 + (fmin 1.0 (* 0.000007608261 (fmax 0.0 (+ -28580.979 (fabs f30-0))))) + ) + ) + (update-vol! (-> self sound) (the int (* 100.0 f0-9))) + ) + ) + (none) + ) + :code + (the-as (function none :behavior whirlpool) anim-loop) + :post + (the-as (function none :behavior whirlpool) ja-post) + ) + +;; definition for method 10 of type whirlpool +(defmethod deactivate whirlpool ((obj whirlpool)) + (if (nonzero? (-> obj sound)) + (stop! (-> obj sound)) + ) + ((method-of-type process-drawable deactivate) obj) + (none) + ) + +;; definition for method 11 of type whirlpool +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defmethod copy-defaults! whirlpool ((obj whirlpool) (arg0 res-lump)) + (local-vars (sv-16 res-tag)) + (set! (-> obj spin-ry) (rand-vu-float-range 0.0 65536.0)) + (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 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-vector! (-> s3-0 local-sphere) 0.0 -819.2 0.0 11468.8) + ) + (dummy-46 s4-0) + (set! (-> s4-0 nav-radius) (* 0.75 (-> s4-0 root-prim local-sphere w))) + (dummy-50 s4-0) + (set! (-> obj root-override) s4-0) + ) + (process-drawable-from-entity! obj arg0) + (initialize-skeleton obj *whirlpool-sg* '()) + (load-params! (-> obj sync) obj (the-as uint 1500) 0.0 0.15 0.15) + (let ((f30-0 32768.0) + (f28-0 145635.56) + ) + (set! sv-16 (new 'static 'res-tag)) + (let ((v1-17 (res-lump-data arg0 'speed (pointer float) :tag-ptr (& sv-16)))) + (when v1-17 + (set! f30-0 (-> v1-17 0)) + (set! f28-0 (-> v1-17 1)) + ) + ) + (set! (-> obj spin-speed-idle) f30-0) + (set! (-> obj spin-speed-delta) (- f28-0 f30-0)) + ) + (set! + (-> obj part) + (create-launch-control (-> *part-group-id-table* 447) obj) + ) + (set! + (-> obj sound) + (new + 'process + 'ambient-sound + (new 'static 'sound-spec + :mask #x80 + :num 1.0 + :group #x1 + :sound-name (static-sound-name "whirlpool") + :volume #x400 + :fo-max 55 + ) + (-> obj root-override trans) + ) + ) + (ja-channel-set! 1) + (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 2)) + num-func-identity + ) + (set! (-> s5-1 frame-num) 0.0) + ) + (ja-post) + (dummy-47 (-> obj root-override)) + (go whirlpool-idle) + (none) + ) diff --git a/test/decompiler/reference/levels/swamp/billy_REF.gc b/test/decompiler/reference/levels/swamp/billy_REF.gc new file mode 100644 index 0000000000..ed989e9689 --- /dev/null +++ b/test/decompiler/reference/levels/swamp/billy_REF.gc @@ -0,0 +1,2113 @@ +;;-*-Lisp-*- +(in-package goal) + +;; definition of type billy +(deftype billy (process-taskable) + ((child-override (pointer billy-snack) :offset 20) + (farthy handle :offset-assert 384) + (path-data path-control 3 :offset-assert 392) + (path-snacks path-control :offset 392) + (path-starts path-control :offset 396) + (path-waypts path-control :offset 400) + (passed-last-stage symbol :offset-assert 404) + (spawn-rats symbol :offset-assert 408) + (current-wave int32 :offset-assert 412) + (wave-start-time uint64 :offset-assert 416) + (num-snacks int32 :offset-assert 424) + (num-rats int32 :offset-assert 428) + (max-rats int32 :offset-assert 432) + (rat-speed float :offset-assert 436) + (offending-rat handle :offset-assert 440) + ) + :heap-base #x150 + :method-count-assert 53 + :size-assert #x1c0 + :flag-assert #x35015001c0 + (:states + billy-done + billy-playing + ) + ) + +;; definition for method 3 of type billy +(defmethod inspect billy ((obj billy)) + (let ((t9-0 (method-of-type process-taskable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tfarthy: ~D~%" (-> obj farthy)) + (format #t "~T~Tpath-data[3] @ #x~X~%" (-> obj path-data)) + (format #t "~T~Tpath-snacks: ~A~%" (-> obj path-snacks)) + (format #t "~T~Tpath-starts: ~A~%" (-> obj path-starts)) + (format #t "~T~Tpath-waypts: ~A~%" (-> obj path-waypts)) + (format #t "~T~Tpassed-last-stage: ~A~%" (-> obj passed-last-stage)) + (format #t "~T~Tspawn-rats: ~A~%" (-> obj spawn-rats)) + (format #t "~T~Tcurrent-wave: ~D~%" (-> obj current-wave)) + (format #t "~T~Twave-start-time: ~D~%" (-> obj wave-start-time)) + (format #t "~T~Tnum-snacks: ~D~%" (-> obj num-snacks)) + (format #t "~T~Tnum-rats: ~D~%" (-> obj num-rats)) + (format #t "~T~Tmax-rats: ~D~%" (-> obj max-rats)) + (format #t "~T~Trat-speed: ~f~%" (-> obj rat-speed)) + (format #t "~T~Toffending-rat: ~D~%" (-> obj offending-rat)) + obj + ) + +;; definition for method 7 of type billy +;; INFO: Return type mismatch process-drawable vs billy. +(defmethod relocate billy ((obj billy) (arg0 int)) + (countdown (v1-0 3) + (if (nonzero? (-> obj path-data v1-0)) + (&+! (-> obj path-data v1-0) arg0) + ) + ) + (the-as + billy + ((the-as + (function process-drawable int process-drawable) + (find-parent-method billy 7) + ) + obj + arg0 + ) + ) + ) + +;; definition of type billy-snack +(deftype billy-snack (process-drawable) + ((num-rats int32 :offset-assert 176) + ) + :heap-base #x50 + :method-count-assert 20 + :size-assert #xb4 + :flag-assert #x14005000b4 + (:states + billy-snack-eat + billy-snack-idle + ) + ) + +;; definition for method 3 of type billy-snack +(defmethod inspect billy-snack ((obj billy-snack)) + (let ((t9-0 (method-of-type process-drawable inspect))) + (t9-0 obj) + ) + (format #t "~T~Tnum-rats: ~D~%" (-> obj num-rats)) + obj + ) + +;; failed to figure out what this is: +(defskelgroup *farthy-snack-sg* farthy-snack + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +;; failed to figure out what this is: +(defstate billy-snack-eat (billy-snack) + :code + (behavior () + (let ((v1-2 (-> self skel root-channel 0))) + (set! + (-> v1-2 frame-group) + (the-as art-joint-anim (-> self draw art-group data 3)) + ) + ) + (let ((a0-3 (-> self skel root-channel 0))) + (set! (-> a0-3 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-3 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) 1.0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! a0-3 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + 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! + ) + ) + ) + (deactivate self) + (while #t + (suspend) + ) + (none) + ) + :post + (the-as (function none :behavior billy-snack) ja-post) + ) + +;; failed to figure out what this is: +(defstate billy-snack-idle (billy-snack) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('eat) + (go billy-snack-eat) + ) + ) + ) + :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 billy-snack) ja-post) + ) + +;; definition for function billy-snack-init-by-other +;; INFO: Return type mismatch object vs none. +;; Used lq/sq +(defbehavior billy-snack-init-by-other billy-snack ((arg0 vector)) + (set! (-> self root) (new 'process 'trsqv)) + (set! (-> self root trans quad) (-> arg0 quad)) + (initialize-skeleton self *farthy-snack-sg* '()) + (set! (-> self num-rats) 0) + (go billy-snack-idle) + (none) + ) + +;; definition of type billy-rat +(deftype billy-rat (swamp-rat) + ((dest-type uint64 :offset-assert 496) + (snack handle :offset-assert 504) + (destination vector :inline :offset-assert 512) + (billy (pointer billy) :offset-assert 528) + ) + :heap-base #x1b0 + :method-count-assert 76 + :size-assert #x214 + :flag-assert #x4c01b00214 + (:states + billy-rat-eat + billy-rat-salivate + ) + ) + +;; definition for method 3 of type billy-rat +(defmethod inspect billy-rat ((obj billy-rat)) + (let ((t9-0 (method-of-type swamp-rat inspect))) + (t9-0 obj) + ) + (format #t "~T~Tdest-type: ~D~%" (-> obj dest-type)) + (format #t "~T~Tsnack: ~D~%" (-> obj snack)) + (format #t "~T~Tdestination: #~%" (-> obj destination)) + (format #t "~T~Tbilly: #x~X~%" (-> obj billy)) + obj + ) + +;; definition for function rat-about-to-eat? +;; INFO: Return type mismatch basic vs symbol. +(defun rat-about-to-eat? ((arg0 billy-rat) (arg1 billy)) + (the-as + symbol + (and + (= (-> arg0 dest-type) 2) + (> (-> arg1 num-snacks) 0) + (handle->process (-> arg0 snack)) + ) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-idle (billy-rat) + :virtual #t + :enter + (behavior () + (go-virtual nav-enemy-chase) + (none) + ) + :post + (the-as (function none :behavior billy-rat) nav-enemy-common-post) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-die (billy-rat) + :virtual #t + :code + (behavior () + (nav-enemy-fall-and-play-death-anim + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info die-anim)) + ) + 1.0 + 1.0 + 1000000000000000.0 + 600 + ) + (send-event (ppointer->process (-> self billy)) 'billy-rat-die) + (dummy-18 self) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate billy-rat-eat (billy-rat) + :trans + (behavior () + (seek-to-point-toward-point! + (-> self collide-info) + (-> self destination) + 131072.0 + 3 + ) + (none) + ) + :code + (behavior () + (send-event (handle->process (-> self snack)) 'eat) + (sound-play-by-name + (static-sound-name "rat-gulp") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (ja-channel-push! 1 15) + (let ((v1-8 (-> self skel root-channel 0))) + (set! + (-> v1-8 frame-group) + (the-as art-joint-anim (-> self draw art-group data 12)) + ) + ) + (let ((a0-9 (-> self skel root-channel 0))) + (set! (-> a0-9 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-9 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-9 param 1) 1.0) + (set! (-> a0-9 frame-num) 0.0) + (joint-control-channel-group! a0-9 (if (> (-> self skel active-channels) 0) + (-> + self + skel + root-channel + 0 + frame-group + ) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-10 (-> self skel root-channel 0))) + (set! + (-> a0-10 param 0) + (the float (+ (-> a0-10 frame-group data 0 length) -1)) + ) + (set! (-> a0-10 param 1) 1.0) + (joint-control-channel-group-eval! + a0-10 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + (send-event (ppointer->process (-> self billy)) 'billy-rat-needs-destination) + (logclear! (-> self nav flags) (nav-control-flags bit19)) + (go-virtual nav-enemy-chase) + (none) + ) + :post + (the-as (function none :behavior billy-rat) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(defstate billy-rat-salivate (billy-rat) + :event + (the-as + (function process int symbol event-message-block object :behavior billy-rat) + nav-enemy-default-event-handler + ) + :code + (behavior () + (ja-channel-push! 1 22) + (dotimes (gp-0 1) + (sound-play-by-name + (static-sound-name "rat-eat") + (new-sound-id) + 1024 + 0 + 0 + 1 + #t + ) + (let ((f30-0 (nav-enemy-rnd-float-range 0.8 1.2))) + (let ((a0-3 (-> self skel root-channel 0))) + (set! + (-> a0-3 frame-group) + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + ) + (set! + (-> a0-3 param 0) + (the + float + (+ + (-> + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-3 param 1) f30-0) + (set! (-> a0-3 frame-num) 0.0) + (joint-control-channel-group! + a0-3 + (the-as + art-joint-anim + (-> self draw art-group data (-> self nav-info victory-anim)) + ) + 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) f30-0) + (joint-control-channel-group-eval! + a0-4 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (send-event (ppointer->process (-> self billy)) 'billy-rat-needs-destination) + (if (= (-> self dest-type) 3) + (go billy-rat-eat) + (go-virtual nav-enemy-chase) + ) + (none) + ) + :post + (the-as (function none :behavior billy-rat) nav-enemy-simple-post) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-victory (billy-rat) + :virtual #t + :enter + (behavior () + (let + ((t9-1 + (-> (the-as (state nav-enemy) (find-parent-method billy-rat 33)) enter) + ) + ) + (if t9-1 + (t9-1) + ) + ) + (when (logtest? (nav-control-flags bit19) (-> self nav flags)) + (logclear! (-> self nav flags) (nav-control-flags bit19)) + (if (rat-about-to-eat? self (-> self billy 0)) + (go billy-rat-salivate) + (send-event + (ppointer->process (-> self billy)) + 'billy-rat-needs-destination + ) + ) + ) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-stare (billy-rat) + :virtual #t + :enter + (behavior () + (go-virtual nav-enemy-chase) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate nav-enemy-chase (billy-rat) + :virtual #t + :trans + (behavior () + (set! (-> self speed-scale) (-> self billy 0 rat-speed)) + (if + (or + (logtest? (nav-control-flags bit19) (-> self nav flags)) + (>= + (- (-> *display* base-frame-counter) (-> self state-time)) + (the-as int (-> self chase-rest-time)) + ) + ) + (go-virtual nav-enemy-victory) + ) + (none) + ) + :post + (behavior () + (swamp-rat-update-wiggle-target (-> self destination)) + (nav-enemy-travel-post) + (none) + ) + ) + +;; definition for function billy-rat-init-by-other +;; Used lq/sq +(defbehavior + billy-rat-init-by-other billy-rat + ((arg0 billy) (arg1 vector) (arg2 vector)) + (set! (-> self billy) (the-as (pointer billy) (process->ppointer arg0))) + (set! (-> self destination quad) (-> arg2 quad)) + (set! (-> self dest-type) (the-as uint 1)) + (let ((s4-0 (new 'stack-no-clear 'vector))) + (vector-! s4-0 arg2 arg1) + (set! (-> s4-0 y) 0.0) + (vector-normalize! s4-0 1.0) + (swamp-rat-init-by-other arg0 arg1 s4-0 (pickup-type none) #t) + ) + (none) + ) + +;; failed to figure out what this is: +(defskelgroup *billy-sg* billy + 0 + 3 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 2) + :longest-edge (meters 1) + :shadow 2 + ) + +;; failed to figure out what this is: +(defskelgroup *billy-sidekick-sg* billy-sidekick + 0 + 2 + ((1 (meters 999999))) + :bounds (static-spherem 0 0 0 4) + :longest-edge (meters 0) + ) + +;; definition for function billy-kill-all-but-farthy +(defbehavior billy-kill-all-but-farthy billy () + (let* ((gp-0 (the-as (pointer process-tree) (-> self child-override))) + (s5-0 (-> (the-as (pointer billy-snack) gp-0) 0 brother)) + ) + (while gp-0 + (if + (not + (or + (= gp-0 (-> self farthy process)) + (type-type? (-> (ppointer->process gp-0) type) fuel-cell) + ) + ) + (deactivate (-> gp-0 0)) + ) + (set! gp-0 s5-0) + (set! s5-0 (-> gp-0 0 brother)) + ) + ) + #f + ) + +;; definition for method 32 of type billy +(defmethod play-anim! billy ((obj billy) (arg0 symbol)) + (case (current-status (-> obj tasks)) + (((task-status need-hint) (task-status need-introduction)) + (when arg0 + (set! (-> obj blend-on-exit) #t) + (close-status! (-> obj tasks) (task-status need-introduction)) + (let ((s5-1 (new 'stack-no-clear 'vector))) + (dotimes + (s4-0 + (+ + (the int (the float (+ (-> obj path-snacks curve num-cverts) -1))) + 1 + ) + ) + (eval-path-curve-div! (-> obj path-snacks) s5-1 (the float s4-0) 'exact) + (set! (-> s5-1 x) (+ -40960.0 (-> s5-1 x))) + (set! (-> s5-1 z) (+ 20480.0 (-> s5-1 z))) + (let ((s3-0 (get-process *default-dead-pool* manipy #x4000))) + (when s3-0 + (let ((t9-4 (method-of-type manipy activate))) + (t9-4 (the-as manipy s3-0) obj 'manipy (the-as pointer #x70004000)) + ) + (run-now-in-process + s3-0 + manipy-init + s5-1 + (-> obj entity) + *farthy-snack-sg* + #f + ) + (-> s3-0 ppointer) + ) + ) + ) + ) + ) + (new 'static 'spool-anim + :name "billy-introduction" + :index 5 + :parts 14 + :command-list + '( + (0 + kill + "swamp-blimp-3" + ) + (0 + kill + "swamp-tetherrock-14" + ) + (0 + kill + "swamp-tetherrock-15" + ) + (0 + kill + "flutflut-3" + ) + (0 + kill + "tar-plat-26" + ) + (0 + kill + "tar-plat-25" + ) + (0 + kill + "babak-380" + ) + (0 + kill + "eco-164" + ) + (0 + kill + "eco-165" + ) + (0 + kill + "eco-140" + ) + (0 + kill + "launcher-97" + ) + (0 + kill + "swamp-rat-nest-5" + ) + (0 + kill + "swamp-rat-nest-4" + ) + (0 + kill + "swamp-rat-nest-3" + ) + (0 + kill + "swamp-rat-nest-2" + ) + (0 + kill + "sharkey-9" + ) + (0 + kill + "launcher-46" + ) + (0 + kill + "launcher-44" + ) + (0 + kill + "launcher-42" + ) + (0 + kill + "swamp-spike-43" + ) + (0 + kill + "swamp-spike-44" + ) + (0 + kill + "swamp-spike-45" + ) + ((the binteger 346) + blackout + (the binteger 10) + ) + ((the binteger 349) + blackout + 0 + ) + ((the binteger 494) + blackout + (the binteger 10) + ) + ((the binteger 497) + blackout + 0 + ) + ((the binteger 1145) + blackout + (the binteger 10) + ) + ((the binteger 1148) + blackout + 0 + ) + ((the binteger 1518) + blackout + (the binteger 10) + ) + ((the binteger 1521) blackout 0) + ) + ) + ) + (((task-status need-reminder-a) (task-status need-reminder)) + (set! (-> obj skippable) #t) + (set! (-> obj blend-on-exit) #t) + (set! (-> obj will-talk) #t) + (new 'static 'spool-anim + :name "billy-reminder-1" + :index 8 + :parts 2 + :command-list + '( + (0 + kill + "swamp-blimp-3" + ) + (0 + kill + "swamp-tetherrock-14" + ) + (0 + kill + "swamp-tetherrock-15" + ) + (0 + kill + "flutflut-3" + ) + (0 + kill + "tar-plat-26" + ) + (0 + kill + "tar-plat-25" + ) + (0 + kill + "babak-380" + ) + (0 + kill + "eco-164" + ) + (0 + kill + "eco-165" + ) + (0 + kill + "eco-140" + ) + (0 + kill + "launcher-97" + ) + (0 + kill + "swamp-rat-nest-5" + ) + (0 + kill + "swamp-rat-nest-4" + ) + (0 + kill + "swamp-rat-nest-3" + ) + (0 + kill + "swamp-rat-nest-2" + ) + (0 + kill + "sharkey-9" + ) + (0 + kill + "launcher-46" + ) + (0 + kill + "launcher-44" + ) + (0 + kill + "launcher-42" + ) + (0 + kill + "swamp-spike-43" + ) + (0 kill "swamp-spike-44") (0 kill "swamp-spike-45") + ) + ) + ) + (((task-status need-reward-speech)) + (when arg0 + (set! (-> obj cell-for-task) (current-task (-> obj tasks))) + (close-current! (-> obj tasks)) + ) + (new 'static 'spool-anim + :name "billy-resolution" + :index 9 + :parts 2 + :command-list + '( + (0 + kill + "swamp-blimp-3" + ) + (0 + kill + "swamp-tetherrock-14" + ) + (0 + kill + "swamp-tetherrock-15" + ) + (0 + kill + "flutflut-3" + ) + (0 + kill + "tar-plat-26" + ) + (0 + kill + "tar-plat-25" + ) + (0 + kill + "babak-380" + ) + (0 + kill + "eco-164" + ) + (0 + kill + "eco-165" + ) + (0 + kill + "eco-140" + ) + (0 + kill + "launcher-97" + ) + (0 + kill + "swamp-rat-nest-5" + ) + (0 + kill + "swamp-rat-nest-4" + ) + (0 + kill + "swamp-rat-nest-3" + ) + (0 + kill + "swamp-rat-nest-2" + ) + (0 + kill + "sharkey-9" + ) + (0 + kill + "launcher-46" + ) + (0 + kill + "launcher-44" + ) + (0 + kill + "launcher-42" + ) + (0 + kill + "swamp-spike-43" + ) + (0 kill "swamp-spike-44") (0 kill "swamp-spike-45") + ) + ) + ) + (else + (if arg0 + (format + 0 + "ERROR: : ~S playing anim for task status ~S~%" + (-> obj name) + (task-status->string (current-status (-> obj tasks))) + ) + ) + (-> obj draw art-group data 3) + ) + ) + ) + +;; definition for method 31 of type billy +(defmethod get-art-elem billy ((obj billy)) + (case (current-status (-> obj tasks)) + (((task-status invalid) (task-status need-resolution)) + (-> obj draw art-group data 10) + ) + (else + (-> obj draw art-group data 3) + ) + ) + ) + +;; definition for method 38 of type billy +(defmethod dummy-38 billy ((obj billy)) + (case (current-status (-> obj tasks)) + (((task-status need-reminder-a) (task-status need-reminder)) + (go (method-of-object obj query)) + ) + (((task-status need-reward-speech)) + (go (method-of-object obj play-anim)) + ) + (else + ((the-as (function nav-enemy none) (find-parent-method billy 38)) + (the-as nav-enemy obj) + ) + ) + ) + (none) + ) + +;; definition for method 34 of type billy +(defmethod get-accept-anim billy ((obj billy) (arg0 symbol)) + (if arg0 + (close-current! (-> obj tasks)) + ) + (new 'static 'spool-anim + :name "billy-accept" + :index 6 + :parts 3 + :command-list '() + ) + ) + +;; definition for method 36 of type billy +(defmethod get-reject-anim billy ((obj billy) (arg0 symbol)) + (new 'static 'spool-anim + :name "billy-reject" + :index 7 + :parts 3 + :command-list '() + ) + ) + +;; failed to figure out what this is: +(defstate billy-done (billy) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (let ((v1-0 arg2)) + (the-as object (when (= v1-0 'billy-rat-needs-destination) + (let* ((gp-0 arg0) + (v1-2 + (if + (and + (nonzero? gp-0) + (type-type? (-> gp-0 type) billy-rat) + ) + gp-0 + ) + ) + ) + (when v1-2 + (set! + (-> (the-as billy-rat v1-2) dest-type) + (the-as uint 1) + ) + (get-random-point + (-> self path-waypts) + (-> (the-as billy-rat v1-2) destination) + ) + ) + ) + ) + ) + ) + ) + :enter + (behavior () + (init! + (-> self query) + (lookup-text! *common-text* (game-text-id play-again?) #f) + 40 + 150 + 30 + #f + (lookup-text! *common-text* (game-text-id quit) #f) + ) + (ja-channel-set! 1) + (let ((gp-1 (-> self skel root-channel 0))) + (set! (-> gp-1 frame-group) (the-as art-joint-anim (get-art-elem self))) + ) + (send-event *target* 'end-mode) + (when + (and (handle->process (-> self offending-rat)) (zero? (-> self num-snacks))) + (send-event + *camera* + 'change-target + (handle->process (-> self offending-rat)) + ) + (send-event *camera* 'change-state cam-standoff 0) + (send-event *camera* 'set-standoff-height 0.0) + (send-event *camera* 'set-standoff-dist 20480.0) + (send-event *camera* 'set-standoff-height 16384.0) + (send-event *camera-combiner* 'stop-tracking) + (send-event + *camera-combiner* + 'start-tracking + (ppointer->process (-> *camera* slave 0)) + ) + (let ((a0-24 (get-reminder (-> self tasks) 0))) + (save-reminder (-> self tasks) (seekl a0-24 255 1) 0) + ) + (let* ((v1-49 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-50 (the-as number (logior #x3f800000 v1-49))) + (f0-2 (+ -1.0 (the-as float v1-50))) + ) + (cond + ((< 0.75 f0-2) + (play-ambient (-> self ambient) "BIL-TA04" #t (the-as vector #f)) + ) + ((< 0.5 f0-2) + (play-ambient (-> self ambient) "BIL-TA05" #t (the-as vector #f)) + ) + ((< 0.25 f0-2) + (play-ambient (-> self ambient) "BIL-TA4A" #t (the-as vector #f)) + ) + (else + (play-ambient (-> self ambient) "BIL-TA5A" #t (the-as vector #f)) + ) + ) + ) + ) + (none) + ) + :exit + (behavior () + (billy-kill-all-but-farthy) + (send-event *camera* 'change-target *target*) + (send-event *camera* 'change-state *camera-base-mode* 0) + (none) + ) + :trans + (behavior () + (cond + ((> (-> self num-snacks) 0) + (when (process-grab? *target*) + (close-current! (-> self tasks)) + (go-virtual play-anim) + ) + ) + ((< (-> self num-snacks) 0) + (go-virtual idle) + ) + (else + (process-grab? *target*) + (when (and *target* (logtest? (-> *target* state-flags) 256)) + (let ((gp-0 (get-response (-> self query)))) + (cond + ((and (= gp-0 'yes) (process-release? *target*)) + (go-virtual enter-playing) + ) + ((= gp-0 'no) + (go-virtual play-reject) + ) + ) + ) + ) + ) + ) + (spool-push *art-control* "billy-reject" 0 self -99.0) + (none) + ) + :code + (the-as (function none :behavior billy) process-taskable-anim-loop) + :post + (behavior () + (ja-post) + (none) + ) + ) + +;; definition for function billy-game-update-wave +;; INFO: Return type mismatch int vs none. +(defbehavior billy-game-update-wave billy () + (let* + ((a0-2 + (/ (the-as uint (+ (get-reminder (-> self tasks) 0) 1)) (the-as uint 5)) + ) + (v1-4 (min 3 (the-as int a0-2))) + ) + (cond + ((zero? v1-4) + (let ((v1-5 (-> self current-wave))) + (cond + ((zero? v1-5) + (set! (-> self max-rats) 6) + (set! (-> self rat-speed) 1.0) + (set! (-> self spawn-rats) #t) + (set! (-> self passed-last-stage) #f) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 4500 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-5 2) + (set! (-> self max-rats) 8) + (set! (-> self rat-speed) 1.2) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 6000 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-5 4) + (set! (-> self max-rats) 10) + (set! (-> self rat-speed) 1.35) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 7500 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + ) + ) + ((= v1-4 1) + (let ((v1-30 (-> self current-wave))) + (cond + ((zero? v1-30) + (set! (-> self max-rats) 6) + (set! (-> self rat-speed) 1.0) + (set! (-> self spawn-rats) #t) + (set! (-> self passed-last-stage) #f) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 4500 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-30 2) + (set! (-> self max-rats) 7) + (set! (-> self rat-speed) 1.2) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 6000 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-30 4) + (set! (-> self max-rats) 10) + (set! (-> self rat-speed) 1.3) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 6600 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + ) + ) + ((= v1-4 2) + (let ((v1-55 (-> self current-wave))) + (cond + ((zero? v1-55) + (set! (-> self max-rats) 6) + (set! (-> self rat-speed) 1.0) + (set! (-> self spawn-rats) #t) + (set! (-> self passed-last-stage) #f) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 4500 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-55 2) + (set! (-> self max-rats) 7) + (set! (-> self rat-speed) 1.1) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 5400 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-55 4) + (set! (-> self max-rats) 9) + (set! (-> self rat-speed) 1.25) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 6000 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + ) + ) + (else + (let ((v1-80 (-> self current-wave))) + (cond + ((zero? v1-80) + (set! (-> self max-rats) 5) + (set! (-> self rat-speed) 0.9) + (set! (-> self spawn-rats) #t) + (set! (-> self passed-last-stage) #f) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 4500 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-80 2) + (set! (-> self max-rats) 6) + (set! (-> self rat-speed) 1.0) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 5400 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ((= v1-80 4) + (set! (-> self max-rats) 8) + (set! (-> self rat-speed) 1.1) + (set! (-> self spawn-rats) #t) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 6000 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + ) + ) + ) + ) + (none) + ) + +;; definition for function billy-game-update +;; INFO: Return type mismatch int vs none. +(defbehavior billy-game-update billy () + (let ((v1-0 (-> self current-wave))) + (cond + ((or (zero? v1-0) (= v1-0 2) (= v1-0 4)) + (billy-game-update-wave) + ) + ((= v1-0 5) + (set! (-> self spawn-rats) #f) + (set! (-> self passed-last-stage) #t) + ) + ((begin + (set! (-> self spawn-rats) #f) + (zero? (-> self num-rats)) + ) + (when + (>= + (- + (-> *display* base-frame-counter) + (the-as int (-> self wave-start-time)) + ) + 900 + ) + (+! (-> self current-wave) 1) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + (else + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + ) + ) + ) + (when (and (< (-> self num-rats) (-> self max-rats)) (-> self spawn-rats)) + (let ((gp-0 (new 'stack-no-clear 'vector)) + (s5-0 (new 'stack-no-clear 'vector)) + ) + (get-random-point (-> self path-starts) gp-0) + (get-random-point (-> self path-waypts) s5-0) + (let ((s4-0 (get-process *default-dead-pool* billy-rat #x4000))) + (if (when s4-0 + (let ((t9-4 (method-of-type billy-rat activate))) + (t9-4 + (the-as billy-rat s4-0) + self + 'billy-rat + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s4-0 billy-rat-init-by-other self gp-0 s5-0) + (-> s4-0 ppointer) + ) + (+! (-> self num-rats) 1) + ) + ) + ) + ) + 0 + (none) + ) + +;; failed to figure out what this is: +(defstate billy-playing (billy) + :event + (behavior ((arg0 process) (arg1 int) (arg2 symbol) (arg3 event-message-block)) + (case arg2 + (('billy-rat-die) + (+! (-> self num-rats) -1) + (let* ((v1-4 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-5 (the-as number (logior #x3f800000 v1-4))) + (f0-2 (+ -1.0 (the-as float v1-5))) + (f0-3 (* 3.0 f0-2)) + ) + (cond + ((< 1.0 f0-3) + #f + ) + ((< 0.8333333 f0-3) + (play-ambient (-> self ambient) "SKSP009F" #t (the-as vector #f)) + ) + ((< 0.6666667 f0-3) + (play-ambient (-> self ambient) "BIL-TA02" #t (the-as vector #f)) + ) + ((< 0.5 f0-3) + (play-ambient (-> self ambient) "BIL-TA08" #t (the-as vector #f)) + ) + ((< 0.33333334 f0-3) + (play-ambient (-> self ambient) "BIL-TA09" #t (the-as vector #f)) + ) + ((< 0.16666667 f0-3) + (play-ambient (-> self ambient) "BIL-TA2A" #t (the-as vector #f)) + ) + (else + (play-ambient (-> self ambient) "BIL-TA4B" #t (the-as vector #f)) + ) + ) + ) + ) + (('billy-rat-needs-destination) + (let* ((s5-0 arg0) + (gp-0 + (if (and (nonzero? s5-0) (type-type? (-> s5-0 type) billy-rat)) + (the-as billy-rat s5-0) + ) + ) + ) + (when gp-0 + (let* ((v1-15 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-16 (the-as number (logior #x3f800000 v1-15))) + (f0-6 (+ -1.0 (the-as float v1-16))) + ) + (cond + ((< 0.75 f0-6) + (play-ambient (-> self ambient) "BIL-TA01" #t (the-as vector #f)) + ) + ((< 0.5 f0-6) + (play-ambient (-> self ambient) "BIL-TA03" #t (the-as vector #f)) + ) + ((< 0.25 f0-6) + (play-ambient (-> self ambient) "BIL-TA1A" #t (the-as vector #f)) + ) + (else + (play-ambient (-> self ambient) "BIL-TA3A" #t (the-as vector #f)) + ) + ) + ) + (cond + ((rat-about-to-eat? gp-0 self) + (set! (-> self num-snacks) 0) + (set! (-> self offending-rat) (process->handle gp-0)) + (set! (-> gp-0 dest-type) (the-as uint 3)) + (let ((v0-1 (the-as object (-> gp-0 destination)))) + (set! + (-> (the-as vector v0-1) quad) + (-> (the-as billy-snack (-> gp-0 snack process 0)) root trans quad) + ) + v0-1 + ) + ) + ((or + (= (-> gp-0 dest-type) 2) + (= (-> gp-0 dest-type) 3) + (<= (-> self num-snacks) 0) + ) + (set! (-> gp-0 dest-type) (the-as uint 1)) + (get-random-point (-> self path-starts) (-> gp-0 destination)) + ) + (else + (let ((s3-0 100) + (s4-0 0) + (s2-0 (the-as (pointer process-tree) (-> self child-override))) + (s5-1 (the-as process-tree #f)) + ) + (while s2-0 + (let* ((s1-0 (ppointer->process s2-0)) + (v1-47 + (if + (and + (nonzero? s1-0) + (type-type? (-> s1-0 type) billy-snack) + ) + s1-0 + ) + ) + ) + (cond + ((not v1-47) + ) + ((< (-> (the-as billy-snack v1-47) num-rats) s3-0) + (set! s5-1 v1-47) + (set! s3-0 (-> (the-as billy-snack v1-47) num-rats)) + (set! s4-0 1) + ) + ((= (-> (the-as billy-snack v1-47) num-rats) s3-0) + (+! s4-0 1) + ) + ) + ) + (set! s2-0 (-> s2-0 0 brother)) + ) + (cond + ((zero? s4-0) + (set! (-> gp-0 dest-type) (the-as uint 1)) + (get-random-point (-> self path-waypts) (-> gp-0 destination)) + ) + (else + (set! (-> gp-0 snack) (process->handle (the-as billy-snack s5-1))) + (+! (-> (the-as billy-snack s5-1) num-rats) 1) + (set! (-> gp-0 dest-type) (the-as uint 2)) + (set! + (-> gp-0 destination quad) + (-> (the-as billy-snack s5-1) root trans quad) + ) + (let ((f0-8 (+ 6799.36 (-> gp-0 destination x)))) + (set! (-> gp-0 destination x) f0-8) + f0-8 + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + ) + :enter + (behavior () + (push-setting! *setting-control* self 'music 'danger 0.0 0) + (ja-channel-set! 0) + (dummy-48 (-> self root-override)) + (init! + (-> self query) + (the-as string #f) + 40 + 150 + 25 + #t + (lookup-text! *common-text* (game-text-id quit) #f) + ) + (set! + (-> self wave-start-time) + (the-as uint (-> *display* base-frame-counter)) + ) + (set! (-> self num-snacks) 0) + (set! (-> self num-rats) 0) + (set! (-> self current-wave) 0) + (set! (-> self offending-rat) (the-as handle #f)) + (let ((gp-1 (new 'stack-no-clear 'vector))) + (dotimes + (s5-1 + (+ (the int (the float (+ (-> self path-snacks curve num-cverts) -1))) 1) + ) + (eval-path-curve-div! (-> self path-snacks) gp-1 (the float s5-1) 'exact) + (let ((s4-1 (get-process *default-dead-pool* billy-snack #x4000))) + (if (when s4-1 + (let ((t9-7 (method-of-type billy-snack activate))) + (t9-7 + (the-as billy-snack s4-1) + self + 'billy-snack + (the-as pointer #x70004000) + ) + ) + (run-now-in-process s4-1 billy-snack-init-by-other gp-1) + (-> s4-1 ppointer) + ) + (+! (-> self num-snacks) 1) + ) + ) + ) + ) + (backup-load-state-and-set-cmds *load-state* '()) + (let* + ((gp-2 + '( + (kill + "swamp-blimp-3" + ) + (kill + "swamp-tetherrock-14" + ) + (kill + "swamp-tetherrock-15" + ) + (kill + "flutflut-3" + ) + (kill + "tar-plat-26" + ) + (kill + "tar-plat-25" + ) + (kill + "babak-380" + ) + (kill + "eco-164" + ) + (kill + "eco-165" + ) + (kill + "eco-140" + ) + (kill + "launcher-97" + ) + (kill + "swamp-rat-nest-5" + ) + (kill + "swamp-rat-nest-4" + ) + (kill + "swamp-rat-nest-3" + ) + (kill + "swamp-rat-nest-2" + ) + (kill + "sharkey-9" + ) + (kill + "launcher-46" + ) + (kill + "launcher-44" + ) + (kill + "launcher-42" + ) + (kill "swamp-spike-43") (kill "swamp-spike-44") (kill "swamp-spike-45") + ) + ) + (a1-8 (car gp-2)) + ) + (while (not (null? gp-2)) + (execute-command *load-state* (the-as pair a1-8)) + (set! gp-2 (cdr gp-2)) + (set! a1-8 (car gp-2)) + ) + ) + (none) + ) + :exit + (behavior () + (dummy-49 (-> self root-override)) + (restore-load-state-and-cleanup *load-state*) + (set! (-> *ACTOR-bank* birth-max) 1000) + (clear-pending-settings-from-process *setting-control* self 'music) + (none) + ) + :trans + (behavior () + (spool-push *art-control* "billy-resolution" 0 self -99.0) + (spool-push *art-control* "billy-reject" 0 self -99.0) + (none) + ) + :code + (behavior () + (while #t + (billy-game-update) + (if + (or + (zero? (-> self num-snacks)) + (and (zero? (-> self num-rats)) (-> self passed-last-stage)) + (and + *cheat-mode* + (logtest? (-> *cpad-list* cpads 1 button0-rel 0) (pad-buttons x)) + ) + ) + (go billy-done) + ) + (suspend) + ) + (none) + ) + :post + (behavior () + (ja-post) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate enter-playing (billy) + :virtual #t + :trans + (behavior () + (let ((a1-0 (new 'stack-no-clear 'event-message-block))) + (set! (-> a1-0 from) self) + (set! (-> a1-0 num-params) 1) + (set! (-> a1-0 message) 'change-mode) + (set! (-> a1-0 param 0) (the-as uint 'billy)) + (when (send-event-function *target* a1-0) + (send-event *target* 'trans 'reset) + (let ((v1-8 (entity-actor-lookup (-> self entity) 'alt-actor 0))) + (cond + (v1-8 + (TODO-RENAME-30 (-> *target* control) (-> v1-8 extra trans)) + (go billy-playing) + ) + (else + ) + ) + ) + ) + ) + (none) + ) + ) + +;; definition for method 43 of type billy +(defmethod TODO-RENAME-43 billy ((obj billy)) + (when + (TODO-RENAME-10 + (-> obj ambient) + (new 'stack-no-clear 'vector) + 9000 + 122880.0 + obj + ) + (let* ((v1-3 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-4 (the-as number (logior #x3f800000 v1-3))) + (f30-0 (+ -1.0 (the-as float v1-4))) + ) + (cond + ((< 0.9411765 f30-0) + (play-ambient (-> obj ambient) "BIL-AM01" #f (-> obj root-override trans)) + ) + ((< 0.88235295 f30-0) + (play-ambient (-> obj ambient) "BIL-AM02" #f (-> obj root-override trans)) + ) + ((< 0.8235294 f30-0) + (play-ambient (-> obj ambient) "BIL-AM03" #f (-> obj root-override trans)) + ) + ((< 0.7647059 f30-0) + (play-ambient (-> obj ambient) "BIL-AM04" #f (-> obj root-override trans)) + ) + ((< 0.7058824 f30-0) + (play-ambient (-> obj ambient) "BIL-AM05" #f (-> obj root-override trans)) + ) + ((< 0.64705884 f30-0) + (play-ambient (-> obj ambient) "BIL-AM06" #f (-> obj root-override trans)) + ) + ((< 0.5882353 f30-0) + (play-ambient (-> obj ambient) "BIL-AM07" #f (-> obj root-override trans)) + ) + ((< 0.5294118 f30-0) + (play-ambient (-> obj ambient) "BIL-AM08" #f (-> obj root-override trans)) + ) + ((< 0.47058824 f30-0) + (play-ambient (-> obj ambient) "BIL-AM1A" #f (-> obj root-override trans)) + ) + ((< 0.4117647 f30-0) + (play-ambient (-> obj ambient) "BIL-AM2A" #f (-> obj root-override trans)) + ) + ((< 0.3529412 f30-0) + (play-ambient (-> obj ambient) "BIL-AM2B" #f (-> obj root-override trans)) + ) + ((= (current-status (-> obj tasks)) (task-status invalid)) + #f + ) + ((< 0.29411766 f30-0) + (play-ambient (-> obj ambient) "BIL-LO01" #f (-> obj root-override trans)) + ) + ((< 0.23529412 f30-0) + (play-ambient (-> obj ambient) "BIL-LO02" #f (-> obj root-override trans)) + ) + ((< 0.1764706 f30-0) + (play-ambient (-> obj ambient) "BIL-LO03" #f (-> obj root-override trans)) + ) + ((< 0.11764706 f30-0) + (play-ambient (-> obj ambient) "BIL-LO1A" #f (-> obj root-override trans)) + ) + ((< 0.05882353 f30-0) + (play-ambient (-> obj ambient) "BIL-LO2A" #f (-> obj root-override trans)) + ) + (else + (play-ambient (-> obj ambient) "BIL-LO2B" #f (-> obj root-override trans)) + ) + ) + ) + ) + ) + +;; failed to figure out what this is: +(defstate play-anim (billy) + :virtual #t + :exit + (behavior () + (billy-kill-all-but-farthy) + ((-> (method-of-type process-taskable play-anim) exit)) + (none) + ) + ) + +;; failed to figure out what this is: +(defstate idle (billy) + :virtual #t + :code + (behavior () + (if (!= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (get-art-elem self) + ) + (ja-channel-push! 1 60) + ) + (while #t + (let ((gp-0 (-> self skel root-channel 0))) + (set! (-> gp-0 frame-group) (the-as art-joint-anim (get-art-elem self))) + ) + (let* ((f30-0 5.0) + (v1-9 (/ (the-as int (rand-uint31-gen *random-generator*)) 256)) + (v1-10 (the-as number (logior #x3f800000 v1-9))) + ) + (countdown (gp-1 (+ (the int (* f30-0 (+ -1.0 (the-as float v1-10)))) 5)) + (let ((a0-10 (-> self skel root-channel 0))) + (set! (-> a0-10 frame-group) (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + ) + (set! + (-> a0-10 param 0) + (the float (+ (-> (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-10 param 1) 1.0) + (set! (-> a0-10 frame-num) 0.0) + (joint-control-channel-group! + a0-10 + (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + num-func-seek! + ) + ) + (until (ja-done? 0) + (TODO-RENAME-43 self) + (suspend) + (let ((a0-12 (-> self skel root-channel 0))) + (set! + (-> a0-12 param 0) + (the float (+ (-> a0-12 frame-group data 0 length) -1)) + ) + (set! (-> a0-12 param 1) 1.0) + (joint-control-channel-group-eval! + a0-12 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (when (= (if (> (-> self skel active-channels) 0) + (-> self skel root-channel 0 frame-group) + ) + (-> self draw art-group data 3) + ) + (let ((a0-19 (-> self skel root-channel 0))) + (set! + (-> a0-19 frame-group) + (the-as art-joint-anim (-> self draw art-group data 4)) + ) + (set! + (-> a0-19 param 0) + (the + float + (+ + (-> + (the-as art-joint-anim (-> self draw art-group data 4)) + data + 0 + length + ) + -1 + ) + ) + ) + (set! (-> a0-19 param 1) 1.0) + (set! (-> a0-19 frame-num) 0.0) + (joint-control-channel-group! + a0-19 + (the-as art-joint-anim (-> self draw art-group data 4)) + num-func-seek! + ) + ) + (until (ja-done? 0) + (suspend) + (let ((a0-20 (-> self skel root-channel 0))) + (set! + (-> a0-20 param 0) + (the float (+ (-> a0-20 frame-group data 0 length) -1)) + ) + (set! (-> a0-20 param 1) 1.0) + (joint-control-channel-group-eval! + a0-20 + (the-as art-joint-anim #f) + num-func-seek! + ) + ) + ) + ) + ) + (none) + ) + ) + +;; definition for method 47 of type billy +;; INFO: Return type mismatch basic vs symbol. +(defmethod target-above-threshold? billy ((obj billy)) + (the-as + symbol + (and + *target* + (zero? (logand (-> *target* control root-prim prim-core action) #x4000)) + ) + ) + ) + +;; definition for method 11 of type billy +(defmethod copy-defaults! billy ((obj billy) (arg0 res-lump)) + (dummy-40 obj arg0 *billy-sg* 3 40 (new 'static 'vector :w 4096.0) 5) + (set! (-> obj tasks) (get-task-control (game-task swamp-billy))) + (dotimes (s5-0 3) + (let ((v1-3 (new 'process 'curve-control obj 'path (the float s5-0)))) + (set! (-> obj path-data s5-0) v1-3) + (logior! + (-> v1-3 flags) + (path-control-flag display draw-line draw-point draw-text) + ) + ) + ) + (set! (-> obj path) (-> obj path-snacks)) + (let ((s5-1 (get-process *default-dead-pool* manipy #x4000))) + (set! (-> obj farthy) (ppointer->handle (when s5-1 + (let + ((t9-4 + (method-of-type manipy activate) + ) + ) + (t9-4 + (the-as manipy s5-1) + obj + 'manipy + (the-as pointer #x70004000) + ) + ) + (run-now-in-process + s5-1 + manipy-init + (-> obj root-override trans) + (-> obj entity) + *billy-sidekick-sg* + #f + ) + (-> s5-1 ppointer) + ) + ) + ) + ) + (send-event (handle->process (-> obj farthy)) 'center-joint 3) + (send-event (handle->process (-> obj farthy)) 'anim-mode 'clone-anim) + (dummy-42 obj) + (none) + ) diff --git a/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc b/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc index 1ab9548fba..b3700f22d7 100644 --- a/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc +++ b/test/decompiler/reference/levels/swamp/swamp-rat_REF.gc @@ -901,12 +901,7 @@ swamp-rat-default-event-handler ;; Used lq/sq (defbehavior swamp-rat-init-by-other swamp-rat - ((arg0 swamp-rat-nest) - (arg1 vector) - (arg2 vector) - (arg3 pickup-type) - (arg4 symbol) - ) + ((arg0 billy) (arg1 vector) (arg2 vector) (arg3 pickup-type) (arg4 symbol)) (initialize-collision self) (if arg4 (logclear! (-> self mask) (process-mask actor-pause)) diff --git a/test/decompiler/reference/levels/village1/yakow_REF.gc b/test/decompiler/reference/levels/village1/yakow_REF.gc index b7f72a4aa0..b6a460217f 100644 --- a/test/decompiler/reference/levels/village1/yakow_REF.gc +++ b/test/decompiler/reference/levels/village1/yakow_REF.gc @@ -495,7 +495,11 @@ yakow-default-event-handler (set! (-> gp-1 y) 0.0) (set! (-> self nav travel quad) (-> gp-1 quad)) (vector-normalize! (-> self nav travel) 409600.0) - (dummy-24 (-> self nav) 204.8 #f) + (dummy-24 + (-> self nav) + 204.8 + (the-as clip-travel-vector-to-mesh-return-info #f) + ) (when (not (-> self enable-turn-around)) (set! (-> gp-1 quad) (-> self nav travel quad)) (let ((f30-0 (vector-length gp-1))) @@ -506,7 +510,11 @@ yakow-default-event-handler ) (set! (-> self nav travel quad) (-> s5-1 quad)) (vector-normalize! (-> self nav travel) 409600.0) - (dummy-24 (-> self nav) 204.8 #f) + (dummy-24 + (-> self nav) + 204.8 + (the-as clip-travel-vector-to-mesh-return-info #f) + ) (vector-length (-> self nav travel)) ) ) diff --git a/test/decompiler/reference/levels/village2/village2-obs_REF.gc b/test/decompiler/reference/levels/village2/village2-obs_REF.gc index e5a032f8cd..a5f3781356 100644 --- a/test/decompiler/reference/levels/village2/village2-obs_REF.gc +++ b/test/decompiler/reference/levels/village2/village2-obs_REF.gc @@ -892,7 +892,10 @@ ((handle->process (-> self tracker)) (let ((v1-6 (-> (the-as (pointer part-tracker) (-> self tracker process)) 0))) - (set! (-> v1-6 start-time) (-> *display* base-frame-counter)) + (set! + (-> v1-6 start-time) + (the-as uint (-> *display* base-frame-counter)) + ) (set! v0-1 (-> v1-6 root trans)) ) (set! (-> (the-as vector v0-1) quad) (-> gp-0 quad)) @@ -1131,7 +1134,7 @@ 0 start-time ) - (-> *display* base-frame-counter) + (the-as uint (-> *display* base-frame-counter)) ) ) (else